/*! For license information please see viewer.min.js.LICENSE.txt */ (()=>{"use strict";var t,e;window.requestAnimFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t,e){window.setTimeout(t,1e3/60)},jQuery.support.cors=!0,$.ajaxTransport?($.ajaxSetup({flatOptions:{renderer:!0}}),$.ajaxTransport("+binary",function(t,e,i){if(window.FormData&&(t.dataType&&"binary"==t.dataType||t.data&&(window.ArrayBuffer&&t.data instanceof ArrayBuffer||window.Blob&&t.data instanceof Blob)))return{send:function(e,i){var r=new XMLHttpRequest,n=t.url,s=t.type,a=t.responseType||"blob",o=t.data||null;t.renderer&&r.addEventListener("progress",function(e){e.lengthComputable&&(t.renderer.downloads[this.responseURL]?t.renderer.downloads[this.responseURL].loaded=e.loaded:t.renderer.downloads[this.responseURL]={loaded:e.loaded,total:e.total},t.renderer.updateProgress())}),r.addEventListener("load",function(){t.renderer&&(delete t.renderer.downloads[this.responseURL],t.renderer.updateProgress());var e={};e[t.dataType]=r.response,i(r.status,r.statusText,e,r.getAllResponseHeaders())}),r.open(s,n,!0),r.responseType=a,r.send(o)},abort:function(){i.abort()}}})):(t=$.httpData,$.httpData=function(e,i,r){return"binary"==i?e.response:t(e,i,r)},$.ajaxSetup({beforeSend:function(t,e){"binary"==e.dataType&&(t.responseType=e.responseType||"arraybuffer",t.addEventListener("progress",function(t){e.renderer&&t.lengthComputable&&(e.renderer.downloads[this.responseURL]?e.renderer.downloads[this.responseURL].loaded=t.loaded:e.renderer.downloads[this.responseURL]={loaded:t.loaded,total:t.total},e.renderer.updateProgress())},!1),t.addEventListener("load",function(){e.renderer&&(delete e.renderer.downloads[this.responseURL],e.renderer.updateProgress())},!1))}})),Math.randomInt=Math.randomInt||function(t,e){return Math.floor(Math.random()*(e-t))+t},"function"!=typeof Object.create&&(Object.create=(e=function(){},function(t){if(arguments.length>1)throw Error("Second argument not supported");if("object"!=typeof t)throw TypeError("Argument must be an object");e.prototype=t;var i=new e;return e.prototype=null,i})),window.console=window.console||{log:function(){},error:function(){},warn:function(){}};let i=Float32Array;function r(t,e,r){const n=new i(3);return t&&(n[0]=t),e&&(n[1]=e),r&&(n[2]=r),n}function n(t,e,r){return(r=r||new i(3))[0]=t[0]+e[0],r[1]=t[1]+e[1],r[2]=t[2]+e[2],r}function s(t,e,r){return(r=r||new i(3))[0]=t[0]*e[0],r[1]=t[1]*e[1],r[2]=t[2]*e[2],r}let a=Float32Array;function o(t){return(t=t||new a(16))[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function l(t,e){e=e||new a(16);const i=t[0],r=t[1],n=t[2],s=t[3],o=t[4],l=t[5],h=t[6],u=t[7],c=t[8],d=t[9],f=t[10],g=t[11],p=t[12],m=t[13],b=t[14],y=t[15],F=f*y,v=b*g,S=h*y,C=b*u,T=h*g,x=f*u,_=n*y,A=b*s,w=n*g,E=f*s,M=n*u,D=h*s,B=c*m,k=p*d,P=o*m,R=p*l,L=o*d,I=c*l,U=i*m,O=p*r,W=i*d,H=c*r,G=i*l,j=o*r,N=F*l+C*d+T*m-(v*l+S*d+x*m),z=v*r+_*d+E*m-(F*r+A*d+w*m),V=S*r+A*l+M*m-(C*r+_*l+D*m),q=x*r+w*l+D*d-(T*r+E*l+M*d),X=1/(i*N+o*z+c*V+p*q);return e[0]=X*N,e[1]=X*z,e[2]=X*V,e[3]=X*q,e[4]=X*(v*o+S*c+x*p-(F*o+C*c+T*p)),e[5]=X*(F*i+A*c+w*p-(v*i+_*c+E*p)),e[6]=X*(C*i+_*o+D*p-(S*i+A*o+M*p)),e[7]=X*(T*i+E*o+M*c-(x*i+w*o+D*c)),e[8]=X*(B*u+R*g+L*y-(k*u+P*g+I*y)),e[9]=X*(k*s+U*g+H*y-(B*s+O*g+W*y)),e[10]=X*(P*s+O*u+G*y-(R*s+U*u+j*y)),e[11]=X*(I*s+W*u+j*g-(L*s+H*u+G*g)),e[12]=X*(P*f+I*b+k*h-(L*b+B*h+R*f)),e[13]=X*(W*b+B*n+O*f-(U*f+H*b+k*n)),e[14]=X*(U*h+j*b+R*n-(G*b+P*n+O*h)),e[15]=X*(G*f+L*n+H*h-(W*h+j*f+I*n)),e}function h(t,e,i){i=i||r();const n=e[0],s=e[1],a=e[2],o=n*t[3]+s*t[7]+a*t[11]+t[15];return i[0]=(n*t[0]+s*t[4]+a*t[8]+t[12])/o,i[1]=(n*t[1]+s*t[5]+a*t[9]+t[13])/o,i[2]=(n*t[2]+s*t[6]+a*t[10]+t[14])/o,i}function u(t,e,i){i=i||r();const n=e[0],s=e[1],a=e[2];return i[0]=n*t[0]+s*t[4]+a*t[8],i[1]=n*t[1]+s*t[5]+a*t[9],i[2]=n*t[2]+s*t[6]+a*t[10],i}const c=5120,d=5121,f=5122,g=5123,p=5124,m=5125,b=5126,y={};{const t=y;t[5120]=Int8Array,t[5121]=Uint8Array,t[5122]=Int16Array,t[5123]=Uint16Array,t[5124]=Int32Array,t[5125]=Uint32Array,t[5126]=Float32Array,t[32819]=Uint16Array,t[32820]=Uint16Array,t[33635]=Uint16Array,t[5131]=Uint16Array,t[33640]=Uint32Array,t[35899]=Uint32Array,t[35902]=Uint32Array,t[36269]=Uint32Array,t[34042]=Uint32Array}function F(t){if(t instanceof Int8Array)return c;if(t instanceof Uint8Array)return d;if(t instanceof Uint8ClampedArray)return d;if(t instanceof Int16Array)return f;if(t instanceof Uint16Array)return g;if(t instanceof Int32Array)return p;if(t instanceof Uint32Array)return m;if(t instanceof Float32Array)return b;throw new Error("unsupported typed array type")}function v(t){if(t===Int8Array)return c;if(t===Uint8Array)return d;if(t===Uint8ClampedArray)return d;if(t===Int16Array)return f;if(t===Uint16Array)return g;if(t===Int32Array)return p;if(t===Uint32Array)return m;if(t===Float32Array)return b;throw new Error("unsupported typed array type")}function S(t){const e=y[t];if(!e)throw new Error("unknown gl type");return e}const C="undefined"!=typeof SharedArrayBuffer?function(t){return t&&t.buffer&&(t.buffer instanceof ArrayBuffer||t.buffer instanceof SharedArrayBuffer)}:function(t){return t&&t.buffer&&t.buffer instanceof ArrayBuffer};function T(...t){console.error(...t)}const x=new Map;function _(t,e){if(!t||"object"!=typeof t)return!1;let i=x.get(e);i||(i=new WeakMap,x.set(e,i));let r=i.get(t);if(void 0===r){const n=Object.prototype.toString.call(t);r=n.substring(8,n.length-1)===e,i.set(t,r)}return r}function A(t,e){return"undefined"!=typeof WebGLTexture&&_(e,"WebGLTexture")}const w=34962,E={attribPrefix:""};function M(t,e,i,r,n){t.bindBuffer(e,i),t.bufferData(e,r,n||35044)}function D(t,e,i,r){if(n=e,"undefined"!=typeof WebGLBuffer&&_(n,"WebGLBuffer"))return e;var n;i=i||w;const s=t.createBuffer();return M(t,i,s,e,r),s}function B(t){return"indices"===t}function k(t){return t.length?t:t.data}const P=/coord|texture/i,R=/color|colour/i;function L(t,e,i){return t.numComponents||t.size||function(t,e){let i;if(i=P.test(t)?2:R.test(t)?4:3,e%i>0)throw new Error(`Can not guess numComponents for attribute '${t}'. Tried ${i} but ${e} values is not evenly divisible by ${i}. You should specify it.`);return i}(e,i||k(t).length)}function I(t,e){if(C(t))return t;if(C(t.data))return t.data;Array.isArray(t)&&(t={data:t});let i=t.type?U(t.type):void 0;return i||(i=B(e)?Uint16Array:Float32Array),new i(t.data)}function U(t){return"number"==typeof t?S(t):t||Float32Array}function O(t,e){return{buffer:e.buffer,numValues:24,type:(i=e.type,"number"==typeof i?i:i?v(i):5126),arrayType:U(e.type)};var i}function W(t,e){const i=e.data||e,r=U(e.type),n=i*r.BYTES_PER_ELEMENT,s=t.createBuffer();return t.bindBuffer(w,s),t.bufferData(w,n,e.drawType||35044),{buffer:s,numValues:i,type:v(r),arrayType:r}}function H(t,e,i){const r=I(e,i);return{arrayType:r.constructor,buffer:D(t,r,void 0,e.drawType),type:F(r),numValues:0}}function G(t,e){const i={};return Object.keys(e).forEach(function(r){if(!B(r)){const s=e[r],a=s.attrib||s.name||s.attribName||E.attribPrefix+r;if(s.value){if(!Array.isArray(s.value)&&!C(s.value))throw new Error("array.value is not array or typedarray");i[a]={value:s.value}}else{let e;e=s.buffer&&s.buffer instanceof WebGLBuffer?O:"number"==typeof s||"number"==typeof s.data?W:H;const{buffer:o,type:l,numValues:h,arrayType:u}=e(t,s,r),c=void 0!==s.normalize?s.normalize:(n=u)===Int8Array||n===Uint8Array,d=L(s,r,h);i[a]={buffer:o,numComponents:d,type:l,normalize:c,stride:s.stride||0,offset:s.offset||0,divisor:void 0===s.divisor?void 0:s.divisor,drawType:s.drawType}}}var n}),t.bindBuffer(w,null),i}const j=["position","positions","a_position"];function N(t,e,i){const r=G(t,e),n=Object.assign({},i||{});n.attribs=Object.assign({},i?i.attribs:{},r);const s=e.indices;if(s){const e=I(s,"indices");n.indices=D(t,e,34963),n.numElements=e.length,n.elementType=F(e)}else n.numElements||(n.numElements=function(t,e){let i,r;for(r=0;r0)throw new Error(`numComponents ${s} not correct for length ${n}`);return a}(e),i}function q(t,e){let i=0;return t.push=function(){for(let e=0;e=0?Q(r,e):i.indexOf("tan")>=0||i.indexOf("binorm")>=0?K(r,e):i.indexOf("norm")>=0&&Z(r,e)}),t}function et(t,e,i){return t=t||2,{position:{numComponents:2,data:[(e=e||0)+-1*(t*=.5),(i=i||0)+-1*t,e+1*t,i+-1*t,e+-1*t,i+1*t,e+1*t,i+1*t]},normal:[0,0,1,0,0,1,0,0,1,0,0,1],texcoord:[0,0,1,0,0,1,1,1],indices:[0,1,2,2,1,3]}}function it(t,e,i,r,n){t=t||1,e=e||1,i=i||1,r=r||1,n=n||o();const s=(i+1)*(r+1),a=X(3,s),l=X(3,s),h=X(2,s);for(let n=0;n<=r;n++)for(let s=0;s<=i;s++){const o=s/i,u=n/r;a.push(t*o-.5*t,0,e*u-.5*e),l.push(0,1,0),h.push(o,u)}const u=i+1,c=X(3,i*r*2,Uint16Array);for(let t=0;t 0");r=r||0,s=s||0;const o=(n=n||Math.PI)-r,l=(a=a||2*Math.PI)-s,h=(e+1)*(i+1),u=X(3,h),c=X(3,h),d=X(2,h);for(let n=0;n<=i;n++)for(let a=0;a<=e;a++){const h=a/e,f=n/i,g=l*h+s,p=o*f+r,m=Math.sin(g),b=Math.cos(g),y=Math.sin(p),F=b*y,v=Math.cos(p),S=m*y;u.push(t*F,t*v,t*S),c.push(F,v,S),d.push(1-h,f)}const f=e+1,g=X(3,e*i*2,Uint16Array);for(let t=0;tn?(l=i,o=1,a=e):a=t+s/n*(e-t),-2!==s&&s!==n+2||(a=0,o=0),l-=i/2;for(let t=0;tn?d.push(0,1,0):0===a?d.push(0,0,0):d.push(e*b,y,i*b),f.push(t/r,1-o)}}for(let t=0;t 0");const h=(l=l||1)-(o=o||0),u=2*(a+1)*4,c=X(3,u),d=X(3,u),f=X(2,u);function g(t,e,i){return t+(e-t)*i}function p(e,i,l,u,p,m){for(let b=0;b<=a;b++){const y=i/1,F=b/a,v=2*(y-.5),S=(o+F*h)*Math.PI,C=Math.sin(S),T=Math.cos(S),x=g(t,e,C),_=v*r,A=T*t,w=C*x;c.push(_,A,w);const E=n(s([0,C,T],l),u);d.push(E),f.push(y*p+m,F)}}for(let t=0;t<2;t++){const r=2*(t/1-.5);p(e,t,[1,1,1],[0,0,0],1,0),p(e,t,[0,0,0],[r,0,0],0,0),p(i,t,[1,1,1],[0,0,0],1,0),p(i,t,[0,0,0],[r,0,0],0,1)}const m=X(3,2*a*4,Uint16Array);function b(t,e){for(let i=0;i0&&r!==e){const t=u+(r+1),e=u+r,i=u+r-d,n=u+(r+1)-d;h.push(t,e,i),h.push(t,i,n)}}u+=e+1}return{position:a,normal:o,texcoord:l,indices:h}}function ft(t){return function(e){return V(e,t.apply(this,Array.prototype.slice.call(arguments,1)))}}function gt(t){return function(e){return N(e,t.apply(null,Array.prototype.slice.call(arguments,1)))}}gt(lt),ft(lt),gt(st),ft(st),gt(it),ft(it),gt(rt),ft(rt),gt(at),ft(at),gt(et),ft(et),gt(ht),ft(ht),gt(ut),ft(ut),gt(ct),ft(ct),gt(dt),ft(dt);function pt(t){return!!t.texStorage2D}const mt=function(){const t={},e={};return function(i,r){return function(i){const r=i.constructor.name;if(!t[r]){for(const t in i)if("number"==typeof i[t]){const r=e[i[t]];e[i[t]]=r?`${r} | ${t}`:t}t[r]=!0}}(i),e[r]||("number"==typeof r?`0x${r.toString(16)}`:r)}}();new Uint8Array([128,192,255,255]),function(){let t}();const bt=6407,yt=33319,Ft=6403,vt={};{const t=vt;t[6406]={numColorComponents:1},t[6409]={numColorComponents:1},t[6410]={numColorComponents:2},t[bt]={numColorComponents:3},t[6408]={numColorComponents:4},t[Ft]={numColorComponents:1},t[36244]={numColorComponents:1},t[yt]={numColorComponents:2},t[33320]={numColorComponents:2},t[bt]={numColorComponents:3},t[36248]={numColorComponents:3},t[6408]={numColorComponents:4},t[36249]={numColorComponents:4},t[6402]={numColorComponents:1},t[34041]={numColorComponents:2}}const St=T;function Ct(t){return"undefined"!=typeof document&&document.getElementById?document.getElementById(t):null}const Tt=33984,xt=34962,_t=5126,At=5124,wt=5125,Et=3553,Mt=34067,Dt=32879,Bt=35866,kt={};function Pt(t,e){return kt[e].bindPoint}function Rt(t,e){return function(i){t.uniform1i(e,i)}}function Lt(t,e){return function(i){t.uniform1iv(e,i)}}function It(t,e){return function(i){t.uniform2iv(e,i)}}function Ut(t,e){return function(i){t.uniform3iv(e,i)}}function Ot(t,e){return function(i){t.uniform4iv(e,i)}}function Wt(t,e,i,r){const n=Pt(0,e);return pt(t)?function(e){let s,a;!e||A(0,e)?(s=e,a=null):(s=e.texture,a=e.sampler),t.uniform1i(r,i),t.activeTexture(Tt+i),t.bindTexture(n,s),t.bindSampler(i,a)}:function(e){t.uniform1i(r,i),t.activeTexture(Tt+i),t.bindTexture(n,e)}}function Ht(t,e,i,r,n){const s=Pt(0,e),a=new Int32Array(n);for(let t=0;t{t.callback(`${e}\n${t.errors.join("\n")}`)}),null}function $t(t,e,i,r){r=r||St;if(!t.getShaderParameter(i,35713)){const n=t.getShaderInfoLog(i),{lineOffset:s,shaderSource:a}=Jt(t.getShaderSource(i)),o=`${function(t,e="",i=0){const r=[...e.matchAll(qt)],n=new Map(r.map((t,i)=>{const n=parseInt(t[1]),s=r[i+1],a=s?s.index:e.length;return[n-1,e.substring(t.index,a)]}));return t.split("\n").map((t,e)=>{const r=n.get(e);return`${e+1+i}: ${t}${r?`\n\n^^^ ${r}`:""}`}).join("\n")}(a,n,s)}\nError compiling ${mt(t,e)}: ${n}`;return r(o),o}return""}function Kt(t,e,i){let r,n,s;if("function"==typeof e&&(i=e,e=void 0),"function"==typeof t)i=t,t=void 0;else if(t&&!Array.isArray(t)){const e=t;i=e.errorCallback,t=e.attribLocations,r=e.transformFeedbackVaryings,n=e.transformFeedbackMode,s=e.callback}const a=i||St,o=[],l={errorCallback(t,...e){o.push(t),a(t,...e)},transformFeedbackVaryings:r,transformFeedbackMode:n,callback:s,errors:o};{let i={};Array.isArray(t)?t.forEach(function(t,r){i[t]=e?e[r]:r}):i=t||{},l.attribLocations=i}return l}const Zt=["VERTEX_SHADER","FRAGMENT_SHADER"];function Qt(t,e){return e.indexOf("frag")>=0?35632:e.indexOf("vert")>=0?35633:void 0}const te=(t=0)=>new Promise(e=>setTimeout(e,t));function ee(t,e,i){const r=t.createProgram(),{attribLocations:n,transformFeedbackVaryings:s,transformFeedbackMode:a}=Kt(i);for(let i=0;it.bindAttribLocation(r,i,e));{let e=s;e&&(e.attribs&&(e=e.attribs),Array.isArray(e)||(e=Object.keys(e)),t.transformFeedbackVaryings(r,e,a||35981))}return t.linkProgram(r),r}function ie(t,e,i,r,n){const s=Kt(i,r,n),a=new Set(e),o=ee(t,e,s);function l(t,e){const i=se(t,e,s.errorCallback);return i&&function(t,e,i){const r=t.getAttachedShaders(e);for(const e of r)i.has(e)&&t.deleteShader(e);t.deleteProgram(e)}(t,e,a),i}if(!s.callback)return l(t,o)?void 0:o;ne(t,o).then(()=>{const e=l(t,o);s.callback(e,e?void 0:o)})}function re(t){return function(e,i,...r){return new Promise((n,s)=>{const a=Kt(...r);a.callback=(t,e)=>{t?s(t):n(e)},t(e,i,a)})}}re(ie),re(Fe);async function ne(t,e){const i=t.getExtension("KHR_parallel_shader_compile"),r=i?(t,e)=>t.getProgramParameter(e,i.COMPLETION_STATUS_KHR):()=>!0;let n=0;do{await te(n),n=1e3/60}while(!r(t,e))}function se(t,e,i){i=i||St;if(!t.getProgramParameter(e,35714)){const r=t.getProgramInfoLog(e);i(`Error in program linking: ${r}`);return`${r}\n${t.getAttachedShaders(e).map(e=>$t(t,t.getShaderParameter(e,t.SHADER_TYPE),e,i)).filter(t=>t).join("\n")}`}}function ae(t,e,i,r,n){return ie(t,e,i,r,n)}function oe(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const le=/(\.|\[|]|\w+)/g,he=t=>t>="0"&&t<="9";function ue(t,e,i,r){const n=t.split(le).filter(t=>""!==t);let s=0,a="";for(;;){const t=n[s++];a+=t;const o=he(t[0]),l=o?parseInt(t):t;o&&(a+=n[s++]);if(s===n.length){i[l]=e;break}{const t=n[s++],e="["===t,o=i[l]||(e?[]:{});i[l]=o,i=o,r[a]=r[a]||function(t){return function(e){ge(t,e)}}(o),a+=t}}}function ce(t,e){let i=0;function r(e,r,n){const s=r.name.endsWith("[0]"),a=r.type,o=kt[a];if(!o)throw new Error(`unknown type: 0x${a.toString(16)}`);let l;if(o.bindPoint){const e=i;i+=r.size,l=s?o.arraySetter(t,a,e,n,r.size):o.setter(t,a,e,n,r.size)}else l=o.arraySetter&&s?o.arraySetter(t,n):o.setter(t,n);return l.location=n,l}const n={},s={},a=t.getProgramParameter(e,35718);for(let i=0;i{o(e,e?void 0:be(t,i))});const l=ae(t,e,s);return l?be(t,l):null}function ve(t,e,i,r,n){for(const[s,a]of Object.entries(e)){const o={...n},l=i[s];Array.isArray(l)||Object.assign(o,l);const h=se(t,a,o.errorCallback);if(h){for(const i of Object.values(e)){const e=t.getAttachedShaders(i);t.deleteProgram(i);for(const i of e)r.has(i)||t.deleteShader(i)}return h}}}function Se(t,e,i={}){const r=new Set,n=Object.fromEntries(Object.entries(e).map(([e,n])=>{const s={...i},a=Array.isArray(n)?n:n.shaders;return Array.isArray(n)||Object.assign(s,n),a.forEach(r.add,r),[e,ee(t,a,s)]}));if(i.callback)return void async function(t,e){for(const i of Object.values(e))await ne(t,i)}(t,n).then(()=>{const s=ve(t,n,e,r,i);i.callback(s,s?void 0:n)});return ve(t,n,e,r,i)?void 0:n}function Ce(t,e,i){function r(t,e){return Object.fromEntries(Object.entries(e).map(([e,i])=>[e,be(t,i)]))}const n=(i=Kt(i)).callback;n&&(i.callback=(e,i)=>{n(e,e?void 0:r(t,i))});const s=Se(t,e,i);if(!n&&s)return r(t,s)}re(Se),re(Ce);const Te=36096,xe=33306,_e={};_e[34041]=xe,_e[6401]=36128,_e[36168]=36128,_e[6402]=Te,_e[33189]=Te,_e[33190]=Te,_e[36012]=Te,_e[35056]=xe,_e[36013]=xe;const Ae={};Ae[32854]=!0,Ae[32855]=!0,Ae[36194]=!0,Ae[34041]=!0,Ae[33189]=!0,Ae[6401]=!0,Ae[36168]=!0;var we={};const Ee={position:3,normal:3,tangent:3,texcoord:2,texcoord0:2,texcoord1:2,texcoord2:2};var Me={};class De{constructor(){this.attribs={}}disableAll(){for(let t in this.attribs)this.gl.disableVertexAttribArray(this.attribs[t]);this.attribs={}}enable(t,e){this.gl=t;var i={};for(let n in e){var r=e[n];void 0!==r.loc&&(void 0===this.attribs[r.loc]&&t.enableVertexAttribArray(r.loc),t.vertexAttribPointer(r.loc,r.size,r.type,!1,r.stride,r.offset),i[r.loc]=r.loc,this.attribs[n]=null)}for(let t in this.attribs);this.attribs=i}}class Be{static CreateProgramAttributes(t,e){var i={},r=0;for(let a in e){var n=e[a],s=Ee[a];i[n]={type:t.FLOAT,size:s,offset:4*r},r+=s}for(let t in i)i[t].stride=4*r;return i}CleanUpPrograms(){Me={}}ReleaseProgram(t){}static _GetProgram(t){return Me[t]}static RegisterProgram(t,e){if(!Me[t]){var i=e.shaders;Me[t]={shaders:[i[0],i[1]],attributes:e.attributes}}return Me[t]}static GetProgram(t,e,i,r){var n=Me[e],s="";for(var a in i)s+=a+":"+i[a]+"-";if(!n){var o=e.split("."),l=we[o[0]][o[1]];l&&(n=Be.RegisterProgram(e,l))}if(!n)throw"Program not registered: "+o;n.programInfo||(n.programInfo={}),n.programInfo[s]=Be.CompileProgram(t,n.shaders,i),r=r||n.attributes&&Be.CreateProgramAttributes(t,n.attributes);var h=n.programInfo[s];if(r)for(var a in r){var u=h.attribSetters[a];u&&(r[a]=r[a]||{},r[a].loc=u.location)}return h.attributes=r,h}static CompileProgram(t,e,i,r){var n="";for(var s in i){var a=i[s];n="#define "+s+" "+(null===a?"":a)+"\n"}var o={};const l=Fe(t,[n+e[0],n+e[1]],null,null);if(r)for(var s in r){var h=l.attribSetters[s];h&&(r[s]=r[s]||{},r[s].loc=h.location)}for(var s in l.uniformSetters)o[s]=l.uniformSetters[s].location;return l.uniforms=o,l}}var ke=new Be,Pe=1e-6,Re="undefined"!=typeof Float32Array?Float32Array:Array;Math.random;Math.PI;function Le(){var t=new Re(3);return Re!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Ie(t){var e=t[0],i=t[1],r=t[2];return Math.hypot(e,i,r)}function Ue(t,e,i){var r=new Re(3);return r[0]=t,r[1]=e,r[2]=i,r}function Oe(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function We(t,e,i,r){return t[0]=e,t[1]=i,t[2]=r,t}function He(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t}function Ge(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t}function je(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t[2]=e[2]*i[2],t}function Ne(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t[2]=Math.min(e[2],i[2]),t}function ze(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t[2]=Math.max(e[2],i[2]),t}function Ve(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t}function qe(t,e,i,r){return t[0]=e[0]+i[0]*r,t[1]=e[1]+i[1]*r,t[2]=e[2]+i[2]*r,t}function Xe(t){var e=t[0],i=t[1],r=t[2];return e*e+i*i+r*r}function Je(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function Ye(t,e){var i=e[0],r=e[1],n=e[2],s=i*i+r*r+n*n;return s>0&&(s=1/Math.sqrt(s)),t[0]=e[0]*s,t[1]=e[1]*s,t[2]=e[2]*s,t}function $e(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Ke(t,e,i){var r=e[0],n=e[1],s=e[2],a=i[0],o=i[1],l=i[2];return t[0]=n*l-s*o,t[1]=s*a-r*l,t[2]=r*o-n*a,t}function Ze(t,e,i,r){var n=e[0],s=e[1],a=e[2];return t[0]=n+r*(i[0]-n),t[1]=s+r*(i[1]-s),t[2]=a+r*(i[2]-a),t}function Qe(t,e,i){var r=e[0],n=e[1],s=e[2],a=i[3]*r+i[7]*n+i[11]*s+i[15];return a=a||1,t[0]=(i[0]*r+i[4]*n+i[8]*s+i[12])/a,t[1]=(i[1]*r+i[5]*n+i[9]*s+i[13])/a,t[2]=(i[2]*r+i[6]*n+i[10]*s+i[14])/a,t}function ti(t,e,i){var r=e[0],n=e[1],s=e[2];return t[0]=r*i[0]+n*i[3]+s*i[6],t[1]=r*i[1]+n*i[4]+s*i[7],t[2]=r*i[2]+n*i[5]+s*i[8],t}Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)});var ei,ii=Ge,ri=Ie;ei=Le();function ni(){var t=new Re(16);return Re!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t}function si(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function ai(t,e,i,r,n,s,a,o,l,h,u,c,d,f,g,p){var m=new Re(16);return m[0]=t,m[1]=e,m[2]=i,m[3]=r,m[4]=n,m[5]=s,m[6]=a,m[7]=o,m[8]=l,m[9]=h,m[10]=u,m[11]=c,m[12]=d,m[13]=f,m[14]=g,m[15]=p,m}function oi(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function li(t,e){if(t===e){var i=e[1],r=e[2],n=e[3],s=e[6],a=e[7],o=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=i,t[6]=e[9],t[7]=e[13],t[8]=r,t[9]=s,t[11]=e[14],t[12]=n,t[13]=a,t[14]=o}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}function hi(t,e){var i=e[0],r=e[1],n=e[2],s=e[3],a=e[4],o=e[5],l=e[6],h=e[7],u=e[8],c=e[9],d=e[10],f=e[11],g=e[12],p=e[13],m=e[14],b=e[15],y=i*o-r*a,F=i*l-n*a,v=i*h-s*a,S=r*l-n*o,C=r*h-s*o,T=n*h-s*l,x=u*p-c*g,_=u*m-d*g,A=u*b-f*g,w=c*m-d*p,E=c*b-f*p,M=d*b-f*m,D=y*M-F*E+v*w+S*A-C*_+T*x;return D?(D=1/D,t[0]=(o*M-l*E+h*w)*D,t[1]=(n*E-r*M-s*w)*D,t[2]=(p*T-m*C+b*S)*D,t[3]=(d*C-c*T-f*S)*D,t[4]=(l*A-a*M-h*_)*D,t[5]=(i*M-n*A+s*_)*D,t[6]=(m*v-g*T-b*F)*D,t[7]=(u*T-d*v+f*F)*D,t[8]=(a*E-o*A+h*x)*D,t[9]=(r*A-i*E-s*x)*D,t[10]=(g*C-p*v+b*y)*D,t[11]=(c*v-u*C-f*y)*D,t[12]=(o*_-a*w-l*x)*D,t[13]=(i*w-r*_+n*x)*D,t[14]=(p*F-g*S-m*y)*D,t[15]=(u*S-c*F+d*y)*D,t):null}function ui(t,e,i){var r=e[0],n=e[1],s=e[2],a=e[3],o=e[4],l=e[5],h=e[6],u=e[7],c=e[8],d=e[9],f=e[10],g=e[11],p=e[12],m=e[13],b=e[14],y=e[15],F=i[0],v=i[1],S=i[2],C=i[3];return t[0]=F*r+v*o+S*c+C*p,t[1]=F*n+v*l+S*d+C*m,t[2]=F*s+v*h+S*f+C*b,t[3]=F*a+v*u+S*g+C*y,F=i[4],v=i[5],S=i[6],C=i[7],t[4]=F*r+v*o+S*c+C*p,t[5]=F*n+v*l+S*d+C*m,t[6]=F*s+v*h+S*f+C*b,t[7]=F*a+v*u+S*g+C*y,F=i[8],v=i[9],S=i[10],C=i[11],t[8]=F*r+v*o+S*c+C*p,t[9]=F*n+v*l+S*d+C*m,t[10]=F*s+v*h+S*f+C*b,t[11]=F*a+v*u+S*g+C*y,F=i[12],v=i[13],S=i[14],C=i[15],t[12]=F*r+v*o+S*c+C*p,t[13]=F*n+v*l+S*d+C*m,t[14]=F*s+v*h+S*f+C*b,t[15]=F*a+v*u+S*g+C*y,t}function ci(t,e,i){var r,n,s,a,o,l,h,u,c,d,f,g,p=i[0],m=i[1],b=i[2];return e===t?(t[12]=e[0]*p+e[4]*m+e[8]*b+e[12],t[13]=e[1]*p+e[5]*m+e[9]*b+e[13],t[14]=e[2]*p+e[6]*m+e[10]*b+e[14],t[15]=e[3]*p+e[7]*m+e[11]*b+e[15]):(r=e[0],n=e[1],s=e[2],a=e[3],o=e[4],l=e[5],h=e[6],u=e[7],c=e[8],d=e[9],f=e[10],g=e[11],t[0]=r,t[1]=n,t[2]=s,t[3]=a,t[4]=o,t[5]=l,t[6]=h,t[7]=u,t[8]=c,t[9]=d,t[10]=f,t[11]=g,t[12]=r*p+o*m+c*b+e[12],t[13]=n*p+l*m+d*b+e[13],t[14]=s*p+h*m+f*b+e[14],t[15]=a*p+u*m+g*b+e[15]),t}function di(t,e,i){var r=i[0],n=i[1],s=i[2];return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*n,t[5]=e[5]*n,t[6]=e[6]*n,t[7]=e[7]*n,t[8]=e[8]*s,t[9]=e[9]*s,t[10]=e[10]*s,t[11]=e[11]*s,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function fi(t,e,i){var r=Math.sin(i),n=Math.cos(i),s=e[4],a=e[5],o=e[6],l=e[7],h=e[8],u=e[9],c=e[10],d=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=s*n+h*r,t[5]=a*n+u*r,t[6]=o*n+c*r,t[7]=l*n+d*r,t[8]=h*n-s*r,t[9]=u*n-a*r,t[10]=c*n-o*r,t[11]=d*n-l*r,t}function gi(t,e,i){var r=Math.sin(i),n=Math.cos(i),s=e[0],a=e[1],o=e[2],l=e[3],h=e[4],u=e[5],c=e[6],d=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=s*n+h*r,t[1]=a*n+u*r,t[2]=o*n+c*r,t[3]=l*n+d*r,t[4]=h*n-s*r,t[5]=u*n-a*r,t[6]=c*n-o*r,t[7]=d*n-l*r,t}function pi(t,e,i){var r=e[0],n=e[1],s=e[2],a=e[3],o=r+r,l=n+n,h=s+s,u=r*o,c=r*l,d=r*h,f=n*l,g=n*h,p=s*h,m=a*o,b=a*l,y=a*h;return t[0]=1-(f+p),t[1]=c+y,t[2]=d-b,t[3]=0,t[4]=c-y,t[5]=1-(u+p),t[6]=g+m,t[7]=0,t[8]=d+b,t[9]=g-m,t[10]=1-(u+f),t[11]=0,t[12]=i[0],t[13]=i[1],t[14]=i[2],t[15]=1,t}function mi(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function bi(t,e){var i=e[0],r=e[1],n=e[2],s=e[4],a=e[5],o=e[6],l=e[8],h=e[9],u=e[10];return t[0]=Math.hypot(i,r,n),t[1]=Math.hypot(s,a,o),t[2]=Math.hypot(l,h,u),t}var yi=function(t,e,i,r,n){var s,a=1/Math.tan(e/2);return t[0]=a/i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=n&&n!==1/0?(s=1/(r-n),t[10]=(n+r)*s,t[14]=2*n*r*s):(t[10]=-1,t[14]=-2*r),t};var Fi=ui;const vi={2:"Wowhead",3:"LolKing",6:"HeroKing",7:"DestinyDB"};class Si{constructor(t){if(!t.type||!vi[t.type])throw"Viewer error: Bad viewer type given";if(!t.container)throw"Viewer error: Bad container given";if(!t.aspect)throw"Viewer error: Bad aspect ratio given";if(!t.contentPath)throw"Viewer error: No content path given";this.type=t.type,this.container=t.container,this.aspect=parseFloat(t.aspect),this.renderer=null,this.options=t;const e=this.container.width(),i=Math.round(e/this.aspect);this.init(e,i)}destroy(){this.renderer&&this.renderer.destroy(),this.options=null,this.container=null}init(t,e){if(void 0!==typeof window.Uint8Array&&void 0!==typeof window.DataView)try{const t=document.createElement("canvas");if(!(t.getContext("webgl",{alpha:!1})||t.getContext("experimental-webgl",{alpha:!1})))return void console.log("viewer init failed")}catch(t){return void console.log("viewer init failed")}this.mode=1,this.renderer=new Da(this),this.renderer.resize(t,e),this.renderer.init()}setAdaptiveMode(t){this.renderer.setAdaptiveMode(t)}setZoom(t){this.renderer.zoom.target=t}setOffset(t,e){this.renderer.setTranslation(t,e,0)}setFullscreen(t){t?Si.requestFullscreen(this.renderer.canvas[0]):Si.exitFullscreen()}method(t,e){return void 0===e&&(e=[]),this.renderer?this.renderer.method(t,[].concat(e)):null}option(t,e){return void 0!==e&&(this.options[t]=e),this.options[t]}static isFullscreen(){return!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)}static requestFullscreen(t){document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||(t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen())}static exitFullscreen(){(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)&&(document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen())}}const Ci=Si;const Ti=class{constructor(t,e,i){this.ba=t,this.f=e,this.g=i,this.e=!1,this.dc=t.createBuffer(),this.f=0}c(t){const e=this.ba;e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,this.dc),!this.e||this.f 0.0) {\nboneTransformMat = mat4(0.0);\nfor (int i = 0; i < 4; i++) {\nboneTransformMat += getBoneMatrix(aBones[i]) * aBoneWeights[i];\n}\n}\nmat4 viewModelMat = uViewMatrix * uModelMatrix * boneTransformMat;\nmat4 invTranspViewModelMat = transpose(inverse(viewModelMat));\n":"mat4 viewModelMat = uViewMatrix * uModelMatrix;\nmat4 invTranspViewModelMat = uInvTranspViewModelMat;\n")+"vec4 pos = viewModelMat * vec4(aPosition, 1);\nvPosition = pos.rgb;\ngl_Position = uProjMatrix * pos;\nvTexCoord1 = aTexCoord0;\nvTexCoord2 = aTexCoord1;\nvNormal = normalize((invTranspViewModelMat * vec4(aNormal, 0.0)).xyz);\n"+(r.DISSOLVE?"vLocalPosition = aPosition;\nvDissolveTC = aTexCoord0;\n":"")+"}\n"}static c(t,e,i=0){let r=Wi[e];r||(WH.debug("Missing pixel shader def",e),r=Wi[e="PS_Combiners_Opaque_Mod"]);let n="\t\t"+r.slice(1,r.length).join("\n\t\t");for(let t=0;t midValue) {\nval0 = midValue;\nval1 = 1.0;\n}\nfloat lerpValue = clamp(((lum - val0) / (val1 - val0)), 0.0, 1.0);\nvec3 gradColor0 = u_gradGradientColors_0.xyz;\nvec3 gradColor1 = u_gradGradientColors_1.xyz;\nif (lum > midValue) {\ngradColor0 = u_gradGradientColors_1.xyz;\ngradColor1 = u_gradGradientColors_2.xyz;\n}\nvec3 gradientColor = mix(gradColor0, gradColor1, vec3(lerpValue));\nbool flipNormal = ((u_gradGradientColors_0.w > 0.0) && (vNormal.z < 0.0));\nvec3 normal = flipNormal ? -vNormal.xyz : vNormal.xyz;\nvec2 term = vec2(dot(-(vPosition.xyz), normal), dot(normalize(-(vPosition.xyz)), (normal * vec3(0.05, 0.05, 1.0))));\nvec2 invTerm = (vec2(1.0) - clamp(term, 0.0, 1.0));\nvec2 f = (invTerm * invTerm);\nfloat fresnel_rim = pow((f.x + f.y), power);\nbool disableHeightFade = bool(u_gradFlags.x);\nfloat visMod = 1.0;\nvec4 res = _output;\nif (!(disableHeightFade))\n{\nvec3 distVec = (vPosition - u_gradBoundingBox.xyz);\nfloat _dot = dot(distVec, u_gradUpVec.xyz);\nfloat relHeight = (_dot * u_gradBoundingBox.w);\nbool invertHeightFade = bool(u_gradFlags.w);\nrelHeight = invertHeightFade ? clamp((1.0 - relHeight), 0.0, 1.0) : relHeight;\nvisMod = clamp((relHeight * 1.66666663), 0.0, 0.899999976);\nvisMod = (visMod * visMod);\nres = vec4(_output.r, _output.g, _output.b, (_output.w * visMod));\n}\nvec3 lerp = mix(gradientColor, u_gradEdgeColor.xyz, vec3(fresnel_rim));\nfloat multiplyLum = u_mulLum_OpaqMat.x;\nif (bool(multiplyLum))\n{\nres = vec4(lerp.xyz, (res.w * lum));\n}\nelse\n{\nres = vec4(lerp.xyz, res.w);\n}\n_output = mix(_output, res, vec4(u_gradFlags.y));\n":"")+(a.SHADOWY?"float sh_intensity = dot(_output.rgb, vec3(0.3, 0.59, 0.11));\nvec3 sh_inner = mix(_output.rgb, sh_intensity * mix(_output.rgb, u_shadowInnerColor.rgb, u_shadowInnerColor.w), 0.89);\nvec3 sh_normal = normalize(vNormal.xyz);\nvec2 sh_term = vec2(dot(-(vPosition.xyz), sh_normal), dot(normalize(-(vPosition.xyz)), sh_normal * vec3(0.05, 0.05, 1.0)));\nvec2 sh_invTerm = vec2(1.0) - clamp(sh_term, 0.0, 1.0);\nvec2 sh_f = sh_invTerm * sh_invTerm;\nfloat sh_fresnel = sh_f.x + sh_f.y;\nvec3 sh_outer = sh_intensity * 4.0 * sh_fresnel * mix(_output.rgb, u_shadowOuterColor.rgb, u_shadowOuterColor.w);\n_output.rgb = sh_inner + sh_outer;\n_output.a *= _output.a;\n":"")+(a.DISSOLVE?"vec4 c_misc = u_dissolveMisc;\nvec4 c_transform0 = u_dissolveTransform0;\nvec4 c_transform1 = u_dissolveTransform1;\nvec4 c_transform2 = u_dissolveTransform2;\nfloat value = c_misc.x;\nfloat gain = c_misc.y;\nvec2 dissolveOffset = c_misc.zw;\nfloat isBlendAdd = u_dissolveProcParams.x;\nvec3 m_emissive = vec3(0.0);\nfloat m_opacity = 0.0;\nint ds_method = int(u_dissolveFlags.y + 0.5);\nint ds_blendMode = int(u_dissolveFlags.x + 0.5);\nvec4 ds_originalMaterial = _output;\nif (ds_method == 0) {\nfloat alpha = texture2D(uDissolveMask,\nvDissolveTC * c_transform0.zw + c_transform0.xy + dissolveOffset).a;\nfloat dissolve = 1.0 + alpha * gain - value * (gain + 1.0);\nm_opacity = clamp(dissolve, 0.0, 1.0);\nif (ds_blendMode != 0) {\nm_emissive = ds_originalMaterial.rgb;\nm_opacity *= ds_originalMaterial.a;\nif (ds_blendMode == 1) {\n_output.rgb = ds_originalMaterial.rgb + m_emissive * m_opacity;\n_output.a = m_opacity;\ngl_FragColor = _output;\nreturn;\n}\n}\nconst float EDGE_WIDTH = 1.5;\nvec4 edge1 = texture2D(uDissolveEdge1, vDissolveTC * c_transform1.zw + c_transform1.xy);\nvec4 edge2 = texture2D(uDissolveEdge2, vDissolveTC * c_transform2.zw + c_transform2.xy);\nvec3 add = edge1.rgb * edge2.rgb * 4.0;\nm_emissive = add;\nif (isBlendAdd > 0.0) {\nm_emissive *= m_opacity;\n}\nif (dissolve < 1.0) {\nif (dissolve < 0.0) {\ndiscard;\n}\nm_emissive *= dissolve;\n} else if (dissolve < EDGE_WIDTH) {\nfloat blend = 1.0 - ((dissolve - 1.0) / (EDGE_WIDTH - 1.0));\nif (ds_blendMode != 2) {\nm_opacity = blend;\n}\nm_emissive *= blend;\n} else {\ndiscard;\n}\n_output.rgb = ds_originalMaterial.rgb * m_opacity + m_emissive;\n_output.a = m_opacity;\n} else {\nbool applyDissolve = (u_dissolveProcParams.w > 0.0);\nif (applyDissolve) {\nvec2 maskCoord;\nint shellMaskUVOption = int(u_dissolveProcParams.z + 0.5);\nif (shellMaskUVOption == 0) {\nmaskCoord = (vDissolveTC + c_transform0.xy) * c_transform0.zw;\nmaskCoord.y = 1.0 - maskCoord.y;\n} else if (shellMaskUVOption == 1) {\nmaskCoord = vDissolveTC * c_transform0.zw + c_transform0.xy;\n} else {\nmaskCoord = lTexCoord1;\n}\nfloat mask = texture2D(uDissolveMask, maskCoord).a;\nvec4 t1 = texture2D(uDissolveEdge1, vDissolveTC * c_transform1.zw + c_transform1.xy);\nvec4 t2 = texture2D(uDissolveEdge2, vDissolveTC * c_transform2.zw + c_transform2.xy);\nvec4 textureMod = t1 * t2;\nvec4 final = textureMod * 2.0 * value * mask;\nfinal = dissolveBlendTexture(final, u_dissolveModX, u_dissolveSwizzle);\nm_emissive = final.rgb * textureMod.a;\nm_opacity = final.a;\n} else {\nm_emissive = vec3(0.0);\nm_opacity = 0.0;\n}\nbool edgeGlow = u_dissolveEdgeGlowParams.x > 0.0;\nfloat fresnel_rim = 0.0;\nfloat fresnelIntensity = u_dissolveProcParams.y;\nbool fresnelMask = (fresnelIntensity > 0.0) && !edgeGlow;\nvec3 eyeVec = vPosition.xyz;\nvec3 normal = vNormal.xyz;\nif (fresnelMask || edgeGlow) {\nbool flipNormal = (u_dissolveEdgeGlowParams.y > 0.0) && (normal.z < 0.0);\nif (flipNormal) normal = -normal;\nfresnel_rim = dissolveFastFresnelRim(-eyeVec, normal);\n}\nif (fresnelMask) {\nm_emissive *= clamp(fresnel_rim * fresnelIntensity, 0.0, 1.0);\nm_opacity *= fresnel_rim;\n}\nif (edgeGlow) {\nfresnel_rim = pow(fresnel_rim, fresnelIntensity);\nfloat edgeGlowColorMult = u_dissolveEdgeGlowParams.z;\nvec4 edgeColor = u_dissolveEdgeGlowColor * edgeGlowColorMult;\nm_emissive += edgeColor.rgb * fresnel_rim;\nfloat finalOpacity = 1.0;\nif (ds_blendMode != 0) {\nfinalOpacity *= ds_originalMaterial.a;\n}\nif (ds_blendMode == 1) {\nvec3 diffuseRgb = ds_originalMaterial.rgb * ds_originalMaterial.a;\nif (dot(diffuseRgb, diffuseRgb) < 0.1) {\n_output.rgb = ds_originalMaterial.rgb;\n_output.a = 0.0;\ngl_FragColor = _output;\nreturn;\n}\n}\nm_opacity = max(m_opacity, finalOpacity * fresnel_rim * edgeColor.a);\n}\n_output.rgb = ds_originalMaterial.rgb + m_emissive;\n}\n":"")+"gl_FragColor = _output;\n}\n"}}const Oi=[["PS_Combiners_Opaque_Mod2xNA_Alpha","VS_Diffuse_T1_Env","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_AddAlpha","VS_Diffuse_T1_Env","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_AddAlpha_Alpha","VS_Diffuse_T1_Env","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_Mod2xNA_Alpha_Add","VS_Diffuse_T1_Env_T1","HS_T1_T2_T3","DS_T1_T2_T3"],["PS_Combiners_Mod_AddAlpha","VS_Diffuse_T1_Env","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_AddAlpha","VS_Diffuse_T1_T1","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Mod_AddAlpha","VS_Diffuse_T1_T1","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Mod_AddAlpha_Alpha","VS_Diffuse_T1_Env","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_Alpha_Alpha","VS_Diffuse_T1_Env","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_Mod2xNA_Alpha_3s","VS_Diffuse_T1_Env_T1","HS_T1_T2_T3","DS_T1_T2_T3"],["PS_Combiners_Opaque_AddAlpha_Wgt","VS_Diffuse_T1_T1","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Mod_Add_Alpha","VS_Diffuse_T1_Env","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_ModNA_Alpha","VS_Diffuse_T1_Env","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Mod_AddAlpha_Wgt","VS_Diffuse_T1_Env","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Mod_AddAlpha_Wgt","VS_Diffuse_T1_T1","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_AddAlpha_Wgt","VS_Diffuse_T1_T2","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_Mod_Add_Wgt","VS_Diffuse_T1_Env","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_Mod2xNA_Alpha_UnshAlpha","VS_Diffuse_T1_Env_T1","HS_T1_T2_T3","DS_T1_T2_T3"],["PS_Combiners_Mod_Dual_Crossfade","VS_Diffuse_T1","HS_T1","DS_T1"],["PS_Combiners_Mod_Depth","VS_Diffuse_EdgeFade_T1","HS_T1","DS_T1"],["PS_Combiners_Opaque_Mod2xNA_Alpha_Alpha","VS_Diffuse_T1_Env_T2","HS_T1_T2_T3","DS_T1_T2_T3"],["PS_Combiners_Mod_Mod","VS_Diffuse_EdgeFade_T1_T2","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Mod_Masked_Dual_Crossfade","VS_Diffuse_T1_T2","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_Alpha","VS_Diffuse_T1_T1","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Opaque_Mod2xNA_Alpha_UnshAlpha","VS_Diffuse_T1_Env_T2","HS_T1_T2_T3","DS_T1_T2_T3"],["PS_Combiners_Mod_Depth","VS_Diffuse_EdgeFade_Env","HS_T1","DS_T1"],["PS_Guild","VS_Diffuse_T1_T2_T1","HS_T1_T2_T3","DS_T1_T2"],["PS_Guild_NoBorder","VS_Diffuse_T1_T2","HS_T1_T2","DS_T1_T2_T3"],["PS_Guild_Opaque","VS_Diffuse_T1_T2_T1","HS_T1_T2_T3","DS_T1_T2"],["PS_Illum","VS_Diffuse_T1_T1","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Mod_Mod_Mod_Const","VS_Diffuse_T1_T2_T3","HS_T1_T2_T3","DS_T1_T2_T3"],["PS_Combiners_Mod_Mod_Mod_Const","VS_Color_T1_T2_T3","HS_T1_T2_T3","DS_T1_T2_T3"],["PS_Combiners_Opaque","VS_Diffuse_T1","HS_T1","DS_T1"],["PS_Combiners_Mod_Mod2x","VS_Diffuse_EdgeFade_T1_T2","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Mod","VS_Diffuse_EdgeFade_T1","HS_T1_T2","DS_T1_T2"],["PS_Combiners_Mod_Mod_Depth","VS_Diffuse_EdgeFade_T1_T2","HS_T1_T2","DS_T1_T2"]],Wi={PS_Combiners_Add:[1,"_output.rgb = _input.rgb + tex0.rgb;","_output.a = _input.a + tex0.a;"],PS_Combiners_Decal:[1,"_output.rgb = mix(_input.rgb, tex0.rgb, _input.a);","_output.a = _input.a;"],PS_Combiners_Fade:[1,"_output.rgb = mix(tex0.rgb, _input.rgb, _input.a);","_output.a = _input.a;"],PS_Combiners_Mod:[1,"_output.rgb = _input.rgb * tex0.rgb;","_output.a = tex0.a;"],PS_Combiners_Mod2x:[1,"_output.rgb = _input.rgb * tex0.rgb * 2.0;","_output.a = tex0.a * 2.0;"],PS_Combiners_Opaque:[1,"_output.rgb = _input.rgb * tex0.rgb;","_output.a = 1.0;"],PS_Combiners_Add_Add:[2,"_output.rgb = (_input.rgb + tex0.rgb) + tex1.rgb;","_output.a = (_input.a + tex0.a) + tex1.a;"],PS_Combiners_Add_Mod:[2,"_output.rgb = (_input.rgb + tex0.rgb) * tex1.rgb;","_output.a = (_input.a + tex0.a) * tex1.a;"],PS_Combiners_Add_Mod2x:[2,"_output.rgb = (_input.rgb + tex0.rgb) * tex1.rgb * 2.0;","_output.a = (_input.a + tex0.a) * tex1.a * 2.0;"],PS_Combiners_Add_Opaque:[2,"_output.rgb = (_input.rgb + tex0.rgb) * tex1.rgb;","_output.a = _input.a + tex0.a;"],PS_Combiners_Mod_AddNA:[2,"_output.rgb = (_input.rgb * tex0.rgb);","_output.a = tex0.a;","_specular = tex1.rgb;"],PS_Combiners_Mod_Mod:[2,"_output.rgb = (_input.rgb * tex0.rgb) * tex1.rgb;","_output.a = tex0.a * tex1.a;"],PS_Combiners_Mod_Mod2x:[2,"_output.rgb = (_input.rgb * tex0.rgb) * tex1.rgb * 2.0;","_output.a = tex0.a * tex1.a * 2.0;"],PS_Combiners_Mod_Add:[2,"_output.rgb = (_input.rgb * tex0.rgb);","_output.a = tex0.a + tex1.a;","_specular = tex1.rgb;"],PS_Combiners_Mod_Mod2xNA:[2,"_output.rgb = (_input.rgb * tex0.rgb) * tex1.rgb * 2.0;","_output.a = tex0.a;"],PS_Combiners_Mod_Opaque:[2,"_output.rgb = (_input.rgb * tex0.rgb) * tex1.rgb;","_output.a = tex0.a;"],PS_Combiners_Mod2x_Add:[2,"_output.rgb = (_input.rgb * tex0.rgb) * 2.0 + tex1.rgb;","_output.a = (tex0.a) * 2.0 + tex1.a;"],PS_Combiners_Mod2x_Mod2x:[2,"_output.rgb = (_input.rgb * tex0.rgb) * tex1.rgb * 4.0;","_output.a = (tex0.a) * tex1.a * 4.0;"],PS_Combiners_Mod2x_Opaque:[2,"_output.rgb = (_input.rgb * tex0.rgb) * tex1.rgb * 2.0;","_output.a = tex0.a * 2.0;"],PS_Combiners_Opaque_Add:[2,"_output.rgb = (_input.rgb * tex0.rgb) + tex1.rgb;","_output.a = _input.a + tex1.a;"],PS_Combiners_Opaque_AddAlpha:[2,"_output.rgb = (_input.rgb * tex0.rgb);","_specular = (tex1.rgb * tex1.a);"],PS_Combiners_Opaque_AddAlpha_Wgt:[2,"_output.rgb = (_input.rgb * tex0.rgb);","_specular = (tex1.rgb * tex1.a) * uTexSampleAlpha.g;"],PS_Combiners_Opaque_AddAlpha_Alpha:[2,"_output.rgb = (_input.rgb * tex0.rgb);","_specular = (tex1.rgb * tex1.a * (1.0 - tex0.a));"],PS_Combiners_Opaque_AddNA:[2,"_output.rgb = (_input.rgb * tex0.rgb) + tex1.rgb;","_output.a = _input.a;"],PS_Combiners_Opaque_Mod:[2,"_output.rgb = (_input.rgb * tex0.rgb) * tex1.rgb;","_output.a = tex1.a;"],PS_Combiners_Opaque_Mod2x:[2,"_output.rgb = (_input.rgb * tex0.rgb) * tex1.rgb * 2.0;","_output.a = tex1.a * 2.0;"],PS_Combiners_Opaque_Mod2xNA:[2,"_output.rgb = (_input.rgb * tex0.rgb) * tex1.rgb * 2.0;",""],PS_Combiners_Opaque_Mod2xNA_Alpha:[2,"_output.rgb = _input.rgb * mix(tex0.rgb * tex1.rgb * 2.0, tex0.rgb, vec3(tex0.a));",""],PS_Combiners_Opaque_Opaque:[2,"_output.rgb = (_input.rgb * tex0.rgb) * tex1.rgb;",""],PS_Combiners_Opaque_Mod2xNA_Alpha_Add:[3,"_output.rgb = _input.rgb * mix(tex0.rgb * tex1.rgb * 2.0, tex0.rgb, vec3(tex0.a));","_specular = tex2.rgb * tex2.a * uTexSampleAlpha.b;"],PS_Combiners_Mod_Mod_Mod_Const:[3,"_output.rgb = _input.rgb * (tex0 * tex1 * tex2).rgb;","_output.a = (tex0 * tex1 * tex2).a;"],PS_Combiners_Mod_AddAlpha:[2,"_output.rgb = (_input.rgb * tex0.rgb);","_output.a = tex0.a;","_specular = tex1.rgb * tex1.a;"],PS_Combiners_Mod_AddAlpha_Wgt:[2,"_output.rgb = (_input.rgb * tex0.rgb);","_output.a = tex0.a;","_specular = tex1.rgb * tex1.a * uTexSampleAlpha.g;"],PS_Combiners_Mod_AddAlpha_Alpha:[2,"_output.rgb = _input.rgb * tex0.rgb;","_output.a = (tex0.a + tex1.a * (0.3 * tex1.r + 0.59 * tex1.g + 0.11 * tex1.b));","_specular = tex1.rgb * tex1.a * (1.0 - tex0.a);"],PS_Combiners_Opaque_Mod_Add_Wgt:[2,"_output.rgb = _input.rgb * mix(tex0.rgb, tex1.rgb, vec3(tex1.a));","_specular = (tex0.rgb * tex0.a) * uTexSampleAlpha.r;"],PS_Guild:[3,"_output.rgb = _input.rgb * mix(tex0.rgb * mix(vec3(1.0, 1.0, 1.0), tex1.rgb * vec3(1.0, 1.0, 1.0), vec3(tex1.a)), tex2.rgb * vec3(1.0, 1.0, 1.0), vec3(tex2.a));","_output.a = tex0.a;"],PS_Guild_Opaque:[3,"_output.rgb = _input.rgb * mix(tex0.rgb * mix(vec3(1.0, 1.0, 1.0), tex1.rgb * vec3(1.0, 1.0, 1.0), vec3(tex1.a)), tex2.rgb * vec3(1.0, 1.0, 1.0), vec3(tex2.a));",""],PS_Guild_NoBorder:[2,"_output.rgb = _input.rgb * tex0.rgb * mix(vec3(1.0, 1.0, 1.0), tex1.rgb * vec3(1.0, 1.0, 1.0), vec3(tex1.a));","_output.a = tex0.a;"],PS_Combiners_Opaque_Alpha_Alpha:[2,"_output.rgb = _input.rgb * mix(mix(tex0.rgb, tex1.rgb, vec3(tex1.a)), tex0.rgb, vec3(tex0.a));",""],PS_Combiners_Opaque_Mod2xNA_Alpha_3s:[3,"_output.rgb = _input.rgb * mix(tex0.rgb * tex1.rgb * 2.0, tex2.rgb, vec3(tex2.a));"],PS_Combiners_Mod_Add_Alpha:[2,"_output.rgb = _input.rgb * tex0.rgb;","_output.a = (tex0.a + tex1.a);","_specular = tex1.rgb * (1.0 - tex0.a);"],PS_Combiners_Opaque_ModNA_Alpha:[2,"_output.rgb = _input.rgb * mix(tex0.rgb * tex1.rgb, tex0.rgb, vec3(tex0.a));",""],PS_Combiners_Opaque_Mod2xNA_Alpha_UnshAlpha:[3,"float glowOpacity = clamp((tex2.a * vec4(1.0, 1.0, 1.0, 1.0).z), 0.0, 1.0); _output.rgb = _input.rgb * mix(tex0.rgb * tex1.rgb * 2.000000, tex0.rgb, vec3(tex0.a)) * (1.0 - glowOpacity);","_specular = tex2.rgb * glowOpacity;"],PS_Combiners_Opaque_Mod2xNA_Alpha_Alpha:[3,"_output.rgb = _input.rgb * mix(mix(tex0.rgb * tex1.rgb * 2.000000, tex2.rgb, vec3(tex2.a)), tex0.rgb, vec3(tex0.a));",""],PS_Combiners_Mod_Depth:[1,"_output.rgb = _input.rgb * tex0.rgb;","_output.a = tex0.a;"],PS_Combiners_Opaque_Alpha:[2,"_output.rgb = _input.rgb * mix(tex0.rgb, tex1.rgb, vec3(tex1.a));",""],Skin:[3,"//Fresnel Rim\r\nif (uHasSpecEmiss) {\r\n vec3 emissiveColor = tex2.rgb;\r\n vec3 emissiveTerm = tex2.rgb;\r\n if (uHasEmissiveGlowing) {\r\n vec3 eyeVec_120 = vPosition.xyz;\r\n vec3 t121 = -(eyeVec_120);\r\n vec2 term_126 = vec2(dot(t121, vNormal), dot(normalize(t121), (vNormal * vec3(0.0500000007, 0.0500000007, 1.0))));\r\n vec2 invTerm_128 = (vec2(1.0) - clamp(term_126, 0.0, 1.0));\r\n vec2 f_129 = (invTerm_128 * invTerm_128);\r\n float fresnel_rim_133 = pow((f_129.x + f_129.y), 0.600000024);\r\n vec3 t136 = (tex2.rgb /*+ ((vec3(0.0500000007, 0.0, 0.400000006) * 1.0) * fresnel_rim_133)*/);\r\n emissiveColor = vec3(t136.r, tex2.g, t136.b);\r\n\r\n float t267 = dot(normalize(vNormal), normalize(-(vPosition.xyz)));\r\n emissiveTerm = mix(vec3(0.0), 2.0*emissiveColor, vec3(pow(clamp(t267, 0.0, 1.0), (( 128.0 * (tex2.a)) + 9.99999975e-006))));\r\n }\r\n\r\n _output.rgb = _input.rgb * tex0.rgb + tex1.rgb + emissiveTerm.rgb;\r\n} else {\r\n _output.rgb = _input.rgb * tex0.rgb;\r\n}\r\n_output.a = tex0.a; //\r\n"],PS_Combiners_Mod_Dual_Crossfade:[3,"_output.rgb = _input.rgb * mix(mix(tex0, texture2D(uTexture2,vTexCoord1), vec4(clamp(uTexSampleAlpha.g, 0.000000, 1.000000))), texture2D(uTexture3,vTexCoord1), vec4(clamp(uTexSampleAlpha.b, 0.000000, 1.000000))).rgb;","_output.a = mix(mix(tex0, texture2D(uTexture2,vTexCoord1), vec4(clamp(uTexSampleAlpha.g, 0.000000, 1.000000))), texture2D(uTexture3,vTexCoord1), vec4(clamp(uTexSampleAlpha.b, 0.000000, 1.000000))).a;"],PS_Combiners_Mod_Masked_Dual_Crossfade:[4,"_output.rgb = _input.rgb * mix(mix(tex0, texture2D(uTexture2,texCoord), vec4(clamp(uTexSampleAlpha.g, 0.000000, 1.000000))), texture2D(uTexture3,texCoord), vec4(clamp(uTexSampleAlpha.b, 0.000000, 1.000000))).rgb;","_output.a = mix(mix(tex0, texture2D(uTexture2,texCoord), vec4(clamp(uTexSampleAlpha.g, 0.000000, 1.000000))), texture2D(uTexture3,texCoord), vec4(clamp(uTexSampleAlpha.b, 0.000000, 1.000000))).a * texture(uTexture4,texCoord2).a;"],PS_Combiners_Mod_Mod_Depth:[2,"_output.rgb = (_input.rgb * tex0.rgb) * tex1.rgb;","_output.a = tex0.a * tex1.a;"]},Hi=Ui;const Gi=class{constructor(t){this.d=t,this.b=new Set}a(){const t=this.b;return this.b=new Set,t}e(t){this.b.has(t)||(this.d.enableVertexAttribArray(t),this.b.add(t))}c(t){const e=this.d;[...t].filter(t=>!this.b.has(t)).forEach(t=>e.disableVertexAttribArray(t))}};const ji=class{};const Ni=class{};const zi=class extends Ni{};function Vi(){var t=new Re(4);return Re!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function qi(t,e,i,r){var n=new Re(4);return n[0]=t,n[1]=e,n[2]=i,n[3]=r,n}function Xi(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Ji(t,e,i,r,n){return t[0]=e,t[1]=i,t[2]=r,t[3]=n,t}function Yi(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t[3]=e[3]+i[3],t}function $i(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t[3]=e[3]-i[3],t}function Ki(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t[3]=e[3]*i,t}function Zi(t){var e=t[0],i=t[1],r=t[2],n=t[3];return Math.hypot(e,i,r,n)}function Qi(t,e){var i=e[0],r=e[1],n=e[2],s=e[3],a=i*i+r*r+n*n+s*s;return a>0&&(a=1/Math.sqrt(a)),t[0]=i*a,t[1]=r*a,t[2]=n*a,t[3]=s*a,t}function tr(t,e,i){var r=e[0],n=e[1],s=e[2],a=e[3];return t[0]=i[0]*r+i[4]*n+i[8]*s+i[12]*a,t[1]=i[1]*r+i[5]*n+i[9]*s+i[13]*a,t[2]=i[2]*r+i[6]*n+i[10]*s+i[14]*a,t[3]=i[3]*r+i[7]*n+i[11]*s+i[15]*a,t}var er=Zi;!function(){var t=Vi()}();const ir=class extends zi{constructor(t,e){super(),this.g=e,this.i=Le(),this.f=Ue(0,0,0),this.ed=Vi(),this.cba=qi(0,0,0,0),this.j=new xi(t,40*e.length/4,!0),this.ba(e)}dc(t,e){const i=this.h;let r=this.g.length;for(let n=0;n0){const n=t[r.d[e]];Qe(this.i,r.i,n.a),tr(this.ed,r.b,n.o),this.f[0]=this.f[0]+this.i[0]*i,this.f[1]=this.f[1]+this.i[1]*i,this.f[2]=this.f[2]+this.i[2]*i,this.cba[0]=this.cba[0]+this.ed[0]*i,this.cba[1]=this.cba[1]+this.ed[1]*i,this.cba[2]=this.cba[2]+this.ed[2]*i,s=!0}}if(s){let t=10*n;i[t++]=this.f[0],i[t++]=this.f[1],i[t++]=this.f[2],i[t++]=this.cba[0],i[t++]=this.cba[1],i[t++]=this.cba[2]}}this.j.c(this.h)}ba(t){const e=40*t.length/4;this.h=new Float32Array(e);const i=this.h,r=t;let n=0;for(let t=0;t0,(2&t)>0,(4&t)>0,(8&t)>0),this.k=t)}f(t){this.ba!=t&&(t?t.d():t.b(),this.ba=t)}h(t){this.fe!=t&&(t?t.d():t.b(),this.fe=t)}i(t){this.m!=t&&(t?t.d():this.m.b(),this.m=t,this.fe=null,this.ba=null)}d(t){t!=this.t&&(t&&t.a(),this.t=t)}o(t){const e=this.n;switch(0==t?e.disable(e.BLEND):(e.enable(e.BLEND),e.blendEquation(e.FUNC_ADD)),t){case 0:break;case 1:e.blendFuncSeparate(e.ONE,e.ZERO,e.ONE,e.ONE);break;case 2:e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE);break;case 3:e.blendFuncSeparate(e.SRC_ALPHA,e.ONE,e.ONE,e.ONE);break;case 4:e.blendFuncSeparate(e.DST_COLOR,e.ZERO,e.ONE,e.ONE);break;case 5:e.blendFuncSeparate(e.DST_COLOR,e.SRC_COLOR,e.ONE,e.ONE);break;case 6:e.blendFuncSeparate(e.DST_COLOR,e.ONE,e.ONE,e.ONE);break;case 10:e.blendFunc(e.ONE,e.ONE);break;case 7:e.blendFuncSeparate(e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE,e.ONE);break;case 8:e.blendFuncSeparate(e.ONE_MINUS_SRC_ALPHA,e.ZERO,e.ONE,e.ONE);break;case 13:e.blendFuncSeparate(e.ONE,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE);break;default:throw 3735927486}}q(t){this.s!=t&&(t.b(this),this.s=t)}};const Cr=class{constructor(t,e){this.l=t,this.fe=e,this.ba=!1,this.h=!1,this.i=t.getExtension("OES_vertex_array_object"),this.m=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic"),this.m?(this.k=t.getParameter(this.m.MAX_TEXTURE_MAX_ANISOTROPY_EXT),WH.debug("Texture anisotropy enabled",this.k)):WH.debug("Texture anisotropy disabled (not supported)"),this.ba=t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0,this.n=t.getExtension("OES_texture_float"),this.h=this.ba&&null!=this.n,this.h?WH.debug("(float texture) Skinning in shader is supported"):WH.debug("(float texture) Skinning in shader is (not supported) "),this.j=new yr(this,e),this.dc=new Sr(t)}g(){return this.l}o(){return this.i}c(){return this.j}e(t){const e=this.dc,i=this.g();e.i(t.d),e.q(t.c),i.drawElements(t.g,t.e,i.UNSIGNED_SHORT,t.h)}a(){this.dc.dc()}d(){this.dc.i(null)}b(t){this.a(),t.forEach(t=>{this.e(t)}),this.d()}};const Tr=class{constructor(t,e){this.j=t,this.i=e,this.l=null,this.d=!1,this.a=0,this.k=0,0!=e&&(this.f=t.options.contentPath+"textures/"+e+WH.WebP.getImageExtension(),this.g=new Image,this.g.onload=()=>{this.e()},this.g.onerror=()=>{this.g=null},this.c(this.g,this.f))}c(t,e){var i=new XMLHttpRequest;i.open("GET",e,!0),i.responseType="arraybuffer",i.onload=e=>{var r=new Blob([i.response]);t.src=window.URL.createObjectURL(r)},i.addEventListener("progress",t=>{const i=this.j;i&&t.lengthComputable&&(i.downloads[e]?i.downloads[e].loaded=t.loaded:i.downloads[e]={loaded:t.loaded,total:t.total},i.updateProgress())}),i.addEventListener("load",()=>{const t=this.j;t&&(delete t.downloads[e],t.updateProgress())}),i.send()}b(){return this.d}h(){this.l=null}e(){this.a=this.g.width,this.k=this.g.height,this.l=this.j.renderer.d(this.g),this.d=!0,this.g=null}},xr={147259:!0},_r=[1,1,1,1,1,1,1,2,1,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1,0,0,1,0,1,0,0,0,2,1,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1],Ar={2:{GeosetType:15,Original:2,Override:11},3:{GeosetType:15,Original:3,Override:12},4:{GeosetType:15,Original:4,Override:13},5:{GeosetType:15,Original:5,Override:14},6:{GeosetType:15,Original:6,Override:15},7:{GeosetType:15,Original:7,Override:16},8:{GeosetType:15,Original:8,Override:17},9:{GeosetType:15,Original:9,Override:18},10:{GeosetType:15,Original:10,Override:19},11:{GeosetType:12,Original:2,Override:0},12:{GeosetType:12,Original:3,Override:0},13:{GeosetType:12,Original:1,Override:5},14:{GeosetType:12,Original:2,Override:3},15:{GeosetType:12,Original:2,Override:2},16:{GeosetType:22,Original:2,Override:1},17:{GeosetType:22,Original:1,Override:2},18:{GeosetType:22,Original:1,Override:3},19:{GeosetType:22,Original:2,Override:3},20:{GeosetType:12,Original:1,Override:1},21:{GeosetType:12,Original:1,Override:9},22:{GeosetType:12,Original:2,Override:10},23:{GeosetType:12,Original:2,Override:6},24:{GeosetType:12,Original:1,Override:5},25:{GeosetType:27,Original:0,Override:1},26:{GeosetType:27,Original:0,Override:1},27:{GeosetType:27,Original:0,Override:1},28:{GeosetType:13,Original:1,Override:0},31:{GeosetType:12,Original:1,Override:13},32:{GeosetType:12,Original:2,Override:14},33:{GeosetType:42,Original:11,Override:1},38:{GeosetType:20,Original:1,Override:9}},wr={ITEM:1,HELM:2,SHOULDER:4,NPC:8,CHARACTER:16,HUMANOIDNPC:32,OBJECT:64,ARMOR:128,PATH:256,ITEMVISUAL:512,COLLECTION:1024},Er=[0,1,0,3,4,5,6,7,8,9,10,0,0,21,22,22,16,21,0,19,5,21,22,22,0,21,21,27],Mr=[0,16,0,15,1,7,10,5,6,6,8,0,0,17,18,19,14,20,0,9,7,21,22,23,0,24,25,0],Dr=[0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,22,0,0,0,0,0,0,0,0,0,0],Br=[0,2,0,4,128,128,128,128,128,128,128,0,0,1,1,1,128,1,0,128,128,1,1,1,0,1,1,2],kr=[13,14,15,16,17,88,89],Pr=[8,9,10,11,12,86,87],Rr={86:[4,0,4,1,4,0,4,1],85:[84,0,84,1,84,0,84,1],84:[3,0,3,1,3,0,3,1],77:[5,1,0,-1,5,0,0,-1],76:[10,0,1,1,10,0,1,1],75:[10,0,1,1,10,0,1,1],74:[5,1,0,-1,5,0,0,-1],73:[5,1,0,-1,5,0,0,-1],72:[5,1,0,-1,5,0,0,-1],71:[5,1,0,-1,5,0,0,-1],37:[7,0,7,1,7,0,7,1],36:[2,0,2,1,2,0,2,1],34:[3,0,3,1,3,0,3,1],33:[5,1,0,-1,5,0,0,-1],31:[0,-1,8,1,0,-1,8,1],30:[11,0,11,1,11,0,11,1],29:[10,0,10,1,10,0,10,1],28:[6,0,6,1,6,0,6,1],27:[4,0,4,1,4,0,4,1],26:[24,0,24,1,24,0,24,1],25:[24,0,24,1,24,0,24,1],23:[1,0,1,1,1,0,1,1],15:[5,0,5,1,5,0,5,1],1:[0,-1,0,-1,0,-1,0,3]},Lr={21:26,22:27,15:28,17:26,25:32,13:32,23:33,14:28,26:26},Ir={0:{21:26,22:27},1:{21:26,22:27},2:{21:30,22:31},3:{21:32,22:33},4:{21:26,22:27,15:28},5:{21:26},6:{21:26,22:27},7:{21:26,22:27},8:{21:26,22:27},9:{21:33,22:28}},Ur=5300,Or="precision mediump float;\r\n\r\nuniform float x;\r\nuniform float y;\r\nuniform float width;\r\nuniform float height;\r\n\r\nattribute vec2 aTextCoord;\r\nvarying vec2 vTextCoords;\r\nvoid main() {\r\n vTextCoords = aTextCoord;\r\n\r\n vec2 pos = vec2(\r\n (x + aTextCoord.x*width)* 2.0 - 1.0,\r\n (y + aTextCoord.y*height)* 2.0 - 1.0\r\n );\r\n\r\n gl_Position = vec4(pos.x, pos.y, 0, 1);\r\n}";class Wr{constructor(){this.c=null,this.a=null,this.b=null}d(){null!=this.c&&this.c.h(),null!=this.a&&this.a.h(),null!=this.b&&this.b.h()}e(){return!(this.c&&!this.c.b())&&(!(this.a&&!this.a.b())&&!(this.b&&!this.b.b()))}}class Hr{constructor(){this.f=null,this.k=null,this.g=null,this.j={},this.d=new De,this.i=null,this.h=null}}const Gr={uDiffuseTexture:null,uSpecularTexture:null,uEmissiveTexture:null};class jr{constructor(t,e,i){this.m=e,this.k=i,this.j=null,this.h=null,this.p=null,this.a=null,this.u=null,this.n=!1,this.d=0,this.f="",this.c=t,this.u=function(t){let e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,1,1,0,t.RGBA,t.UNSIGNED_BYTE,new Uint8Array([0,0,0,0])),t.bindTexture(t.TEXTURE_2D,null);let i=t.createTexture();t.bindTexture(t.TEXTURE_2D,i),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,1,1,0,t.RGBA,t.UNSIGNED_BYTE,new Uint8Array([0,0,0,255])),t.bindTexture(t.TEXTURE_2D,null);let r=new Hr;return r.i=e,r.h=i,r.f=Fe(t,[Or,"precision mediump float;\r\n\r\nvarying vec2 vTextCoords;\r\nuniform sampler2D uDiffuseTexture;\r\nuniform sampler2D uSpecularTexture;\r\nuniform sampler2D uEmissiveTexture;\r\nuniform sampler2D renderResultTexture;\r\nuniform int uBlendMode;\r\nuniform vec2 screenResolution;\r\nuniform int layer;\r\n\r\nuniform float diffuseTexWidth;\r\nuniform float diffuseTexHeight;\r\n\r\nfloat overlayBlend(float a, float b) {\r\n if (b > 0.5) {\r\n return (1.0 - (1.0 - 2.0 * (a - 0.5)) * (1.0 - b));\r\n } else {\r\n return ((2.0 * a) * b);\r\n }\r\n}\r\n\r\nfloat alphaStraightBlend(float a, float b, float alpha) {\r\n return (a * alpha) + (b * (1.0 - alpha));\r\n}\r\n\r\nvoid main() {\r\n vec2 l_texCoord = vTextCoords.xy;\r\n\r\n\r\n l_texCoord.x = max(min(l_texCoord.x, (diffuseTexWidth-0.5)/diffuseTexWidth), 0.5/diffuseTexWidth);\r\n l_texCoord.y = max(min(l_texCoord.y, (diffuseTexHeight-0.5)/diffuseTexHeight), 0.5/diffuseTexHeight);\r\n\r\n vec4 diffuse = texture2D( uDiffuseTexture, l_texCoord );\r\n vec4 backGround = texture2D( renderResultTexture, gl_FragCoord.xy / screenResolution );\r\n\r\n if (uBlendMode == 1) {\r\n // Blit (we do nothing?)\r\n //if (diffuse.a < 0.001) discard;\r\n\r\n //vec4 finalColor = diffuse;\r\n\r\n //diffuse = vec4(finalColor.rgb, finalColor.a);\r\n } else if (uBlendMode == 2) {\r\n // Multiply\r\n if (diffuse.a < 0.001) discard;\r\n\r\n vec4 multTexture = diffuse;\r\n vec3 finalColor = (backGround.rgb * multTexture.rgb);\r\n\r\n diffuse = vec4(finalColor.rgb, 1.0);\r\n } else if (uBlendMode == 3) {\r\n // Overlay\r\n if (diffuse.a < 0.001) discard;\r\n\r\n vec4 overlayTex = diffuse;\r\n\r\n vec3 finalColor = vec3(\r\n overlayBlend(overlayTex.r, backGround.r),\r\n overlayBlend(overlayTex.g, backGround.g),\r\n overlayBlend(overlayTex.b, backGround.b)\r\n );\r\n\r\n vec3 mainTexVisible = backGround.rgb * (1.0 - overlayTex.a);\r\n vec3 overlayTexVisible = finalColor.rgb * (overlayTex.a);\r\n finalColor = (mainTexVisible + overlayTexVisible);\r\n\r\n diffuse = vec4(finalColor, backGround.a);\r\n } else if (uBlendMode == 5) {\r\n // AlphaStraight\r\n vec4 overlayTex = diffuse;\r\n\r\n //float alphaMult = 1.0;\r\n //vec3 finalColor = vec3(\r\n // alphaStraightBlend(overlayTex.r, backGround.r, alphaMult*overlayTex.a),\r\n // alphaStraightBlend(overlayTex.g, backGround.g, alphaMult*overlayTex.a),\r\n // alphaStraightBlend(overlayTex.b, backGround.b, alphaMult*overlayTex.a)\r\n //);\r\n vec3 finalColor = overlayTex.rgb * overlayTex.a + backGround.rgb * (1.0 - overlayTex.a);\r\n\r\n diffuse = vec4(finalColor.rgb, 1.0);\r\n } else if (uBlendMode == 0 || uBlendMode == 4 || uBlendMode == 6 || uBlendMode == 7) {\r\n // default, Screen, InferAlphaBlend, Unknown1\r\n if (diffuse.a < 0.001) discard;\r\n\r\n vec3 finalColor = mix(backGround.rgb, diffuse.rgb, diffuse.a);\r\n\r\n diffuse = vec4(finalColor.rgb, 1.0);\r\n }\r\n\r\n gl_FragColor = diffuse;\r\n}"],null,null),r.k=Fe(t,[Or,"precision mediump float;\r\n\r\nvarying vec2 vTextCoords;\r\nuniform sampler2D uDiffuseTexture;\r\nuniform sampler2D uSpecularTexture;\r\nuniform sampler2D uEmissiveTexture;\r\nuniform sampler2D renderResultTexture;\r\nuniform int uBlendMode;\r\n\r\nvoid main() {\r\n vec4 diffuse = texture2D( uDiffuseTexture, vTextCoords.xy );\r\n vec4 specular = texture2D( uSpecularTexture, vTextCoords.xy );\r\n if (diffuse.a < 0.001) discard;\r\n gl_FragColor = vec4(specular.rgb, 1.0);\r\n}"],null,null),r.g=Fe(t,[Or,"precision mediump float;\r\n\r\nvarying vec2 vTextCoords;\r\nuniform sampler2D uDiffuseTexture;\r\nuniform sampler2D uSpecularTexture;\r\nuniform sampler2D uEmissiveTexture;\r\nuniform sampler2D renderResultTexture;\r\nuniform int uBlendMode;\r\nuniform vec2 screenResolution;\r\nuniform float emissiveAlphaOverride;\r\nuniform int layer;\r\n\r\nvoid main() {\r\n vec4 diffuse = texture2D( uDiffuseTexture, vTextCoords.xy );\r\n vec4 emissive = texture2D( uEmissiveTexture, vTextCoords.xy );\r\n vec4 backGround = texture2D( renderResultTexture, gl_FragCoord.xy / screenResolution );\r\n\r\n if (diffuse.a < 0.001) discard;\r\n// if (emissive.a < 0.001) discard;\r\n\r\n //TODO: This is a hack from what was observed in Nightborne texture customization with tatoos.\r\n //TODO: But Maybe switch should be over layer or something else instead of blend\r\n float alpha = 1.0;\r\n\r\n if (emissiveAlphaOverride > -1.0) {\r\n alpha = emissiveAlphaOverride;\r\n } else if (layer <= 1) {\r\n alpha = 0.0;\r\n } else {\r\n alpha = emissive.a;\r\n }\r\n\r\n gl_FragColor = vec4(emissive.rgb, alpha);\r\n}"],null,null),r.j={},r.a=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,r.a),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0,1,0,0,1,1,1]),t.STATIC_DRAW),t.bindBuffer(t.ARRAY_BUFFER,null),r.e=t.createBuffer(),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,r.e),t.bufferData(t.ELEMENT_ARRAY_BUFFER,new Int16Array([0,1,2,1,3,2]),t.STATIC_DRAW),t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null),r.b=t.createFramebuffer(),r.c={loc:t.getAttribLocation(r.f.program,"aTextCoord"),type:t.FLOAT,size:2,offset:0,stride:0},r}(t)}t(){const t=new Date,e=t.toISOString().split("T")[0],i=`${String(t.getHours()).padStart(2,"0")}-${String(t.getMinutes()).padStart(2,"0")}-${String(t.getSeconds()).padStart(2,"0")}`,r=65536*Math.random()|0;this.f=`${r}_${e}_${i}`,this.d=0;let n=this.c;this.a||(this.a=n.createTexture(),n.bindTexture(n.TEXTURE_2D,this.a),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,this.m,this.k,0,n.RGBA,n.UNSIGNED_BYTE,null),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR)),this.j||(this.j=n.createTexture(),n.bindTexture(n.TEXTURE_2D,this.j),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,this.m,this.k,0,n.RGBA,n.UNSIGNED_BYTE,null),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR)),this.h||(this.h=n.createTexture(),n.bindTexture(n.TEXTURE_2D,this.h),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,this.m,this.k,0,n.RGBA,n.UNSIGNED_BYTE,null),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR)),this.p||(this.p=n.createTexture(),n.bindTexture(n.TEXTURE_2D,this.p),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,this.m,this.k,0,n.RGBA,n.UNSIGNED_BYTE,null),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.bindTexture(n.TEXTURE_2D,null)),n.bindFramebuffer(n.FRAMEBUFFER,this.u.b),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,this.j,0),n.clear(n.COLOR_BUFFER_BIT|n.DEPTH_BUFFER_BIT),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,this.h,0),n.clear(n.COLOR_BUFFER_BIT|n.DEPTH_BUFFER_BIT),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,this.p,0),n.clear(n.COLOR_BUFFER_BIT|n.DEPTH_BUFFER_BIT),n.useProgram(this.u.k.program),n.bindBuffer(n.ARRAY_BUFFER,this.u.a),n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,this.u.e),this.u.d.disableAll(),this.u.d.enable(n,[this.u.c]),n.viewport(0,0,this.m,this.k)}r(t,e,i,r,n,s,a,o){const l=this.c,h=this.u;h.j.x=e,h.j.y=i,h.j.width=r,h.j.height=n,h.j.diffuseTexWidth=t.c.a,h.j.diffuseTexHeight=t.c.k,null==t.a&&null==t.b||(this.n=!0);let u=0;1==s?u=1:4==s?u=2:6==s?u=3:7==s?u=4:9==s?u=5:15==s?u=6:16==s&&(u=7),h.j.uBlendMode=u,h.j.screenResolution=new Float32Array([this.m,this.k]),h.j.uDiffuseTexture=null!=t.c?t.c.l:h.i,h.j.uSpecularTexture=null!=t.a?t.a.l:h.i,h.j.uEmissiveTexture=null!=t.b?t.b.l:h.h,h.j.renderResultTexture=null!=this.a?this.a:h.i,h.j.layer=a,h.j.emissiveAlphaOverride=o,l.disable(l.CULL_FACE),l.disable(l.DEPTH_TEST),l.disable(l.BLEND),this.e(h.f,h.j,this.j),this.e(h.k,h.j,this.h),this.e(h.g,h.j,this.p),this.d++,l.useProgram(null)}s(){let t=this.c;t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindTexture(t.TEXTURE_2D,null),t.enable(t.CULL_FACE),t.enable(t.DEPTH_TEST)}e(t,e,i){let r=this.c;r.useProgram(t.program),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,i,0),r.bindTexture(r.TEXTURE_2D,this.a),r.copyTexImage2D(r.TEXTURE_2D,0,r.RGBA,0,0,this.m,this.k,0),r.bindTexture(r.TEXTURE_2D,null),pe(t,e),r.drawElements(r.TRIANGLES,6,r.UNSIGNED_SHORT,0),pe(t,Gr)}l(t){if(0==t)return this.j;if(1==t)return this.h;if(2==t)return this.p;throw new Error("unknown usage "+t)}b(t){let e=null;return e={l:t,a:this.m,k:this.k,d:!0},e}i(){let t=this.c;this.a&&t.deleteTexture(this.a),this.j&&t.deleteTexture(this.j),this.h&&t.deleteTexture(this.h),this.p&&t.deleteTexture(this.p),this.j=null,this.h=null,this.p=null,this.a=null,this.u=null,this.c=null}g(t){switch(t){case 0:return this.b(this.j);case 1:return this.b(this.h);case 2:return this.b(this.p);default:return null}}o(){}q(t){}}function Nr(){var t=new Re(2);return Re!=Float32Array&&(t[0]=0,t[1]=0),t}function zr(t,e){var i=new Re(2);return i[0]=t,i[1]=e,i}function Vr(t,e,i){return t[0]=e,t[1]=i,t}function qr(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t}function Xr(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t}function Jr(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t}!function(){var t=Nr()}();function Yr(){var t=new Re(9);return Re!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}function $r(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t}function Kr(t,e,i){var r=e[0],n=e[1],s=e[2],a=e[3],o=e[4],l=e[5],h=e[6],u=e[7],c=e[8],d=i[0],f=i[1],g=i[2],p=i[3],m=i[4],b=i[5],y=i[6],F=i[7],v=i[8];return t[0]=d*r+f*a+g*h,t[1]=d*n+f*o+g*u,t[2]=d*s+f*l+g*c,t[3]=p*r+m*a+b*h,t[4]=p*n+m*o+b*u,t[5]=p*s+m*l+b*c,t[6]=y*r+F*a+v*h,t[7]=y*n+F*o+v*u,t[8]=y*s+F*l+v*c,t}function Zr(){var t=new Re(4);return Re!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function Qr(t,e,i){i*=.5;var r=Math.sin(i);return t[0]=r*e[0],t[1]=r*e[1],t[2]=r*e[2],t[3]=Math.cos(i),t}function tn(t,e,i,r){var n,s,a,o,l,h=e[0],u=e[1],c=e[2],d=e[3],f=i[0],g=i[1],p=i[2],m=i[3];return(s=h*f+u*g+c*p+d*m)<0&&(s=-s,f=-f,g=-g,p=-p,m=-m),1-s>Pe?(n=Math.acos(s),a=Math.sin(n),o=Math.sin((1-r)*n)/a,l=Math.sin(r*n)/a):(o=1-r,l=r),t[0]=o*h+l*f,t[1]=o*u+l*g,t[2]=o*c+l*p,t[3]=o*d+l*m,t}var en,rn,nn,sn,an,on,ln=Xi,hn=Ji,un=Qi;en=Le(),rn=Ue(1,0,0),nn=Ue(0,1,0),sn=Zr(),an=Zr(),on=Yr();const cn=class{constructor(t){this.buffer=new DataView(t),this.position=0}getBool(){var t=0!=this.buffer.getUint8(this.position);return this.position+=1,t}getUint8(){var t=this.buffer.getUint8(this.position);return this.position+=1,t}getInt8(){var t=this.buffer.getInt8(this.position);return this.position+=1,t}getUint16(){var t=this.buffer.getUint16(this.position,!0);return this.position+=2,t}getInt16(){var t=this.buffer.getInt16(this.position,!0);return this.position+=2,t}getUint32(){var t=this.buffer.getUint32(this.position,!0);return this.position+=4,t}getInt32(){var t=this.buffer.getInt32(this.position,!0);return this.position+=4,t}getFloat(){var t=this.buffer.getFloat32(this.position,!0);return this.position+=4,t}getString(t){void 0===t&&(t=this.getUint16());for(var e="",i=0;it.byteLength)return!1;const r=new cn(t);r.position=i.timesOffset,this.f=new Array(i.timesCount);for(let t=0;t=0&&(t=this.j1){if(n.f.length>1){for(var s=-1,a=n.f.length-1,o=0;o=n.f[o]&&t<=n.f[o+1]){s=o;break}if(-1==s)return r=th?u=1:l!=h&&(u=(t-l)/(h-l)),u=Math.max(0,Math.min(1,u)),n.g(n.h[s],n.h[s+1],u,r)}return r=n.d(r,n.h[s])}return n.h.length>0?r=n.d(r,n.h[0]):i}return 0==n.h.length?null!=i?i:r:r=n.d(r,n.h[0])}}class pn extends gn{constructor(){super(),this.ba=Le()}m(){return Le()}g(t,e,i,r){return Ze(r,t,e,i)}d(t,e){return Oe(t,e),t}a(t){return We(Le(),t.getFloat(),t.getFloat(),t.getFloat())}}class mn extends gn{constructor(){super(),this.ba=Zr()}m(){return Zr()}g(t,e,i,r){return tn(r,t,e,i)}d(t,e){return ln(t,e),t}a(t){let e=t.getFloat(),i=t.getFloat(),r=t.getFloat(),n=t.getFloat();const s=hn(Zr(),e,i,r,n);return un(s,s),s}}class bn extends gn{constructor(){super(),this.ba=Zr()}m(){return Zr()}g(t,e,i,r){return tn(r,t,e,i)}d(t,e){return ln(t,e),t}a(t){let e=(t.getUint16()-32767)/32767,i=(t.getUint16()-32767)/32767,r=(t.getUint16()-32767)/32767,n=(t.getUint16()-32767)/32767;const s=hn(Zr(),e,i,r,n);return un(s,s),s}}class yn extends gn{constructor(){super()}a(t){return t.getUint16()}m(){return 0}g(t,e,i,r){return t+(e-t)*i}d(t,e){return e}}class Fn extends yn{a(t){return t.getFloat()}}class vn extends yn{a(t){return t.getUint8()}}class Sn{constructor(){this.i=[],this.c=[]}f(){var t=this;if(t.c)for(var e=0;e1&&n.i.length>1){for(var a=-1,o=n.i.length,l=0;l=n.i[l]&&t<=n.i[l+1]){a=l;break}-1==a&&(a=n.i.length-1);var h=n.i[a],u=n.i[a+1],c=0;return h!=u&&(c=(t-h)/(u-h)),n.a(s[a],s[a+1],c,i)}return s.length>0?i=n.b(i,s[0]):e}}class Cn extends Sn{constructor(){super(),this.ba=Nr()}h(){return Nr()}a(t,e,i,r){return n=r,a=e,o=i,l=(s=t)[0],h=s[1],n[0]=l+o*(a[0]-l),n[1]=h+o*(a[1]-h),n;var n,s,a,o,l,h}b(t,e){var i,r;return r=e,(i=t)[0]=r[0],i[1]=r[1],t}g(t){return Vr(Nr(),t.getFloat(),t.getFloat())}}class Tn extends Sn{constructor(){super()}h(){return Le()}a(t,e,i,r){return Ze(r,t,e,i)}b(t,e){return Oe(t,e),t}g(t){return We(Le(),t.getFloat(),t.getFloat(),t.getFloat())}}class xn extends Sn{constructor(){super()}h(){return 0}a(t,e,i,r){return t+(e-t)*i}b(t,e){return e}g(t){return t.getUint16()}}function _n(t,e,i,r){const n=t.getInt32(),s=t.getInt32(),a=t.getInt32(),o=t.getInt32(),l=i();if(n>0){const t=new cn(e);t.position=s,l.i=new Array(n);for(let e=0;e0){const t=new cn(e);t.position=o,l.c=new Array(a);for(let e=0;e0&&h>0)if(!n||t=this.j.length&&(t=0),this.j[t].k)}g(t,e,i,r){if(!this.j||0==this.j.length)return i;let n=t.d.a;n>=this.j.length&&(n=0);let s=this.j[n].l(t.d.c,e,i,r);if(t.a>0&&t.a<1){let r=this.j[0].m(),n=t.b.a;n>=this.j.length&&(n=0);let a=this.j[n].l(t.b.c,e,i,r);a||(a=r),r=this.j[0].m(),s=this.j[0].g(a,s,t.a,r)}if(t.f>0&&t.f<=1&&t.e.a!=t.d.a&&-1!=t.e.a){let r=this.j[0].m(),n=t.e.a;n>=this.j.length&&(n=0);let a=this.j[n].l(t.e.c,e,i,r);a||(a=r),r=this.j[0].m(),s=this.j[0].g(a,s,1-t.f,r)}return s}d(t,e){if(!this.j||t<0||t>=this.j.length)return!1;const i=this.j[t];return!(!i.c||i.k)&&(!!this.e&&i.i(e,this.e))}c(t){return!(!this.j||t<0||t>=this.j.length)&&null!=this.j[t].c}i(t){if(!this.j||0===this.j.length)return 0;if(t<0||t>=this.j.length)return 0;const e=this.j[t];return e&&e.f&&0!==e.f.length?e.f[e.f.length-1]:0}f(){if(this.j&&0!=this.j.length){for(var t=0;t-1){i.r.aM[e.d].m(t);let r=this.x;if(si(r,i.r.aM[e.d].a),ui(r,n,r),1&e.f||2&e.f||4&e.f){if(4&e.f&&2&e.f)Yn(r,0,Jn(n,0)),Yn(r,1,Jn(n,1)),Yn(r,2,Jn(n,2));else if(4&e.f){{let t=Jn(n,0),e=Zi(t);Ki(t,t,Zi(Jn(r,0))/e),Yn(r,0,t)}{let t=Jn(n,1),e=Zi(t);Ki(t,t,Zi(Jn(r,1))/e),Yn(r,1,t)}{let t=Jn(n,2),e=Zi(t);Ki(t,t,Zi(Jn(r,2))/e),Yn(r,2,t)}}else if(2&e.f){{let t=Jn(n,0);Ki(t,t,1/Zi(Jn(r,0))),Ki(t,t,Zi(Jn(n,0))),Yn(r,0,t)}{let t=Jn(n,1);Ki(t,t,1/Zi(Jn(r,1))),Ki(t,t,Zi(Jn(n,1))),Yn(r,1,t)}{let t=Jn(n,2);Ki(t,t,1/Zi(Jn(r,2))),Ki(t,t,Zi(Jn(n,2))),Yn(r,2,t)}}if(1&e.f)Yn(r,3,Jn(n,3));else{let t=qi(e.i[0],e.i[1],e.i[2],1),s=Vi();Xi(s,t),s[3]=0;let a=Vi(),o=Vi();tr(a,t,i.r.aM[i.b.d].a),tr(a,a,n),tr(o,s,r),$i(a,a,o),a[3]=1,Yn(r,3,a)}}let s=this.p;hi(s,n),ui(r,s,r),ui(i.a,i.a,r)}let s=null;if(null!=this.y){let t=this.z(this.y);this.r.a||(this.A=t),this.r.w||(s=this.r.a?this.A:t)}else{let t=this.z(r);this.r.a||(this.A=t),this.r.w||(s=this.r.a?this.A:t)}let a=null;if(null!=this.i){let t=this.z(this.i);this.r.a||(this.k=t),a=this.r.a?this.k:t}let o=null!=s||null!=a,l=ni();o&&(null!=s&&ui(l,l,s),null!=a&&ui(l,l,a)),null!=this.s&&(ci(l,l,this.b.i),ui(l,l,this.s),ci(l,l,Je(this.q,this.b.i))),ui(i.a,i.a,l);let h=120&e.f;if(h){let t=ni();si(t,i.a);let e=i.a,r=Le();bi(r,i.a);let n=Vi();if(16==h){let t=Jn(i.a,0);Ki(t,t,1/Ie(t)),Yn(i.a,0,t);let r=qi(e[4],-e[0],0,0);Yn(e,1,Qi(r,r)),Ke(n,r,t),n[3]=0,Yn(e,2,n)}else if(h>16){if(32==h){let t=Jn(e,1);Ki(t,t,1/Zi(t)),Yn(i.a,1,t);let r=qi(-e[5],e[1],0,0);Yn(e,0,Qi(r,r)),n[3]=0,Yn(e,2,n)}else if(64==h){let t=Jn(e,2);Qi(t,t),Yn(e,2,t);let i=qi(t[1],-t[0],0,0);Qi(i,i),Yn(e,1,i),Ke(n,t,i),n[3]=0,Yn(e,0,n)}}else if(8==h){let t=this.r.isMirrored;if(o){let i=Jn(l,0);i=qi(i[1],i[2],-i[0],0),Qi(i,i),Yn(e,0,i);let r=Jn(l,1);r=qi(t?-r[1]:r[1],t?-r[2]:r[2],t?r[0]:-r[0],0),Qi(r,r),Yn(e,1,r);let n=Jn(l,2);n=qi(n[1],n[2],-n[0],0),Qi(n,n),Yn(e,2,n)}else{Yn(e,0,qi(0,0,-1,0)),Yn(e,1,qi(t?-1:1,0,0,0)),Yn(e,2,qi(0,1,0,0))}}let s=qi(this.b.i[0],this.b.i[1],this.b.i[2],1),a=qi(this.b.i[0],this.b.i[1],this.b.i[2],0),u=Jn(e,0),c=Jn(e,1),d=Jn(e,2);Ki(u,u,r[0]),Ki(c,c,r[1]),Ki(d,d,r[2]),Yn(e,0,u),Yn(e,1,c),Yn(e,2,d),tr(s,s,t),tr(a,a,e);let f=Vi();$i(f,s,a),f[3]=1,Yn(e,3,f)}hi(n,n),ui(i.a,n,i.a),hi(i.g,i.a),li(i.o,i.g),Qe(i.e,i.b.i,i.a)}z(t){const e=this.b;if(!!(640&e.f)){let v=ni();return oi(v),ci(v,v,this.b.i),this.q=e.c.g(t,this.r.as,Le()),ci(v,v,this.q),this.h=e.b.g(t,this.r.as,Zr()),i=this.n,r=this.h,n=r[0],s=r[1],a=r[2],o=r[3],c=n*(l=n+n),d=s*l,f=s*(h=s+s),g=a*l,p=a*h,m=a*(u=a+a),b=o*l,y=o*h,F=o*u,i[0]=1-f-m,i[1]=d+F,i[2]=g-y,i[3]=0,i[4]=d-F,i[5]=1-c-m,i[6]=p+b,i[7]=0,i[8]=g+y,i[9]=p-b,i[10]=1-c-f,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,ui(v,v,this.n),this.q=e.a.g(t,this.r.as,Ue(1,1,1)),di(v,v,this.q),ci(v,v,Je(this.q,this.b.i)),v}var i,r,n,s,a,o,l,h,u,c,d,f,g,p,m,b,y,F;return null}};const Kn=class{constructor(t){this.a=t,this.c=267320826^t;let e=new ArrayBuffer(4);this.f=new DataView(e)}d(){let t=this.c;return t^=t<<13,t^=t>>17,t^=t<<5,this.c=t,t}e(){let t,e=this.d();return this.f.setInt32(0,1065353216|8388607&e),t=2147483648&e?2-this.f.getFloat32(0):this.f.getFloat32(0)-2,t}b(){let t=this.d();return this.f.setInt32(0,1065353216|8388607&t),this.f.getFloat32(0)-1}};const Zn=class{constructor(){this.g=0,this.a=0,this.j=0,this.e=0,this.d=Le(),this.i=0,this.c=0,this.b=0,this.h=0,this.f=0}};const Qn=class{constructor(t,e){this.k=t,this.e=e,this.j=new Zn}d(){return this.j.e+this.k.e()*this.e.R}a(){return this.j.e+this.e.R}f(){return this.j.j+this.e.w}b(t){return this.j.j+30518509e-12*t*this.e.w}c(){let t=this.j.g;return t*=1+this.j.a*this.k.e(),t}g(){return this.j}h(t){Oe(t,this.j.d)}};const ts=class extends Qn{i(t,e){let i,r=e*this.k.b(),n=this.k.e();i=n<1?n>-1?Math.trunc(32767*n+.5):-32767:32767,t.f=i;let s=this.b(i);s<.001&&(s=.001),t.g=function(t,e){let i=Math.abs(t),r=Math.abs(e);return Number((i-Math.floor(i/r)*r).toPrecision(8))*Math.sign(t)}(r,s),t.e=65535&this.k.d(),We(t.a,this.k.e()*this.j.c*.5,this.k.e()*this.j.b*.5,0);let a=this.c(),o=this.j.i;if(o<.001){let e=this.j.h*this.k.e(),i=this.j.f*this.k.e(),r=Math.sin(e),n=Math.sin(i),s=Math.cos(e),o=Math.cos(i);We(t.b,o*r*a,n*r*a,s*a)}else{let e=Le();Oe(e,t.a),e[2]=e[2]-o,Ie(e)>1e-4&&(Ye(e,e),Ve(t.b,e,a))}}};const es=class extends Qn{constructor(t,e,i){super(t,e),this.ba=i}i(t,e){let i,r=e*this.k.b(),n=this.k.e();i=n<1?n>-1?Math.trunc(32767*n+.5):-32767:32767,t.f=i;let s=this.b(i);s<.001&&(s=.001),t.g=function(t,e){let i=Math.abs(t),r=Math.abs(e);return Number((i-Math.floor(i/r)*r).toPrecision(8))*Math.sign(t)}(r,s),t.e=65535&this.k.d();let a=this.j.b-this.j.c,o=this.j.c+a*this.k.b(),l=this.j.h*this.k.e(),h=this.j.f*this.k.e(),u=Math.cos(l),c=Ue(u*Math.cos(h),u*Math.sin(h),Math.sin(l));Ve(t.a,c,o);let d=this.c(),f=this.j.i,g=Ue(.5,.5,.5);0==f?this.ba?We(g,0,0,1):We(g,u*Math.cos(h),u*Math.sin(h),Math.sin(l)):(We(g,0,0,f),Ge(g,t.a,g),Ie(g)>1e-4&&Ye(g,g)),Ve(t.b,g,d)}};const is=class{constructor(){this.a=Le(),this.g=0,this.b=Le(),this.f=0,this.e=2147483647*Math.random()|0,this.c=[Nr(),Nr()],this.d=[Nr(),Nr()]}};const rs=class{constructor(t,e,i,r,n,s){this.d=t,this.b=e,this.c=i,this.e=r,this.f=n,this.a=s}};const ns=class{constructor(t,e,i){this.c=t,this.a=e,this.b=i}};let ss=new Array(128);for(let t=0;t<128;t++)ss[t]=Math.random();const as=ai(0,1,0,0,-1,0,0,0,0,0,1,0,0,0,0,1),os=1e3;class ls{}class hs{constructor(){this.a=Le(),this.c=0,this.b={d:Nr(),c:Le(),a:0,e:0,f:1,b:0}}}function us(t){return qi((t>>16&255)/255,(t>>8&255)/255,(255&t)/255,(t>>24&255)/255)}const cs=[0,0,1,2,3,4];const ds=class{constructor(t,e){this.ag=t,this.E=e,this.af=null,this.O=0,this.ak=!0,this.i=null,this.P=(new Date).getTime(),this.ap=e,this.e=ni(),this.ah=ni(),this.aj=ni(),this.n=ni(),this.q=Vi(),this.R=Yr(),this.S=Le(),this.aq=1,this.t=Le(),this.ae=0,this.J=Le(),this.y=Le(),this.B=[],this.ac=Le(),this.an=0,this.v=0,this.at=0,this.x=0,this.m=Le(),this.aa=Le(),this.H=0,this.as=0,this.av=0,this.j=0,this.A=0,this.z=0,this.am=0,this.b=[],this.M=[];for(let t=0;t>=1}while(s);if(this.j=a,this.A=r-1,this.av=0,(32768&this.ap.l)>0){let t=(this.as+1)*this.L.d();this.av=t/4294967296|0}this.z=1/r,this.am=1/n;let o=!1;(269484032&this.ap.l)>0?(o=!!(1&this.ap.l>>28),this.an=o?2:3):this.an=0;let l=!1,h=!1;(268435456&this.ap.l)>0?h=(1073741824&this.ap.l)>0:1048576&this.ap.l||(l=!(1&this.ap.l)),2==this.an||4==this.an&&o?this.s=h?3:2:3==this.an?this.s=5:this.s=l?1:0,this.K=e.E>1,this.V=this.ag.N.o(224e3),this.Q=this.ag.N.e(8e3),this.X=this.ag.N.m(this.V,this.Q)}N(){var t=this;t.ap.W=null,t.ap.B=null,t.ap.x=null,t.ap.n=t.ap.n.f(),t.ap.u=t.ap.u.f(),t.ap.e=t.ap.e.f(),t.ap.J=t.ap.J.f(),t.ap.y=t.ap.y.f(),t.ap.b=t.ap.b.f(),t.ap.r=t.ap.r.f(),t.ap.j=t.ap.j.f(),t.ap.N=t.ap.N.f(),t.ap.k=t.ap.k.f(),t.ap.t=t.ap.t.f(),t.ap.aa=t.ap.aa.f(),t.ap.A=t.ap.A.f(),t.ap.i=t.ap.i.f(),t.ap.K=t.ap.K.f(),t.ap.C=t.ap.C.f(),t.B=null}W(t){const e=this.E;e.a>=11&&e.a<=13&&t&&(this.d=[Vi(),Vi(),Vi()],Xi(this.d[0],us(t.Start[e.a-11])),Xi(this.d[1],us(t.Mid[e.a-11])),Xi(this.d[2],us(t.End[e.a-11])))}k(t){this.af=t}au(){if(this.i)return;this.ag.o.context;if(!this.Z)if(this.Z=[null,null,null],268435456&this.ap.l)for(let t=0;t-1&&e-1&&this.ap.o1&&(s=1/255),r.uAlphaTreshold=s;const a=e.b(this.ag.aS,new rs(!1,!this.ag.i,i,!0,!1,15),new ki(this.Z.map(t=>t&&t.a),r));this.i=e.k(new ns(this.X,0,0),a,0,this.ap.F)}Y(t,e){if(!this.p)return;let i=ni(),r=this.p.g(),n=!0;this.ap.t.b(t.d.a)&&(n=this.ap.t.g(t,this.ag.as)>0),this.F=n;Ue(0,0,0);if(n){r.g=this.ap.n.g(t,this.ag.as,0),r.a=this.ap.u.g(t,this.ag.as,0),r.h=this.ap.e.g(t,this.ag.as,0),r.f=this.ap.J.g(t,this.ag.as,0);const e=this.ap.y.g(t,this.ag.as,0);We(r.d,0,0,-e),r.j=this.ap.b.g(t,this.ag.as,0),r.e=this.ap.r.g(t,this.ag.as,0),r.b=this.ap.N.g(t,this.ag.as,0),r.c=this.ap.j.g(t,this.ag.as,0),this.af?r.i=this.af.a:r.i=this.ap.k.g(t,this.ag.as,0)}ui(i,i,this.ag.aQ),ui(i,i,this.ag.aM[this.ap.I].a);let s=ni();var a,o;a=s,o=Ue(this.ap.W[0],this.ap.W[1],this.ap.W[2]),a[0]=1,a[1]=0,a[2]=0,a[3]=0,a[4]=0,a[5]=1,a[6]=0,a[7]=0,a[8]=0,a[9]=0,a[10]=1,a[11]=0,a[12]=o[0],a[13]=o[1],a[14]=o[2],a[15]=1,ui(i,i,s),ui(i,i,as);let l=ni(),h=Le();hi(l,this.ag.o.viewMatrix),mi(h,l),this.ar(e,i,h,null,this.ag.o.viewMatrix),this.c(this.ag.o.viewMatrix),this.V.c(new Float32Array(this.b)),this.Q.c(new Uint16Array(this.M)),this.i&&(this.i.e=6*this.O|0,this.i.h=0)}U(t){if(this.B.length<=0)return;if(this.i||this.au(),!this.i)return;if(!t&&this.i.c.a()>vr.GxBlend_AlphaKey)return;this.ag.N.g().e(this.i)}a(t,e){if(!(16&this.ap.l))for(let i=0;i0){let e=Le();if(mi(e,this.e),16384&this.ap.l){Ge(this.y,e,this.t);let i=this.v*(Ie(this.y)/t)+this.at;i>=0&&(i=Math.min(i,1)),Ve(this.J,this.y,i)}if(64&this.ap.l){this.x+=t;let i=.03;if(this.x>i)if(this.x=0,0==this.B.length){let t=i/this.x,r=Le();Ge(r,e,this.t);let n=t*this.ap.p;je(this.m,r,Ue(n,n,n))}else We(this.m,0,0,0)}this.o(t)}}ab(t,e,i){if(Oe(this.aa,e),null==i||16&this.ap.l)si(this.e,t);else{let e=ni();hi(e,i),ui(this.e,e,t)}let r=Le();bi(r,t),this.aq=r[0]}o(t){if((t=Math.max(t,0))<.1)Oe(this.J,this.y);else{let e=Math.floor(t/.1);t=-.1*e+t;let i=Math.min(Math.floor(this.p.g().j/.1),e),r=i+1,n=1;n=r<0?(1&r|r>>1)+(1&r|r>>1):r,Ve(this.J,this.y,1/n);for(let t=0;tMath.max(this.p.b(r.e),.001)?(this.ad(i),i--):this.l(r,t,e)||(this.ad(i),i--),i++}}g(t,e){t.a=Le(),t.b=Le(),t.c=Le(),t.d=0;let i=Ue(e,e,e),r=e*e*.5,n=Ue(r,r,r);je(t.a,this.ap.D,i);let s=Le();this.p.h(s),je(t.b,s,i),je(t.c,s,n),t.d=this.ap.s*e}f(t){if(!this.F)return;if(!this.ak)return;let e=this.p.d();for(this.H=this.H+t*e;this.H>1;)this.h(t),this.H-=1}h(t){let e=this.r();if(this.p.i(e,t),!(16&this.ap.l)){let t=qi(e.a[0],e.a[1],e.a[2],1),i=qi(e.b[0],e.b[1],e.b[2],0);tr(t,t,this.e),tr(i,i,this.e),Oe(e.a,t),Oe(e.b,i),8192&this.ap.l&&(e.a[2]=0)}if(64&this.ap.l){let t=1+this.p.g().a*this.L.e(),i=Le();Ve(i,this.m,t),He(e.b,e.b,i)}if(this.an>=2)for(let t=0;t<2;t++){e.c[t][0]=this.L.b(),e.c[t][1]=this.L.b();let i=Nr();Jr(i,this.ap.m[t],this.L.e()),qr(e.d[t],i,this.ap.Q[t])}}r(){let t=new is;return this.B.push(t),t}ad(t){this.B.splice(t,1)}l(t,e,i){if(this.an>=2)for(let i=0;i<2;i++){let r=t.c[i][0]+e*t.d[i][0];t.c[i][0]=r-Math.floor(r),r=t.c[i][1]+e*t.d[i][1],t.c[i][1]=r-Math.floor(r)}He(t.b,t.b,i.a),16384&this.ap.l&&2*e0)return!1}else{let i=Le();if(mi(i,this.e),Ge(e,t.a,i),$e(e,n)>0)return!1}}return!0}c(t){if(this.b.length=0,0==this.B.length&&null!=this.p)return;hi(this.aj,t),$r(Yr(),t),this.T(null,t);let e=0;for(let t=0;t=os)break}this.O=e}T(t,e){var i,r,n;16&this.ap.l?ui(this.n,e,this.e):null!=t?ui(this.n,e,t):si(this.n,e),mi(this.q,e),4096&this.ap.l&&($r(this.R,this.n),16&this.ap.l&&Math.abs(this.aq)>0&&(i=this.R,r=this.R,n=1/this.aq,i[0]=r[0]*n,i[1]=r[1]*n,i[2]=r[2]*n,i[3]=r[3]*n,i[4]=r[4]*n,i[5]=r[5]*n,i[6]=r[6]*n,i[7]=r[7]*n,i[8]=r[8]*n),We(this.S,this.R[6],this.R[7],this.R[8]),Xe(this.S)<=2.3841858e-7?We(this.S,0,0,1):Ye(this.S,this.S))}C(t){let e=0,i=0;if(0!=this.ap.Y||0!=this.ap.X){let r=new Kn(t.e);e=0==this.ap.L?this.ap.Y:this.ap.Y+r.e()*this.ap.L,i=0==this.ap.X?this.ap.z:this.ap.z+r.e()*this.ap.X}else e=this.ap.Y,i=this.ap.z;return{deltaSpin:i,baseSpin:e}}w(t,e){let i=this.ap.T,r=this.ap.P,n=r[0],s=r[1]-n,a=0,o=t.e,l=t.g;if((i<1||0!=s)&&(a=127&l*this.ap.G+o),i=1&&(r=1);let s=Ue(255,255,255),a=zr(1,1),o=1,l=e.b;this.ap.aa.d(r,s,l.c,this.d),this.d||Ve(l.c,l.c,1/255),this.ap.i.d(r,a,l.d),l.f=this.ap.A.d(r,32767)/32767,this.af?l.b=this.af.d.d(r,0)/32767:l.b=0;let h=0;this.ap.K.i.length>0?(o=0,l.a=this.ap.K.d(r,o),l.a=this.as&l.a+this.av):65536&this.ap.l?(h=(this.as+1)*n.d(),l.a=h/4294967296|0):l.a=0,o=0,l.e=this.ap.C.d(r,o),l.e=l.e+this.av&this.as;let u=1;524288&this.ap.l?(u=Math.max(1+n.e()*this.ap.O[1],99999997e-12),l.d[0]=Math.max(1+n.e()*this.ap.O[0],99999997e-12)*l.d[0]):(u=Math.max(1+n.e()*this.ap.O[0],99999997e-12),l.d[0]=u*l.d[0]),l.d[1]=u*l.d[1]}al(t,e){let i=zr((e.b.a&this.A)*this.z,(e.b.a>>this.j)*this.am),r=0,n=0,s=this.C(t);r=s.baseSpin,n=s.deltaSpin;let a=0,o=Ue(0,0,0),l=Ue(0,0,0),h=!1,u=!1;if(4&this.ap.l&&Xe(t.b)>2.3841858e-7)if(a=1,4096&this.ap.l)h=!0;else{let i=qi(-t.b[0],-t.b[1],-t.b[2],0);tr(i,i,this.n);let r=Le();Oe(r,i);let n=0,s=Xe(r);n=s<=2.3841858e-7?0:1/Math.sqrt(s);let a=Le();Oe(a,r),Ve(a,a,n),Oe(o,a),Ve(o,o,e.b.d[0]),l=Ue(a[1],-a[0],0),Ve(l,l,e.b.d[1]),u=!0,h=!1}if((4096&this.ap.l||h)&&!u){let i=Yr();c=i,d=this.R,c[0]=d[0],c[1]=d[1],c[2]=d[2],c[3]=d[3],c[4]=d[4],c[5]=d[5],c[6]=d[6],c[7]=d[7],c[8]=d[8];let s=e.b.d[0];if(a){let r=0,n=Ue(-t.b[0],-t.b[1],-t.b[2]),a=Xe(n);r=a<=2.3841858e-7?0:1/Math.sqrt(a),Kr(i,this.R,function(t,e,i,r,n,s,a,o,l){var h=new Re(9);return h[0]=t,h[1]=e,h[2]=i,h[3]=r,h[4]=n,h[5]=s,h[6]=a,h[7]=o,h[8]=l,h}(n[0]*r,n[1]*r,0,-n[1]*r,n[0]*r,0,0,0,1)),r>2.3841858e-7&&(s=e.b.d[0]*(1/Math.sqrt(Xe(t.b))/r))}if(this.an,We(o,i[0],i[1],i[2]),Ve(o,o,s),We(l,i[3],i[4],i[5]),Ve(l,l,e.b.d[1]),n=l[0],u=!0,0!=this.ap.z||0!=this.ap.X){let e=r+n*t.g;512&this.ap.l&&1&t.e&&(e=-e);let i=Le();Oe(i,this.S),this.an;let s=Yr(),a=Zr();Qr(a,i,e),function(t,e){var i=e[0],r=e[1],n=e[2],s=e[3],a=i+i,o=r+r,l=n+n,h=i*a,u=r*a,c=r*o,d=n*a,f=n*o,g=n*l,p=s*a,m=s*o,b=s*l;t[0]=1-c-g,t[3]=u-b,t[6]=d+m,t[1]=u+b,t[4]=1-h-g,t[7]=f-p,t[2]=d-m,t[5]=f+p,t[8]=1-h-c}(s,a),ti(o,o,s),We(l,n,l[1],l[2]),ti(l,l,s)}}var c,d;if(!u)if(0!=this.ap.z||0!=this.ap.X){let i=r+n*t.g;512&this.ap.l&&1&t.e&&(i=-i);let s=Math.cos(i),a=Math.sin(i);We(o,s,a,0),Ve(o,o,e.b.d[0]),We(l,-a,s,0),Ve(l,l,e.b.d[1]),134217728&this.ap.l&&He(e.a,e.a,Ue(l[0],l[1],0))}else We(o,e.b.d[0],0,0),We(l,0,e.b.d[1],0);return this.I(o,l,e.a,e.b.c,e.b.f,e.b.b,i[0],i[1],t.c),0}G(t,e){let i=zr((e.b.e&this.A)*this.z,(e.b.e>>this.j)*this.am),r=Ue(0,0,0),n=Ue(0,0,0),s=this.ap.Z;1024&this.ap.l&&(s=Math.min(t.g,s));let a=Vi();Ve(a,t.b,-1),a[3]=0,tr(a,a,this.n),Ve(a,a,s);let o=Ue(a[0],a[1],0);if($e(o,o)>1e-4){let t=1/Ie(o);Jr(e.b.d,e.b.d,t),Xr(o,o,e.b.d),n=Ue(-o[1],o[0],0),Ve(r,a,.5),He(e.a,e.a,r)}else r=Ue(.05*e.b.d[0],0,0),n=Ue(0,.05*e.b.d[1],0);return this.I(r,n,e.a,e.b.c,e.b.f,e.b.b,i[0],i[1],t.c),1}I(t,e,i,r,n,s,a,o,l){const h=[-1,-1,1,1],u=[1,-1,1,-1],c=[0,0,1,1],d=[0,1,0,1];let f=Le(),g=Nr(),p=Nr(),m=Nr();for(let b=0;b<4;b++)We(f,0,0,0),qe(f,f,t,h[b]),qe(f,f,e,u[b]),He(f,f,i),Vr(g,c[b]*this.z+a,d[b]*this.am+o),Vr(p,c[b]*this.ap.H[0]+l[0][0],d[b]*this.ap.H[0]+l[0][1]),Vr(m,c[b]*this.ap.H[1]+l[1][0],d[b]*this.ap.H[1]+l[1][1]),this.b.push(f[0]),this.b.push(f[1]),this.b.push(f[2]),this.b.push(r[0]),this.b.push(r[1]),this.b.push(r[2]),this.b.push(n),this.b.push(g[0]),this.b.push(g[1]),this.b.push(p[0]),this.b.push(p[1]),this.b.push(m[0]),this.b.push(m[1]),this.b.push(s)}};class fs{constructor(){this.a=Le(),this.b=Vi(),this.c=Nr()}}class gs{}const ps=[0,1,2,10,3,4,5,13];function ms(t,e){return Ue(t[4*e+0],t[4*e+1],t[4*e+2])}const bs=class{constructor(t,e){this.ap=t,this.l=e,this.Q=Le(),this.P=Le(),this.z=new gs,this.at=Le(),this.T=Le(),this.an=Le(),this.as=Le(),this.p=Le(),this.d=Le(),this.o=Le(),this.O=Le(),this.W=Le(),this.x=Le(),this.Z=Le(),this.am=Le(),this.m=Le(),this.R=t.o.context,this.av=new Array(e.i.length),this.ar=new Array(e.i.length);for(let i=0;i>1)+(1&e|e>>1));let r=i*this.j+this.S.d;this.z.d=r;let n=t/this.al,s=n;2147483648&n&&(n=1&n|n>>1,s=n+n,r=this.z.d);let a=s*this.H+this.S.c;this.z.c=a,this.z.a=r+this.j,this.z.b=a+this.H}}f(t,e,i){let r,n=this.C[2*this.h],s=this.C[2*this.h+1],a=Le();Ve(a,this.d,1-e),Ge(a,this.O,a),Ve(n.a,a,e),Ve(a,this.p,e),He(a,this.o,a),Ve(a,a,1-e),He(n.a,n.a,a),Ve(a,this.d,1-e),Ge(a,this.x,a),Ve(s.a,a,e),Ve(a,this.p,e),He(a,this.W,a),Ve(a,a,1-e),He(s.a,s.a,a),this.L[this.h]=t,r=i,this.h=this.h+r,this.h>=this.L.length&&(this.h-=this.L.length)}n(t,e){if(this.ap.a)return;let i=Le(),r=1;i=this.l.h.g(t,this.ap.as,i),r=this.l.m.g(t,this.ap.as),this.J(i[0],i[1],i[2]),this.D(r/32767);let n=this.l.r.g(t,this.ap.as);this.k(n);let s=this.l.c.g(t,this.ap.as);this.ak(s);let a=this.l.p.g(t,this.ap.as);this.w(a);let o=this.l.b.g(t,this.ap.as,1);this.U(0!=o);let l=ni();Fi(l,this.ap.aQ,this.ap.aM[this.l.k].a),ci(l,l,this.l.l);let h=Le();this.a(l,h,null),this.ae(e,!1)}ae(t,e){let i,r,n,s,a,o,l,h,u,c,d,f,g,p,m,b,y,F,v,S,C,T,x,_,A,w,E,M,D,B,k,P,R,L,I,U,O,W,H,G,j,N,z,V,q,X,J,Y;for(this.E||this.au>0&&(t=1/this.au+99999997e-12),t>=0?this.u<=t&&(t=this.u):t=0,F=this.M;F!=this.h&&!(t+this.L[F]<=this.u);F=this.M)this.M=this.F(this.M,1);if(!e&&this.K&&this.aj&&this.c){k=t*this.au+this.i,Y=this.v,this.I();let e=!1;if(L=0,k<1?e=!0:(J=this.i,R=1/(k-J),y=Math.floor(k-1),L=Math.ceil(Math.max(y,0))),-1==L||e);else for(P=1,F=1;B=this.h,W=this.C.length,this.C[2*B].b=Y,v=2*this.h+1,H=this.C.length,this.C[v].b=Y,this.f((F-J)*R*-t,(F-J)*R,1),-1!=--L;F=P)P+=1,J=this.i;S=Math.floor(k),this.i=k-S,this.f(0,1,0),D=this.h,G=this.C.length,C=this.C[2*D],T=this.z.d,C.c[1]=this.z.c,C.c[0]=T,x=2*this.h+1,j=this.C.length,_=this.C[x],A=this.z.d,_.c[1]=this.z.b,_.c[0]=A,M=this.h,N=this.C.length,this.C[2*M].b=Y,w=2*this.h+1,z=this.C.length,this.C[w].b=Y}this.Z[2]=34028235e31,this.Z[1]=34028235e31,this.Z[0]=34028235e31,this.am[2]=-34028235e31,this.am[1]=-34028235e31,this.am[0]=-34028235e31,I=this.M;for(let e=this.M;e!=this.h;I=e)b=2*e,X=this.C.length,E=I,O=this.C[2*e],i=b+1,r=this.C[2*e+1],n=(this.af+this.af)*this.L[E]*t+t*this.af*t,O.a[2]=O.a[2]+n,r.a[2]=n+r.a[2],s=O.a[0],a=this.Z[0],a>O.a[0]&&(a=O.a[0],this.Z[0]=s,s=O.a[0]),o=O.a[1],l=this.Z[1],l>o&&(l=O.a[1],this.Z[1]=o,o=O.a[1]),h=O.a[2],u=this.Z[2],u>h&&(u=O.a[2],this.Z[2]=h,h=O.a[2]),s>this.am[0]&&(this.am[0]=s),o>this.am[1]&&(this.am[1]=o),h>this.am[2]&&(this.am[2]=h),c=r.a[0],a>r.a[0]&&(this.Z[0]=c,c=r.a[0]),d=r.a[1],l>d&&(this.Z[1]=d,d=r.a[1]),f=r.a[2],u>f&&(this.Z[2]=f,f=r.a[2]),c>this.am[0]&&(this.am[0]=c),d>this.am[1]&&(this.am[1]=d),f>this.am[2]&&(this.am[2]=f),V=this.L.length,this.L[E]=t+this.L[E],g=this.j,q=this.L.length,p=g*this.L[E]*this.ao+this.z.d,O.c[1]=this.z.c,O.c[0]=p,r.c[1]=this.z.b,r.c[0]=p,m=this.L.length,U=I+1,e=U-m,m>U&&(e=U);this.E=!0}F(t,e){let i=e+t;t=i;let r=this.L.length;return i>=r&&(t=i-r),t}q(t,e,i,r,n,s){let a,o,l,h,u,c,d,f;d=Math.ceil(t),f=Math.max(.25,e),a=Math.ceil(f*d),o=Math.ceil(Math.max(a+1+1,0)),this.L=new Array(o),this.M=0,this.h=0,this.i=0,this.c=!1,this.C=new Array(2*o);for(let t=0;t>1)+(1&s|s>>1)),this.j=(r.a-r.d)/l,h=n,2147483648&n&&(h=(1&n|n>>1)+(1&n|n>>1)),this.H=(r.b-r.c)/h,this.b=1/this.j,this.X=1/this.H,this.au=d,this.u=f,Ki(i,i,1/255),this.v=i,this.S=r,this.e=n,this.al=s,this.aa=0,u=0*this.j+this.S.d,this.z.d=u,c=0*this.H+this.S.c,this.z.c=c,this.z.a=u+this.j,this.z.b=c+this.H,this.N=10,this.ac=10,this.af=0,this.K=!0,this.aj=!0,this.aq=!0,this.ab=this.ap.N.h(0),this.V=this.ap.N.e(0),this.B=this.ap.N.c(this.ab,this.V)}Y(){let t=new Array(this.C.length);for(let e=0,i=0;ethis.ap.aO.length)return null;let r=this.ap.aO[i];if(!r.a||!r.a.d)return null;let n=t;n>=this.l.i.length&&(n=0);let s=this.ap.ai.aa[this.l.i[n]],a=Object.assign({},this.ap.aV);const o=e.n(this.ap.aS,new rs(!1,!this.ap.i,ps[s.a],!0,!1,15),new Pi([r.a],a));return e.l(new ns(this.B,0,0),o,0,0)}ah(t){if(this.y())return;const e=this.ap.N.g();for(let i=0;ivr.GxBlend_AlphaKey)continue;let r=this.h>this.M?2*(this.h-this.M)+2:2*(this.L.length+this.h-this.M)+2;this.av[i].e=r,this.av[i].h=2*this.M*2,e.e(this.av[i])}}};const ys=class{constructor(t){var e=this;e.i=Ue(t.getFloat(),t.getFloat(),t.getFloat()),e.f=[t.getUint8(),t.getUint8(),t.getUint8(),t.getUint8()],e.d=[t.getUint8(),t.getUint8(),t.getUint8(),t.getUint8()],e.b=qi(t.getFloat(),t.getFloat(),t.getFloat(),0),e.a=t.getFloat(),e.c=t.getFloat(),e.h=t.getFloat(),e.e=t.getFloat()}g(){var t=this;t.i=null,t.b=null,t.f=null,t.d=null}};const Fs=class{constructor(t){this.a=t.skinSectionId,this.h=t.level,this.d=t.vertexStart+(t.level<<16),this.g=t.vertexCount,this.c=t.indexStart+(t.level<<16),this.i=t.indexCount,this.e=t.centerBoneIndex,this.j=Ue(t.centerPosition[0],t.centerPosition[1],t.centerPosition[2]),this.k=Ue(t.sortCenterPosition[0],t.sortCenterPosition[1],t.sortCenterPosition[2]),this.b=t.sortRadius}f(){this.j=null,this.k=null}};const vs=class{constructor(t){this.c=t.getUint16(),this.a=t.getUint16()}static b(t){const e=t.q.ai,i=t.z;e.aa&&i.m1?i=1:i<0&&(i=0),i}};const _s=class{constructor(t,e){var i=this;i.a=t.getFloat(),i.c=t.getFloat(),i.b=t.getFloat(),i.d=Xn(t,e)}};function As(t,e,i){return(!!(t&1<>i)+(t&~(-1<>5&31,this.h[2]=this.o>>10&31),t.position+=16,this.E=t.getUint8(),this.g=t.getUint8(),this.a=t.getUint16();const i=t.getUint8(),r=t.getUint8();this.F=t.getUint16(),this.f=t.getUint16(),this.V=t.getUint16(),this.n=Vn(t,e,!1),this.u=Vn(t,e,!1),this.e=Vn(t,e,!1),this.J=Vn(t,e,!1),this.y=Vn(t,e,!1),this.b=Vn(t,e,!1),this.w=t.getFloat(),this.r=Vn(t,e,!1),this.R=t.getFloat(),this.j=Vn(t,e,!1),this.N=Vn(t,e,!1),this.k=Vn(t,e,!1),this.aa=function(t,e){return _n(t,e,Hn,Pn)}(t,e.chunkData),this.A=Xn(t,e.chunkData),this.i=function(t,e){return _n(t,e,Wn,jn)}(t,e.chunkData),this.O=[t.getFloat(),t.getFloat()],this.K=Xn(t,e.chunkData),this.C=Xn(t,e.chunkData),this.Z=t.getFloat(),this.G=t.getFloat(),this.T=t.getFloat(),this.P=[t.getFloat(),t.getFloat()],this.p=t.getFloat(),this.s=t.getFloat(),this.Y=t.getFloat(),this.L=t.getFloat(),this.z=t.getFloat(),this.X=t.getFloat(),this.B=Ue(t.getFloat(),t.getFloat(),t.getFloat()),this.x=Ue(t.getFloat(),t.getFloat(),t.getFloat()),this.D=Ue(t.getFloat(),t.getFloat(),t.getFloat()),this.U=t.getFloat(),this.c=t.getFloat(),this.d=t.getFloat(),this.M=t.getFloat(),this.v=t.getFloat();const n=t.getInt32(),s=t.getInt32();if(n>0){const t=new cn(e.chunkData);t.position=s,this.S=new Array(n);for(var a=0;a0){const t=new cn(e.chunkData);t.position=r,this.j=new Array(i);for(let e=0;e0){const t=new cn(e.chunkData);t.position=s,this.i=new Array(n);for(let e=0;ei);){const r=e.getUint32(),n=e.getUint32();if(e.position+n>i)break;const s=e.position;switch(r){case 825377869:this.c=t.slice(s,s+n),this.f();break;case 1145652819:{const t=n/4;this.a=new Array(t);for(let i=0;it.getInt16())}function js(t,e){return Hs(t,e,t=>t.getUint32())}var Ns=function(t,e,i,r){return new(i||(i=Promise))(function(n,s){function a(t){try{l(r.next(t))}catch(t){s(t)}}function o(t){try{l(r.throw(t))}catch(t){s(t)}}function l(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i(function(t){t(e)})).then(a,o)}l((r=r.apply(t,e||[])).next())})};class zs{constructor(t,e){this.g=new Map,this.j=new Map,this.i=t,this.e=e}d(t,e){for(const i of this.e)if(i.animId===t&&i.subAnimId===e)return i.fileDataId;return 0}a(t){return this.g.has(t)}c(t){return this.g.get(t)||null}f(t){return Ns(this,void 0,void 0,function*(){if(t<=0)return null;if(this.g.has(t))return this.g.get(t);if(this.j.has(t))return this.j.get(t);const e=this.b(t);this.j.set(t,e);try{const i=yield e;return this.g.set(t,i),i}finally{this.j.delete(t)}})}b(t){return Ns(this,void 0,void 0,function*(){const e=this.i+"anim/"+t+".anim",i=yield fetch(e);if(!i.ok)return console.warn("Failed to fetch anim file:",e,i.status),{afsa:null,afsb:null,afm2:null,rawStream:null};const r=yield i.arrayBuffer();return this.h(r)})}h(t){const e={afsa:null,afsb:null,afm2:null,rawStream:t},i=new cn(t),r=t.byteLength;for(;i.positionr);){const n=i.getUint32(),s=i.getUint32(),a=i.position;if(a+s>r)break;switch(n){case 1095976513:e.afsa=t.slice(a,a+s);break;case 1112753729:e.afsb=t.slice(a,a+s);break;case 843925057:e.afm2=t.slice(a,a+s)}i.position=a+s}return e}}var Vs=function(t,e,i,r){return new(i||(i=Promise))(function(n,s){function a(t){try{l(r.next(t))}catch(t){s(t)}}function o(t){try{l(r.throw(t))}catch(t){s(t)}}function l(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i(function(t){t(e)})).then(a,o)}l((r=r.apply(t,e||[])).next())})};class qs{constructor(t,e,i){var r;if(this.T=[],this.M=[],this.h=[],this.P=[],this.V=[],this.n=[],this.G=[],this.o=[],this.B=[],this.C=[],this.W=[],this.v=[],this.x=[],this.c=[],this.i=[],this.O=[],this.Z=[],this.H=[],this.f=[],this.R=[],this.L=[],this.N=[],this.U=[],this.w=[],this.A=[],this.j=[],this.ab=[],this.k=[],this.D=[],this.b=[],this.E=[],this.y=[],this.ac=[],this.I=[],this.Y=[],this.d=[],this.a=null,this.t=[],!t||!t.c)return void console.error("Bad M2 file data");const n=t.h,s=t.c;this.Q=n.flags;const a=(null==i?void 0:i.skb1Data)||s,o=(null==i?void 0:i.bonesArr)||n.bones,l=(null==i?void 0:i.keyBoneLookupArr)||n.keyBoneLookup,h=(null==i?void 0:i.sks1Data)||s,u=(null==i?void 0:i.sequencesArr)||n.sequences,c=(null==i?void 0:i.sequenceLookupArr)||n.sequenceLookup,d=(null==i?void 0:i.globalLoopsArr)||n.globalLoops,f=(null==i?void 0:i.ska1Data)||s,g=(null==i?void 0:i.attachmentsArr)||n.attachments,p=(null==i?void 0:i.attachmentLookupArr)||n.attachmentLookup;this.h=js(h,d),u.count>0&&(this.P=Hs(h,u,t=>new Ms(t)));const m=this.P.map(t=>t.j);this.V=Gs(h,c);const b={chunkData:s,numSequences:this.P.length,sequenceFlags:m},y={chunkData:a,numSequences:this.P.length,sequenceFlags:m};if(n.vertices.count>0&&(this.T=Hs(s,n.vertices,t=>new ys(t))),this.M=e.a(),e.c.length>0&&(this.B=e.c.map(t=>new Fs(t))),e.e.length>0&&(this.C=e.e.map(t=>new Ps(t))),o.count>0){this.n=Hs(a,o,t=>new Ds(t,y));for(const t of this.n)this.t.push(t.c,t.b,t.a)}if((null===(r=null==i?void 0:i.boneOverrides)||void 0===r?void 0:r.length)>0&&this.J(i.boneOverrides),this.o=Gs(a,l),this.G=Gs(s,n.boneLookup),n.materials.count>0&&(this.aa=Hs(s,n.materials,t=>new vs(t))),n.textures.count>0){this.v=Hs(s,n.textures,t=>new ks(t));for(let e=0;e0&&(this.Z=Hs(s,n.textureTransforms,t=>new Ss(t,b))),n.colors.count>0&&(this.N=Hs(s,n.colors,t=>new Ts(t,b))),n.textureWeights.count>0&&(this.U=Hs(s,n.textureWeights,t=>new xs(t,b))),this.u=Ue(n.boundingBox1[0],n.boundingBox1[1],n.boundingBox1[2]),this.l=Ue(n.boundingBox2[0],n.boundingBox2[1],n.boundingBox2[2]),this.s=n.boundingSphereRadius,this.p=Ue(n.collisionBox1[0],n.collisionBox1[1],n.collisionBox1[2]),this.e=Ue(n.collisionBox2[0],n.collisionBox2[1],n.collisionBox2[2]),this.F=n.collisionSphereRadius,n.collisionTriangles.count>0&&(this.c=Hs(s,n.collisionTriangles,t=>t.getUint16())),n.collisionVertices.count>0&&(this.i=Hs(s,n.collisionVertices,t=>Ue(t.getFloat(),t.getFloat(),t.getFloat()))),n.collisionNormals.count>0&&(this.O=Hs(s,n.collisionNormals,t=>Ue(t.getFloat(),t.getFloat(),t.getFloat()))),g.count>0&&(this.R=Hs(f,g,t=>new Cs(t))),this.L=Gs(f,p),n.lights.count>0&&(this.A=Hs(s,n.lights,t=>new Rs(t,b))),n.particleEmitters.count>0&&(this.j=Hs(s,n.particleEmitters,t=>new ws(t,b))),n.ribbonEmitters.count>0&&(this.ab=Hs(s,n.ribbonEmitters,t=>new Bs(t,b))),t.g){const e=new cn(t.g),i={count:e.getInt32(),offset:e.getInt32()};i.count>0&&(this.k=Hs(t.g,i,e=>new _s(e,t.g)))}if(t.m){const e=new cn(t.m),i=t.m.byteLength/2;this.D=new Array(i);for(let t=0;tnew Ms(t)),i=new Map;for(let e=0;ethis.P[e].f&&(this.P[e].f=t[r].f);const r=js(e.sks1Data,e.globalLoopsArr);r.length>this.h.length&&(this.h=r);const n={chunkData:e.skb1Data,numSequences:t.length,sequenceFlags:t.map(t=>t.j)},s=Hs(e.skb1Data,e.bonesArr,t=>new Ds(t,n)),a=Math.min(this.n.length,s.length);for(let t=0;t0){e.position=r;for(let t=0;t0){e.position=s;for(let t=0;t0){e.position=o;for(let t=0;t0){e.position=h;for(let t=0;t=this.P.length||!this.a)return 0;const e=this.P[t];return this.a.d(e.d,e.b)}m(t,e){const i=e.afsb||e.afm2||e.rawStream;if(i){for(const e of this.t)e.d(t,i);if(t>=0&&te&&(e=r)}e>this.P[t].f&&(this.P[t].f=e)}}}z(t){return Vs(this,void 0,void 0,function*(){if(!this.a)return;if(!this.r(t))return;const e=this.S(t);if(e<=0)return;const i=yield this.a.f(e);i&&this.m(t,i);const r=this.P[t];if(r&&r.k>=0&&r.k-1&&1==e.v[r].a&&(this.l=-1e3,this.k=3);for(let r=0;r-1&&i.g-1&&n-1&&i.h-1&&e.Z&&t-1&&i.f-1&&t-1&&i.e0){let e=Vi();r>0?Ki(e,t,1/r):Xi(e,t),Ki(e,e,Ie(Ue(i[8],i[9],i[10]))*this.x.b),1&this.z.l?$i(e,t,e):Yi(e,t,e),r=Zi(e)}return r}o(){this.q,this.q.o.context;const t=this.q.d;if(this.s[0]=this.s[1]=this.s[2]=this.s[3]=1,this.c&&this.c.d(t,this.q.as,this.s),this.B[0]&&(this.s[3]*=this.B[0].a(t,this.q.as)),this.s[3]*=this.q.A[3],!(this.s[3]<=.001)){for(let e=0;e{if(!this.q.a&&(oi(this.A[i]),this.E[i])){let e=!1,r=!1;this.E[i].b&&this.E[i].b.b(t.d.a)?(this.H=this.E[i].b.g(t,this.q.as),r=!0):We(this.H,0,0,0),this.E[i].a&&this.E[i].a.b(t.d.a)?(this.r=this.E[i].a.g(t,this.q.as),e=!0):hn(this.r,0,0,0,1);let n,s=!1;if(this.E[i].c&&this.E[i].c.b(t.d.a)&&(n=this.E[i].c.g(t,this.q.as),s=!0),oi(this.A[i]),ci(this.A[i],this.A[i],Ue(.5,.5,0)),s&&di(this.A[i],this.A[i],n),e){let t=ni();pi(t,this.r,[0,0,0]),ui(this.A[i],this.A[i],t)}r&&ci(this.A[i],this.A[i],this.H),ci(this.A[i],this.A[i],Ue(-.5,-.5,0))}}),this.y){(this.s[3]<1?this.i:this.d).f=this.p()}}}j(t,e){if(!this.d)return;const i=this.q.N.g();if(e)i.e(this.g);else{const e=this.d.c.a()<=vr.GxBlend_AlphaKey,r=null!=this.q.gradientEffect,n=this.s[3]<1;this.F?t?i.e(this.F):i.e(this.g):t&&e&&(n||r)?(i.e(this.g),i.e(this.i)):(!t&&e||t&&!e)&&i.e(this.d)}}f(t,e){const i=this,r=t&&i.n.a<2?vr.GxBlend_Alpha:i.n.a,n=[0,1,2,10,3,4,5,13][r],s=this.q.N,a=this.q,o=Object.assign(Object.assign(Object.assign({},this.q.aV),this.q.ah),this.q.ap);for(let t=0;t2?1:0,o.u_dissolveProcParams=e)}let h=!this.q.i,u=0;null!=this.q.gradientEffect&&r<=2&&(u|=1),l&&(u|=4);const c=s.j(this.q.aS,new rs(i.w,h,n,!0,!i.v,e?0:15),new Bi(this.l,i.e(),o,u));return s.k(new ns(a.j,2*i.x.c,i.x.i),c,this.z.c,this.z.b)}b(){const t=this,e=this.q.N,i=this.q,r=Object.assign(Object.assign({},this.q.aV),this.q.aT);for(let t=0;t{let n=null;i&&(-1e3==this.l?e.U?(n=e.U[r],n||(n={l:null,d:!1})):n={l:null,d:!1}:n=0==i.e.a?i.a:i.e.a>0&&this.q.av[i.e.a]?this.q.av[i.e.a]:{l:null,d:!1},n||(this.a[r].c||(WH.debug("can't find texture for material",r,"type",this.a[r].type,"index",this.a[r].f),this.a[r].c=!0),n={l:this.q.o.greenPixelTexture})),t[r]=n}),t}get show(){return this.D}set show(t){this.D=t}get meshId(){return this.u}h(){this.q=null,this.x=null,this.n=null,this.a=null,this.E=null,this.c=null,this.B=null,this.s=null,this.A=null,this.H=null,this.r=null}};class Js{constructor(t,e){this.e=e,this.f=t,this.a=null,this.c=!1}d(){this.a&&this.a.h(),this.a=null}b(t){0!=this.e.b&&(this.a||(this.a=t.getTexture(this.e.b)))}get type(){return this.e.a}}class Ys{constructor(t){this.b=[],this.d=[],this.c=[],this.e=[];const e=new cn(t),i=e.getUint32();if(1313426259!==i)return void console.error("Bad skin file magic:",i.toString(16));const r={count:e.getInt32(),offset:e.getInt32()},n={count:e.getInt32(),offset:e.getInt32()},s=(e.getInt32(),e.getInt32(),{count:e.getInt32(),offset:e.getInt32()}),a={count:e.getInt32(),offset:e.getInt32()};e.getUint32();if(r.count>0){e.position=r.offset,this.b=new Array(r.count);for(let t=0;t0){e.position=n.offset,this.d=new Array(n.count);for(let t=0;t0){e.position=s.offset,this.c=new Array(s.count);for(let t=0;t0){e.position=a.offset,this.e=new Array(a.count);for(let t=0;ti);){const r=e.getUint32(),n=e.getUint32(),s=e.position;if(s+n>i)break;switch(r){case 827083603:break;case 827542355:{this.a=t.slice(s,s+n);const e=new cn(this.a);this.g=$s(e),this.j=$s(e),this.h=$s(e);break}case 826428243:{this.d=t.slice(s,s+n);const e=new cn(this.d);this.c=$s(e),this.f=$s(e);break}case 826362707:{this.m=t.slice(s,s+n);const e=new cn(this.m);this.n=$s(e),this.i=$s(e);break}case 1146112851:{const e=new cn(t);e.position=s,e.getInt32(),e.getInt32(),this.e=e.getInt32();break}case 1145652801:{const t=n/8;this.k=new Array(t);for(let i=0;i0&&(o=yield this.m(r.d,e));const l=this.bf(r.l,null==o?void 0:o.afid);this.ai=new qs(r,a,o),this.ai.g(e,l),this.L()}catch(e){console.error("Failed to load model",t,e)}})}at(t){return Qs(this,void 0,void 0,function*(){const e=yield fetch(t);if(!e.ok)throw new Error(`Failed to fetch ${t}: ${e.status}`);return e.arrayBuffer()})}m(t,e){return Qs(this,void 0,void 0,function*(){const i=yield this.at(e+"skel/"+t+".skel"),r=new Ks(i);if(r.e>0){return function(t,e){const i=t.globalLoopsArr,r=t.sequencesArr,n=t.sequenceLookupArr,s=t.sks1Data,a=[...t.boneOverrides];let o,l,h;return e.d?e.a?(o=t.bonesArr,l=t.keyBoneLookupArr,h=t.skb1Data,a.push({sks1Data:e.a,sequencesArr:e.j,globalLoopsArr:e.g,skb1Data:e.d,bonesArr:e.c})):(o=e.c,l=e.f,h=e.d):(o=t.bonesArr,l=t.keyBoneLookupArr,h=t.skb1Data),{globalLoopsArr:i,sequencesArr:r,sequenceLookupArr:n,sks1Data:s,bonesArr:o,keyBoneLookupArr:l,skb1Data:h,attachmentsArr:e.m?e.n:t.attachmentsArr,attachmentLookupArr:e.m?e.i:t.attachmentLookupArr,ska1Data:e.m||t.ska1Data,afid:Zs(t.afid,e.k),bfid:e.l.length>0?e.l:t.bfid,boneOverrides:a}}(yield this.m(r.e,e),r)}return r.b()})}bf(t,e){if(!e||0===e.length)return t||[];if(!t||0===t.length)return e;const i=new Map;for(const e of t)i.set(`${e.animId}_${e.subAnimId}`,e);for(const t of e)i.set(`${t.animId}_${t.subAnimId}`,t);return Array.from(i.values())}bg(t){this.bZ=t}L(){const t=this.ai,e=t.v.length,i=t.n.length,r=t.h.length,n=t.j.length,s=t.ab.length;this.as=new Array(r);for(let t=0;t0){this.aM=new Array(i);for(let e=0;e-1&&t{const e=Le();return Qe(e,t,i),e}),n=Ue(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),s=Ue(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY);return r.forEach(t=>{Ne(n,n,t),ze(s,s,t)}),[n,s]}aF(){var t,e,i,r,n,s;if(!this.b)return null;let a=this.aK,o=this.aj;return We(a,9999,9999,999),We(o,-9999,-9999,-9999),Ne(a,a,null===(i=null===(e=null===(t=this.d)||void 0===t?void 0:t.d)||void 0===e?void 0:e.e)||void 0===i?void 0:i.a),ze(o,o,null===(s=null===(n=null===(r=this.d)||void 0===r?void 0:r.d)||void 0===n?void 0:n.e)||void 0===s?void 0:s.g),this.ak(a,o,this.aQ)}X(){const t=this.ai;if(!this.ac)return;if(this.u){We(this.r,this.bZ,this.bZ,this.bZ);const t=this.u.c,r=this.u;if(!t.ac)return;Ve(this.r,this.r,r.d),e=this.aQ,i=this.r,e[0]=i[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=i[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,ui(this.aQ,r.b,this.aQ),r.a>=0&&r.a-1){let e=r;for(let i=0;i0&&(this.as[i]%=t.h[i]);this.W(this.d,e)}let n=this.b?this.b.length:0;this.T.clear();for(let t=0;tt.o()),this.bd&&this.bd.sort(function(t,e){return t.z.b!=e.z.b?t.z.b-e.z.b:t.meshId-e.meshId}),this.Y=!1,this.F&&this.ax)for(let t=0;tt.meshId==n);n=s?n:100*e+1,i.aa(r,r+99,!1),i.aa(n,n,!0)}aa(t,e,i){const r=this.ai;if(!this.b||0==this.b.length)return!1;for(let r=0;r=t&&n.meshId<=e&&(n.show=i)}if(r.D&&r.D.length>0&&this.F)for(let n=0;n=t&&s<=e&&(this.F[n].ak=i)}return!0}M(t,e){if(!this.b)return;const i=e+1;let r=t>0?e+t:-2==t?e+0:i,n=this.b.some(t=>t.meshId==r);r=n||-2==t?r:i,this.aa(r,r,!0)}S(t){this.a=t}ae(t){this.ai.P&&(this.am(t,this.d),this.d.c=!1,this.d.d.b=!1,this.d.d.c=0)}W(t,e){var i,r,n,s;const a=this.ai;if(t.d.c+=e,na.al&&this.aM&&this.aM.length>0&&(this.y+=e,this.y>=na.z)){this.y=0;const e=t.d,i=t.b,r=t.e,n=e.e?e.e.f:-1,s=e.e?e.e.i:"none";let a=0,o=0;for(let t=0;t1){o++;const e=t.f[t.f.length-1];e>a&&(a=e)}}}console.log(`[ANIM DEBUG] "${s}" time=${e.c.toFixed(1)} dur=${n} idx=${e.a} blend=${t.a.toFixed(3)} crossFade=${t.f.toFixed(3)} nextIdx=${i.a} prevIdx=${r.a} | bones=${this.aM.length} animated=${o} maxKF=${a.toFixed(1)}`)}if(t.b.a<0&&!this.t&&!t.c)if(t.d.e.l>-1){let e=32767*Math.random(),i=0,r=t.d.a,n=a.P[r];for(i+=n.m;i-1;)r=n.l,n=a.P[r],i+=n.m;t.b.a=r,t.b.e=a.P[r],t.b.c=0}else{let e=a.P.findIndex(e=>e.d==t.d.e.d&&0==e.b);e>=0&&(t.b.a=e,t.b.e=a.P[e],t.b.c=0)}let o=t.d,l=t.b,h=o.e.f-o.c,u=0,c=null;if(l.a>-1&&(c=a.P[l.a],u=c.e),u>0&&h0?(l.c=ta(u-h,c.f),t.a=h/u):t.a=1,t.f>0){let i=e/1e3;t.e.c+=e,t.f-=i/this.o.crossFadeDuration}if(o.c>=o.e.f){if(na.al&&(console.log(`[ANIM DEBUG] SWITCH: time=${o.c.toFixed(1)} >= dur=${o.e.f} | nextIdx=${l.a} nextName=${null!==(r=null===(i=l.e)||void 0===i?void 0:i.i)&&void 0!==r?r:"none"} freeze=${o.b}`),l.a>-1&&this.aM)){let t=l.a,e=o.a,i=[];for(let r=0;r0&&console.log(`[ANIM DEBUG] BONES LOSING DATA (${i.length}):`,i.join(" | "))}if(l.a>-1&&!o.b){if(l.a>-1&&a.r(l.a))for(;!(32&a.P[l.a].j)&&(64&a.P[l.a].j)>0;){const t=a.P[l.a].k;if(t<0||t>=a.P.length)break;l.a=t,l.e=a.P[t]}t.d=l,t.b=new dn,t.a=1,a.r(l.a)&&a.z(l.a)}else o.e.f>0&&(o.c=ta(o.c,o.e.f))}const d=t.d;isNaN(d.c)?d.c=0:d.e&&d.e.f>0&&d.c>=d.e.f&&(d.c=ta(d.c,d.e.f))}l(t,e=!0){this.am(t,this.d,e)}am(t,e,i=!0){const r=this.ai;let n=!1,s=!1;this.I=-1;const a=t==ea;a&&(t=ia,this.ba(!0));for(let o=0;o{this.I===o&&(this.I=-1,this.aH(o,l,e,i,a))}),!1;s=this.aH(o,l,e,i,a);break}}return t==ia||n?s:this.am(ia,e)}aH(t,e,i,r,n){r&&null!=i.d&&(null!=i.e&&(i.f=1),i.e=new dn,i.e.a=i.d.a,i.e.e=i.d.e,i.e.c=i.d.c);const s=i.d.a!=t;return i.d.a=t,i.d.e=e,i.d.c=0,i.b=new dn,i.a=0,i.c=n,s}ag(t){this.w=t}ad(t){const e=this.ai;let i=null;if(!e.L||!e.L.length)return null;if(t0?1:0,1,(4&t.Flags)>0?1:0,(8&t.Flags)>0?1:0]}aB(){if(!this.gradientEffect)return;const t=this.ah,e=this.ai.u,i=this.ai.l,r=i[2]-e[2];Ji(this.s,.5*(e[0]+i[0]),.5*(e[1]+i[1]),e[2],1),tr(this.s,this.s,this.bc),Ji(this.aP,0,0,1,0),tr(this.aP,this.aP,this.c),We(this.r,this.aP[0],this.aP[1],this.aP[2]),Ye(this.r,this.r),t.u_gradBoundingBox[0]=this.s[0],t.u_gradBoundingBox[1]=this.s[1],t.u_gradBoundingBox[2]=this.s[2],t.u_gradBoundingBox[3]=r>0?1/r:1,t.u_gradUpVec[0]=this.r[0],t.u_gradUpVec[1]=this.r[1],t.u_gradUpVec[2]=this.r[2]}aA(){if(!this.shadowyEffect)return;const t=this.shadowyEffect,e=this.aT,i=t.PrimaryColor,r=(i>>16&255)/255,n=(i>>8&255)/255,s=(255&i)/255;let a,o,l;if(1&t.Flags){const e=t.SecondaryColor;a=(e>>16&255)/255,o=(e>>8&255)/255,l=(255&e)/255}else a=r,o=n,l=s;e.u_shadowInnerColor=[r,n,s,t.InnerStrength],e.u_shadowOuterColor=[a,o,l,t.OuterStrength]}v(){if(!this.dissolveEffect)return;const t=this.dissolveEffect,e=this.ap;e.u_dissolveMisc=[t.EndValue,t.Ramp,0,0];const i=t.TextureScrollRateU||[0,0,0],r=t.TextureScrollRateV||[0,0,0],n=t.TextureScaleU||[1,1,1],s=t.TextureScaleV||[1,1,1],a=t.Scale,o=a&&Math.abs(a)>4.7683716e-7?a:1,l=1/o;e.u_dissolveTransform0=[0,0,(n[0]||1)*o,(s[0]||1)*o],e.u_dissolveTransform1=[0,0,(n[1]||1)*o,(s[1]||1)*o],e.u_dissolveTransform2=[0,0,(n[2]||1)*o,(s[2]||1)*o],this.G=[[(i[0]||0)*l,(r[0]||0)*l],[(i[1]||0)*l,(r[1]||0)*l],[(i[2]||0)*l,(r[2]||0)*l]];const h=t.ModX||[1,1,1,1];e.u_dissolveModX=[h[1],h[2],h[3],h[0]];const u=t.BlendModes||[0,1,2,3];e.u_dissolveSwizzle=[u[0]||0,u[1]||1,u[2]||2,u[3]||3],e.u_dissolveProcParams=[0,t.FresnelIntensity||0,0,1];const c=t.EndValue;e.u_dissolveEdgeGlowColor=[(t.EdgeOverlayU||0)*c,(t.EdgeOverlayV||0)*c,(t.EdgeOverlayScale||0)*c,t.EdgeOverlayIntensity||0];const d=8192&(t.Flags||0)?1:0;e.u_dissolveEdgeGlowParams=[d,0,t.AlphaThreshold||1,0],e.u_dissolveFlags=[0,1,0,0]}bb(){if(!this.dissolveEffect||!this.G)return;const t=.001*this.o.time,e=this.G;for(let i=0;i<3;i++){const r=this.ap["u_dissolveTransform"+i];if(!r)continue;const n=t*e[i][0],s=t*e[i][1];r[0]=n-Math.floor(n),r[1]=s-Math.floor(s)}}aw(){if(!this.dissolveEffect)return void(this.p=[]);const t=this.dissolveEffect.Textures||[];this.p=t.slice(0,3).filter(t=>t>0).map(t=>this.o.getTexture(t))}ay(t){let e=Yr();if($r(e,t),this.F)for(let i=0;i1||o!=e){if(o<2)continue;c=0}else c=2;let d=1;if(i>0&&l==i)d=0;else if(l>0)continue;let f=1;if(r>0&&h==r)f=0;else if(h>0)continue;n[u+3*(f+2*(c+d))]=a.FileDataId}for(let t=0;t<2;t++)for(let e=0;e<2;e++)for(let i=0;i<2;i++){let r=3*(t+2*(e+2*i));if(n[r]>0){let t;return t={a:n[r],c:n[r+1],b:n[r+2]},t}}const s=sa.c(e,r,!0);return s&&0!=s[0]?(r=s[0],e=s[1],sa.a(t,e,i,r)):null}static b(t,e,i,r,n){let s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(let a=0;a1||l!=i){if(l<2)continue;d=0}else d=2;let f=1;if(r>0&&h==r)f=0;else if(h>0)continue;let g=1;if(n>0&&u==n)g=0;else if(u>0)continue;let p=1;if(-1==e||c!=e){if(-1!=c&&-1!=e)continue}else p=0;s[p+2*(g+2*(d+f))]=o.FileDataId}for(let t=0;t<2;t++)for(let e=0;e<2;e++)for(let i=0;i<2;i++)for(let r=0;r<2;r++){let n=r+2*(t+2*(e+2*i));if(s[n])return s[n]}const a=sa.c(i,n,!1);return a&&0!=a[0]?(n=a[0],i=a[1],sa.b(t,e,i,r,n)):0}}class aa{constructor(){this.a=!1,this.e=[]}get loaded(){let t=!!this.f&&this.f.ac;if(t&&this.e.length>0){for(let t of this.e)t();this.e=[]}return t}isLoaded(){return this.loaded}d(t){this.e.push(t)}c(){return this.f}b(t){t.b(this.f,this.a)}getNumAnimations(){var t;return(null===(t=this.f)||void 0===t?void 0:t.ac)?0==this.f.ai.P.length?0:this.f.ai.P.length+1:0}getAnimation(t){var e;return(null===(e=this.f)||void 0===e?void 0:e.ac)?this.f.Q(t):""}resetAnimation(){var t;if(null===(t=this.f)||void 0===t?void 0:t.ac)return this.f.aY()}setAnimPaused(t){var e;if(null===(e=this.f)||void 0===e?void 0:e.ac)return this.f.S(t)}setTPose(t){var e;if(null===(e=this.f)||void 0===e?void 0:e.ac)return this.f.ag(t)}setAnimation(t,e){var i;(null===(i=this.f)||void 0===i?void 0:i.ac)&&this.f.l(t,!!e)}setParticlesEnabled(t){var e;(null===(e=this.f)||void 0===e?void 0:e.ac)&&this.f.H(t)}setRibbonsEnabled(t){var e;(null===(e=this.f)||void 0===e?void 0:e.ac)&&this.f.e(t)}getTexUnits(){var t;return(null===(t=this.f)||void 0===t?void 0:t.ac)?this.f.b:null}setAnimNoSubAnim(t){this.f&&this.f.ba(t)}attachList(t){}setItems(t){}clearSlots(t){}setSheath(t,e){}setAppearance(t){}setShouldersOverride(t){}setCustomizationsLoadedCallback(t){}setModelLoadedCallback(t){throw new Error("Method not implemented.")}setAnimationOverride(t,e){throw new Error("Method not implemented.")}resetAnimationOverride(t){throw new Error("Method not implemented.")}getAnimationDuration(t){throw new Error("Method not implemented.")}getModelBounds(){throw new Error("Method not implemented.")}isRenderReady(){throw new Error("Method not implemented.")}}class oa extends aa{constructor(t,e,i,r,n,s){super(),this.hg=t,this.fe=e,this.i=i,this.ba=r,this.l=n,this.a=s}get fileDataId(){return this.f?this.f.aI:0}get modelInstance(){return this.f}j(){256&this.fe.Item.Flags&&(this.winding=!0,this.isMirrored=!0,this.f.au())}k(t,e,i){this.f&&this.f.aC(t,e,i)}dc(t,e){this.f&&this.f.aR(t,e)}m(t,e,i){this.f&&this.f.aa(t,e,i)}setParticlesEnabled(t){this.f&&this.f.H(t)}get winding(){return!!this.f&&this.f.i}set winding(t){this.f&&(this.f.i=t)}get isMirrored(){return!!this.f&&this.f.isMirrored}set isMirrored(t){this.f&&(this.f.isMirrored=t)}getBounds(){return this.modelInstance.ac?this.modelInstance.aF():[null,null]}g(){this.f&&this.f.X()}h(t){this.f&&this.f.O(t)}}class la extends oa{constructor(t,e,i,r){if(super(t,null,0,0,0,r),this.f=new na(t,t.renderer,e),i)for(let e in i)0!=i[e]&&this.f.aJ(+e,t.getTexture(i[e]))}}class ha{constructor(){this.c=!1,this.b=!1,this.d=null}}const ua=class{constructor(t,e){this.k=t,this.c=[],this.o=[],this.l=!1,this.h=!1;let i=0;if(e.proceduralEffects)for(const t of e.proceduralEffects)this.c.push({effectType:1,effect:t});if(e.modelAttachEffects)for(const t of e.modelAttachEffects)this.c.push({effectType:2,effect:t,modelIndex:i++});if(e.shadowyEffects)for(const t of e.shadowyEffects)this.c.push({effectType:7,effect:t});if(e.dissolveEffects)for(const t of e.dissolveEffects)this.c.push({effectType:11,effect:t});if(e.edgeGlowEffects)for(const t of e.edgeGlowEffects)this.c.push({effectType:12,effect:t});if(e.beamEffects)for(const t of e.beamEffects)this.c.push({effectType:13,effect:t});if(e.cloneEffects)for(const t of e.cloneEffects)this.c.push({effectType:15,effect:t});if(e.gradientEffects)for(const t of e.gradientEffects)this.c.push({effectType:16,effect:t})}i(t){for(const e of this.c){if(2!==e.effectType)continue;const i=e.modelIndex;this.o[i]&&this.o[i].e&&this.o[i].e.loaded&&this.o[i].e.c().l(t)}}n(t){this.l=t}d(){if(this.k.loaded)for(const t of this.c)switch(t.effectType){case 1:this.j(t.effect);break;case 2:this.f(t.effect,t.modelIndex);break;case 7:this.a(t.effect);break;case 11:this.g(t.effect);break;case 12:case 13:case 15:break;case 16:this.m(t.effect)}}j(t){let e=this.k.c();if(1==t.ProcEffectType){let i=t.Value[0];e.A=qi((i>>16&255)/255,(i>>8&255)/255,(255&i)/255,e.A[3])}else if(14==t.ProcEffectType){let i=Math.min(Math.max(t.Value[0],0),1);e.A[3]=i}else if(22==t.ProcEffectType){let i=t.Value[3];e.A=qi((i>>16&255)/255,(i>>8&255)/255,(255&i)/255,e.A[3])}}f(t,e){if(!this.k)return;if(!this.k.loaded)return;let i=this.k.c();if(!this.o[e]){const r=new ha;if(this.o[e]=r,0==t.ModelType){const e=new la(i.o,t.Model,{2:t.Texture},!1);r.e=e}else 1==t.ModelType||2==t.ModelType&&Ma.a(i.o,wr.NPC,t.Model).then(t=>{r.e=t})}const r=this.o[e];if(!r.c){if(!r.e&&!r.a)return;if(r.e&&!r.e.loaded)return;if(r.a&&!r.a.C)return;let b=t.AttachmentID;t.Positioner>-1&&(b=t.Positioner),b<0&&(b=19);let y=i.ad(b);const F=y?y.d:-1;let v=ni();if(y){let t=y.b;ci(v,v,Ue(t[0],t[1],t[2]))}if(ci(v,v,Ue(t.Offset[0],-t.Offset[1],t.Offset[2])),gi(v,v,-t.Yaw),n=v,s=v,a=t.Pitch,o=Math.sin(a),l=Math.cos(a),h=s[0],u=s[1],c=s[2],d=s[3],f=s[8],g=s[9],p=s[10],m=s[11],s!==n&&(n[4]=s[4],n[5]=s[5],n[6]=s[6],n[7]=s[7],n[12]=s[12],n[13]=s[13],n[14]=s[14],n[15]=s[15]),n[0]=h*l-f*o,n[1]=u*l-g*o,n[2]=c*l-p*o,n[3]=d*l-m*o,n[8]=h*o+f*l,n[9]=u*o+g*l,n[10]=c*o+p*l,n[11]=d*o+m*l,fi(v,v,t.Roll),di(v,v,[t.Scale1,t.Scale1,t.Scale1]),di(v,v,[t.Scale2,t.Scale2,t.Scale2]),r.e){const e=r.e.c();e.S(this.l),t.ModelAlpha&&(e.A[3]=t.ModelAlpha),2&t.Flags&&(r.b=!0),t.StartAnimID>0&&t.StartAnimName?(e.l(t.StartAnimName,!1),t.AnimID>0&&t.AnimName&&(r.d=t.AnimName)):t.AnimID>0&&t.AnimName&&e.l(t.AnimName,!1),e.aC(this.k.c(),F,v)}this.o[e].c=!0}var n,s,a,o,l,h,u,c,d,f,g,p,m;if(r.e){const t=r.e.c();if(r.b&&t.ac){const e=i.Q(i.d.d.a),r=t.Q(t.d.d.a);e&&e!==r&&t.l(e)}if(r.d&&t.ac){const e=t.d.d;e.e&&e.c>=e.e.f&&(t.l(r.d,!0),r.d=null)}r.e.g()}r.a&&r.a.b()}m(t){const e=this.k.c();e.gradientEffect||(e.gradientEffect=t)}a(t){const e=this.k.c();e.shadowyEffect||(e.shadowyEffect=t)}g(t){const e=this.k.c();e.dissolveEffect||(e.dissolveEffect=t)}e(t){for(const e of this.o)e&&e.c&&(e.e&&e.e.h(t),e.a&&e.a.h(t))}b(){for(const t of this.o)t&&(t.c=!1,t.e&&t.e.loaded&&t.e.c().aC(null,-1,null),t.a&&t.a&&t.a.K())}p(t){this.o.forEach(e=>{e.e&&e.e.b(t),e.a&&e.a.p(t)})}};class ca extends aa{constructor(t,e){super(),this.o=t,this.s=e,this.l=!1,this.m=!1,this.p=!1,this.ba=-1,this.y=-1,this.v=[],this.fe={},this.z=[],this.r=!1,this.B=null,this.C=0,this.n(e)}n(t){if(this.r)return;this.o.options;if(t.StateKits)for(const e of t.StateKits)this.z.push(new ua(this,e));if(t.Creature&&(this.B=t.Creature.CreatureGeosetData,this.C=t.Creature.CreatureGeosetDataID),t.Model&&(this.f=new na(this.o,this.o.renderer,t.Model),this.f.q(),t.Creature&&t.Creature.ParticleColor&&this.f.V(t.Creature.ParticleColor),t.Scale&&this.f.bg(t.Scale)),this.s.Creature&&this.s.Creature.Texture&&(this.t=this.i(-1,sa.a(this.s.TextureFiles[this.s.Creature.Texture],3,0,0)),this.f.ab(this.t.c,this.t.a,this.t.b)),t.Textures)for(let e in t.Textures)0!=t.Textures[e]&&this.f.aJ(+e,this.o.getTexture(t.Textures[e]));this.p=!0,this.x()}i(t,e){let i=new Wr;return e.a>0&&(i.c=this.o.getTexture(e.a)),e.c>0&&(i.a=this.o.getTexture(e.c)),e.b>0&&(i.b=this.o.getTexture(e.b)),i}x(){this.r||(this.p=!0,this.t||(this.m=!0))}u(t){this.hg=null,t<=0||(this.l=!1,Ma.a(this.o,wr.NPC,t).then(t=>{t instanceof ca&&(this.hg=t)}))}w(){this.f,this.hg}setAnimation(t,e=!0){this.hg&&(this.hg.setAnimation(t),t="Mount"),this.f?this.f.l(t,e):this.d(()=>{var i;null===(i=this.f)||void 0===i||i.l(t,e)})}j(){const t=this.f;if(t.aa(0,0,!0),0!=this.C&&(t.aa(1,1699,!1),this.B))for(let e of this.B){let i=100*(e.GeosetIndex+1),r=i+e.GeosetValue;t.aa(i,i+99,!1),t.aa(r,r,!0)}}q(){this.j()}A(){const t=this.f;t.ac&&this.p&&t.b&&0!=t.b.length&&(this.q(),this.p=!1)}setParticlesEnabled(t){this.f&&this.f.H(t)}getBounds(){if(this.f&&this.f.ac){const[t,e]=this.f.aF();if(this.hg&&this.hg.loaded&&this.l){const[i,r]=this.hg.getBounds();ze(i,i,Ue(0,0,0)),Ne(t,t,i),ze(e,e,r)}return[t,e]}return[null,null]}g(){if(!this.r&&this.loaded){if(!this.l&&this.f&&this.hg&&this.hg.loaded){const t=this.hg.f.ai,e=t.R[t.L[0]],i=ni();ci(i,i,e.b),this.f.aC(this.hg.f,e.d,i,1/this.hg.f.bZ),this.f.l("Mount",!1),this.l=!0}this.dc&&this.dc.g(),this.hg&&this.hg.g(),this.z&&this.z.forEach(t=>t.d()),this.A(),this.f.X()}}h(t){this.f.O(t),this.hg&&this.hg.h(t),this.z&&this.z.forEach(e=>e.e(t))}b(t){super.b(t),this.hg&&this.hg.b(t),this.dc&&this.dc.b(t),this.z&&this.z.forEach(e=>e.p(t))}}function da(t){return new Promise((e,i)=>{$.getJSON(t).done(function(t){e(t)}).fail(function(t,e,r){let n=e+", "+r;console.log("Error loading metadata: "+n),i(e)})})}function fa(t,e,i){let r;return e==wr.HELM?ga(t,1,i):e==wr.SHOULDER?ga(t,3,i):e==wr.ITEM?ga(t,-1,i):(e==wr.NPC||e==wr.HUMANOIDNPC?r="meta/npc/":e==wr.OBJECT?r="meta/object/":e==wr.CHARACTER?r="meta/character/":e==wr.ITEMVISUAL&&(r="meta/itemvisual/"),da(t+r+i+".json"))}function ga(t,e,i){let r="meta/item/";return 1!=e&&3!=e&&4!=e&&5!=e&&6!=e&&7!=e&&8!=e&&9!=e&&10!=e&&16!=e&&19!=e&&20!=e||(r="meta/armor/"+e+"/"),da(t+r+i+".json")}class pa{constructor(){this.e=null,this.d=1,this.b=0,this.a=-1,this.c=!1}}class ma{constructor(t,e){this.b=t,this.a=e}}class ba extends pa{constructor(){super(...arguments),this.ba=[]}}class ya{constructor(t,e){this.a=t,this.b=e}}function Fa(t,e){return t==e||!!t&&(!!e&&(t.b==e.b&&(t.a==e.a||!!t.a&&(!!e.a&&(t.a.a==e.a.a&&(t.a.b==e.a.b&&t.a.c==e.a.c))))))}class va{constructor(t,e){this.j=t,this.b=[],this.c=e,this.h={},this.f={}}a(){const t=[];for(let e of this.c.Options)for(let i of e.Choices)for(let e of i.Elements)e.SkinnedModel&&t.push(e.SkinnedModel.CollectionFileDataID);const e=new Set(t),i=this.j.o;i.renderer;if(0!=e.size)for(let t of e){const e=new ba;e.e=new la(i,t,{},!0),this.j.L[t]=e}}e(t){return sa.a(this.c.TextureFiles[t],this.j.gf,this.j.N,this.j.kj)}d(t){WH.debug("applyCustomization options",t),this.b=[],this.j.v=[];for(const t in this.j.L){this.j.L[t].ba=[]}let e=0,i={},r={};for(let n=0;ne.Id==t[n].optionId);if(WH.debug("option",s),s){let a=s.Choices.find(e=>e.Id==t[n].choiceId);if(WH.debug("choice",a),a){let n=a.Elements.filter(e=>e.BoneSet&&e.BoneSet.BoneFileDataID&&(0==e.VariationChoiceID||t.some(t=>t.choiceId==e.VariationChoiceID)));n.length>0&&(e=n[0].BoneSet.BoneFileDataID);let o=a.Elements.filter(e=>e.Material&&(0==e.VariationChoiceID||t.some(t=>t.choiceId==e.VariationChoiceID)));o.sort((t,e)=>e.VariationChoiceID-t.VariationChoiceID),o.forEach(t=>{WH.debug("element material",t);let e=this.e(t.Material.MaterialResourcesID);if(!e)return void WH.debug("element material: can't get texture files for material",t);let n=this.c.TextureLayers.find(e=>e.ChrModelTextureTargetID==t.Material.TextureTarget);if(!n)return void WH.debug("element material: can't get texture layer for material",t);const s=new ya(e,n.TextureType);Fa(s,this.f[t.Material.TextureTarget])?(i[t.Material.TextureTarget]=this.h[t.Material.TextureTarget],r[t.Material.TextureTarget]=this.f[t.Material.TextureTarget]):(i[t.Material.TextureTarget]=this.j.i(n.TextureType,e),r[t.Material.TextureTarget]=s)}),a.Elements.filter(e=>e.Geoset&&(0==e.VariationChoiceID||t.some(t=>t.choiceId==e.VariationChoiceID))).sort((t,e)=>t.Geoset.GeosetType-e.Geoset.GeosetType||t.Geoset.GeosetID-e.Geoset.GeosetID).forEach(t=>{WH.debug("element geoset",t),this.b.push(100*t.Geoset.GeosetType+t.Geoset.GeosetID)}),a.Elements.filter(e=>e.SkinnedModel&&(0==e.VariationChoiceID||t.some(t=>t.choiceId==e.VariationChoiceID))).forEach(t=>{WH.debug("element skinnedmodel",t),t.ChrCustItemGeoModifyID;const e=this.j.L[t.SkinnedModel.CollectionFileDataID];t.SkinnedModel.GeosetID<100&&e.ba.push(new ma(100*t.SkinnedModel.GeosetType+t.SkinnedModel.GeosetID,(1&t.SkinnedModel.Flags)>0))});let l=a.Elements.find(e=>0!=e.CondModelFileDataId&&(0==e.VariationChoiceID||t.some(t=>t.choiceId==e.VariationChoiceID)));24!=s.Id&&353!=s.Id||(l&&!this.j.overrideModelFile?this.j.overrideModelFile=l.CondModelFileDataId:!l&&this.j.overrideModelFile&&(this.j.overrideModelFile=0)),a.Elements.filter(e=>e.ChrCustItemGeoModifyID&&(0==e.VariationChoiceID||t.some(t=>t.choiceId==e.VariationChoiceID))).forEach(t=>{WH.debug("element ChrCustItemGeoModify",t),this.j&&this.j.v.push(t.ChrCustItemGeoModifyID)})}}}if(!this.h[10]){let e=this.c.Options.find(t=>t.Id==this.c.HairStyleOptionId);if(e){let n=e.Choices[1];if(n){let e=n.Elements.filter(e=>e.Material&&10==e.Material.TextureTarget&&(0==e.VariationChoiceID||t.some(t=>t.choiceId==e.VariationChoiceID)));if(e.length>0){let t=this.e(e[0].Material.MaterialResourcesID);if(t){const n=new ya(t,0);Fa(n,this.f[e[0].Material.TextureTarget])?(i[e[0].Material.TextureTarget]=this.h[e[0].Material.TextureTarget],r[e[0].Material.TextureTarget]=this.f[e[0].Material.TextureTarget]):(i[e[0].Material.TextureTarget]=this.j.i(6,t),r[e[0].Material.TextureTarget]=n)}}}}}this.h=i,this.f=r,this.j.c().D(e),this.j.m=!0}i(){let t=[];for(let e=0;ee.optionId==t.Id)||e.options.push({optionId:t.Id,choiceId:t.Choices[0].Id});return e}}class Sa{constructor(){this.b=null,this.a=1,this.c=!1}}const Ca=class{constructor(t,e,i){this.j=t,this.e=e,this.i=[],this.h=!1,this.d=[],i&&this.b(i)}a(){}b(t){this.g=t;fa(this.j.hg.options.contentPath,wr.ITEMVISUAL,t).then(t=>{this.c(t)})}c(t){if(this.i=new Array(7),t.ItemEffects)for(let e=0;e{this.E(t)}).catch(()=>{t.H=!0})}E(t){if(!this.l)return void WH.debug("Char model was destroyed before it was loaded",this.v);const e=this.l.o,i=(e.options,this.i),r=this.q,n=this.z;if(this.A=t.Item.Flags,this.F=t.Item.InventoryType,this.I=t.Item.ItemClass,this.G=t.Item.ItemSubClass,t.ComponentTextures){this.J=[];for(let s in t.ComponentTextures){const a=parseInt(s),o=sa.a(t.TextureFiles[t.ComponentTextures[s]],i,n,r);if(o){let t;t={region:a,gender:this.i,file:o.a,texture:null},12!=a?t.texture=e.getTexture(o.a):16==this.B&&this.l.c().aJ(2,e.getTexture(o.a)),this.J.push(t)}}}this.e=t.Item.GeosetGroup,this.s=t.Item.AttachGeosetGroup,this.j=t.Item.GeosetGroupOverride,1==this.B&&(0==i?this.w=t.Item.HideGeosetMale:this.c=t.Item.HideGeosetFemale);let s=0;if(3==this.B?s=2:Br[this.B]!=wr.ARMOR&&(s=1),s>0&&t.ComponentModels)for(let i=0;i{this.l.p=!0})}}}}7==a&&this.e[2]>0&&(this.L+=2);const o=0!=this.x?this.x:0!=t.Item.ItemVisual?t.Item.ItemVisual:0;if(0!=o){const t=2==this.I?this.G:-1;for(let e=0;e{e.e.b(t)}),this.k&&this.k.e.b(t)}}class xa extends ca{constructor(t,e){super(t,e),this.J=new Map,this.P=[],this.L={},this.D=null,t.options.charCustomization&&(this.H=t.options.charCustomization),this.wv=new Array(52);for(let t=0;t<52;t++)this.wv[t]=100*t+_r[t]}get overrideModelFile(){return this.yx}set overrideModelFile(t){const e=this.yx;this.yx=t,e!=t&&(this.on(),this.O(),this.p=!0)}on(){let t=this.yx?this.yx:this.cba.Model;this.f=new na(this.o,this.o.renderer,t),this.f.q(),this.f.aU(27==this.kj||30==this.kj),this.D=null,this.p=!0}n(t){const e=this.o.options;this.kj=t.Character.Race,this.gf=t.Character.Gender,this.N=e.cls?e.cls:0;const i=e&&e.items;fa(e.contentPath,wr.CHARACTER,t.Character.ChrModelId).then(r=>{var n,s;this.cba=r,this.on(),(n=e.contentPath,s=t.Character.ChrModelId,new Promise((t,e)=>{const i=n+"meta/charactercustomization/"+s+".json";$.getJSON(i,function(e){t(e)})})).then(e=>{var r,n;if(WH.debug("Got customization data v2",e),this.ml=new va(this,e),null===(r=this.sr)||void 0===r||r.call(this,this.ml.c),this.ml.a(),this.H)this.setAppearance(this.H);else if(t.Character.Race>0&&(null===(n=null==t?void 0:t.Creature)||void 0===n?void 0:n.CreatureCustomizations)){let e=this.ml.g(t.Creature.CreatureCustomizations);this.setAppearance(e)}else this.ml.i();this.m&&this.x(),t.Equipment&&this.E(t.Equipment),i&&this.E(i)})}),this.m=!0}O(){for(const[t,e]of this.J)e.K();for(const t in this.L){this.L[t].c=!1}for(const t of this.z)t.b()}F(t,e,i){if(!this.J)return;if(3==t&&this.P&&this.P[0])return;let r=new Ta(this,t,e);i&&r.r(i);let n=r.D,s=Dr[t];this.J.get(n)&&0!=s?(r.D=s,this.J.set(s,r)):this.J.set(n,r)}G(t){var e=this.J.get(t);e||(t=Er[t],e=this.J.get(t)),e&&(this.J.delete(t),e.d())}I(t,e){const i=this.f.ai,r=[],n={14:t=>[0],26:t=>2==t.I&&18==t.G?[1]:null};if(i.R&&i.L){const s={1:t=>[11],3:t=>[6,5],22:t=>{var e;return(null===(e=n[t.B])||void 0===e?void 0:e.call(n,t))||[2]},21:t=>[1],17:t=>[1],15:t=>[2],25:t=>[1],13:t=>[1],14:t=>[0],23:t=>[2],6:t=>[53],26:t=>[1],16:t=>[57],27:t=>[55]};if(s[t]){const n=s[t](e);for(let s=0;s=0||this.y>=0||this.hg)&&Lr[t]&&(a=Lr[t]),this.ba>=0&&21==t&&Ir[this.ba][t]&&(a=Ir[this.ba][t]),this.y>=0&&22==t&&Ir[this.y][t]&&(a=Ir[this.y][t]),15==e.F&&this.y>=0&&22==t&&Ir[this.y][e.B]&&(a=Ir[this.y][e.B]),a>=i.L.length||-1==i.L[a]||r.push(i.L[a])}}}return r}E(t){if($.isArray(t))for(let e=0;e=0&&(this.wv[Math.floor(e/100)]=e);for(const t in this.L){const e=this.L[t].ba,i=this.L[t].e;i.m(0,Ur,!1);for(const t of e)i.m(t.b,t.b,!0),this.wv[Math.floor(t.b/100)]=t.b}n.aa(0,Ur,!1),n.aa(0,0,!0);for(let t=0;t{if(t&&t.C&&t.k){let e=t.k.e.modelInstance;if(!e.ac)return;e.aa(0,Ur,!1),1==t.B?(e.M(t.e[0],2700),e.M(t.e[1],2100)):3==t.B?e.M(t.e[0],2600):4==t.B?(e.M(t.e[0],800),e.M(t.e[1],1e3)):5==t.B||20==t.B?(f&&f.C&&f.e[0]?e.M(-2,800):e.M(t.e[0],800),e.M(t.e[1],1e3),y&&e.M(t.e[2],1300),e.M(t.e[3],2200),e.M(t.e[4],2800)):6==t.B?e.M(t.e[0],1800):7==t.B?(e.M(t.e[0],1100),e.M(t.e[1],900),y&&e.M(t.e[2],1300)):8==t.B?(e.M(t.e[0],500),e.M(t.e[1],2e3)):10==t.B?(0==t.e[0]&&l&&l.C&&l.e[0]?e.M(-2,400):e.M(t.e[0],400),e.M(t.e[1],2300)):16==t.B?e.M(t.e[0],1500):19==t.B?e.M(t.e[0],1200):9==t.B&&(f&&f.C&&f.e[0]||null!=(null==f?void 0:f.k)||l&&l.C&&l.e[2]&&l.e[0]>0?e.M(-2,2300):e.M(t.e[0],2300))}}),this.P.forEach(t=>{if(t&&t.k){const e=t.k.e.modelInstance;e.aa(0,Ur,!1),e.M(t.e[0],2600)}}),this.J.forEach(t=>{if(t&&t.C&&t.n)for(let e of t.n){if(!e)continue;let i=e.e;1==t.B?(i.dc(t.s[0],27),i.dc(t.s[1],21)):3==t.B?i.dc(t.s[0],26):4==t.B?(i.dc(t.s[0],8),i.dc(t.s[1],10)):5==t.B||20==t.B?(i.dc(t.s[0],8),i.dc(t.s[1],10),i.dc(t.s[2],13),i.dc(t.s[3],22),i.dc(t.s[4],28)):6==t.B?i.dc(t.s[0],18):7==t.B?(i.dc(t.s[0],11),i.dc(t.s[1],9),i.dc(t.s[2],13)):8==t.B?(i.dc(t.s[0],5),i.dc(t.s[1],20)):10==t.B?(i.dc(t.s[0],4),i.dc(t.s[1],23)):16==t.B?i.dc(t.s[0],15):19==t.B?i.dc(t.s[0],12):9==t.B&&i.dc(t.s[0],23)}}),this.P.forEach(t=>{if(t&&t.n)for(let e of t.n){let i=e.e;i.dc(t.s[0],26),t.j>0&&(i.m(2600,2699,!1),i.dc(t.j,26))}});if(s&&s.C){const t=s.k||s.n[0],e=this.kj,i=0==this.gf?s.w:s.c;if(t&&i)for(let t=0;t0)for(let t of s.n){let e=t.e;e.m(2600,2799,!1),e.dc(s.j,27)}if(a&&a.n&&a.j>0)for(let t of a.n){let e=t.e;e.m(2600,2699,!1),e.dc(a.j,26)}if(h&&h.n&&h.j>0)for(let t of h.n){let e=t.e;e.m(1800,1899,!1),e.dc(h.j,18)}let F=0;if(g&&(F|=16),f&&f.C&&f.e&&f.e[0]){let t=401+f.e[0];n.aa(401,499,!1),n.aa(t,t,!0)}else if(l&&l.C&&l.e&&l.e[0]){let t=801+l.e[0];n.aa(t,t,!0),f&&f.e&&0==f.e[0]&&(f.L=7,l.L=8,WH.debug("updating sorting for chest/gloves"))}if(!(l||h||d)&&o&&o.C&&o.e&&o.e[0]){let t=801+o.e[0];n.aa(t,t,!0)}if(g&&g.C)1048576&g.A||(n.aa(2200,2299,!1),n.aa(2202,2202,!0));else if(l&&l.C&&l.e&&l.e[3]){let t=2201+l.e[3];n.aa(2200,2299,!1),n.aa(t,t,!0)}let v,S=!1;if(h&&h.C&&h.e&&h.e[0]&&(S=!!(512&h.A)),b){n.aa(501,599,!1),n.aa(902,999,!1),n.aa(1100,1199,!1),n.aa(1300,1399,!1);let t=1301+l.e[2];n.aa(t,t,!0)}else if(m){n.aa(501,599,!1),n.aa(902,999,!1),n.aa(1100,1199,!1),n.aa(1300,1399,!1);let t=1301+u.e[2];n.aa(t,t,!0)}else if(c&&c.C&&c.e&&c.e[0]){n.aa(501,599,!1),n.aa(901,901,!0);let t=501+c.e[0];n.aa(t,t,!0)}else{let t;t=u&&u.C&&u.e&&u.e[1]?901+u.e[1]:901,n.aa(t,t,!0)}if(c&&c.C&&c.e&&c.e[1]>0){const t=c.e[0],e=c.e[1];v=t>=5?2001+e:2e3+e}else if(c&&c.C&&c.e&&c.e[1]<0){const t=null===(i=null===(e=c.k)||void 0===e?void 0:e.e)||void 0===i?void 0:i.modelInstance;v=(null==t?void 0:t.ac)&&(null===(r=t.b)||void 0===r?void 0:r.some(t=>t.meshId>=2001&&t.meshId<=2099))?2002:1999}else v=!c||!c.C||1048576&c.A?2001:2002;n.aa(2001,2099,!1),n.aa(v,v,!0);let C=!1;if(!y&&g&&g.C&&g.e&&g.e[0]){let t;C=!1,S?(C=!0,t=1203):(C=!0,t=1201+g.e[0]),n.aa(t,t,!0)}else 16&F&&(n.aa(1201,1201,!0),y||(n.aa(1202,1202,!0),C=!0));if(!C&&!b)if(l&&l.C&&l.e&&l.e[1]){let t=1001+l.e[1];n.aa(t,t,!0)}else if(o&&o.C&&o.e&&o.e[1]){let t=1001+o.e[1];n.aa(t,t,!0)}if(!b&&u&&u.C&&u.e&&u.e[0]){let t=u.e[0],e=1101+t,i=n.b.some(t=>t.meshId==e);t>2?(n.aa(1300,1399,!1),i?n.aa(e,e,!0):n.aa(1301,1301,!0)):C||n.aa(e,e,!0)}if(g&&g.C&&g.e&&g.e[0]&&this.v.length>0)for(let t of this.v){const e=Ar[t];if(e&&12==e.GeosetType&&e.Original==g.e[0]+1){n.aa(1200,1299,!1);let t=1200+e.Override;n.aa(t,t,!0);break}}if(p&&p.C&&p.e&&p.e[0]){n.aa(1500,1599,!1);let t=1501+p.e[0];if(this.v.length>0)for(let e of this.v){const i=Ar[e];if(i&&15==i.GeosetType&&i.Original==p.e[0]+1){t=1500+i.Override;break}}n.aa(t,t,!0)}if(h&&h.C&&h.e&&h.e[0]){n.aa(1800,1899,!1);let t=1801+h.e[0];n.aa(t,t,!0)}u||b||m||C||S?n.aa(1400,1499,!1):n.aa(1401,1401,!0)}setParticlesEnabled(t){super.setParticlesEnabled(t),this.J.forEach(e=>{if(e.n)for(let i=0;i{if(e.C||e.H){if(e.J)for(let i=0;i{let e=t.D;4!=e&&5!=e&&19!=e||(n=!1,null==t.J&&(n=!0)),7==e&&(s=!1,null==t.J&&(s=!0))});let a=-1;if(27==this.kj)for(let t of i)9==t.BlendMode&&1==t.TextureType&&t.Layer>a&&(a=t.Layer);const o=(l=t=>t.TextureType,i.reduce((t,e)=>{var i;return(t[i=l(e)]||(t[i]=[])).push(e),t},{}));var l;for(const t in o){const e=o[t];for(const t of e){const e=this.ml.h[t.ChrModelTextureTargetID];if(e&&!e.e())return}}for(const t in o){const i=o[t],l=i[0].TextureType;if(!this.fe[t]){const i=e.find(t=>t.TextureType==l);if(!i){WH.debug("unable to find material info",l);continue}this.fe[t]=new jr(this.o.context,i.Width,i.Height)}const h=this.fe[t];h.t();for(const t of i){let e=-1;t.Layer==a&&(e=0);const i=this.ml.h[t.ChrModelTextureTargetID];if(!i)continue;const o=t.TextureSection;if(3!=o&&5!=o||n&&3==o||s&&5==o){let n=0,s=0,a=1,l=1;if(-1!=o&&r){const t=r.find(t=>t.SectionType==o);if(!t){WH.debug("can't find texture section data",o);continue}n=t.X,s=t.Y,a=t.Width,l=t.Height}h.r(i,n,s,a,l,t.BlendMode,t.Layer,e)}}1==l&&52!=this.kj&&70!=this.kj&&this.qp(h),26!=l||52!=this.kj&&70!=this.kj||this.qp(h),h.s()}this.Az(this.f);for(let t in this.L){const e=this.L[t];e.e&&e.e.loaded&&this.Az(e.e.c())}this.m=!1}Az(t){if(this.fe[1]){const e=this.fe[1];t.ab(e.g(0),e.g(1),e.g(2))}for(let e in this.fe){this.fe[e];t.aJ(e,this.fe[e].g(0))}}qp(t){const e=[];this.J.forEach(t=>{e.push(t)}),e.sort(function(t,e){return t.L-e.L});const i=this.ml.c.TextureSections;for(let r=0;rt.SectionType==r.region);if(!e){WH.debug("can't find texture section data",r.region);continue}const n=new Wr;n.c=r.texture,t.r(n,e.X,e.Y,e.Width,e.Height,0,-1,-1)}}}}setAppearance(t){var e;this.H=t,this.ba=t.sheathMain,this.y=t.sheathOff,null===(e=this.ml)||void 0===e||e.d(t.options),this.m=!0,this.p=!0,this.x(),this.K()}setCustomizationsLoadedCallback(t){this.sr=t}setItems(t){const e=this.o.options;WH.debug("setItems",t);const i=[];for(let e=0;e{const i=[parseInt(t[0]),parseInt(t[1])];e.items.push(i)}),this.E(i),this.m=!0}attachList(t){const e=this.o.options;WH.debug("attachList",t);const i=t.split(","),r=[];for(let t=0;t{const i=[parseInt(t[0]),parseInt(t[1])];e.items.push(i)}),this.E(r),this.m=!0}clearSlots(t){const e=this.o.options;WH.debug("clearSlots",t);const i=t.split(",");for(let t=0;t{0!=e.items[t].indexOf(parseInt(i))&&r.push(i)}),e.items=r}this.K(),this.m=!0}setShouldersOverride(t){if(WH.debug("setShouldersOverride",t),!t||2!=t.length)return;for(let t=0;t<2;t++){const e=this.P[t];e&&e.d(),this.P[t]=null}for(let e=0;e<2;e++)if(null!=t[e]){const i=new Ta(this,3,t[e]);let r=0;r=0==e?1:2,i.o(r),this.P[e]=i}const e=this.J.get(3);if(e){let t=3;for(let e=0;e<2;e++)this.P[e]&&(t&=~(1<0&&r0&&r{if(t){if(2==t.I&&13==t.G){if(21==t.D&&-1!=this.ba)return;if(22==t.D&&-1!=this.y)return}t.b()}}),this.P.forEach(t=>{t&&t.n&&t.b()}),this.ed()}}static CB(t,e){const i=t.e;if(!i.loaded)return;const r=i.modelInstance;if(!r||!r.ac)return;r.aM&&r.O(e)}h(t){if(this.f&&this.f.ac){super.h(t);for(const e in this.L){const i=this.L[e];xa.CB(i,t)}if(this.J.forEach(e=>{if(e){if(2==e.I&&13==e.G){if(21==e.D&&-1!=this.ba)return;if(22==e.D&&-1!=this.y)return}e.h(t)}}),this.P.forEach(e=>{e&&e.n&&e.h(t)}),this.k)for(let e=0;e{e&&e.k&&e.k.e&&e.k.c&&xa.CB(e.k,t)})}}b(t){super.b(t);for(const e in this.L){const i=this.L[e];i.c&&(i.e&&i.e.loaded&&i.e.b(t))}if(this.J.forEach(e=>{if(e){if(2==e.I&&13==e.G){if(21==e.D&&-1!=this.ba)return;if(22==e.D&&-1!=this.y)return}e.p(t)}}),this.P.forEach(e=>{e&&e.n&&e.p(t)}),this.k)for(let e=0;e{e(new la(t,i,{},!1))}):fa(t.options.contentPath,e,i).then(i=>Ma.c(t,i,e))}}const Da=class{constructor(t){this.currFrame=0,this.clearColor=Ue(0,0,0),this.addedCss=!1,this.progressShown=!1,this.doUpdateBounds=!1,this.attributeState=new De,this.gxDevice=null,this.textureCache=new Map,this.crossFadeDuration=.3,this.onContextMenu=function(t){return!1};var e=this;e.viewer=t,e.options=t.options,e.downloads={},e.context=null,e.bgImgLoaded=!1,e.width=0,e.height=0,e.time=0,e.delta=0,e.actors=[],e.screenshotDataURL=null,e.makeDataURL=!1,e.screenshotCallback=null,e.azimuth=1.5*Math.PI,e.zenith=Math.PI/2,e.distance=15,e.fov=30,e.zoom={rateStep:.1,rateAccelerationDecay:.4,interpolationRate:.3,range:[.3,4],rateCurrent:0,target:1,current:1},e.zoom.range=e.zoom.range.map(function(t){return Math.log(t)/Math.log(1+e.zoom.rateStep)}),e.translation=Ue(0,0,0),e.translationFromModel=Ue(0,0,0),e.target=Ue(0,0,0),e.eye=Ue(0,0,0),e.up=Ue(0,0,1),e.lookDir=Le(),e.fullscreen=!1,e.projMatrix=ni(),e.viewMatrix=ni(),e.panningMatrix=ni(),e.viewOffset=Le(),this.addedCss||(this.addedCss=!0,$("head").append(''))}updateProgress(){if(!this.stop){var t=this,e=0,i=0;for(var r in t.downloads)e+=t.downloads[r].total,i+=t.downloads[r].loaded;if(e<=0)t.progressShown&&(t.progressBg.hide(),t.progressBar.hide(),t.progressShown=!1);else{t.progressShown||(t.progressBg.show(),t.progressBar.show(),t.progressShown=!0);var n=i/e;t.progressBar.width(Math.round(t.width*n)+"px")}}}destroy(){var t=this;t.stop=!0,t.canvas&&($(t.canvas).off(),t.canvas.detach(),t.progressBg.detach(),t.progressBar.detach(),t.canvas=t.progressBg=t.progressBar=null),t.clearBackground(),t.actors=[]}method(t,e){if("isBackgroundLoaded"===t)return this.bgImgLoaded;if("setBackground"!==t){if(this.actors.length>0&&this.actors[0]){const i=this.actors[0][t];return i?i.apply(this.actors[0],e):void WH.debug("Unknown viewer method",t,"args",e)}this.actorPromises.length>0&&this.actorPromises[0]&&(this.actorPromises[0]=this.actorPromises[0].then(i=>{const r=i[t];if(r)return r.apply(i,e),i;WH.debug("Unknown viewer method",t,"args",e)}))}else this.setBackground(e[0])}getTime(){return window.performance&&window.performance.now?window.performance.now():Date.now()}draw(t){var e,i=this,r=i.context;if(i.delta=.001*(t-i.time),i.time=t,i.currFrame++,this.doUpdateBounds&&i.actors.length>0){let[t,r]=[Le(),Le()];for(e=0;e0){const i=e.options.mount,n=e.options.shouldersOverride;for(t=0;t(i&&i.id&&t instanceof ca&&t.u(i.id),t instanceof xa&&t.setShouldersOverride(n),e.actors.push(t),t)).then(t=>t);e.actorPromises.push(s)}}}!function t(){if(!e.stop&&(window.requestAnimationFrame(t),e.gxDevice)){var r=e.getTime();if(!1!==e.makeDataURL){if(e.canvas[0].toDataURL){var n=e.clearColor,s=e.bgTexture;e.options.transparent&&(e.bgTexture=null,e.clearColor=Ue(0,0,0)),e.draw(r);var a=e.width*e.height*4,o=new Uint8Array(a);i.readPixels(0,0,e.width,e.height,i.RGBA,i.UNSIGNED_BYTE,o);let t=null;e.options.transparent?(e.clearColor=Ue(1,1,1),e.draw(r),t=new Uint8Array(a),i.readPixels(0,0,e.width,e.height,i.RGBA,i.UNSIGNED_BYTE,t)):t=o;for(var l=new Uint8Array(a),h=0,u=0;u0?1:-1,t.preventDefault(),!1}onMouseUp(t){let e=this;(e.mouseDown||e.rightMouseDown)&&($("body").removeClass("unselectable"),e.mouseDown=!1,e.rightMouseDown=!1)}onMouseMove(t){let e=this;if((e.mouseDown||e.rightMouseDown)&&void 0!==e.mouseX){var i,r;"touchmove"==t.type?(i=t.originalEvent.touches[0].clientX,r=t.originalEvent.touches[0].clientY):(i=t.clientX,r=t.clientY);var n=(i-e.mouseX)/e.width*Math.PI*2,s=(r-e.mouseY)/e.width*Math.PI*2;if(e.mouseDown){1==e.up[2]?e.azimuth-=n:e.azimuth+=n,e.zenith+=s;for(var a=2*Math.PI;e.azimuth<0;)e.azimuth+=a;for(;e.azimuth>a;)e.azimuth-=a;e.zenith<1e-4&&(e.zenith=1e-4),e.zenith>=Math.PI&&(e.zenith=Math.PI-1e-4)}else e.translation[0]+=n,e.translation[1]+=s;e.mouseX=i,e.mouseY=r,t.stopPropagation()}}resize(t,e){var i=this;if(i.width!==t||i.height!==e){if(i.fullscreen||i.viewer.container.css({height:e+"px",position:"relative"}),i.width=t,i.height=e,i.canvas)i.canvas.attr({width:t,height:e}),i.canvas.css({width:t+"px",height:e+"px"}),i.context.viewport(0,0,i.width,i.height);else{if(i.canvas=$(""),i.canvas.attr({width:t,height:e}),i.viewer.container.append(i.canvas),i.context=i.canvas[0].getContext("webgl",{alpha:!0,premultipliedAlpha:!1})||i.canvas[0].getContext("experimental-webgl",{alpha:!0,premultipliedAlpha:!1}),i.progressBg=$("
",{css:{display:"none",position:"absolute",bottom:0,left:0,right:0,height:"10px",backgroundColor:"#000"}}),i.progressBar=$("
",{css:{display:"none",position:"absolute",bottom:0,left:0,width:0,height:"10px",backgroundColor:"#ccc"}}),i.viewer.container.append(i.progressBg),i.viewer.container.append(i.progressBar),!i.context)return alert("No WebGL support, sorry! You should totally use Chrome."),i.canvas.detach(),void(i.canvas=null);const r=[.35,.35,.35,1],n=[1,1,1,1],s=[.35,.35,.35,1],a=Le(),o=Le(),l=Le();Ye(a,[5,-3,3]),Ye(o,[5,5,5]),Ye(l,[-5,-5,-5]);const h={uCameraPos:i.eye,uViewMatrix:i.viewMatrix,uProjMatrix:i.projMatrix,uAmbientColor:r,uPrimaryColor:n,uSecondaryColor:s,uLightDir1:a,uLightDir2:o,uLightDir3:l};this.gxDevice=new Cr(i.context,h),this.renderer=this.gxDevice.c(),i.canvas.off("mousedown.webgl touchstart.webgl").on("mousedown.webgl touchstart.webgl",i.onMouseDown.bind(i)).off("wheel.webgl").on("wheel.webgl",i.onMouseWheel.bind(i)).off("dblclick.webgl").on("dblclick.webgl",i.onDoubleClick.bind(i)).off("contextmenu.webgl").on("contextmenu.webgl",i.onContextMenu.bind(i));let u=0,c=0,d=0;i.canvas.off("touchend.webgl").on("touchend.webgl",function(t){const e=t.originalEvent;if(!e||1!==e.changedTouches.length)return;const r=e.changedTouches[0],n=(new Date).getTime(),s=n-u,a=r.clientX-c,o=r.clientY-d,l=Math.sqrt(a*a+o*o);u=n,c=r.clientX,d=r.clientY,s<300&&l<30&&(t.preventDefault(),i.onDoubleClick.call(i,e))}),$(window).off("resize.webgl").on("resize.webgl",i.onFullscreen.bind(i)),$(document).off("mouseup.webgl touchend.webgl").on("mouseup.webgl touchend.webgl",i.onMouseUp.bind(i)).off("mousemove.webgl touchmove.webgl").on("mousemove.webgl touchmove.webgl",i.onMouseMove.bind(i)),i.onFullscreen(null)}i.options.background&&i.loadBackground()}}loadBackground(){var t=this,e=t.context;const i=function(){t.vb=e.createBuffer(),e.bindBuffer(e.ARRAY_BUFFER,t.vb),e.bufferData(e.ARRAY_BUFFER,new Float32Array(16),e.DYNAMIC_DRAW);var i,r=t.compileShader(e.VERTEX_SHADER," attribute vec2 aPosition; attribute vec2 aTexCoord; varying vec2 vTexCoord; void main(void) { vTexCoord = aTexCoord; gl_Position = vec4(aPosition, 0, 1); } ");i=t.options.backgroundRotatation?t.compileShader(e.FRAGMENT_SHADER,"\tprecision mediump float; varying vec2 vTexCoord; uniform sampler2D uTexture; uniform vec2 uResolution; uniform vec4 uBGTransform; uniform float uRotation; mat3 getTransform(vec2 pos, vec2 scale, float rotation, vec2 center) { float c = cos(rotation); float s = sin(rotation); return mat3( scale.x * c, scale.x * s, - scale.x * ( c * center.x + s * center.y ) + center.x + pos.x, -scale.y * s, scale.y * c, - scale.y * ( - s * center.x + c * center.y ) + center.y + pos.y, 0.0, 0.0, 1.0 ); } void main(void) { vec2 uv = gl_FragCoord.xy / uResolution.xy; mat3 transform = getTransform(uBGTransform.xy, uBGTransform.zw, uRotation, vec2(0.5)); uv = (vec3(uv, 1.0) * transform).xy; gl_FragColor = texture2D(uTexture, uv);\t}"):t.compileShader(e.FRAGMENT_SHADER," precision mediump float; varying vec2 vTexCoord; uniform sampler2D uTexture; uniform vec4 uBGTransform; void main(void) { gl_FragColor = texture2D(uTexture, vTexCoord.xy * uBGTransform.zw + uBGTransform.xy); } ");var n=e.createProgram();e.attachShader(n,r),e.attachShader(n,i),e.linkProgram(n),e.getProgramParameter(n,e.LINK_STATUS)?(t.vs=r,t.fs=i,t.program=n,t.uTexture=e.getUniformLocation(n,"uTexture"),t.aPosition=e.getAttribLocation(n,"aPosition"),t.aTexCoord=e.getAttribLocation(n,"aTexCoord"),t.uBGTransform=e.getUniformLocation(n,"uBGTransform"),t.uRotation=e.getUniformLocation(n,"uRotation"),t.uResolution=e.getUniformLocation(n,"uResolution")):console.error("Error linking shaders")},r=function(){var i=t.width/t.bgImg.width,r=t.height/t.bgImg.height;const n=[-1,-1,0,r,1,-1,i,r,-1,1,0,0,1,1,i,0];e.bindBuffer(e.ARRAY_BUFFER,t.vb),e.bufferSubData(e.ARRAY_BUFFER,0,new Float32Array(n))};t.bgImg?t.bgImg.loaded&&(t.vb||i(),r()):(t.bgImg=new Image,t.bgImg.crossOrigin="",t.bgImg.onload=function(){var n;null===(n=t.bgImg)||void 0===n||(n.loaded=!0),t.bgImg&&(t.bgTexture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,t.bgTexture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t.bgImg),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t.vb||i(),r(),t.bgImgLoaded=!0)},t.bgImg.onerror=function(){t.bgImg=null},t.bgImg.src=t.options.contentPath+t.options.background,t.viewer.options.bgPosition=t.options.bgPosition||[0,0],t.viewer.options.bgScale=t.options.bgScale||[1,1])}compileShader(t,e){var i=this.context,r=i.createShader(t);if(i.shaderSource(r,e),i.compileShader(r),!i.getShaderParameter(r,i.COMPILE_STATUS))throw"Shader compile error: "+i.getShaderInfoLog(r);return r}getTexture(t){if(this.textureCache.has(t)){var e=this.textureCache.get(t);if(e.g||e.l)return e}const i=new Tr(this,t);return this.textureCache.set(t,i),i}};let Ba={Types:wr};const ka=Object.assign(Ci,{Tools:ke,WebGL:Da,WEBGL:1,WOW:2,FLASH:2,Wow:Ba});window.ZamModelViewer=ka})(); //# sourceMappingURL=viewer.min.js.map