@mapvx/web-components 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/KTX2Loader-CNSoekFo.cjs +1 -5
- package/dist/cjs/{base-floor-selector-CbSa9Qw2.cjs → base-floor-selector-6B_D7uUw.cjs} +2 -2
- package/dist/cjs/{class-map-DQkA5L7H.cjs → class-map-CfJw8pY6.cjs} +2 -2
- package/dist/cjs/{compact-floor-selector-C_LgJzzv.cjs → compact-floor-selector-CPK6sXBk.cjs} +2 -2
- package/dist/cjs/{consume-D1MFwxfA.cjs → consume-B4K_oiFc.cjs} +2 -2
- package/dist/cjs/{custom-map-CsX48Rua.cjs → custom-map-CfhrBuF7.cjs} +3 -3
- package/dist/cjs/floor-selector-rW48Tktb.cjs +15 -0
- package/dist/cjs/{geojson-layer-BWursA41.cjs → geojson-layer-wtQbiowp.cjs} +2 -2
- package/dist/cjs/{index-OWjqDH0W.cjs → index-BAYbrXBp.cjs} +2 -2
- package/dist/cjs/{index-D4uHh_zx.cjs → index-DAac9HVL.cjs} +2 -2
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/map-view-with-modal.cjs +1 -1
- package/dist/cjs/{qr-modal-DAjokbee.cjs → qr-modal-fSPvpyzj.cjs} +2 -2
- package/dist/cjs/{route-options-BW6OJ8pz.cjs → route-options-BjMH6A43.cjs} +2 -2
- package/dist/cjs/route-view-totems.cjs +1 -5
- package/dist/cjs/{sdk-controller-BcvviQ36.cjs → sdk-controller-5LmYQQhJ.cjs} +3 -3
- package/dist/es/assets/{compact-floor-selector-DM0rj7tE.js → compact-floor-selector-WL6DewCc.js} +2 -2
- package/dist/es/assets/{components-iq1KFC9T.js → components-BfTs1Lia.js} +9 -9
- package/dist/es/assets/{geojson-layer-BXJPA2B2.js → geojson-layer-CeMb7DTQ.js} +2 -2
- package/dist/es/assets/globe-viewport-CFdegSgy.js +4 -0
- package/dist/es/assets/{index-BV0wWAyE.js → index-D4Krpv5a.js} +2 -2
- package/dist/es/assets/{index-Bp1QRPSH.js → index-wdE7uK4l.js} +2 -6
- package/dist/es/assets/{map-view-with-modal-KAG4NGbk.js → map-view-with-modal-JYZY7d5R.js} +2 -2
- package/dist/es/assets/{route-view-totems-BHOMtYE0.js → route-view-totems-Dvggb-ZM.js} +4 -4
- package/dist/es/assets/{utils-BMph9fmy.js → utils-B4ksZYyJ.js} +3 -3
- package/dist/es/index.js +1 -1
- package/dist/es/route-view-totems.js +1 -1
- package/dist/iife/map-view-with-modal.js +2 -2
- package/dist/iife/route-view-totems.js +20 -20
- package/package.json +1 -1
- package/dist/cjs/floor-selector-DiJexma4.cjs +0 -15
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./geojson-layer-BWursA41.cjs"),t=require("./webgl-developer-tools-DyDR0yGE.cjs"),n=require("./globe-viewport-BD9L086Z.cjs"),A=require("./sdk-controller-BcvviQ36.cjs"),r=require("./webgl-device-DikFjUoh.cjs");async function i(e,t,n,A){return A._parse(e,t,n,A)}globalThis.probe={};const s=new t.ProbeLog({id:"@probe.gl/log"});const o={};function a(e={}){const t=e.useLocalLibraries??e.core?.useLocalLibraries,n=e.CDN??e.core?.CDN,A=e.modules;return{...void 0!==t?{useLocalLibraries:t}:{},...void 0!==n?{CDN:n}:{},...void 0!==A?{modules:A}:{}}}async function l(e,n=null,A={},r=null){return n&&(e=function(e,n,A={},r=null){if(A?.core)throw new Error("loadLibrary: options.core must be pre-normalized");if(!A.useLocalLibraries&&e.startsWith("http"))return e;r=r||e;const i=A.modules||{};if(i[r])return i[r];if(!t.isBrowser$2)return`modules/${n}/dist/libs/${r}`;if(A.CDN)return t.assert$2(A.CDN.startsWith("http")),`${A.CDN}/${n}@${t.VERSION}/dist/libs/${r}`;if(t.isWorker)return`../src/libs/${r}`;return`modules/${n}/src/libs/${r}`}(e,n,A,r)),o[e]=o[e]||async function(e){if(e.endsWith("wasm"))return await async function(e){const{readFileAsArrayBuffer:n}=globalThis.loaders||{};if(t.isBrowser$2||!n||e.startsWith("http")){const t=await fetch(e);return await t.arrayBuffer()}try{return await n(e)}catch{if(e.includes("/dist/libs/"))return await n(e.replace("/dist/libs/","/src/libs/"));throw new Error(`Failed to load ArrayBuffer from ${e}`)}}(e);if(!t.isBrowser$2){const{requireFromFile:t}=globalThis.loaders||{};try{const n=await(t?.(e));return n||!e.includes("/dist/libs/")?n:await(t?.(e.replace("/dist/libs/","/src/libs/")))}catch(A){if(e.includes("/dist/libs/"))try{return await(t?.(e.replace("/dist/libs/","/src/libs/")))}catch{}return console.error(A),null}}if(t.isWorker)return importScripts(e);const n=await async function(e){const{readFileAsText:n}=globalThis.loaders||{};if(t.isBrowser$2||!n||e.startsWith("http")){const t=await fetch(e);return await t.text()}try{return await n(e)}catch{if(e.includes("/dist/libs/"))return await n(e.replace("/dist/libs/","/src/libs/"));throw new Error(`Failed to load text from ${e}`)}}(e);return function(e,n){if(!t.isBrowser$2){const{requireFromString:t}=globalThis.loaders||{};return t?.(e,n)}if(t.isWorker)return eval.call(globalThis,e),null;const A=document.createElement("script");A.id=n;try{A.appendChild(document.createTextNode(e))}catch(VA){A.text=e}return document.body.appendChild(A),null}(n,e)}(e),await o[e]}function c(e,t,n){if(e.byteLength<=t+n)return"";const A=new DataView(e);let r="";for(let i=0;i<n;i++)r+=String.fromCharCode(A.getUint8(t+i));return r}function u(e){try{return JSON.parse(e)}catch(t){throw new Error(`Failed to parse JSON from data starting with "${function(e,t=5){if("string"==typeof e)return e.slice(0,t);if(ArrayBuffer.isView(e))return c(e.buffer,e.byteOffset,t);if(e instanceof ArrayBuffer)return c(e,0,t);return""}(e)}"`)}}function f(e,n){return t.assert(e>=0),t.assert(n>0),e+(n-1)&-4}function h(e,t,n){let A;if(e instanceof ArrayBuffer)A=new Uint8Array(e);else{const t=e.byteOffset,n=e.byteLength;A=new Uint8Array(e.buffer||e.arrayBuffer,t,n)}return t.set(A,n),n+f(A.byteLength,4)}const d={id:"request-scheduler",throttleRequests:!0,maxRequests:6,debounceTime:0};class p{props;stats;activeRequestCount=0;requestQueue=[];requestMap=new Map;updateTimer=null;constructor(e={}){this.props={...d,...e},this.stats=new t.Stats({id:this.props.id}),this.stats.get("Queued Requests"),this.stats.get("Active Requests"),this.stats.get("Cancelled Requests"),this.stats.get("Queued Requests Ever"),this.stats.get("Active Requests Ever")}setProps(e){void 0!==e.throttleRequests&&(this.props.throttleRequests=e.throttleRequests),void 0!==e.maxRequests&&(this.props.maxRequests=e.maxRequests),void 0!==e.debounceTime&&(this.props.debounceTime=e.debounceTime)}scheduleRequest(e,t=()=>0){if(!this.props.throttleRequests)return Promise.resolve({done:()=>{}});if(this.requestMap.has(e))return this.requestMap.get(e);const n={handle:e,priority:0,getPriority:t},A=new Promise(e=>(n.resolve=e,n));return this.requestQueue.push(n),this.requestMap.set(e,A),this._issueNewRequests(),A}_issueRequest(e){const{handle:t,resolve:n}=e;let A=!1;const r=()=>{A||(A=!0,this.requestMap.delete(t),this.activeRequestCount--,this._issueNewRequests())};return this.activeRequestCount++,n?n({done:r}):Promise.resolve({done:r})}_issueNewRequests(){null!==this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(()=>this._issueNewRequestsAsync(),this.props.debounceTime)}_issueNewRequestsAsync(){null!==this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=null;const e=Math.max(this.props.maxRequests-this.activeRequestCount,0);if(0!==e){this._updateAllRequests();for(let t=0;t<e;++t){const e=this.requestQueue.shift();e&&this._issueRequest(e)}}}_updateAllRequests(){const e=this.requestQueue;for(let t=0;t<e.length;++t){const n=e[t];this._updateRequest(n)||(e.splice(t,1),this.requestMap.delete(n.handle),t--)}e.sort((e,t)=>e.priority-t.priority)}_updateRequest(e){return e.priority=e.getPriority(e.handle),!(e.priority<0)||(e.resolve(null),!1)}}class m{static defaultOptions={core:{type:"auto",attributions:[],loadOptions:{},loaders:[]}};optionsType;options;data;url;loadOptions;fetch;_needsRefresh=!0;constructor(e,n,A){this.options=A?t.mergeOptions({...A,core:m.defaultOptions},n):{...n},this.data=e,this.url="string"==typeof e?t.resolvePath(e):"",this.loadOptions=function(e){const t={...e};e?.core&&(t.core={...e.core});const n="string"==typeof t.baseUri?t.baseUri:void 0,A="string"==typeof t.baseUrl?t.baseUrl:void 0;void 0===n&&void 0===A||(t.core||={},void 0===t.core.baseUrl&&(t.core.baseUrl=A??n),delete t.baseUri,delete t.baseUrl);return t}(this.options.core?.loadOptions),this.fetch=function(e){const t=e?.core?.fetch;if(t&&"function"==typeof t)return(e,n)=>t(e,n);const n=e?.fetch;if(n&&"function"!=typeof n)return e=>fetch(e,n);return e=>fetch(e)}(this.loadOptions)}setProps(e){this.options=Object.assign(this.options,e),this.setNeedsRefresh()}setNeedsRefresh(){this._needsRefresh=!0}getNeedsRefresh(e=!0){const t=this._needsRefresh;return e&&(this._needsRefresh=!1),t}}class g{static type="template";static testURL=e=>!1}function b(e,t,n){const A=function(e){switch(e.constructor){case Int8Array:return"int8";case Uint8Array:case Uint8ClampedArray:return"uint8";case Int16Array:return"int16";case Uint16Array:return"uint16";case Int32Array:return"int32";case Uint32Array:return"uint32";case Float32Array:return"float32";case Float64Array:return"float64";default:return"null"}}(t.value),r=n||function(e){const t={};"byteOffset"in e&&(t.byteOffset=e.byteOffset.toString(10));"byteStride"in e&&(t.byteStride=e.byteStride.toString(10));"normalized"in e&&(t.normalized=e.normalized.toString());return t}(t);return{name:e,type:{type:"fixed-size-list",listSize:t.size,children:[{name:"value",type:A}]},nullable:!1,metadata:r}}const y={};function B(e){if(void 0===y[e]){const n=t.isBrowser?function(e){switch(e){case"image/avif":case"image/webp":return function(e){try{const t=document.createElement("canvas");return 0===t.toDataURL(e).indexOf(`data:${e}`)}catch{return!1}}(e);default:return!0}}(e):function(e){const t=["image/png","image/jpeg","image/gif"],n=globalThis.loaders?.imageFormatsNode||t,A=globalThis.loaders?.parseImageNode;return Boolean(A)&&n.includes(e)}(e);y[e]=n}return y[e]}class v extends t.Vector{constructor(e=0,n=0){super(2),t.isArray(e)&&1===arguments.length?this.copy(e):(t.config.debug&&(t.checkNumber(e),t.checkNumber(n)),this[0]=e,this[1]=n)}set(e,t){return this[0]=e,this[1]=t,this.check()}copy(e){return this[0]=e[0],this[1]=e[1],this.check()}fromObject(e){return t.config.debug&&(t.checkNumber(e.x),t.checkNumber(e.y)),this[0]=e.x,this[1]=e.y,this.check()}toObject(e){return e.x=this[0],e.y=this[1],e}get ELEMENTS(){return 2}horizontalAngle(){return Math.atan2(this.y,this.x)}verticalAngle(){return Math.atan2(this.x,this.y)}transform(e){return this.transformAsPoint(e)}transformAsPoint(e){return t.transformMat4$1(this,this,e),this.check()}transformAsVector(e){return t.vec2_transformMat4AsVector(this,this,e),this.check()}transformByMatrix3(e){return t.transformMat3(this,this,e),this.check()}transformByMatrix2x3(e){return t.transformMat2d(this,this,e),this.check()}transformByMatrix2(e){return t.transformMat2(this,this,e),this.check()}}let C;class _ extends t.Vector{static get ZERO(){return C||(C=new _(0,0,0,0),Object.freeze(C)),C}constructor(e=0,n=0,A=0,r=0){super(-0,-0,-0,-0),t.isArray(e)&&1===arguments.length?this.copy(e):(t.config.debug&&(t.checkNumber(e),t.checkNumber(n),t.checkNumber(A),t.checkNumber(r)),this[0]=e,this[1]=n,this[2]=A,this[3]=r)}set(e,t,n,A){return this[0]=e,this[1]=t,this[2]=n,this[3]=A,this.check()}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this.check()}fromObject(e){return t.config.debug&&(t.checkNumber(e.x),t.checkNumber(e.y),t.checkNumber(e.z),t.checkNumber(e.w)),this[0]=e.x,this[1]=e.y,this[2]=e.z,this[3]=e.w,this}toObject(e){return e.x=this[0],e.y=this[1],e.z=this[2],e.w=this[3],e}get ELEMENTS(){return 4}get z(){return this[2]}set z(e){this[2]=t.checkNumber(e)}get w(){return this[3]}set w(e){this[3]=t.checkNumber(e)}transform(e){return t.transformMat4$2(this,this,e),this.check()}transformByMatrix3(e){return t.vec4_transformMat3(this,this,e),this.check()}transformByMatrix2(e){return t.vec4_transformMat2(this,this,e),this.check()}transformByQuaternion(e){return t.transformQuat(this,this,e),this.check()}applyMatrix4(e){return e.transform(this,this),this}}function M(e,t,n){const A=t[0],r=t[1],i=t[2],s=t[3],o=t[4],a=t[5],l=t[6],c=t[7],u=t[8],f=n[0],h=n[1],d=n[2],p=n[3],m=n[4],g=n[5],b=n[6],y=n[7],B=n[8];return e[0]=f*A+h*s+d*l,e[1]=f*r+h*o+d*c,e[2]=f*i+h*a+d*u,e[3]=p*A+m*s+g*l,e[4]=p*r+m*o+g*c,e[5]=p*i+m*a+g*u,e[6]=b*A+y*s+B*l,e[7]=b*r+y*o+B*c,e[8]=b*i+y*a+B*u,e}function w(e,t,n){const A=n[0],r=n[1];return e[0]=A*t[0],e[1]=A*t[1],e[2]=A*t[2],e[3]=r*t[3],e[4]=r*t[4],e[5]=r*t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}var T;!function(e){e[e.COL0ROW0=0]="COL0ROW0",e[e.COL0ROW1=1]="COL0ROW1",e[e.COL0ROW2=2]="COL0ROW2",e[e.COL1ROW0=3]="COL1ROW0",e[e.COL1ROW1=4]="COL1ROW1",e[e.COL1ROW2=5]="COL1ROW2",e[e.COL2ROW0=6]="COL2ROW0",e[e.COL2ROW1=7]="COL2ROW1",e[e.COL2ROW2=8]="COL2ROW2"}(T||(T={}));const E=Object.freeze([1,0,0,0,1,0,0,0,1]);class x extends t.Matrix{static get IDENTITY(){return function(){I||(I=new x,Object.freeze(I));return I}()}static get ZERO(){return function(){S||(S=new x([0,0,0,0,0,0,0,0,0]),Object.freeze(S));return S}()}get ELEMENTS(){return 9}get RANK(){return 3}get INDICES(){return T}constructor(e,...t){super(-0,-0,-0,-0,-0,-0,-0,-0,-0),1===arguments.length&&Array.isArray(e)?this.copy(e):t.length>0?this.copy([e,...t]):this.identity()}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this[4]=e[4],this[5]=e[5],this[6]=e[6],this[7]=e[7],this[8]=e[8],this.check()}identity(){return this.copy(E)}fromObject(e){return this.check()}fromQuaternion(e){return function(e,t){const n=t[0],A=t[1],r=t[2],i=t[3],s=n+n,o=A+A,a=r+r,l=n*s,c=A*s,u=A*o,f=r*s,h=r*o,d=r*a,p=i*s,m=i*o,g=i*a;e[0]=1-u-d,e[3]=c-g,e[6]=f+m,e[1]=c+g,e[4]=1-l-d,e[7]=h-p,e[2]=f-m,e[5]=h+p,e[8]=1-l-u}(this,e),this.check()}set(e,t,n,A,r,i,s,o,a){return this[0]=e,this[1]=t,this[2]=n,this[3]=A,this[4]=r,this[5]=i,this[6]=s,this[7]=o,this[8]=a,this.check()}setRowMajor(e,t,n,A,r,i,s,o,a){return this[0]=e,this[1]=A,this[2]=s,this[3]=t,this[4]=r,this[5]=o,this[6]=n,this[7]=i,this[8]=a,this.check()}determinant(){return function(e){const t=e[0],n=e[1],A=e[2],r=e[3],i=e[4],s=e[5],o=e[6],a=e[7],l=e[8];return t*(l*i-s*a)+n*(-l*r+s*o)+A*(a*r-i*o)}(this)}transpose(){return function(e,t){if(e===t){const n=t[1],A=t[2],r=t[5];e[1]=t[3],e[2]=t[6],e[3]=n,e[5]=t[7],e[6]=A,e[7]=r}else e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8]}(this,this),this.check()}invert(){return function(e,t){const n=t[0],A=t[1],r=t[2],i=t[3],s=t[4],o=t[5],a=t[6],l=t[7],c=t[8],u=c*s-o*l,f=-c*i+o*a,h=l*i-s*a;let d=n*u+A*f+r*h;d&&(d=1/d,e[0]=u*d,e[1]=(-c*A+r*l)*d,e[2]=(o*A-r*s)*d,e[3]=f*d,e[4]=(c*n-r*a)*d,e[5]=(-o*n+r*i)*d,e[6]=h*d,e[7]=(-l*n+A*a)*d,e[8]=(s*n-A*i)*d)}(this,this),this.check()}multiplyLeft(e){return M(this,e,this),this.check()}multiplyRight(e){return M(this,this,e),this.check()}rotate(e){return function(e,t,n){const A=t[0],r=t[1],i=t[2],s=t[3],o=t[4],a=t[5],l=t[6],c=t[7],u=t[8],f=Math.sin(n),h=Math.cos(n);e[0]=h*A+f*s,e[1]=h*r+f*o,e[2]=h*i+f*a,e[3]=h*s-f*A,e[4]=h*o-f*r,e[5]=h*a-f*i,e[6]=l,e[7]=c,e[8]=u}(this,this,e),this.check()}scale(e){return Array.isArray(e)?w(this,this,e):w(this,this,[e,e]),this.check()}translate(e){return function(e,t,n){const A=t[0],r=t[1],i=t[2],s=t[3],o=t[4],a=t[5],l=t[6],c=t[7],u=t[8],f=n[0],h=n[1];e[0]=A,e[1]=r,e[2]=i,e[3]=s,e[4]=o,e[5]=a,e[6]=f*A+h*s+l,e[7]=f*r+h*o+c,e[8]=f*i+h*a+u}(this,this,e),this.check()}transform(e,n){let A;switch(e.length){case 2:A=t.transformMat3(n||[-0,-0],e,this);break;case 3:A=t.transformMat3$1(n||[-0,-0,-0],e,this);break;case 4:A=t.vec4_transformMat3(n||[-0,-0,-0,-0],e,this);break;default:throw new Error("Illegal vector")}return t.checkVector(A,e.length),A}transformVector(e,t){return this.transform(e,t)}transformVector2(e,t){return this.transform(e,t)}transformVector3(e,t){return this.transform(e,t)}}let S,I=null;function R(){const e=new t.ARRAY_TYPE(4);return t.ARRAY_TYPE!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function L(e,t,n){n*=.5;const A=Math.sin(n);return e[0]=A*t[0],e[1]=A*t[1],e[2]=A*t[2],e[3]=Math.cos(n),e}function D(e,t,n){const A=t[0],r=t[1],i=t[2],s=t[3],o=n[0],a=n[1],l=n[2],c=n[3];return e[0]=A*c+s*o+r*l-i*a,e[1]=r*c+s*a+i*o-A*l,e[2]=i*c+s*l+A*a-r*o,e[3]=s*c-A*o-r*a-i*l,e}function P(e,n,A,r){const i=n[0],s=n[1],o=n[2],a=n[3];let l,c,u,f,h,d=A[0],p=A[1],m=A[2],g=A[3];return l=i*d+s*p+o*m+a*g,l<0&&(l=-l,d=-d,p=-p,m=-m,g=-g),1-l>t.EPSILON?(c=Math.acos(l),h=Math.sin(c),u=Math.sin((1-r)*c)/h,f=Math.sin(r*c)/h):(u=1-r,f=r),e[0]=u*i+f*d,e[1]=u*s+f*p,e[2]=u*o+f*m,e[3]=u*a+f*g,e}function F(e,t){const n=t[0]+t[4]+t[8];let A;if(n>0)A=Math.sqrt(n+1),e[3]=.5*A,A=.5/A,e[0]=(t[5]-t[7])*A,e[1]=(t[6]-t[2])*A,e[2]=(t[1]-t[3])*A;else{let n=0;t[4]>t[0]&&(n=1),t[8]>t[3*n+n]&&(n=2);const r=(n+1)%3,i=(n+2)%3;A=Math.sqrt(t[3*n+n]-t[3*r+r]-t[3*i+i]+1),e[n]=.5*A,A=.5/A,e[3]=(t[3*r+i]-t[3*i+r])*A,e[r]=(t[3*r+n]+t[3*n+r])*A,e[i]=(t[3*i+n]+t[3*n+i])*A}return e}const N=t.add,O=t.scale,U=t.dot,k=t.lerp$2,G=t.length,V=t.squaredLength,H=t.normalize$1,Q=function(){const e=t.create(),n=t.fromValues(1,0,0),A=t.fromValues(0,1,0);return function(r,i,s){const o=t.dot$1(i,s);return o<-.999999?(t.cross(e,n,i),t.len(e)<1e-6&&t.cross(e,A,i),t.normalize(e,e),L(r,e,Math.PI),r):o>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(t.cross(e,i,s),r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=1+o,H(r,r))}}();!function(){const e=R(),t=R()}(),function(){const e=function(){const e=new t.ARRAY_TYPE(9);return t.ARRAY_TYPE!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}()}();const j=[0,0,0,1];class z extends t.MathArray{constructor(e=0,t=0,n=0,A=1){super(-0,-0,-0,-0),Array.isArray(e)&&1===arguments.length?this.copy(e):this.set(e,t,n,A)}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this.check()}set(e,t,n,A){return this[0]=e,this[1]=t,this[2]=n,this[3]=A,this.check()}fromObject(e){return this[0]=e.x,this[1]=e.y,this[2]=e.z,this[3]=e.w,this.check()}fromMatrix3(e){return F(this,e),this.check()}fromAxisRotation(e,t){return L(this,e,t),this.check()}identity(){var e;return(e=this)[0]=0,e[1]=0,e[2]=0,e[3]=1,this.check()}setAxisAngle(e,t){return this.fromAxisRotation(e,t)}get ELEMENTS(){return 4}get x(){return this[0]}set x(e){this[0]=t.checkNumber(e)}get y(){return this[1]}set y(e){this[1]=t.checkNumber(e)}get z(){return this[2]}set z(e){this[2]=t.checkNumber(e)}get w(){return this[3]}set w(e){this[3]=t.checkNumber(e)}len(){return G(this)}lengthSquared(){return V(this)}dot(e){return U(this,e)}rotationTo(e,t){return Q(this,e,t),this.check()}add(e){return N(this,this,e),this.check()}calculateW(){return function(e,t){const n=t[0],A=t[1],r=t[2];e[0]=n,e[1]=A,e[2]=r,e[3]=Math.sqrt(Math.abs(1-n*n-A*A-r*r))}(this,this),this.check()}conjugate(){return function(e,t){e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3]}(this,this),this.check()}invert(){return function(e,t){const n=t[0],A=t[1],r=t[2],i=t[3],s=n*n+A*A+r*r+i*i,o=s?1/s:0;e[0]=-n*o,e[1]=-A*o,e[2]=-r*o,e[3]=i*o}(this,this),this.check()}lerp(e,t,n){return void 0===n?this.lerp(this,e,t):(k(this,e,t,n),this.check())}multiplyRight(e){return D(this,this,e),this.check()}multiplyLeft(e){return D(this,e,this),this.check()}normalize(){const e=this.len(),t=e>0?1/e:0;return this[0]=this[0]*t,this[1]=this[1]*t,this[2]=this[2]*t,this[3]=this[3]*t,0===e&&(this[3]=1),this.check()}rotateX(e){return function(e,t,n){n*=.5;const A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);e[0]=A*a+s*o,e[1]=r*a+i*o,e[2]=i*a-r*o,e[3]=s*a-A*o}(this,this,e),this.check()}rotateY(e){return function(e,t,n){n*=.5;const A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);e[0]=A*a-i*o,e[1]=r*a+s*o,e[2]=i*a+A*o,e[3]=s*a-r*o}(this,this,e),this.check()}rotateZ(e){return function(e,t,n){n*=.5;const A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);e[0]=A*a+r*o,e[1]=r*a-A*o,e[2]=i*a+s*o,e[3]=s*a-i*o}(this,this,e),this.check()}scale(e){return O(this,this,e),this.check()}slerp(e,t,n){let A,r,i;switch(arguments.length){case 1:({start:A=j,target:r,ratio:i}=e);break;case 2:A=this,r=e,i=t;break;default:A=e,r=t,i=n}return P(this,A,r,i),this.check()}transformVector4(e,n=new _){return t.transformQuat$1(n,e,this),t.checkVector(n,4)}lengthSq(){return this.lengthSquared()}setFromAxisAngle(e,t){return this.setAxisAngle(e,t)}premultiply(e){return this.multiplyLeft(e)}multiply(e){return this.multiplyRight(e)}}const J={props:{},uniforms:{},name:"skin",bindingLayout:[{name:"skin",group:0}],dependencies:[],source:"\nstruct skinUniforms {\n jointMatrix: array<mat4x4<f32>, 20>,\n};\n\n@group(0) @binding(auto) var<uniform> skin: skinUniforms;\n\nfn getSkinMatrix(weights: vec4f, joints: vec4u) -> mat4x4<f32> {\n return (weights.x * skin.jointMatrix[joints.x])\n + (weights.y * skin.jointMatrix[joints.y])\n + (weights.z * skin.jointMatrix[joints.z])\n + (weights.w * skin.jointMatrix[joints.w]);\n}\n",vs:"\nlayout(std140) uniform skinUniforms {\n mat4 jointMatrix[SKIN_MAX_JOINTS];\n} skin;\n\nmat4 getSkinMatrix(vec4 weights, uvec4 joints) {\n return (weights.x * skin.jointMatrix[joints.x])\n + (weights.y * skin.jointMatrix[joints.y])\n + (weights.z * skin.jointMatrix[joints.z])\n + (weights.w * skin.jointMatrix[joints.w]);\n}\n\n",fs:"",defines:{SKIN_MAX_JOINTS:20},getUniforms:(e={},n)=>{const{scenegraphsFromGLTF:A}=e;if(!A?.gltf?.skins?.[0])return{jointMatrix:[]};const{inverseBindMatrices:r,joints:i,skeleton:s}=A.gltf.skins[0],o=[],a=r.value.length/16;for(let f=0;f<a;f++){const e=r.value.subarray(16*f,16*f+16);o.push(new t.Matrix4(Array.from(e)))}const l=A.gltfNodeIndexToNodeMap.get(s),c={};l.preorderTraversal((e,{worldMatrix:t})=>{c[e.id]=t});const u=new Float32Array(320);for(let f=0;f<20;++f){const e=i[f];if(void 0===e)break;const n=c[A.gltfNodeIndexToNodeMap.get(e).id],r=o[f],s=(new t.Matrix4).copy(n).multiplyRight(r),a=16*f;for(let t=0;t<16;t++)u[a+t]=s[t]}return{jointMatrix:u}},uniformTypes:{jointMatrix:["mat4x4<f32>",20]}},K="#ifdef USE_IBL\nuniform samplerCube pbr_diffuseEnvSampler;\nuniform samplerCube pbr_specularEnvSampler;\nuniform sampler2D pbr_brdfLUT;\n#endif\n",q={name:"ibl",firstBindingSlot:32,bindingLayout:[{name:"pbr_diffuseEnvSampler",group:2},{name:"pbr_specularEnvSampler",group:2},{name:"pbr_brdfLUT",group:2}],source:"#ifdef USE_IBL\n@group(2) @binding(auto) var pbr_diffuseEnvSampler: texture_cube<f32>;\n@group(2) @binding(auto) var pbr_diffuseEnvSamplerSampler: sampler;\n@group(2) @binding(auto) var pbr_specularEnvSampler: texture_cube<f32>;\n@group(2) @binding(auto) var pbr_specularEnvSamplerSampler: sampler;\n@group(2) @binding(auto) var pbr_brdfLUT: texture_2d<f32>;\n@group(2) @binding(auto) var pbr_brdfLUTSampler: sampler;\n#endif\n",vs:K,fs:K},Y="layout(std140) uniform pbrProjectionUniforms {\n mat4 modelViewProjectionMatrix;\n mat4 modelMatrix;\n mat4 normalMatrix;\n vec3 camera;\n} pbrProjection;\n",W={name:"pbrProjection",bindingLayout:[{name:"pbrProjection",group:0}],source:"struct pbrProjectionUniforms {\n modelViewProjectionMatrix: mat4x4<f32>,\n modelMatrix: mat4x4<f32>,\n normalMatrix: mat4x4<f32>,\n camera: vec3<f32>\n};\n\n@group(0) @binding(auto) var<uniform> pbrProjection: pbrProjectionUniforms;\n",vs:Y,fs:Y,getUniforms:e=>e,uniformTypes:{modelViewProjectionMatrix:"mat4x4<f32>",modelMatrix:"mat4x4<f32>",normalMatrix:"mat4x4<f32>",camera:"vec3<f32>"}},X={props:{},uniforms:{},defaultUniforms:{unlit:!1,baseColorMapEnabled:!1,baseColorFactor:[1,1,1,1],normalMapEnabled:!1,normalScale:1,emissiveMapEnabled:!1,emissiveFactor:[0,0,0],metallicRoughnessValues:[1,1],metallicRoughnessMapEnabled:!1,occlusionMapEnabled:!1,occlusionStrength:1,alphaCutoffEnabled:!1,alphaCutoff:.5,IBLenabled:!1,scaleIBLAmbient:[1,1],scaleDiffBaseMR:[0,0,0,0],scaleFGDSpec:[0,0,0,0],specularColorFactor:[1,1,1],specularIntensityFactor:1,specularColorMapEnabled:!1,specularIntensityMapEnabled:!1,ior:1.5,transmissionFactor:0,transmissionMapEnabled:!1,thicknessFactor:0,attenuationDistance:1e9,attenuationColor:[1,1,1],clearcoatFactor:0,clearcoatRoughnessFactor:0,clearcoatMapEnabled:!1,clearcoatRoughnessMapEnabled:!1,sheenColorFactor:[0,0,0],sheenRoughnessFactor:0,sheenColorMapEnabled:!1,sheenRoughnessMapEnabled:!1,iridescenceFactor:0,iridescenceIor:1.3,iridescenceThicknessRange:[100,400],iridescenceMapEnabled:!1,anisotropyStrength:0,anisotropyRotation:0,anisotropyDirection:[1,0],anisotropyMapEnabled:!1,emissiveStrength:1,baseColorUVSet:0,baseColorUVTransform:[1,0,0,0,1,0,0,0,1],metallicRoughnessUVSet:0,metallicRoughnessUVTransform:[1,0,0,0,1,0,0,0,1],normalUVSet:0,normalUVTransform:[1,0,0,0,1,0,0,0,1],occlusionUVSet:0,occlusionUVTransform:[1,0,0,0,1,0,0,0,1],emissiveUVSet:0,emissiveUVTransform:[1,0,0,0,1,0,0,0,1],specularColorUVSet:0,specularColorUVTransform:[1,0,0,0,1,0,0,0,1],specularIntensityUVSet:0,specularIntensityUVTransform:[1,0,0,0,1,0,0,0,1],transmissionUVSet:0,transmissionUVTransform:[1,0,0,0,1,0,0,0,1],thicknessUVSet:0,thicknessUVTransform:[1,0,0,0,1,0,0,0,1],clearcoatUVSet:0,clearcoatUVTransform:[1,0,0,0,1,0,0,0,1],clearcoatRoughnessUVSet:0,clearcoatRoughnessUVTransform:[1,0,0,0,1,0,0,0,1],clearcoatNormalUVSet:0,clearcoatNormalUVTransform:[1,0,0,0,1,0,0,0,1],sheenColorUVSet:0,sheenColorUVTransform:[1,0,0,0,1,0,0,0,1],sheenRoughnessUVSet:0,sheenRoughnessUVTransform:[1,0,0,0,1,0,0,0,1],iridescenceUVSet:0,iridescenceUVTransform:[1,0,0,0,1,0,0,0,1],iridescenceThicknessUVSet:0,iridescenceThicknessUVTransform:[1,0,0,0,1,0,0,0,1],anisotropyUVSet:0,anisotropyUVTransform:[1,0,0,0,1,0,0,0,1]},name:"pbrMaterial",firstBindingSlot:0,bindingLayout:[{name:"pbrMaterial",group:3},{name:"pbr_baseColorSampler",group:3},{name:"pbr_normalSampler",group:3},{name:"pbr_emissiveSampler",group:3},{name:"pbr_metallicRoughnessSampler",group:3},{name:"pbr_occlusionSampler",group:3},{name:"pbr_specularColorSampler",group:3},{name:"pbr_specularIntensitySampler",group:3},{name:"pbr_transmissionSampler",group:3},{name:"pbr_thicknessSampler",group:3},{name:"pbr_clearcoatSampler",group:3},{name:"pbr_clearcoatRoughnessSampler",group:3},{name:"pbr_clearcoatNormalSampler",group:3},{name:"pbr_sheenColorSampler",group:3},{name:"pbr_sheenRoughnessSampler",group:3},{name:"pbr_iridescenceSampler",group:3},{name:"pbr_iridescenceThicknessSampler",group:3},{name:"pbr_anisotropySampler",group:3}],dependencies:[e.lighting,q,W],source:"struct PBRFragmentInputs {\n pbr_vPosition: vec3f,\n pbr_vUV0: vec2f,\n pbr_vUV1: vec2f,\n pbr_vTBN: mat3x3f,\n pbr_vNormal: vec3f\n};\n\nvar<private> fragmentInputs: PBRFragmentInputs;\n\nfn pbr_setPositionNormalTangentUV(\n position: vec4f,\n normal: vec4f,\n tangent: vec4f,\n uv0: vec2f,\n uv1: vec2f\n)\n{\n var pos: vec4f = pbrProjection.modelMatrix * position;\n fragmentInputs.pbr_vPosition = pos.xyz / pos.w;\n fragmentInputs.pbr_vNormal = vec3f(0.0, 0.0, 1.0);\n fragmentInputs.pbr_vTBN = mat3x3f(\n vec3f(1.0, 0.0, 0.0),\n vec3f(0.0, 1.0, 0.0),\n vec3f(0.0, 0.0, 1.0)\n );\n fragmentInputs.pbr_vUV0 = vec2f(0.0, 0.0);\n fragmentInputs.pbr_vUV1 = uv1;\n\n#ifdef HAS_NORMALS\n let normalW: vec3f = normalize((pbrProjection.normalMatrix * vec4f(normal.xyz, 0.0)).xyz);\n fragmentInputs.pbr_vNormal = normalW;\n#ifdef HAS_TANGENTS\n let tangentW: vec3f = normalize((pbrProjection.modelMatrix * vec4f(tangent.xyz, 0.0)).xyz);\n let bitangentW: vec3f = cross(normalW, tangentW) * tangent.w;\n fragmentInputs.pbr_vTBN = mat3x3f(tangentW, bitangentW, normalW);\n#endif\n#endif\n\n#ifdef HAS_UV\n fragmentInputs.pbr_vUV0 = uv0;\n#endif\n}\n\nstruct pbrMaterialUniforms {\n // Material is unlit\n unlit: u32,\n\n // Base color map\n baseColorMapEnabled: u32,\n baseColorFactor: vec4f,\n\n normalMapEnabled : u32,\n normalScale: f32, // #ifdef HAS_NORMALMAP\n\n emissiveMapEnabled: u32,\n emissiveFactor: vec3f, // #ifdef HAS_EMISSIVEMAP\n\n metallicRoughnessValues: vec2f,\n metallicRoughnessMapEnabled: u32,\n\n occlusionMapEnabled: i32,\n occlusionStrength: f32, // #ifdef HAS_OCCLUSIONMAP\n \n alphaCutoffEnabled: i32,\n alphaCutoff: f32, // #ifdef ALPHA_CUTOFF\n\n specularColorFactor: vec3f,\n specularIntensityFactor: f32,\n specularColorMapEnabled: i32,\n specularIntensityMapEnabled: i32,\n\n ior: f32,\n\n transmissionFactor: f32,\n transmissionMapEnabled: i32,\n\n thicknessFactor: f32,\n attenuationDistance: f32,\n attenuationColor: vec3f,\n\n clearcoatFactor: f32,\n clearcoatRoughnessFactor: f32,\n clearcoatMapEnabled: i32,\n clearcoatRoughnessMapEnabled: i32,\n\n sheenColorFactor: vec3f,\n sheenRoughnessFactor: f32,\n sheenColorMapEnabled: i32,\n sheenRoughnessMapEnabled: i32,\n\n iridescenceFactor: f32,\n iridescenceIor: f32,\n iridescenceThicknessRange: vec2f,\n iridescenceMapEnabled: i32,\n\n anisotropyStrength: f32,\n anisotropyRotation: f32,\n anisotropyDirection: vec2f,\n anisotropyMapEnabled: i32,\n\n emissiveStrength: f32,\n \n // IBL\n IBLenabled: i32,\n scaleIBLAmbient: vec2f, // #ifdef USE_IBL\n \n // debugging flags used for shader output of intermediate PBR variables\n // #ifdef PBR_DEBUG\n scaleDiffBaseMR: vec4f,\n scaleFGDSpec: vec4f,\n // #endif\n\n baseColorUVSet: i32,\n baseColorUVTransform: mat3x3f,\n metallicRoughnessUVSet: i32,\n metallicRoughnessUVTransform: mat3x3f,\n normalUVSet: i32,\n normalUVTransform: mat3x3f,\n occlusionUVSet: i32,\n occlusionUVTransform: mat3x3f,\n emissiveUVSet: i32,\n emissiveUVTransform: mat3x3f,\n specularColorUVSet: i32,\n specularColorUVTransform: mat3x3f,\n specularIntensityUVSet: i32,\n specularIntensityUVTransform: mat3x3f,\n transmissionUVSet: i32,\n transmissionUVTransform: mat3x3f,\n thicknessUVSet: i32,\n thicknessUVTransform: mat3x3f,\n clearcoatUVSet: i32,\n clearcoatUVTransform: mat3x3f,\n clearcoatRoughnessUVSet: i32,\n clearcoatRoughnessUVTransform: mat3x3f,\n clearcoatNormalUVSet: i32,\n clearcoatNormalUVTransform: mat3x3f,\n sheenColorUVSet: i32,\n sheenColorUVTransform: mat3x3f,\n sheenRoughnessUVSet: i32,\n sheenRoughnessUVTransform: mat3x3f,\n iridescenceUVSet: i32,\n iridescenceUVTransform: mat3x3f,\n iridescenceThicknessUVSet: i32,\n iridescenceThicknessUVTransform: mat3x3f,\n anisotropyUVSet: i32,\n anisotropyUVTransform: mat3x3f,\n}\n\n@group(3) @binding(auto) var<uniform> pbrMaterial : pbrMaterialUniforms;\n\n// Samplers\n#ifdef HAS_BASECOLORMAP\n@group(3) @binding(auto) var pbr_baseColorSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_baseColorSamplerSampler: sampler;\n#endif\n#ifdef HAS_NORMALMAP\n@group(3) @binding(auto) var pbr_normalSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_normalSamplerSampler: sampler;\n#endif\n#ifdef HAS_EMISSIVEMAP\n@group(3) @binding(auto) var pbr_emissiveSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_emissiveSamplerSampler: sampler;\n#endif\n#ifdef HAS_METALROUGHNESSMAP\n@group(3) @binding(auto) var pbr_metallicRoughnessSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_metallicRoughnessSamplerSampler: sampler;\n#endif\n#ifdef HAS_OCCLUSIONMAP\n@group(3) @binding(auto) var pbr_occlusionSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_occlusionSamplerSampler: sampler;\n#endif\n#ifdef HAS_SPECULARCOLORMAP\n@group(3) @binding(auto) var pbr_specularColorSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_specularColorSamplerSampler: sampler;\n#endif\n#ifdef HAS_SPECULARINTENSITYMAP\n@group(3) @binding(auto) var pbr_specularIntensitySampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_specularIntensitySamplerSampler: sampler;\n#endif\n#ifdef HAS_TRANSMISSIONMAP\n@group(3) @binding(auto) var pbr_transmissionSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_transmissionSamplerSampler: sampler;\n#endif\n#ifdef HAS_THICKNESSMAP\n@group(3) @binding(auto) var pbr_thicknessSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_thicknessSamplerSampler: sampler;\n#endif\n#ifdef HAS_CLEARCOATMAP\n@group(3) @binding(auto) var pbr_clearcoatSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_clearcoatSamplerSampler: sampler;\n#endif\n#ifdef HAS_CLEARCOATROUGHNESSMAP\n@group(3) @binding(auto) var pbr_clearcoatRoughnessSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_clearcoatRoughnessSamplerSampler: sampler;\n#endif\n#ifdef HAS_CLEARCOATNORMALMAP\n@group(3) @binding(auto) var pbr_clearcoatNormalSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_clearcoatNormalSamplerSampler: sampler;\n#endif\n#ifdef HAS_SHEENCOLORMAP\n@group(3) @binding(auto) var pbr_sheenColorSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_sheenColorSamplerSampler: sampler;\n#endif\n#ifdef HAS_SHEENROUGHNESSMAP\n@group(3) @binding(auto) var pbr_sheenRoughnessSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_sheenRoughnessSamplerSampler: sampler;\n#endif\n#ifdef HAS_IRIDESCENCEMAP\n@group(3) @binding(auto) var pbr_iridescenceSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_iridescenceSamplerSampler: sampler;\n#endif\n#ifdef HAS_IRIDESCENCETHICKNESSMAP\n@group(3) @binding(auto) var pbr_iridescenceThicknessSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_iridescenceThicknessSamplerSampler: sampler;\n#endif\n#ifdef HAS_ANISOTROPYMAP\n@group(3) @binding(auto) var pbr_anisotropySampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_anisotropySamplerSampler: sampler;\n#endif\n// Encapsulate the various inputs used by the various functions in the shading equation\n// We store values in this struct to simplify the integration of alternative implementations\n// of the shading terms, outlined in the Readme.MD Appendix.\nstruct PBRInfo {\n NdotL: f32, // cos angle between normal and light direction\n NdotV: f32, // cos angle between normal and view direction\n NdotH: f32, // cos angle between normal and half vector\n LdotH: f32, // cos angle between light direction and half vector\n VdotH: f32, // cos angle between view direction and half vector\n perceptualRoughness: f32, // roughness value, as authored by the model creator (input to shader)\n metalness: f32, // metallic value at the surface\n reflectance0: vec3f, // full reflectance color (normal incidence angle)\n reflectance90: vec3f, // reflectance color at grazing angle\n alphaRoughness: f32, // roughness mapped to a more linear change in the roughness (proposed by [2])\n diffuseColor: vec3f, // color contribution from diffuse lighting\n specularColor: vec3f, // color contribution from specular lighting\n n: vec3f, // normal at surface point\n v: vec3f, // vector from surface point to camera\n};\n\nconst M_PI = 3.141592653589793;\nconst c_MinRoughness = 0.04;\n\nfn SRGBtoLINEAR(srgbIn: vec4f ) -> vec4f\n{\n var linOut: vec3f = srgbIn.xyz;\n#ifdef MANUAL_SRGB\n let bLess: vec3f = step(vec3f(0.04045), srgbIn.xyz);\n linOut = mix(\n srgbIn.xyz / vec3f(12.92),\n pow((srgbIn.xyz + vec3f(0.055)) / vec3f(1.055), vec3f(2.4)),\n bLess\n );\n#ifdef SRGB_FAST_APPROXIMATION\n linOut = pow(srgbIn.xyz, vec3f(2.2));\n#endif\n#endif\n return vec4f(linOut, srgbIn.w);\n}\n\nfn getMaterialUV(uvSet: i32, uvTransform: mat3x3f) -> vec2f\n{\n var baseUV = fragmentInputs.pbr_vUV0;\n if (uvSet == 1) {\n baseUV = fragmentInputs.pbr_vUV1;\n }\n return (uvTransform * vec3f(baseUV, 1.0)).xy;\n}\n\n// Build the tangent basis from interpolated attributes or screen-space derivatives.\nfn getTBN(uv: vec2f) -> mat3x3f\n{\n let pos_dx: vec3f = dpdx(fragmentInputs.pbr_vPosition);\n let pos_dy: vec3f = dpdy(fragmentInputs.pbr_vPosition);\n let tex_dx: vec3f = dpdx(vec3f(uv, 0.0));\n let tex_dy: vec3f = dpdy(vec3f(uv, 0.0));\n var t: vec3f = (tex_dy.y * pos_dx - tex_dx.y * pos_dy) / (tex_dx.x * tex_dy.y - tex_dy.x * tex_dx.y);\n\n var ng: vec3f = cross(pos_dx, pos_dy);\n#ifdef HAS_NORMALS\n ng = normalize(fragmentInputs.pbr_vNormal);\n#endif\n t = normalize(t - ng * dot(ng, t));\n var b: vec3f = normalize(cross(ng, t));\n var tbn: mat3x3f = mat3x3f(t, b, ng);\n#ifdef HAS_TANGENTS\n tbn = fragmentInputs.pbr_vTBN;\n#endif\n\n return tbn;\n}\n\n// Find the normal for this fragment, pulling either from a predefined normal map\n// or from the interpolated mesh normal and tangent attributes.\nfn getMappedNormal(\n normalSampler: texture_2d<f32>,\n normalSamplerBinding: sampler,\n tbn: mat3x3f,\n normalScale: f32,\n uv: vec2f\n) -> vec3f\n{\n let n = textureSample(normalSampler, normalSamplerBinding, uv).rgb;\n return normalize(tbn * ((2.0 * n - 1.0) * vec3f(normalScale, normalScale, 1.0)));\n}\n\nfn getNormal(tbn: mat3x3f, uv: vec2f) -> vec3f\n{\n // The tbn matrix is linearly interpolated, so we need to re-normalize\n var n: vec3f = normalize(tbn[2].xyz);\n#ifdef HAS_NORMALMAP\n n = getMappedNormal(\n pbr_normalSampler,\n pbr_normalSamplerSampler,\n tbn,\n pbrMaterial.normalScale,\n uv\n );\n#endif\n\n return n;\n}\n\nfn getClearcoatNormal(tbn: mat3x3f, baseNormal: vec3f, uv: vec2f) -> vec3f\n{\n#ifdef HAS_CLEARCOATNORMALMAP\n return getMappedNormal(\n pbr_clearcoatNormalSampler,\n pbr_clearcoatNormalSamplerSampler,\n tbn,\n 1.0,\n uv\n );\n#else\n return baseNormal;\n#endif\n}\n\n// Calculation of the lighting contribution from an optional Image Based Light source.\n// Precomputed Environment Maps are required uniform inputs and are computed as outlined in [1].\n// See our README.md on Environment Maps [3] for additional discussion.\n#ifdef USE_IBL\nfn getIBLContribution(pbrInfo: PBRInfo, n: vec3f, reflection: vec3f) -> vec3f\n{\n let mipCount: f32 = 9.0; // resolution of 512x512\n let lod: f32 = pbrInfo.perceptualRoughness * mipCount;\n // retrieve a scale and bias to F0. See [1], Figure 3\n let brdf = SRGBtoLINEAR(\n textureSampleLevel(\n pbr_brdfLUT,\n pbr_brdfLUTSampler,\n vec2f(pbrInfo.NdotV, 1.0 - pbrInfo.perceptualRoughness),\n 0.0\n )\n ).rgb;\n let diffuseLight =\n SRGBtoLINEAR(\n textureSampleLevel(pbr_diffuseEnvSampler, pbr_diffuseEnvSamplerSampler, n, 0.0)\n ).rgb;\n var specularLight = SRGBtoLINEAR(\n textureSampleLevel(\n pbr_specularEnvSampler,\n pbr_specularEnvSamplerSampler,\n reflection,\n 0.0\n )\n ).rgb;\n#ifdef USE_TEX_LOD\n specularLight = SRGBtoLINEAR(\n textureSampleLevel(\n pbr_specularEnvSampler,\n pbr_specularEnvSamplerSampler,\n reflection,\n lod\n )\n ).rgb;\n#endif\n\n let diffuse = diffuseLight * pbrInfo.diffuseColor * pbrMaterial.scaleIBLAmbient.x;\n let specular =\n specularLight * (pbrInfo.specularColor * brdf.x + brdf.y) * pbrMaterial.scaleIBLAmbient.y;\n\n return diffuse + specular;\n}\n#endif\n\n// Basic Lambertian diffuse\n// Implementation from Lambert's Photometria https://archive.org/details/lambertsphotome00lambgoog\n// See also [1], Equation 1\nfn diffuse(pbrInfo: PBRInfo) -> vec3<f32> {\n return pbrInfo.diffuseColor / M_PI;\n}\n\n// The following equation models the Fresnel reflectance term of the spec equation (aka F())\n// Implementation of fresnel from [4], Equation 15\nfn specularReflection(pbrInfo: PBRInfo) -> vec3<f32> {\n return pbrInfo.reflectance0 +\n (pbrInfo.reflectance90 - pbrInfo.reflectance0) *\n pow(clamp(1.0 - pbrInfo.VdotH, 0.0, 1.0), 5.0);\n}\n\n// This calculates the specular geometric attenuation (aka G()),\n// where rougher material will reflect less light back to the viewer.\n// This implementation is based on [1] Equation 4, and we adopt their modifications to\n// alphaRoughness as input as originally proposed in [2].\nfn geometricOcclusion(pbrInfo: PBRInfo) -> f32 {\n let NdotL: f32 = pbrInfo.NdotL;\n let NdotV: f32 = pbrInfo.NdotV;\n let r: f32 = pbrInfo.alphaRoughness;\n\n let attenuationL = 2.0 * NdotL / (NdotL + sqrt(r * r + (1.0 - r * r) * (NdotL * NdotL)));\n let attenuationV = 2.0 * NdotV / (NdotV + sqrt(r * r + (1.0 - r * r) * (NdotV * NdotV)));\n return attenuationL * attenuationV;\n}\n\n// The following equation(s) model the distribution of microfacet normals across\n// the area being drawn (aka D())\n// Implementation from \"Average Irregularity Representation of a Roughened Surface\n// for Ray Reflection\" by T. S. Trowbridge, and K. P. Reitz\n// Follows the distribution function recommended in the SIGGRAPH 2013 course notes\n// from EPIC Games [1], Equation 3.\nfn microfacetDistribution(pbrInfo: PBRInfo) -> f32 {\n let roughnessSq = pbrInfo.alphaRoughness * pbrInfo.alphaRoughness;\n let f = (pbrInfo.NdotH * roughnessSq - pbrInfo.NdotH) * pbrInfo.NdotH + 1.0;\n return roughnessSq / (M_PI * f * f);\n}\n\nfn maxComponent(value: vec3f) -> f32 {\n return max(max(value.r, value.g), value.b);\n}\n\nfn getDielectricF0(ior: f32) -> f32 {\n let clampedIor = max(ior, 1.0);\n let ratio = (clampedIor - 1.0) / (clampedIor + 1.0);\n return ratio * ratio;\n}\n\nfn normalizeDirection(direction: vec2f) -> vec2f {\n let directionLength = length(direction);\n if (directionLength > 0.0001) {\n return direction / directionLength;\n }\n\n return vec2f(1.0, 0.0);\n}\n\nfn rotateDirection(direction: vec2f, rotation: f32) -> vec2f {\n let s = sin(rotation);\n let c = cos(rotation);\n return vec2f(direction.x * c - direction.y * s, direction.x * s + direction.y * c);\n}\n\nfn getIridescenceTint(iridescence: f32, thickness: f32, NdotV: f32) -> vec3f {\n if (iridescence <= 0.0) {\n return vec3f(1.0);\n }\n\n let phase = 0.015 * thickness * pbrMaterial.iridescenceIor + (1.0 - NdotV) * 6.0;\n let thinFilmTint =\n 0.5 +\n 0.5 *\n cos(vec3f(phase, phase + 2.0943951, phase + 4.1887902));\n return mix(vec3f(1.0), thinFilmTint, iridescence);\n}\n\nfn getVolumeAttenuation(thickness: f32) -> vec3f {\n if (thickness <= 0.0) {\n return vec3f(1.0);\n }\n\n let attenuationCoefficient =\n -log(max(pbrMaterial.attenuationColor, vec3f(0.0001))) /\n max(pbrMaterial.attenuationDistance, 0.0001);\n return exp(-attenuationCoefficient * thickness);\n}\n\nfn createClearcoatPBRInfo(\n basePBRInfo: PBRInfo,\n clearcoatNormal: vec3f,\n clearcoatRoughness: f32\n) -> PBRInfo {\n let perceptualRoughness = clamp(clearcoatRoughness, c_MinRoughness, 1.0);\n let alphaRoughness = perceptualRoughness * perceptualRoughness;\n let NdotV = clamp(abs(dot(clearcoatNormal, basePBRInfo.v)), 0.001, 1.0);\n\n return PBRInfo(\n basePBRInfo.NdotL,\n NdotV,\n basePBRInfo.NdotH,\n basePBRInfo.LdotH,\n basePBRInfo.VdotH,\n perceptualRoughness,\n 0.0,\n vec3f(0.04),\n vec3f(1.0),\n alphaRoughness,\n vec3f(0.0),\n vec3f(0.04),\n clearcoatNormal,\n basePBRInfo.v\n );\n}\n\nfn calculateClearcoatContribution(\n pbrInfo: PBRInfo,\n lightColor: vec3f,\n clearcoatNormal: vec3f,\n clearcoatFactor: f32,\n clearcoatRoughness: f32\n) -> vec3f {\n if (clearcoatFactor <= 0.0) {\n return vec3f(0.0);\n }\n\n let clearcoatPBRInfo = createClearcoatPBRInfo(pbrInfo, clearcoatNormal, clearcoatRoughness);\n return calculateFinalColor(clearcoatPBRInfo, lightColor) * clearcoatFactor;\n}\n\n#ifdef USE_IBL\nfn calculateClearcoatIBLContribution(\n pbrInfo: PBRInfo,\n clearcoatNormal: vec3f,\n reflection: vec3f,\n clearcoatFactor: f32,\n clearcoatRoughness: f32\n) -> vec3f {\n if (clearcoatFactor <= 0.0) {\n return vec3f(0.0);\n }\n\n let clearcoatPBRInfo = createClearcoatPBRInfo(pbrInfo, clearcoatNormal, clearcoatRoughness);\n return getIBLContribution(clearcoatPBRInfo, clearcoatNormal, reflection) * clearcoatFactor;\n}\n#endif\n\nfn calculateSheenContribution(\n pbrInfo: PBRInfo,\n lightColor: vec3f,\n sheenColor: vec3f,\n sheenRoughness: f32\n) -> vec3f {\n if (maxComponent(sheenColor) <= 0.0) {\n return vec3f(0.0);\n }\n\n let sheenFresnel = pow(clamp(1.0 - pbrInfo.VdotH, 0.0, 1.0), 5.0);\n let sheenVisibility = mix(1.0, pbrInfo.NdotL * pbrInfo.NdotV, sheenRoughness);\n return pbrInfo.NdotL *\n lightColor *\n sheenColor *\n (0.25 + 0.75 * sheenFresnel) *\n sheenVisibility *\n (1.0 - pbrInfo.metalness);\n}\n\nfn calculateAnisotropyBoost(\n pbrInfo: PBRInfo,\n anisotropyTangent: vec3f,\n anisotropyStrength: f32\n) -> f32 {\n if (anisotropyStrength <= 0.0) {\n return 1.0;\n }\n\n let anisotropyBitangent = normalize(cross(pbrInfo.n, anisotropyTangent));\n let bitangentViewAlignment = abs(dot(pbrInfo.v, anisotropyBitangent));\n return mix(1.0, 0.65 + 0.7 * bitangentViewAlignment, anisotropyStrength);\n}\n\nfn calculateMaterialLightColor(\n pbrInfo: PBRInfo,\n lightColor: vec3f,\n clearcoatNormal: vec3f,\n clearcoatFactor: f32,\n clearcoatRoughness: f32,\n sheenColor: vec3f,\n sheenRoughness: f32,\n anisotropyTangent: vec3f,\n anisotropyStrength: f32\n) -> vec3f {\n let anisotropyBoost = calculateAnisotropyBoost(pbrInfo, anisotropyTangent, anisotropyStrength);\n var color = calculateFinalColor(pbrInfo, lightColor) * anisotropyBoost;\n color += calculateClearcoatContribution(\n pbrInfo,\n lightColor,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness\n );\n color += calculateSheenContribution(pbrInfo, lightColor, sheenColor, sheenRoughness);\n return color;\n}\n\nfn PBRInfo_setAmbientLight(pbrInfo: ptr<function, PBRInfo>) {\n (*pbrInfo).NdotL = 1.0;\n (*pbrInfo).NdotH = 0.0;\n (*pbrInfo).LdotH = 0.0;\n (*pbrInfo).VdotH = 1.0;\n}\n\nfn PBRInfo_setDirectionalLight(pbrInfo: ptr<function, PBRInfo>, lightDirection: vec3<f32>) {\n let n = (*pbrInfo).n;\n let v = (*pbrInfo).v;\n let l = normalize(lightDirection); // Vector from surface point to light\n let h = normalize(l + v); // Half vector between both l and v\n\n (*pbrInfo).NdotL = clamp(dot(n, l), 0.001, 1.0);\n (*pbrInfo).NdotH = clamp(dot(n, h), 0.0, 1.0);\n (*pbrInfo).LdotH = clamp(dot(l, h), 0.0, 1.0);\n (*pbrInfo).VdotH = clamp(dot(v, h), 0.0, 1.0);\n}\n\nfn PBRInfo_setPointLight(pbrInfo: ptr<function, PBRInfo>, pointLight: PointLight) {\n let light_direction = normalize(pointLight.position - fragmentInputs.pbr_vPosition);\n PBRInfo_setDirectionalLight(pbrInfo, light_direction);\n}\n\nfn PBRInfo_setSpotLight(pbrInfo: ptr<function, PBRInfo>, spotLight: SpotLight) {\n let light_direction = normalize(spotLight.position - fragmentInputs.pbr_vPosition);\n PBRInfo_setDirectionalLight(pbrInfo, light_direction);\n}\n\nfn calculateFinalColor(pbrInfo: PBRInfo, lightColor: vec3<f32>) -> vec3<f32> {\n // Calculate the shading terms for the microfacet specular shading model\n let F = specularReflection(pbrInfo);\n let G = geometricOcclusion(pbrInfo);\n let D = microfacetDistribution(pbrInfo);\n\n // Calculation of analytical lighting contribution\n let diffuseContrib = (1.0 - F) * diffuse(pbrInfo);\n let specContrib = F * G * D / (4.0 * pbrInfo.NdotL * pbrInfo.NdotV);\n // Obtain final intensity as reflectance (BRDF) scaled by the energy of the light (cosine law)\n return pbrInfo.NdotL * lightColor * (diffuseContrib + specContrib);\n}\n\nfn pbr_filterColor(colorUnused: vec4<f32>) -> vec4<f32> {\n let baseColorUV = getMaterialUV(pbrMaterial.baseColorUVSet, pbrMaterial.baseColorUVTransform);\n let metallicRoughnessUV = getMaterialUV(\n pbrMaterial.metallicRoughnessUVSet,\n pbrMaterial.metallicRoughnessUVTransform\n );\n let normalUV = getMaterialUV(pbrMaterial.normalUVSet, pbrMaterial.normalUVTransform);\n let occlusionUV = getMaterialUV(pbrMaterial.occlusionUVSet, pbrMaterial.occlusionUVTransform);\n let emissiveUV = getMaterialUV(pbrMaterial.emissiveUVSet, pbrMaterial.emissiveUVTransform);\n let specularColorUV = getMaterialUV(\n pbrMaterial.specularColorUVSet,\n pbrMaterial.specularColorUVTransform\n );\n let specularIntensityUV = getMaterialUV(\n pbrMaterial.specularIntensityUVSet,\n pbrMaterial.specularIntensityUVTransform\n );\n let transmissionUV = getMaterialUV(\n pbrMaterial.transmissionUVSet,\n pbrMaterial.transmissionUVTransform\n );\n let thicknessUV = getMaterialUV(pbrMaterial.thicknessUVSet, pbrMaterial.thicknessUVTransform);\n let clearcoatUV = getMaterialUV(pbrMaterial.clearcoatUVSet, pbrMaterial.clearcoatUVTransform);\n let clearcoatRoughnessUV = getMaterialUV(\n pbrMaterial.clearcoatRoughnessUVSet,\n pbrMaterial.clearcoatRoughnessUVTransform\n );\n let clearcoatNormalUV = getMaterialUV(\n pbrMaterial.clearcoatNormalUVSet,\n pbrMaterial.clearcoatNormalUVTransform\n );\n let sheenColorUV = getMaterialUV(\n pbrMaterial.sheenColorUVSet,\n pbrMaterial.sheenColorUVTransform\n );\n let sheenRoughnessUV = getMaterialUV(\n pbrMaterial.sheenRoughnessUVSet,\n pbrMaterial.sheenRoughnessUVTransform\n );\n let iridescenceUV = getMaterialUV(\n pbrMaterial.iridescenceUVSet,\n pbrMaterial.iridescenceUVTransform\n );\n let iridescenceThicknessUV = getMaterialUV(\n pbrMaterial.iridescenceThicknessUVSet,\n pbrMaterial.iridescenceThicknessUVTransform\n );\n let anisotropyUV = getMaterialUV(\n pbrMaterial.anisotropyUVSet,\n pbrMaterial.anisotropyUVTransform\n );\n\n // The albedo may be defined from a base texture or a flat color\n var baseColor: vec4<f32> = pbrMaterial.baseColorFactor;\n #ifdef HAS_BASECOLORMAP\n baseColor = SRGBtoLINEAR(\n textureSample(pbr_baseColorSampler, pbr_baseColorSamplerSampler, baseColorUV)\n ) * pbrMaterial.baseColorFactor;\n #endif\n\n #ifdef ALPHA_CUTOFF\n if (baseColor.a < pbrMaterial.alphaCutoff) {\n discard;\n }\n #endif\n\n var color = vec3<f32>(0.0, 0.0, 0.0);\n var transmission = 0.0;\n\n if (pbrMaterial.unlit != 0u) {\n color = baseColor.rgb;\n } else {\n // Metallic and Roughness material properties are packed together\n // In glTF, these factors can be specified by fixed scalar values\n // or from a metallic-roughness map\n var perceptualRoughness = pbrMaterial.metallicRoughnessValues.y;\n var metallic = pbrMaterial.metallicRoughnessValues.x;\n #ifdef HAS_METALROUGHNESSMAP\n // Roughness is stored in the 'g' channel, metallic is stored in the 'b' channel.\n // This layout intentionally reserves the 'r' channel for (optional) occlusion map data\n let mrSample = textureSample(\n pbr_metallicRoughnessSampler,\n pbr_metallicRoughnessSamplerSampler,\n metallicRoughnessUV\n );\n perceptualRoughness = mrSample.g * perceptualRoughness;\n metallic = mrSample.b * metallic;\n #endif\n perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0);\n metallic = clamp(metallic, 0.0, 1.0);\n let tbn = getTBN(normalUV);\n let n = getNormal(tbn, normalUV); // normal at surface point\n let v = normalize(pbrProjection.camera - fragmentInputs.pbr_vPosition); // Vector from surface point to camera\n let NdotV = clamp(abs(dot(n, v)), 0.001, 1.0);\n var useExtendedPBR = false;\n #ifdef USE_MATERIAL_EXTENSIONS\n useExtendedPBR =\n pbrMaterial.specularColorMapEnabled != 0 ||\n pbrMaterial.specularIntensityMapEnabled != 0 ||\n abs(pbrMaterial.specularIntensityFactor - 1.0) > 0.0001 ||\n maxComponent(abs(pbrMaterial.specularColorFactor - vec3f(1.0))) > 0.0001 ||\n abs(pbrMaterial.ior - 1.5) > 0.0001 ||\n pbrMaterial.transmissionMapEnabled != 0 ||\n pbrMaterial.transmissionFactor > 0.0001 ||\n pbrMaterial.clearcoatMapEnabled != 0 ||\n pbrMaterial.clearcoatRoughnessMapEnabled != 0 ||\n pbrMaterial.clearcoatFactor > 0.0001 ||\n pbrMaterial.clearcoatRoughnessFactor > 0.0001 ||\n pbrMaterial.sheenColorMapEnabled != 0 ||\n pbrMaterial.sheenRoughnessMapEnabled != 0 ||\n maxComponent(pbrMaterial.sheenColorFactor) > 0.0001 ||\n pbrMaterial.sheenRoughnessFactor > 0.0001 ||\n pbrMaterial.iridescenceMapEnabled != 0 ||\n pbrMaterial.iridescenceFactor > 0.0001 ||\n abs(pbrMaterial.iridescenceIor - 1.3) > 0.0001 ||\n abs(pbrMaterial.iridescenceThicknessRange.x - 100.0) > 0.0001 ||\n abs(pbrMaterial.iridescenceThicknessRange.y - 400.0) > 0.0001 ||\n pbrMaterial.anisotropyMapEnabled != 0 ||\n pbrMaterial.anisotropyStrength > 0.0001 ||\n abs(pbrMaterial.anisotropyRotation) > 0.0001 ||\n length(pbrMaterial.anisotropyDirection - vec2f(1.0, 0.0)) > 0.0001;\n #endif\n\n if (!useExtendedPBR) {\n let alphaRoughness = perceptualRoughness * perceptualRoughness;\n\n let f0 = vec3<f32>(0.04);\n var diffuseColor = baseColor.rgb * (vec3<f32>(1.0) - f0);\n diffuseColor *= 1.0 - metallic;\n let specularColor = mix(f0, baseColor.rgb, metallic);\n\n let reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n let reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);\n let specularEnvironmentR0 = specularColor;\n let specularEnvironmentR90 = vec3<f32>(1.0, 1.0, 1.0) * reflectance90;\n let reflection = -normalize(reflect(v, n));\n\n var pbrInfo = PBRInfo(\n 0.0, // NdotL\n NdotV,\n 0.0, // NdotH\n 0.0, // LdotH\n 0.0, // VdotH\n perceptualRoughness,\n metallic,\n specularEnvironmentR0,\n specularEnvironmentR90,\n alphaRoughness,\n diffuseColor,\n specularColor,\n n,\n v\n );\n\n #ifdef USE_LIGHTS\n PBRInfo_setAmbientLight(&pbrInfo);\n color += calculateFinalColor(pbrInfo, lighting.ambientColor);\n\n for (var i = 0; i < lighting.directionalLightCount; i++) {\n if (i < lighting.directionalLightCount) {\n PBRInfo_setDirectionalLight(&pbrInfo, lighting_getDirectionalLight(i).direction);\n color += calculateFinalColor(pbrInfo, lighting_getDirectionalLight(i).color);\n }\n }\n\n for (var i = 0; i < lighting.pointLightCount; i++) {\n if (i < lighting.pointLightCount) {\n PBRInfo_setPointLight(&pbrInfo, lighting_getPointLight(i));\n let attenuation = getPointLightAttenuation(\n lighting_getPointLight(i),\n distance(lighting_getPointLight(i).position, fragmentInputs.pbr_vPosition)\n );\n color += calculateFinalColor(pbrInfo, lighting_getPointLight(i).color / attenuation);\n }\n }\n\n for (var i = 0; i < lighting.spotLightCount; i++) {\n if (i < lighting.spotLightCount) {\n PBRInfo_setSpotLight(&pbrInfo, lighting_getSpotLight(i));\n let attenuation = getSpotLightAttenuation(\n lighting_getSpotLight(i),\n fragmentInputs.pbr_vPosition\n );\n color += calculateFinalColor(pbrInfo, lighting_getSpotLight(i).color / attenuation);\n }\n }\n #endif\n\n #ifdef USE_IBL\n if (pbrMaterial.IBLenabled != 0) {\n color += getIBLContribution(pbrInfo, n, reflection);\n }\n #endif\n\n #ifdef HAS_OCCLUSIONMAP\n if (pbrMaterial.occlusionMapEnabled != 0) {\n let ao = textureSample(pbr_occlusionSampler, pbr_occlusionSamplerSampler, occlusionUV).r;\n color = mix(color, color * ao, pbrMaterial.occlusionStrength);\n }\n #endif\n\n var emissive = pbrMaterial.emissiveFactor;\n #ifdef HAS_EMISSIVEMAP\n if (pbrMaterial.emissiveMapEnabled != 0u) {\n emissive *= SRGBtoLINEAR(\n textureSample(pbr_emissiveSampler, pbr_emissiveSamplerSampler, emissiveUV)\n ).rgb;\n }\n #endif\n color += emissive * pbrMaterial.emissiveStrength;\n\n #ifdef PBR_DEBUG\n color = mix(color, baseColor.rgb, pbrMaterial.scaleDiffBaseMR.y);\n color = mix(color, vec3<f32>(metallic), pbrMaterial.scaleDiffBaseMR.z);\n color = mix(color, vec3<f32>(perceptualRoughness), pbrMaterial.scaleDiffBaseMR.w);\n #endif\n\n return vec4<f32>(pow(color, vec3<f32>(1.0 / 2.2)), baseColor.a);\n }\n\n var specularIntensity = pbrMaterial.specularIntensityFactor;\n #ifdef HAS_SPECULARINTENSITYMAP\n if (pbrMaterial.specularIntensityMapEnabled != 0) {\n specularIntensity *= textureSample(\n pbr_specularIntensitySampler,\n pbr_specularIntensitySamplerSampler,\n specularIntensityUV\n ).a;\n }\n #endif\n\n var specularFactor = pbrMaterial.specularColorFactor;\n #ifdef HAS_SPECULARCOLORMAP\n if (pbrMaterial.specularColorMapEnabled != 0) {\n specularFactor *= SRGBtoLINEAR(\n textureSample(\n pbr_specularColorSampler,\n pbr_specularColorSamplerSampler,\n specularColorUV\n )\n ).rgb;\n }\n #endif\n\n transmission = pbrMaterial.transmissionFactor;\n #ifdef HAS_TRANSMISSIONMAP\n if (pbrMaterial.transmissionMapEnabled != 0) {\n transmission *= textureSample(\n pbr_transmissionSampler,\n pbr_transmissionSamplerSampler,\n transmissionUV\n ).r;\n }\n #endif\n transmission = clamp(transmission * (1.0 - metallic), 0.0, 1.0);\n var thickness = max(pbrMaterial.thicknessFactor, 0.0);\n #ifdef HAS_THICKNESSMAP\n thickness *= textureSample(\n pbr_thicknessSampler,\n pbr_thicknessSamplerSampler,\n thicknessUV\n ).g;\n #endif\n\n var clearcoatFactor = pbrMaterial.clearcoatFactor;\n var clearcoatRoughness = pbrMaterial.clearcoatRoughnessFactor;\n #ifdef HAS_CLEARCOATMAP\n if (pbrMaterial.clearcoatMapEnabled != 0) {\n clearcoatFactor *= textureSample(\n pbr_clearcoatSampler,\n pbr_clearcoatSamplerSampler,\n clearcoatUV\n ).r;\n }\n #endif\n #ifdef HAS_CLEARCOATROUGHNESSMAP\n if (pbrMaterial.clearcoatRoughnessMapEnabled != 0) {\n clearcoatRoughness *= textureSample(\n pbr_clearcoatRoughnessSampler,\n pbr_clearcoatRoughnessSamplerSampler,\n clearcoatRoughnessUV\n ).g;\n }\n #endif\n clearcoatFactor = clamp(clearcoatFactor, 0.0, 1.0);\n clearcoatRoughness = clamp(clearcoatRoughness, c_MinRoughness, 1.0);\n let clearcoatNormal = getClearcoatNormal(getTBN(clearcoatNormalUV), n, clearcoatNormalUV);\n\n var sheenColor = pbrMaterial.sheenColorFactor;\n var sheenRoughness = pbrMaterial.sheenRoughnessFactor;\n #ifdef HAS_SHEENCOLORMAP\n if (pbrMaterial.sheenColorMapEnabled != 0) {\n sheenColor *= SRGBtoLINEAR(\n textureSample(\n pbr_sheenColorSampler,\n pbr_sheenColorSamplerSampler,\n sheenColorUV\n )\n ).rgb;\n }\n #endif\n #ifdef HAS_SHEENROUGHNESSMAP\n if (pbrMaterial.sheenRoughnessMapEnabled != 0) {\n sheenRoughness *= textureSample(\n pbr_sheenRoughnessSampler,\n pbr_sheenRoughnessSamplerSampler,\n sheenRoughnessUV\n ).a;\n }\n #endif\n sheenRoughness = clamp(sheenRoughness, c_MinRoughness, 1.0);\n\n var iridescence = pbrMaterial.iridescenceFactor;\n #ifdef HAS_IRIDESCENCEMAP\n if (pbrMaterial.iridescenceMapEnabled != 0) {\n iridescence *= textureSample(\n pbr_iridescenceSampler,\n pbr_iridescenceSamplerSampler,\n iridescenceUV\n ).r;\n }\n #endif\n iridescence = clamp(iridescence, 0.0, 1.0);\n var iridescenceThickness = mix(\n pbrMaterial.iridescenceThicknessRange.x,\n pbrMaterial.iridescenceThicknessRange.y,\n 0.5\n );\n #ifdef HAS_IRIDESCENCETHICKNESSMAP\n iridescenceThickness = mix(\n pbrMaterial.iridescenceThicknessRange.x,\n pbrMaterial.iridescenceThicknessRange.y,\n textureSample(\n pbr_iridescenceThicknessSampler,\n pbr_iridescenceThicknessSamplerSampler,\n iridescenceThicknessUV\n ).g\n );\n #endif\n\n var anisotropyStrength = clamp(pbrMaterial.anisotropyStrength, 0.0, 1.0);\n var anisotropyDirection = normalizeDirection(pbrMaterial.anisotropyDirection);\n #ifdef HAS_ANISOTROPYMAP\n if (pbrMaterial.anisotropyMapEnabled != 0) {\n let anisotropySample = textureSample(\n pbr_anisotropySampler,\n pbr_anisotropySamplerSampler,\n anisotropyUV\n ).rgb;\n anisotropyStrength *= anisotropySample.b;\n let mappedDirection = anisotropySample.rg * 2.0 - 1.0;\n if (length(mappedDirection) > 0.0001) {\n anisotropyDirection = normalize(mappedDirection);\n }\n }\n #endif\n anisotropyDirection = rotateDirection(anisotropyDirection, pbrMaterial.anisotropyRotation);\n var anisotropyTangent =\n normalize(tbn[0] * anisotropyDirection.x + tbn[1] * anisotropyDirection.y);\n if (length(anisotropyTangent) < 0.0001) {\n anisotropyTangent = normalize(tbn[0]);\n }\n let anisotropyViewAlignment = abs(dot(v, anisotropyTangent));\n perceptualRoughness = mix(\n perceptualRoughness,\n clamp(perceptualRoughness * (1.0 - 0.6 * anisotropyViewAlignment), c_MinRoughness, 1.0),\n anisotropyStrength\n );\n\n // Roughness is authored as perceptual roughness; as is convention,\n // convert to material roughness by squaring the perceptual roughness [2].\n let alphaRoughness = perceptualRoughness * perceptualRoughness;\n\n let dielectricF0 = getDielectricF0(pbrMaterial.ior);\n var dielectricSpecularF0 = min(\n vec3f(dielectricF0) * specularFactor * specularIntensity,\n vec3f(1.0)\n );\n let iridescenceTint = getIridescenceTint(iridescence, iridescenceThickness, NdotV);\n dielectricSpecularF0 = mix(\n dielectricSpecularF0,\n dielectricSpecularF0 * iridescenceTint,\n iridescence\n );\n var diffuseColor = baseColor.rgb * (vec3f(1.0) - dielectricSpecularF0);\n diffuseColor *= (1.0 - metallic) * (1.0 - transmission);\n var specularColor = mix(dielectricSpecularF0, baseColor.rgb, metallic);\n\n let baseLayerEnergy = 1.0 - clearcoatFactor * 0.25;\n diffuseColor *= baseLayerEnergy;\n specularColor *= baseLayerEnergy;\n\n // Compute reflectance.\n let reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n\n // For typical incident reflectance range (between 4% to 100%) set the grazing\n // reflectance to 100% for typical fresnel effect.\n // For very low reflectance range on highly diffuse objects (below 4%),\n // incrementally reduce grazing reflectance to 0%.\n let reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);\n let specularEnvironmentR0 = specularColor;\n let specularEnvironmentR90 = vec3<f32>(1.0, 1.0, 1.0) * reflectance90;\n let reflection = -normalize(reflect(v, n));\n\n var pbrInfo = PBRInfo(\n 0.0, // NdotL\n NdotV,\n 0.0, // NdotH\n 0.0, // LdotH\n 0.0, // VdotH\n perceptualRoughness,\n metallic,\n specularEnvironmentR0,\n specularEnvironmentR90,\n alphaRoughness,\n diffuseColor,\n specularColor,\n n,\n v\n );\n\n #ifdef USE_LIGHTS\n // Apply ambient light\n PBRInfo_setAmbientLight(&pbrInfo);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting.ambientColor,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n\n // Apply directional light\n for (var i = 0; i < lighting.directionalLightCount; i++) {\n if (i < lighting.directionalLightCount) {\n PBRInfo_setDirectionalLight(&pbrInfo, lighting_getDirectionalLight(i).direction);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getDirectionalLight(i).color,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n\n // Apply point light\n for (var i = 0; i < lighting.pointLightCount; i++) {\n if (i < lighting.pointLightCount) {\n PBRInfo_setPointLight(&pbrInfo, lighting_getPointLight(i));\n let attenuation = getPointLightAttenuation(\n lighting_getPointLight(i),\n distance(lighting_getPointLight(i).position, fragmentInputs.pbr_vPosition)\n );\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getPointLight(i).color / attenuation,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n\n for (var i = 0; i < lighting.spotLightCount; i++) {\n if (i < lighting.spotLightCount) {\n PBRInfo_setSpotLight(&pbrInfo, lighting_getSpotLight(i));\n let attenuation = getSpotLightAttenuation(lighting_getSpotLight(i), fragmentInputs.pbr_vPosition);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getSpotLight(i).color / attenuation,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n #endif\n\n // Calculate lighting contribution from image based lighting source (IBL)\n #ifdef USE_IBL\n if (pbrMaterial.IBLenabled != 0) {\n color += getIBLContribution(pbrInfo, n, reflection) *\n calculateAnisotropyBoost(pbrInfo, anisotropyTangent, anisotropyStrength);\n color += calculateClearcoatIBLContribution(\n pbrInfo,\n clearcoatNormal,\n -normalize(reflect(v, clearcoatNormal)),\n clearcoatFactor,\n clearcoatRoughness\n );\n color += sheenColor * pbrMaterial.scaleIBLAmbient.x * (1.0 - sheenRoughness) * 0.25;\n }\n #endif\n\n // Apply optional PBR terms for additional (optional) shading\n #ifdef HAS_OCCLUSIONMAP\n if (pbrMaterial.occlusionMapEnabled != 0) {\n let ao = textureSample(pbr_occlusionSampler, pbr_occlusionSamplerSampler, occlusionUV).r;\n color = mix(color, color * ao, pbrMaterial.occlusionStrength);\n }\n #endif\n\n var emissive = pbrMaterial.emissiveFactor;\n #ifdef HAS_EMISSIVEMAP\n if (pbrMaterial.emissiveMapEnabled != 0u) {\n emissive *= SRGBtoLINEAR(\n textureSample(pbr_emissiveSampler, pbr_emissiveSamplerSampler, emissiveUV)\n ).rgb;\n }\n #endif\n color += emissive * pbrMaterial.emissiveStrength;\n\n if (transmission > 0.0) {\n color = mix(color, color * getVolumeAttenuation(thickness), transmission);\n }\n\n // This section uses mix to override final color for reference app visualization\n // of various parameters in the lighting equation.\n #ifdef PBR_DEBUG\n // TODO: Figure out how to debug multiple lights\n\n // color = mix(color, F, pbr_scaleFGDSpec.x);\n // color = mix(color, vec3(G), pbr_scaleFGDSpec.y);\n // color = mix(color, vec3(D), pbr_scaleFGDSpec.z);\n // color = mix(color, specContrib, pbr_scaleFGDSpec.w);\n\n // color = mix(color, diffuseContrib, pbr_scaleDiffBaseMR.x);\n color = mix(color, baseColor.rgb, pbrMaterial.scaleDiffBaseMR.y);\n color = mix(color, vec3<f32>(metallic), pbrMaterial.scaleDiffBaseMR.z);\n color = mix(color, vec3<f32>(perceptualRoughness), pbrMaterial.scaleDiffBaseMR.w);\n #endif\n }\n\n let alpha = clamp(baseColor.a * (1.0 - transmission), 0.0, 1.0);\n return vec4<f32>(pow(color, vec3<f32>(1.0 / 2.2)), alpha);\n}\n",vs:"out vec3 pbr_vPosition;\nout vec2 pbr_vUV0;\nout vec2 pbr_vUV1;\n\n#ifdef HAS_NORMALS\n# ifdef HAS_TANGENTS\nout mat3 pbr_vTBN;\n# else\nout vec3 pbr_vNormal;\n# endif\n#endif\n\nvoid pbr_setPositionNormalTangentUV(\n vec4 position,\n vec4 normal,\n vec4 tangent,\n vec2 uv0,\n vec2 uv1\n)\n{\n vec4 pos = pbrProjection.modelMatrix * position;\n pbr_vPosition = vec3(pos.xyz) / pos.w;\n\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\n vec3 normalW = normalize(vec3(pbrProjection.normalMatrix * vec4(normal.xyz, 0.0)));\n vec3 tangentW = normalize(vec3(pbrProjection.modelMatrix * vec4(tangent.xyz, 0.0)));\n vec3 bitangentW = cross(normalW, tangentW) * tangent.w;\n pbr_vTBN = mat3(tangentW, bitangentW, normalW);\n#else // HAS_TANGENTS != 1\n pbr_vNormal = normalize(vec3(pbrProjection.modelMatrix * vec4(normal.xyz, 0.0)));\n#endif\n#endif\n\n#ifdef HAS_UV\n pbr_vUV0 = uv0;\n#else\n pbr_vUV0 = vec2(0.,0.);\n#endif\n\n pbr_vUV1 = uv1;\n}\n",fs:"precision highp float;\n\nlayout(std140) uniform pbrMaterialUniforms {\n // Material is unlit\n bool unlit;\n\n // Base color map\n bool baseColorMapEnabled;\n vec4 baseColorFactor;\n\n bool normalMapEnabled; \n float normalScale; // #ifdef HAS_NORMALMAP\n\n bool emissiveMapEnabled;\n vec3 emissiveFactor; // #ifdef HAS_EMISSIVEMAP\n\n vec2 metallicRoughnessValues;\n bool metallicRoughnessMapEnabled;\n\n bool occlusionMapEnabled;\n float occlusionStrength; // #ifdef HAS_OCCLUSIONMAP\n \n bool alphaCutoffEnabled;\n float alphaCutoff; // #ifdef ALPHA_CUTOFF\n\n vec3 specularColorFactor;\n float specularIntensityFactor;\n bool specularColorMapEnabled;\n bool specularIntensityMapEnabled;\n\n float ior;\n\n float transmissionFactor;\n bool transmissionMapEnabled;\n\n float thicknessFactor;\n float attenuationDistance;\n vec3 attenuationColor;\n\n float clearcoatFactor;\n float clearcoatRoughnessFactor;\n bool clearcoatMapEnabled;\n bool clearcoatRoughnessMapEnabled;\n\n vec3 sheenColorFactor;\n float sheenRoughnessFactor;\n bool sheenColorMapEnabled;\n bool sheenRoughnessMapEnabled;\n\n float iridescenceFactor;\n float iridescenceIor;\n vec2 iridescenceThicknessRange;\n bool iridescenceMapEnabled;\n\n float anisotropyStrength;\n float anisotropyRotation;\n vec2 anisotropyDirection;\n bool anisotropyMapEnabled;\n\n float emissiveStrength;\n \n // IBL\n bool IBLenabled;\n vec2 scaleIBLAmbient; // #ifdef USE_IBL\n \n // debugging flags used for shader output of intermediate PBR variables\n // #ifdef PBR_DEBUG\n vec4 scaleDiffBaseMR;\n vec4 scaleFGDSpec;\n // #endif\n\n int baseColorUVSet;\n mat3 baseColorUVTransform;\n int metallicRoughnessUVSet;\n mat3 metallicRoughnessUVTransform;\n int normalUVSet;\n mat3 normalUVTransform;\n int occlusionUVSet;\n mat3 occlusionUVTransform;\n int emissiveUVSet;\n mat3 emissiveUVTransform;\n int specularColorUVSet;\n mat3 specularColorUVTransform;\n int specularIntensityUVSet;\n mat3 specularIntensityUVTransform;\n int transmissionUVSet;\n mat3 transmissionUVTransform;\n int thicknessUVSet;\n mat3 thicknessUVTransform;\n int clearcoatUVSet;\n mat3 clearcoatUVTransform;\n int clearcoatRoughnessUVSet;\n mat3 clearcoatRoughnessUVTransform;\n int clearcoatNormalUVSet;\n mat3 clearcoatNormalUVTransform;\n int sheenColorUVSet;\n mat3 sheenColorUVTransform;\n int sheenRoughnessUVSet;\n mat3 sheenRoughnessUVTransform;\n int iridescenceUVSet;\n mat3 iridescenceUVTransform;\n int iridescenceThicknessUVSet;\n mat3 iridescenceThicknessUVTransform;\n int anisotropyUVSet;\n mat3 anisotropyUVTransform;\n} pbrMaterial;\n\n// Samplers\n#ifdef HAS_BASECOLORMAP\nuniform sampler2D pbr_baseColorSampler;\n#endif\n#ifdef HAS_NORMALMAP\nuniform sampler2D pbr_normalSampler;\n#endif\n#ifdef HAS_EMISSIVEMAP\nuniform sampler2D pbr_emissiveSampler;\n#endif\n#ifdef HAS_METALROUGHNESSMAP\nuniform sampler2D pbr_metallicRoughnessSampler;\n#endif\n#ifdef HAS_OCCLUSIONMAP\nuniform sampler2D pbr_occlusionSampler;\n#endif\n#ifdef HAS_SPECULARCOLORMAP\nuniform sampler2D pbr_specularColorSampler;\n#endif\n#ifdef HAS_SPECULARINTENSITYMAP\nuniform sampler2D pbr_specularIntensitySampler;\n#endif\n#ifdef HAS_TRANSMISSIONMAP\nuniform sampler2D pbr_transmissionSampler;\n#endif\n#ifdef HAS_THICKNESSMAP\nuniform sampler2D pbr_thicknessSampler;\n#endif\n#ifdef HAS_CLEARCOATMAP\nuniform sampler2D pbr_clearcoatSampler;\n#endif\n#ifdef HAS_CLEARCOATROUGHNESSMAP\nuniform sampler2D pbr_clearcoatRoughnessSampler;\n#endif\n#ifdef HAS_CLEARCOATNORMALMAP\nuniform sampler2D pbr_clearcoatNormalSampler;\n#endif\n#ifdef HAS_SHEENCOLORMAP\nuniform sampler2D pbr_sheenColorSampler;\n#endif\n#ifdef HAS_SHEENROUGHNESSMAP\nuniform sampler2D pbr_sheenRoughnessSampler;\n#endif\n#ifdef HAS_IRIDESCENCEMAP\nuniform sampler2D pbr_iridescenceSampler;\n#endif\n#ifdef HAS_IRIDESCENCETHICKNESSMAP\nuniform sampler2D pbr_iridescenceThicknessSampler;\n#endif\n#ifdef HAS_ANISOTROPYMAP\nuniform sampler2D pbr_anisotropySampler;\n#endif\n// Inputs from vertex shader\n\nin vec3 pbr_vPosition;\nin vec2 pbr_vUV0;\nin vec2 pbr_vUV1;\n\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\nin mat3 pbr_vTBN;\n#else\nin vec3 pbr_vNormal;\n#endif\n#endif\n\n// Encapsulate the various inputs used by the various functions in the shading equation\n// We store values in this struct to simplify the integration of alternative implementations\n// of the shading terms, outlined in the Readme.MD Appendix.\nstruct PBRInfo {\n float NdotL; // cos angle between normal and light direction\n float NdotV; // cos angle between normal and view direction\n float NdotH; // cos angle between normal and half vector\n float LdotH; // cos angle between light direction and half vector\n float VdotH; // cos angle between view direction and half vector\n float perceptualRoughness; // roughness value, as authored by the model creator (input to shader)\n float metalness; // metallic value at the surface\n vec3 reflectance0; // full reflectance color (normal incidence angle)\n vec3 reflectance90; // reflectance color at grazing angle\n float alphaRoughness; // roughness mapped to a more linear change in the roughness (proposed by [2])\n vec3 diffuseColor; // color contribution from diffuse lighting\n vec3 specularColor; // color contribution from specular lighting\n vec3 n; // normal at surface point\n vec3 v; // vector from surface point to camera\n};\n\nconst float M_PI = 3.141592653589793;\nconst float c_MinRoughness = 0.04;\n\nvec3 calculateFinalColor(PBRInfo pbrInfo, vec3 lightColor);\n\nvec4 SRGBtoLINEAR(vec4 srgbIn)\n{\n#ifdef MANUAL_SRGB\n#ifdef SRGB_FAST_APPROXIMATION\n vec3 linOut = pow(srgbIn.xyz,vec3(2.2));\n#else // SRGB_FAST_APPROXIMATION\n vec3 bLess = step(vec3(0.04045),srgbIn.xyz);\n vec3 linOut = mix( srgbIn.xyz/vec3(12.92), pow((srgbIn.xyz+vec3(0.055))/vec3(1.055),vec3(2.4)), bLess );\n#endif //SRGB_FAST_APPROXIMATION\n return vec4(linOut,srgbIn.w);;\n#else //MANUAL_SRGB\n return srgbIn;\n#endif //MANUAL_SRGB\n}\n\nvec2 getMaterialUV(int uvSet, mat3 uvTransform)\n{\n vec2 baseUV = uvSet == 1 ? pbr_vUV1 : pbr_vUV0;\n return (uvTransform * vec3(baseUV, 1.0)).xy;\n}\n\n// Build the tangent basis from interpolated attributes or screen-space derivatives.\nmat3 getTBN(vec2 uv)\n{\n#ifndef HAS_TANGENTS\n vec3 pos_dx = dFdx(pbr_vPosition);\n vec3 pos_dy = dFdy(pbr_vPosition);\n vec3 tex_dx = dFdx(vec3(uv, 0.0));\n vec3 tex_dy = dFdy(vec3(uv, 0.0));\n vec3 t = (tex_dy.t * pos_dx - tex_dx.t * pos_dy) / (tex_dx.s * tex_dy.t - tex_dy.s * tex_dx.t);\n\n#ifdef HAS_NORMALS\n vec3 ng = normalize(pbr_vNormal);\n#else\n vec3 ng = cross(pos_dx, pos_dy);\n#endif\n\n t = normalize(t - ng * dot(ng, t));\n vec3 b = normalize(cross(ng, t));\n mat3 tbn = mat3(t, b, ng);\n#else // HAS_TANGENTS\n mat3 tbn = pbr_vTBN;\n#endif\n\n return tbn;\n}\n\n// Find the normal for this fragment, pulling either from a predefined normal map\n// or from the interpolated mesh normal and tangent attributes.\nvec3 getMappedNormal(sampler2D normalSampler, mat3 tbn, float normalScale, vec2 uv)\n{\n vec3 n = texture(normalSampler, uv).rgb;\n return normalize(tbn * ((2.0 * n - 1.0) * vec3(normalScale, normalScale, 1.0)));\n}\n\nvec3 getNormal(mat3 tbn, vec2 uv)\n{\n#ifdef HAS_NORMALMAP\n vec3 n = getMappedNormal(pbr_normalSampler, tbn, pbrMaterial.normalScale, uv);\n#else\n // The tbn matrix is linearly interpolated, so we need to re-normalize\n vec3 n = normalize(tbn[2].xyz);\n#endif\n\n return n;\n}\n\nvec3 getClearcoatNormal(mat3 tbn, vec3 baseNormal, vec2 uv)\n{\n#ifdef HAS_CLEARCOATNORMALMAP\n return getMappedNormal(pbr_clearcoatNormalSampler, tbn, 1.0, uv);\n#else\n return baseNormal;\n#endif\n}\n\n// Calculation of the lighting contribution from an optional Image Based Light source.\n// Precomputed Environment Maps are required uniform inputs and are computed as outlined in [1].\n// See our README.md on Environment Maps [3] for additional discussion.\n#ifdef USE_IBL\nvec3 getIBLContribution(PBRInfo pbrInfo, vec3 n, vec3 reflection)\n{\n float mipCount = 9.0; // resolution of 512x512\n float lod = (pbrInfo.perceptualRoughness * mipCount);\n // retrieve a scale and bias to F0. See [1], Figure 3\n vec3 brdf = SRGBtoLINEAR(texture(pbr_brdfLUT,\n vec2(pbrInfo.NdotV, 1.0 - pbrInfo.perceptualRoughness))).rgb;\n vec3 diffuseLight = SRGBtoLINEAR(texture(pbr_diffuseEnvSampler, n)).rgb;\n\n#ifdef USE_TEX_LOD\n vec3 specularLight = SRGBtoLINEAR(texture(pbr_specularEnvSampler, reflection, lod)).rgb;\n#else\n vec3 specularLight = SRGBtoLINEAR(texture(pbr_specularEnvSampler, reflection)).rgb;\n#endif\n\n vec3 diffuse = diffuseLight * pbrInfo.diffuseColor;\n vec3 specular = specularLight * (pbrInfo.specularColor * brdf.x + brdf.y);\n\n // For presentation, this allows us to disable IBL terms\n diffuse *= pbrMaterial.scaleIBLAmbient.x;\n specular *= pbrMaterial.scaleIBLAmbient.y;\n\n return diffuse + specular;\n}\n#endif\n\n// Basic Lambertian diffuse\n// Implementation from Lambert's Photometria https://archive.org/details/lambertsphotome00lambgoog\n// See also [1], Equation 1\nvec3 diffuse(PBRInfo pbrInfo)\n{\n return pbrInfo.diffuseColor / M_PI;\n}\n\n// The following equation models the Fresnel reflectance term of the spec equation (aka F())\n// Implementation of fresnel from [4], Equation 15\nvec3 specularReflection(PBRInfo pbrInfo)\n{\n return pbrInfo.reflectance0 +\n (pbrInfo.reflectance90 - pbrInfo.reflectance0) *\n pow(clamp(1.0 - pbrInfo.VdotH, 0.0, 1.0), 5.0);\n}\n\n// This calculates the specular geometric attenuation (aka G()),\n// where rougher material will reflect less light back to the viewer.\n// This implementation is based on [1] Equation 4, and we adopt their modifications to\n// alphaRoughness as input as originally proposed in [2].\nfloat geometricOcclusion(PBRInfo pbrInfo)\n{\n float NdotL = pbrInfo.NdotL;\n float NdotV = pbrInfo.NdotV;\n float r = pbrInfo.alphaRoughness;\n\n float attenuationL = 2.0 * NdotL / (NdotL + sqrt(r * r + (1.0 - r * r) * (NdotL * NdotL)));\n float attenuationV = 2.0 * NdotV / (NdotV + sqrt(r * r + (1.0 - r * r) * (NdotV * NdotV)));\n return attenuationL * attenuationV;\n}\n\n// The following equation(s) model the distribution of microfacet normals across\n// the area being drawn (aka D())\n// Implementation from \"Average Irregularity Representation of a Roughened Surface\n// for Ray Reflection\" by T. S. Trowbridge, and K. P. Reitz\n// Follows the distribution function recommended in the SIGGRAPH 2013 course notes\n// from EPIC Games [1], Equation 3.\nfloat microfacetDistribution(PBRInfo pbrInfo)\n{\n float roughnessSq = pbrInfo.alphaRoughness * pbrInfo.alphaRoughness;\n float f = (pbrInfo.NdotH * roughnessSq - pbrInfo.NdotH) * pbrInfo.NdotH + 1.0;\n return roughnessSq / (M_PI * f * f);\n}\n\nfloat maxComponent(vec3 value)\n{\n return max(max(value.r, value.g), value.b);\n}\n\nfloat getDielectricF0(float ior)\n{\n float clampedIor = max(ior, 1.0);\n float ratio = (clampedIor - 1.0) / (clampedIor + 1.0);\n return ratio * ratio;\n}\n\nvec2 normalizeDirection(vec2 direction)\n{\n float directionLength = length(direction);\n return directionLength > 0.0001 ? direction / directionLength : vec2(1.0, 0.0);\n}\n\nvec2 rotateDirection(vec2 direction, float rotation)\n{\n float s = sin(rotation);\n float c = cos(rotation);\n return vec2(direction.x * c - direction.y * s, direction.x * s + direction.y * c);\n}\n\nvec3 getIridescenceTint(float iridescence, float thickness, float NdotV)\n{\n if (iridescence <= 0.0) {\n return vec3(1.0);\n }\n\n float phase = 0.015 * thickness * pbrMaterial.iridescenceIor + (1.0 - NdotV) * 6.0;\n vec3 thinFilmTint =\n 0.5 + 0.5 * cos(vec3(phase, phase + 2.0943951, phase + 4.1887902));\n return mix(vec3(1.0), thinFilmTint, iridescence);\n}\n\nvec3 getVolumeAttenuation(float thickness)\n{\n if (thickness <= 0.0) {\n return vec3(1.0);\n }\n\n vec3 attenuationCoefficient =\n -log(max(pbrMaterial.attenuationColor, vec3(0.0001))) /\n max(pbrMaterial.attenuationDistance, 0.0001);\n return exp(-attenuationCoefficient * thickness);\n}\n\nPBRInfo createClearcoatPBRInfo(PBRInfo basePBRInfo, vec3 clearcoatNormal, float clearcoatRoughness)\n{\n float perceptualRoughness = clamp(clearcoatRoughness, c_MinRoughness, 1.0);\n float alphaRoughness = perceptualRoughness * perceptualRoughness;\n float NdotV = clamp(abs(dot(clearcoatNormal, basePBRInfo.v)), 0.001, 1.0);\n\n return PBRInfo(\n basePBRInfo.NdotL,\n NdotV,\n basePBRInfo.NdotH,\n basePBRInfo.LdotH,\n basePBRInfo.VdotH,\n perceptualRoughness,\n 0.0,\n vec3(0.04),\n vec3(1.0),\n alphaRoughness,\n vec3(0.0),\n vec3(0.04),\n clearcoatNormal,\n basePBRInfo.v\n );\n}\n\nvec3 calculateClearcoatContribution(\n PBRInfo pbrInfo,\n vec3 lightColor,\n vec3 clearcoatNormal,\n float clearcoatFactor,\n float clearcoatRoughness\n) {\n if (clearcoatFactor <= 0.0) {\n return vec3(0.0);\n }\n\n PBRInfo clearcoatPBRInfo = createClearcoatPBRInfo(pbrInfo, clearcoatNormal, clearcoatRoughness);\n return calculateFinalColor(clearcoatPBRInfo, lightColor) * clearcoatFactor;\n}\n\n#ifdef USE_IBL\nvec3 calculateClearcoatIBLContribution(\n PBRInfo pbrInfo,\n vec3 clearcoatNormal,\n vec3 reflection,\n float clearcoatFactor,\n float clearcoatRoughness\n) {\n if (clearcoatFactor <= 0.0) {\n return vec3(0.0);\n }\n\n PBRInfo clearcoatPBRInfo = createClearcoatPBRInfo(pbrInfo, clearcoatNormal, clearcoatRoughness);\n return getIBLContribution(clearcoatPBRInfo, clearcoatNormal, reflection) * clearcoatFactor;\n}\n#endif\n\nvec3 calculateSheenContribution(\n PBRInfo pbrInfo,\n vec3 lightColor,\n vec3 sheenColor,\n float sheenRoughness\n) {\n if (maxComponent(sheenColor) <= 0.0) {\n return vec3(0.0);\n }\n\n float sheenFresnel = pow(clamp(1.0 - pbrInfo.VdotH, 0.0, 1.0), 5.0);\n float sheenVisibility = mix(1.0, pbrInfo.NdotL * pbrInfo.NdotV, sheenRoughness);\n return pbrInfo.NdotL *\n lightColor *\n sheenColor *\n (0.25 + 0.75 * sheenFresnel) *\n sheenVisibility *\n (1.0 - pbrInfo.metalness);\n}\n\nfloat calculateAnisotropyBoost(\n PBRInfo pbrInfo,\n vec3 anisotropyTangent,\n float anisotropyStrength\n) {\n if (anisotropyStrength <= 0.0) {\n return 1.0;\n }\n\n vec3 anisotropyBitangent = normalize(cross(pbrInfo.n, anisotropyTangent));\n float bitangentViewAlignment = abs(dot(pbrInfo.v, anisotropyBitangent));\n return mix(1.0, 0.65 + 0.7 * bitangentViewAlignment, anisotropyStrength);\n}\n\nvec3 calculateMaterialLightColor(\n PBRInfo pbrInfo,\n vec3 lightColor,\n vec3 clearcoatNormal,\n float clearcoatFactor,\n float clearcoatRoughness,\n vec3 sheenColor,\n float sheenRoughness,\n vec3 anisotropyTangent,\n float anisotropyStrength\n) {\n float anisotropyBoost = calculateAnisotropyBoost(pbrInfo, anisotropyTangent, anisotropyStrength);\n vec3 color = calculateFinalColor(pbrInfo, lightColor) * anisotropyBoost;\n color += calculateClearcoatContribution(\n pbrInfo,\n lightColor,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness\n );\n color += calculateSheenContribution(pbrInfo, lightColor, sheenColor, sheenRoughness);\n return color;\n}\n\nvoid PBRInfo_setAmbientLight(inout PBRInfo pbrInfo) {\n pbrInfo.NdotL = 1.0;\n pbrInfo.NdotH = 0.0;\n pbrInfo.LdotH = 0.0;\n pbrInfo.VdotH = 1.0;\n}\n\nvoid PBRInfo_setDirectionalLight(inout PBRInfo pbrInfo, vec3 lightDirection) {\n vec3 n = pbrInfo.n;\n vec3 v = pbrInfo.v;\n vec3 l = normalize(lightDirection); // Vector from surface point to light\n vec3 h = normalize(l+v); // Half vector between both l and v\n\n pbrInfo.NdotL = clamp(dot(n, l), 0.001, 1.0);\n pbrInfo.NdotH = clamp(dot(n, h), 0.0, 1.0);\n pbrInfo.LdotH = clamp(dot(l, h), 0.0, 1.0);\n pbrInfo.VdotH = clamp(dot(v, h), 0.0, 1.0);\n}\n\nvoid PBRInfo_setPointLight(inout PBRInfo pbrInfo, PointLight pointLight) {\n vec3 light_direction = normalize(pointLight.position - pbr_vPosition);\n PBRInfo_setDirectionalLight(pbrInfo, light_direction);\n}\n\nvoid PBRInfo_setSpotLight(inout PBRInfo pbrInfo, SpotLight spotLight) {\n vec3 light_direction = normalize(spotLight.position - pbr_vPosition);\n PBRInfo_setDirectionalLight(pbrInfo, light_direction);\n}\n\nvec3 calculateFinalColor(PBRInfo pbrInfo, vec3 lightColor) {\n // Calculate the shading terms for the microfacet specular shading model\n vec3 F = specularReflection(pbrInfo);\n float G = geometricOcclusion(pbrInfo);\n float D = microfacetDistribution(pbrInfo);\n\n // Calculation of analytical lighting contribution\n vec3 diffuseContrib = (1.0 - F) * diffuse(pbrInfo);\n vec3 specContrib = F * G * D / (4.0 * pbrInfo.NdotL * pbrInfo.NdotV);\n // Obtain final intensity as reflectance (BRDF) scaled by the energy of the light (cosine law)\n return pbrInfo.NdotL * lightColor * (diffuseContrib + specContrib);\n}\n\nvec4 pbr_filterColor(vec4 colorUnused)\n{\n vec2 baseColorUV = getMaterialUV(pbrMaterial.baseColorUVSet, pbrMaterial.baseColorUVTransform);\n vec2 metallicRoughnessUV = getMaterialUV(\n pbrMaterial.metallicRoughnessUVSet,\n pbrMaterial.metallicRoughnessUVTransform\n );\n vec2 normalUV = getMaterialUV(pbrMaterial.normalUVSet, pbrMaterial.normalUVTransform);\n vec2 occlusionUV = getMaterialUV(pbrMaterial.occlusionUVSet, pbrMaterial.occlusionUVTransform);\n vec2 emissiveUV = getMaterialUV(pbrMaterial.emissiveUVSet, pbrMaterial.emissiveUVTransform);\n vec2 specularColorUV = getMaterialUV(\n pbrMaterial.specularColorUVSet,\n pbrMaterial.specularColorUVTransform\n );\n vec2 specularIntensityUV = getMaterialUV(\n pbrMaterial.specularIntensityUVSet,\n pbrMaterial.specularIntensityUVTransform\n );\n vec2 transmissionUV = getMaterialUV(\n pbrMaterial.transmissionUVSet,\n pbrMaterial.transmissionUVTransform\n );\n vec2 thicknessUV = getMaterialUV(pbrMaterial.thicknessUVSet, pbrMaterial.thicknessUVTransform);\n vec2 clearcoatUV = getMaterialUV(pbrMaterial.clearcoatUVSet, pbrMaterial.clearcoatUVTransform);\n vec2 clearcoatRoughnessUV = getMaterialUV(\n pbrMaterial.clearcoatRoughnessUVSet,\n pbrMaterial.clearcoatRoughnessUVTransform\n );\n vec2 clearcoatNormalUV = getMaterialUV(\n pbrMaterial.clearcoatNormalUVSet,\n pbrMaterial.clearcoatNormalUVTransform\n );\n vec2 sheenColorUV = getMaterialUV(\n pbrMaterial.sheenColorUVSet,\n pbrMaterial.sheenColorUVTransform\n );\n vec2 sheenRoughnessUV = getMaterialUV(\n pbrMaterial.sheenRoughnessUVSet,\n pbrMaterial.sheenRoughnessUVTransform\n );\n vec2 iridescenceUV = getMaterialUV(\n pbrMaterial.iridescenceUVSet,\n pbrMaterial.iridescenceUVTransform\n );\n vec2 iridescenceThicknessUV = getMaterialUV(\n pbrMaterial.iridescenceThicknessUVSet,\n pbrMaterial.iridescenceThicknessUVTransform\n );\n vec2 anisotropyUV = getMaterialUV(\n pbrMaterial.anisotropyUVSet,\n pbrMaterial.anisotropyUVTransform\n );\n\n // The albedo may be defined from a base texture or a flat color\n#ifdef HAS_BASECOLORMAP\n vec4 baseColor =\n SRGBtoLINEAR(texture(pbr_baseColorSampler, baseColorUV)) * pbrMaterial.baseColorFactor;\n#else\n vec4 baseColor = pbrMaterial.baseColorFactor;\n#endif\n\n#ifdef ALPHA_CUTOFF\n if (baseColor.a < pbrMaterial.alphaCutoff) {\n discard;\n }\n#endif\n\n vec3 color = vec3(0, 0, 0);\n\n float transmission = 0.0;\n\n if(pbrMaterial.unlit){\n color.rgb = baseColor.rgb;\n }\n else{\n // Metallic and Roughness material properties are packed together\n // In glTF, these factors can be specified by fixed scalar values\n // or from a metallic-roughness map\n float perceptualRoughness = pbrMaterial.metallicRoughnessValues.y;\n float metallic = pbrMaterial.metallicRoughnessValues.x;\n#ifdef HAS_METALROUGHNESSMAP\n // Roughness is stored in the 'g' channel, metallic is stored in the 'b' channel.\n // This layout intentionally reserves the 'r' channel for (optional) occlusion map data\n vec4 mrSample = texture(pbr_metallicRoughnessSampler, metallicRoughnessUV);\n perceptualRoughness = mrSample.g * perceptualRoughness;\n metallic = mrSample.b * metallic;\n#endif\n perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0);\n metallic = clamp(metallic, 0.0, 1.0);\n mat3 tbn = getTBN(normalUV);\n vec3 n = getNormal(tbn, normalUV); // normal at surface point\n vec3 v = normalize(pbrProjection.camera - pbr_vPosition); // Vector from surface point to camera\n float NdotV = clamp(abs(dot(n, v)), 0.001, 1.0);\n#ifdef USE_MATERIAL_EXTENSIONS\n bool useExtendedPBR =\n pbrMaterial.specularColorMapEnabled ||\n pbrMaterial.specularIntensityMapEnabled ||\n abs(pbrMaterial.specularIntensityFactor - 1.0) > 0.0001 ||\n maxComponent(abs(pbrMaterial.specularColorFactor - vec3(1.0))) > 0.0001 ||\n abs(pbrMaterial.ior - 1.5) > 0.0001 ||\n pbrMaterial.transmissionMapEnabled ||\n pbrMaterial.transmissionFactor > 0.0001 ||\n pbrMaterial.clearcoatMapEnabled ||\n pbrMaterial.clearcoatRoughnessMapEnabled ||\n pbrMaterial.clearcoatFactor > 0.0001 ||\n pbrMaterial.clearcoatRoughnessFactor > 0.0001 ||\n pbrMaterial.sheenColorMapEnabled ||\n pbrMaterial.sheenRoughnessMapEnabled ||\n maxComponent(pbrMaterial.sheenColorFactor) > 0.0001 ||\n pbrMaterial.sheenRoughnessFactor > 0.0001 ||\n pbrMaterial.iridescenceMapEnabled ||\n pbrMaterial.iridescenceFactor > 0.0001 ||\n abs(pbrMaterial.iridescenceIor - 1.3) > 0.0001 ||\n abs(pbrMaterial.iridescenceThicknessRange.x - 100.0) > 0.0001 ||\n abs(pbrMaterial.iridescenceThicknessRange.y - 400.0) > 0.0001 ||\n pbrMaterial.anisotropyMapEnabled ||\n pbrMaterial.anisotropyStrength > 0.0001 ||\n abs(pbrMaterial.anisotropyRotation) > 0.0001 ||\n length(pbrMaterial.anisotropyDirection - vec2(1.0, 0.0)) > 0.0001;\n#else\n bool useExtendedPBR = false;\n#endif\n\n if (!useExtendedPBR) {\n // Keep the baseline metallic-roughness implementation byte-for-byte equivalent in behavior.\n float alphaRoughness = perceptualRoughness * perceptualRoughness;\n\n vec3 f0 = vec3(0.04);\n vec3 diffuseColor = baseColor.rgb * (vec3(1.0) - f0);\n diffuseColor *= 1.0 - metallic;\n vec3 specularColor = mix(f0, baseColor.rgb, metallic);\n\n float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n float reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);\n vec3 specularEnvironmentR0 = specularColor.rgb;\n vec3 specularEnvironmentR90 = vec3(1.0, 1.0, 1.0) * reflectance90;\n vec3 reflection = -normalize(reflect(v, n));\n\n PBRInfo pbrInfo = PBRInfo(\n 0.0, // NdotL\n NdotV,\n 0.0, // NdotH\n 0.0, // LdotH\n 0.0, // VdotH\n perceptualRoughness,\n metallic,\n specularEnvironmentR0,\n specularEnvironmentR90,\n alphaRoughness,\n diffuseColor,\n specularColor,\n n,\n v\n );\n\n#ifdef USE_LIGHTS\n PBRInfo_setAmbientLight(pbrInfo);\n color += calculateFinalColor(pbrInfo, lighting.ambientColor);\n\n for(int i = 0; i < lighting.directionalLightCount; i++) {\n if (i < lighting.directionalLightCount) {\n PBRInfo_setDirectionalLight(pbrInfo, lighting_getDirectionalLight(i).direction);\n color += calculateFinalColor(pbrInfo, lighting_getDirectionalLight(i).color);\n }\n }\n\n for(int i = 0; i < lighting.pointLightCount; i++) {\n if (i < lighting.pointLightCount) {\n PBRInfo_setPointLight(pbrInfo, lighting_getPointLight(i));\n float attenuation = getPointLightAttenuation(lighting_getPointLight(i), distance(lighting_getPointLight(i).position, pbr_vPosition));\n color += calculateFinalColor(pbrInfo, lighting_getPointLight(i).color / attenuation);\n }\n }\n\n for(int i = 0; i < lighting.spotLightCount; i++) {\n if (i < lighting.spotLightCount) {\n PBRInfo_setSpotLight(pbrInfo, lighting_getSpotLight(i));\n float attenuation = getSpotLightAttenuation(lighting_getSpotLight(i), pbr_vPosition);\n color += calculateFinalColor(pbrInfo, lighting_getSpotLight(i).color / attenuation);\n }\n }\n#endif\n\n#ifdef USE_IBL\n if (pbrMaterial.IBLenabled) {\n color += getIBLContribution(pbrInfo, n, reflection);\n }\n#endif\n\n#ifdef HAS_OCCLUSIONMAP\n if (pbrMaterial.occlusionMapEnabled) {\n float ao = texture(pbr_occlusionSampler, occlusionUV).r;\n color = mix(color, color * ao, pbrMaterial.occlusionStrength);\n }\n#endif\n\n vec3 emissive = pbrMaterial.emissiveFactor;\n#ifdef HAS_EMISSIVEMAP\n if (pbrMaterial.emissiveMapEnabled) {\n emissive *= SRGBtoLINEAR(texture(pbr_emissiveSampler, emissiveUV)).rgb;\n }\n#endif\n color += emissive * pbrMaterial.emissiveStrength;\n\n#ifdef PBR_DEBUG\n color = mix(color, baseColor.rgb, pbrMaterial.scaleDiffBaseMR.y);\n color = mix(color, vec3(metallic), pbrMaterial.scaleDiffBaseMR.z);\n color = mix(color, vec3(perceptualRoughness), pbrMaterial.scaleDiffBaseMR.w);\n#endif\n\n return vec4(pow(color, vec3(1.0 / 2.2)), baseColor.a);\n }\n\n float specularIntensity = pbrMaterial.specularIntensityFactor;\n#ifdef HAS_SPECULARINTENSITYMAP\n if (pbrMaterial.specularIntensityMapEnabled) {\n specularIntensity *= texture(pbr_specularIntensitySampler, specularIntensityUV).a;\n }\n#endif\n\n vec3 specularFactor = pbrMaterial.specularColorFactor;\n#ifdef HAS_SPECULARCOLORMAP\n if (pbrMaterial.specularColorMapEnabled) {\n specularFactor *= SRGBtoLINEAR(texture(pbr_specularColorSampler, specularColorUV)).rgb;\n }\n#endif\n\n transmission = pbrMaterial.transmissionFactor;\n#ifdef HAS_TRANSMISSIONMAP\n if (pbrMaterial.transmissionMapEnabled) {\n transmission *= texture(pbr_transmissionSampler, transmissionUV).r;\n }\n#endif\n transmission = clamp(transmission * (1.0 - metallic), 0.0, 1.0);\n float thickness = max(pbrMaterial.thicknessFactor, 0.0);\n#ifdef HAS_THICKNESSMAP\n thickness *= texture(pbr_thicknessSampler, thicknessUV).g;\n#endif\n\n float clearcoatFactor = pbrMaterial.clearcoatFactor;\n float clearcoatRoughness = pbrMaterial.clearcoatRoughnessFactor;\n#ifdef HAS_CLEARCOATMAP\n if (pbrMaterial.clearcoatMapEnabled) {\n clearcoatFactor *= texture(pbr_clearcoatSampler, clearcoatUV).r;\n }\n#endif\n#ifdef HAS_CLEARCOATROUGHNESSMAP\n if (pbrMaterial.clearcoatRoughnessMapEnabled) {\n clearcoatRoughness *= texture(pbr_clearcoatRoughnessSampler, clearcoatRoughnessUV).g;\n }\n#endif\n clearcoatFactor = clamp(clearcoatFactor, 0.0, 1.0);\n clearcoatRoughness = clamp(clearcoatRoughness, c_MinRoughness, 1.0);\n vec3 clearcoatNormal = getClearcoatNormal(getTBN(clearcoatNormalUV), n, clearcoatNormalUV);\n\n vec3 sheenColor = pbrMaterial.sheenColorFactor;\n float sheenRoughness = pbrMaterial.sheenRoughnessFactor;\n#ifdef HAS_SHEENCOLORMAP\n if (pbrMaterial.sheenColorMapEnabled) {\n sheenColor *= SRGBtoLINEAR(texture(pbr_sheenColorSampler, sheenColorUV)).rgb;\n }\n#endif\n#ifdef HAS_SHEENROUGHNESSMAP\n if (pbrMaterial.sheenRoughnessMapEnabled) {\n sheenRoughness *= texture(pbr_sheenRoughnessSampler, sheenRoughnessUV).a;\n }\n#endif\n sheenRoughness = clamp(sheenRoughness, c_MinRoughness, 1.0);\n\n float iridescence = pbrMaterial.iridescenceFactor;\n#ifdef HAS_IRIDESCENCEMAP\n if (pbrMaterial.iridescenceMapEnabled) {\n iridescence *= texture(pbr_iridescenceSampler, iridescenceUV).r;\n }\n#endif\n iridescence = clamp(iridescence, 0.0, 1.0);\n float iridescenceThickness = mix(\n pbrMaterial.iridescenceThicknessRange.x,\n pbrMaterial.iridescenceThicknessRange.y,\n 0.5\n );\n#ifdef HAS_IRIDESCENCETHICKNESSMAP\n iridescenceThickness = mix(\n pbrMaterial.iridescenceThicknessRange.x,\n pbrMaterial.iridescenceThicknessRange.y,\n texture(pbr_iridescenceThicknessSampler, iridescenceThicknessUV).g\n );\n#endif\n\n float anisotropyStrength = clamp(pbrMaterial.anisotropyStrength, 0.0, 1.0);\n vec2 anisotropyDirection = normalizeDirection(pbrMaterial.anisotropyDirection);\n#ifdef HAS_ANISOTROPYMAP\n if (pbrMaterial.anisotropyMapEnabled) {\n vec3 anisotropySample = texture(pbr_anisotropySampler, anisotropyUV).rgb;\n anisotropyStrength *= anisotropySample.b;\n vec2 mappedDirection = anisotropySample.rg * 2.0 - 1.0;\n if (length(mappedDirection) > 0.0001) {\n anisotropyDirection = normalize(mappedDirection);\n }\n }\n#endif\n anisotropyDirection = rotateDirection(anisotropyDirection, pbrMaterial.anisotropyRotation);\n vec3 anisotropyTangent = normalize(tbn[0] * anisotropyDirection.x + tbn[1] * anisotropyDirection.y);\n if (length(anisotropyTangent) < 0.0001) {\n anisotropyTangent = normalize(tbn[0]);\n }\n float anisotropyViewAlignment = abs(dot(v, anisotropyTangent));\n perceptualRoughness = mix(\n perceptualRoughness,\n clamp(perceptualRoughness * (1.0 - 0.6 * anisotropyViewAlignment), c_MinRoughness, 1.0),\n anisotropyStrength\n );\n\n // Roughness is authored as perceptual roughness; as is convention,\n // convert to material roughness by squaring the perceptual roughness [2].\n float alphaRoughness = perceptualRoughness * perceptualRoughness;\n\n float dielectricF0 = getDielectricF0(pbrMaterial.ior);\n vec3 dielectricSpecularF0 = min(\n vec3(dielectricF0) * specularFactor * specularIntensity,\n vec3(1.0)\n );\n vec3 iridescenceTint = getIridescenceTint(iridescence, iridescenceThickness, NdotV);\n dielectricSpecularF0 = mix(\n dielectricSpecularF0,\n dielectricSpecularF0 * iridescenceTint,\n iridescence\n );\n vec3 diffuseColor = baseColor.rgb * (vec3(1.0) - dielectricSpecularF0);\n diffuseColor *= (1.0 - metallic) * (1.0 - transmission);\n vec3 specularColor = mix(dielectricSpecularF0, baseColor.rgb, metallic);\n\n float baseLayerEnergy = 1.0 - clearcoatFactor * 0.25;\n diffuseColor *= baseLayerEnergy;\n specularColor *= baseLayerEnergy;\n\n // Compute reflectance.\n float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n\n // For typical incident reflectance range (between 4% to 100%) set the grazing\n // reflectance to 100% for typical fresnel effect.\n // For very low reflectance range on highly diffuse objects (below 4%),\n // incrementally reduce grazing reflecance to 0%.\n float reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);\n vec3 specularEnvironmentR0 = specularColor.rgb;\n vec3 specularEnvironmentR90 = vec3(1.0, 1.0, 1.0) * reflectance90;\n vec3 reflection = -normalize(reflect(v, n));\n\n PBRInfo pbrInfo = PBRInfo(\n 0.0, // NdotL\n NdotV,\n 0.0, // NdotH\n 0.0, // LdotH\n 0.0, // VdotH\n perceptualRoughness,\n metallic,\n specularEnvironmentR0,\n specularEnvironmentR90,\n alphaRoughness,\n diffuseColor,\n specularColor,\n n,\n v\n );\n\n\n#ifdef USE_LIGHTS\n // Apply ambient light\n PBRInfo_setAmbientLight(pbrInfo);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting.ambientColor,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n\n // Apply directional light\n for(int i = 0; i < lighting.directionalLightCount; i++) {\n if (i < lighting.directionalLightCount) {\n PBRInfo_setDirectionalLight(pbrInfo, lighting_getDirectionalLight(i).direction);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getDirectionalLight(i).color,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n\n // Apply point light\n for(int i = 0; i < lighting.pointLightCount; i++) {\n if (i < lighting.pointLightCount) {\n PBRInfo_setPointLight(pbrInfo, lighting_getPointLight(i));\n float attenuation = getPointLightAttenuation(lighting_getPointLight(i), distance(lighting_getPointLight(i).position, pbr_vPosition));\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getPointLight(i).color / attenuation,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n\n for(int i = 0; i < lighting.spotLightCount; i++) {\n if (i < lighting.spotLightCount) {\n PBRInfo_setSpotLight(pbrInfo, lighting_getSpotLight(i));\n float attenuation = getSpotLightAttenuation(lighting_getSpotLight(i), pbr_vPosition);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getSpotLight(i).color / attenuation,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n#endif\n\n // Calculate lighting contribution from image based lighting source (IBL)\n#ifdef USE_IBL\n if (pbrMaterial.IBLenabled) {\n color += getIBLContribution(pbrInfo, n, reflection) *\n calculateAnisotropyBoost(pbrInfo, anisotropyTangent, anisotropyStrength);\n color += calculateClearcoatIBLContribution(\n pbrInfo,\n clearcoatNormal,\n -normalize(reflect(v, clearcoatNormal)),\n clearcoatFactor,\n clearcoatRoughness\n );\n color += sheenColor * pbrMaterial.scaleIBLAmbient.x * (1.0 - sheenRoughness) * 0.25;\n }\n#endif\n\n // Apply optional PBR terms for additional (optional) shading\n#ifdef HAS_OCCLUSIONMAP\n if (pbrMaterial.occlusionMapEnabled) {\n float ao = texture(pbr_occlusionSampler, occlusionUV).r;\n color = mix(color, color * ao, pbrMaterial.occlusionStrength);\n }\n#endif\n\n vec3 emissive = pbrMaterial.emissiveFactor;\n#ifdef HAS_EMISSIVEMAP\n if (pbrMaterial.emissiveMapEnabled) {\n emissive *= SRGBtoLINEAR(texture(pbr_emissiveSampler, emissiveUV)).rgb;\n }\n#endif\n color += emissive * pbrMaterial.emissiveStrength;\n\n if (transmission > 0.0) {\n color = mix(color, color * getVolumeAttenuation(thickness), transmission);\n }\n\n // This section uses mix to override final color for reference app visualization\n // of various parameters in the lighting equation.\n#ifdef PBR_DEBUG\n // TODO: Figure out how to debug multiple lights\n\n // color = mix(color, F, pbr_scaleFGDSpec.x);\n // color = mix(color, vec3(G), pbr_scaleFGDSpec.y);\n // color = mix(color, vec3(D), pbr_scaleFGDSpec.z);\n // color = mix(color, specContrib, pbr_scaleFGDSpec.w);\n\n // color = mix(color, diffuseContrib, pbr_scaleDiffBaseMR.x);\n color = mix(color, baseColor.rgb, pbrMaterial.scaleDiffBaseMR.y);\n color = mix(color, vec3(metallic), pbrMaterial.scaleDiffBaseMR.z);\n color = mix(color, vec3(perceptualRoughness), pbrMaterial.scaleDiffBaseMR.w);\n#endif\n\n }\n\n float alpha = clamp(baseColor.a * (1.0 - transmission), 0.0, 1.0);\n return vec4(pow(color,vec3(1.0/2.2)), alpha);\n}\n",defines:{LIGHTING_FRAGMENT:!0,HAS_NORMALMAP:!1,HAS_EMISSIVEMAP:!1,HAS_OCCLUSIONMAP:!1,HAS_BASECOLORMAP:!1,HAS_METALROUGHNESSMAP:!1,HAS_SPECULARCOLORMAP:!1,HAS_SPECULARINTENSITYMAP:!1,HAS_TRANSMISSIONMAP:!1,HAS_THICKNESSMAP:!1,HAS_CLEARCOATMAP:!1,HAS_CLEARCOATROUGHNESSMAP:!1,HAS_CLEARCOATNORMALMAP:!1,HAS_SHEENCOLORMAP:!1,HAS_SHEENROUGHNESSMAP:!1,HAS_IRIDESCENCEMAP:!1,HAS_IRIDESCENCETHICKNESSMAP:!1,HAS_ANISOTROPYMAP:!1,USE_MATERIAL_EXTENSIONS:!1,ALPHA_CUTOFF:!1,USE_IBL:!1,PBR_DEBUG:!1},getUniforms:e=>e,uniformTypes:{unlit:"i32",baseColorMapEnabled:"i32",baseColorFactor:"vec4<f32>",normalMapEnabled:"i32",normalScale:"f32",emissiveMapEnabled:"i32",emissiveFactor:"vec3<f32>",metallicRoughnessValues:"vec2<f32>",metallicRoughnessMapEnabled:"i32",occlusionMapEnabled:"i32",occlusionStrength:"f32",alphaCutoffEnabled:"i32",alphaCutoff:"f32",specularColorFactor:"vec3<f32>",specularIntensityFactor:"f32",specularColorMapEnabled:"i32",specularIntensityMapEnabled:"i32",ior:"f32",transmissionFactor:"f32",transmissionMapEnabled:"i32",thicknessFactor:"f32",attenuationDistance:"f32",attenuationColor:"vec3<f32>",clearcoatFactor:"f32",clearcoatRoughnessFactor:"f32",clearcoatMapEnabled:"i32",clearcoatRoughnessMapEnabled:"i32",sheenColorFactor:"vec3<f32>",sheenRoughnessFactor:"f32",sheenColorMapEnabled:"i32",sheenRoughnessMapEnabled:"i32",iridescenceFactor:"f32",iridescenceIor:"f32",iridescenceThicknessRange:"vec2<f32>",iridescenceMapEnabled:"i32",anisotropyStrength:"f32",anisotropyRotation:"f32",anisotropyDirection:"vec2<f32>",anisotropyMapEnabled:"i32",emissiveStrength:"f32",IBLenabled:"i32",scaleIBLAmbient:"vec2<f32>",scaleDiffBaseMR:"vec4<f32>",scaleFGDSpec:"vec4<f32>",baseColorUVSet:"i32",baseColorUVTransform:"mat3x3<f32>",metallicRoughnessUVSet:"i32",metallicRoughnessUVTransform:"mat3x3<f32>",normalUVSet:"i32",normalUVTransform:"mat3x3<f32>",occlusionUVSet:"i32",occlusionUVTransform:"mat3x3<f32>",emissiveUVSet:"i32",emissiveUVTransform:"mat3x3<f32>",specularColorUVSet:"i32",specularColorUVTransform:"mat3x3<f32>",specularIntensityUVSet:"i32",specularIntensityUVTransform:"mat3x3<f32>",transmissionUVSet:"i32",transmissionUVTransform:"mat3x3<f32>",thicknessUVSet:"i32",thicknessUVTransform:"mat3x3<f32>",clearcoatUVSet:"i32",clearcoatUVTransform:"mat3x3<f32>",clearcoatRoughnessUVSet:"i32",clearcoatRoughnessUVTransform:"mat3x3<f32>",clearcoatNormalUVSet:"i32",clearcoatNormalUVTransform:"mat3x3<f32>",sheenColorUVSet:"i32",sheenColorUVTransform:"mat3x3<f32>",sheenRoughnessUVSet:"i32",sheenRoughnessUVTransform:"mat3x3<f32>",iridescenceUVSet:"i32",iridescenceUVTransform:"mat3x3<f32>",iridescenceThicknessUVSet:"i32",iridescenceThicknessUVTransform:"mat3x3<f32>",anisotropyUVSet:"i32",anisotropyUVTransform:"mat3x3<f32>"}},Z=3;class ${device;modules;_materialBindingNames;_materialModuleNames;constructor(t,n={}){this.device=t,this.modules=n.modules||[];const A=new e.ShaderInputs(Object.fromEntries(this.modules.map(e=>[e.name,e])));this._materialBindingNames=function(e){const t=new Set;for(const n of Object.values(e.modules))for(const e of n.bindingLayout||[])3===e.group&&t.add(e.name);return t}(A),this._materialModuleNames=function(e){const t=new Set;for(const n of Object.values(e.modules))n.name&&n.bindingLayout?.some(e=>3===e.group&&e.name===n.name)&&t.add(n.name);return t}(A)}createMaterial(e={}){return new te(this.device,{...e,factory:this})}getBindingNames(){return Array.from(this._materialBindingNames)}ownsBinding(e){if(this._materialBindingNames.has(e))return!0;const t=ee(e);return!!t&&this._materialModuleNames.has(t)}ownsModule(e){return this._materialModuleNames.has(e)}getBindingsByGroup(e){return Object.keys(e).length>0?{[Z]:e}:{}}}function ee(e){return e.endsWith("Uniforms")?e.slice(0,-8):null}class te{id;device;factory;shaderInputs;bindings={};_uniformStore;_bindGroupCacheToken={};constructor(t,n={}){this.id=n.id||e.uid("material"),this.device=t,this.factory=n.factory||new $(t,{modules:n.modules||n.shaderInputs?.getModules()||[]});const A=Object.fromEntries((n.shaderInputs?.getModules()||this.factory.modules).map(e=>[e.name,e]));this.shaderInputs=n.shaderInputs||new e.ShaderInputs(A),this._uniformStore=new e.UniformStore(this.device,this.shaderInputs.modules);for(const[r,i]of Object.entries(this.shaderInputs.modules))if(this.ownsModule(r)&&e.shaderModuleHasUniforms(i)){const e=this._uniformStore.getManagedUniformBuffer(r);this.bindings[`${r}Uniforms`]=e}this.updateShaderInputs(),n.bindings&&this._replaceOwnedBindings(n.bindings)}destroy(){this._uniformStore.destroy()}clone(e={}){const t=this.factory.createMaterial({id:e.id,shaderInputs:e.shaderInputs,bindings:{...this.getResourceBindings(),...e.bindings}});return e.shaderInputs||t.setProps(this.shaderInputs.getUniformValues()),e.moduleProps&&t.setProps(e.moduleProps),t}ownsBinding(e){return this.factory.ownsBinding(e)}ownsModule(e){return this.factory.ownsModule(e)}setProps(e){this.shaderInputs.setProps(e),this.updateShaderInputs()}updateShaderInputs(){this._uniformStore.setUniforms(this.shaderInputs.getUniformValues());this._setOwnedBindings(this.shaderInputs.getBindingValues())&&(this._bindGroupCacheToken={})}getResourceBindings(){const e={};for(const[t,n]of Object.entries(this.bindings))ee(t)||(e[t]=n);return e}getBindings(){const t={},n=t;for(const[A,r]of Object.entries(this.bindings))r instanceof e.DynamicTexture?r.isReady&&(n[A]=r.texture):n[A]=r;return t}getBindingsByGroup(){return this.factory.getBindingsByGroup(this.getBindings())}getBindGroupCacheKey(e){return 3===e?this._bindGroupCacheToken:null}getBindingsUpdateTimestamp(){let n=0;for(const A of Object.values(this.bindings))A instanceof r.TextureView?n=Math.max(n,A.texture.updateTimestamp):A instanceof t.Buffer||A instanceof t.Texture?n=Math.max(n,A.updateTimestamp):A instanceof e.DynamicTexture?n=A.texture?Math.max(n,A.texture.updateTimestamp):1/0:A instanceof t.Sampler||(n=Math.max(n,A.buffer.updateTimestamp));return n}_replaceOwnedBindings(e){this._setOwnedBindings(e)&&(this._bindGroupCacheToken={})}_setOwnedBindings(e){let t=!1;for(const[n,A]of Object.entries(e))void 0!==A&&this.ownsBinding(n)&&this.bindings[n]!==A&&(this.bindings[n]=A,t=!0);return t}}function ne(e,t){if(!e)throw new Error(t)}class Ae{id;matrix=new t.Matrix4;display=!0;position=new t.Vector3;rotation=new t.Vector3;scale=new t.Vector3(1,1,1);userData={};props={};constructor(t={}){const{id:n}=t;this.id=n||e.uid(this.constructor.name),this._setScenegraphNodeProps(t)}getBounds(){return null}destroy(){}delete(){this.destroy()}setProps(e){return this._setScenegraphNodeProps(e),this}toString(){return`{type: ScenegraphNode, id: ${this.id})}`}setPosition(e){return ne(3===e.length,"setPosition requires vector argument"),this.position=e,this}setRotation(e){return ne(3===e.length||4===e.length,"setRotation requires vector argument"),this.rotation=e,this}setScale(e){return ne(3===e.length,"setScale requires vector argument"),this.scale=e,this}setMatrix(e,t=!0){t?this.matrix.copy(e):this.matrix=e}setMatrixComponents(e){const{position:t,rotation:n,scale:A,update:r=!0}=e;return t&&this.setPosition(t),n&&this.setRotation(n),A&&this.setScale(A),r&&this.updateMatrix(),this}updateMatrix(){if(this.matrix.identity(),this.matrix.translate(this.position),4===this.rotation.length){const e=(new t.Matrix4).fromQuaternion(this.rotation);this.matrix.multiplyRight(e)}else this.matrix.rotateXYZ(this.rotation);return this.matrix.scale(this.scale),this}update({position:e,rotation:t,scale:n}={}){return e&&this.setPosition(e),t&&this.setRotation(t),n&&this.setScale(n),this.updateMatrix(),this}getCoordinateUniforms(e,n){n=n||this.matrix;const A=new t.Matrix4(e).multiplyRight(n),r=A.invert(),i=r.transpose();return{viewMatrix:e,modelMatrix:n,objectMatrix:n,worldMatrix:A,worldInverseMatrix:r,worldInverseTransposeMatrix:i}}_setScenegraphNodeProps(e){e?.position&&this.setPosition(e.position),e?.rotation&&this.setRotation(e.rotation),e?.scale&&this.setScale(e.scale),this.updateMatrix(),e?.matrix&&this.setMatrix(e.matrix),Object.assign(this.props,e)}}class re extends Ae{children;constructor(e={}){e=Array.isArray(e)?{children:e}:e;const{children:n=[]}=e;t.log.assert(n.every(e=>e instanceof Ae),"every child must an instance of ScenegraphNode"),super(e),this.children=n}getBounds(){const e=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];return this.traverse((n,{worldMatrix:A})=>{const r=n.getBounds();if(!r)return;const[i,s]=r,o=new t.Vector3(i).add(s).divide([2,2,2]);A.transformAsPoint(o,o);const a=new t.Vector3(s).subtract(i).divide([2,2,2]);A.transformAsVector(a,a);for(let l=0;l<8;l++){const n=new t.Vector3(1&l?-1:1,2&l?-1:1,4&l?-1:1).multiply(a).add(o);for(let t=0;t<3;t++)e[0][t]=Math.min(e[0][t],n[t]),e[1][t]=Math.max(e[1][t],n[t])}}),Number.isFinite(e[0][0])?e:null}destroy(){this.children.forEach(e=>e.destroy()),this.removeAll(),super.destroy()}add(...e){for(const t of e)Array.isArray(t)?this.add(...t):this.children.push(t);return this}remove(e){const t=this.children,n=t.indexOf(e);return n>-1&&t.splice(n,1),this}removeAll(){return this.children=[],this}traverse(e,{worldMatrix:n=new t.Matrix4}={}){const A=new t.Matrix4(n).multiplyRight(this.matrix);for(const t of this.children)t instanceof re?t.traverse(e,{worldMatrix:A}):e(t,{worldMatrix:A})}preorderTraversal(e,{worldMatrix:n=new t.Matrix4}={}){const A=new t.Matrix4(n).multiplyRight(this.matrix);e(this,{worldMatrix:A});for(const t of this.children)t instanceof re?t.preorderTraversal(e,{worldMatrix:A}):e(t,{worldMatrix:A})}}class ie extends Ae{model;bounds=null;managedResources;constructor(e){super(e),this.model=e.model,this.managedResources=e.managedResources||[],this.bounds=e.bounds||null,this.setProps(e)}destroy(){this.model&&(this.model.destroy(),this.model=null),this.managedResources.forEach(e=>e.destroy()),this.managedResources=[]}getBounds(){return this.bounds}draw(e){return this.model.draw(e)}}class se{static get componentName(){return Object.prototype.hasOwnProperty.call(this,"extensionName")?this.extensionName:""}constructor(e){e&&(this.opts=e)}equals(e){return this===e||this.constructor===e.constructor&&t.deepEqual(this.opts,e.opts,1)}getShaders(e){return null}getSubLayerProps(e){const{defaultProps:t}=e.constructor,n={updateTriggers:{}};for(const A in t)if(A in this.props){const e=t[A],r=this.props[A];n[A]=r,e&&"accessor"===e.type&&(n.updateTriggers[A]=this.props.updateTriggers[A],"function"==typeof r&&(n[A]=this.getSubLayerAccessor(r)))}return n}initializeState(e,t){}updateState(e,t){}onNeedsRedraw(e){}getNeedsPickingBuffer(e){return!1}draw(e,t){}finalizeState(e,t){}}se.defaultProps={},se.extensionName="LayerExtension";const oe={...e.PolygonLayer.defaultProps};class ae extends e.CompositeLayer{indexToBounds(){return null}renderLayers(){const{elevationScale:t,extruded:n,wireframe:A,filled:r,stroked:i,lineWidthUnits:s,lineWidthScale:o,lineWidthMinPixels:a,lineWidthMaxPixels:l,lineJointRounded:c,lineMiterLimit:u,lineDashJustified:f,getElevation:h,getFillColor:d,getLineColor:p,getLineWidth:m}=this.props,{updateTriggers:g,material:b,transitions:y}=this.props,B=this.getSubLayerClass("cell",e.PolygonLayer),{updateTriggers:v,...C}=this.indexToBounds()||{};return new B({filled:r,wireframe:A,extruded:n,elevationScale:t,stroked:i,lineWidthUnits:s,lineWidthScale:o,lineWidthMinPixels:a,lineWidthMaxPixels:l,lineJointRounded:c,lineMiterLimit:u,lineDashJustified:f,material:b,transitions:y,getElevation:h,getFillColor:d,getLineColor:p,getLineWidth:m},this.getSubLayerProps({id:"cell",updateTriggers:g&&{...v,getElevation:g.getElevation,getFillColor:g.getFillColor,getLineColor:g.getLineColor,getLineWidth:g.getLineWidth}}),C)}}ae.layerName="GeoCellLayer",ae.defaultProps=oe;var le=Object.defineProperty,ce=(e,t)=>{for(var n in t)le(e,n,{get:t[n],enumerable:!0})},ue={};ce(ue,{ARRAY_TYPE:()=>he,EPSILON:()=>fe,RANDOM:()=>de,equals:()=>be,setMatrixArrayType:()=>pe,toRadian:()=>ge});var fe=1e-6,he="undefined"!=typeof Float32Array?Float32Array:Array,de=Math.random;function pe(e){he=e}var me=Math.PI/180;function ge(e){return e*me}function be(e,t){return Math.abs(e-t)<=fe*Math.max(1,Math.abs(e),Math.abs(t))}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var ye={};function Be(){var e=new he(4);return he!=Float32Array&&(e[1]=0,e[2]=0),e[0]=1,e[3]=1,e}function ve(e){var t=new he(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Ce(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function _e(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e}function Me(e,t,n,A){var r=new he(4);return r[0]=e,r[1]=t,r[2]=n,r[3]=A,r}function we(e,t,n,A,r){return e[0]=t,e[1]=n,e[2]=A,e[3]=r,e}function Te(e,t){if(e===t){var n=t[1];e[1]=t[2],e[2]=n}else e[0]=t[0],e[1]=t[2],e[2]=t[1],e[3]=t[3];return e}function Ee(e,t){var n=t[0],A=t[1],r=t[2],i=t[3],s=n*i-r*A;return s?(s=1/s,e[0]=i*s,e[1]=-A*s,e[2]=-r*s,e[3]=n*s,e):null}function xe(e,t){var n=t[0];return e[0]=t[3],e[1]=-t[1],e[2]=-t[2],e[3]=n,e}function Se(e){return e[0]*e[3]-e[2]*e[1]}function Ie(e,t,n){var A=t[0],r=t[1],i=t[2],s=t[3],o=n[0],a=n[1],l=n[2],c=n[3];return e[0]=A*o+i*a,e[1]=r*o+s*a,e[2]=A*l+i*c,e[3]=r*l+s*c,e}function Re(e,t,n){var A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);return e[0]=A*a+i*o,e[1]=r*a+s*o,e[2]=A*-o+i*a,e[3]=r*-o+s*a,e}function Le(e,t,n){var A=t[0],r=t[1],i=t[2],s=t[3],o=n[0],a=n[1];return e[0]=A*o,e[1]=r*o,e[2]=i*a,e[3]=s*a,e}function De(e,t){var n=Math.sin(t),A=Math.cos(t);return e[0]=A,e[1]=n,e[2]=-n,e[3]=A,e}function Pe(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=t[1],e}function Fe(e){return"mat2("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"}function Ne(e){return Math.hypot(e[0],e[1],e[2],e[3])}function Oe(e,t,n,A){return e[2]=A[2]/A[0],n[0]=A[0],n[1]=A[1],n[3]=A[3]-e[2]*n[1],[e,t,n]}function Ue(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e}function ke(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e}function Ge(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]}function Ve(e,t){var n=e[0],A=e[1],r=e[2],i=e[3],s=t[0],o=t[1],a=t[2],l=t[3];return Math.abs(n-s)<=fe*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(A-o)<=fe*Math.max(1,Math.abs(A),Math.abs(o))&&Math.abs(r-a)<=fe*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(i-l)<=fe*Math.max(1,Math.abs(i),Math.abs(l))}function He(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e}function Qe(e,t,n,A){return e[0]=t[0]+n[0]*A,e[1]=t[1]+n[1]*A,e[2]=t[2]+n[2]*A,e[3]=t[3]+n[3]*A,e}ce(ye,{LDU:()=>Oe,add:()=>Ue,adjoint:()=>xe,clone:()=>ve,copy:()=>Ce,create:()=>Be,determinant:()=>Se,equals:()=>Ve,exactEquals:()=>Ge,frob:()=>Ne,fromRotation:()=>De,fromScaling:()=>Pe,fromValues:()=>Me,identity:()=>_e,invert:()=>Ee,mul:()=>je,multiply:()=>Ie,multiplyScalar:()=>He,multiplyScalarAndAdd:()=>Qe,rotate:()=>Re,scale:()=>Le,set:()=>we,str:()=>Fe,sub:()=>ze,subtract:()=>ke,transpose:()=>Te});var je=Ie,ze=ke;var Je={};ce(Je,{add:()=>vn,calculateW:()=>Zt,clone:()=>gn,conjugate:()=>sn,copy:()=>yn,create:()=>Qt,dot:()=>Mn,equals:()=>Ln,exactEquals:()=>Rn,exp:()=>$t,fromEuler:()=>an,fromMat3:()=>on,fromValues:()=>bn,getAngle:()=>Kt,getAxisAngle:()=>Jt,identity:()=>jt,invert:()=>rn,len:()=>En,length:()=>Tn,lerp:()=>wn,ln:()=>en,mul:()=>Cn,multiply:()=>qt,normalize:()=>In,pow:()=>tn,random:()=>An,rotateX:()=>Yt,rotateY:()=>Wt,rotateZ:()=>Xt,rotationTo:()=>Dn,scale:()=>_n,set:()=>Bn,setAxes:()=>Fn,setAxisAngle:()=>zt,slerp:()=>nn,sqlerp:()=>Pn,sqrLen:()=>Sn,squaredLength:()=>xn,str:()=>ln});var Ke={};function qe(){var e=new he(3);return he!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function Ye(e){var t=new he(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function We(e){var t=e[0],n=e[1],A=e[2];return Math.hypot(t,n,A)}function Xe(e,t,n){var A=new he(3);return A[0]=e,A[1]=t,A[2]=n,A}function Ze(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function $e(e,t,n,A){return e[0]=t,e[1]=n,e[2]=A,e}function et(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function tt(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function nt(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function At(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function rt(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function it(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function st(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e}function ot(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e}function at(e,t){return e[0]=Math.round(t[0]),e[1]=Math.round(t[1]),e[2]=Math.round(t[2]),e}function lt(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function ct(e,t,n,A){return e[0]=t[0]+n[0]*A,e[1]=t[1]+n[1]*A,e[2]=t[2]+n[2]*A,e}function ut(e,t){var n=t[0]-e[0],A=t[1]-e[1],r=t[2]-e[2];return Math.hypot(n,A,r)}function ft(e,t){var n=t[0]-e[0],A=t[1]-e[1],r=t[2]-e[2];return n*n+A*A+r*r}function ht(e){var t=e[0],n=e[1],A=e[2];return t*t+n*n+A*A}function dt(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function pt(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function mt(e,t){var n=t[0],A=t[1],r=t[2],i=n*n+A*A+r*r;return i>0&&(i=1/Math.sqrt(i)),e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e}function gt(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function bt(e,t,n){var A=t[0],r=t[1],i=t[2],s=n[0],o=n[1],a=n[2];return e[0]=r*a-i*o,e[1]=i*s-A*a,e[2]=A*o-r*s,e}function yt(e,t,n,A){var r=t[0],i=t[1],s=t[2];return e[0]=r+A*(n[0]-r),e[1]=i+A*(n[1]-i),e[2]=s+A*(n[2]-s),e}function Bt(e,t,n,A,r,i){var s=i*i,o=s*(2*i-3)+1,a=s*(i-2)+i,l=s*(i-1),c=s*(3-2*i);return e[0]=t[0]*o+n[0]*a+A[0]*l+r[0]*c,e[1]=t[1]*o+n[1]*a+A[1]*l+r[1]*c,e[2]=t[2]*o+n[2]*a+A[2]*l+r[2]*c,e}function vt(e,t,n,A,r,i){var s=1-i,o=s*s,a=i*i,l=o*s,c=3*i*o,u=3*a*s,f=a*i;return e[0]=t[0]*l+n[0]*c+A[0]*u+r[0]*f,e[1]=t[1]*l+n[1]*c+A[1]*u+r[1]*f,e[2]=t[2]*l+n[2]*c+A[2]*u+r[2]*f,e}function Ct(e,t){t=t||1;var n=2*de()*Math.PI,A=2*de()-1,r=Math.sqrt(1-A*A)*t;return e[0]=Math.cos(n)*r,e[1]=Math.sin(n)*r,e[2]=A*t,e}function _t(e,t,n){var A=t[0],r=t[1],i=t[2],s=n[3]*A+n[7]*r+n[11]*i+n[15];return s=s||1,e[0]=(n[0]*A+n[4]*r+n[8]*i+n[12])/s,e[1]=(n[1]*A+n[5]*r+n[9]*i+n[13])/s,e[2]=(n[2]*A+n[6]*r+n[10]*i+n[14])/s,e}function Mt(e,t,n){var A=t[0],r=t[1],i=t[2];return e[0]=A*n[0]+r*n[3]+i*n[6],e[1]=A*n[1]+r*n[4]+i*n[7],e[2]=A*n[2]+r*n[5]+i*n[8],e}function wt(e,t,n){var A=n[0],r=n[1],i=n[2],s=n[3],o=t[0],a=t[1],l=t[2],c=r*l-i*a,u=i*o-A*l,f=A*a-r*o,h=r*f-i*u,d=i*c-A*f,p=A*u-r*c,m=2*s;return c*=m,u*=m,f*=m,h*=2,d*=2,p*=2,e[0]=o+c+h,e[1]=a+u+d,e[2]=l+f+p,e}function Tt(e,t,n,A){var r=[],i=[];return r[0]=t[0]-n[0],r[1]=t[1]-n[1],r[2]=t[2]-n[2],i[0]=r[0],i[1]=r[1]*Math.cos(A)-r[2]*Math.sin(A),i[2]=r[1]*Math.sin(A)+r[2]*Math.cos(A),e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2],e}function Et(e,t,n,A){var r=[],i=[];return r[0]=t[0]-n[0],r[1]=t[1]-n[1],r[2]=t[2]-n[2],i[0]=r[2]*Math.sin(A)+r[0]*Math.cos(A),i[1]=r[1],i[2]=r[2]*Math.cos(A)-r[0]*Math.sin(A),e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2],e}function xt(e,t,n,A){var r=[],i=[];return r[0]=t[0]-n[0],r[1]=t[1]-n[1],r[2]=t[2]-n[2],i[0]=r[0]*Math.cos(A)-r[1]*Math.sin(A),i[1]=r[0]*Math.sin(A)+r[1]*Math.cos(A),i[2]=r[2],e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2],e}function St(e,t){var n=e[0],A=e[1],r=e[2],i=t[0],s=t[1],o=t[2],a=Math.sqrt(n*n+A*A+r*r)*Math.sqrt(i*i+s*s+o*o),l=a&>(e,t)/a;return Math.acos(Math.min(Math.max(l,-1),1))}function It(e){return e[0]=0,e[1]=0,e[2]=0,e}function Rt(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function Lt(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function Dt(e,t){var n=e[0],A=e[1],r=e[2],i=t[0],s=t[1],o=t[2];return Math.abs(n-i)<=fe*Math.max(1,Math.abs(n),Math.abs(i))&&Math.abs(A-s)<=fe*Math.max(1,Math.abs(A),Math.abs(s))&&Math.abs(r-o)<=fe*Math.max(1,Math.abs(r),Math.abs(o))}ce(Ke,{add:()=>et,angle:()=>St,bezier:()=>vt,ceil:()=>rt,clone:()=>Ye,copy:()=>Ze,create:()=>qe,cross:()=>bt,dist:()=>Ut,distance:()=>ut,div:()=>Ot,divide:()=>At,dot:()=>gt,equals:()=>Dt,exactEquals:()=>Lt,floor:()=>it,forEach:()=>Ht,fromValues:()=>Xe,hermite:()=>Bt,inverse:()=>pt,len:()=>Gt,length:()=>We,lerp:()=>yt,max:()=>ot,min:()=>st,mul:()=>Nt,multiply:()=>nt,negate:()=>dt,normalize:()=>mt,random:()=>Ct,rotateX:()=>Tt,rotateY:()=>Et,rotateZ:()=>xt,round:()=>at,scale:()=>lt,scaleAndAdd:()=>ct,set:()=>$e,sqrDist:()=>kt,sqrLen:()=>Vt,squaredDistance:()=>ft,squaredLength:()=>ht,str:()=>Rt,sub:()=>Ft,subtract:()=>tt,transformMat3:()=>Mt,transformMat4:()=>_t,transformQuat:()=>wt,zero:()=>It});var Pt,Ft=tt,Nt=nt,Ot=At,Ut=ut,kt=ft,Gt=We,Vt=ht,Ht=(Pt=qe(),function(e,t,n,A,r,i){var s,o;for(t||(t=3),n||(n=0),o=A?Math.min(A*t+n,e.length):e.length,s=n;s<o;s+=t)Pt[0]=e[s],Pt[1]=e[s+1],Pt[2]=e[s+2],r(Pt,Pt,i),e[s]=Pt[0],e[s+1]=Pt[1],e[s+2]=Pt[2];return e});function Qt(){var e=new he(4);return he!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function jt(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e}function zt(e,t,n){n*=.5;var A=Math.sin(n);return e[0]=A*t[0],e[1]=A*t[1],e[2]=A*t[2],e[3]=Math.cos(n),e}function Jt(e,t){var n=2*Math.acos(t[3]),A=Math.sin(n/2);return A>fe?(e[0]=t[0]/A,e[1]=t[1]/A,e[2]=t[2]/A):(e[0]=1,e[1]=0,e[2]=0),n}function Kt(e,t){var n=Mn(e,t);return Math.acos(2*n*n-1)}function qt(e,t,n){var A=t[0],r=t[1],i=t[2],s=t[3],o=n[0],a=n[1],l=n[2],c=n[3];return e[0]=A*c+s*o+r*l-i*a,e[1]=r*c+s*a+i*o-A*l,e[2]=i*c+s*l+A*a-r*o,e[3]=s*c-A*o-r*a-i*l,e}function Yt(e,t,n){n*=.5;var A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);return e[0]=A*a+s*o,e[1]=r*a+i*o,e[2]=i*a-r*o,e[3]=s*a-A*o,e}function Wt(e,t,n){n*=.5;var A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);return e[0]=A*a-i*o,e[1]=r*a+s*o,e[2]=i*a+A*o,e[3]=s*a-r*o,e}function Xt(e,t,n){n*=.5;var A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);return e[0]=A*a+r*o,e[1]=r*a-A*o,e[2]=i*a+s*o,e[3]=s*a-i*o,e}function Zt(e,t){var n=t[0],A=t[1],r=t[2];return e[0]=n,e[1]=A,e[2]=r,e[3]=Math.sqrt(Math.abs(1-n*n-A*A-r*r)),e}function $t(e,t){var n=t[0],A=t[1],r=t[2],i=t[3],s=Math.sqrt(n*n+A*A+r*r),o=Math.exp(i),a=s>0?o*Math.sin(s)/s:0;return e[0]=n*a,e[1]=A*a,e[2]=r*a,e[3]=o*Math.cos(s),e}function en(e,t){var n=t[0],A=t[1],r=t[2],i=t[3],s=Math.sqrt(n*n+A*A+r*r),o=s>0?Math.atan2(s,i)/s:0;return e[0]=n*o,e[1]=A*o,e[2]=r*o,e[3]=.5*Math.log(n*n+A*A+r*r+i*i),e}function tn(e,t,n){return en(e,t),_n(e,e,n),$t(e,e),e}function nn(e,t,n,A){var r,i,s,o,a,l=t[0],c=t[1],u=t[2],f=t[3],h=n[0],d=n[1],p=n[2],m=n[3];return(i=l*h+c*d+u*p+f*m)<0&&(i=-i,h=-h,d=-d,p=-p,m=-m),1-i>fe?(r=Math.acos(i),s=Math.sin(r),o=Math.sin((1-A)*r)/s,a=Math.sin(A*r)/s):(o=1-A,a=A),e[0]=o*l+a*h,e[1]=o*c+a*d,e[2]=o*u+a*p,e[3]=o*f+a*m,e}function An(e){var t=de(),n=de(),A=de(),r=Math.sqrt(1-t),i=Math.sqrt(t);return e[0]=r*Math.sin(2*Math.PI*n),e[1]=r*Math.cos(2*Math.PI*n),e[2]=i*Math.sin(2*Math.PI*A),e[3]=i*Math.cos(2*Math.PI*A),e}function rn(e,t){var n=t[0],A=t[1],r=t[2],i=t[3],s=n*n+A*A+r*r+i*i,o=s?1/s:0;return e[0]=-n*o,e[1]=-A*o,e[2]=-r*o,e[3]=i*o,e}function sn(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e}function on(e,t){var n,A=t[0]+t[4]+t[8];if(A>0)n=Math.sqrt(A+1),e[3]=.5*n,n=.5/n,e[0]=(t[5]-t[7])*n,e[1]=(t[6]-t[2])*n,e[2]=(t[1]-t[3])*n;else{var r=0;t[4]>t[0]&&(r=1),t[8]>t[3*r+r]&&(r=2);var i=(r+1)%3,s=(r+2)%3;n=Math.sqrt(t[3*r+r]-t[3*i+i]-t[3*s+s]+1),e[r]=.5*n,n=.5/n,e[3]=(t[3*i+s]-t[3*s+i])*n,e[i]=(t[3*i+r]+t[3*r+i])*n,e[s]=(t[3*s+r]+t[3*r+s])*n}return e}function an(e,t,n,A){var r=.5*Math.PI/180;t*=r,n*=r,A*=r;var i=Math.sin(t),s=Math.cos(t),o=Math.sin(n),a=Math.cos(n),l=Math.sin(A),c=Math.cos(A);return e[0]=i*a*c-s*o*l,e[1]=s*o*c+i*a*l,e[2]=s*a*l-i*o*c,e[3]=s*a*c+i*o*l,e}function ln(e){return"quat("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"}!function(){var e,t=(e=new he(4),he!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e)}();var cn,un,fn,hn,dn,pn,mn,gn=function(e){var t=new he(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},bn=function(e,t,n,A){var r=new he(4);return r[0]=e,r[1]=t,r[2]=n,r[3]=A,r},yn=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},Bn=function(e,t,n,A,r){return e[0]=t,e[1]=n,e[2]=A,e[3]=r,e},vn=function(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e},Cn=qt,_n=function(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e},Mn=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]},wn=function(e,t,n,A){var r=t[0],i=t[1],s=t[2],o=t[3];return e[0]=r+A*(n[0]-r),e[1]=i+A*(n[1]-i),e[2]=s+A*(n[2]-s),e[3]=o+A*(n[3]-o),e},Tn=function(e){var t=e[0],n=e[1],A=e[2],r=e[3];return Math.hypot(t,n,A,r)},En=Tn,xn=function(e){var t=e[0],n=e[1],A=e[2],r=e[3];return t*t+n*n+A*A+r*r},Sn=xn,In=function(e,t){var n=t[0],A=t[1],r=t[2],i=t[3],s=n*n+A*A+r*r+i*i;return s>0&&(s=1/Math.sqrt(s)),e[0]=n*s,e[1]=A*s,e[2]=r*s,e[3]=i*s,e},Rn=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]},Ln=function(e,t){var n=e[0],A=e[1],r=e[2],i=e[3],s=t[0],o=t[1],a=t[2],l=t[3];return Math.abs(n-s)<=fe*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(A-o)<=fe*Math.max(1,Math.abs(A),Math.abs(o))&&Math.abs(r-a)<=fe*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(i-l)<=fe*Math.max(1,Math.abs(i),Math.abs(l))},Dn=(cn=qe(),un=Xe(1,0,0),fn=Xe(0,1,0),function(e,t,n){var A=gt(t,n);return A<-.999999?(bt(cn,un,t),Gt(cn)<1e-6&&bt(cn,fn,t),mt(cn,cn),zt(e,cn,Math.PI),e):A>.999999?(e[0]=0,e[1]=0,e[2]=0,e[3]=1,e):(bt(cn,t,n),e[0]=cn[0],e[1]=cn[1],e[2]=cn[2],e[3]=1+A,In(e,e))}),Pn=(hn=Qt(),dn=Qt(),function(e,t,n,A,r,i){return nn(hn,t,r,i),nn(dn,n,A,i),nn(e,hn,dn,2*i*(1-i)),e}),Fn=(pn=new he(9),he!=Float32Array&&(pn[1]=0,pn[2]=0,pn[3]=0,pn[5]=0,pn[6]=0,pn[7]=0),pn[0]=1,pn[4]=1,pn[8]=1,mn=pn,function(e,t,n,A){return mn[0]=n[0],mn[3]=n[1],mn[6]=n[2],mn[1]=A[0],mn[4]=A[1],mn[7]=A[2],mn[2]=-t[0],mn[5]=-t[1],mn[8]=-t[2],In(e,on(e,mn))}),Nn={};function On(){var e=new he(2);return he!=Float32Array&&(e[0]=0,e[1]=0),e}function Un(e){var t=new he(2);return t[0]=e[0],t[1]=e[1],t}function kn(e,t){var n=new he(2);return n[0]=e,n[1]=t,n}function Gn(e,t){return e[0]=t[0],e[1]=t[1],e}function Vn(e,t,n){return e[0]=t,e[1]=n,e}function Hn(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e}function Qn(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e}function jn(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e}function zn(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e}function Jn(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e}function Kn(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e}function qn(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e}function Yn(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e}function Wn(e,t){return e[0]=Math.round(t[0]),e[1]=Math.round(t[1]),e}function Xn(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e}function Zn(e,t,n,A){return e[0]=t[0]+n[0]*A,e[1]=t[1]+n[1]*A,e}function $n(e,t){var n=t[0]-e[0],A=t[1]-e[1];return Math.hypot(n,A)}function eA(e,t){var n=t[0]-e[0],A=t[1]-e[1];return n*n+A*A}function tA(e){var t=e[0],n=e[1];return Math.hypot(t,n)}function nA(e){var t=e[0],n=e[1];return t*t+n*n}function AA(e,t){return e[0]=-t[0],e[1]=-t[1],e}function rA(e,t){return e[0]=1/t[0],e[1]=1/t[1],e}function iA(e,t){var n=t[0],A=t[1],r=n*n+A*A;return r>0&&(r=1/Math.sqrt(r)),e[0]=t[0]*r,e[1]=t[1]*r,e}function sA(e,t){return e[0]*t[0]+e[1]*t[1]}function oA(e,t,n){var A=t[0]*n[1]-t[1]*n[0];return e[0]=e[1]=0,e[2]=A,e}function aA(e,t,n,A){var r=t[0],i=t[1];return e[0]=r+A*(n[0]-r),e[1]=i+A*(n[1]-i),e}function lA(e,t){t=t||1;var n=2*de()*Math.PI;return e[0]=Math.cos(n)*t,e[1]=Math.sin(n)*t,e}function cA(e,t,n){var A=t[0],r=t[1];return e[0]=n[0]*A+n[2]*r,e[1]=n[1]*A+n[3]*r,e}function uA(e,t,n){var A=t[0],r=t[1];return e[0]=n[0]*A+n[2]*r+n[4],e[1]=n[1]*A+n[3]*r+n[5],e}function fA(e,t,n){var A=t[0],r=t[1];return e[0]=n[0]*A+n[3]*r+n[6],e[1]=n[1]*A+n[4]*r+n[7],e}function hA(e,t,n){var A=t[0],r=t[1];return e[0]=n[0]*A+n[4]*r+n[12],e[1]=n[1]*A+n[5]*r+n[13],e}function dA(e,t,n,A){var r=t[0]-n[0],i=t[1]-n[1],s=Math.sin(A),o=Math.cos(A);return e[0]=r*o-i*s+n[0],e[1]=r*s+i*o+n[1],e}function pA(e,t){var n=e[0],A=e[1],r=t[0],i=t[1],s=Math.sqrt(n*n+A*A)*Math.sqrt(r*r+i*i),o=s&&(n*r+A*i)/s;return Math.acos(Math.min(Math.max(o,-1),1))}function mA(e){return e[0]=0,e[1]=0,e}function gA(e){return"vec2("+e[0]+", "+e[1]+")"}function bA(e,t){return e[0]===t[0]&&e[1]===t[1]}function yA(e,t){var n=e[0],A=e[1],r=t[0],i=t[1];return Math.abs(n-r)<=fe*Math.max(1,Math.abs(n),Math.abs(r))&&Math.abs(A-i)<=fe*Math.max(1,Math.abs(A),Math.abs(i))}ce(Nn,{add:()=>Hn,angle:()=>pA,ceil:()=>Jn,clone:()=>Un,copy:()=>Gn,create:()=>On,cross:()=>oA,dist:()=>MA,distance:()=>$n,div:()=>_A,divide:()=>zn,dot:()=>sA,equals:()=>yA,exactEquals:()=>bA,floor:()=>Kn,forEach:()=>EA,fromValues:()=>kn,inverse:()=>rA,len:()=>BA,length:()=>tA,lerp:()=>aA,max:()=>Yn,min:()=>qn,mul:()=>CA,multiply:()=>jn,negate:()=>AA,normalize:()=>iA,random:()=>lA,rotate:()=>dA,round:()=>Wn,scale:()=>Xn,scaleAndAdd:()=>Zn,set:()=>Vn,sqrDist:()=>wA,sqrLen:()=>TA,squaredDistance:()=>eA,squaredLength:()=>nA,str:()=>gA,sub:()=>vA,subtract:()=>Qn,transformMat2:()=>cA,transformMat2d:()=>uA,transformMat3:()=>fA,transformMat4:()=>hA,zero:()=>mA});var BA=tA,vA=Qn,CA=jn,_A=zn,MA=$n,wA=eA,TA=nA,EA=function(){var e=On();return function(t,n,A,r,i,s){var o,a;for(n||(n=2),A||(A=0),a=r?Math.min(r*n+A,t.length):t.length,o=A;o<a;o+=n)e[0]=t[o],e[1]=t[o+1],i(e,e,s),t[o]=e[0],t[o+1]=e[1];return t}}(),xA=(1+Math.sqrt(5))/2,SA=2*Math.PI/5,IA=Math.PI/5,RA=Math.PI/10,LA=2*Math.atan(xA),DA=Math.PI-LA,PA=(Math.sqrt(5)-1)/2,FA=3-Math.sqrt(5);ue.setMatrixArrayType(Float64Array);var NA=class e{constructor(e){this.vertices=e,this.isWindingCorrect()||this.vertices.reverse()}getArea(){let e=0;const t=this.vertices.length;for(let n=0;n<t;n++){const A=(n+1)%t;e+=(this.vertices[A][0]-this.vertices[n][0])*(this.vertices[A][1]+this.vertices[n][1])}return e}isWindingCorrect(){return this.getArea()>=0}getVertices(){return this.vertices}scale(e){for(const t of this.vertices)Nn.scale(t,t,e);return this}rotate180(){for(const e of this.vertices)Nn.negate(e,e);return this}reflectY(){for(const e of this.vertices)e[1]=-e[1];return this.vertices.reverse(),this}translate(e){for(const t of this.vertices)Nn.add(t,t,e);return this}transform(e){for(const t of this.vertices)Nn.transformMat2(t,t,e);return this}transform2d(e){for(const t of this.vertices)Nn.transformMat2d(t,t,e);return this}clone(){return new e(this.vertices.map(e=>Nn.clone(e)))}getCenter(){const e=this.vertices.length;return this.vertices.reduce((t,n)=>[t[0]+n[0]/e,t[1]+n[1]/e],[0,0])}containsPoint(e){if(!this.isWindingCorrect())throw new Error("Pentagon is not counter-clockwise");const t=this.vertices.length;let n=1;for(let A=0;A<t;A++){const r=this.vertices[A],i=this.vertices[(A+1)%t],s=r[0]-i[0],o=r[1]-i[1],a=e[0]-r[0],l=e[1]-r[1],c=s*l-o*a;if(c<0){const e=Math.sqrt(a*a+l*l);n=Math.min(n,c/e)}}return n}splitEdges(t){if(t<=1)return this;const n=[],A=this.vertices.length;for(let e=0;e<A;e++){const r=this.vertices[e],i=this.vertices[(e+1)%A];n.push(Nn.clone(r));for(let e=1;e<t;e++){const A=e/t,s=Nn.create();Nn.lerp(s,r,i,A),n.push(s)}}return new e(n)}};ue.setMatrixArrayType(Float64Array);var OA=[0,0],UA=[0,1],kA=[.7885966681787006,1.6149108024237764],GA=[1.6171013659387945,1.054928690397459],VA=[Math.cos(RA),Math.sin(RA)],HA=2*Nn.length(kA)*Math.cos(IA),QA=IA-Math.atan2(kA[1],kA[0]),jA=2*PA/HA;[OA,UA,kA,GA,VA].forEach(e=>{Nn.scale(e,e,jA),Nn.rotate(e,e,[0,0],QA)});var zA=new NA([OA,UA,kA,GA,VA]),JA=Math.atan2(kA[1],kA[0])-IA,KA=PA/Math.cos(IA),qA=JA+IA,YA=[KA*Math.cos(qA),KA*Math.sin(qA)],WA=JA-IA,XA=[KA*Math.cos(WA),KA*Math.sin(WA)],ZA=new NA([[0,0],YA,XA]),$A=ye.fromValues(YA[0],YA[1],XA[0],XA[1]);ye.invert(ye.create(),$A);var er=new Float64Array([-.0022392098386786394,21308606513250217e-22,-2.559257686421274e-9,33701965267802837e-28,-4667545312611249e-30,667492870384816e-32]),tr=new Float64Array([.0022392089963541657,28831978048607556e-22,5.08622073997266e-9,102018123778161e-25,21912872306767718e-30,49284235482523806e-33]);ue.setMatrixArrayType(Float64Array);var nr=new class{applyCoefficients(e,t){const n=Math.sin(e),A=Math.cos(e),r=2*(A-n)*(A+n);let i,s;return i=r*t[5]+t[4],s=r*i+t[3],i=r*s-i+t[2],s=r*i-s+t[1],i=r*s-i+t[0],e+2*n*A*i}forward(e){return this.applyCoefficients(e,er)}inverse(e){return this.applyCoefficients(e,tr)}};function Ar(e){return e*(Math.PI/180)}function rr(e){return e*(180/Math.PI)}function ir(e){return[Nn.length(e),Math.atan2(e[1],e[0])]}function sr(e){const t=Math.atan2(e[1],e[0]),n=Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);return[t,Math.acos(e[2]/n)]}function or([e,t]){const n=Math.sin(t);return[n*Math.cos(e),n*Math.sin(e),Math.cos(t)]}function ar(e){return((e+180)%360+360)%360-180}function lr([e,t]){const n=ar(rr(e)-93),A=Math.PI/2-t;return[n,rr(nr.inverse(A))]}function cr(e){const t=e.map(e=>or(function([e,t]){const n=Ar(e+93),A=Ar(t),r=nr.forward(A);return[n,Math.PI/2-r]}(e))),n=Ke.create();for(const i of t)Ke.add(n,n,i);Ke.normalize(n,n);let[A,r]=lr(sr(n));return(r>89.99||r<-89.99)&&(A=e[0][0]),A=ar(A),e.map(e=>{let[t,n]=e;for(;t-A>180;)t-=360;for(;t-A<-180;)t+=360;return[t,n]})}ue.setMatrixArrayType(Float64Array);var ur=Math.sqrt(5),fr=Math.sqrt(.2),hr=Math.sqrt((1-fr)/2),dr=Math.sqrt((1+fr)/2),pr=.5,mr=Math.sqrt((2.5-ur)/10),gr=Math.sqrt((2.5+ur)/10),br=Math.sqrt((1+fr)/8),yr=Math.sqrt((1-fr)/8),Br=Math.sqrt((3-ur)/8),vr=Math.sqrt((3+ur)/8),Cr=[[0,0],[hr,0],[mr,pr],[-br,Br],[-br,-Br],[mr,-pr],[-dr,0],[-yr,-vr],[gr,-pr],[gr,pr],[-yr,vr],[0,0]].map(([e,t])=>[-t,e]).map((e,t)=>0===t?[0,0,0,1]:11===t?[0,-1,0,0]:[...e,0,t<6?dr:hr]);ue.setMatrixArrayType(Float64Array);var _r=["vu","uw","vw","vw","vw"],Mr=["wu","uw","vw","vu","uw"],wr=["wu","uv","wv","wu","uw"],Tr=["vu","uv","wv","wu","uw"],Er=[_r,Tr,wr,Mr,wr,Tr,wr,Mr,Mr,Mr,Tr,Tr],xr=[4,2,3,2,0,4,3,2,2,0,3,0],Sr=[0,1,2,4,3,5,7,8,6,11,10,9],Ir=[];var Rr=0;function Lr(e,t,n){if(Rr>11)throw new Error(`Too many origins: ${Rr}`);const A=Je.create();Je.conjugate(A,n);const r={id:Rr,axis:e,quat:n,inverseQuat:A,angle:t,orientation:Er[Rr],firstQuintant:xr[Rr]};Ir.push(r),Rr++}!function(){Lr([0,0],0,Cr[0]);for(let e=0;e<5;e++){const t=e*SA,n=t+IA;Lr([t,DA],IA,Cr[e+1]),Lr([n,Math.PI-DA],IA,Cr[(e+3)%5+6])}Lr([0,Math.PI],0,Cr[11])}(),Ir.sort((e,t)=>Sr.indexOf(e.id)-Sr.indexOf(t.id)),Ir.forEach((e,t)=>e.id=t);var Dr=class{forward([e,t]){return[Math.tan(t),e]}inverse([e,t]){return[t,Math.atan(e)]}},Pr=Ke.create(),Fr=Ke.create(),Nr=Ke.create(),Or=Ke.create();function Ur(e,t){Ke.lerp(Pr,e,t,.5),Ke.normalize(Pr,Pr),Ke.cross(Pr,e,Pr);const n=Ke.length(Pr);if(n<1e-8){const n=Ke.subtract(Ke.create(),e,t);return.5*Ke.length(n)}return n}function kr(e,t,n,A){const r=Ke.angle(t,n);if(r<1e-12)return Ke.lerp(e,t,n,A);const i=Math.sin((1-A)*r)/Math.sin(r),s=Math.sin(A*r)/Math.sin(r),o=Ke.scale(Ke.create(),t,i),a=Ke.scale(Ke.create(),n,s);return Ke.add(e,o,a)}ue.setMatrixArrayType(Float64Array);var Gr=Ke.create(),Vr=Ke.create(),Hr=Ke.create(),Qr=Ke.create(),jr=class{constructor(e){this._area=null,this.vertices=e,Object.freeze(this.vertices)}getBoundary(e=1,t=!0){const n=[],A=this.vertices.length;for(let r=0;r<A*e;r++){const t=r/e;n.push(this.slerp(t))}return t&&n.push(n[0]),n}slerp(e){const t=this.vertices.length,n=e%1,A=Math.floor(e%t),r=(A+1)%t;return kr(Ke.create(),this.vertices[A],this.vertices[r],n)}getTransformedVertices(e){const t=this.vertices.length,n=Math.floor(e%t),A=(n+1)%t,r=(n+t-1)%t,i=Ke.clone(this.vertices[n]),s=Ke.clone(this.vertices[A]),o=Ke.clone(this.vertices[r]);return Ke.sub(s,s,i),Ke.sub(o,o,i),[i,s,o]}containsPoint(e){const t=this.vertices.length;let n=1/0;for(let A=0;A<t;A++){const[t,r,i]=this.getTransformedVertices(A),s=Ke.sub(Ke.create(),e,t);Ke.normalize(s,s),Ke.normalize(r,r),Ke.normalize(i,i);const o=Ke.cross(Ke.create(),r,s),a=Ke.cross(Ke.create(),s,i),l=Ke.dot(t,o),c=Ke.dot(t,a);n=Math.min(n,l,c)}return n}getTriangleArea(e,t,n){Ke.lerp(Gr,t,n,.5),Ke.lerp(Vr,n,e,.5),Ke.lerp(Hr,e,t,.5),Ke.normalize(Gr,Gr),Ke.normalize(Vr,Vr),Ke.normalize(Hr,Hr);const A=(r=Gr,i=Vr,s=Hr,Ke.cross(Fr,i,s),Ke.dot(r,Fr));var r,i,s;const o=Math.max(-1,Math.min(1,A));return Math.abs(o)<1e-8?2*o:2*Math.asin(o)}getArea(){return null===this._area&&(this._area=this._getArea()),this._area}_getArea(){if(this.vertices.length<3)return 0;if(3===this.vertices.length)return this._area=this.getTriangleArea(this.vertices[0],this.vertices[1],this.vertices[2]),this._area;Ke.set(Qr,0,0,0);for(const t of this.vertices)Ke.add(Qr,Qr,t);Ke.normalize(Qr,Qr);let e=0;for(let t=0;t<this.vertices.length;t++){const n=this.vertices[t],A=this.vertices[(t+1)%this.vertices.length],r=this.getTriangleArea(Qr,n,A);isNaN(r)||(e+=r)}return this._area=e,this._area}isWindingCorrect(){this.getArea()}};ue.setMatrixArrayType(Float64Array);var zr=class extends jr{constructor(e){if(3!==e.length)throw new Error("SphericalTriangleShape requires exactly 3 vertices");super(e)}};ue.setMatrixArrayType(Float64Array);var Jr=class{forward(e,t,n){const[A,r,i]=t,s=new zr([A,r,i]),o=Ke.subtract(Ke.create(),e,A);Ke.normalize(o,o);const a=function(e,t,n,A,r){Ke.cross(Fr,A,r);const i=Ke.dot(t,Fr),s=Ke.dot(n,Fr);return Ke.scale(Nr,t,s),Ke.scale(Or,n,i),Ke.sub(e,Or,Nr)}(Ke.create(),A,o,r,i);Ke.normalize(a,a);const l=Ur(A,e)/Ur(A,a),c=l/s.getArea();return function(e,[t,n,A]){return[e[0]*t[0]+e[1]*n[0]+e[2]*A[0],e[0]*t[1]+e[1]*n[1]+e[2]*A[1]]}([1-l,c*new zr([A,a,i]).getArea(),c*new zr([A,r,a]).getArea()],n)}inverse(e,t,n){const[A,r,i]=n,s=new zr([A,r,i]),o=function(e,[t,n,A]){const r=[t[0]-A[0],t[1]-A[1]],i=[A[0]-n[0],A[1]-n[1]],s=[e[0]-A[0],e[1]-A[1]],o=i[0]*r[1]-i[1]*r[0],a=(i[0]*s[1]-i[1]*s[0])/o,l=(r[0]*s[1]-r[1]*s[0])/o;return[a,l,1-(a+l)]}(e,t),a=1-1e-14;if(o[0]>a)return A;if(o[1]>a)return r;if(o[2]>a)return i;const l=Ke.create();Ke.cross(l,r,i);const c=s.getArea(),u=1-o[0],f=o[2]/u*c,h=Math.sin(f),d=Math.sin(f/2),p=2*d*d,m=Ke.dot(A,r),g=Ke.dot(r,i),b=Ke.dot(i,A),y=Ke.length(l),B=h*Ke.dot(A,l)+p*(m*g-b),v=p*y*(1+m),C=2/Math.acos(g)*Math.atan2(v,B),_=kr(Ke.create(),r,i,C),M=Ur(A,_);return kr([0,0,0],A,_,this.safeAcos(u*M)/this.safeAcos(M))}safeAcos(e){return e<.001?2*e+e*e*e/3:Math.acos(1-2*e*e)}},Kr=-1;ue.setMatrixArrayType(Float64Array);var qr=([e,t])=>Nn.fromValues(e-t,t);ue.setMatrixArrayType(Float64Array);var Yr=Nn.fromValues(1,0),Wr=Nn.fromValues(0,1),Xr=Nn.negate(Nn.create(),Yr),Zr=Nn.negate(Nn.create(),Wr),$r=Nn.fromValues(0,0),ei=(e,[t,n])=>{let A=$r,r=$r;switch(1===t&&1===n?(A=Yr,r=Wr):t===Kr&&1===n?(A=Zr,r=Xr):1===t&&n===Kr?(A=Wr,r=Yr):t===Kr&&n===Kr&&(A=Xr,r=Zr),e){case 0:return $r;case 1:return A;case 2:return Nn.add(Nn.create(),r,A);case 3:return Nn.scaleAndAdd(Nn.create(),r,A,2);default:throw new Error(`Invalid Quaternary value: ${e}`)}},ti=e=>[[1,1],[1,Kr],[1,1],[Kr,1]][e];function ni(e){return Array.from({length:e.length},(t,n)=>e.indexOf(n))}var Ai=[0,1,3,4,5,6,7,2],ri=[0,1,2,7,3,4,5,6];ni(Ai),ni(ri);var ii=(e,t,n,A,r)=>{if(t<=0)return;const i=e[t]||0,s=e[t-1];let o=!0,a=!0;if(A!==(0===n[0]+n[1])?(o=1===i||2===i,a=1===i):(o=i<2,a=0===i),!o)return;const l=a?s:s+4,c=r[l];e[t-1]=c%4,e[t]=(i+4+Math.floor(c/4)-Math.floor(l/4))%4};ue.setMatrixArrayType(Float64Array);var si=Nn.fromValues(-1,1),oi=(e,t,n,A,r=true)=>{const i=Nn.create(),s=[1,1];let o=BigInt(e);const a=[];for(;o>0n||a.length<t;)a.push(Number(o%4n)),o>>=2n;const l=A?ri:Ai;for(let c=a.length-1;c>=0;c--)r&&ii(a,c,s,n,l),Nn.multiply(s,s,ti(a[c]));s[0]=1,s[1]=1;for(let c=a.length-1;c>=0;c--){Nn.scale(i,i,2);const e=ei(a[c],s);Nn.add(i,i,e),Nn.multiply(s,s,ti(a[c]))}return{q:a[0]||0,offset:qr(i),flips:s}};ue.setMatrixArrayType(Float64Array);var ai=Nn.clone(XA),li=Nn.negate(Nn.create(),XA),ci=[0,1,2,3,4].map(e=>{const t=ye.create();return ye.fromRotation(t,SA*e),t}),ui=Nn.create();function fi(e){const t=ZA.clone();return t.transform(ci[e]),t}ue.setMatrixArrayType(Float64Array);ue.setMatrixArrayType(Float64Array);var hi=new class{constructor(){if(this.vertices=[],this.invocations=0,this.addFaceCenters(),this.addVertices(),this.addMidpoints(),62!==this.vertices.length)throw new Error("Failed to construct CRS: vertices length is not 62");Object.freeze(this.vertices)}getVertex(e){this.invocations++,1e4===this.invocations&&console.warn("Too many CRS invocations, results should be cached");for(const t of this.vertices)if(Ke.distance(e,t)<1e-5)return t;throw new Error("Failed to find vertex in CRS")}addFaceCenters(){Ir.forEach(e=>this.add(or(e.axis)))}addVertices(){const e=Math.atan(FA);for(const t of Ir)for(let n=0;n<5;n++){const A=or([(2*n+1)*Math.PI/5+t.angle,e]);Ke.transformQuat(A,A,t.quat),this.add(A)}}addMidpoints(){const e=Math.atan(PA);for(const t of Ir)for(let n=0;n<5;n++){const A=or([2*n*Math.PI/5+t.angle,e]);Ke.transformQuat(A,A,t.quat),this.add(A)}}add(e){const t=Ke.normalize(Ke.create(),e);return!this.vertices.find(e=>Ke.distance(t,e)<1e-5)&&(this.vertices.push(t),!0)}};function di(e){const t=function(e){if(0n===e)return-1;if(1n&e||0b100n==(0b111n&e)||0b10000n==(0b11111n&e))return 30;let t=29,n=e>>1n;if(0n===n)return-1;let A,r=Number(0xFFFFFFFFn&n);for(0===r?(n>>=32n,t-=16,A=Number(n)):A=r,65535&A||(A>>=16,t-=8),t>=6&&!(255&A)&&(A>>=8,t-=4),t>=4&&!(15&A)&&(A>>=4,t-=2);t>-1&&!(1&A);)t-=1,A>>=t<2?1:2;return t}(e);if(-1===t)return{origin:Ir[0],segment:0,S:0n,resolution:t};let n=58n,A=0;if(30===t){const t=1n&e?1n:0b100n&e?3n:5n;n=58n+t,A=1n===t?0:3n===t?32:40}const r=Number(e>>n)+A;let i,s;if(0===t)i=Ir[r],s=0;else{const e=Math.floor(r/5);i=Ir[e],s=(r+i.firstQuintant)%5}if(!i)throw new Error(`Could not parse origin: ${r}`);if(t<2)return{origin:i,segment:s,S:0n,resolution:t};return{origin:i,segment:s,S:(e&(1n<<n)-1n)>>n-BigInt(2*(t-2+1)),resolution:t}}ue.setMatrixArrayType(Float64Array),ye.create();var pi=new class{constructor(){this.faceTriangles=[],this.sphericalTriangles=[],this.polyhedral=new Jr,this.gnomonic=new Dr}forward(e,t){const n=Ir[t],A=or(e),r=Ke.create();Ke.transformQuat(r,A,n.inverseQuat);const i=sr(r),s=this.gnomonic.forward(i);s[1]=s[1]-n.angle;const o=this.getFaceTriangleIndex(s),a=this.shouldReflect(s);let l=this.getFaceTriangle(o,a,!1),c=this.getSphericalTriangle(o,t,a);return this.polyhedral.forward(A,c,l)}inverse(e,t){const n=ir(e),A=this.getFaceTriangleIndex(n),r=this.shouldReflect(n),i=this.getFaceTriangle(A,r,!1),s=this.getSphericalTriangle(A,t,r);return sr(this.polyhedral.inverse(e,i,s))}shouldReflect(e){const[t,n]=e,A=function([e,t]){return[e*Math.cos(t),e*Math.sin(t)]}([t,this.normalizeGamma(n)])[0];return A>PA}getFaceTriangleIndex([e,t]){return(Math.floor(t/IA)+10)%10}getFaceTriangle(e,t=!1,n=!1){let A=e;return t&&(A+=n?20:10),this.faceTriangles[A]||(this.faceTriangles[A]=t?this._getReflectedFaceTriangle(e,n):this._getFaceTriangle(e),Object.freeze(this.faceTriangles[A])),this.faceTriangles[A]}_getFaceTriangle(e){const t=Math.floor((e+1)/2)%5,[n,A,r]=fi(t).getVertices(),i=Nn.create();Nn.lerp(i,A,r,.5);return e%2==0?[n,i,A]:[n,r,i]}_getReflectedFaceTriangle(e,t=!1){let[n,A,r]=this._getFaceTriangle(e).map(e=>Nn.clone(e));const i=e%2==0;Nn.negate(n,n);const s=i?A:r;return Nn.scaleAndAdd(n,n,s,t?1+1/Math.cos(DA):2),[n,r,A]}getSphericalTriangle(e,t,n=!1){let A=10*t+e;return n&&(A+=120),this.sphericalTriangles[A]||(this.sphericalTriangles[A]=this._getSphericalTriangle(e,t,n),Object.freeze(this.sphericalTriangles[A])),this.sphericalTriangles[A]}_getSphericalTriangle(e,t,n=!1){const A=Ir[t];return this.getFaceTriangle(e,n,!0).map(e=>{const[t,n]=ir(e),r=[t,n+A.angle],i=or(this.gnomonic.inverse(r));return Ke.transformQuat(i,i,A.quat),hi.getVertex(i)})}normalizeGamma(e){const t=e/SA;return(t-Math.round(t))*SA}};function mi({S:e,segment:t,origin:n,resolution:A}){const{quintant:r,orientation:i}=function(e,t){const n=t.orientation,A=n===_r||n===Mr?-1:1,r=(e-t.firstQuintant+5)%5,i=n[r];return{quintant:(t.firstQuintant+A*r+5)%5,orientation:i}}(t,n);if(1===A){return fi(r)}if(0===A)return function(){const e=[];for(const t of ci)e.push(Nn.transformMat2(Nn.create(),YA,t));return e.reverse(),new NA(e)}();const s=A-2+1,o=((e,t,n,A=!0)=>{let r=BigInt(e);const i="wv"===n||"vw"===n,s="wu"===n||"uw"===n;("vu"===n||"wu"===n||"vw"===n)&&(r=(1n<<BigInt(2*t))-r-1n);const o=oi(r,t,i,s,A);if(s){const{offset:[e,t],flips:[n,A]}=o;o.offset=[t,e],n===Kr&&Nn.add(o.offset,o.offset,si),A===Kr&&Nn.subtract(o.offset,o.offset,si)}if(i){const{offset:[e,n],flips:A}=o,r=(1<<t)-(e+n);A[0]=-A[0],o.offset[1]=r,o.flips=A}return o})(e,s,i);return function(e,t,n){const A=zA.clone();Nn.transformMat2(ui,n.offset,$A),1===n.flips[0]&&n.flips[1]===Kr&&A.rotate180();const{q:r}=n,i=n.flips[0]+n.flips[1];return((-2===i||2===i)&&r>1||0===i&&(0===r||3===r))&&A.reflectY(),n.flips[0]===Kr&&n.flips[1]===Kr?A.rotate180():n.flips[0]===Kr?A.translate(li):n.flips[1]===Kr&&A.translate(ai),A.translate(ui),A.scale(1/2**e),A.transform(ci[t]),A}(s,r,o)}var gi=12742014.4/Math.sqrt(15),bi=new Array(31);bi[0]=12742014.4/Math.sqrt(3);for(let wy=1;wy<=30;wy++)bi[wy]=gi/(1<<wy-1);ue.setMatrixArrayType(Float64Array);var yi=function(e){var t,n=void 0!==(e=e||{})?e:{},A={};for(t in n)n.hasOwnProperty(t)&&(A[t]=n[t]);var r,i="";"undefined"!=typeof document&&document.currentScript&&(i=document.currentScript.src),i=0!==i.indexOf("blob:")?i.substr(0,i.lastIndexOf("/")+1):"",r=function(e,t,n){var A=new XMLHttpRequest;A.open("GET",e,!0),A.responseType="arraybuffer",A.onload=function(){if(200==A.status||0==A.status&&A.response)t(A.response);else{var r=j(e);r?t(r.buffer):n()}},A.onerror=n,A.send(null)};var s=n.print||console.log.bind(console),o=n.printErr||console.warn.bind(console);for(t in A)A.hasOwnProperty(t)&&(n[t]=A[t]);A=null,n.arguments&&n.arguments;var a=0;var l=!1;function c(e){var t,A=n["_"+e];return t="Cannot call unknown function "+e+", make sure it is exported",A||Ae("Assertion failed: "+t),A}function u(e,t,n,A,r){var i={string:function(e){var t=0;if(null!=e&&0!==e){var n=1+(e.length<<2);(function(e,t,n){(function(e,t,n,A){if(!(A>0))return 0;for(var r=n,i=n+A-1,s=0;s<e.length;++s){var o=e.charCodeAt(s);if(o>=55296&&o<=57343)o=65536+((1023&o)<<10)|1023&e.charCodeAt(++s);if(o<=127){if(n>=i)break;t[n++]=o}else if(o<=2047){if(n+1>=i)break;t[n++]=192|o>>6,t[n++]=128|63&o}else if(o<=65535){if(n+2>=i)break;t[n++]=224|o>>12,t[n++]=128|o>>6&63,t[n++]=128|63&o}else{if(n+3>=i)break;t[n++]=240|o>>18,t[n++]=128|o>>12&63,t[n++]=128|o>>6&63,t[n++]=128|63&o}}t[n]=0})(e,d,t,n)})(e,t=Y(n),n)}return t},array:function(e){var t=Y(e.length);return function(e,t){h.set(e,t)}(e,t),t}};var s=c(e),o=[],a=0;if(A)for(var l=0;l<A.length;l++){var u=i[n[l]];u?(0===a&&(a=X()),o[l]=u(A[l])):o[l]=A[l]}var f=s.apply(null,o);return f=function(e){return"string"===t?B(e):"boolean"===t?Boolean(e):e}(f),0!==a&&W(a),f}var f,h,d,p,m,g,b,y="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function B(e,t){return e?function(e,t,n){for(var A=t+n,r=t;e[r]&&!(r>=A);)++r;if(r-t>16&&e.subarray&&y)return y.decode(e.subarray(t,r));for(var i="";t<r;){var s=e[t++];if(128&s){var o=63&e[t++];if(192!=(224&s)){var a=63&e[t++];if((s=224==(240&s)?(15&s)<<12|o<<6|a:(7&s)<<18|o<<12|a<<6|63&e[t++])<65536)i+=String.fromCharCode(s);else{var l=s-65536;i+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else i+=String.fromCharCode((31&s)<<6|o)}else i+=String.fromCharCode(s)}return i}(d,e,t):""}function v(e,t){return e%t>0&&(e+=t-e%t),e}function C(e){f=e,n.HEAP8=h=new Int8Array(e),n.HEAP16=p=new Int16Array(e),n.HEAP32=m=new Int32Array(e),n.HEAPU8=d=new Uint8Array(e),n.HEAPU16=new Uint16Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=g=new Float32Array(e),n.HEAPF64=b=new Float64Array(e)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var _=n.TOTAL_MEMORY||33554432;function M(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var A=t.func;"number"==typeof A?void 0===t.arg?n.dynCall_v(A):n.dynCall_vi(A,t.arg):A(void 0===t.arg?null:t.arg)}else t()}}_=(f=n.buffer?n.buffer:new ArrayBuffer(_)).byteLength,C(f),m[7096]=5271296;var w=[],T=[],E=[],x=[];function S(e){w.unshift(e)}function I(e){x.unshift(e)}var R=Math.abs,L=Math.ceil,D=Math.floor,P=Math.min,F=0,N=null;n.preloadedImages={},n.preloadedAudios={};var O,U,k=null,G="data:application/octet-stream;base64,";function V(e){return String.prototype.startsWith?e.startsWith(G):0===e.indexOf(G)}k="data:application/octet-stream;base64,AAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAAQAAAAQAAAADAAAABgAAAAUAAAACAAAAAAAAAAIAAAADAAAAAQAAAAQAAAAGAAAAAAAAAAUAAAADAAAABgAAAAQAAAAFAAAAAAAAAAEAAAACAAAABAAAAAUAAAAGAAAAAAAAAAIAAAADAAAAAQAAAAUAAAACAAAAAAAAAAEAAAADAAAABgAAAAQAAAAGAAAAAAAAAAUAAAACAAAAAQAAAAQAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAIAAAADAAAAAAAAAAAAAAACAAAAAAAAAAEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAYAAAAAAAAABQAAAAAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAIAAAADAAAABQAAAAYAAAAAAAAAAQAAAAIAAAADAAAABAAAAAYAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAYAAAAAAAAAAwAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAFAAAABAAAAAAAAAABAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAYAAAAAAAAABAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAgAAAAQAAAADAAAACAAAAAEAAAAHAAAABgAAAAkAAAAAAAAAAwAAAAIAAAACAAAA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AAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAADAAAABQAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAUAAAABAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAUAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAIAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAD/////AQAAAAAAAAADAAAABAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAUAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAD//////////wEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAACAAAAAAAAAAAAAAABAAAAAgAAAAYAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAgAAAAAAAAAAAAAAAQAAAAEAAAAFAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAAAAAAAAAAABAAAAAwAAAAcAAAAGAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAADgAAAAIAAAAAAAAAAAAAAAEAAAAAAAAACQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAMAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAAAAAAAAAAAAAEAAAAEAAAACAAAAAoAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAACQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAgAAAAAAAAAAAAAAAQAAAAsAAAAPAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAIAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAgAAAAAAAAAAAAAAAQAAAAwAAAAQAAAADAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAADwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAAAAAAAAAAABAAAACgAAABMAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAAAAAEAAAANAAAAEQAAAA0AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAACAAAAAAAAAAAAAAABAAAADgAAABIAAAAPAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAADwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABIAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATAAAAAgAAAAAAAAAAAAAAAQAAAP//////////EwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAASAAAAAAAAABgAAAAAAAAAIQAAAAAAAAAeAAAAAAAAACAAAAADAAAAMQAAAAEAAAAwAAAAAwAAADIAAAADAAAACAAAAAAAAAAFAAAABQAAAAoAAAAFAAAAFgAAAAAAAAAQAAAAAAAAABIAAAAAAAAAKQAAAAEAAAAhAAAAAAAAAB4AAAAAAAAABAAAAAAAAAAAAAAABQAAAAIAAAAFAAAADwAAAAEAAAAIAAAAAAAAAAUAAAAFAAAAHwAAAAEAAAAWAAAAAAAAABAAAAAAAAAAAgAAAAAAAAAGAAAAAAAAAA4AAAAAAAAACgAAAAAAAAALAAAAAAAAABEAAAADAAAAGAAAAAEAAAAXAAAAAwAAABkAAAADAAAAAAAAAAAAAAABAAAABQAAAAkAAAAFAAAABQAAAAAAAAACAAAAAAAAAAYAAAAAAAAAEgAAAAEAAAAKAAAAAAAAAAsAAAAAAAAABAAAAAEAAAADAAAABQAAAAcAAAAFAAAACAAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAEAAAAAEAAAAFAAAAAAAAAAIAAAAAAAAABwAAAAAAAAAVAAAAAAAAACYAAAAAAAAACQAAAAAAAAATAAAAAAAAACIAAAADAAAADgAAAAEAAAAUAAAAAwAAACQAAAADAAAAAwAAAAAAAAANAAAABQAAAB0AAAAFAAAAAQAAAAAAAAAHAAAAAAAAABUAAAAAAAAABgAAAAEAAAAJAAAAAAAAABMAAAAAAAAABAAAAAIAAAAMAAAA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74auECWhw7+cjSACjzniv8CZ+wUhN9I/1uGEKzup6z+/GYr/04bavwmkNHp7xee/F2NMZVAA1z+82s+x2BLivwr2ytbJ9em/KwEH1sMS1r8yp/2LhTfev81i5RexJsy/BlIKPVwR5b95Wyu0/Qjnv5DjoT7YYcs/nBhKZ6zrwr8wRYS7Nebuv3OW6geh+Lu/SLrixebL3j+pcyymN9Xrv8rHIFfWehZAMBwUdlo0DECTUc17EOb2PxpVB1SWChdAzjbhb9pTDUDQhmdvECX5P9FlMKCC9+g/IIAzjELgE0DajDngMv8GQFhWDmDPjNs/y1guLh96EkAxPi8k7DIEQJCc4URlhRhA3eLKKLwkEECqpNAyTBD/P6xpjXcDiwVAFtl//cQm4z+Ibt3XKiYTQM7mCLUb3QdAoM1t8yVv7D8aLZv2Nk8UQEAJPV5nQwxAtSsfTCoE9z9TPjXLXIIWQBVanC5W9AtAYM3d7Adm9j++5mQz1FoWQBUThyaVBghAwH5muQsV7T89Q1qv82MUQJoWGOfNuBdAzrkClkmwDkDQjKq77t37Py+g0dtitsE/ZwAMTwVPEUBojepluNwBQGYbtuW+t9w/HNWIJs6MEkDTNuQUSlgEQKxktPP5TcQ/ixbLB8JjEUCwuWjXMQYCQAS/R09FkRdAowpiZjhhDkB7LmlczD/7P01iQmhhsAVAnrtTwDy84z/Z6jfQ2TgTQChOCXMnWwpAhrW3daoz8z/HYJvVPI4VQLT3ik5FcA5Angi7LOZd+z+NNVzDy5gXQBXdvVTFUA1AYNMgOeYe+T8+qHXGCwkXQKQTOKwa5AJA8gFVoEMW0T+FwzJyttIRQAEAAAD/////BwAAAP////8xAAAA/////1cBAAD/////YQkAAP////+nQQAA/////5HLAQD/////95AMAP/////B9lcAAAAAAAAAAAAAAAAAAgAAAP////8OAAAA/////2IAAAD/////rgIAAP/////CEgAA/////06DAAD/////IpcDAP/////uIRkA/////4LtrwAAAAAAAAAAAAAAAAAAAAAAAgAAAP//////////AQAAAAMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////wIAAAD//////////wEAAAAAAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA/////////////////////wEAAAD///////////////8CAAAA////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD///////////////////////////////8CAAAA////////////////AQAAAP////////////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAAAQAAAP//////////AgAAAP//////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAAEAAAD//////////wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAgAAAAAAAAACAAAAAQAAAAEAAAACAAAAAgAAAAAAAAAFAAAABQAAAAAAAAACAAAAAgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAABAAAAAgAAAAIAAAACAAAAAAAAAAUAAAAGAAAAAAAAAAIAAAACAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAEAAAADAAAAAgAAAAIAAAAAAAAABQAAAAcAAAAAAAAAAgAAAAIAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAACAAAAAQAAAAQAAAACAAAAAgAAAAAAAAAFAAAACAAAAAAAAAACAAAAAgAAAAMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAACAAAAAAAAAAIAAAABAAAAAAAAAAIAAAACAAAAAAAAAAUAAAAJAAAAAAAAAAIAAAACAAAAAwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAACAAAAAAAAAAMAAAAOAAAAAgAAAAAAAAACAAAAAwAAAAAAAAAAAAAAAgAAAAIAAAADAAAABgAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAgAAAAIAAAAAAAAAAwAAAAoAAAACAAAAAAAAAAIAAAADAAAAAQAAAAAAAAACAAAAAgAAAAMAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAgAAAAAAAAADAAAACwAAAAIAAAAAAAAAAgAAAAMAAAACAAAAAAAAAAIAAAACAAAAAwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAACAAAAAAAAAAMAAAAMAAAAAgAAAAAAAAACAAAAAwAAAAMAAAAAAAAAAgAAAAIAAAADAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAgAAAAIAAAAAAAAAAwAAAA0AAAACAAAAAAAAAAIAAAADAAAABAAAAAAAAAACAAAAAgAAAAMAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAgAAAAAAAAADAAAABgAAAAIAAAAAAAAAAgAAAAMAAAAPAAAAAAAAAAIAAAACAAAAAwAAAAsAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAIAAAACAAAAAAAAAAMAAAAHAAAAAgAAAAAAAAACAAAAAwAAABAAAAAAAAAAAgAAAAIAAAADAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAgAAAAIAAAAAAAAAAwAAAAgAAAACAAAAAAAAAAIAAAADAAAAEQAAAAAAAAACAAAAAgAAAAMAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAACAAAAAgAAAAAAAAADAAAACQAAAAIAAAAAAAAAAgAAAAMAAAASAAAAAAAAAAIAAAACAAAAAwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAACQAAAAIAAAACAAAAAAAAAAMAAAAFAAAAAgAAAAAAAAACAAAAAwAAABMAAAAAAAAAAgAAAAIAAAADAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAgAAAAAAAAACAAAAAQAAABMAAAACAAAAAgAAAAAAAAAFAAAACgAAAAAAAAACAAAAAgAAAAMAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABEAAAACAAAAAAAAAAIAAAABAAAADwAAAAIAAAACAAAAAAAAAAUAAAALAAAAAAAAAAIAAAACAAAAAwAAABEAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAIAAAAAAAAAAgAAAAEAAAAQAAAAAgAAAAIAAAAAAAAABQAAAAwAAAAAAAAAAgAAAAIAAAADAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAgAAAAAAAAACAAAAAQAAABEAAAACAAAAAgAAAAAAAAAFAAAADQAAAAAAAAACAAAAAgAAAAMAAAATAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAACAAAAAAAAAAIAAAABAAAAEgAAAAIAAAACAAAAAAAAAAUAAAAOAAAAAAAAAAIAAAACAAAAAwAAAAIAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAAACAAAAAQAAAAAAAAABAAAAAgAAAAEAAAAAAAAAAgAAAAAAAAAFAAAABAAAAAAAAAABAAAABQAAAAAAAAAAAAAABQAAAAQAAAAAAAAAAQAAAAUAAAAEAAAAAAAAAAUAAAAAAAAAAgAAAAEAAAAAAAAAAQAAAAIAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAEAAAACAAAAAQAAAAAAAAACAAAAAgAAAAAAAAABAAAAAAAAAAAAAAAFAAAABAAAAAAAAAABAAAABQAAAAAAAAAAAAAABQAAAAQAAAAAAAAAAQAAAAUAAAAEAAAAAAAAAAUAAAAFAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAABAAAAAAEAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAOgehWlKfUEEz1zLi+JsiQa2og3wcMfVAWCbHorc0yEDi+Yn/Y6mbQJ11/mfsnG9At6bnG4UQQkBvMCQWKqUUQJVmwwswmOc/3hVgVBL3uj//qqOEOdGOPw/WDN4gnGE/H3ANkCUgND+AA8btKgAHPwTXBqJVSdo+XfRQAqsKrj4fc+zLYbSPQklEmCZHv2FCUP+uDso1NEKYtPhwphUHQptxnyFXYdpB7CddZAMmrkGAt1AxSTqBQUibBVdTsFNBSuX3MV+AJkFocv82SLf5QAqmgj7AY81A23VDSEnLoEDGEJVSeDFzQDYrqvBk70VA8U157pcRGUBWfEF+ZKbsP6phvycGBZRAJbod0OgwfkCp+L8jatBmQCjl3pGrPlFAfMWm114SOkButwtqS7UjQHQwbcjXyw1A8jnLuuyA9j9KwjL0VwHhPyotk0lcs8k/Q5PvEs9rsz+SfsOQEVqdPzUAKDojLoY/WJz/kcjCcD8YFu070FRZPyoLC2BdJEM/YOXQAuiMM0HIBz1bw3sdQdV46aaHRwZByatzjDPX8EDb3Jie8HXZQCJxj6ULP8NAUaG6uRAZrUCWdmou5/mVQLb9huRPm4BAhvoCHygZaUCuX/I3SPdSQC9/bC/1qTxAfKxsYQ6pJUCuslH+N14QQMS/cv7SvPg/Ol8maYKx4j8AAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAD/////AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA/////wAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAP////8AAAAABQAAAAAAAAAAAAAAAAAAAAAAAAD/////BQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAABAAAAAAAAAAUAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAEAAQAAAQEAAAAAAAEAAAABAAAAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAKriWFiWZfg/Y2nmTbY/8z8MHSPSqmnjv6hnn18HR3c/quJYWJZl+D/jq5TzDdzyPwwdI9KqaeO/u0kC1eFSBECq4lhYlmX4P69pJmt7c/E/NnkJi6jSBsDESFlzKkr6P33ArMz7sfY/o2q2uqM08D+oZ59fB0d3PzEqCi3qrvK/kmm4ANp49D+4wS2wzhzvP9WJvyAnx+E/upcY75RVx7+95t+9y0T1P9L18g1caO0/k6CkRyVzAEBf99+e/GjxP6QMsuuLQ/U/PlP4Qr8q7j8Mb/GO2GMCwLl2K/DQIghAePiwytEp9D9UHrsuI/nqPzjMedJ+yuy/k6xgf58n/L+XoQtn22DzP2lzCnsYk+s/JhUSDI4P8z+8lFcBhgTcPxOqKRxEX/M/89MEdoPQ6j8OKQaXDob7vzWwNvblgAPAzGkxMcl88j9Nm4okPkbpP0vI89vxSgRAdac2Z6W2/T+6UFOMC3zyP/+2XEF3hug/QqhELwGKCMAwdlQerEoEQFcr/B+VnvE/hB1hfFzT5j8wdsE/Da64P0hIvnF/sOC/KH/hrXUg8T9bI5OQHaLlP+mYzla7td6/CtKG6iOm8b8FW3TV8oXwP8ORhtNuJ+c/q8JrTMz/AcC8PaUl+PUFwAXv9rkMT/A/m+sAswr15D+7hk/O3yvkP6c/yVsOHKI/qqAX9idJ8D/8hNz1KNPiP7xSXh3Ggvg/epbkiKr57T/23/LB1GLvP4GTTeNZi+M/W4TqlTheBcDupZgIdYUIQGwlcW3YZO8/tQvDXQ3H4j8Bt+sf9DkAQMdFie+nNvg/Z5Uh1wDX7j9h5X2d4KjhPxMJ1ZVT4Pa/evqB8xB//7+W183U9QLsPwzNxsC7AOA/af/LqCnK/r/lPceQ0FQDwHoY0nYIW+w/bHNSHrTg4D/DFcMAdabuv2sz5Ojhnve/FvLf01HN6z/tEDL2Hz/gP0bBv0KUhPA/pd7sEnMc4D8EGon4Lo7sP5NVbYtSON8/DAMC50odBkB+Z2J8MGYCQIhlM1gubOo/FssiPwWy4D8OIlGqRnkCQAd1vopp6f4/QS1keLLK6T9rfoBuT7LZP3KQbH5ugwjAjqVPXTmbBUBL/JxcqR3qP3oSeovuktg/Y6pRhJmqy7+0kwuU0Yjmv2wvsfFmQ+g/R98lJFqQ2T/IGb5gjLkCwK3mNff3kQbAqDznPFM86T+iiP0FfsvYP7fzKG6Mls0/h7+at2btzL8tsUTgk+LmP/YEIrTDINU/WmwKoVjA5L9aC02r6FHxvzzFCT/Qg+Y/nx0V97en0j8+1toJOm77P1kZ7h8KjfQ/GBbbqxgk5j9RGXM79G/SP+beHsWmweQ/9REi4eX0xD/V9s+kmMHkP+pb9yNs09A/c5ERjVDTAECqEr3OBCH7P14ILfMECOU/piRx4P8P0j+JYU//bfL0Pw62fw28B+w/l5YW2Ga45D9+CyKRbenOP5cH6fHy1/S/o/egk03++r91nTYRL/bjP3fHN6OJVdA/7xXQh1XLBcAB3g6tBdUIQKW2KnGYjeQ/SqIpagclyz8F9P3YgNL6v9H6NBsZ8QDAW2k5L5Qs4z/0axa1l6zLP1GE65Mu4wNAwfX+BYmWAEBBgJP90M3hP6/03qhPLdA/zqo5bJz2778/ESlPCTn1v7JkhGyvzuE/DM7sj5twwz/6xbXLavYGQH29RFRGkgNA7bOXVSJ54T9fEhTHO/TDP+8t+HMOiwDAxa0SbGTtA8Atii7y0mLgP4cecHFB3sM/uPUpyv+K7j8nktD1/WvhP2cWmi772d8/Fj7uU9kEvD8oKOESLzKmvwSdCqrHdNu/XCluGsvI3T929OW5md+uP9dP6rXcZNq/gXM+ggzL6b+eKjsPgJncP6i1e9aVu7E/2CnPNJyD1D/DnyGgSe+xvy8k7g9bp9s/nYmLvHn1sz9cFOwApH8IwGa6Mjy9cgZAJr95SiSW2z8rCkhOFvqdP3SIKmO/UwPAEy0zkN7bBsCds8Hg/13YP1zv413hVGi/FVtqixSn6L9XAPQGul3yv7SGu2BoCNk/n94bv7Maj79p13T6X9z3P45MPCW3WvI/rU/8/LRj1T9cgR6SXd+ZPymL2DstbPI/8s/pAkIz6z/fmoB+8efYPz2XyfWgYaa/6wys72AW/j8LZImhgrf3P729Zla/n9U/ySB8B3PBqL8O2nhevvbxv17+5A+n6fe/YrGIqEGB1T+wCEGbkhaxv989QHVE5wFAzd12PTu3/T9AHUPZY2DUP3SQDST0zq2/JCxAlIoj5T+Mhe1IJkrQP/cRpl8QhtU/amc4seFts79khiUSVaz3vxYfWtjPwf2/CHscxQqD0j/ctUBQ9my3v0POnFiyXv2/pjjn2Ju/AcDk45DwBhPRP/GjwlCrv7m/aT2ciwolBsAQOzHr/wUJQCzpq5UYvtI/gDCf3SlCwb+4i7S+mukEQBDA1f8mowFA2utnRN3KyT9T+9EYAVG6v9/IVZ0enrE/7NbRtdGfzr/8y8GpRz7LP3U0vTSk18e/JzHEcwiBB0AGm8Q7AJkEQNLciyt4Esk/gLou5zoQxr+RrOfM91oBwEzd36KybgTAgLou5zoQxj/S3IsreBLJv1gCch0OHO8/FD+RxSLN4j91NL00pNfHP/zLwalHPsu/nL7/By4Pyr8tSP5h7CPiv1P70RgBUbo/2utnRN3Kyb/KfllfCpUIwLkP5zj+NwdAgDCf3SlCwT8s6auVGL7Sv2aFPlaC4eC/XrS5UVH77b/xo8JQq7+5P+TjkPAGE9G/Q30/RYbn1z8FF/ISafuLv9y1QFD2bLc/CHscxQqD0r/fi+tPROX0P6vRc+19ie0/amc4seFtsz/3EaZfEIbVv77TYpahl/o/DDsu0CaC9D90kA0k9M6tP0AdQ9ljYNS/CCI0rxjZA8BgfCaLthgHwLAIQZuSFrE/YrGIqEGB1b8kvQ982+rsv4J8EWu7jPS/ySB8B3PBqD+9vWZWv5/VvwrAByWcJgBAxFujmE9a+j89l8n1oGGmP9+agH7x59i/N03cuJUt9L8X9v4GdIz6v1yBHpJd35m/rU/8/LRj1b8mz69sydf/vyu5idMqVQLAn94bv7Majz8AhrtgaAjZv+aCE66WZ/q/lA1Mgz/p/79c7+Nd4VRoP52zweD/Xdi/TJZpMTb4AkDLWZShPOb/PysKSE4W+p2/Jr95SiSW27/PkmbE7zjnP6UAiCDmMNI/nYmLvHn1s78vJO4PW6fbv5MWA2vqSrQ/V5WLwPB51b+otXvWlbuxv54qOw+Amdy/1keqzYeRBsApIEMHgZIIQHb05bmZ366/XCluGsvI3b8W44a9X9UFQEeQtDM4rwJAFj7uU9kEvL9nFpou+9nfv3Co+JcyyQhAcdkCX2KzBUCHHnBxQd7Dvy2KLvLSYuC/o6+5YTt/AcCHCNDW+8YEwF8SFMc79MO/7bOXVSJ54b9E/pfA2S3xPzD9xaBb0uQ/DM7sj5tww7+yZIRsr87hv7c4c0SEXNG/Tr79/9M+5r+v9N6oTy3Qv5uAk/3QzeG/XcI1OVQkAUAQSV9Z7Qr9P/RrFrWXrMu/W2k5L5Qs479Zo2IBM/vkv6FuipzkFvG/SqIpagcly7+ltipxmI3kv0pmis91cfc/gWQecsRh8D93xzejiVXQv3WdNhEv9uO/D7mgYy612j+PyVPNaT2jv34LIpFt6c6/l5YW2Ga45L+LUp+2A2z9P39i5xSpRfc/piRx4P8P0r9eCC3zBAjlv5n4OKmIUf2/jj/kUAwgAsDqW/cjbNPQv9X2z6SYweS/aTdljlWd8L94R8vZ8SL3v1EZczv0b9K/GBbbqxgk5r9XdfyikfEDwPILMvas0gfAnx0V97en0r88xQk/0IPmvxGErZ681fa/9kCaiOy2/b/2BCK0wyDVvy2xROCT4ua/+5EBLOXxA0B7p53+BnkAQKKI/QV+y9i/qDznPFM86b/snWGNkkgHwC+ByugkUwdAR98lJFqQ2b9sL7HxZkPovyJNGM67oek/HzNy6BqA1D96EnqL7pLYv0v8nFypHeq/axL/u1FnB0AkSEHvxn8DQGt+gG5Pstm/QS1keLLK6b/Sk/O6mtGzPxU8pLcPNty/FssiPwWy4L+IZTNYLmzqvw4szKfSouq/G+XJHY1a87+TVW2LUjjfvwQaifgujuy/3VARaoMl2L9NFodfK+/qv+0QMvYfP+C/FvLf01HN67+ETOQysd8AwH71iI/eGgXAbHNSHrTg4L96GNJ2CFvsv6BnExReeAFA5CakvxSl+j8MzcbAuwDgv5bXzdT1Auy/uVq8/8x58z+uvPMNqzTnP2HlfZ3gqOG/Z5Uh1wDX7r8PUbMSo2P7P9VfBrXlxPI/tQvDXQ3H4r9sJXFt2GTvvyDssGgO0PG/WxT/uE4N+r+Bk03jWYvjv/bf8sHUYu+/rUXN8hUe3j9m5HB1yZCzv/yE3PUo0+K/qqAX9idJ8L9mByqLMMH5v4kHC7KQowHAm+sAswr15L8F7/a5DE/wv2JLsGADFwTAKQjVGovZCMDDkYbTbifnvwVbdNXyhfC/malhH7yI7D+oevd0GWDZP1sjk5AdouW/KH/hrXUg8b8KWmrpQ0sFQAzEAF/pTgBAhB1hfFzT5r9XK/wflZ7xv18hRuqKXAjA/5rUd9v1BED/tlxBd4bov7pQU4wLfPK/4pnwn0T/sj/c277XPF3jv02biiQ+Rum/zGkxMcl88r8Yk0HhJVzjv62yUUFRjfS/89MEdoPQ6r8TqikcRF/zvxQxghHovfY/cfM1eFWE5j9pcwp7GJPrv5ehC2fbYPO/KUV2nGg0/795OhmUaqEFwFQeuy4j+eq/ePiwytEp9L8DuqWfW+8BQLytJylXHPY/PlP4Qr8q7r+kDLLri0P1vxT4ShWL+Oo/DMsWg0zlv7/S9fINXGjtv73m373LRPW/+xg/Gaxd8b94MdQEfW0AwLjBLbDOHO+/kmm4ANp49L+cShSMMbAEwKyjUgWirAdAo2q2uqM08L99wKzM+7H2v3RdlNBXFgnA8S9+ewyV/z+vaSZre3Pxv6riWFiWZfi/2J7VSZZ60j+LES81zPn3v+OrlPMN3PK/quJYWJZl+L/OZbufkEcEQLCNB/1lPOO/Y2nmTbY/87+q4lhYlmX4v7CNB/1lPOO/zmW7n5BHBEBwKD1Aa57LP/XsSsw7RbU/PMDPJGsfoD/TqningGKIPzFtCLYmb3I/qYfrJr7eWz9pQmleXRFFP0rWlJkA2i8/pCvcttgTGD9Dt8IWbjMCPyCG4GRlhOs+1JI2GhDN1D7ns8cGvXK/Pi8m8UTJxac+hNTfA2z4kT7GI8kjLyt7Pv//////HwAI//////8zEAj/////fzIgCP////9vMjAI/////2MyQAj///8/YjJQCP///zdiMmAI////M2IycAj//78zYjKACP//qzNiMpAI/3+rM2IyoAj/D6szYjKwCP8DqzNiMsAIvwOrM2Iy0AifA6szYjLgCJkDqzNiMvAI//////8/Dwj//////ysfCP////9/KS8I/////z8pPwj/////OSlPCP///z84KV8I////Dzgpbwj///8OOCl/CP//Hw44KY8I//8PDjgpnwj/fw0OOCmvCP8PDQ44Kb8I/w0NDjgpzwj/DA0OOCnfCMcMDQ44Ke8IxAwNDjgp/wgHAAAABwAAAAEAAAACAAAABAAAAAMAAAAAAAAAAAAAAAcAAAADAAAAAQAAAAIAAAAFAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAAEAAAADAAAADgAAAAYAAAALAAAAAgAAAAcAAAABAAAAGAAAAAUAAAAKAAAAAQAAAAYAAAAAAAAAJgAAAAcAAAAMAAAAAwAAAAgAAAACAAAAMQAAAAkAAAAOAAAAAAAAAAUAAAAEAAAAOgAAAAgAAAANAAAABAAAAAkAAAADAAAAPwAAAAsAAAAGAAAADwAAAAoAAAAQAAAASAAAAAwAAAAHAAAAEAAAAAsAAAARAAAAUwAAAAoAAAAFAAAAEwAAAA4AAAAPAAAAYQAAAA0AAAAIAAAAEQAAAAwAAAASAAAAawAAAA4AAAAJAAAAEgAAAA0AAAATAAAAdQAAAA8AAAATAAAAEQAAABIAAAAQAAAABgAAAAIAAAADAAAABQAAAAQAAAAAAAAAAAAAAAAAAAAGAAAAAgAAAAMAAAABAAAABQAAAAQAAAAAAAAAAAAAAAcAAAAFAAAAAwAAAAQAAAABAAAAAAAAAAIAAAAAAAAAAgAAAAMAAAABAAAABQAAAAQAAAAGAAAAAAAAAAAAAAAYLURU+yH5PxgtRFT7Ifm/GC1EVPshCUAYLURU+yEJwGFsZ29zLmMAaDNOZWlnaGJvclJvdGF0aW9ucwBjZWxsc1RvTXVsdGlQb2x5LmMAY2VsbFRvRWRnZUFyY3MAAAEDAgQABAMFAQJjYW5jZWxBcmNQYWlycwBjcmVhdGVTb3J0YWJsZUxvb3AAZGlyZWN0ZWRFZGdlLmMAZGlyZWN0ZWRFZGdlVG9Cb3VuZGFyeQBhZGphY2VudEZhY2VEaXJbdG1wRmlqay5mYWNlXVtmaWprLmZhY2VdID09IEtJAGZhY2VpamsuYwBfZmFjZUlqa1BlbnRUb0NlbGxCb3VuZGFyeQBhZGphY2VudEZhY2VEaXJbY2VudGVySUpLLmZhY2VdW2ZhY2UyXSA9PSBLSQBfZmFjZUlqa1RvQ2VsbEJvdW5kYXJ5AGgzSW5kZXguYwBjb21wYWN0Q2VsbHMAdmVjM1RvQ2VsbABjZWxsVG9DaGlsZFBvcwB2YWxpZGF0ZUNoaWxkUG9zAHJldkRpciAhPSBJTlZBTElEX0RJR0lUAGxvY2FsaWouYwBjZWxsVG9Mb2NhbElqawBiYXNlQ2VsbCAhPSBvcmlnaW5CYXNlQ2VsbAAhKG9yaWdpbk9uUGVudCAmJiBpbmRleE9uUGVudCkAYmFzZUNlbGwgPT0gb3JpZ2luQmFzZUNlbGwALi4vaW5jbHVkZS9jb29yZGlqay5oAF91cEFwN0NoZWNrZWQAX3VwQXA3ckNoZWNrZWQAYmFzZUNlbGwgIT0gSU5WQUxJRF9CQVNFX0NFTEwAbG9jYWxJamtUb0NlbGwAIV9pc0Jhc2VDZWxsUGVudGFnb24oYmFzZUNlbGwpAGJhc2VDZWxsUm90YXRpb25zID49IDAAZ3JpZFBhdGhDZWxsc0ludGVycG9sYXRlAHBvbHlmaWxsLmMAaXRlclN0ZXBQb2x5Z29uQ29tcGFjdAAwAHZlcnRleC5jAHZlcnRleFJvdGF0aW9ucwBjZWxsVG9WZXJ0ZXg=";function H(){return h.length}var Q="function"==typeof atob?atob:function(e){var t,n,A,r,i,s,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a="",l=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{t=o.indexOf(e.charAt(l++))<<2|(r=o.indexOf(e.charAt(l++)))>>4,n=(15&r)<<4|(i=o.indexOf(e.charAt(l++)))>>2,A=(3&i)<<6|(s=o.indexOf(e.charAt(l++))),a+=String.fromCharCode(t),64!==i&&(a+=String.fromCharCode(n)),64!==s&&(a+=String.fromCharCode(A))}while(l<e.length);return a};function j(e){if(V(e))return function(e){try{for(var t=Q(e),n=new Uint8Array(t.length),A=0;A<t.length;++A)n[A]=t.charCodeAt(A);return n}catch(r){throw new Error("Converting base64 string to bytes failed.")}}(e.slice(G.length))}var z=function(e,t,n){var A=new e.Int8Array(n),r=new e.Int32Array(n);new e.Uint8Array(n),new e.Float32Array(n);var i=new e.Float64Array(n),s=0|t.o,o=0|t.p,a=e.Math.floor,l=e.Math.abs,c=e.Math.sqrt,u=e.Math.cos,f=e.Math.sin,h=e.Math.tan,d=e.Math.acos,p=e.Math.asin,m=e.Math.atan,g=e.Math.atan2,b=e.Math.ceil,y=e.Math.imul,B=e.Math.min,v=e.Math.max,C=e.Math.clz32,_=t.a,M=t.b,w=t.c,T=t.d,E=t.e,x=t.f,S=t.g,I=t.h,R=t.i,L=28416;function D(e,t,n,A){return 0|P(e|=0,t|=0,n|=0,A|=0,0)}function P(e,t,n,A,i){var s,o=0,a=0,l=0,c=0;if(s=L,L=L+16|0,a=s,!(0|F(e|=0,t|=0,n|=0,A|=0,i|=0)))return L=s,0|(A=0);do{if((0|n)>=0){if((0|n)>13780509){if(0|(o=0|qe(15,a)))break;a=0|r[(l=a)>>2],l=0|r[l+4>>2]}else c=0|Nt(0|n,0|(o=((0|n)<0)<<31>>31),3,0),l=0|w(),o=0|Rt(0|n,0|o,1,0),o=0|Rt(0|(o=0|Nt(0|c,0|l,0|o,0|w())),0|w(),1,0),l=0|w(),r[a>>2]=o,r[a+4>>2]=l,a=o;if(qt(0|A,0,a<<3),0|i){qt(0|i,0,a<<2),o=0|N(e,t,n,A,i,a,l,0);break}(o=0|xt(a,4))?(c=0|N(e,t,n,A,o,a,l,0),Et(o),o=c):o=13}else o=2}while(0);return L=s,0|(c=o)}function F(e,t,n,A,i){e|=0,t|=0,n|=0,A|=0,i|=0;var s,o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0;if(o=L,L=L+16|0,m=o+8|0,r[(p=s=o)>>2]=e,r[p+4>>2]=t,(0|n)<0)return L=o,0|(m=2);if(r[(a=A)>>2]=e,r[a+4>>2]=t,(a=!!(0|i))&&(r[i>>2]=0),0|we(e,t))return L=o,0|(m=9);r[m>>2]=0;e:do{if((0|n)>=1)if(a)for(h=1,f=0,d=0,p=1,a=e;;){if(!(f|d)){if(0|(a=0|O(a,t,4,m,s)))break e;if(0|we(a=0|r[(t=s)>>2],t=0|r[t+4>>2])){a=9;break e}}if(0|(a=0|O(a,t,0|r[26864+(d<<2)>>2],m,s)))break e;if(a=0|r[(t=s)>>2],t=0|r[t+4>>2],r[(e=A+(h<<3)|0)>>2]=a,r[e+4>>2]=t,r[i+(h<<2)>>2]=p,l=(0|(e=f+1|0))==(0|p),u=6==(0|(c=d+1|0)),0|we(a,t)){a=9;break e}if((0|(p=p+(u&l&1)|0))>(0|n)){a=0;break}h=h+1|0,f=l?0:e,d=l?u?0:c:d}else for(h=1,f=0,d=0,p=1,a=e;;){if(!(f|d)){if(0|(a=0|O(a,t,4,m,s)))break e;if(0|we(a=0|r[(t=s)>>2],t=0|r[t+4>>2])){a=9;break e}}if(0|(a=0|O(a,t,0|r[26864+(d<<2)>>2],m,s)))break e;if(a=0|r[(t=s)>>2],t=0|r[t+4>>2],r[(e=A+(h<<3)|0)>>2]=a,r[e+4>>2]=t,l=(0|(e=f+1|0))==(0|p),u=6==(0|(c=d+1|0)),0|we(a,t)){a=9;break e}if((0|(p=p+(u&l&1)|0))>(0|n)){a=0;break}h=h+1|0,f=l?0:e,d=l?u?0:c:d}else a=0}while(0);return L=o,0|(m=a)}function N(e,t,n,A,i,s,o,a){n|=0,A|=0,i|=0,a|=0;var l,c,u,f=0,h=0,d=0,p=0,m=0,g=0,b=0;if(u=L,L=L+16|0,l=u+8|0,c=u,f=0|Ut(0|(e|=0),0|(t|=0),0|(s|=0),0|(o|=0)),d=0|w(),!(!(0|(b=0|r[(g=p=A+(f<<3)|0)>>2]))&!(0|(g=0|r[g+4>>2]))|(h=(0|b)==(0|e)&(0|g)==(0|t))))do{f=0|Ot(0|(f=0|Rt(0|f,0|d,1,0)),0|w(),0|s,0|o),d=0|w(),h=(0|(g=0|r[(b=p=A+(f<<3)|0)>>2]))==(0|e)&(0|(b=0|r[b+4>>2]))==(0|t)}while(!(!(0|g)&!(0|b)|h));if(f=i+(f<<2)|0,h&&(0|r[f>>2])<=(0|a))return L=u,0|(b=0);if(r[(b=p)>>2]=e,r[b+4>>2]=t,r[f>>2]=a,(0|a)>=(0|n))return L=u,0|(b=0);switch(h=a+1|0,r[l>>2]=0,0|(f=0|O(e,t,2,l,c))){case 9:m=9;break;case 0:(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h))||(m=9)}e:do{if(9==(0|m)){switch(r[l>>2]=0,0|(f=0|O(e,t,3,l,c))){case 9:break;case 0:if(0|(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h)))break e;break;default:break e}switch(r[l>>2]=0,0|(f=0|O(e,t,1,l,c))){case 9:break;case 0:if(0|(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h)))break e;break;default:break e}switch(r[l>>2]=0,0|(f=0|O(e,t,5,l,c))){case 9:break;case 0:if(0|(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h)))break e;break;default:break e}switch(r[l>>2]=0,0|(f=0|O(e,t,4,l,c))){case 9:break;case 0:if(0|(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h)))break e;break;default:break e}switch(r[l>>2]=0,0|(f=0|O(e,t,6,l,c))){case 9:break;case 0:if(0|(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h)))break e;break;default:break e}return L=u,0|(b=0)}}while(0);return L=u,0|(b=f)}function O(e,t,n,A,i){e|=0,t|=0,i|=0;var s,o,a,l=0,c=0,u=0,f=0,h=0,d=0;if((n|=0)>>>0>6)return 0|(i=1);c=(0|r[(A|=0)>>2])%6|0,r[A>>2]=c;e:do{if((0|c)>0)for(l=0;;){switch(0|n){case 1:n=5;break;case 5:n=4;break;case 4:n=6;break;case 6:n=2;break;case 2:n=3;break;case 3:n=1}if((0|(l=l+1|0))==(0|c))break e}}while(0);if(a=0|Gt(0|e,0|t,45),w(),(o=127&a)>>>0>121)return 0|(i=5);s=0|xe(e,t),l=0|Gt(0|e,0|t,52),w(),l&=15;e:do{if(l){for(;;){if(u=0|Gt(0|e,0|t,0|(c=3*(15-l|0)|0)),w(),7==(0|(u&=7))){t=5;break}if(d=!(0|Pe(l)),l=l+-1|0,h=0|Vt(7,0,0|c),t&=~w(),e=0|Vt(0|r[(d?432:16)+(28*u|0)+(n<<2)>>2],0,0|c)|e&~h,t|=c=0|w(),!(n=0|r[(d?640:224)+(28*u|0)+(n<<2)>>2])){n=0;break e}if(!l){f=15;break e}}return 0|t}f=15}while(0);15==(0|f)&&(e|=0|Vt(0|(d=0|r[848+(28*o|0)+(n<<2)>>2]),0,45),t=w()|-1040385&t,n=0|r[4272+(28*o|0)+(n<<2)>>2],127&~d||(d=0|Vt(0|r[848+(28*o|0)+20>>2],0,45),t=w()|-1040385&t,n=0|r[4272+(28*o|0)+20>>2],e=0|Ie(d|e,t),t=0|w(),r[A>>2]=1+(0|r[A>>2]))),u=0|Gt(0|e,0|t,45),w(),u&=127;e:do{if(0|Q(u)){t:do{if(1==(0|xe(e,t))){if((0|o)!=(0|u)){if(0|K(u,0|r[7696+(28*o|0)>>2])){e=0|Le(e,t),c=1,t=0|w();break}T(27634,26928,533,26936)}switch(0|s){case 3:e=0|Ie(e,t),t=0|w(),r[A>>2]=1+(0|r[A>>2]),c=0;break t;case 5:e=0|Le(e,t),t=0|w(),r[A>>2]=5+(0|r[A>>2]),c=0;break t;case 0:return 0|(d=9);default:return 0|(d=1)}}else c=0}while(0);if((0|n)>0){l=0;do{e=0|Se(e,t),t=0|w(),l=l+1|0}while((0|l)!=(0|n))}if((0|o)!=(0|u)){if(!(0|j(u))){if(!!(0|c)|5!=(0|xe(e,t)))break;r[A>>2]=1+(0|r[A>>2]);break}switch(127&a){case 8:case 118:break e}3!=(0|xe(e,t))&&(r[A>>2]=1+(0|r[A>>2]))}}else if((0|n)>0){l=0;do{e=0|Ie(e,t),t=0|w(),l=l+1|0}while((0|l)!=(0|n))}}while(0);return r[A>>2]=((0|r[A>>2])+n|0)%6|0,r[(d=i)>>2]=e,r[d+4>>2]=t,0|(d=0)}function U(e,t,n,A){e|=0,t|=0,n|=0,A|=0;var i,s,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0;if(s=L,L=L+16|0,p=s+8|0,r[(d=i=s)>>2]=e,r[d+4>>2]=t,(0|n)<0)return L=s,0|(p=2);if(!n)return r[(p=A)>>2]=e,r[p+4>>2]=t,L=s,0|(p=0);r[p>>2]=0;e:do{if(0|we(e,t))e=9;else{o=0,d=e;do{if(0|(e=0|O(d,t,4,p,i)))break e;if(o=o+1|0,0|we(d=0|r[(t=i)>>2],t=0|r[t+4>>2])){e=9;break e}}while((0|o)<(0|n));r[(h=A)>>2]=d,r[h+4>>2]=t,h=n+-1|0,f=0,e=1;do{if(o=26864+(f<<2)|0,5==(0|f))for(l=0|r[o>>2],a=0,o=e;;){if(0|(e=0|O(0|r[(e=i)>>2],0|r[e+4>>2],l,p,i)))break e;if((0|a)!=(0|h)){if(c=0|r[(u=i)>>2],u=0|r[u+4>>2],r[(e=A+(o<<3)|0)>>2]=c,r[e+4>>2]=u,0|we(c,u)){e=9;break e}e=o+1|0}else e=o;if((0|(a=a+1|0))>=(0|n))break;o=e}else for(l=i,u=0|r[o>>2],c=0,o=e,a=0|r[l>>2],l=0|r[l+4>>2];;){if(0|(e=0|O(a,l,u,p,i)))break e;if(a=0|r[(l=i)>>2],l=0|r[l+4>>2],r[(e=A+(o<<3)|0)>>2]=a,r[e+4>>2]=l,e=o+1|0,0|we(a,l)){e=9;break e}if((0|(c=c+1|0))>=(0|n))break;o=e}f=f+1|0}while(f>>>0<6);e=(0|d)==(0|r[(e=i)>>2])&&(0|t)==(0|r[e+4>>2])?0:9}}while(0);return L=s,0|(p=e)}function k(e,t,n,A){e|=0,t|=0,A|=0;var i,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0;if(i=L,L=L+16|0,a=i,!(n|=0))return r[A>>2]=e,r[A+4>>2]=t,L=i,0|(A=0);do{if((0|n)>=0){if((0|n)>13780509){if(0|(s=0|qe(15,a)))break;s=0|r[(o=a)>>2],o=0|r[o+4>>2]}else f=0|Nt(0|n,0|(s=((0|n)<0)<<31>>31),3,0),o=0|w(),s=0|Rt(0|n,0|s,1,0),s=0|Rt(0|(s=0|Nt(0|f,0|o,0|s,0|w())),0|w(),1,0),o=0|w(),r[(f=a)>>2]=s,r[f+4>>2]=o;if(u=0|xt(s,8)){if(!(f=0|xt(s,4))){Et(u),s=13;break}if(0|(s=0|N(e,t,n,u,f,s,o,0))){Et(u),Et(f);break}if(t=0|r[a>>2],(0|(a=0|r[a+4>>2]))>0|!(0|a)&t>>>0>0){s=0,l=0,c=0;do{!(0|(o=0|r[(e=u+(l<<3)|0)>>2]))&!(0|(e=0|r[e+4>>2]))||(0|r[f+(l<<2)>>2])!=(0|n)||(r[(h=A+(s<<3)|0)>>2]=o,r[h+4>>2]=e,s=s+1|0),l=0|Rt(0|l,0|c,1,0),c=0|w()}while((0|c)<(0|a)|(0|c)==(0|a)&l>>>0<t>>>0)}Et(u),Et(f),s=0}else s=13}else s=2}while(0);return L=i,0|(h=s)}function G(e,t,n,A){n|=0,A|=0;var i,s,o,a=0,l=0;for(o=L,L=L+16|0,i=o,s=o+8|0,a=(a=!(0|we(e|=0,t|=0)))?1:2;;){if(r[s>>2]=0,!(0|O(e,t,a,s,i))&((0|r[(l=i)>>2])==(0|n)?(0|r[l+4>>2])==(0|A):0)){e=4;break}if((a=a+1|0)>>>0>=7){a=7,e=4;break}}return 4==(0|e)?(L=o,0|a):0}function V(e,t,n,A,s,o,a){t|=0,n|=0,A|=0,s|=0,o|=0,a|=0;var l,c,u,f,h,d,p,m,g,b,y=0,B=0,v=0,C=0,_=0,M=0,T=0,E=0,x=0,S=0,I=0,R=0,D=0,P=0,F=0,N=0,O=0,U=0,k=0;if(b=L,L=L+64|0,p=b+48|0,m=b+32|0,g=b+24|0,l=b+8|0,c=b,(0|(B=0|r[(e|=0)>>2]))<=0)return L=b,0|(F=0);for(u=e+4|0,f=p+8|0,h=m+8|0,d=l+8|0,y=0,D=0;;){R=(v=0|r[u>>2])+(D<<4)|0,r[p>>2]=r[R>>2],r[p+4>>2]=r[R+4>>2],r[p+8>>2]=r[R+8>>2],r[p+12>>2]=r[R+12>>2],(0|D)==(B+-1|0)?(r[m>>2]=r[v>>2],r[m+4>>2]=r[v+4>>2],r[m+8>>2]=r[v+8>>2],r[m+12>>2]=r[v+12>>2]):(R=v+(D+1<<4)|0,r[m>>2]=r[R>>2],r[m+4>>2]=r[R+4>>2],r[m+8>>2]=r[R+8>>2],r[m+12>>2]=r[R+12>>2]),B=0|Ae(p,m,A,g);e:do{if(B)v=0,y=B;else if(v=0|r[(B=g)>>2],(0|(B=0|r[B+4>>2]))>0|!(0|B)&v>>>0>0){I=0,R=0;t:for(;;){if(O=1/(+(v>>>0)+4294967296*+(0|B)),k=+i[p>>3],U=+((B=0|Lt(0|v,0|B,0|I,0|R))>>>0)+4294967296*+(0|w()),N=+(I>>>0)+4294967296*+(0|R),i[l>>3]=O*(k*U)+O*(+i[m>>3]*N),i[d>>3]=O*(+i[f>>3]*U)+O*(+i[h>>3]*N),0|(B=0|Fe(l,A,c))){y=B;break}M=0|Ut(0|(x=0|r[(S=c)>>2]),0|(S=0|r[S+4>>2]),0|t,0|n),C=0|w(),v=0|r[(_=B=a+(M<<3)|0)>>2],_=0|r[_+4>>2];n:do{if(!(0|v)&!(0|_))P=B,F=16;else for(T=0,E=0;;){if((0|T)>(0|n)|(0|T)==(0|n)&E>>>0>t>>>0){y=1;break t}if((0|v)==(0|x)&(0|_)==(0|S))break n;if(M=0|Ot(0|(B=0|Rt(0|M,0|C,1,0)),0|w(),0|t,0|n),C=0|w(),E=0|Rt(0|E,0|T,1,0),T=0|w(),!(0|(v=0|r[(_=B=a+(M<<3)|0)>>2]))&!(0|(_=0|r[_+4>>2]))){P=B,F=16;break}}}while(0);if(16!=(0|F)||(F=0,!(0|x)&!(0|S))||(r[(E=P)>>2]=x,r[E+4>>2]=S,E=o+(r[s>>2]<<3)|0,r[E>>2]=x,r[E+4>>2]=S,E=0|Rt(0|r[(E=s)>>2],0|r[E+4>>2],1,0),x=0|w(),r[(S=s)>>2]=E,r[S+4>>2]=x),I=0|Rt(0|I,0|R,1,0),R=0|w(),v=0|r[(B=g)>>2],!((0|(B=0|r[B+4>>2]))>(0|R)|(0|B)==(0|R)&v>>>0>I>>>0)){v=1;break e}}v=0}else v=1}while(0);if(D=D+1|0,!v){F=21;break}if((0|D)>=(0|(B=0|r[e>>2]))){y=0,F=21;break}}return 21==(0|F)?(L=b,0|y):0}function H(e,t){t|=0;var n,A=0,s=0,o=0,a=0,l=0,c=0,h=0,d=0,p=0;if((0|(a=0|r[(e|=0)>>2]))<=0)return s=(o=0)+(s=12.566370614359172-(s=0)),o=(a=o<0)?s:o,i[t>>3]=o,0;if(n=0|r[e+4>>2],e=1!=(0|a)&1,l=.5*+i[n>>3]+.7853981633974483,o=.5*+i[n+(e<<4)>>3]+.7853981633974483,A=+f(+l)*+f(+o),s=+i[n+(e<<4)+8>>3]-+i[n+8>>3],A=(s=(A=-2*+g(+ +f(+s)*A,+(+u(+l)*+u(+o)+ +u(+s)*A)))+0)-A,1==(0|a))return o=(l=s)+(o=12.566370614359172-(o=A)),l=(a=l<0)?o:l,i[t>>3]=l,0;for(e=1,o=s;d=e,p=(0|(e=e+1|0))%(0|a)|0,h=.5*+i[n+(d<<4)>>3]+.7853981633974483,c=.5*+i[n+(p<<4)>>3]+.7853981633974483,s=+f(+h)*+f(+c),l=+i[n+(p<<4)+8>>3]-+i[n+(d<<4)+8>>3],A=(s=o+(A=-2*+g(+ +f(+l)*s,+(+u(+h)*+u(+c)+ +u(+l)*s))-A))-o-A,!((0|e)>=(0|a));)o=s;return h=s+(h=12.566370614359172-A),h=(p=s<0)?h:s,i[t>>3]=h,0}function Q(e){return(e|=0)>>>0>121?0|(e=0):0|(e=0|r[7696+(28*e|0)+16>>2])}function j(e){return 4==(0|(e|=0))|117==(0|e)|0}function z(e){return 0|r[11120+(216*(0|r[(e|=0)>>2])|0)+(72*(0|r[e+4>>2])|0)+(24*(0|r[e+8>>2])|0)+(r[e+12>>2]<<3)>>2]}function J(e){return 0|r[11120+(216*(0|r[(e|=0)>>2])|0)+(72*(0|r[e+4>>2])|0)+(24*(0|r[e+8>>2])|0)+(r[e+12>>2]<<3)+4>>2]}function K(e,t){return t|=0,(0|r[7696+(28*(e|=0)|0)+20>>2])==(0|t)?0|(t=1):0|(t=(0|r[7696+(28*e|0)+24>>2])==(0|t))}function q(e,t){return 0|r[848+(28*(e|=0)|0)+((t|=0)<<2)>>2]}function Y(e,t){return t|=0,(0|r[848+(28*(e|=0)|0)>>2])==(0|t)?0|(t=0):(0|r[848+(28*e|0)+4>>2])==(0|t)?0|(t=1):(0|r[848+(28*e|0)+8>>2])==(0|t)?0|(t=2):(0|r[848+(28*e|0)+12>>2])==(0|t)?0|(t=3):(0|r[848+(28*e|0)+16>>2])==(0|t)?0|(t=4):(0|r[848+(28*e|0)+20>>2])==(0|t)?0|(t=5):0|((0|r[848+(28*e|0)+24>>2])==(0|t)?6:7)}function W(e){var t,n,A;return t=(A=+i[(e|=0)+16>>3])-(n=+i[e+24>>3]),+(A<n?t+6.283185307179586:t)}function X(e){return+(+i[(e|=0)>>3]-+i[e+8>>3])}function Z(e,t){e|=0;var n,A,r=0;return(r=+i[(t|=0)>>3])>=+i[e+8>>3]&&r<=+i[e>>3]?(n=+i[e+16>>3],r=+i[e+24>>3],t=(A=+i[t+8>>3])>=r,e=A<=n&1,n<r?t&&(e=1):t||(e=0),0|(t=!!(0|e))):0|(t=0)}function $(e,t){t|=0;var n,A,r,s,o,a=0,l=0,c=0,u=0;return+i[(e|=0)>>3]<+i[t+8>>3]||+i[e+8>>3]>+i[t>>3]?0|(a=0):(r=(l=+i[e+16>>3])<(u=+i[(n=e+24|0)>>3]),c=(o=+i[(a=t+16|0)>>3])<(s=+i[(A=t+24|0)>>3]),t=u-o<s-l,e=r?c|t?1:2:0,t=c?r?1:t?2:1:0,(l=+ze(l,e))<+ze(+i[A>>3],t)||(u=+ze(+i[n>>3],e))>+ze(+i[a>>3],t)?0|(c=0):0|(c=1))}function ee(e,t){t|=0;var n,A,r,s,o,a=0,l=0,c=0,u=0;return+i[(e|=0)>>3]<+i[t>>3]||+i[e+8>>3]>+i[t+8>>3]?0|(a=0):(r=(s=+i[(a=e+16|0)>>3])<(l=+i[e+24>>3]),c=(u=+i[(n=t+16|0)>>3])<(o=+i[(A=t+24|0)>>3]),t=l-u<o-s,e=r?c|t?1:2:0,t=c?r?1:t?2:1:0,(l=+ze(l,e))<=+ze(+i[A>>3],t)?0|(c=(u=+ze(+i[a>>3],e))>=+ze(+i[n>>3],t)):0|(c=0))}function te(e,t){e|=0,t|=0;var n,A,s,o,a,l=0;s=L,L=L+176|0,r[(A=s)>>2]=4,l=+i[t>>3],i[A+8>>3]=l,o=+i[t+16>>3],i[A+16>>3]=o,i[A+24>>3]=l,l=+i[t+24>>3],i[A+32>>3]=l,a=+i[t+8>>3],i[A+40>>3]=a,i[A+48>>3]=l,i[A+56>>3]=a,i[A+64>>3]=o,n=(t=A+72|0)+96|0;do{r[t>>2]=0,t=t+4|0}while((0|t)<(0|n));Jt(0|e,0|A,168),L=s}function ne(e,t,n){e|=0,t|=0,n|=0;var A,o,c,u,f,h,d,p=0,m=0,g=0,y=0,v=0,C=0,_=0;h=L,L=L+288|0,f=h+264|0,y=h+96|0,m=(p=g=h)+96|0;do{r[p>>2]=0,p=p+4|0}while((0|p)<(0|m));return 0|(t=0|Ge(t,g))?(L=h,0|(C=t)):(Ue(g=0|r[(m=g)>>2],m=0|r[m+4>>2],f),ke(g,m,y),u=+Je(f,y+8|0),i[f>>3]=+i[e>>3],i[(m=f+8|0)>>3]=+i[e+16>>3],i[y>>3]=+i[e+8>>3],i[(g=y+8|0)>>3]=+i[e+24>>3],o=+Je(f,y),_=+i[m>>3]-+i[g>>3],c=+l(+_),d=+i[f>>3]-+i[y>>3],A=+l(+d),!(0==_|0==d)&&(_=+Qt(+c,+A),_=+b(+o*o/+jt(+_/+jt(+c,+A),3)/(u*(2.59807621135*u)*.8)),i[s>>3]=_,v=~~_>>>0,C=+l(_)>=1?_>0?~~+B(+a(_/4294967296),4294967295)>>>0:~~+b((_-+(~~_>>>0))/4294967296)>>>0:0,2146435072&~r[s+4>>2])?(y=!(0|v)&!(0|C),r[(t=n)>>2]=y?1:v,r[t+4>>2]=y?0:C,t=0):t=1,L=h,0|(C=t))}function Ae(e,t,n,A){e|=0,t|=0,n|=0,A|=0;var o,c,u,f,h=0,d=0,p=0;f=L,L=L+288|0,c=f+264|0,u=f+96|0,o=(h=d=f)+96|0;do{r[h>>2]=0,h=h+4|0}while((0|h)<(0|o));return 0|(n=0|Ge(n,d))?(L=f,0|(A=n)):(Ue(h=0|r[(n=d)>>2],n=0|r[n+4>>2],c),ke(h,n,u),p=+Je(c,u+8|0),p=+b(+ +Je(e,t)/(2*p)),i[s>>3]=p,n=~~p>>>0,h=+l(p)>=1?p>0?~~+B(+a(p/4294967296),4294967295)>>>0:~~+b((p-+(~~p>>>0))/4294967296)>>>0:0,2146435072&~r[s+4>>2]?(d=!(0|n)&!(0|h),r[A>>2]=d?1:n,r[A+4>>2]=d?0:h,L=f,0|(A=0)):(L=f,0|(A=1)))}function re(e,t,n,s){e|=0,s|=0;var o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,E=0,x=0,S=0,I=0,R=0,D=0,P=0,F=0;if(o=L,L=L+224|0,R=o,E=o+48|0,(f=(0|(n|=0))>0|!(0|n)&(t|=0)>>>0>0)&(n>>>0>0|!(0|n)&t>>>0>17895697))return L=o,0|(F=14);if((0|n)<0)return L=o,0|(F=2);if(!(0|t)&!(0|n))return r[s>>2]=0,r[s+4>>2]=0,L=o,0|(F=0);for(a=0|ye(0|r[(a=e)>>2],0|r[a+4>>2]),c=0,u=0;;){if(!(0|ve(0|r[(F=l=e+(c<<3)|0)>>2],0|r[F+4>>2]))){a=5,D=159;break}if(F=(0|ye(0|r[(F=l)>>2],0|r[F+4>>2]))==(0|a),c=0|Rt(0|c,0|u,1,0),u=0|w(),!F){a=12,D=159;break}if(!((0|u)<(0|n)|(0|u)==(0|n)&c>>>0<t>>>0)){D=8;break}}if(8==(0|D)){do{if((0|n)>0|!(0|n)&t>>>0>1){if(!(c=0|Tt(a=t<<3)))return L=o,0|(F=13);for(Jt(0|c,0|e,0|a),gt(c,t,8,1),a=1,l=0;F=c+(a+-1<<3)|0,F=(0|r[(P=c+(a<<3)|0)>>2])==(0|r[F>>2])?(0|r[P+4>>2])==(0|r[F+4>>2]):0,a=0|Rt(0|a,0|l,1,0),l=0|w(),!F;)if(!((0|l)<(0|n)|(0|l)==(0|n)&a>>>0<t>>>0)){D=14;break}if(14==(0|D)){Et(c);break}return Et(c),L=o,0|(F=10)}}while(0);if(a=0|Nt(0|t,0|n,6,0),l=0|w(),f){c=0,u=0;do{a=0|Rt(0|a,0|l,0|(F=!!(0|we(0|r[(F=e+(u<<3)|0)>>2],0|r[F+4>>2]))<<31>>31),((0|F)<0)<<31>>31),l=0|w(),u=0|Rt(0|u,0|c,1,0),c=0|w()}while((0|c)<(0|n)|(0|c)==(0|n)&u>>>0<t>>>0);M=a,_=l}else M=a,_=l;if(v=0|Nt(0|M,0|_,10,0),C=0|w(),!(P=0|Tt(M<<5)))return L=o,0|(F=13);if(!(F=0|xt(v,4)))return Et(P),L=o,0|(F=13);e:do{if(f){for(oe(0|r[(I=e)>>2],0|r[I+4>>2],R),g=P,b=0,y=0,a=0,B=0;;){l=(f=!(0|r[(f=R)>>2])&!(0|r[f+4>>2]))?26990:26995,c=f?5:6,f=R+((1&f)<<3)|0,h=0|Rt(0|c,0|(u=0),-1,-1),d=0|w(),p=0,m=0;do{x=0|r[(S=f+(p<<3)|0)+4>>2],r[(I=g+(p<<5)|0)>>2]=r[S>>2],r[I+4>>2]=x,A[g+(p<<5)+9|0]=0,A[g+(p<<5)+8|0]=0,r[g+(p<<5)+20>>2]=g,r[(I=g+(p<<5)+24|0)>>2]=1,r[I+4>>2]=0,I=0|A[l+p|0],x=0|Ut(0|(x=0|Rt(0|h,0|d,0|p,0|m)),0|w(),0|c,0|u),w(),x=0|A[l+x|0],p=0|Rt(0|p,0|m,1,0),m=0|w(),S=0|A[l+((0|p)==(0|c)&(0|m)==(0|u)?0:p)|0],r[g+((I&=255)<<5)+16>>2]=g+((255&x)<<5),r[g+(I<<5)+12>>2]=g+((255&S)<<5)}while(m>>>0<u>>>0|(0|m)==(0|u)&p>>>0<c>>>0);if(b=0|Rt(0|b,0|y,1,0),y=0|w(),a=0|Rt(0|c,0|u,0|a,0|B),B=0|w(),!((0|y)<(0|n)|(0|y)==(0|n)&b>>>0<t>>>0))break e;0|oe(0|r[(I=e+(b<<3)|0)>>2],0|r[I+4>>2],R)||(g=P+(a<<5)|0)}T(27634,26956,108,26975)}}while(0);if((0|_)>0|!(0|_)&M>>>0>0){u=0,f=0;do{if(a=0|Gt(0|(c=0|r[(l=P+(u<<5)|0)>>2]),0|(l=0|r[l+4>>2]),30),a=0|Gt(0|(l=0|Nt(a^c|0,(0|w())^l,484763065,-1084733587)),0|(c=0|w()),27),l=0|Ut((a=0|Gt(0|(c=0|Nt(a^l|0,(0|w())^c,321982955,-1798288965)),0|(l=0|w()),31))^c|0,(0|w())^l,0|v,0|C),c=0|w(),0|r[(a=F+(l<<2)|0)>>2])do{l=0|Ot(0|(a=0|Rt(0|l,0|c,1,0)),0|w(),0|v,0|C),c=0|w(),a=F+(l<<2)|0}while(0|r[a>>2]);r[a>>2]=P+(u<<5),u=0|Rt(0|u,0|f,1,0),f=0|w()}while((0|f)<(0|_)|(0|f)==(0|_)&u>>>0<M>>>0);p=0,m=0;do{if(u=P+(p<<5)|0,!(0|A[(f=P+(p<<5)+9|0)|0])){if(0|le(0|r[(I=u)>>2],0|r[I+4>>2],R)){D=39;break}l=0|Gt(0|(h=0|r[(d=R)>>2]),0|(d=0|r[d+4>>2]),30),a=0|Gt(0|(l=0|Nt(l^h|0,(0|w())^d,484763065,-1084733587)),0|(c=0|w()),27),l=0|Ut((a=0|Gt(0|(c=0|Nt(a^l|0,(0|w())^c,321982955,-1798288965)),0|(l=0|w()),31))^c|0,(0|w())^l,0|v,0|C),c=0|w(),a=0|r[F+(l<<2)>>2];e:do{if(0|a){for(;(0|r[(I=a)>>2])!=(0|h)||(0|r[I+4>>2])!=(0|d);)if(l=0|Ot(0|(a=0|Rt(0|l,0|c,1,0)),0|w(),0|v,0|C),c=0|w(),!(a=0|r[F+(l<<2)>>2]))break e;A[f|0]=1,A[a+9|0]=1,l=a+16|0,r[16+(0|r[(I=P+(p<<5)+12|0)>>2])>>2]=r[l>>2],n=a+12|0,S=0|r[P+(p<<5)+16>>2],r[S+12>>2]=r[n>>2],r[16+(0|r[n>>2])>>2]=S,r[12+(0|r[l>>2])>>2]=r[I>>2],l=0|ie(u),I=0|ie(a),a=(S=(0|(n=0|r[(a=l+24|0)+4>>2]))<(0|(x=0|r[(S=I+24|0)+4>>2]))|((0|n)==(0|x)?(0|r[a>>2])>>>0<(0|r[S>>2])>>>0:0))?l:I,(0|(l=S?I:l))!=(0|a)&&(x=a+24|0,x=0|Rt(0|r[(S=I=l+24|0)>>2],0|r[S+4>>2],0|r[x>>2],0|r[x+4>>2]),S=0|w(),r[I>>2]=x,r[I+4>>2]=S,r[a+20>>2]=l)}}while(0)}p=0|Rt(0|p,0|m,1,0),m=0|w()}while((0|m)<(0|_)|(0|m)==(0|_)&p>>>0<M>>>0);39==(0|D)&&T(27634,26956,258,27001),a=0,l=0;do{A[P+(a<<5)+8|0]=0,a=0|Rt(0|a,0|l,1,0),l=0|w()}while((0|l)<(0|_)|(0|l)==(0|_)&a>>>0<M>>>0);for(h=0,c=0,f=0,d=0;;){if(a=P+(h<<5)|0,0|A[P+(h<<5)+8|0]||0|A[P+(h<<5)+9|0])u=f;else{l=0|r[(u=a)>>2],u=0|r[u+4>>2];do{A[a+8|0]=1,I=a=0|r[a+12>>2]}while((0|r[I>>2])!=(0|l)||(0|r[I+4>>2])!=(0|u));c=0|Rt(0|c,0|f,1,0),u=0|w()}if(h=0|Rt(0|h,0|d,1,0),!((0|(d=0|w()))<(0|_)|(0|d)==(0|_)&h>>>0<M>>>0))break;f=u}a=0,l=0;do{A[P+(a<<5)+8|0]=0,a=0|Rt(0|a,0|l,1,0),l=0|w()}while((0|l)<(0|_)|(0|l)==(0|_)&a>>>0<M>>>0);S=c,x=u,a=1}else S=0,x=0,a=0;I=0|Tt(24*S|0);e:do{if(0|I){t:do{if(a){e=0,v=0,n=0,t=0;n:for(;;){if(a=P+(e<<5)|0,0|A[P+(e<<5)+8|0]||0|A[P+(e<<5)+9|0])l=n,a=v;else{y=0|r[(B=a)>>2],B=0|r[B+4>>2],l=0,c=0;do{l=0|Rt(0|l,0|c,2,0),c=0|w(),C=a=0|r[a+12>>2]}while((0|r[C>>2])!=(0|y)||(0|r[C+4>>2])!=(0|B));if(!(b=0|Tt(l<<4)))break;l=y,c=B,g=0,m=0,u=0,f=0;do{if(0|ae(l,c,E)){D=69;break n}if(p=((0|(d=(C=0|r[E>>2])+-1|0))<0)<<31>>31,(0|C)>1){c=u,h=0,l=f,u=0;do{f=E+8+(h<<4)|0,r[(C=b+(c<<4)|0)>>2]=r[f>>2],r[C+4>>2]=r[f+4>>2],r[C+8>>2]=r[f+8>>2],r[C+12>>2]=r[f+12>>2],c=0|Rt(0|c,0|l,1,0),l=0|w(),h=0|Rt(0|h,0|u,1,0),u=0|w()}while((0|u)<(0|p)|(0|u)==(0|p)&h>>>0<d>>>0);u=c,f=l}g=0|Rt(0|g,0|m,0|d,0|p),m=0|w(),A[a+8|0]=1,a=0|r[a+12>>2],l=0|r[(c=a)>>2],c=0|r[c+4>>2]}while(!((0|l)==(0|y)&(0|c)==(0|B)));if(!(l=0|St(b,g<<4))){D=75;break}B=0|ie(a),C=0|r[B+4>>2],r[(a=I+(24*n|0)|0)>>2]=r[B>>2],r[a+4>>2]=C,r[(a=I+(24*n|0)+16|0)>>2]=g,r[I+(24*n|0)+20>>2]=l,r[R>>2]=r[a>>2],r[R+4>>2]=r[a+4>>2],H(R,I+(24*n|0)+8|0),l=0|Rt(0|n,0|v,1,0),a=0|w()}if(e=0|Rt(0|e,0|t,1,0),!((0|(t=0|w()))<(0|_)|(0|t)==(0|_)&e>>>0<M>>>0))break t;v=a,n=l}if(69==(0|D)?T(27634,26956,351,27016):75==(0|D)&&Et(b),(0|v)>0|!(0|v)&n>>>0>0)for(u=0,f=0,a=n,c=v;(l=0|r[I+(24*u|0)+20>>2])?(Et(l),l=v,a=n):l=c,u=0|Rt(0|u,0|f,1,0),(0|(f=0|w()))<(0|l)|(0|f)==(0|l)&u>>>0<a>>>0;)c=l;Et(I);break e}}while(0);gt(I,S,24,2);t:do{if(!(0|S)&!(0|x)){if(0|(C=0|Tt(192))){if(r[C+16>>2]=0,r[C+20>>2]=0,r[(m=C+8|0)>>2]=3,a=0|Tt(48),r[(g=C+12|0)>>2]=a,0|a){r[a>>2]=r[3860],r[a+4>>2]=r[3861],r[a+8>>2]=r[3862],r[a+12>>2]=r[3863],r[(p=a+16|0)>>2]=r[3864],r[p+4>>2]=r[3865],r[p+8>>2]=r[3866],r[p+12>>2]=r[3867],r[(p=a+32|0)>>2]=r[3868],r[p+4>>2]=r[3869],r[p+8>>2]=r[3870],r[p+12>>2]=r[3871],r[R>>2]=r[m>>2],r[R+4>>2]=r[m+4>>2],H(R,C),r[C+40>>2]=0,r[C+44>>2]=0,r[(p=C+32|0)>>2]=3,a=0|Tt(48),r[(b=C+36|0)>>2]=a;do{if(a){if(r[a>>2]=r[3872],r[a+4>>2]=r[3873],r[a+8>>2]=r[3874],r[a+12>>2]=r[3875],r[(d=a+16|0)>>2]=r[3876],r[d+4>>2]=r[3877],r[d+8>>2]=r[3878],r[d+12>>2]=r[3879],r[(d=a+32|0)>>2]=r[3880],r[d+4>>2]=r[3881],r[d+8>>2]=r[3882],r[d+12>>2]=r[3883],r[R>>2]=r[p>>2],r[R+4>>2]=r[p+4>>2],H(R,C+24|0),r[C+64>>2]=0,r[C+68>>2]=0,r[(d=C+56|0)>>2]=3,a=0|Tt(48),r[(y=C+60|0)>>2]=a,!a){u=0,f=2;break}if(r[a>>2]=r[3884],r[a+4>>2]=r[3885],r[a+8>>2]=r[3886],r[a+12>>2]=r[3887],r[(h=a+16|0)>>2]=r[3888],r[h+4>>2]=r[3889],r[h+8>>2]=r[3890],r[h+12>>2]=r[3891],r[(h=a+32|0)>>2]=r[3892],r[h+4>>2]=r[3893],r[h+8>>2]=r[3894],r[h+12>>2]=r[3895],r[R>>2]=r[d>>2],r[R+4>>2]=r[d+4>>2],H(R,C+48|0),r[C+88>>2]=0,r[C+92>>2]=0,r[(h=C+80|0)>>2]=3,a=0|Tt(48),r[(B=C+84|0)>>2]=a,!a){u=0,f=3;break}if(r[a>>2]=r[3896],r[a+4>>2]=r[3897],r[a+8>>2]=r[3898],r[a+12>>2]=r[3899],r[(f=a+16|0)>>2]=r[3900],r[f+4>>2]=r[3901],r[f+8>>2]=r[3902],r[f+12>>2]=r[3903],r[(f=a+32|0)>>2]=r[3904],r[f+4>>2]=r[3905],r[f+8>>2]=r[3906],r[f+12>>2]=r[3907],r[R>>2]=r[h>>2],r[R+4>>2]=r[h+4>>2],H(R,C+72|0),r[C+112>>2]=0,r[C+116>>2]=0,r[(f=C+104|0)>>2]=3,a=0|Tt(48),r[(e=C+108|0)>>2]=a,!a){u=0,f=4;break}if(r[a>>2]=r[3908],r[a+4>>2]=r[3909],r[a+8>>2]=r[3910],r[a+12>>2]=r[3911],r[(u=a+16|0)>>2]=r[3912],r[u+4>>2]=r[3913],r[u+8>>2]=r[3914],r[u+12>>2]=r[3915],r[(u=a+32|0)>>2]=r[3916],r[u+4>>2]=r[3917],r[u+8>>2]=r[3918],r[u+12>>2]=r[3919],r[R>>2]=r[f>>2],r[R+4>>2]=r[f+4>>2],H(R,C+96|0),r[C+136>>2]=0,r[C+140>>2]=0,r[(u=C+128|0)>>2]=3,a=0|Tt(48),r[(t=C+132|0)>>2]=a,!a){u=0,f=5;break}if(r[a>>2]=r[3920],r[a+4>>2]=r[3921],r[a+8>>2]=r[3922],r[a+12>>2]=r[3923],r[(c=a+16|0)>>2]=r[3924],r[c+4>>2]=r[3925],r[c+8>>2]=r[3926],r[c+12>>2]=r[3927],r[(c=a+32|0)>>2]=r[3928],r[c+4>>2]=r[3929],r[c+8>>2]=r[3930],r[c+12>>2]=r[3931],r[R>>2]=r[u>>2],r[R+4>>2]=r[u+4>>2],H(R,C+120|0),r[C+160>>2]=0,r[C+164>>2]=0,r[(c=C+152|0)>>2]=3,a=0|Tt(48),r[(n=C+156|0)>>2]=a,!a){u=0,f=6;break}if(r[a>>2]=r[3932],r[a+4>>2]=r[3933],r[a+8>>2]=r[3934],r[a+12>>2]=r[3935],r[(l=a+16|0)>>2]=r[3936],r[l+4>>2]=r[3937],r[l+8>>2]=r[3938],r[l+12>>2]=r[3939],r[(l=a+32|0)>>2]=r[3940],r[l+4>>2]=r[3941],r[l+8>>2]=r[3942],r[l+12>>2]=r[3943],r[R>>2]=r[c>>2],r[R+4>>2]=r[c+4>>2],H(R,C+144|0),r[C+184>>2]=0,r[C+188>>2]=0,r[(l=C+176|0)>>2]=3,a=0|Tt(48),r[(v=C+180|0)>>2]=a,!a){u=0,f=7;break}if(r[a>>2]=r[3944],r[a+4>>2]=r[3945],r[a+8>>2]=r[3946],r[a+12>>2]=r[3947],r[(E=a+16|0)>>2]=r[3948],r[E+4>>2]=r[3949],r[E+8>>2]=r[3950],r[E+12>>2]=r[3951],r[(a=a+32|0)>>2]=r[3952],r[a+4>>2]=r[3953],r[a+8>>2]=r[3954],r[a+12>>2]=r[3955],r[R>>2]=r[l>>2],r[R+4>>2]=r[l+4>>2],H(R,C+168|0),gt(C,8,24,3),a=0|Tt(128),r[s+4>>2]=a,0|a){r[s>>2]=8,r[a>>2]=r[m>>2],r[a+4>>2]=r[m+4>>2],r[a+8>>2]=r[m+8>>2],r[a+12>>2]=r[m+12>>2],r[(D=a+16|0)>>2]=r[p>>2],r[D+4>>2]=r[p+4>>2],r[D+8>>2]=r[p+8>>2],r[D+12>>2]=r[p+12>>2],r[(D=a+32|0)>>2]=r[d>>2],r[D+4>>2]=r[d+4>>2],r[D+8>>2]=r[d+8>>2],r[D+12>>2]=r[d+12>>2],r[(D=a+48|0)>>2]=r[h>>2],r[D+4>>2]=r[h+4>>2],r[D+8>>2]=r[h+8>>2],r[D+12>>2]=r[h+12>>2],r[(D=a+64|0)>>2]=r[f>>2],r[D+4>>2]=r[f+4>>2],r[D+8>>2]=r[f+8>>2],r[D+12>>2]=r[f+12>>2],r[(D=a+80|0)>>2]=r[u>>2],r[D+4>>2]=r[u+4>>2],r[D+8>>2]=r[u+8>>2],r[D+12>>2]=r[u+12>>2],r[(D=a+96|0)>>2]=r[c>>2],r[D+4>>2]=r[c+4>>2],r[D+8>>2]=r[c+8>>2],r[D+12>>2]=r[c+12>>2],r[(D=a+112|0)>>2]=r[l>>2],r[D+4>>2]=r[l+4>>2],r[D+8>>2]=r[l+8>>2],r[D+12>>2]=r[l+12>>2],Et(C),D=158;break t}0|(a=0|r[g>>2])&&Et(a),0|(a=0|r[b>>2])&&Et(a),0|(a=0|r[y>>2])&&Et(a),0|(a=0|r[B>>2])&&Et(a),0|(a=0|r[e>>2])&&Et(a),0|(a=0|r[t>>2])&&Et(a),0|(a=0|r[n>>2])&&Et(a),0|(a=0|r[v>>2])&&Et(a),Et(C);break t}u=0,f=1}while(0);a=0,c=0;do{0|(l=0|r[C+(24*a|0)+12>>2])&&Et(l),a=0|Rt(0|a,0|c,1,0),c=0|w()}while(c>>>0<u>>>0|(0|c)==(0|u)&a>>>0<f>>>0)}Et(C),D=152}}else{if((0|x)>0|!(0|x)&S>>>0>0){c=0,u=0,f=0,l=0,a=0,h=0;do{R=u,D=f,l=0|Rt(0|l,0|a,1&((0|(u=0|r[(E=I+(24*c|0)|0)>>2]))!=(0|R)|(0|(f=0|r[E+4>>2]))!=(0|D)),0),a=0|w(),c=0|Rt(0|c,0|h,1,0),h=0|w()}while((0|h)<(0|x)|(0|h)==(0|x)&c>>>0<S>>>0);B=l,y=a}else B=0,y=0;if(e=0|Tt(24*B|0)){n:do{if((0|x)>=0){for(m=0,g=0,l=0,c=0,b=0,u=0;;){if((0|m)==(0|S)&(0|g)==(0|x)||(D=I+(24*m|0)|0,(0|r[(R=I+(24*l|0)|0)>>2])!=(0|r[D>>2])||(0|r[R+4>>2])!=(0|r[D+4>>2]))){if(d=I+(24*l|0)|0,p=0|Rt(0|(D=0|Lt(0|m,0|g,0|l,0|c)),0|(R=0|w()),-1,-1),c=0|w(),(0|R)>0|!(0|R)&D>>>0>1){if(!(a=0|Tt(p<<3)))break;f=0,h=0;do{D=f,f=0|Rt(0|f,0|h,1,0),h=0|w(),R=0|r[(E=d+(24*f|0)+16|0)+4>>2],r[(D=a+(D<<3)|0)>>2]=r[E>>2],r[D+4>>2]=R}while((0|h)<(0|c)|(0|h)==(0|c)&f>>>0<p>>>0)}else a=0;D=0|r[(R=I+(24*l|0)+16|0)+4>>2],r[(c=e+(24*u|0)+8|0)>>2]=r[R>>2],r[c+4>>2]=D,r[e+(24*u|0)+16>>2]=p,r[e+(24*u|0)+20>>2]=a,i[e+(24*u|0)>>3]=+i[I+(24*l|0)+8>>3],u=0|Rt(0|u,0|b,1,0),l=m,c=g,a=0|w()}else a=b;if(D=m,m=0|Rt(0|m,0|g,1,0),R=g,g=0|w(),!((0|R)<(0|x)|(0|R)==(0|x)&D>>>0<S>>>0))break n;b=a}if((0|b)>0|!(0|b)&u>>>0>0){a=0,c=0;do{0|(l=0|r[e+(24*a|0)+20>>2])&&Et(l),a=0|Rt(0|a,0|c,1,0),c=0|w()}while((0|c)<(0|b)|(0|c)==(0|b)&a>>>0<u>>>0)}Et(e),D=152;break t}}while(0);if(gt(e,B,24,3),a=0|Tt(B<<4),r[(c=s+4|0)>>2]=a,a){r[s>>2]=B;do{if((0|y)>0|!(0|y)&B>>>0>0){if(s=e+8|0,r[a>>2]=r[s>>2],r[a+4>>2]=r[s+4>>2],r[a+8>>2]=r[s+8>>2],r[a+12>>2]=r[s+12>>2],1==(0|B)&!(0|y))break;if(D=e+32|0,r[(s=a+16|0)>>2]=r[D>>2],r[s+4>>2]=r[D+4>>2],r[s+8>>2]=r[D+8>>2],r[s+12>>2]=r[D+12>>2],!((0|y)>0|!(0|y)&B>>>0>2))break;a=2,l=0;do{s=(0|r[c>>2])+(a<<4)|0,D=e+(24*a|0)+8|0,r[s>>2]=r[D>>2],r[s+4>>2]=r[D+4>>2],r[s+8>>2]=r[D+8>>2],r[s+12>>2]=r[D+12>>2],a=0|Rt(0|a,0|l,1,0),l=0|w()}while((0|l)<(0|y)|(0|l)==(0|y)&a>>>0<B>>>0)}}while(0);Et(e),D=158;break}if((0|y)>0|!(0|y)&B>>>0>0){a=0,c=0;do{0|(l=0|r[e+(24*a|0)+20>>2])&&Et(l),a=0|Rt(0|a,0|c,1,0),c=0|w()}while((0|c)<(0|y)|(0|c)==(0|y)&a>>>0<B>>>0)}Et(e),D=152;break}D=152}}while(0);if(158==(0|D))return Et(P),Et(F),Et(I),L=o,0|(F=0);if(152==(0|D)&&(0|x)>0|!(0|x)&S>>>0>0)for(u=0,f=0,a=S,c=x;(l=0|r[I+(24*u|0)+20>>2])?(Et(l),l=x,a=S):l=c,u=0|Rt(0|u,0|f,1,0),(0|(f=0|w()))<(0|l)|(0|f)==(0|l)&u>>>0<a>>>0;)c=l;return Et(I),Et(P),Et(F),L=o,0|(F=13)}}while(0);return Et(P),Et(F),L=o,0|(F=13)}return 159==(0|D)?(L=o,0|a):0}function ie(e){var t,n=0;return(0|(n=0|r[(t=(e|=0)+20|0)>>2]))==(0|e)?0|e:(n=0|ie(n),r[t>>2]=n,0|n)}function se(e,t){var n=0;switch(n=0|Gt(0|(e|=0),0|(t|=0),56),w(),7&n){case 0:case 7:return 0|(n=0)}return n=-2130706433&t|134217728,!0&268435456==(2013265920&t)?!0&16777216==(117440512&t)&!!(0|we(e,n))?0|(n=0):0|(n=0|ve(e,n)):0|(n=0)}function oe(e,t,n){n|=0;var A,i=0;return A=!(0|we(e|=0,t|=0)),t&=-2130706433,r[(i=n)>>2]=A?e:0,r[i+4>>2]=A?285212672|t:0,r[(i=n+8|0)>>2]=e,r[i+4>>2]=301989888|t,r[(i=n+16|0)>>2]=e,r[i+4>>2]=318767104|t,r[(i=n+24|0)>>2]=e,r[i+4>>2]=335544320|t,r[(i=n+32|0)>>2]=e,r[i+4>>2]=352321536|t,r[(n=n+40|0)>>2]=e,r[n+4>>2]=369098752|t,0}function ae(e,t,n){n|=0;var A,i,s=0,o=0;return i=L,L=L+16|0,A=i,o=-2130706433&(t|=0)|134217728,!0&268435456==(2013265920&t)?(s=0|Gt(0|(e|=0),0|t,56),w(),s=0|function(e,t,n){e|=0,t|=0,n|=0;var A=0,i=0,s=0;if(s=L,L=L+16|0,i=s,A=0|we(e,t),(n+-1|0)>>>0>5)return L=s,0|(i=-1);if(A=!!(0|A),1==(0|n)&A)return L=s,0|(i=-1);do{if(!(0|dt(e,t,i))){if(A){A=(5+(0|r[26416+(n<<2)>>2])-(0|r[i>>2])|0)%5|0;break}A=(6+(0|r[26448+(n<<2)>>2])-(0|r[i>>2])|0)%6|0;break}A=-1}while(0);return i=A,L=s,0|i}(e,o,7&s),-1==(0|s)?(r[n>>2]=0,L=i,0|(o=6)):(0|Oe(e,o,A)&&T(27634,27035,282,27050),t=0|Gt(0|e,0|t,52),w(),t&=15,0|we(e,o)?he(A,t,s,2,n):ge(A,t,s,2,n),L=i,0|(o=0))):(L=i,0|(o=6))}function le(e,t,n){e|=0,n|=0;var A,i=0,s=0,o=0;return A=L,L=L+16|0,s=A,o=-2130706433&(t|=0)|134217728,!0&268435456==(2013265920&t)?(r[(i=A+8|0)>>2]=0,t=0|Gt(0|e,0|t,56),w(),0|(t=0|O(e,o,7&t,i,s))?(L=A,0|(n=t)):7==(0|(t=0|G(i=0|r[s>>2],s=0|r[s+4>>2],e,o)))?(L=A,0|(n=11)):(e=0|Vt(0|t,0,56),o=-2130706433&s|w()|268435456,r[n>>2]=i|e,r[n+4>>2]=o,L=A,0|(n=0))):(L=A,0|(n=6))}function ce(e,t,n){e|=0,t|=0;var A,s,o=0,a=0,p=0,m=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,T=0,E=0,x=0,S=0,I=0,R=0;r[(n|=0)>>2]=0,B=+i[e>>3],v=+i[e+8>>3],y=+i[e+16>>3],a=0,p=5,o=5,e=0;do{(m=(M=+i[15888+(24*a|0)>>3]-B)*M+(_=+i[15888+(24*a|0)+8>>3]-v)*_+(m=+i[15888+(24*a|0)+16>>3]-y)*m)<o&&(r[n>>2]=a,p=m,e=a,o=m),a=a+1|0}while(20!=(0|a));if((p=+d(+(1-.5*p)))<1e-16)y=0,m=0;else{if(I=+i[16368+(24*e|0)>>3],x=+i[15888+(24*e|0)>>3],S=+i[15888+(24*e|0)+8>>3],m=x*(R=-((E=+i[15888+(24*e|0)+16>>3])+(0*x+0*S)))+0,M=S*R+0,m*=T=(T=+c(+((R=E*R+1)*R+(m*m+M*M))))>0?1/T:0,M*=T,T*=R,_=B+x*(R=-(B*x+v*S+y*E)),_*=v=(v=+c(+((B=y+E*R)*B+(_*_+(o=v+S*R)*o))))>0?1/v:0,o*=v,o=+je(I-+je(+g(+((v*=B)*(S*m-x*M)+(_*(E*M-S*T)+o*(x*T-E*m))),+(T*v+(m*_+M*o))))),m=0|Pe(t)?+je(o+-.3334731722518321):o,o=2.618033988749896*+h(+p),(0|t)>0){e=0;do{o*=2.6457513110645907,e=e+1|0}while((0|e)!=(0|t))}y=+u(+m)*o,m=+f(+m)*o}t=n+4|0,r[(s=n+12|0)>>2]=0,p=1.1547005383792515*+l(+m),o=+l(+y)+.5*p,o-=+(0|(e=~~o)),p-=+(0|(a=~~p));do{if(o<.5){if(o<.3333333333333333){if(r[t>>2]=e,p<.5*(o+1)){r[n+8>>2]=a;break}a=a+1|0,r[n+8>>2]=a;break}if(a=(1&!(p<(R=1-o)))+a|0,r[n+8>>2]=a,R<=p&p<2*o){e=e+1|0,r[t>>2]=e;break}r[t>>2]=e;break}if(!(o<.6666666666666666)){if(e=e+1|0,r[t>>2]=e,p<.5*o){r[n+8>>2]=a;break}a=a+1|0,r[n+8>>2]=a;break}if(p<1-o){if(r[n+8>>2]=a,2*o-1<p){r[t>>2]=e;break}}else a=a+1|0,r[n+8>>2]=a;e=e+1|0,r[t>>2]=e}while(0);do{if(y<0){if(1&a){e=~~(+(0|e)-(2*(+((C=0|Lt(0|e,((0|e)<0)<<31>>31,0|(C=(a+1|0)/2|0),((0|C)<0)<<31>>31))>>>0)+4294967296*+(0|w()))+1)),r[t>>2]=e,C=t;break}e=~~(+(0|e)-2*(+((C=0|Lt(0|e,((0|e)<0)<<31>>31,0|(C=(0|a)/2|0),((0|C)<0)<<31>>31))>>>0)+4294967296*+(0|w()))),r[t>>2]=e,C=t;break}C=t}while(0);A=n+8|0,t=0-a|0,m<0?(n=e-((1|a<<1)/2|0)|0,r[C>>2]=n,r[A>>2]=t,a=t):n=e,e=a-n|0,t=0-n|0,(0|n)<0?(r[A>>2]=e,r[s>>2]=t,r[C>>2]=0,b=0):(e=a,b=n,t=0),n=b-e|0,a=t-e|0,(0|e)<0?(r[C>>2]=n,r[s>>2]=a,r[A>>2]=0,b=n,e=0):a=t,n=b-a|0,t=e-a|0,(0|a)<0?(r[C>>2]=n,r[A>>2]=t,r[s>>2]=0,a=0):(t=e,n=b),(0|(e=(0|a)<(0|(e=(0|t)<(0|n)?t:n))?a:e))<=0||(r[C>>2]=n-e,r[A>>2]=t-e,r[s>>2]=a-e)}function ue(e,t,n){t|=0,n|=0;var A,s,o,a;A=L,L=L+16|0,s=A,a=0|r[(e|=0)+12>>2],o=+((0|r[e+8>>2])-a|0),i[s>>3]=+((0|r[e+4>>2])-a|0)-.5*o,i[s+8>>3]=.8660254037844386*o,fe(s,0|r[e>>2],t,0,n),L=A}function fe(e,t,n,A,s){t|=0,n|=0,A|=0,s|=0;var o,a,l,h,d,p=0,b=0,y=0,B=0,v=0,C=0,_=0;if(p=+function(e){e|=0;var t=0,n=0;return n=+i[e>>3],t=+i[e+8>>3],+ +c(+(n*n+t*t))}(e|=0),p<1e-16)return t=15888+(24*t|0)|0,r[s>>2]=r[t>>2],r[s+4>>2]=r[t+4>>2],r[s+8>>2]=r[t+8>>2],r[s+12>>2]=r[t+12>>2],r[s+16>>2]=r[t+16>>2],void(r[s+20>>2]=r[t+20>>2]);if(b=+g(+ +i[e+8>>3],+ +i[e>>3]),(0|n)>0){e=0;do{p*=.37796447300922725,e=e+1|0}while((0|e)!=(0|n))}y=.3333333333333333*p,A?(n=!(0|Pe(n)),p=+m(.381966011250105*(n?y:.37796447300922725*y))):(p=+m(.381966011250105*p),0|Pe(n)&&(b=+je(b+.3334731722518321))),v=+je(+i[16368+(24*t|0)>>3]-b),y=+i[15888+(24*t|0)>>3],a=+i[15888+(24*t|0)+8>>3],B=y*(_=-((h=+i[15888+(24*t|0)+16>>3])+(0*y+0*a)))+0,b=a*_+0,B*=C=(C=+c(+((_=h*_+1)*_+(B*B+b*b))))>0?1/C:0,b*=C,C*=_,_=+u(+v),v=+f(+v),o=(d=+u(+p))*y+(l=+f(+p))*(_*B+v*(h*b-a*C)),p=d*a+l*(_*b+v*(y*C-h*B)),y=(y=+c(+((b=d*h+l*(_*C+v*(a*B-y*b)))*b+(o*o+p*p))))>0?1/y:0,i[s>>3]=o*y,i[s+8>>3]=p*y,i[s+16>>3]=b*y}function he(e,t,n,A,s){e|=0,t|=0,n|=0,A|=0,s|=0;var o,a,l,c,u,f,h,d,m,b,B,v,C,_,M,w,E,x,S,I,R,D,P,F,N,O,U,k=0,G=0,V=0,H=0,Q=0,j=0,z=0,J=0,K=0,q=0,Y=0,W=0,X=0,Z=0,$=0;if(U=L,L=L+256|0,K=U+224|0,F=U,N=U+208|0,O=U+192|0,x=U+168|0,S=U+152|0,I=U+136|0,R=U+120|0,D=U+104|0,P=U+80|0,r[(k=U+240|0)>>2]=t,r[K>>2]=r[e>>2],r[K+4>>2]=r[e+4>>2],r[K+8>>2]=r[e+8>>2],r[K+12>>2]=r[e+12>>2],de(K,k,F),r[s>>2]=0,(0|(K=A+n+(5==(0|A)&1)|0))<=(0|n))L=U;else{h=N+4|0,u=N+8|0,f=N+12|0,m=O+8|0,b=n+5|0,B=16848+((d=0|r[k>>2])<<2)|0,v=x+8|0,C=16928+(d<<2)|0,_=S+8|0,M=I+8|0,w=R+8|0,E=O+8|0,o=x+8|0,l=x+16|0,a=P+8|0,c=P+16|0,J=n,A=0,G=0,V=0,H=0;e:for(;;){z=F+((0|J)%5<<4)|0,r[N>>2]=r[z>>2],r[N+4>>2]=r[z+4>>2],r[N+8>>2]=r[z+8>>2],r[N+12>>2]=r[z+12>>2];do{}while(2==(0|pe(N,d,0,1)));if((0|J)>(0|n)&!!(0|Pe(t))){if(z=0|r[N>>2],e=0|r[h>>2],Q=0|r[u>>2],k=0|r[f>>2],q=+(V-H|0),i[O>>3]=+(G-H|0)-.5*q,i[m>>3]=.8660254037844386*q,H=0|r[17008+(80*z|0)+(A<<2)>>2],j=0|r[18608+(80*z|0)+(20*H|0)>>2],(0|(V=0|r[18608+(80*z|0)+(20*H|0)+16>>2]))>0){G=0,A=Q;do{A=((W=(0|(Q=A+e-((Z=(0|(X=k+e|0))<0)?X:0)|0))<0)?0:Q)-((k=(0|(Y=k+A-(Z?X:0)-(W?Q:0)|0))<0)?Y:0)|0,e=(e=(Z?0:X)-(W?Q:0)-(k?Y:0)|0)-((Q=(0|(k=(0|(Y=k?0:Y))<(0|(k=(0|A)<(0|e)?A:e))?Y:k))>0)?k:0)|0,A=A-(Q?k:0)|0,k=Y-(Q?k:0)|0,G=G+1|0}while((0|G)<(0|V))}else A=Q;switch(Z=3*(0|r[B>>2])|0,Y=(0|y(Z,0|r[18608+(80*z|0)+(20*H|0)+4>>2]))+e|0,Q=(0|y(Z,0|r[18608+(80*z|0)+(20*H|0)+8>>2]))+A|0,Z=(0|y(Z,0|r[18608+(80*z|0)+(20*H|0)+12>>2]))+k|0,Y=((H=(0|Y)<0)?0:Y)-((W=(0|(Q=Q-(H?Y:0)|0))<0)?Q:0)-((X=(0|(Z=Z+(H?0-Y|0:0)+(W?0-Q|0:0)|0))<0)?Z:0)|0,q=+((Q=(W?0:Q)-(X?Z:0)|0)-((W=(0|(X=(0|(Z=X?0:Z))<(0|(X=(0|Q)<(0|Y)?Q:Y))?Z:X))>0)?X:0)-(Z=Z-(W?X:0)|0)|0),i[x>>3]=+(Y-(W?X:0)-Z|0)-.5*q,i[v>>3]=.8660254037844386*q,q=+(0|r[C>>2]),i[S>>3]=3*q,i[_>>3]=0,$=-1.5*q,i[I>>3]=$,i[M>>3]=2.598076211353316*q,i[R>>3]=$,i[w>>3]=-2.598076211353316*q,0|r[17008+(80*j|0)+(z<<2)>>2]){case 1:e=I,A=S;break;case 3:e=R,A=I;break;case 2:e=S,A=R;break;default:e=12;break e}ft(O,x,A,e,D),fe(D,j,d,1,P),Z=0|r[s>>2],q=+p(+ +i[c>>3]),$=+g(+ +i[a>>3],+ +i[P>>3]),i[s+8+(Z<<4)>>3]=q,i[s+8+(Z<<4)+8>>3]=$,r[s>>2]=1+(0|r[s>>2])}if((0|J)<(0|b)&&(Z=0|r[f>>2],q=+((0|r[u>>2])-Z|0),i[O>>3]=+((0|r[h>>2])-Z|0)-.5*q,i[E>>3]=.8660254037844386*q,fe(O,0|r[N>>2],d,1,x),Z=0|r[s>>2],q=+p(+ +i[l>>3]),$=+g(+ +i[o>>3],+ +i[x>>3]),i[s+8+(Z<<4)>>3]=q,i[s+8+(Z<<4)+8>>3]=$,r[s>>2]=1+(0|r[s>>2])),(0|(J=J+1|0))>=(0|K)){e=3;break}A=0|r[N>>2],G=0|r[h>>2],V=0|r[u>>2],H=0|r[f>>2]}3!=(0|e)?12==(0|e)&&T(27073,27120,599,27130):L=U}}function de(e,t,n){e|=0,t|=0,n|=0;var A,i,s,o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0;o=L,L=L+128|0,l=o,u=20208,f=(c=a=o+64|0)+60|0;do{r[c>>2]=r[u>>2],c=c+4|0,u=u+4|0}while((0|c)<(0|f));u=20272,f=(c=l)+60|0;do{r[c>>2]=r[u>>2],c=c+4|0,u=u+4|0}while((0|c)<(0|f));p=(p=!(0|Pe(0|r[t>>2])))?a:l,c=0|r[(s=e+4|0)>>2],a=0|r[(A=e+8|0)>>2],l=0|r[(i=e+12|0)>>2],u=a+(c<<1)|0,r[s>>2]=u,a=l+(a<<1)|0,r[A>>2]=a,c=(l<<1)+c|0,r[i>>2]=c,l=a-u|0,f=c-u|0,(0|u)<0&&(r[A>>2]=l,r[i>>2]=f,r[s>>2]=0,a=l,u=0,c=f),f=u-a|0,l=c-a|0,(0|a)<0?(r[s>>2]=f,r[i>>2]=l,r[A>>2]=0,a=0):(l=c,f=u),u=f-l|0,c=a-l|0,(0|l)<0?(r[s>>2]=u,r[A>>2]=c,r[i>>2]=0,l=0):(c=a,u=f),(0|(a=(0|l)<(0|(a=(0|c)<(0|u)?c:u))?l:a))>0&&(l=l-a|0,c=c-a|0,u=u-a|0,r[s>>2]=u,r[A>>2]=c,r[i>>2]=l),h=(c<<1)+u|0,f=l+(u<<1)|0,r[s>>2]=f,r[A>>2]=h,c=(l<<1)+c|0,r[i>>2]=c,a=h-f|0,l=c-f|0,(0|f)<0?(r[A>>2]=a,r[i>>2]=l,r[s>>2]=0,f=0,c=l):a=h,u=f-a|0,l=c-a|0,(0|a)<0?(r[s>>2]=u,r[i>>2]=l,r[A>>2]=0,f=u,a=0):l=c,u=f-l|0,c=a-l|0,(0|l)<0?(r[s>>2]=u,r[A>>2]=c,r[i>>2]=0,l=0):(c=a,u=f),(0|(a=(0|l)<(0|(a=(0|c)<(0|u)?c:u))?l:a))>0&&(r[s>>2]=u-a,r[A>>2]=c-a,r[i>>2]=l-a),0|Pe(0|r[t>>2])&&(c=0|r[s>>2],a=(3*(u=0|r[A>>2])|0)+c|0,c=(l=0|r[i>>2])+(3*c|0)|0,r[s>>2]=c,r[A>>2]=a,u=(3*l|0)+u|0,r[i>>2]=u,l=a-c|0,f=u-c|0,(0|c)<0?(r[A>>2]=l,r[i>>2]=f,r[s>>2]=0,a=l,h=0):(h=c,f=u),c=h-a|0,l=f-a|0,(0|a)<0?(r[s>>2]=c,r[i>>2]=l,r[A>>2]=0,h=c,u=0):(u=a,l=f),c=h-l|0,a=u-l|0,(0|l)<0?(r[s>>2]=c,r[A>>2]=a,r[i>>2]=0,u=a,l=0):c=h,(0|(a=(0|l)<(0|(a=(0|u)<(0|c)?u:c))?l:a))>0&&(r[s>>2]=c-a,r[A>>2]=u-a,r[i>>2]=l-a),r[t>>2]=1+(0|r[t>>2])),r[n>>2]=r[e>>2],l=0|r[A>>2],a=0|r[i>>2],t=0|r[p+4>>2],d=0|r[p+8>>2],u=(0|r[p>>2])+(0|r[s>>2])|0,r[(h=n+4|0)>>2]=u,l=t+l|0,r[(t=n+8|0)>>2]=l,a=d+a|0,r[(d=n+12|0)>>2]=a,c=l-u|0,(0|u)<0&&(a=a-u|0,r[t>>2]=c,r[d>>2]=a,r[h>>2]=0,l=c,u=0),(0|l)<0&&(u=u-l|0,r[h>>2]=u,a=a-l|0,r[d>>2]=a,r[t>>2]=0,l=0),f=u-a|0,c=l-a|0,(0|a)<0?(r[h>>2]=f,r[t>>2]=c,r[d>>2]=0,u=f,a=0):c=l,(0|(l=(0|a)<(0|(l=(0|c)<(0|u)?c:u))?a:l))>0&&(r[h>>2]=u-l,r[t>>2]=c-l,r[d>>2]=a-l),r[n+16>>2]=r[e>>2],l=0|r[A>>2],a=0|r[i>>2],t=0|r[p+16>>2],d=0|r[p+20>>2],u=(0|r[p+12>>2])+(0|r[s>>2])|0,r[(h=n+20|0)>>2]=u,l=t+l|0,r[(t=n+24|0)>>2]=l,a=d+a|0,r[(d=n+28|0)>>2]=a,c=l-u|0,(0|u)<0&&(a=a-u|0,r[t>>2]=c,r[d>>2]=a,r[h>>2]=0,l=c,u=0),(0|l)<0&&(u=u-l|0,r[h>>2]=u,a=a-l|0,r[d>>2]=a,r[t>>2]=0,l=0),f=u-a|0,c=l-a|0,(0|a)<0?(r[h>>2]=f,r[t>>2]=c,r[d>>2]=0,u=f,a=0):c=l,(0|(l=(0|a)<(0|(l=(0|c)<(0|u)?c:u))?a:l))>0&&(r[h>>2]=u-l,r[t>>2]=c-l,r[d>>2]=a-l),r[n+32>>2]=r[e>>2],l=0|r[A>>2],a=0|r[i>>2],t=0|r[p+28>>2],d=0|r[p+32>>2],u=(0|r[p+24>>2])+(0|r[s>>2])|0,r[(h=n+36|0)>>2]=u,l=t+l|0,r[(t=n+40|0)>>2]=l,a=d+a|0,r[(d=n+44|0)>>2]=a,c=l-u|0,(0|u)<0&&(a=a-u|0,r[t>>2]=c,r[d>>2]=a,r[h>>2]=0,l=c,u=0),(0|l)<0&&(u=u-l|0,r[h>>2]=u,a=a-l|0,r[d>>2]=a,r[t>>2]=0,l=0),f=u-a|0,c=l-a|0,(0|a)<0?(r[h>>2]=f,r[t>>2]=c,r[d>>2]=0,u=f,a=0):c=l,(0|(l=(0|a)<(0|(l=(0|c)<(0|u)?c:u))?a:l))>0&&(r[h>>2]=u-l,r[t>>2]=c-l,r[d>>2]=a-l),r[n+48>>2]=r[e>>2],l=0|r[A>>2],a=0|r[i>>2],t=0|r[p+40>>2],d=0|r[p+44>>2],u=(0|r[p+36>>2])+(0|r[s>>2])|0,r[(h=n+52|0)>>2]=u,l=t+l|0,r[(t=n+56|0)>>2]=l,a=d+a|0,r[(d=n+60|0)>>2]=a,c=l-u|0,(0|u)<0&&(a=a-u|0,r[t>>2]=c,r[d>>2]=a,r[h>>2]=0,l=c,u=0),(0|l)<0&&(u=u-l|0,r[h>>2]=u,a=a-l|0,r[d>>2]=a,r[t>>2]=0,l=0),f=u-a|0,c=l-a|0,(0|a)<0?(r[h>>2]=f,r[t>>2]=c,r[d>>2]=0,u=f,a=0):c=l,(0|(l=(0|a)<(0|(l=(0|c)<(0|u)?c:u))?a:l))>0&&(r[h>>2]=u-l,r[t>>2]=c-l,r[d>>2]=a-l),r[n+64>>2]=r[e>>2],c=0|r[A>>2],a=0|r[i>>2],d=0|r[p+52>>2],h=0|r[p+56>>2],u=(0|r[p+48>>2])+(0|r[s>>2])|0,r[(t=n+68|0)>>2]=u,c=d+c|0,r[(d=n+72|0)>>2]=c,a=h+a|0,r[(h=n+76|0)>>2]=a,l=c-u|0,(0|u)<0?(a=a-u|0,r[d>>2]=l,r[h>>2]=a,r[t>>2]=0,c=0):(l=c,c=u),(0|l)<0&&(c=c-l|0,r[t>>2]=c,a=a-l|0,r[h>>2]=a,r[d>>2]=0,l=0),f=c-a|0,u=l-a|0,(0|a)<0?(r[t>>2]=f,r[d>>2]=u,r[h>>2]=0,c=f,a=0):u=l,(0|(l=(0|a)<(0|(l=(0|u)<(0|c)?u:c))?a:l))<=0||(r[t>>2]=c-l,r[d>>2]=u-l,r[h>>2]=a-l),L=o}function pe(e,t,n,A){e|=0,n|=0,A|=0;var i,s,o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0;if(h=0|r[16928+((t|=0)<<2)>>2],h=(o=!!(0|A))?3*h|0:h,u=0|r[(s=e+4|0)>>2],l=0|r[(i=e+8|0)>>2],o){if((0|(a=l+u+(A=0|r[(c=e+12|0)>>2])|0))==(0|h))return 0|(h=1);f=c}else A=a=0|r[(f=e+12|0)>>2],a=l+u+a|0;if((0|a)<=(0|h))return 0|(h=0);do{if((0|A)>0){if(a=0|r[e>>2],(0|l)>0){a=18608+(80*a|0)+60|0,c=u;break}a=18608+(80*a|0)+40|0,n?(n=((d=(0|(n=l+(c=u-h|0)|0))<0)?0:n)-((u=(0|(l=A+l-(d?n:0)|0))<0)?l:0)-((c=(0|(A=A+c-(d?n:0)-(u?l:0)|0))<0)?A:0)|0,l=(l=(u?0:l)-(c?A:0)|0)-((u=(0|(c=(0|(A=c?0:A))<(0|(c=(0|l)<(0|n)?l:n))?A:c))>0)?c:0)|0,A=A-(u?c:0)|0,c=n-(u?c:0)+h|0,r[s>>2]=c,r[i>>2]=l,r[f>>2]=A):c=u}else a=18608+(80*(0|r[e>>2])|0)+20|0,c=u}while(0);if(r[e>>2]=r[a>>2],(0|(u=0|r[a+16>>2]))>0){n=0;do{(0|(e=(0|(A=(l=(0|(c=A+l-(b=(p=(0|(d=A+c|0))<0)?d:0)-(e=(g=(0|(m=l+c-b|0))<0)?m:0)|0))<0)?0:c))<(0|(e=(0|(l=(g?0:m)-(c=l?c:0)|0))<(0|(c=(p?0:d)-e-c|0))?l:c))?A:e))>0&&(c=c-e|0,l=l-e|0,A=A-e|0),n=n+1|0}while((0|n)<(0|u));r[s>>2]=c,r[i>>2]=l,r[f>>2]=A}return m=0|r[16848+(t<<2)>>2],g=0|y(m=o?3*m|0:m,0|r[a+8>>2]),b=0|y(m,0|r[a+12>>2]),c=(0|y(m,0|r[a+4>>2]))+c|0,r[s>>2]=c,l=g+l|0,r[i>>2]=l,A=b+A|0,r[f>>2]=A,a=l-c|0,(0|c)<0?(A=A-c|0,r[i>>2]=a,r[f>>2]=A,r[s>>2]=0,l=0):(a=l,l=c),(0|a)<0?(e=l-a|0,r[s>>2]=e,A=A-a|0,r[f>>2]=A,r[i>>2]=0,c=0):(e=l,c=a),l=e-A|0,a=c-A|0,(0|A)<0?(r[s>>2]=l,r[i>>2]=a,r[f>>2]=0,A=0):(a=c,l=e),(0|(c=(0|A)<(0|(c=(0|a)<(0|l)?a:l))?A:c))>0&&(l=l-c|0,a=a-c|0,A=A-c|0,r[s>>2]=l,r[i>>2]=a,r[f>>2]=A),o?0|(b=(a+l+A|0)==(0|h)?1:2):0|(b=2)}function me(e,t){e|=0,t|=0;var n=0;do{n=0|pe(e,t,0,1)}while(2==(0|n));return 0|n}function ge(e,t,n,A,s){e|=0,t|=0,n|=0,A|=0,s|=0;var o,a,l,c,u,f,h,d,m,b,y,B,v,C,_,M,w,E,x,S,I,R,D,P,F,N,O,U,k=0,G=0,V=0,H=0,Q=0,j=0,z=0;if(U=L,L=L+272|0,G=U+240|0,F=U,N=U+224|0,O=U+208|0,x=U+184|0,S=U+168|0,I=U+152|0,R=U+136|0,D=U+120|0,P=U+96|0,r[(k=U+256|0)>>2]=t,r[G>>2]=r[e>>2],r[G+4>>2]=r[e+4>>2],r[G+8>>2]=r[e+8>>2],r[G+12>>2]=r[e+12>>2],be(G,k,F),r[s>>2]=0,(0|(E=A+n+(6==(0|A)&1)|0))<=(0|n))L=U;else{y=n+6|0,B=O+8|0,v=x+8|0,C=16928+((b=0|r[k>>2])<<2)|0,_=S+8|0,M=I+8|0,w=R+8|0,d=0|r[G>>2],u=N+4|0,f=N+8|0,h=N+12|0,m=O+8|0,o=x+8|0,l=x+16|0,a=P+8|0,c=P+16|0,G=0,V=n,A=-1;e:for(;;){if(e=F+((k=(0|V)%6|0)<<4)|0,r[N>>2]=r[e>>2],r[N+4>>2]=r[e+4>>2],r[N+8>>2]=r[e+8>>2],r[N+12>>2]=r[e+12>>2],e=G,G=0|pe(N,b,0,1),(0|V)>(0|n)&!!(0|Pe(t))&&1!=(0|e)&(0|(H=0|r[N>>2]))!=(0|A)){switch(e=0|r[F+((z=(k+5|0)%6|0)<<4)+12>>2],Q=+((0|r[F+(z<<4)+8>>2])-e|0),i[O>>3]=+((0|r[F+(z<<4)+4>>2])-e|0)-.5*Q,i[B>>3]=.8660254037844386*Q,e=0|r[F+(k<<4)+12>>2],Q=+((0|r[F+(k<<4)+8>>2])-e|0),i[x>>3]=+((0|r[F+(k<<4)+4>>2])-e|0)-.5*Q,i[v>>3]=.8660254037844386*Q,Q=+(0|r[C>>2]),i[S>>3]=3*Q,i[_>>3]=0,j=-1.5*Q,i[I>>3]=j,i[M>>3]=2.598076211353316*Q,i[R>>3]=j,i[w>>3]=-2.598076211353316*Q,0|r[17008+(80*d|0)+(((0|A)==(0|d)?H:A)<<2)>>2]){case 1:e=I,A=S;break;case 3:e=R,A=I;break;case 2:e=S,A=R;break;default:e=8;break e}ft(O,x,A,e,D),0|ht(O,D)||0|ht(x,D)||(fe(D,d,b,1,P),z=0|r[s>>2],Q=+p(+ +i[c>>3]),j=+g(+ +i[a>>3],+ +i[P>>3]),i[s+8+(z<<4)>>3]=Q,i[s+8+(z<<4)+8>>3]=j,r[s>>2]=1+(0|r[s>>2]))}if((0|V)<(0|y)&&(z=0|r[h>>2],Q=+((0|r[f>>2])-z|0),i[O>>3]=+((0|r[u>>2])-z|0)-.5*Q,i[m>>3]=.8660254037844386*Q,fe(O,0|r[N>>2],b,1,x),z=0|r[s>>2],Q=+p(+ +i[l>>3]),j=+g(+ +i[o>>3],+ +i[x>>3]),i[s+8+(z<<4)>>3]=Q,i[s+8+(z<<4)+8>>3]=j,r[s>>2]=1+(0|r[s>>2])),(0|(V=V+1|0))>=(0|E)){e=3;break}A=0|r[N>>2]}3!=(0|e)?8==(0|e)&&T(27157,27120,766,27202):L=U}}function be(e,t,n){e|=0,t|=0,n|=0;var A,i,s,o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0;o=L,L=L+160|0,l=o,u=20336,f=(c=a=o+80|0)+72|0;do{r[c>>2]=r[u>>2],c=c+4|0,u=u+4|0}while((0|c)<(0|f));u=20416,f=(c=l)+72|0;do{r[c>>2]=r[u>>2],c=c+4|0,u=u+4|0}while((0|c)<(0|f));m=(m=!(0|Pe(0|r[t>>2])))?a:l,c=0|r[(s=e+4|0)>>2],a=0|r[(A=e+8|0)>>2],l=0|r[(i=e+12|0)>>2],u=a+(c<<1)|0,r[s>>2]=u,a=l+(a<<1)|0,r[A>>2]=a,c=(l<<1)+c|0,r[i>>2]=c,l=a-u|0,f=c-u|0,(0|u)<0&&(r[A>>2]=l,r[i>>2]=f,r[s>>2]=0,a=l,u=0,c=f),f=u-a|0,l=c-a|0,(0|a)<0?(r[s>>2]=f,r[i>>2]=l,r[A>>2]=0,a=0):(l=c,f=u),u=f-l|0,c=a-l|0,(0|l)<0?(r[s>>2]=u,r[A>>2]=c,r[i>>2]=0,l=0):(c=a,u=f),(0|(a=(0|l)<(0|(a=(0|c)<(0|u)?c:u))?l:a))>0&&(l=l-a|0,c=c-a|0,u=u-a|0,r[s>>2]=u,r[A>>2]=c,r[i>>2]=l),h=(c<<1)+u|0,f=l+(u<<1)|0,r[s>>2]=f,r[A>>2]=h,c=(l<<1)+c|0,r[i>>2]=c,a=h-f|0,l=c-f|0,(0|f)<0?(r[A>>2]=a,r[i>>2]=l,r[s>>2]=0,f=0,c=l):a=h,u=f-a|0,l=c-a|0,(0|a)<0?(r[s>>2]=u,r[i>>2]=l,r[A>>2]=0,f=u,a=0):l=c,u=f-l|0,c=a-l|0,(0|l)<0?(r[s>>2]=u,r[A>>2]=c,r[i>>2]=0,l=0):(c=a,u=f),(0|(a=(0|l)<(0|(a=(0|c)<(0|u)?c:u))?l:a))>0&&(r[s>>2]=u-a,r[A>>2]=c-a,r[i>>2]=l-a),0|Pe(0|r[t>>2])&&(c=0|r[s>>2],a=(3*(u=0|r[A>>2])|0)+c|0,c=(l=0|r[i>>2])+(3*c|0)|0,r[s>>2]=c,r[A>>2]=a,u=(3*l|0)+u|0,r[i>>2]=u,l=a-c|0,f=u-c|0,(0|c)<0?(r[A>>2]=l,r[i>>2]=f,r[s>>2]=0,a=l,h=0):(h=c,f=u),c=h-a|0,l=f-a|0,(0|a)<0?(r[s>>2]=c,r[i>>2]=l,r[A>>2]=0,h=c,u=0):(u=a,l=f),c=h-l|0,a=u-l|0,(0|l)<0?(r[s>>2]=c,r[A>>2]=a,r[i>>2]=0,u=a,l=0):c=h,(0|(a=(0|l)<(0|(a=(0|u)<(0|c)?u:c))?l:a))>0&&(r[s>>2]=c-a,r[A>>2]=u-a,r[i>>2]=l-a),r[t>>2]=1+(0|r[t>>2])),h=0;do{r[n+(h<<4)>>2]=r[e>>2],l=0|r[A>>2],a=0|r[i>>2],d=0|r[m+(12*h|0)+4>>2],p=0|r[m+(12*h|0)+8>>2],u=(0|r[m+(12*h|0)>>2])+(0|r[s>>2])|0,r[(t=n+(h<<4)+4|0)>>2]=u,l=d+l|0,r[(d=n+(h<<4)+8|0)>>2]=l,a=p+a|0,r[(p=n+(h<<4)+12|0)>>2]=a,c=l-u|0,(0|u)<0&&(a=a-u|0,r[d>>2]=c,r[p>>2]=a,r[t>>2]=0,l=c,u=0),(0|l)<0&&(u=u-l|0,r[t>>2]=u,a=a-l|0,r[p>>2]=a,r[d>>2]=0,l=0),f=u-a|0,c=l-a|0,(0|a)<0?(r[t>>2]=f,r[d>>2]=c,r[p>>2]=0,u=f,a=0):c=l,(0|(l=(0|a)<(0|(l=(0|c)<(0|u)?c:u))?a:l))>0&&(r[t>>2]=u-l,r[d>>2]=c-l,r[p>>2]=a-l),h=h+1|0}while(6!=(0|h));L=o}function ye(e,t){return t=0|Gt(0|(e|=0),0|(t|=0),52),w(),15&t}function Be(e,t){return t=0|Gt(0|(e|=0),0|(t|=0),45),w(),127&t}function ve(e,t){e|=0;var n=0,r=0,i=0,s=0;return!0&134217728==(-16777216&(t|=0))?(r=0|Gt(0|e,0|t,52),w(),r&=15,n=0|Gt(0|e,0|t,45),w(),(n&=127)>>>0>121?0|(e=0):!(613566756&(s=0|Vt(0|(i=0|Gt(0|e,0|t,0|(s=3*(15^r)|0))),0|w(),0|s))&(0|Lt(-1227133514,-1171,0|s,0|(i=0|w()))))&!(4681&i&w())&&15==(0|r)|!(0|(s=0|Gt(0|(0|Vt(0|~e,0|~t,0|(s=19+(3*r|0)|0))),0|w(),0|s)))&!(0|w())?0|A[20496+n|0]?!(0|e)&!(0|(t&=8191))?0|(s=1):(s=0|Ht(0|e,0|t),w(),0|!!((63-s|0)%3|0)):0|(s=1):0|(s=0)):0|(e=0)}function Ce(e,t,n,A){e|=0,n|=0,A|=0;var i=0,s=0,o=0,a=0;if(i=0|Vt(0|(t|=0),0,52),s=0|w(),n=0|Vt(0|n,0,45),n=0|s|w()|134225919,(0|t)<1)return s=-1,A=n,r[(t=e)>>2]=s,void(r[(e=e+4|0)>>2]=A);for(s=1,i=-1;a=0|Vt(7,0,0|(o=3*(15-s|0)|0)),n&=~w(),i=i&~a|(o=0|Vt(0|A,0,0|o)),n=0|n|w(),(0|s)!=(0|t);)s=s+1|0;r[(o=a=e)>>2]=i,r[(a=a+4|0)>>2]=n}function _e(e,t,n,A){n|=0,A|=0;var i=0,s=0;if(s=0|Gt(0|(e|=0),0|(t|=0),52),w(),n>>>0>15)return 0|(A=4);if((0|(s&=15))<(0|n))return 0|(A=12);if((0|s)==(0|n))return r[A>>2]=e,r[A+4>>2]=t,0|(A=0);if(i=0|Vt(0|n,0,52),i|=e,e=w()|-15728641&t,(0|s)>(0|n))do{t=0|Vt(7,0,3*(14-n|0)|0),n=n+1|0,i|=t,e=0|w()|e}while((0|n)<(0|s));return r[A>>2]=i,r[A+4>>2]=e,0|(A=0)}function Me(e,t,n,A){n|=0,A|=0;var i=0,s=0,o=0;if(s=0|Gt(0|(e|=0),0|(t|=0),52),w(),!((0|n)<16&(0|(s&=15))<=(0|n)))return 0|(A=4);i=n-s|0,n=0|Gt(0|e,0|t,45),w();e:do{if(0|Q(127&n)){t:do{if(0|s){for(n=1;!((o=0|Vt(7,0,3*(15-n|0)|0))&e|0)&!((0|w())&t);){if(!(n>>>0<s>>>0))break t;n=n+1|0}n=0|$e(7,0,i,((0|i)<0)<<31>>31),i=0|w();break e}}while(0);n=0|Rt(0|(n=0|Nt(0|(n=0|$e(7,0,i,((0|i)<0)<<31>>31)),0|w(),5,0)),0|w(),-5,-1),n=0|Rt(0|(n=0|Ft(0|n,0|w(),6,0)),0|w(),1,0),i=0|w()}else n=0|$e(7,0,i,((0|i)<0)<<31>>31),i=0|w()}while(0);return r[(o=A)>>2]=n,r[o+4>>2]=i,0|(o=0)}function we(e,t){var n=0,A=0,r=0;if(r=0|Gt(0|(e|=0),0|(t|=0),45),w(),!(0|Q(127&r)))return 0|(r=0);r=0|Gt(0|e,0|t,52),w(),r&=15;e:do{if(r)for(A=1;;){if(n=0|Gt(0|e,0|t,3*(15-A|0)|0),w(),0|(n&=7))break e;if(!(A>>>0<r>>>0)){n=0;break}A=A+1|0}else n=0}while(0);return 0|(r=1&!(0|n))}function Te(e,t,n,A){return e|=0,t|=0,(0|(A|=0))<(0|(n|=0))?(A=e,M(0|(n=t)),0|A):(n=0|Vt(-1,-1,3+(3*(A-n|0)|0)|0),A=0|Vt(0|~n,0|~w(),3*(15-A|0)|0),n=~w()&t,A=~A&e,M(0|n),0|A)}function Ee(e,t,n,A){n|=0,A|=0;var i=0;return i=0|Gt(0|(e|=0),0|(t|=0),52),w(),(0|n)<16&(0|(i&=15))<=(0|n)?((0|i)<(0|n)&&(i=0|Vt(-1,-1,3+(3*(n+-1-i|0)|0)|0),i=0|Vt(0|~i,0|~w(),3*(15-n|0)|0),t=~w()&t,e&=~i),i=0|Vt(0|n,0,52),n=-15728641&t|w(),r[A>>2]=e|i,r[A+4>>2]=n,0|(A=0)):0|(A=4)}function xe(e,t){var n=0,A=0,r=0;if(r=0|Gt(0|(e|=0),0|(t|=0),52),w(),!(r&=15))return 0|(r=0);for(A=1;;){if(n=0|Gt(0|e,0|t,3*(15-A|0)|0),w(),0|(n&=7)){A=5;break}if(!(A>>>0<r>>>0)){n=0,A=5;break}A=A+1|0}return 5==(0|A)?0|n:0}function Se(e,t){var n=0,A=0,r=0,i=0,s=0,o=0,a=0,l=0,c=0;if(c=0|Gt(0|(e|=0),0|(t|=0),52),w(),!(c&=15))return c=e,M(0|(l=t)),0|c;for(l=1,n=0;;){switch(i=e&~(o=0|Vt(7,0,0|(A=3*(15-l|0)|0))),s=t&~(a=0|w()),e=0|Gt(0|e,0|t,0|A),w(),7&e){case 1:e=5;break;case 5:e=4;break;case 4:e=6;break;case 6:e=2;break;case 2:e=3;break;case 3:e=1;break;default:e&=7}e=(A=0|Vt(0|e,0,0|A))|i,t=(r=0|w())|s;e:do{if(!n)if(!(A&o|0)&!(r&a|0))n=0;else if(s=0|Gt(0|e,0|t,52),w(),s&=15){n=1;t:for(;;){switch(a=0|Gt(0|e,0|t,3*(15-n|0)|0),w(),7&a){case 1:break t;case 0:break;default:n=1;break e}if(!(n>>>0<s>>>0)){n=1;break e}n=n+1|0}for(i=1;;){switch(n=0|Gt(0|e,0|t,0|(r=3*(15-i|0)|0)),w(),A=e&~(A=0|Vt(7,0,0|r)),t&=~w(),7&n){case 1:e=5;break;case 5:e=4;break;case 4:e=6;break;case 6:e=2;break;case 2:e=3;break;case 3:e=1;break;default:e=7&n}if(e=0|Vt(0|e,0,0|r),e|=A,t=0|w()|t,!(i>>>0<s>>>0)){n=1;break e}i=i+1|0}}else n=1}while(0);if(!(l>>>0<c>>>0))break;l=l+1|0}return M(0|t),0|e}function Ie(e,t){var n=0,A=0,r=0,i=0,s=0;if(s=0|Gt(0|(e|=0),0|(t|=0),52),w(),!(s&=15))return s=e,M(0|(i=t)),0|s;for(i=1;;){switch(n=0|Gt(0|e,0|t,0|(r=3*(15-i|0)|0)),w(),A=e&~(A=0|Vt(7,0,0|r)),t&=~w(),7&n){case 1:e=5;break;case 5:e=4;break;case 4:e=6;break;case 6:e=2;break;case 2:e=3;break;case 3:e=1;break;default:e=7&n}if(e=0|Vt(0|e,0,0|r),e|=A,t=0|w()|t,!(i>>>0<s>>>0))break;i=i+1|0}return M(0|t),0|e}function Re(e,t){var n=0,A=0,r=0,i=0,s=0,o=0,a=0,l=0,c=0;if(c=0|Gt(0|(e|=0),0|(t|=0),52),w(),!(c&=15))return c=e,M(0|(l=t)),0|c;for(l=1,n=0;;){switch(i=e&~(o=0|Vt(7,0,0|(A=3*(15-l|0)|0))),s=t&~(a=0|w()),e=0|Gt(0|e,0|t,0|A),w(),7&e){case 1:e=3;break;case 3:e=2;break;case 2:e=6;break;case 6:e=4;break;case 4:e=5;break;case 5:e=1;break;default:e&=7}e=(A=0|Vt(0|e,0,0|A))|i,t=(r=0|w())|s;e:do{if(!n)if(!(A&o|0)&!(r&a|0))n=0;else if(s=0|Gt(0|e,0|t,52),w(),s&=15){n=1;t:for(;;){switch(a=0|Gt(0|e,0|t,3*(15-n|0)|0),w(),7&a){case 1:break t;case 0:break;default:n=1;break e}if(!(n>>>0<s>>>0)){n=1;break e}n=n+1|0}for(i=1;;){switch(A=e&~(A=0|Vt(7,0,0|(n=3*(15-i|0)|0))),r=t&~w(),e=0|Gt(0|e,0|t,0|n),w(),7&e){case 1:e=3;break;case 3:e=2;break;case 2:e=6;break;case 6:e=4;break;case 4:e=5;break;case 5:e=1;break;default:e&=7}if(e=0|Vt(0|e,0,0|n),e|=A,t=0|w()|r,!(i>>>0<s>>>0)){n=1;break e}i=i+1|0}}else n=1}while(0);if(!(l>>>0<c>>>0))break;l=l+1|0}return M(0|t),0|e}function Le(e,t){var n=0,A=0,r=0,i=0,s=0;if(s=0|Gt(0|(e|=0),0|(t|=0),52),w(),!(s&=15))return s=e,M(0|(i=t)),0|s;for(i=1;;){switch(n=e&~(n=0|Vt(7,0,0|(A=3*(15-i|0)|0))),r=t&~w(),e=0|Gt(0|e,0|t,0|A),w(),7&e){case 1:e=3;break;case 3:e=2;break;case 2:e=6;break;case 6:e=4;break;case 4:e=5;break;case 5:e=1;break;default:e&=7}if(e=0|Vt(0|e,0,0|A),e|=n,t=0|w()|r,!(i>>>0<s>>>0))break;i=i+1|0}return M(0|t),0|e}function De(e,t){e|=0;var n,A=0,i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,T=0;if(n=L,L=L+16|0,v=n,Vt(0|(t|=0),0,52),A=134225919|w(),!t)return(0|r[e+4>>2])>2||(0|r[e+8>>2])>2||(0|r[e+12>>2])>2?(v=0,M(0|(B=0)),L=n,0|v):(Vt(0|z(e),0,45),B=0|w()|A,v=-1,M(0|B),L=n,0|v);r[v>>2]=r[e>>2],r[v+4>>2]=r[e+4>>2],r[v+8>>2]=r[e+8>>2],r[v+12>>2]=r[e+12>>2],B=v+4|0;e:do{if((0|t)>0)for(b=v+12|0,m=t,h=0|r[(g=v+8|0)>>2],d=0|r[b>>2],t=-1,f=0|r[v+4>>2];;){p=m,m=m+-1|0,e=f-d|0,i=h-d|0,1&p?(o=0|wt(.14285714285714285*+((3*e|0)-i|0)),r[B>>2]=o,e=0|wt(.14285714285714285*+((i<<1)+e|0)),r[g>>2]=e,r[b>>2]=0,i=e-o|0,s=0-o|0,(0|o)<0?(r[g>>2]=i,r[b>>2]=s,r[B>>2]=0,e=i,a=0):(a=o,s=0),o=a-e|0,i=s-e|0,(0|e)<0?(r[B>>2]=o,r[b>>2]=i,r[g>>2]=0,a=o,o=0):(i=s,o=e),e=a-i|0,s=o-i|0,(0|i)<0?(r[B>>2]=e,r[g>>2]=s,r[b>>2]=0,o=0):(s=o,e=a,o=i),(0|(i=(0|o)<(0|(i=(0|s)<(0|e)?s:e))?o:i))>0&&(o=o-i|0,s=s-i|0,e=e-i|0,r[B>>2]=e,r[g>>2]=s,r[b>>2]=o),c=(u=(0|(l=(0|(T=(l=(0|(i=(3*o|0)+e-((C=(0|(_=s+(3*e|0)|0))<0)?_:0)-((c=(0|(u=o+(3*s|0)-(C?_:0)|0))<0)?u:0)|0))<0)?0:i))<(0|(l=(0|(a=(c?0:u)-(l?i:0)|0))<(0|(i=(C?0:_)-(c?u:0)-(l?i:0)|0))?a:i))?T:l))>0)?l:0,a=a-(u?l:0)|0,l=T-(u?l:0)|0,u=o):(l=0|wt(.14285714285714285*+((e<<1)+i|0)),r[B>>2]=l,s=0|wt(.14285714285714285*+((3*i|0)-e|0)),r[g>>2]=s,r[b>>2]=0,i=s-l|0,e=0-l|0,(0|l)<0?(r[g>>2]=i,r[b>>2]=e,r[B>>2]=0,s=i,l=0):e=0,a=l-s|0,i=e-s|0,(0|s)<0?(r[B>>2]=a,r[b>>2]=i,r[g>>2]=0,o=i,s=0):(o=e,a=l),e=a-o|0,i=s-o|0,(0|o)<0?(r[B>>2]=e,r[g>>2]=i,r[b>>2]=0,s=i,o=0):e=a,(0|(i=(0|o)<(0|(i=(0|s)<(0|e)?s:e))?o:i))>0&&(o=o-i|0,s=s-i|0,e=e-i|0,r[B>>2]=e,r[g>>2]=s,r[b>>2]=o),c=(u=(0|(l=(0|(C=(l=(0|(i=(3*o|0)+s-((T=(0|(_=o+(3*e|0)|0))<0)?_:0)-((c=(0|(u=(3*s|0)+e-(T?_:0)|0))<0)?u:0)|0))<0)?0:i))<(0|(l=(0|(a=(c?0:u)-(l?i:0)|0))<(0|(i=(T?0:_)-(c?u:0)-(l?i:0)|0))?a:i))?C:l))>0)?l:0,a=a-(u?l:0)|0,l=C-(u?l:0)|0,u=o),l=(f=(0|(d=d-l+((o=(0|(i=f+(c-i)|0))<0)?0-i|0:0)+((a=(0|(c=h-a-(o?i:0)|0))<0)?0-c|0:0)|0))<0)?0:d,T=(a?0:c)-(f?d:0)|0,d=(d=(o?0:i)-(a?c:0)-(f?d:0)|0)-((c=(0|(f=(0|l)<(0|(f=(0|T)<(0|d)?T:d))?l:f))>0)?f:0)|0,i=t&~(i=0|Vt(7,0,0|(a=3*(15-p|0)|0))),o=A&~w(),t=(t=(A=(0|(_=l-(c?f:0)-(_=(h=(0|d)<0)?d:0)+((C=(0|(T=T-(c?f:0)-_|0))<0)?0-T|0:0)|0))<0)?0:_)-(T=(0|(T=(0|t)<(0|(T=(0|(A=(C?0:T)-(_=A?_:0)|0))<(0|(_=(h?0:d)-(C?T:0)-_|0))?A:_))?t:T))>0?T:0)|0,A=A-T|0;t:do{switch(_-T|0){case 0:switch(0|A){case 0:t=0|t?1==(0|t)?1:7:0;break t;case 1:t=0|t?1==(0|t)?3:7:2;break t;default:y=36;break t}case 1:switch(0|A){case 0:t=0|t?1==(0|t)?5:7:4;break t;case 1:if(t){y=36;break t}t=6;break t;default:y=36;break t}default:y=36}}while(0);if(36==(0|y)&&(y=0,t=7),t=0|Vt(0|t,0,0|a),t|=i,A=0|w()|o,(0|p)<=1)break e;h=s,d=u,f=e}else t=-1,e=0|r[B>>2]}while(0);e:do{if((0|e)<=2&&(0|r[v+8>>2])<=2&&(0|r[v+12>>2])<=2){if(t|=e=0|Vt(0|(i=0|z(v)),0,45),e=w()|-1040385&A,c=0|J(v),!(0|Q(i))){if((0|c)<=0)break;for(l=0;;){a=0|Gt(0|t,0|e,52),w(),a&=15;t:do{if(a)for(o=1;;){switch(A=0|Gt(0|t,0|e,0|(s=3*(15-o|0)|0)),w(),t&=~(i=0|Vt(7,0,0|s)),i=e&~w(),7&A){case 1:e=5;break;case 5:e=4;break;case 4:e=6;break;case 6:e=2;break;case 2:e=3;break;case 3:e=1;break;default:e=7&A}if(t|=e=0|Vt(0|e,0,0|s),e=0|w()|i,!(o>>>0<a>>>0))break t;o=o+1|0}}while(0);if((0|(l=l+1|0))==(0|c))break e}}a=0|Gt(0|t,0|e,52),w(),a&=15;t:do{if(a){A=1;n:for(;;){switch(T=0|Gt(0|t,0|e,3*(15-A|0)|0),w(),7&T){case 1:break n;case 0:break;default:break t}if(!(A>>>0<a>>>0))break t;A=A+1|0}if(0|K(i,0|r[v>>2]))for(o=1;;){switch(i=t&~(i=0|Vt(7,0,0|(A=3*(15-o|0)|0))),s=e&~w(),e=0|Gt(0|t,0|e,0|A),w(),7&e){case 1:e=3;break;case 3:e=2;break;case 2:e=6;break;case 6:e=4;break;case 4:e=5;break;case 5:e=1;break;default:e&=7}if(t=0|Vt(0|e,0,0|A),t|=i,e=0|w()|s,!(o>>>0<a>>>0))break t;o=o+1|0}else for(o=1;;){switch(A=0|Gt(0|t,0|e,0|(s=3*(15-o|0)|0)),w(),t&=~(i=0|Vt(7,0,0|s)),i=e&~w(),7&A){case 1:e=5;break;case 5:e=4;break;case 4:e=6;break;case 6:e=2;break;case 2:e=3;break;case 3:e=1;break;default:e=7&A}if(t|=e=0|Vt(0|e,0,0|s),e=0|w()|i,!(o>>>0<a>>>0))break t;o=o+1|0}}}while(0);if((0|c)>0){A=0;do{t=0|Se(t,e),e=0|w(),A=A+1|0}while((0|A)!=(0|c))}}else t=0,e=0}while(0);return T=t,M(0|(_=e)),L=n,0|T}function Pe(e){return(0|(e|=0))%2|0}function Fe(e,t,n){n|=0;var A,o,a,l,c=0,h=0,d=0,p=0,m=0;if(a=L,L=L+64|0,o=a+24|0,p=a+48|0,m=a,(t|=0)>>>0>15)return L=a,0|(m=4);if(A=+i[(e|=0)>>3],i[s>>3]=A,!(2146435072&~r[s+4>>2]))return L=a,0|(m=3);if(c=+i[e+8>>3],i[s>>3]=c,!(2146435072&~r[s+4>>2]))return L=a,0|(m=3);l=(h=+u(+A))*+u(+c),h*=+f(+c),c=+f(+A),i[m>>3]=l,i[m+8>>3]=h,i[m+16>>3]=c,i[s>>3]=l;do{if(2146435072&~r[s+4>>2]&&(i[s>>3]=c,e=0|r[s+4>>2],i[s>>3]=h,!(!(2146435072&~r[s+4>>2])|!0&!(2146435072&~e)))){if(r[o>>2]=r[m>>2],r[o+4>>2]=r[m+4>>2],r[o+8>>2]=r[m+8>>2],r[o+12>>2]=r[m+12>>2],r[o+16>>2]=r[m+16>>2],r[o+20>>2]=r[m+20>>2],ce(o,t,p),p=0|De(p,t),m=0|w(),r[n>>2]=p,r[n+4>>2]=m,!(!(0|p)&!(0|m))){d=0;break}T(27634,27225,1073,27248)}else d=2}while(0);return L=a,0|(m=d)}function Ne(e,t,n){var A,i,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0;if(i=(n|=0)+4|0,p=0|Gt(0|(e|=0),0|(t|=0),52),w(),p&=15,d=0|Gt(0|e,0|t,45),w(),s=!(0|p),0|Q(127&d)){if(s)return 0|(p=1);s=1}else{if(s)return 0|(p=0);s=0|r[i>>2]||0|r[n+8>>2]?1:1&!!(0|r[n+12>>2])}for(d=n+8|0,A=n+12|0,h=1,n=0|r[i>>2],l=0|r[d>>2],a=0|r[A>>2];o=3*n|0,c=3*l|0,f=3*a|0,1&h?(u=l+o|0,r[i>>2]=u,a=a+c|0,r[d>>2]=a,o=f+n|0,r[A>>2]=o,n=a-u|0,l=o-u|0,(0|u)<0?(r[d>>2]=n,r[A>>2]=l,r[i>>2]=0,c=0,o=l):(n=a,c=u),l=c-n|0,a=o-n|0,(0|n)<0?(r[i>>2]=l,r[A>>2]=a,r[d>>2]=0,c=l,o=0):(a=o,o=n),n=c-a|0,l=o-a|0,(0|a)<0?(r[i>>2]=n,r[d>>2]=l,r[A>>2]=0,a=0):(l=o,n=c),(0|(o=(0|a)<(0|(o=(0|l)<(0|n)?l:n))?a:o))>0&&(a=a-o|0,l=l-o|0,n=n-o|0,r[i>>2]=n,r[d>>2]=l,r[A>>2]=a)):(u=c+n|0,c=a+o|0,r[i>>2]=c,r[d>>2]=u,o=f+l|0,r[A>>2]=o,n=u-c|0,a=o-c|0,(0|c)<0?(r[d>>2]=n,r[A>>2]=a,r[i>>2]=0,c=0,o=a):n=u,l=c-n|0,a=o-n|0,(0|n)<0?(r[i>>2]=l,r[A>>2]=a,r[d>>2]=0,c=l,o=0):(a=o,o=n),n=c-a|0,l=o-a|0,(0|a)<0?(r[i>>2]=n,r[d>>2]=l,r[A>>2]=0,a=0):(l=o,n=c),(0|(o=(0|a)<(0|(o=(0|l)<(0|n)?l:n))?a:o))>0&&(a=a-o|0,l=l-o|0,n=n-o|0,r[i>>2]=n,r[d>>2]=l,r[A>>2]=a)),o=0|Gt(0|e,0|t,3*(15-h|0)|0),w(),((o&=7)+-1|0)>>>0<6&&(u=0|r[22032+(12*o|0)+4>>2],f=0|r[22032+(12*o|0)+8>>2],c=(0|r[22032+(12*o|0)>>2])+n|0,r[i>>2]=c,l=u+l|0,r[d>>2]=l,n=f+a|0,r[A>>2]=n,a=l-c|0,o=n-c|0,(0|c)<0&&(r[d>>2]=a,r[A>>2]=o,r[i>>2]=0,c=0,n=o,l=a),o=c-l|0,a=n-l|0,(0|l)<0?(r[i>>2]=o,r[A>>2]=a,r[d>>2]=0,c=o,l=0):a=n,n=c-a|0,o=l-a|0,(0|a)<0?(r[i>>2]=n,r[d>>2]=o,r[A>>2]=0,l=o,a=0):n=c,(0|(o=(0|a)<(0|(o=(0|l)<(0|n)?l:n))?a:o))>0&&(a=a-o|0,l=l-o|0,n=n-o|0,r[i>>2]=n,r[d>>2]=l,r[A>>2]=a)),h>>>0<p>>>0;)h=h+1|0;return 0|s}function Oe(e,t,n){n|=0;var A,i,s,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0;if(s=L,L=L+16|0,i=s,d=0|Gt(0|(e|=0),0|(t|=0),45),w(),(d&=127)>>>0>121)return r[n>>2]=0,r[n+4>>2]=0,r[n+8>>2]=0,r[n+12>>2]=0,L=s,0|(p=5);e:do{if(0|Q(d)&&(u=0|Gt(0|e,0|t,52),w(),0|(u&=15))){o=1;t:for(;;){switch(p=0|Gt(0|e,0|t,3*(15-o|0)|0),w(),7&p){case 5:break t;case 0:break;default:h=t;break e}if(!(o>>>0<u>>>0)){h=t;break e}o=o+1|0}for(c=1,o=t;;){switch(a=e&~(a=0|Vt(7,0,0|(t=3*(15-c|0)|0))),l=o&~w(),o=0|Gt(0|e,0|o,0|t),w(),7&o){case 1:o=3;break;case 3:o=2;break;case 2:o=6;break;case 6:o=4;break;case 4:o=5;break;case 5:o=1;break;default:o&=7}if(e=0|Vt(0|o,0,0|t),e|=a,o=0|w()|l,!(c>>>0<u>>>0)){h=o;break e}c=c+1|0}}else h=t}while(0);if(p=7696+(28*d|0)|0,r[n>>2]=r[p>>2],r[n+4>>2]=r[p+4>>2],r[n+8>>2]=r[p+8>>2],r[n+12>>2]=r[p+12>>2],!(0|Ne(e,h,n)))return L=s,0|(p=0);if(p=n+4|0,r[i>>2]=r[p>>2],r[i+4>>2]=r[p+4>>2],r[i+8>>2]=r[p+8>>2],f=0|Gt(0|e,0|h,52),w(),A=15&f,1&f?(l=0|r[p>>2],o=(3*(a=0|r[(u=n+8|0)>>2])|0)+l|0,l=(t=0|r[(f=n+12|0)>>2])+(3*l|0)|0,r[p>>2]=l,r[u>>2]=o,a=(3*t|0)+a|0,r[f>>2]=a,t=o-l|0,c=a-l|0,(0|l)<0&&(r[u>>2]=t,r[f>>2]=c,r[p>>2]=0,o=t,l=0,a=c),c=l-o|0,t=a-o|0,(0|o)<0?(r[p>>2]=c,r[f>>2]=t,r[u>>2]=0,o=0):(t=a,c=l),l=c-t|0,a=o-t|0,(0|t)<0?(r[p>>2]=l,r[u>>2]=a,r[f>>2]=0,t=0):(a=o,l=c),(0|(o=(0|t)<(0|(o=(0|a)<(0|l)?a:l))?t:o))>0&&(r[p>>2]=l-o,r[u>>2]=a-o,r[f>>2]=t-o),a=A+1|0):a=A,0|Q(d)){e:do{if(A)for(t=1;;){if(o=0|Gt(0|e,0|h,3*(15-t|0)|0),w(),0|(o&=7))break e;if(!(t>>>0<A>>>0)){o=0;break}t=t+1|0}else o=0}while(0);o=4==(0|o)&1}else o=0;if(0|pe(n,a,o,0)){if(0|Q(d))do{}while(0|pe(n,a,0,0));(0|a)!=(0|A)&&(e=0|r[(u=n+12|0)>>2],t=0|wt(.14285714285714285*+(((o=(0|r[p>>2])-e|0)<<1)+(e=(0|r[(c=n+8|0)>>2])-e|0)|0)),r[p>>2]=t,o=0|wt(.14285714285714285*+((3*e|0)-o|0)),r[c>>2]=o,r[u>>2]=0,e=o-t|0,a=0-t|0,(0|t)<0?(r[c>>2]=e,r[u>>2]=a,r[p>>2]=0,o=e,t=0):a=0,l=t-o|0,e=a-o|0,(0|o)<0?(r[p>>2]=l,r[u>>2]=e,r[c>>2]=0,t=l,o=0):e=a,l=t-e|0,a=o-e|0,(0|e)<0?(r[p>>2]=l,r[c>>2]=a,r[u>>2]=0,t=l,e=0):a=o,(0|(o=(0|e)<(0|(o=(0|a)<(0|t)?a:t))?e:o))>0&&(r[p>>2]=t-o,r[c>>2]=a-o,r[u>>2]=e-o))}else(0|a)!=(0|A)&&(r[p>>2]=r[i>>2],r[p+4>>2]=r[i+4>>2],r[p+8>>2]=r[i+8>>2]);return L=s,0|(p=0)}function Ue(e,t,n){n|=0;var A,r,s,o=0,a=0,l=0;return s=L,L=L+48|0,r=s,(o=0|Oe(e|=0,t|=0,A=s+24|0))?(L=s,0|o):(o=0|Gt(0|e,0|t,52),w(),ue(A,15&o,r),l=+p(+ +i[r+16>>3]),a=+g(+ +i[r+8>>3],+ +i[r>>3]),i[n>>3]=l,i[n+8>>3]=a,L=s,0|(o=0))}function ke(e,t,n){n|=0;var A,r=0,i=0,s=0;if(A=L,L=L+16|0,0|(r=0|Oe(e|=0,t|=0,s=A)))return L=A,0|(s=r);r=0|Gt(0|e,0|t,45),w(),r=!(0|Q(127&r)),i=0|Gt(0|e,0|t,52),w(),i&=15;e:do{if(!r){if(0|i)for(r=1;;){if(!(!((0|Vt(7,0,3*(15-r|0)|0))&e|0)&!((0|w())&t)))break e;if(!(r>>>0<i>>>0))break;r=r+1|0}return he(s,i,0,5,n),L=A,0|0}}while(0);return ge(s,i,0,6,n),L=A,0|0}function Ge(e,t){t|=0;var n=0,A=0,i=0,s=0,o=0,a=0,l=0;if((e|=0)>>>0>15)return 0|(a=4);if(Vt(0|e,0,52),a=134225919|w(),!e){n=0,A=0;do{0|Q(A)&&(Vt(0|A,0,45),o=0|a|w(),r[(e=t+(n<<3)|0)>>2]=-1,r[e+4>>2]=o,n=n+1|0),A=A+1|0}while(122!=(0|A));return 0|(n=0)}n=0,o=0;do{if(0|Q(o)){for(Vt(0|o,0,45),A=1,i=-1,s=0|a|w();i&=~(l=0|Vt(7,0,3*(15-A|0)|0)),s&=~w(),(0|A)!=(0|e);)A=A+1|0;r[(l=t+(n<<3)|0)>>2]=i,r[l+4>>2]=s,n=n+1|0}o=o+1|0}while(122!=(0|o));return 0|(n=0)}function Ve(e,t,n,A){e|=0,A|=0;var i=0,s=0,o=0;i=0|Gt(0|(t|=0),0|(n|=0),52),w(),!(0|t)&!(0|n)|(0|A)>15|(0|(i&=15))>(0|A)?(s=-1,t=-1,n=0,i=0):(t=0|Te(t,n,i+1|0,A),o=-15728641&w(),n=0|Vt(0|A,0,52),s=i,t=(t=!(0|we(n|=t,o=0|o|w())))?-1:A,i=o),r[(o=e)>>2]=n,r[o+4>>2]=i,r[e+8>>2]=s,r[e+12>>2]=t}function He(e,t,n,A){n|=0,A|=0;var i=0,s=0;return i=0|Gt(0|(e|=0),0|(t|=0),52),w(),i&=15,r[(s=A+8|0)>>2]=i,!(0|e)&!(0|t)|(0|n)>15|(0|i)>(0|n)?(r[(n=A)>>2]=0,r[n+4>>2]=0,r[s>>2]=-1,void(r[A+12>>2]=-1)):(e=0|Te(e,t,i+1|0,n),s=-15728641&w(),i=0|Vt(0|n,0,52),i|=e,s=0|s|w(),r[(e=A)>>2]=i,r[e+4>>2]=s,e=A+12|0,0|we(i,s)?void(r[e>>2]=n):void(r[e>>2]=-1))}function Qe(e){var t,n=0,A=0,i=0,s=0,o=0,a=0,l=0,c=0;if(!(!(0|(n=0|r[(A=e|=0)>>2]))&!(0|(A=0|r[A+4>>2]))||(i=0|Gt(0|n,0|A,52),w(),n=0|Rt(0|(l=0|Vt(1,0,3*(15^(i&=15))|0)),0|w(),0|n,0|A),A=0|w(),r[(l=e)>>2]=n,r[l+4>>2]=A,(0|i)<(0|(a=0|r[(l=e+8|0)>>2]))))){for(t=e+12|0,o=i;;){if((0|o)==(0|a)){i=5;break}if(c=(0|o)==(0|r[t>>2]),i=0|Gt(0|n,0|A,0|(s=3*(15-o|0)|0)),w(),c&1==(0|(i&=7))&!0){i=7;break}if(!(7==(0|i)&!0)){i=10;break}if(n=0|Rt(0|n,0|A,0|(c=0|Vt(1,0,0|s)),0|w()),A=0|w(),r[(c=e)>>2]=n,r[c+4>>2]=A,!((0|o)>(0|a))){i=10;break}o=o+-1|0}if(5==(0|i))return r[(c=e)>>2]=0,r[c+4>>2]=0,r[l>>2]=-1,void(r[t>>2]=-1);if(7==(0|i))return a=0|Rt(0|n,0|A,0|(a=0|Vt(1,0,0|s)),0|w()),l=0|w(),r[(c=e)>>2]=a,r[c+4>>2]=l,void(r[t>>2]=o+-1)}}function je(e){var t;return t=(e=+e)<0?e+6.283185307179586:e,+(e>=6.283185307179586?t+-6.283185307179586:t)}function ze(e,t){switch(e=+e,0|(t|=0)){case 1:e=e<0?e+6.283185307179586:e;break;case 2:e=e>0?e+-6.283185307179586:e}return+e}function Je(e,t){e|=0;var n,A,r,s=0;return A=+i[(t|=0)>>3],n=+i[e>>3],s=(r=+f(.5*(A-n)))*r+(s=+f(.5*(+i[t+8>>3]-+i[e+8>>3])))*(+u(+A)*+u(+n)*s),2*+g(+ +c(+s),+ +c(+(1-s)))*6371.007180918475}function Ke(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(i[t>>3]=+i[20624+(e<<3)>>3],0|(t=0))}function qe(e,t){t|=0;var n=0;return(e|=0)>>>0>15?0|(t=4):(n=0|Nt(0|(n=0|$e(7,0,e,((0|e)<0)<<31>>31)),0|w(),120,0),e=0|w(),r[t>>2]=2|n,r[t+4>>2]=e,0|(t=0))}function Ye(e,t,n,i,s){n|=0,i|=0,s|=0;var o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0;if(o=L,L=L+16|0,y=o,h=0|Gt(0|(e|=0),0|(t|=0),52),w(),h&=15,m=0|Gt(0|n,0|i,52),w(),(0|h)!=(15&m))return L=o,0|(y=12);if(u=0|Gt(0|e,0|t,45),w(),u&=127,f=0|Gt(0|n,0|i,45),w(),u>>>0>121|(f&=127)>>>0>121)return L=o,0|(y=5);if(m=(0|u)!=(0|f)){if(7==(0|(l=0|Y(u,f))))return L=o,0|(y=1);7==(0|(c=0|Y(f,u)))?T(27291,27315,164,27325):(b=l,a=c)}else b=0,a=0;d=0|Q(u),p=0|Q(f),r[y>>2]=0,r[y+4>>2]=0,r[y+8>>2]=0,r[y+12>>2]=0;do{if(b){l=(0|(f=0|r[4272+(28*u|0)+(b<<2)>>2]))>0;e:do{if(p)if(l)for(u=0,c=n,l=i;;){switch(c=0|Re(c,l),l=0|w(),0|a){case 5:case 1:a=3;break;case 3:a=2;break;case 2:a=6;break;case 6:a=4;break;case 4:a=5}if((0|(u=u+1|0))==(0|f)){f=a,u=c,c=l;break e}}else f=a,u=n,c=i;else if(l)for(u=0,c=n,l=i;;){switch(c=0|Le(c,l),l=0|w(),0|a){case 1:a=3;break;case 3:a=2;break;case 2:a=6;break;case 6:a=4;break;case 4:a=5;break;case 5:a=1}if((0|(u=u+1|0))==(0|f)){f=a,u=c,c=l;break e}}else f=a,u=n,c=i}while(0);if(Ne(u,c,y),m||T(27340,27315,194,27325),(l=!!(0|d))&(a=!!(0|p))&&T(27367,27315,195,27325),l){if(7==(0|(a=0|xe(e,t)))){a=5;break}if(0|A[21968+(7*a|0)+b|0]){a=1;break}m=p=0|r[21136+(28*a|0)+(b<<2)>>2]}else if(a){if(7==(0|(a=0|xe(u,c)))){a=5;break}if(0|A[21968+(7*a|0)+f|0]){a=1;break}m=0,p=0|r[21136+(28*f|0)+(a<<2)>>2]}else m=0,p=0;if((m|p|0)>=0){if((0|p)>0){i=y+8|0,d=y+12|0,f=0,c=0|r[(n=y+4|0)>>2],l=0|r[i>>2],a=0|r[d>>2];do{(0|(u=(0|(a=(B=(0|(c=a+c-(B=(t=(0|(g=l+c|0))<0)?g:0)-(u=(e=(0|(l=a+l-B|0))<0)?l:0)|0))<0)?0:c))<(0|(u=(0|(l=(e?0:l)-(c=B?c:0)|0))<(0|(c=(t?0:g)-u-c|0))?l:c))?a:u))>0&&(c=c-u|0,l=l-u|0,a=a-u|0),f=f+1|0}while((0|f)!=(0|p));r[n>>2]=c,r[i>>2]=l,r[d>>2]=a}if((b+-1|0)>>>0<6?(a=0|r[22032+(12*b|0)>>2],c=0|r[22032+(12*b|0)+4>>2],a=a-(l=(0|(l=(0|(B=0|r[22032+(12*b|0)+8>>2]))<(0|(l=(0|c)<(0|a)?c:a))?B:l))>0?l:0)|0,c=c-l|0,l=B-l|0):(a=0,c=0,l=0),h)for(;;){if(u=3*a|0,f=3*c|0,n=3*l|0,0|Pe(h)?(a=(B=(0|(l=(0|(b=(l=(0|(c=a+n-((e=(0|(t=u+c|0))<0)?t:0)-((g=(0|(B=f+l-(e?t:0)|0))<0)?B:0)|0))<0)?0:c))<(0|(l=(0|(u=(g?0:B)-(l?c:0)|0))<(0|(c=(e?0:t)-(g?B:0)-(l?c:0)|0))?u:c))?b:l))>0)?l:0,u=u-(B?l:0)|0,l=b-(B?l:0)|0):(a=(B=(0|(l=(0|(b=(l=(0|(c=n+c-((t=(0|(g=u+l|0))<0)?g:0)-((a=(0|(B=f+a-(t?g:0)|0))<0)?B:0)|0))<0)?0:c))<(0|(l=(0|(u=(a?0:B)-(l?c:0)|0))<(0|(c=(t?0:g)-(a?B:0)-(l?c:0)|0))?u:c))?b:l))>0)?l:0,u=u-(B?l:0)|0,l=b-(B?l:0)|0),a=c-a|0,!((0|h)>1)){c=u;break}h=h+-1|0,c=u}if((0|m)>0){u=0;do{l=(l=(a=(0|(b=a+l-((e=(0|(t=a+c|0))<0)?t:0)-((g=(0|(B=c+l-(e?t:0)|0))<0)?B:0)|0))<0)?0:b)-((B=(0|(a=(0|l)<(0|(a=(0|(c=(g?0:B)-(a?b:0)|0))<(0|(b=(e?0:t)-(g?B:0)-(a?b:0)|0))?c:b))?l:a))>0)?a:0)|0,c=c-(B?a:0)|0,a=b-(B?a:0)|0,u=u+1|0}while((0|u)!=(0|m))}n=y+4|0,b=0|r[(h=y+8|0)>>2],B=0|r[(i=y+12|0)>>2],u=(0|r[n>>2])+a|0,r[n>>2]=u,c=b+c|0,r[h>>2]=c,a=B+l|0,r[i>>2]=a,l=c-u|0,(0|u)<0?(a=a-u|0,r[h>>2]=l,r[i>>2]=a,r[n>>2]=0,c=0):(l=c,c=u),(0|l)<0&&(c=c-l|0,r[n>>2]=c,a=a-l|0,r[i>>2]=a,r[h>>2]=0,l=0),f=c-a|0,u=l-a|0,(0|a)<0?(r[n>>2]=f,r[h>>2]=u,r[i>>2]=0,c=f,a=0):u=l,(0|(l=(0|a)<(0|(l=(0|u)<(0|c)?u:c))?a:l))>0?(r[n>>2]=c-l,r[h>>2]=u-l,r[i>>2]=a-l,g=77):g=77}else a=5}else if(Ne(n,i,y),!!(0|d)&!!(0|p))if((0|f)!=(0|u)&&T(27398,27315,264,27325),7==(0|(l=0|xe(e,t)))|7==(0|(a=0|xe(n,i))))a=5;else if(0|A[21968+(7*l|0)+a|0])a=1;else if((0|(n=0|r[21136+(28*l|0)+(a<<2)>>2]))>0){i=y+8|0,d=y+12|0,f=0,c=0|r[(h=y+4|0)>>2],l=0|r[i>>2],a=0|r[d>>2];do{(0|(u=(0|(a=(e=(0|(c=a+c-(e=(g=(0|(b=l+c|0))<0)?b:0)-(u=(t=(0|(l=a+l-e|0))<0)?l:0)|0))<0)?0:c))<(0|(u=(0|(l=(t?0:l)-(c=e?c:0)|0))<(0|(c=(g?0:b)-u-c|0))?l:c))?a:u))>0&&(c=c-u|0,l=l-u|0,a=a-u|0),f=f+1|0}while((0|f)!=(0|n));r[h>>2]=c,r[i>>2]=l,r[d>>2]=a,g=77}else g=77;else g=77}while(0);return 77==(0|g)&&(a=y+4|0,r[s>>2]=r[a>>2],r[s+4>>2]=r[a+4>>2],r[s+8>>2]=r[a+8>>2],a=0),L=o,0|(B=a)}function We(e,t,n,A){n|=0,A|=0;var i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,E=0;if(s=0|Gt(0|(e|=0),0|(t|=0),52),w(),s&=15,v=0|Gt(0|e,0|t,45),w(),(v&=127)>>>0>121)return 0|(A=5);if(g=0|Q(v),Vt(0|s,0,52),a=134225919|w(),r[(o=A)>>2]=-1,r[o+4>>2]=a,o=0|r[n>>2],a=0|r[n+4>>2],n=0|r[n+8>>2],!s){i=(i=(n=(0|(b=n-(b=(t=(0|o)<0)?o:0)+((g=(0|(B=a-b|0))<0)?0-B|0:0)|0))<0)?0:b)-(B=(0|(B=(0|i)<(0|(B=(0|(n=(g?0:B)-(b=n?b:0)|0))<(0|(b=(t?0:o)-(g?B:0)-b|0))?n:b))?i:B))>0?B:0)|0,n=n-B|0;e:do{switch(b-B|0){case 0:switch(0|n){case 0:if(i){i=1==(0|i)?1:7,y=11;break e}i=0;break e;case 1:if(i){i=1==(0|i)?3:7,y=11;break e}i=2;break e;default:return 0|(A=1)}case 1:switch(0|n){case 0:if(i){i=1==(0|i)?5:7,y=11;break e}i=4;break e;case 1:if(!i){i=6;break e}return 0|(i=1);default:return 0|(A=1)}default:return 0|(A=1)}}while(0);return 11==(0|y)&&7==(0|i)||127==(0|(i=0|q(v,i)))?0|(A=1):(B=0|Vt(0|i,0,45),v=0|w(),v=-1040385&r[(y=A)+4>>2]|v,r[A>>2]=r[y>>2]|B,r[A+4>>2]=v,0|(A=0))}for(;;){if(m=s,s=s+-1|0,l=(p=o-n|0)>>>0>715827881|(d=a-n|0)>>>0>715827881,0|Pe(m)){if(l){if(f=2147483647-p|0,h=-2147483648-p|0,(u=(0|p)>0)?(0|f)<(0|p):(0|h)>(0|p)){i=1,y=107;break}if(E=p<<1,u?(2147483647-E|0)<(0|p):(-2147483648-E|0)>(0|p)){i=1,y=107;break}if((0|d)>0?(2147483647-d|0)<(0|d):(-2147483648-d|0)>(0|d)){i=1,y=107;break}if(l=3*p|0,c=d<<1,(u?(0|f)<(0|c):(0|h)>(0|c))||((0|p)>-1?(-2147483648|l)>=(0|d):(-2147483648^l)<(0|d))){i=1,y=107;break}}else l=3*p|0,c=d<<1;if(f=0|wt(.14285714285714285*+(l-d|0)),l=(c=(0|(u=0|wt(.14285714285714285*+(c+p|0))))<(0|f))?f:u,(0|(c=c?u:f))<0){if(-2147483648==(0|c)||((0|l)>0?(2147483647-l|0)<(0|c):(-2147483648-l|0)>(0|c))){y=24;break}if((0|l)>-1?(-2147483648|l)>=(0|c):(-2147483648^l)<(0|c)){y=24;break}}h=((h=(0|f)<0)?0:f)-((_=(0|(d=u-(h?f:0)|0))<0)?d:0)-((p=(0|(C=(h?0-f|0:0)-(_?d:0)|0))<0)?C:0)|0,d=(_?0:d)-(p?C:0)|0,h=h-((_=(0|(p=(0|(C=p?0:C))<(0|(p=(0|d)<(0|h)?d:h))?C:p))>0)?p:0)|0,d=d-(_?p:0)|0,l=(E=(0|(u=(0|(M=(u=(0|(f=(3*(p=C-(_?p:0)|0)|0)+h-((C=(0|(_=(3*h|0)+d|0))<0)?_:0)-((l=(0|(E=(3*d|0)+p-(C?_:0)|0))<0)?E:0)|0))<0)?0:f))<(0|(u=(0|(c=(l?0:E)-(u?f:0)|0))<(0|(f=(C?0:_)-(l?E:0)-(u?f:0)|0))?c:f))?M:u))>0)?u:0,c=c-(E?u:0)|0,u=M-(E?u:0)|0}else{if(l){if((c=(0|p)>0)?(2147483647-p|0)<(0|p):(-2147483648-p|0)>(0|p)){i=1,y=107;break}if(l=p<<1,(u=(0|d)>0)?(2147483647-d|0)<(0|d):(-2147483648-d|0)>(0|d)){i=1,y=107;break}if(h=d<<1,u?(2147483647-h|0)<(0|d):(-2147483648-h|0)>(0|d)){i=1,y=107;break}if(c?(2147483647-l|0)<(0|d):(-2147483648-l|0)>(0|d)){i=1,y=107;break}if(c=3*d|0,(0|d)>-1?(-2147483648|c)>=(0|p):(-2147483648^c)<(0|p)){i=1,y=107;break}}else l=p<<1,c=3*d|0;if(f=0|wt(.14285714285714285*+(l+d|0)),l=(c=(0|(u=0|wt(.14285714285714285*+(c-p|0))))<(0|f))?f:u,(0|(c=c?u:f))<0){if(-2147483648==(0|c)||((0|l)>0?(2147483647-l|0)<(0|c):(-2147483648-l|0)>(0|c))){y=36;break}if((0|l)>-1?(-2147483648|l)>=(0|c):(-2147483648^l)<(0|c)){y=36;break}}h=((h=(0|f)<0)?0:f)-((M=(0|(d=u-(h?f:0)|0))<0)?d:0)-((p=(0|(E=(h?0-f|0:0)-(M?d:0)|0))<0)?E:0)|0,d=(M?0:d)-(p?E:0)|0,h=h-((M=(0|(p=(0|(E=p?0:E))<(0|(p=(0|d)<(0|h)?d:h))?E:p))>0)?p:0)|0,d=d-(M?p:0)|0,l=(C=(0|(u=(0|(_=(u=(0|(f=(3*(p=E-(M?p:0)|0)|0)+d-((E=(0|(M=(3*h|0)+p|0))<0)?M:0)-((l=(0|(C=(3*d|0)+h-(E?M:0)|0))<0)?C:0)|0))<0)?0:f))<(0|(u=(0|(c=(l?0:C)-(u?f:0)|0))<(0|(f=(E?0:M)-(l?C:0)-(u?f:0)|0))?c:f))?_:u))>0)?u:0,c=c-(C?u:0)|0,u=_-(C?u:0)|0}u=(o=(0|(C=n-u+((M=(0|(l=o+(l-f)|0))<0)?0-l|0:0)+((f=(0|(c=a-c-(M?l:0)|0))<0)?0-c|0:0)|0))<0)?0:C,E=(f?0:c)-(o?C:0)|0,C=(C=(M?0:l)-(f?c:0)-(o?C:0)|0)-((n=(0|(o=(0|u)<(0|(o=(0|E)<(0|C)?E:C))?u:o))>0)?o:0)|0,f=0|r[(c=A)>>2],c=0|r[c+4>>2],l=f&~(l=0|Vt(7,0,0|(a=3*(15-m|0)|0))),c&=~w(),n=(n=(o=(0|(M=u-(n?o:0)-(M=(f=(0|C)<0)?C:0)+((_=(0|(E=E-(n?o:0)-M|0))<0)?0-E|0:0)|0))<0)?0:M)-(E=(0|(E=(0|n)<(0|(E=(0|(o=(_?0:E)-(M=o?M:0)|0))<(0|(M=(f?0:C)-(_?E:0)-M|0))?o:M))?n:E))>0?E:0)|0,o=o-E|0;e:do{switch(M-E|0){case 0:switch(0|o){case 0:n=0|n?1==(0|n)?1:7:0;break e;case 1:n=0|n?1==(0|n)?3:7:2;break e;default:y=45;break e}case 1:switch(0|o){case 0:n=0|n?1==(0|n)?5:7:4;break e;case 1:if(n){y=45;break e}n=6;break e;default:y=45;break e}default:y=45}}while(0);if(45==(0|y)&&(y=0,n=7),_=0|Vt(0|n,0,0|a),M=0|w()|c,r[(E=A)>>2]=_|l,r[E+4>>2]=M,(0|m)<=1){y=47;break}o=h,a=d,n=p}if(24==(0|y))T(27634,27425,416,27447);else if(36==(0|y))T(27634,27425,464,27461);else{if(47==(0|y)){if((0|h)>1|(0|d)>1|(0|p)>1)return 0|(E=1);n=(n=(s=(0|(M=p-(M=(C=(0|h)<0)?h:0)+((_=(0|(E=d-M|0))<0)?0-E|0:0)|0))<0)?0:M)-(E=(0|(E=(0|n)<(0|(E=(0|(s=(_?0:E)-(M=s?M:0)|0))<(0|(M=(C?0:h)-(_?E:0)-M|0))?s:M))?n:E))>0?E:0)|0,s=s-E|0;e:do{switch(M-E|0){case 0:switch(0|s){case 0:s=0|n?1==(0|n)?1:7:0;break e;case 1:s=0|n?1==(0|n)?3:7:2;break e;default:y=55;break e}case 1:switch(0|s){case 0:s=0|n?1==(0|n)?5:7:4;break e;case 1:if(n){y=55;break e}s=6;break e;default:y=55;break e}default:y=55}}while(0);55==(0|y)&&(s=7),c=127==(0|(a=0|q(v,s)))?0:0|Q(a);e:do{if(s){if(g){if(7==(0|(n=0|xe(e,t))))return 0|(E=5);o=0|r[21344+(28*n|0)+(s<<2)>>2];t:do{if((0|o)>0)for(n=s,s=0;;){switch(0|n){case 1:n=5;break;case 5:n=4;break;case 4:n=6;break;case 6:n=2;break;case 2:n=3;break;case 3:n=1}if((0|(s=s+1|0))==(0|o))break t}else n=s}while(0);if(1==(0|n))return 0|(E=9);127==(0|(s=0|q(v,n)))&&T(27476,27315,415,27506),0|Q(s)?T(27521,27315,416,27506):(i=s,B=o,b=n)}else i=a,B=0,b=s;if((0|(l=0|r[4272+(28*v|0)+(b<<2)>>2]))<=-1&&T(27552,27315,423,27506),!c){if((0|B)<0)return 0|(E=5);if(0|B){n=0,s=0|r[(o=A)>>2],o=0|r[o+4>>2];do{s=0|Ie(s,o),o=0|w(),r[(E=A)>>2]=s,r[E+4>>2]=o,n=n+1|0}while((0|n)<(0|B))}if((0|l)<=0){y=104;break}for(n=0,s=0|r[(o=A)>>2],o=0|r[o+4>>2];;)if(s=0|Ie(s,o),o=0|w(),r[(E=A)>>2]=s,r[E+4>>2]=o,(0|(n=n+1|0))==(0|l)){y=104;break e}}if(7==(0|(a=0|Y(i,v)))&&T(27291,27315,432,27506),s=0|r[(n=A)>>2],n=0|r[n+4>>2],(0|l)>0){o=0;do{s=0|Ie(s,n),n=0|w(),r[(E=A)>>2]=s,r[E+4>>2]=n,o=o+1|0}while((0|o)!=(0|l))}if(7==(0|(n=0|xe(s,n)))&&T(27634,27315,444,27506),s=0|j(i),(0|(s=0|r[(s?21760:21552)+(28*a|0)+(n<<2)>>2]))<0&&T(27634,27315,458,27506),s){n=0,o=0|r[(a=A)>>2],a=0|r[a+4>>2];do{o=0|Se(o,a),a=0|w(),r[(E=A)>>2]=o,r[E+4>>2]=a,n=n+1|0}while((0|n)<(0|s));y=104}else y=104}else if(!!(0|g)&!!(0|c)){if(7==(0|(i=0|xe(e,t)))|7==(0|(n=0|xe(0|r[(n=A)>>2],0|r[n+4>>2]))))return 0|(E=5);if((0|(n=0|r[21344+(28*i|0)+(n<<2)>>2]))<0)return 0|(E=5);if(n){i=0,s=0|r[(o=A)>>2],o=0|r[o+4>>2];do{s=0|Ie(s,o),o=0|w(),r[(E=A)>>2]=s,r[E+4>>2]=o,i=i+1|0}while((0|i)<(0|n));i=a,y=104}else i=a,y=105}else i=a,y=104}while(0);return 104==(0|y)&&c&&(y=105),105==(0|y)&&1==(0|xe(0|r[(E=A)>>2],0|r[E+4>>2]))?0|(E=9):(C=0|r[(M=A)>>2],M=-1040385&r[M+4>>2],_=0|Vt(0|i,0,45),M=0|M|w(),r[(E=A)>>2]=C|_,r[E+4>>2]=M,0|(E=0))}if(107==(0|y))return 0|i}return 0}function Xe(e,t,n,A,i){n|=0,A|=0,i|=0;var s,o,a=0,l=0,c=0;return s=L,L=L+32|0,c=s,0|(a=0|Ye(e|=0,t|=0,e,t,l=s+12|0))?(L=s,0|(c=a)):0|(e=0|Ye(e,t,n,A,c))?(L=s,0|(c=e)):(t=(0|(n=(A=(o=(0|(e=(0|r[l>>2])-(0|r[c>>2])|0))<0)?0-e|0:0)+((0|r[l+4>>2])-(0|r[c+4>>2]))|0))<0,l=(l=(a=(0|(A=(0|r[l+8>>2])-(0|r[c+8>>2])+A+(t?0-n|0:0)|0))<0)?0:A)-(c=(0|(c=(0|l)<(0|(c=(0|(a=(t?0:n)-(A=a?A:0)|0))<(0|(A=(o?0:e)-(t?n:0)-A|0))?a:A))?l:c))>0?c:0)|0,a=a-c|0,l=(0|(c=(0|(c=A-c|0))>-1?c:0-c|0))>(0|(l=(0|(a=(0|a)>-1?a:0-a|0))>(0|(l=(0|l)>-1?l:0-l|0))?a:l))?c:l,r[(c=i)>>2]=l,r[c+4>>2]=((0|l)<0)<<31>>31,L=s,0|(c=0))}function Ze(e,t,n,A,i,s,o,a,c,u,f){e|=0,t|=0,n|=0,A|=0,i|=0,s|=0,o|=0,a|=0,c|=0,u|=0,f|=0;var h,d,p,m,g,b,y,B=0,v=0,C=0,_=0,M=0,E=0,x=0,S=0,I=0,R=0,D=0;if(y=L,L=L+48|0,v=y+12|0,b=y,r[(B=y+24|0)>>2]=0,r[B+4>>2]=0,r[B+8>>2]=0,r[v>>2]=0,r[v+4>>2]=0,r[v+8>>2]=0,0|Ye(e,t,e,t,B)&&T(27634,27315,696,27575),0|Ye(e,t,n,A,v)&&T(27634,27315,701,27575),n=(A=0|r[(M=B+8|0)>>2])-(0|r[B>>2])|0,r[B>>2]=n,A=(0|r[(R=B+4|0)>>2])-A|0,r[R>>2]=A,B=0-(R=A+n|0)|0,r[M>>2]=B,E=(x=0|r[(M=v+8|0)>>2])-(0|r[v>>2])|0,r[v>>2]=E,x=(0|r[(I=v+4|0)>>2])-x|0,r[I>>2]=x,I=x+E|0,r[M>>2]=0-I,m=(S=1/(+(i>>>0)+4294967296*+(0|s)))*+(E-n|0),g=S*+(x-A|0),S*=+(R-I|0),r[b>>2]=n,r[(I=b+4|0)>>2]=A,r[(R=b+8|0)>>2]=B,(0|s)<0)return L=y,0|(u=0);for(p=+(0|n),d=+(0|A),h=+(0|B),E=0,x=0;;){if(D=m*(_=+(E>>>0)+4294967296*+(0|x))+p,C=g*_+d,_=S*_+h,A=~~+zt(+D),B=~~+zt(+C),n=~~+zt(+_),(D=+l(+(+(0|A)-D)))>(C=+l(+(+(0|B)-C)))&D>(_=+l(+(+(0|n)-_)))?A=0-(v=n+B|0)|0:(v=0-A|0,C>_&&(B=v-n|0)),r[I>>2]=B,r[b>>2]=v,r[R>>2]=0,n=A+B|0,(0|A)>0?(r[I>>2]=n,r[R>>2]=A,r[b>>2]=0,v=0):(n=B,A=0),(0|n)<0?(B=v-n|0,r[b>>2]=B,A=A-n|0,r[R>>2]=A,r[I>>2]=0,v=B-A|0,n=0-A|0,(0|A)<0?(r[b>>2]=v,r[I>>2]=n,r[R>>2]=0,M=n,A=0):(M=0,v=B)):M=n,(0|(n=(0|A)<(0|(n=(0|M)<(0|v)?M:v))?A:n))>0&&(r[b>>2]=v-n,r[I>>2]=M-n,r[R>>2]=A-n),n=0|Rt(0|(n=0|Nt(0|E,0|x,0|u,0|f)),0|w(),0|a,0|c),w(),0|(n=0|We(e,t,b,o+(n<<3)|0))){A=20;break}if(M=E,E=0|Rt(0|E,0|x,1,0),v=x,x=0|w(),!((0|v)<(0|s)|(0|v)==(0|s)&M>>>0<i>>>0)){n=0,A=20;break}}return 20==(0|A)?(L=y,0|n):0}function $e(e,t,n,A){e|=0,t|=0;var r=0,i=0,s=0;if(!(0|(n|=0))&!(0|(A|=0)))return i=1,M(0|(r=0)),0|i;i=e,r=t,e=1,t=0;do{e=0|Nt(0|((s=!0&!(1&n))?1:i),0|(s?0:r),0|e,0|t),t=0|w(),n=0|kt(0|n,0|A,1),A=0|w(),i=0|Nt(0|i,0|r,0|i,0|r),r=0|w()}while(!(!(0|n)&!(0|A)));return M(0|t),0|e}function et(e,t,n,A){n|=0,A|=0;var s,o=0,a=0,l=0,c=0,f=0,h=0;s=L,L=L+16|0,a=s,l=0|Gt(0|(e|=0),0|(t|=0),52),w(),l&=15;do{if(l){if(!(o=0|Ue(e,t,a))){f=+i[a>>3],c=1/+u(+f),h=+i[26032+(l<<3)>>3],i[n>>3]=f+h,i[n+8>>3]=f-h,f=+i[a+8>>3],c*=h,i[n+16>>3]=c+f,i[n+24>>3]=f-c;break}return L=s,0|(l=o)}if(o=0|Gt(0|e,0|t,45),w(),(o&=127)>>>0>121)return L=s,0|(l=5);a=22128+(o<<5)|0,r[n>>2]=r[a>>2],r[n+4>>2]=r[a+4>>2],r[n+8>>2]=r[a+8>>2],r[n+12>>2]=r[a+12>>2],r[n+16>>2]=r[a+16>>2],r[n+20>>2]=r[a+20>>2],r[n+24>>2]=r[a+24>>2],r[n+28>>2]=r[a+28>>2];break}while(0);return function(e,t){t=+t;var n,A,r,s,o,a,l,c=0,u=0;c=(s=+i[(r=16+(e|=0)|0)>>3])-(A=+i[(n=e+24|0)>>3]),c=s<A?c+6.283185307179586:c,u=+i[e>>3],c=.5*(c*t-c),u+=t=.5*((l=u-(a=+i[(o=e+8|0)>>3]))*t-l),i[e>>3]=u>1.5707963267948966?1.5707963267948966:u,t=a-t,i[o>>3]=t<-1.5707963267948966?-1.5707963267948966:t,t=(t=s+c)>3.141592653589793?t+-6.283185307179586:t,i[r>>3]=t<-3.141592653589793?t+6.283185307179586:t,t=(t=A-c)>3.141592653589793?t+-6.283185307179586:t,i[n>>3]=t<-3.141592653589793?t+6.283185307179586:t}(n,A?1.4:1.1),(0|r[(A=26160+(l<<3)|0)>>2])==(0|e)&&(0|r[A+4>>2])==(0|t)&&(i[n>>3]=1.5707963267948966),(0|r[(l=26288+(l<<3)|0)>>2])==(0|e)&&(0|r[l+4>>2])==(0|t)&&(i[n+8>>3]=-1.5707963267948966),1.5707963267948966!=+i[n>>3]&&-1.5707963267948966!=+i[n+8>>3]?(L=s,0|(l=0)):(i[n+16>>3]=3.141592653589793,i[n+24>>3]=-3.141592653589793,L=s,0|(l=0))}function tt(e,t,n,i){e|=0,t|=0,n|=0,i|=0;var s,o,a,l=0,c=0,u=0,f=0;a=L,L=L+48|0,s=a+40|0,o=a,Ce(c=a+32|0,0,0,0),u=0|r[c>>2],c=0|r[c+4>>2];do{if(n>>>0<=15){if(0|(l=0|st(i))){r[(i=o)>>2]=0,r[i+4>>2]=0,r[o+8>>2]=l,r[o+12>>2]=-1,u=o+29|0,r[(i=o+16|0)>>2]=0,r[i+4>>2]=0,r[i+8>>2]=0,A[i+12|0]=0,A[u|0]=0|A[s|0],A[u+1|0]=0|A[s+1|0],A[u+2|0]=0|A[s+2|0];break}if(l=0|xt(1+(0|r[t+8>>2])|0,32)){ot(t,l),r[(f=o)>>2]=u,r[f+4>>2]=c,r[o+8>>2]=0,r[o+12>>2]=n,r[o+16>>2]=i,r[o+20>>2]=t,r[o+24>>2]=l,A[o+28|0]=0,A[(u=o+29|0)|0]=0|A[s|0],A[u+1|0]=0|A[s+1|0],A[u+2|0]=0|A[s+2|0];break}r[(i=o)>>2]=0,r[i+4>>2]=0,r[o+8>>2]=13,r[o+12>>2]=-1,u=o+29|0,r[(i=o+16|0)>>2]=0,r[i+4>>2]=0,r[i+8>>2]=0,A[i+12|0]=0,A[u|0]=0|A[s|0],A[u+1|0]=0|A[s+1|0],A[u+2|0]=0|A[s+2|0];break}r[(u=o)>>2]=0,r[u+4>>2]=0,r[o+8>>2]=4,r[o+12>>2]=-1,f=o+29|0,r[(u=o+16|0)>>2]=0,r[u+4>>2]=0,r[u+8>>2]=0,A[u+12|0]=0,A[f|0]=0|A[s|0],A[f+1|0]=0|A[s+1|0],A[f+2|0]=0|A[s+2|0]}while(0);nt(o),r[e>>2]=r[o>>2],r[e+4>>2]=r[o+4>>2],r[e+8>>2]=r[o+8>>2],r[e+12>>2]=r[o+12>>2],r[e+16>>2]=r[o+16>>2],r[e+20>>2]=r[o+20>>2],r[e+24>>2]=r[o+24>>2],r[e+28>>2]=r[o+28>>2],L=a}function nt(e){var t,n,i,s,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0;if(s=L,L=L+336|0,t=s+168|0,n=s,!(0|(a=0|r[(l=e|=0)>>2]))&!(0|(l=0|r[l+4>>2])))L=s;else{if(0|A[(o=e+28|0)|0]?(a=0|At(a,l),l=0|w()):A[o|0]=1,!(0|r[r[(i=e+20|0)>>2]>>2]))return 0|(a=0|r[(o=e+24|0)>>2])&&Et(a),r[(C=e)>>2]=0,r[C+4>>2]=0,r[e+8>>2]=0,r[i>>2]=0,r[e+12>>2]=-1,r[e+16>>2]=0,r[o>>2]=0,void(L=s);c=15&(o=0|r[(C=e+16|0)>>2]);e:do{if(!(0|a)&!(0|l))v=e+24|0;else{y=e+12|0,g=3==(0|c),m=255&o,d=3==(1|c),b=e+24|0,p=(c+-1|0)>>>0<3,f=3==(2|c),h=n+8|0;t:for(;;){if(u=0|Gt(0|a,0|l,52),w(),(0|(u&=15))==(0|r[y>>2])){switch(15&m){case 0:case 2:case 3:if(0|(c=0|Ue(a,l,t))){B=15;break t}if(0|at(0|r[i>>2],0|r[b>>2],t)){B=19;break t}}if(d&&(c=0|r[4+(0|r[i>>2])>>2],r[t>>2]=r[c>>2],r[t+4>>2]=r[c+4>>2],r[t+8>>2]=r[c+8>>2],r[t+12>>2]=r[c+12>>2],0|Z(26896,t))){if(0|Fe(0|r[4+(0|r[i>>2])>>2],u,n)){B=25;break}if((0|r[(c=n)>>2])==(0|a)&&(0|r[c+4>>2])==(0|l)){B=29;break}}if(p){if(0|(c=0|ke(a,l,t))){B=32;break}if(0|et(a,l,n,0)){B=36;break}if(f&&0|lt(0|r[i>>2],0|r[b>>2],t,n)){B=42;break}if(d&&0|ut(0|r[i>>2],0|r[b>>2],t,n)){B=42;break}}if(g){if(o=0|et(a,l,t,1),c=0|r[b>>2],0|o){B=45;break}if(0|$(c,t)){if(te(n,t),0|ee(t,0|r[b>>2])){B=53;break}if(0|at(0|r[i>>2],0|r[b>>2],h)){B=53;break}if(0|ut(0|r[i>>2],0|r[b>>2],n,t)){B=53;break}}}}do{if((0|u)<(0|r[y>>2])){if(o=0|et(a,l,t,1),c=0|r[b>>2],0|o){B=58;break t}if(!(0|$(c,t))){B=73;break}if(0|ee(0|r[b>>2],t)&&(te(n,t),0|lt(0|r[i>>2],0|r[b>>2],n,t))){B=65;break t}if(0|(a=0|Ee(a,l,u+1|0,n))){B=67;break t}a=0|r[(l=n)>>2],l=0|r[l+4>>2]}else B=73}while(0);if(73==(0|B)&&(B=0,a=0|At(a,l),l=0|w()),!(0|a)&!(0|l)){v=b;break e}}switch(0|B){case 15:0|(o=0|r[b>>2])&&Et(o),r[(B=e)>>2]=0,r[B+4>>2]=0,r[i>>2]=0,r[y>>2]=-1,r[C>>2]=0,r[b>>2]=0,r[e+8>>2]=c,B=20;break;case 19:r[e>>2]=a,r[e+4>>2]=l,B=20;break;case 25:T(27634,27600,470,27611);break;case 29:case 42:return r[e>>2]=a,r[e+4>>2]=l,void(L=s);case 32:return 0|(o=0|r[b>>2])&&Et(o),r[(v=e)>>2]=0,r[v+4>>2]=0,r[i>>2]=0,r[y>>2]=-1,r[C>>2]=0,r[b>>2]=0,r[e+8>>2]=c,void(L=s);case 36:T(27634,27600,493,27611);break;case 45:0|c&&Et(c),r[(B=e)>>2]=0,r[B+4>>2]=0,r[i>>2]=0,r[y>>2]=-1,r[C>>2]=0,r[b>>2]=0,r[e+8>>2]=o,B=55;break;case 53:r[e>>2]=a,r[e+4>>2]=l,B=55;break;case 58:0|c&&Et(c),r[(B=e)>>2]=0,r[B+4>>2]=0,r[i>>2]=0,r[y>>2]=-1,r[C>>2]=0,r[b>>2]=0,r[e+8>>2]=o,B=71;break;case 65:r[e>>2]=a,r[e+4>>2]=l,B=71;break;case 67:return 0|(o=0|r[b>>2])&&Et(o),r[(v=e)>>2]=0,r[v+4>>2]=0,r[i>>2]=0,r[y>>2]=-1,r[C>>2]=0,r[b>>2]=0,r[e+8>>2]=a,void(L=s)}if(20==(0|B))return void(L=s);if(55==(0|B))return void(L=s);if(71==(0|B))return void(L=s)}}while(0);0|(o=0|r[v>>2])&&Et(o),r[(B=e)>>2]=0,r[B+4>>2]=0,r[e+8>>2]=0,r[i>>2]=0,r[e+12>>2]=-1,r[C>>2]=0,r[v>>2]=0,L=s}}function At(e,t){var n,A=0,i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0;n=L,L=L+16|0,f=n,i=0|Gt(0|(e|=0),0|(t|=0),52),w(),i&=15,A=0|Gt(0|e,0|t,45),w();do{if(i){for(;A=0|Vt(i+4095|0,0,52),s=w()|-15728641&t,A=A|e|(a=0|Vt(7,0,0|(o=3*(15-i|0)|0))),s|=l=0|w(),c=0|Gt(0|e,0|t,0|o),w(),i=i+-1|0,!((c&=7)>>>0<6);){if(!i){u=4;break}t=s,e=A}if(4==(0|u)){A=0|Gt(0|A,0|s,45),w();break}return f=0|Vt(((f=!(0|c)&!!(0|we(A,s)))?2:1)+c|0,0,0|o),u=0|w()|t&~l,f|=e&~a,M(0|u),L=n,0|f}}while(0);return(A&=127)>>>0>120?(f=0,M(0|(u=0)),L=n,0|f):(Ce(f,0,A+1|0,0),u=0|r[f+4>>2],f=0|r[f>>2],M(0|u),L=n,0|f)}function rt(e,t,n){e|=0;var A,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0;if(!(0|Z(t|=0,n|=0)))return 0|(d=0);if(t=0|function(e){return+i[16+(e|=0)>>3]<+i[e+24>>3]|0}(t),s=+i[n>>3],o=t&(o=+i[n+8>>3])<0?o+6.283185307179586:o,(0|(d=0|r[e>>2]))<=0)return 0|(d=0);if(A=0|r[e+4>>2],t){t=0,h=o,n=-1,e=0;e:for(;;){for(f=e;l=+i[A+(f<<4)>>3],o=+i[A+(f<<4)+8>>3],a=+i[A+((e=(n+2|0)%(0|d)|0)<<4)>>3],c=+i[A+(e<<4)+8>>3],l>a?(u=l,l=c):(u=a,a=l,l=o,o=c),(s=s==a|s==u?s+2220446049250313e-31:s)<a|s>u;){if((0|(n=f+1|0))>=(0|d)){n=22;break e}e=f,f=n,n=e}if(((u=(c=l<0?l+6.283185307179586:l)+(s-a)/(u-a)*((l=o<0?o+6.283185307179586:o)-c))<0?u+6.283185307179586:u)>(h=c==h|l==h?h+-2220446049250313e-31:h)&&(t^=1),(0|(e=f+1|0))>=(0|d)){n=22;break}n=f}if(22==(0|n))return 0|t}else{t=0,h=o,n=-1,e=0;e:for(;;){for(f=e;l=+i[A+(f<<4)>>3],o=+i[A+(f<<4)+8>>3],a=+i[A+((e=(n+2|0)%(0|d)|0)<<4)>>3],c=+i[A+(e<<4)+8>>3],l>a?(u=l,l=c):(u=a,a=l,l=o,o=c),(s=s==a|s==u?s+2220446049250313e-31:s)<a|s>u;){if((0|(n=f+1|0))>=(0|d)){n=22;break e}e=f,f=n,n=e}if(l+(s-a)/(u-a)*(o-l)>(h=l==h|o==h?h+-2220446049250313e-31:h)&&(t^=1),(0|(e=f+1|0))>=(0|d)){n=22;break}n=f}if(22==(0|n))return 0|t}return 0}function it(e,t){t|=0;var n,A,s,o,a,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0;if(!(A=0|r[(e|=0)>>2]))return r[t>>2]=0,r[t+4>>2]=0,r[t+8>>2]=0,r[t+12>>2]=0,r[t+16>>2]=0,r[t+20>>2]=0,r[t+24>>2]=0,void(r[t+28>>2]=0);if(i[(s=t+8|0)>>3]=17976931348623157e292,i[(o=t+24|0)>>3]=17976931348623157e292,i[t>>3]=-17976931348623157e292,i[(a=t+16|0)>>3]=-17976931348623157e292,!((0|A)<=0)){for(n=0|r[e+4>>2],g=17976931348623157e292,b=-17976931348623157e292,y=0,e=-1,h=17976931348623157e292,d=17976931348623157e292,m=-17976931348623157e292,u=-17976931348623157e292,B=0;c=+i[n+(B<<4)>>3],p=+i[n+(B<<4)+8>>3],f=+i[n+(((0|(e=e+2|0))==(0|A)?0:e)<<4)+8>>3],c<h&&(i[s>>3]=c,h=c),p<d&&(i[o>>3]=p,d=p),c>m?i[t>>3]=c:c=m,p>u&&(i[a>>3]=p,u=p),g=p>0&p<g?p:g,b=p<0&p>b?p:b,y|=+l(+(p-f))>3.141592653589793,(0|(e=B+1|0))!=(0|A);)v=B,m=c,B=e,e=v;y&&(i[a>>3]=b,i[o>>3]=g)}}function st(e){return 0|((e|=0)>>>0<4?0:15)}function ot(e,t){t|=0;var n,A=0,s=0,o=0,a=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,w=0,T=0;if(b=0|r[(e|=0)>>2]){if(i[(y=t+8|0)>>3]=17976931348623157e292,i[(B=t+24|0)>>3]=17976931348623157e292,i[t>>3]=-17976931348623157e292,i[(v=t+16|0)>>3]=-17976931348623157e292,(0|b)>0){for(o=0|r[e+4>>2],m=17976931348623157e292,g=-17976931348623157e292,s=0,A=-1,f=17976931348623157e292,h=17976931348623157e292,p=-17976931348623157e292,c=-17976931348623157e292,C=0;a=+i[o+(C<<4)>>3],d=+i[o+(C<<4)+8>>3],u=+i[o+(((0|(w=A+2|0))==(0|b)?0:w)<<4)+8>>3],a<f&&(i[y>>3]=a,f=a),d<h&&(i[B>>3]=d,h=d),a>p?i[t>>3]=a:a=p,d>c&&(i[v>>3]=d,c=d),m=d>0&d<m?d:m,g=d<0&d>g?d:g,s|=+l(+(d-u))>3.141592653589793,(0|(A=C+1|0))!=(0|b);)w=C,p=a,C=A,A=w;s&&(i[v>>3]=g,i[B>>3]=m)}}else r[t>>2]=0,r[t+4>>2]=0,r[t+8>>2]=0,r[t+12>>2]=0,r[t+16>>2]=0,r[t+20>>2]=0,r[t+24>>2]=0,r[t+28>>2]=0;if(!((0|(A=0|r[(w=e+8|0)>>2]))<=0)){n=e+12|0,M=0;do{if(o=0|r[n>>2],s=M,B=t+((M=M+1|0)<<5)|0,v=0|r[o+(s<<3)>>2]){if(i[(C=t+(M<<5)+8|0)>>3]=17976931348623157e292,i[(e=t+(M<<5)+24|0)>>3]=17976931348623157e292,i[B>>3]=-17976931348623157e292,i[(_=t+(M<<5)+16|0)>>3]=-17976931348623157e292,(0|v)>0){for(b=0|r[o+(s<<3)+4>>2],m=17976931348623157e292,g=-17976931348623157e292,o=0,s=-1,y=0,f=17976931348623157e292,h=17976931348623157e292,d=-17976931348623157e292,c=-17976931348623157e292;a=+i[b+(y<<4)>>3],p=+i[b+(y<<4)+8>>3],u=+i[b+(((0|(s=s+2|0))==(0|v)?0:s)<<4)+8>>3],a<f&&(i[C>>3]=a,f=a),p<h&&(i[e>>3]=p,h=p),a>d?i[B>>3]=a:a=d,p>c&&(i[_>>3]=p,c=p),m=p>0&p<m?p:m,g=p<0&p>g?p:g,o|=+l(+(p-u))>3.141592653589793,(0|(s=y+1|0))!=(0|v);)T=y,y=s,d=a,s=T;o&&(i[_>>3]=g,i[e>>3]=m)}}else r[B>>2]=0,r[B+4>>2]=0,r[B+8>>2]=0,r[B+12>>2]=0,r[B+16>>2]=0,r[B+20>>2]=0,r[B+24>>2]=0,r[B+28>>2]=0,A=0|r[w>>2]}while((0|M)<(0|A))}}function at(e,t,n){var A=0,i=0,s=0;if(!(0|rt(e|=0,t|=0,n|=0)))return 0|(i=0);if((0|r[(i=e+8|0)>>2])<=0)return 0|(i=1);for(A=e+12|0,e=0;;){if(s=e,e=e+1|0,0|rt((0|r[A>>2])+(s<<3)|0,t+(e<<5)|0,n)){e=0,A=6;break}if((0|e)>=(0|r[i>>2])){e=1,A=6;break}}return 6==(0|A)?0|e:0}function lt(e,t,n,A){A|=0;var i,s,o=0,a=0,l=0,c=0,u=0;if(s=L,L=L+16|0,i=s,!(0|rt(e|=0,t|=0,l=(n|=0)+8|0)))return L=s,0|(c=0);c=e+8|0;e:do{if((0|r[c>>2])>0){for(a=e+12|0,o=0;;){if(u=o,o=o+1|0,0|rt((0|r[a>>2])+(u<<3)|0,t+(o<<5)|0,l)){o=0;break}if((0|o)>=(0|r[c>>2]))break e}return L=s,0|o}}while(0);if(0|ct(e,t,n,A))return L=s,0|(u=0);r[i>>2]=r[n>>2],r[i+4>>2]=l,o=0|r[c>>2];e:do{if((0|o)>0)for(e=e+12|0,l=0,a=o;;){if(o=0|r[e>>2],(0|r[o+(l<<3)>>2])>0){if(0|rt(i,A,0|r[o+(l<<3)+4>>2])){o=0;break e}if(o=l+1|0,0|ct((0|r[e>>2])+(l<<3)|0,t+(o<<5)|0,n,A)){o=0;break e}a=0|r[c>>2]}else o=l+1|0;if(!((0|o)<(0|a))){o=1;break}l=o}else o=1}while(0);return L=s,0|(u=o)}function ct(e,t,n,A){e|=0,n|=0;var s,o,a,l,c,u,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,w=0,T=0;if(u=L,L=L+176|0,l=u+172|0,f=u+168|0,c=u,!(0|$(t|=0,A|=0)))return L=u,0|(e=0);if(function(e,t,n,A){var s,o,a,l,c;t|=0,n|=0,A|=0,e=(o=+i[16+(e|=0)>>3])<(c=+i[e+24>>3]),s=(l=+i[t+16>>3])<(a=+i[t+24>>3]),t=c-l<a-o,r[n>>2]=e?s|t?1:2:0,r[A>>2]=s?e?1:t?2:1:0}(t,A,l,f),Jt(0|c,0|n,168),(0|r[n>>2])>0){t=0;do{C=+ze(+i[(w=c+8+(t<<4)+8|0)>>3],0|r[f>>2]),i[w>>3]=C,t=t+1|0}while((0|t)<(0|r[n>>2]))}o=+i[A>>3],a=+i[A+8>>3],C=+ze(+i[A+16>>3],0|r[f>>2]),s=+ze(+i[A+24>>3],0|r[f>>2]);e:do{if((0|r[e>>2])>0){if(A=e+4|0,(0|(f=0|r[c>>2]))<=0)for(t=0;;)if((0|(t=t+1|0))>=(0|r[e>>2])){t=0;break e}for(n=0;;){if(t=0|r[A>>2],B=+i[t+(n<<4)>>3],v=+ze(+i[t+(n<<4)+8>>3],0|r[l>>2]),t=0|r[A>>2],w=(0|(n=n+1|0))%(0|r[e>>2])|0,h=+i[t+(w<<4)>>3],d=+ze(+i[t+(w<<4)+8>>3],0|r[l>>2]),!(B>=o)|!(h>=o)&&!(B<=a)|!(h<=a)&&!(v<=s)|!(d<=s)&&!(v>=C)|!(d>=C)){y=h-B,g=d-v,t=0;do{if(T=t,w=(0|(t=t+1|0))==(0|f)?0:t,h=+i[c+8+(T<<4)+8>>3],d=+i[c+8+(w<<4)+8>>3]-h,p=+i[c+8+(T<<4)>>3],!(0==(b=y*d-g*(m=+i[c+8+(w<<4)>>3]-p))||(_=v-h,M=B-p,m=(_*m-d*M)/b,m<0|m>1))&&(b=(y*_-g*M)/b)>=0&b<=1){t=1;break e}}while((0|t)<(0|f))}if((0|n)>=(0|r[e>>2])){t=0;break}}}else t=0}while(0);return L=u,0|(T=t)}function ut(e,t,n,A){var i=0,s=0,o=0;if(0|ct(e|=0,t|=0,n|=0,A|=0))return 0|(s=1);if((0|r[(s=e+8|0)>>2])<=0)return 0|(s=0);for(i=e+12|0,e=0;;){if(o=e,e=e+1|0,0|ct((0|r[i>>2])+(o<<3)|0,t+(e<<5)|0,n,A)){e=1,i=6;break}if((0|e)>=(0|r[s>>2])){e=0,i=6;break}}return 6==(0|i)?0|e:0}function ft(e,t,n,A,r){t|=0,n|=0,A|=0,r|=0;var s,o,a,l,c,u,f,h=0;l=+i[(e|=0)>>3],a=+i[t>>3]-l,o=+i[e+8>>3],s=+i[t+8>>3]-o,u=+i[n>>3],h=((h=+i[A>>3]-u)*(o-(f=+i[n+8>>3]))-(l-u)*(c=+i[A+8>>3]-f))/(a*c-s*h),i[r>>3]=l+a*h,i[r+8>>3]=o+s*h}function ht(e,t){return t|=0,+l(+(+i[(e|=0)>>3]-+i[t>>3]))<1.1920928955078125e-7?0|(t=+l(+(+i[e+8>>3]-+i[t+8>>3]))<1.1920928955078125e-7):0|(t=0)}function dt(e,t,n){n|=0;var A,i,s,o,a=0,l=0,c=0,u=0;if(o=L,L=L+32|0,u=o,0|(a=0|Oe(e|=0,t|=0,i=o+16|0)))return L=o,0|(n=a);A=0|Be(e,t),s=0|xe(e,t),function(e,t){e=7696+(28*(e|=0)|0)|0,r[(t|=0)>>2]=r[e>>2],r[t+4>>2]=r[e+4>>2],r[t+8>>2]=r[e+8>>2],r[t+12>>2]=r[e+12>>2]}(A,u),a=0|function(e,t){e|=0;var n=0,A=0;if((t|=0)>>>0>20)return-1;do{if((0|r[11120+(216*t|0)>>2])!=(0|e))if((0|r[11120+(216*t|0)+8>>2])!=(0|e))if((0|r[11120+(216*t|0)+16>>2])!=(0|e))if((0|r[11120+(216*t|0)+24>>2])!=(0|e))if((0|r[11120+(216*t|0)+32>>2])!=(0|e))if((0|r[11120+(216*t|0)+40>>2])!=(0|e))if((0|r[11120+(216*t|0)+48>>2])!=(0|e))if((0|r[11120+(216*t|0)+56>>2])!=(0|e))if((0|r[11120+(216*t|0)+64>>2])!=(0|e))if((0|r[11120+(216*t|0)+72>>2])!=(0|e))if((0|r[11120+(216*t|0)+80>>2])!=(0|e))if((0|r[11120+(216*t|0)+88>>2])!=(0|e))if((0|r[11120+(216*t|0)+96>>2])!=(0|e))if((0|r[11120+(216*t|0)+104>>2])!=(0|e))if((0|r[11120+(216*t|0)+112>>2])!=(0|e))if((0|r[11120+(216*t|0)+120>>2])!=(0|e))if((0|r[11120+(216*t|0)+128>>2])!=(0|e)){if((0|r[11120+(216*t|0)+136>>2])!=(0|e)){if((0|r[11120+(216*t|0)+144>>2])==(0|e)){e=0,n=2,A=0;break}if((0|r[11120+(216*t|0)+152>>2])==(0|e)){e=0,n=2,A=1;break}if((0|r[11120+(216*t|0)+160>>2])==(0|e)){e=0,n=2,A=2;break}if((0|r[11120+(216*t|0)+168>>2])==(0|e)){e=1,n=2,A=0;break}if((0|r[11120+(216*t|0)+176>>2])==(0|e)){e=1,n=2,A=1;break}if((0|r[11120+(216*t|0)+184>>2])==(0|e)){e=1,n=2,A=2;break}if((0|r[11120+(216*t|0)+192>>2])==(0|e)){e=2,n=2,A=0;break}if((0|r[11120+(216*t|0)+200>>2])==(0|e)){e=2,n=2,A=1;break}if((0|r[11120+(216*t|0)+208>>2])==(0|e)){e=2,n=2,A=2;break}return-1}e=2,n=1,A=2}else e=2,n=1,A=1;else e=2,n=1,A=0;else e=1,n=1,A=2;else e=1,n=1,A=1;else e=1,n=1,A=0;else e=0,n=1,A=2;else e=0,n=1,A=1;else e=0,n=1,A=0;else e=2,n=0,A=2;else e=2,n=0,A=1;else e=2,n=0,A=0;else e=1,n=0,A=2;else e=1,n=0,A=1;else e=1,n=0,A=0;else e=0,n=0,A=2;else e=0,n=0,A=1;else e=0,n=0,A=0}while(0);return 0|r[11120+(216*t|0)+(72*n|0)+(24*e|0)+(A<<3)+4>>2]}(A,0|r[i>>2]);do{if(0|Q(A)){switch(0|A){case 4:l=0;break;case 14:l=1;break;case 24:l=2;break;case 38:l=3;break;case 49:l=4;break;case 58:l=5;break;case 63:l=6;break;case 72:l=7;break;case 83:l=8;break;case 97:l=9;break;case 107:l=10;break;case 117:l=11;break;default:T(27634,27636,75,27645)}if(c=0|r[26480+(24*l|0)+8>>2],t=0|r[26480+(24*l|0)+16>>2],(0|(e=0|r[i>>2]))!=(0|r[u>>2])&&(u=0|j(A))|(0|(e=0|r[i>>2]))==(0|t)&&(a=(a+1|0)%6|0),3==(0|s)&(0|e)==(0|t)){a=(a+5|0)%6|0;break}5==(0|s)&(0|e)==(0|c)&&(a=(a+1|0)%6|0)}}while(0);return r[n>>2]=a,L=o,0|(n=0)}function pt(e,t,n,A){n|=0,A|=0;var i,s,o,a,l,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0;if(l=L,L=L+32|0,B=l+24|0,a=l+20|0,o=l+8|0,s=l+16|0,i=l,d=(d=!(0|we(e|=0,t|=0)))?6:5,m=0|Gt(0|e,0|t,52),w(),d>>>0<=n>>>0)return L=l,0|(A=2);!(g=!(0|(m&=15)))&&!((b=0|Vt(7,0,3*(15^m)|0))&e|0)&!((0|w())&t)?c=n:u=4;e:do{if(4==(0|u)){if((0|((c=!!(0|we(e,t)))?4:5))<(0|n))return L=l,0|(A=1);if(0|dt(e,t,B))return L=l,0|(A=1);if(u=(0|r[B>>2])+n|0,7==(0|(b=0|r[(c=c?26768+((0|u)%5<<2)|0:26800+((0|u)%6<<2)|0)>>2])))return L=l,0|(A=1);r[a>>2]=0,c=0|O(e,t,b,a,o);do{if(!c){if(p=0|r[(h=o)>>2],u=(f=(h=0|r[h+4>>2])>>>0<t>>>0|(0|h)==(0|t)&p>>>0<e>>>0)?p:e,f=f?h:t,!g&&!(p&(g=0|Vt(7,0,3*(15^m)|0))|0)&!(h&(0|w())))c=n;else{if(h=(n+-1+d|0)%(0|d)|0,c=0|we(e,t),(0|h)<0&&T(27634,27636,248,27661),(0|((d=!!(0|c))?4:5))<(0|h)&&T(27634,27636,248,27661),0|dt(e,t,B)&&T(27634,27636,248,27661),c=(0|r[B>>2])+h|0,7==(0|(h=0|r[(c=d?26768+((0|c)%5<<2)|0:26800+((0|c)%6<<2)|0)>>2]))&&T(27634,27636,248,27661),r[s>>2]=0,0|(c=0|O(e,t,h,s,i)))break;d=0|r[(p=i)>>2],p=0|r[p+4>>2];do{if(p>>>0<f>>>0|(0|p)==(0|f)&d>>>0<u>>>0){if(u=0|we(d,p)?0|G(d,p,e,t):0|r[26864+(((0|r[s>>2])+(0|r[26832+(h<<2)>>2])|0)%6<<2)>>2],c=0|we(d,p),(u+-1|0)>>>0>5){c=-1,u=d,f=p;break}if(1==(0|u)&(c=!!(0|c))){c=-1,u=d,f=p;break}do{if(!(0|dt(d,p,B))){if(c){c=(5+(0|r[26416+(u<<2)>>2])-(0|r[B>>2])|0)%5|0;break}c=(6+(0|r[26448+(u<<2)>>2])-(0|r[B>>2])|0)%6|0;break}c=-1}while(0);u=d,f=p}else c=n}while(0);p=0|r[(h=o)>>2],h=0|r[h+4>>2]}if((0|u)==(0|p)&(0|f)==(0|h)){if(e=(d=!!(0|we(p,h)))?0|G(p,h,e,t):0|r[26864+(((0|r[a>>2])+(0|r[26832+(b<<2)>>2])|0)%6<<2)>>2],c=0|we(p,h),(e+-1|0)>>>0<=5&&!(1==(0|e)&(y=!!(0|c))))do{if(!(0|dt(p,h,B))){if(y){c=(5+(0|r[26416+(e<<2)>>2])-(0|r[B>>2])|0)%5|0;break}c=(6+(0|r[26448+(e<<2)>>2])-(0|r[B>>2])|0)%6|0;break}c=-1}while(0);else c=-1;c=6==(0|(c=c+1|0))|d&5==(0|c)?0:c}t=f,e=u;break e}}while(0);return L=l,0|(A=c)}}while(0);return y=0|Vt(0|c,0,56),B=w()|-2130706433&t|536870912,r[A>>2]=y|e,r[A+4>>2]=B,L=l,0|(A=0)}function mt(e,t){e|=0;var n,A,i=0,s=0;return A=L,L=L+16|0,n=A,!0&536870912==(2013265920&(t|=0))&&0|ve(e,i=-2130706433&t|134217728)?(s=0|Gt(0|e,0|t,56),w(),i=(s=!(0|pt(e,i,7&s,n)))&((0|r[(i=n)>>2])==(0|e)?(0|r[i+4>>2])==(0|t):0)&1,L=A,0|i):(L=A,0|(i=0))}function gt(e,t,n,A){e|=0,A|=0;var i,s,o,a=0,l=0,c=0,u=0,f=0,h=0;o=L,L=L+208|0,i=o,s=o+192|0,c=0|y(n|=0,t|=0),r[(u=s)>>2]=1,r[u+4>>2]=0;e:do{if(0|c){for(u=0-n|0,r[i+4>>2]=n,r[i>>2]=n,a=2,t=n,l=n;t=t+n+l|0,r[i+(a<<2)>>2]=t,t>>>0<c>>>0;)h=l,a=a+1|0,l=t,t=h;if((l=e+c+u|0)>>>0>e>>>0){c=l,a=1,t=1;do{do{if(3&~t){if((0|r[i+((t=a+-1|0)<<2)>>2])>>>0<(c-e|0)>>>0?bt(e,n,A,a,i):Bt(e,n,A,s,a,0,i),1==(0|a)){vt(s,1),a=0;break}vt(s,t),a=1;break}bt(e,n,A,a,i),yt(s,2),a=a+2|0}while(0);t=1|r[s>>2],r[s>>2]=t,e=e+n|0}while(e>>>0<l>>>0)}else a=1,t=1;for(Bt(e,n,A,s,a,0,i),l=s+4|0;;){if(1==(0|a)&1==(0|t)){if(!(0|r[l>>2]))break e;f=19}else(0|a)<2?f=19:(vt(s,2),h=a+-2|0,r[s>>2]=7^r[s>>2],yt(s,1),Bt(e+(0-(0|r[i+(h<<2)>>2]))+u|0,n,A,s,a+-1|0,1,i),vt(s,1),t=1|r[s>>2],r[s>>2]=t,Bt(e=e+u|0,n,A,s,h,1,i),a=h);19==(0|f)&&(f=0,yt(s,t=0|Ct(s)),e=e+u|0,a=t+a|0,t=0|r[s>>2])}}}while(0);L=o}function bt(e,t,n,A,i){e|=0,t|=0,n|=0,A|=0,i|=0;var s,o,a=0,l=0,c=0,u=0,f=0;o=L,L=L+240|0,r[(s=o)>>2]=e;e:do{if((0|A)>1)for(f=0-t|0,c=e,a=A,A=1,l=e;;){if(e=(c=c+f|0)+(0-(0|r[i+((u=a+-2|0)<<2)>>2]))|0,(0|Xt[3&n](l,e))>-1&&(0|Xt[3&n](l,c))>-1)break e;if(l=s+(A<<2)|0,(0|Xt[3&n](e,c))>-1?(r[l>>2]=e,a=a+-1|0):(r[l>>2]=c,e=c,a=u),A=A+1|0,(0|a)<=1)break e;c=e,l=0|r[s>>2]}else A=1}while(0);Mt(t,s,A),L=o}function yt(e,t){var n,A=0,i=0;n=(e|=0)+4|0,(t|=0)>>>0>31?(i=0|r[n>>2],r[e>>2]=i,r[n>>2]=0,t=t+-32|0,A=0):(A=0|r[n>>2],i=0|r[e>>2]),r[e>>2]=A<<32-t|i>>>t,r[n>>2]=A>>>t}function Bt(e,t,n,A,i,s,o){e|=0,t|=0,n|=0,i|=0,s|=0,o|=0;var a,l,c,u,f=0,h=0,d=0,p=0;u=L,L=L+240|0,l=u+232|0,c=u,p=0|r[(A|=0)>>2],r[l>>2]=p,h=0|r[A+4>>2],r[(a=l+4|0)>>2]=h,r[c>>2]=e;e:do{if(1!=(0|p)|!!(0|h)&&(d=0-t|0,f=e+(0-(0|r[o+(i<<2)>>2]))|0,(0|Xt[3&n](f,e))>=1))for(A=1,s=!(0|s),h=f;;){if(s&(0|i)>1){if(s=e+d|0,f=0|r[o+(i+-2<<2)>>2],(0|Xt[3&n](s,h))>-1){f=10;break e}if((0|Xt[3&n](s+(0-f)|0,h))>-1){f=10;break e}}if(s=A+1|0,r[c+(A<<2)>>2]=h,yt(l,p=0|Ct(l)),i=p+i|0,!(1!=(0|r[l>>2])|!!(0|r[a>>2]))){A=s,e=h,f=10;break e}if(e=h+(0-(0|r[o+(i<<2)>>2]))|0,(0|Xt[3&n](e,0|r[c>>2]))<1){e=h,A=s,s=0,f=9;break}p=h,A=s,s=1,h=e,e=p}else A=1,f=9}while(0);9!=(0|f)||0|s||(f=10),10==(0|f)&&(Mt(t,c,A),bt(e,t,n,i,o)),L=u}function vt(e,t){var n,A=0,i=0;n=(e|=0)+4|0,(t|=0)>>>0>31?(i=0|r[e>>2],r[n>>2]=i,r[e>>2]=0,t=t+-32|0,A=0):(A=0|r[e>>2],i=0|r[n>>2]),r[n>>2]=A>>>(32-t|0)|i<<t,r[e>>2]=A<<t}function Ct(e){var t=0;return(t=0|_t((0|r[(e|=0)>>2])-1|0))?0|t:0|(0|(t=0|_t(0|r[e+4>>2]))?t+32:0)}function _t(e){var t=0;if(e|=0)if(1&e)e=0;else for(t=e,e=0;e=e+1|0,!(2&t);)t>>>=1;else e=32;return 0|e}function Mt(e,t,n){e|=0,t|=0,n|=0;var A,i=0,s=0,o=0,a=0;A=L,L=L+256|0,i=A;e:do{if((0|n)>=2&&(r[(o=t+(n<<2)|0)>>2]=i,0|e))for(;;){s=e>>>0<256?e:256,Jt(0|i,0|r[t>>2],0|s),i=0;do{a=t+(i<<2)|0,i=i+1|0,Jt(0|r[a>>2],0|r[t+(i<<2)>>2],0|s),r[a>>2]=(0|r[a>>2])+s}while((0|i)!=(0|n));if(!(e=e-s|0))break e;i=0|r[o>>2]}}while(0);L=A}function wt(e){return 0|+Yt(+(e=+e))}function Tt(e){e|=0;var t,n=0,A=0,i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0;t=L,L=L+16|0,d=t;do{if(e>>>0<245){if(e=(u=e>>>0<11?16:e+11&-8)>>>3,3&(A=(h=0|r[6921])>>>e))return i=0|r[(A=(e=27724+((n=(1&A^1)+e|0)<<1<<2)|0)+8|0)>>2],(0|(o=0|r[(s=i+8|0)>>2]))==(0|e)?r[6921]=h&~(1<<n):(r[o+12>>2]=e,r[A>>2]=o),C=n<<3,r[i+4>>2]=3|C,r[(C=i+C+4|0)>>2]=1|r[C>>2],L=t,0|(C=s);if(u>>>0>(f=0|r[6923])>>>0){if(0|A)return n=((n=A<<e&((n=2<<e)|0-n))&0-n)-1|0,o=0|r[(e=(n=27724+((i=((A=(n>>>=l=n>>>12&16)>>>5&8)|l|(o=(n>>>=A)>>>2&4)|(e=(n>>>=o)>>>1&2)|(i=(n>>>=e)>>>1&1))+(n>>>i)|0)<<1<<2)|0)+8|0)>>2],(0|(A=0|r[(l=o+8|0)>>2]))==(0|n)?(e=h&~(1<<i),r[6921]=e):(r[A+12>>2]=n,r[e>>2]=A,e=h),a=(C=i<<3)-u|0,r[o+4>>2]=3|u,r[(s=o+u|0)+4>>2]=1|a,r[o+C>>2]=a,0|f&&(i=0|r[6926],A=27724+((n=f>>>3)<<1<<2)|0,e&(n=1<<n)?n=0|r[(e=A+8|0)>>2]:(r[6921]=e|n,n=A,e=A+8|0),r[e>>2]=i,r[n+12>>2]=i,r[i+8>>2]=n,r[i+12>>2]=A),r[6923]=a,r[6926]=s,L=t,0|(C=l);if(o=0|r[6922]){for(A=(o&0-o)-1|0,A=c=0|r[27988+(((i=(A>>>=s=A>>>12&16)>>>5&8)|s|(a=(A>>>=i)>>>2&4)|(l=(A>>>=a)>>>1&2)|(c=(A>>>=l)>>>1&1))+(A>>>c)<<2)>>2],l=c,c=(-8&r[c+4>>2])-u|0;(e=0|r[A+16>>2])||(e=0|r[A+20>>2]);)A=e,l=(s=(a=(-8&r[e+4>>2])-u|0)>>>0<c>>>0)?e:l,c=s?a:c;if((a=l+u|0)>>>0>l>>>0){s=0|r[l+24>>2],n=0|r[l+12>>2];do{if((0|n)==(0|l)){if(!(n=0|r[(e=l+20|0)>>2])&&!(n=0|r[(e=l+16|0)>>2])){A=0;break}for(;;)if(A=0|r[(i=n+20|0)>>2])n=A,e=i;else{if(!(A=0|r[(i=n+16|0)>>2]))break;n=A,e=i}r[e>>2]=0,A=n}else A=0|r[l+8>>2],r[A+12>>2]=n,r[n+8>>2]=A,A=n}while(0);do{if(0|s){if(n=0|r[l+28>>2],(0|l)==(0|r[(e=27988+(n<<2)|0)>>2])){if(r[e>>2]=A,!A){r[6922]=o&~(1<<n);break}}else if(r[((0|r[(C=s+16|0)>>2])==(0|l)?C:s+20)>>2]=A,!A)break;r[A+24>>2]=s,0|(n=0|r[l+16>>2])&&(r[A+16>>2]=n,r[n+24>>2]=A),0|(n=0|r[l+20>>2])&&(r[A+20>>2]=n,r[n+24>>2]=A)}}while(0);return c>>>0<16?(C=c+u|0,r[l+4>>2]=3|C,r[(C=l+C+4|0)>>2]=1|r[C>>2]):(r[l+4>>2]=3|u,r[a+4>>2]=1|c,r[a+c>>2]=c,0|f&&(i=0|r[6926],A=27724+((n=f>>>3)<<1<<2)|0,(n=1<<n)&h?n=0|r[(e=A+8|0)>>2]:(r[6921]=n|h,n=A,e=A+8|0),r[e>>2]=i,r[n+12>>2]=i,r[i+8>>2]=n,r[i+12>>2]=A),r[6923]=c,r[6926]=a),L=t,0|(C=l+8|0)}h=u}else h=u}else h=u}else if(e>>>0<=4294967231)if(u=-8&(e=e+11|0),i=0|r[6922]){s=0-u|0,c=(e>>>=8)?u>>>0>16777215?31:u>>>((c=14-((l=((g=e<<(h=(e+1048320|0)>>>16&8))+520192|0)>>>16&4)|h|(c=((g<<=l)+245760|0)>>>16&2))+(g<<c>>>15)|0)+7|0)&1|c<<1:0,A=0|r[27988+(c<<2)>>2];e:do{if(A)for(e=0,l=u<<(31==(0|c)?0:25-(c>>>1)|0),o=0;;){if((a=(-8&r[A+4>>2])-u|0)>>>0<s>>>0){if(!a){e=A,s=0,g=65;break e}e=A,s=a}if(o=!(0|(g=0|r[A+20>>2]))|(0|g)==(0|(A=0|r[A+16+(l>>>31<<2)>>2]))?o:g,!A){A=o,g=61;break}l<<=1}else A=0,e=0,g=61}while(0);if(61==(0|g)){if(!(0|A)&!(0|e)){if(!(e=((e=2<<c)|0-e)&i)){h=u;break}h=(e&0-e)-1|0,e=0,A=0|r[27988+(((o=(h>>>=a=h>>>12&16)>>>5&8)|a|(l=(h>>>=o)>>>2&4)|(c=(h>>>=l)>>>1&2)|(A=(h>>>=c)>>>1&1))+(h>>>A)<<2)>>2]}A?g=65:(l=e,a=s)}if(65==(0|g))for(o=A;;){if(s=(A=(h=(-8&r[o+4>>2])-u|0)>>>0<s>>>0)?h:s,e=A?o:e,(A=0|r[o+16>>2])||(A=0|r[o+20>>2]),!A){l=e,a=s;break}o=A}if(0|l&&a>>>0<((0|r[6923])-u|0)>>>0&&(f=l+u|0)>>>0>l>>>0){o=0|r[l+24>>2],n=0|r[l+12>>2];do{if((0|n)==(0|l)){if(!(n=0|r[(e=l+20|0)>>2])&&!(n=0|r[(e=l+16|0)>>2])){n=0;break}for(;;)if(A=0|r[(s=n+20|0)>>2])n=A,e=s;else{if(!(A=0|r[(s=n+16|0)>>2]))break;n=A,e=s}r[e>>2]=0}else C=0|r[l+8>>2],r[C+12>>2]=n,r[n+8>>2]=C}while(0);do{if(o){if(e=0|r[l+28>>2],(0|l)==(0|r[(A=27988+(e<<2)|0)>>2])){if(r[A>>2]=n,!n){i&=~(1<<e),r[6922]=i;break}}else if(r[((0|r[(C=o+16|0)>>2])==(0|l)?C:o+20)>>2]=n,!n)break;r[n+24>>2]=o,0|(e=0|r[l+16>>2])&&(r[n+16>>2]=e,r[e+24>>2]=n),(e=0|r[l+20>>2])&&(r[n+20>>2]=e,r[e+24>>2]=n)}}while(0);e:do{if(a>>>0<16)C=a+u|0,r[l+4>>2]=3|C,r[(C=l+C+4|0)>>2]=1|r[C>>2];else{if(r[l+4>>2]=3|u,r[f+4>>2]=1|a,r[f+a>>2]=a,n=a>>>3,a>>>0<256){A=27724+(n<<1<<2)|0,(e=0|r[6921])&(n=1<<n)?n=0|r[(e=A+8|0)>>2]:(r[6921]=e|n,n=A,e=A+8|0),r[e>>2]=f,r[n+12>>2]=f,r[f+8>>2]=n,r[f+12>>2]=A;break}if(n=27988+((A=(n=a>>>8)?a>>>0>16777215?31:a>>>((A=14-((B=((C=n<<(v=(n+1048320|0)>>>16&8))+520192|0)>>>16&4)|v|(A=((C<<=B)+245760|0)>>>16&2))+(C<<A>>>15)|0)+7|0)&1|A<<1:0)<<2)|0,r[f+28>>2]=A,r[(e=f+16|0)+4>>2]=0,r[e>>2]=0,!(i&(e=1<<A))){r[6922]=i|e,r[n>>2]=f,r[f+24>>2]=n,r[f+12>>2]=f,r[f+8>>2]=f;break}n=0|r[n>>2];t:do{if((-8&r[n+4>>2])!=(0|a)){for(i=a<<(31==(0|A)?0:25-(A>>>1)|0);e=0|r[(A=n+16+(i>>>31<<2)|0)>>2];){if((-8&r[e+4>>2])==(0|a)){n=e;break t}i<<=1,n=e}r[A>>2]=f,r[f+24>>2]=n,r[f+12>>2]=f,r[f+8>>2]=f;break e}}while(0);C=0|r[(v=n+8|0)>>2],r[C+12>>2]=f,r[v>>2]=f,r[f+8>>2]=C,r[f+12>>2]=n,r[f+24>>2]=0}}while(0);return L=t,0|(C=l+8|0)}h=u}else h=u;else h=-1}while(0);if((A=0|r[6923])>>>0>=h>>>0)return n=A-h|0,e=0|r[6926],n>>>0>15?(C=e+h|0,r[6926]=C,r[6923]=n,r[C+4>>2]=1|n,r[e+A>>2]=n,r[e+4>>2]=3|h):(r[6923]=0,r[6926]=0,r[e+4>>2]=3|A,r[(C=e+A+4|0)>>2]=1|r[C>>2]),L=t,0|(C=e+8|0);if((a=0|r[6924])>>>0>h>>>0)return B=a-h|0,r[6924]=B,v=(C=0|r[6927])+h|0,r[6927]=v,r[v+4>>2]=1|B,r[C+4>>2]=3|h,L=t,0|(C=C+8|0);if(0|r[7039]?e=0|r[7041]:(r[7041]=4096,r[7040]=4096,r[7042]=-1,r[7043]=-1,r[7044]=0,r[7032]=0,r[7039]=-16&d^1431655768,e=4096),l=h+48|0,(u=(o=e+(c=h+47|0)|0)&(s=0-e|0))>>>0<=h>>>0)return L=t,0|(C=0);if(0|(e=0|r[7031])&&(d=(f=0|r[7029])+u|0)>>>0<=f>>>0|d>>>0>e>>>0)return L=t,0|(C=0);e:do{if(4&r[7032])n=0,g=143;else{A=0|r[6927];t:do{if(A){for(i=28132;!((d=0|r[i>>2])>>>0<=A>>>0&&(d+(0|r[i+4>>2])|0)>>>0>A>>>0);){if(!(e=0|r[i+8>>2])){g=128;break t}i=e}if((n=o-a&s)>>>0<2147483647)if((0|(e=0|Wt(0|n)))==((0|r[i>>2])+(0|r[i+4>>2])|0)){if(-1!=(0|e)){a=n,o=e,g=145;break e}}else i=e,g=136;else n=0}else g=128}while(0);do{if(128==(0|g))if(-1!=(0|(A=0|Wt(0)))&&(n=A,m=(n=((m=(p=0|r[7040])+-1|0)&n|0?(m+n&0-p)-n|0:0)+u|0)+(p=0|r[7029])|0,n>>>0>h>>>0&n>>>0<2147483647)){if(0|(d=0|r[7031])&&m>>>0<=p>>>0|m>>>0>d>>>0){n=0;break}if((0|(e=0|Wt(0|n)))==(0|A)){a=n,o=A,g=145;break e}i=e,g=136}else n=0}while(0);do{if(136==(0|g)){if(A=0-n|0,!(l>>>0>n>>>0&n>>>0<2147483647&-1!=(0|i))){if(-1==(0|i)){n=0;break}a=n,o=i,g=145;break e}if((e=c-n+(e=0|r[7041])&0-e)>>>0>=2147483647){a=n,o=i,g=145;break e}if(-1==(0|Wt(0|e))){Wt(0|A),n=0;break}a=e+n|0,o=i,g=145;break e}}while(0);r[7032]=4|r[7032],g=143}}while(0);if(143==(0|g)&&u>>>0<2147483647&&!(-1==(0|(B=0|Wt(0|u)))|1^(y=(b=(m=0|Wt(0))-B|0)>>>0>(h+40|0)>>>0)|B>>>0<m>>>0&-1!=(0|B)&-1!=(0|m)^1)&&(a=y?b:n,o=B,g=145),145==(0|g)){n=(0|r[7029])+a|0,r[7029]=n,n>>>0>(0|r[7030])>>>0&&(r[7030]=n),c=0|r[6927];e:do{if(c){for(n=28132;;){if((0|o)==((e=0|r[n>>2])+(A=0|r[n+4>>2])|0)){g=154;break}if(!(i=0|r[n+8>>2]))break;n=i}if(!(154!=(0|g)||(v=n+4|0,8&r[n+12>>2]))&&o>>>0>c>>>0&e>>>0<=c>>>0){r[v>>2]=A+a,v=c+(B=7&(B=c+8|0)?0-B&7:0)|0,B=(C=(0|r[6924])+a|0)-B|0,r[6927]=v,r[6924]=B,r[v+4>>2]=1|B,r[c+C+4>>2]=40,r[6928]=r[7043];break}for(o>>>0<(0|r[6925])>>>0&&(r[6925]=o),A=o+a|0,n=28132;;){if((0|r[n>>2])==(0|A)){g=162;break}if(!(e=0|r[n+8>>2]))break;n=e}if(162==(0|g)&&!(8&r[n+12>>2])){r[n>>2]=o,r[(f=n+4|0)>>2]=(0|r[f>>2])+a,u=(f=o+(7&(f=o+8|0)?0-f&7:0)|0)+h|0,l=(n=A+(7&(n=A+8|0)?0-n&7:0)|0)-f-h|0,r[f+4>>2]=3|h;t:do{if((0|c)==(0|n))C=(0|r[6924])+l|0,r[6924]=C,r[6927]=u,r[u+4>>2]=1|C;else{if((0|r[6926])==(0|n)){C=(0|r[6923])+l|0,r[6923]=C,r[6926]=u,r[u+4>>2]=1|C,r[u+C>>2]=C;break}if(1==(3&(e=0|r[n+4>>2]))){a=-8&e,i=e>>>3;n:do{if(e>>>0<256){if(e=0|r[n+8>>2],(0|(A=0|r[n+12>>2]))==(0|e)){r[6921]=r[6921]&~(1<<i);break}r[e+12>>2]=A,r[A+8>>2]=e;break}o=0|r[n+24>>2],e=0|r[n+12>>2];do{if((0|e)==(0|n)){if(e=0|r[(i=(A=n+16|0)+4|0)>>2])A=i;else if(!(e=0|r[A>>2])){e=0;break}for(;;)if(i=0|r[(s=e+20|0)>>2])e=i,A=s;else{if(!(i=0|r[(s=e+16|0)>>2]))break;e=i,A=s}r[A>>2]=0}else C=0|r[n+8>>2],r[C+12>>2]=e,r[e+8>>2]=C}while(0);if(!o)break;i=27988+((A=0|r[n+28>>2])<<2)|0;do{if((0|r[i>>2])==(0|n)){if(r[i>>2]=e,0|e)break;r[6922]=r[6922]&~(1<<A);break n}if(r[((0|r[(C=o+16|0)>>2])==(0|n)?C:o+20)>>2]=e,!e)break n}while(0);if(r[e+24>>2]=o,0|(i=0|r[(A=n+16|0)>>2])&&(r[e+16>>2]=i,r[i+24>>2]=e),!(A=0|r[A+4>>2]))break;r[e+20>>2]=A,r[A+24>>2]=e}while(0);n=n+a|0,s=a+l|0}else s=l;if(r[(n=n+4|0)>>2]=-2&r[n>>2],r[u+4>>2]=1|s,r[u+s>>2]=s,n=s>>>3,s>>>0<256){A=27724+(n<<1<<2)|0,(e=0|r[6921])&(n=1<<n)?n=0|r[(e=A+8|0)>>2]:(r[6921]=e|n,n=A,e=A+8|0),r[e>>2]=u,r[n+12>>2]=u,r[u+8>>2]=n,r[u+12>>2]=A;break}n=s>>>8;do{if(n){if(s>>>0>16777215){i=31;break}i=s>>>((i=14-((B=((C=n<<(v=(n+1048320|0)>>>16&8))+520192|0)>>>16&4)|v|(i=((C<<=B)+245760|0)>>>16&2))+(C<<i>>>15)|0)+7|0)&1|i<<1}else i=0}while(0);if(n=27988+(i<<2)|0,r[u+28>>2]=i,r[(e=u+16|0)+4>>2]=0,r[e>>2]=0,!((e=0|r[6922])&(A=1<<i))){r[6922]=e|A,r[n>>2]=u,r[u+24>>2]=n,r[u+12>>2]=u,r[u+8>>2]=u;break}n=0|r[n>>2];n:do{if((-8&r[n+4>>2])!=(0|s)){for(i=s<<(31==(0|i)?0:25-(i>>>1)|0);e=0|r[(A=n+16+(i>>>31<<2)|0)>>2];){if((-8&r[e+4>>2])==(0|s)){n=e;break n}i<<=1,n=e}r[A>>2]=u,r[u+24>>2]=n,r[u+12>>2]=u,r[u+8>>2]=u;break t}}while(0);C=0|r[(v=n+8|0)>>2],r[C+12>>2]=u,r[v>>2]=u,r[u+8>>2]=C,r[u+12>>2]=n,r[u+24>>2]=0}}while(0);return L=t,0|(C=f+8|0)}for(n=28132;!((e=0|r[n>>2])>>>0<=c>>>0&&(C=e+(0|r[n+4>>2])|0)>>>0>c>>>0);)n=0|r[n+8>>2];n=(e=(e=(s=C+-47|0)+(7&(e=s+8|0)?0-e&7:0)|0)>>>0<(s=c+16|0)>>>0?c:e)+8|0,v=o+(B=7&(B=o+8|0)?0-B&7:0)|0,B=(A=a+-40|0)-B|0,r[6927]=v,r[6924]=B,r[v+4>>2]=1|B,r[o+A+4>>2]=40,r[6928]=r[7043],r[(A=e+4|0)>>2]=27,r[n>>2]=r[7033],r[n+4>>2]=r[7034],r[n+8>>2]=r[7035],r[n+12>>2]=r[7036],r[7033]=o,r[7034]=a,r[7036]=0,r[7035]=n,n=e+24|0;do{v=n,r[(n=n+4|0)>>2]=7}while((v+8|0)>>>0<C>>>0);if((0|e)!=(0|c)){if(o=e-c|0,r[A>>2]=-2&r[A>>2],r[c+4>>2]=1|o,r[e>>2]=o,n=o>>>3,o>>>0<256){A=27724+(n<<1<<2)|0,(e=0|r[6921])&(n=1<<n)?n=0|r[(e=A+8|0)>>2]:(r[6921]=e|n,n=A,e=A+8|0),r[e>>2]=c,r[n+12>>2]=c,r[c+8>>2]=n,r[c+12>>2]=A;break}if(A=27988+((i=(n=o>>>8)?o>>>0>16777215?31:o>>>((i=14-((B=((C=n<<(v=(n+1048320|0)>>>16&8))+520192|0)>>>16&4)|v|(i=((C<<=B)+245760|0)>>>16&2))+(C<<i>>>15)|0)+7|0)&1|i<<1:0)<<2)|0,r[c+28>>2]=i,r[c+20>>2]=0,r[s>>2]=0,!((n=0|r[6922])&(e=1<<i))){r[6922]=n|e,r[A>>2]=c,r[c+24>>2]=A,r[c+12>>2]=c,r[c+8>>2]=c;break}n=0|r[A>>2];t:do{if((-8&r[n+4>>2])!=(0|o)){for(i=o<<(31==(0|i)?0:25-(i>>>1)|0);e=0|r[(A=n+16+(i>>>31<<2)|0)>>2];){if((-8&r[e+4>>2])==(0|o)){n=e;break t}i<<=1,n=e}r[A>>2]=c,r[c+24>>2]=n,r[c+12>>2]=c,r[c+8>>2]=c;break e}}while(0);C=0|r[(v=n+8|0)>>2],r[C+12>>2]=c,r[v>>2]=c,r[c+8>>2]=C,r[c+12>>2]=n,r[c+24>>2]=0}}else!(0|(C=0|r[6925]))|o>>>0<C>>>0&&(r[6925]=o),r[7033]=o,r[7034]=a,r[7036]=0,r[6930]=r[7039],r[6929]=-1,r[6934]=27724,r[6933]=27724,r[6936]=27732,r[6935]=27732,r[6938]=27740,r[6937]=27740,r[6940]=27748,r[6939]=27748,r[6942]=27756,r[6941]=27756,r[6944]=27764,r[6943]=27764,r[6946]=27772,r[6945]=27772,r[6948]=27780,r[6947]=27780,r[6950]=27788,r[6949]=27788,r[6952]=27796,r[6951]=27796,r[6954]=27804,r[6953]=27804,r[6956]=27812,r[6955]=27812,r[6958]=27820,r[6957]=27820,r[6960]=27828,r[6959]=27828,r[6962]=27836,r[6961]=27836,r[6964]=27844,r[6963]=27844,r[6966]=27852,r[6965]=27852,r[6968]=27860,r[6967]=27860,r[6970]=27868,r[6969]=27868,r[6972]=27876,r[6971]=27876,r[6974]=27884,r[6973]=27884,r[6976]=27892,r[6975]=27892,r[6978]=27900,r[6977]=27900,r[6980]=27908,r[6979]=27908,r[6982]=27916,r[6981]=27916,r[6984]=27924,r[6983]=27924,r[6986]=27932,r[6985]=27932,r[6988]=27940,r[6987]=27940,r[6990]=27948,r[6989]=27948,r[6992]=27956,r[6991]=27956,r[6994]=27964,r[6993]=27964,r[6996]=27972,r[6995]=27972,v=o+(B=7&(B=o+8|0)?0-B&7:0)|0,B=(C=a+-40|0)-B|0,r[6927]=v,r[6924]=B,r[v+4>>2]=1|B,r[o+C+4>>2]=40,r[6928]=r[7043]}while(0);if((n=0|r[6924])>>>0>h>>>0)return B=n-h|0,r[6924]=B,v=(C=0|r[6927])+h|0,r[6927]=v,r[v+4>>2]=1|B,r[C+4>>2]=3|h,L=t,0|(C=C+8|0)}return r[(C=27680)>>2]=12,L=t,0|(C=0)}function Et(e){var t=0,n=0,A=0,i=0,s=0,o=0,a=0,l=0;if(e|=0){n=e+-8|0,i=0|r[6925],l=n+(t=-8&(e=0|r[e+-4>>2]))|0;do{if(1&e)a=n,o=n;else{if(A=0|r[n>>2],!(3&e))return;if(s=A+t|0,(o=n+(0-A)|0)>>>0<i>>>0)return;if((0|r[6926])==(0|o)){if(3&~(t=0|r[(e=l+4|0)>>2])){a=o,t=s;break}return r[6923]=s,r[e>>2]=-2&t,r[o+4>>2]=1|s,void(r[o+s>>2]=s)}if(n=A>>>3,A>>>0<256){if(e=0|r[o+8>>2],(0|(t=0|r[o+12>>2]))==(0|e)){r[6921]=r[6921]&~(1<<n),a=o,t=s;break}r[e+12>>2]=t,r[t+8>>2]=e,a=o,t=s;break}i=0|r[o+24>>2],e=0|r[o+12>>2];do{if((0|e)==(0|o)){if(e=0|r[(n=(t=o+16|0)+4|0)>>2])t=n;else if(!(e=0|r[t>>2])){e=0;break}for(;;)if(n=0|r[(A=e+20|0)>>2])e=n,t=A;else{if(!(n=0|r[(A=e+16|0)>>2]))break;e=n,t=A}r[t>>2]=0}else a=0|r[o+8>>2],r[a+12>>2]=e,r[e+8>>2]=a}while(0);if(i){if(t=0|r[o+28>>2],(0|r[(n=27988+(t<<2)|0)>>2])==(0|o)){if(r[n>>2]=e,!e){r[6922]=r[6922]&~(1<<t),a=o,t=s;break}}else if(r[((0|r[(a=i+16|0)>>2])==(0|o)?a:i+20)>>2]=e,!e){a=o,t=s;break}r[e+24>>2]=i,0|(n=0|r[(t=o+16|0)>>2])&&(r[e+16>>2]=n,r[n+24>>2]=e),(t=0|r[t+4>>2])?(r[e+20>>2]=t,r[t+24>>2]=e,a=o,t=s):(a=o,t=s)}else a=o,t=s}}while(0);if(!(o>>>0>=l>>>0)&&1&(A=0|r[(e=l+4|0)>>2])){if(2&A)r[e>>2]=-2&A,r[a+4>>2]=1|t,r[o+t>>2]=t,i=t;else{if((0|r[6927])==(0|l)){if(l=(0|r[6924])+t|0,r[6924]=l,r[6927]=a,r[a+4>>2]=1|l,(0|a)!=(0|r[6926]))return;return r[6926]=0,void(r[6923]=0)}if((0|r[6926])==(0|l))return l=(0|r[6923])+t|0,r[6923]=l,r[6926]=o,r[a+4>>2]=1|l,void(r[o+l>>2]=l);i=(-8&A)+t|0,n=A>>>3;do{if(A>>>0<256){if(t=0|r[l+8>>2],(0|(e=0|r[l+12>>2]))==(0|t)){r[6921]=r[6921]&~(1<<n);break}r[t+12>>2]=e,r[e+8>>2]=t;break}s=0|r[l+24>>2],e=0|r[l+12>>2];do{if((0|e)==(0|l)){if(e=0|r[(n=(t=l+16|0)+4|0)>>2])t=n;else if(!(e=0|r[t>>2])){n=0;break}for(;;)if(n=0|r[(A=e+20|0)>>2])e=n,t=A;else{if(!(n=0|r[(A=e+16|0)>>2]))break;e=n,t=A}r[t>>2]=0,n=e}else n=0|r[l+8>>2],r[n+12>>2]=e,r[e+8>>2]=n,n=e}while(0);if(0|s){if(e=0|r[l+28>>2],(0|r[(t=27988+(e<<2)|0)>>2])==(0|l)){if(r[t>>2]=n,!n){r[6922]=r[6922]&~(1<<e);break}}else if(r[((0|r[(A=s+16|0)>>2])==(0|l)?A:s+20)>>2]=n,!n)break;r[n+24>>2]=s,0|(t=0|r[(e=l+16|0)>>2])&&(r[n+16>>2]=t,r[t+24>>2]=n),0|(e=0|r[e+4>>2])&&(r[n+20>>2]=e,r[e+24>>2]=n)}}while(0);if(r[a+4>>2]=1|i,r[o+i>>2]=i,(0|a)==(0|r[6926]))return void(r[6923]=i)}if(e=i>>>3,i>>>0<256)return n=27724+(e<<1<<2)|0,(t=0|r[6921])&(e=1<<e)?e=0|r[(t=n+8|0)>>2]:(r[6921]=t|e,e=n,t=n+8|0),r[t>>2]=a,r[e+12>>2]=a,r[a+8>>2]=e,void(r[a+12>>2]=n);e=27988+((A=(e=i>>>8)?i>>>0>16777215?31:i>>>((A=14-((s=((l=e<<(o=(e+1048320|0)>>>16&8))+520192|0)>>>16&4)|o|(A=((l<<=s)+245760|0)>>>16&2))+(l<<A>>>15)|0)+7|0)&1|A<<1:0)<<2)|0,r[a+28>>2]=A,r[a+20>>2]=0,r[a+16>>2]=0,t=0|r[6922],n=1<<A;e:do{if(t&n){e=0|r[e>>2];t:do{if((-8&r[e+4>>2])!=(0|i)){for(A=i<<(31==(0|A)?0:25-(A>>>1)|0);t=0|r[(n=e+16+(A>>>31<<2)|0)>>2];){if((-8&r[t+4>>2])==(0|i)){e=t;break t}A<<=1,e=t}r[n>>2]=a,r[a+24>>2]=e,r[a+12>>2]=a,r[a+8>>2]=a;break e}}while(0);l=0|r[(o=e+8|0)>>2],r[l+12>>2]=a,r[o>>2]=a,r[a+8>>2]=l,r[a+12>>2]=e,r[a+24>>2]=0}else r[6922]=t|n,r[e>>2]=a,r[a+24>>2]=e,r[a+12>>2]=a,r[a+8>>2]=a}while(0);if(l=(0|r[6929])-1|0,r[6929]=l,!(0|l)){for(e=28140;e=0|r[e>>2];)e=e+8|0;r[6929]=-1}}}}function xt(e,t){t|=0;var n=0;return(e|=0)?(n=0|y(t,e),(t|e)>>>0>65535&&(n=((n>>>0)/(e>>>0)|0)==(0|t)?n:-1)):n=0,(e=0|Tt(n))&&3&r[e+-4>>2]?(qt(0|e,0,0|n),0|e):0|e}function St(e,t){t|=0;var n=0,A=0;return(e|=0)?t>>>0>4294967231?(r[(t=27680)>>2]=12,0|(t=0)):(n=0|function(e,t){e|=0,t|=0;var n=0,A=0,i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0;if(u=e+4|0,f=0|r[u>>2],n=-8&f,a=e+n|0,!(3&f))return t>>>0<256?0|(e=0):n>>>0>=(t+4|0)>>>0&&(n-t|0)>>>0<=r[7041]<<1>>>0?0|e:0|(e=0);if(n>>>0>=t>>>0)return(n=n-t|0)>>>0<=15||(c=e+t|0,r[u>>2]=1&f|t|2,r[c+4>>2]=3|n,r[(f=a+4|0)>>2]=1|r[f>>2],It(c,n)),0|e;if((0|r[6927])==(0|a))return n=(c=(0|r[6924])+n|0)-t|0,A=e+t|0,c>>>0<=t>>>0?0|(e=0):(r[u>>2]=1&f|t|2,r[A+4>>2]=1|n,r[6927]=A,r[6924]=n,0|e);if((0|r[6926])==(0|a))return(A=(0|r[6923])+n|0)>>>0<t>>>0?0|(e=0):((n=A-t|0)>>>0>15?(c=e+t|0,A=e+A|0,r[u>>2]=1&f|t|2,r[c+4>>2]=1|n,r[A>>2]=n,r[(A=A+4|0)>>2]=-2&r[A>>2],A=c):(r[u>>2]=1&f|A|2,r[(A=e+A+4|0)>>2]=1|r[A>>2],A=0,n=0),r[6923]=n,r[6926]=A,0|e);if(A=0|r[a+4>>2],2&A)return 0|(e=0);if(l=(-8&A)+n|0,l>>>0<t>>>0)return 0|(e=0);c=l-t|0,i=A>>>3;do{if(A>>>0<256){if(A=0|r[a+8>>2],(0|(n=0|r[a+12>>2]))==(0|A)){r[6921]=r[6921]&~(1<<i);break}r[A+12>>2]=n,r[n+8>>2]=A;break}o=0|r[a+24>>2],n=0|r[a+12>>2];do{if((0|n)==(0|a)){if(n=0|r[(i=(A=a+16|0)+4|0)>>2])A=i;else if(!(n=0|r[A>>2])){i=0;break}for(;;)if(i=0|r[(s=n+20|0)>>2])n=i,A=s;else{if(!(i=0|r[(s=n+16|0)>>2]))break;n=i,A=s}r[A>>2]=0,i=n}else i=0|r[a+8>>2],r[i+12>>2]=n,r[n+8>>2]=i,i=n}while(0);if(0|o){if(n=0|r[a+28>>2],(0|r[(A=27988+(n<<2)|0)>>2])==(0|a)){if(r[A>>2]=i,!i){r[6922]=r[6922]&~(1<<n);break}}else if(r[((0|r[(s=o+16|0)>>2])==(0|a)?s:o+20)>>2]=i,!i)break;r[i+24>>2]=o,0|(A=0|r[(n=a+16|0)>>2])&&(r[i+16>>2]=A,r[A+24>>2]=i),0|(n=0|r[n+4>>2])&&(r[i+20>>2]=n,r[n+24>>2]=i)}}while(0);return c>>>0<16?(r[u>>2]=1&f|l|2,r[(f=e+l+4|0)>>2]=1|r[f>>2],0|e):(a=e+t|0,r[u>>2]=1&f|t|2,r[a+4>>2]=3|c,r[(f=e+l+4|0)>>2]=1|r[f>>2],It(a,c),0|e)}(e+-8|0,t>>>0<11?16:t+11&-8),0|n?0|(t=n+8|0):(n=0|Tt(t))?(Jt(0|n,0|e,0|((A=(-8&(A=0|r[e+-4>>2]))-(3&A?4:8)|0)>>>0<t>>>0?A:t)),Et(e),0|(t=n)):0|(t=0)):0|(t=0|Tt(t))}function It(e,t){var n=0,A=0,i=0,s=0,o=0,a=0;a=(e|=0)+(t|=0)|0,n=0|r[e+4>>2];do{if(1&n)o=e;else{if(i=0|r[e>>2],!(3&n))return;if(o=e+(0-i)|0,t=i+t|0,(0|r[6926])==(0|o)){if(3&~(n=0|r[(e=a+4|0)>>2]))break;return r[6923]=t,r[e>>2]=-2&n,r[o+4>>2]=1|t,void(r[a>>2]=t)}if(A=i>>>3,i>>>0<256){if(e=0|r[o+8>>2],(0|(n=0|r[o+12>>2]))==(0|e)){r[6921]=r[6921]&~(1<<A);break}r[e+12>>2]=n,r[n+8>>2]=e;break}s=0|r[o+24>>2],e=0|r[o+12>>2];do{if((0|e)==(0|o)){if(e=0|r[(A=(n=o+16|0)+4|0)>>2])n=A;else if(!(e=0|r[n>>2])){e=0;break}for(;;)if(A=0|r[(i=e+20|0)>>2])e=A,n=i;else{if(!(A=0|r[(i=e+16|0)>>2]))break;e=A,n=i}r[n>>2]=0}else i=0|r[o+8>>2],r[i+12>>2]=e,r[e+8>>2]=i}while(0);if(s){if(n=0|r[o+28>>2],(0|r[(A=27988+(n<<2)|0)>>2])==(0|o)){if(r[A>>2]=e,!e){r[6922]=r[6922]&~(1<<n);break}}else if(r[((0|r[(i=s+16|0)>>2])==(0|o)?i:s+20)>>2]=e,!e)break;r[e+24>>2]=s,0|(A=0|r[(n=o+16|0)>>2])&&(r[e+16>>2]=A,r[A+24>>2]=e),(n=0|r[n+4>>2])&&(r[e+20>>2]=n,r[n+24>>2]=e)}}}while(0);if(2&(A=0|r[(e=a+4|0)>>2]))r[e>>2]=-2&A,r[o+4>>2]=1|t,r[o+t>>2]=t,i=t;else{if((0|r[6927])==(0|a)){if(a=(0|r[6924])+t|0,r[6924]=a,r[6927]=o,r[o+4>>2]=1|a,(0|o)!=(0|r[6926]))return;return r[6926]=0,void(r[6923]=0)}if((0|r[6926])==(0|a))return a=(0|r[6923])+t|0,r[6923]=a,r[6926]=o,r[o+4>>2]=1|a,void(r[o+a>>2]=a);i=(-8&A)+t|0,n=A>>>3;do{if(A>>>0<256){if(e=0|r[a+8>>2],(0|(t=0|r[a+12>>2]))==(0|e)){r[6921]=r[6921]&~(1<<n);break}r[e+12>>2]=t,r[t+8>>2]=e;break}s=0|r[a+24>>2],t=0|r[a+12>>2];do{if((0|t)==(0|a)){if(t=0|r[(n=(e=a+16|0)+4|0)>>2])e=n;else if(!(t=0|r[e>>2])){n=0;break}for(;;)if(n=0|r[(A=t+20|0)>>2])t=n,e=A;else{if(!(n=0|r[(A=t+16|0)>>2]))break;t=n,e=A}r[e>>2]=0,n=t}else n=0|r[a+8>>2],r[n+12>>2]=t,r[t+8>>2]=n,n=t}while(0);if(0|s){if(t=0|r[a+28>>2],(0|r[(e=27988+(t<<2)|0)>>2])==(0|a)){if(r[e>>2]=n,!n){r[6922]=r[6922]&~(1<<t);break}}else if(r[((0|r[(A=s+16|0)>>2])==(0|a)?A:s+20)>>2]=n,!n)break;r[n+24>>2]=s,0|(e=0|r[(t=a+16|0)>>2])&&(r[n+16>>2]=e,r[e+24>>2]=n),0|(t=0|r[t+4>>2])&&(r[n+20>>2]=t,r[t+24>>2]=n)}}while(0);if(r[o+4>>2]=1|i,r[o+i>>2]=i,(0|o)==(0|r[6926]))return void(r[6923]=i)}if(t=i>>>3,i>>>0<256)return n=27724+(t<<1<<2)|0,(e=0|r[6921])&(t=1<<t)?t=0|r[(e=n+8|0)>>2]:(r[6921]=e|t,t=n,e=n+8|0),r[e>>2]=o,r[t+12>>2]=o,r[o+8>>2]=t,void(r[o+12>>2]=n);if(t=27988+((A=(t=i>>>8)?i>>>0>16777215?31:i>>>((A=14-((n=((a=t<<(s=(t+1048320|0)>>>16&8))+520192|0)>>>16&4)|s|(A=((a<<=n)+245760|0)>>>16&2))+(a<<A>>>15)|0)+7|0)&1|A<<1:0)<<2)|0,r[o+28>>2]=A,r[o+20>>2]=0,r[o+16>>2]=0,!((e=0|r[6922])&(n=1<<A)))return r[6922]=e|n,r[t>>2]=o,r[o+24>>2]=t,r[o+12>>2]=o,void(r[o+8>>2]=o);t=0|r[t>>2];e:do{if((-8&r[t+4>>2])!=(0|i)){for(A=i<<(31==(0|A)?0:25-(A>>>1)|0);e=0|r[(n=t+16+(A>>>31<<2)|0)>>2];){if((-8&r[e+4>>2])==(0|i)){t=e;break e}A<<=1,t=e}return r[n>>2]=o,r[o+24>>2]=t,r[o+12>>2]=o,void(r[o+8>>2]=o)}}while(0);a=0|r[(s=t+8|0)>>2],r[a+12>>2]=o,r[s>>2]=o,r[o+8>>2]=a,r[o+12>>2]=t,r[o+24>>2]=0}function Rt(e,t,n,A){return 0|(M((t|=0)+(A|=0)+((n=(e|=0)+(n|=0)>>>0)>>>0<e>>>0|0)>>>0|0),n)}function Lt(e,t,n,A){return 0|(M(0|(A=(t|=0)-(A|=0)-((n|=0)>>>0>(e|=0)>>>0|0)>>>0)),e-n>>>0)}function Dt(e){return 0|((e|=0)?31-(0|C(e^e-1)):32)}function Pt(e,t,n,A,i){i|=0;var s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0;if(u=e|=0,o=n|=0,a=h=A|=0,!(c=l=t|=0))return s=!!(0|i),a?s?(r[i>>2]=0|e,r[i+4>>2]=0&t,i=0,0|(M(0|(h=0)),i)):(i=0,0|(M(0|(h=0)),i)):(s&&(r[i>>2]=(u>>>0)%(o>>>0),r[i+4>>2]=0),i=(u>>>0)/(o>>>0)>>>0,0|(M(0|(h=0)),i));s=!(0|a);do{if(o){if(!s){if((s=(0|C(0|a))-(0|C(0|c))|0)>>>0<=31){o=f=s+1|0,e=u>>>(f>>>0)&(t=s-31>>31)|c<<(a=31-s|0),t&=c>>>(f>>>0),s=0,a=u<<a;break}return i?(r[i>>2]=0|e,r[i+4>>2]=l|0&t,i=0,0|(M(0|(h=0)),i)):(i=0,0|(M(0|(h=0)),i))}if((s=o-1|0)&o|0){o=a=33+(0|C(0|o))-(0|C(0|c))|0,e=(f=32-a|0)-1>>31&c>>>((d=a-32|0)>>>0)|(c<<f|u>>>(a>>>0))&(t=d>>31),t&=c>>>(a>>>0),s=u<<(p=64-a|0)&(l=f>>31),a=(c<<p|u>>>(d>>>0))&l|u<<f&a-33>>31;break}return 0|i&&(r[i>>2]=s&u,r[i+4>>2]=0),1==(0|o)?(p=0|e,0|(M(0|(d=l|0&t)),p)):(d=c>>>((p=0|Dt(0|o))>>>0)|0,p=c<<32-p|u>>>(p>>>0),0|(M(0|d),p))}if(s)return 0|i&&(r[i>>2]=(c>>>0)%(o>>>0),r[i+4>>2]=0),p=(c>>>0)/(o>>>0)>>>0,0|(M(0|(d=0)),p);if(!u)return 0|i&&(r[i>>2]=0,r[i+4>>2]=(c>>>0)%(a>>>0)),p=(c>>>0)/(a>>>0)>>>0,0|(M(0|(d=0)),p);if(!((s=a-1|0)&a))return 0|i&&(r[i>>2]=0|e,r[i+4>>2]=s&c|0&t),d=0,p=c>>>((0|Dt(0|a))>>>0),0|(M(0|d),p);if((s=(0|C(0|a))-(0|C(0|c))|0)>>>0<=30){o=t=s+1|0,e=c<<(a=31-s|0)|u>>>(t>>>0),t=c>>>(t>>>0),s=0,a=u<<a;break}return i?(r[i>>2]=0|e,r[i+4>>2]=l|0&t,p=0,0|(M(0|(d=0)),p)):(p=0,0|(M(0|(d=0)),p))}while(0);if(o){c=0|Rt(0|(f=0|n),0|(u=h|0&A),-1,-1),n=0|w(),l=a,a=0;do{A=l,l=s>>>31|l<<1,s=a|s<<1,Lt(0|c,0|n,0|(A=e<<1|A>>>31),0|(h=e>>>31|t<<1)),a=1&(d=(p=0|w())>>31|((0|p)<0?-1:0)<<1),e=0|Lt(0|A,0|h,d&f|0,(((0|p)<0?-1:0)>>31|((0|p)<0?-1:0)<<1)&u),t=0|w(),o=o-1|0}while(0|o);c=l,l=0}else c=a,l=0,a=0;return o=0,0|i&&(r[i>>2]=e,r[i+4>>2]=t),p=s<<1&-2|a,0|(M(0|(d=(0|s)>>>31|(c|o)<<1|l)),p)}function Ft(e,t,n,A){n|=0;var r,i,s,o,a;return i=(A|=0)>>31|((0|A)<0?-1:0)<<1,r=((0|A)<0?-1:0)>>31|((0|A)<0?-1:0)<<1,s=0|Lt((a=(t|=0)>>31|((0|t)<0?-1:0)<<1)^(e|=0)|0,(o=((0|t)<0?-1:0)>>31|((0|t)<0?-1:0)<<1)^t|0,0|a,0|o),e=i^a,t=r^o,0|Lt((0|Pt(s,0|w(),0|Lt(i^n|0,r^A|0,0|i,0|r),0|w(),0))^e,(0|w())^t,0|e,0|t)}function Nt(e,t,n,A){t|=0,A|=0;var r,i;return n=0|function(e,t){var n,A,r,i=0;return e=((n=0|y(i=65535&(t|=0),r=65535&(e|=0)))>>>16)+(0|y(i,A=e>>>16))|0,t=0|y(i=t>>>16,r),0|(M((e>>>16)+(0|y(i,A))+(((65535&e)+t|0)>>>16)|0),e+t<<16|65535&n)}(r=e|=0,i=n|=0),e=0|w(),0|(M((0|y(t,i))+(0|y(A,r))+e|0&e),n)}function Ot(e,t,n,A){n|=0;var i,s,o,a,l,c;return i=L,L=L+16|0,a=0|i,c=(A|=0)>>31|((0|A)<0?-1:0)<<1,l=((0|A)<0?-1:0)>>31|((0|A)<0?-1:0)<<1,Pt(e=0|Lt((o=(t|=0)>>31|((0|t)<0?-1:0)<<1)^(e|=0)|0,(s=((0|t)<0?-1:0)>>31|((0|t)<0?-1:0)<<1)^t|0,0|o,0|s),t=0|w(),0|Lt(c^n|0,l^A|0,0|c,0|l),0|w(),a),A=0|Lt(r[a>>2]^o|0,r[a+4>>2]^s|0,0|o,0|s),n=0|w(),L=i,0|(M(0|n),A)}function Ut(e,t,n,A){var i,s;return s=L,L=L+16|0,Pt(e|=0,t|=0,n|=0,A|=0,i=0|s),L=s,0|(M(0|r[i+4>>2]),r[i>>2])}function kt(e,t,n){return e|=0,t|=0,(0|(n|=0))<32?(M(t>>n|0),e>>>n|(t&(1<<n)-1)<<32-n):(M(0|((0|t)<0?-1:0)),t>>n-32)}function Gt(e,t,n){return e|=0,t|=0,(0|(n|=0))<32?(M(t>>>n|0),e>>>n|(t&(1<<n)-1)<<32-n):(M(0),t>>>n-32|0)}function Vt(e,t,n){return e|=0,t|=0,(0|(n|=0))<32?(M(t<<n|(e&(1<<n)-1<<32-n)>>>32-n),e<<n):(M(e<<n-32),0)}function Ht(e,t,n){return e|=0,32==(0|(t=0|C(t|=0)))&&(t=t+(0|C(e))|0),M(0),0|t}function Qt(e,t){return t=+t,(e=+e)!=e?+t:t!=t?+e:+v(+e,+t)}function jt(e,t){return t=+t,(e=+e)!=e?+t:t!=t?+e:+B(+e,+t)}function zt(e){return(e=+e)>=0?+a(e+.5):+b(e-.5)}function Jt(e,t,n){e|=0,t|=0;var i,s,o=0;if((0|(n|=0))>=8192)return S(0|e,0|t,0|n),0|e;if(s=0|e,i=e+n|0,(3&e)==(3&t)){for(;3&e;){if(!n)return 0|s;A[e|0]=0|A[t|0],e=e+1|0,t=t+1|0,n=n-1|0}for(o=(n=-4&i)-64|0;(0|e)<=(0|o);)r[e>>2]=r[t>>2],r[e+4>>2]=r[t+4>>2],r[e+8>>2]=r[t+8>>2],r[e+12>>2]=r[t+12>>2],r[e+16>>2]=r[t+16>>2],r[e+20>>2]=r[t+20>>2],r[e+24>>2]=r[t+24>>2],r[e+28>>2]=r[t+28>>2],r[e+32>>2]=r[t+32>>2],r[e+36>>2]=r[t+36>>2],r[e+40>>2]=r[t+40>>2],r[e+44>>2]=r[t+44>>2],r[e+48>>2]=r[t+48>>2],r[e+52>>2]=r[t+52>>2],r[e+56>>2]=r[t+56>>2],r[e+60>>2]=r[t+60>>2],e=e+64|0,t=t+64|0;for(;(0|e)<(0|n);)r[e>>2]=r[t>>2],e=e+4|0,t=t+4|0}else for(n=i-4|0;(0|e)<(0|n);)A[e|0]=0|A[t|0],A[e+1|0]=0|A[t+1|0],A[e+2|0]=0|A[t+2|0],A[e+3|0]=0|A[t+3|0],e=e+4|0,t=t+4|0;for(;(0|e)<(0|i);)A[e|0]=0|A[t|0],e=e+1|0,t=t+1|0;return 0|s}function Kt(e,t,n){var r=0;if((0|(t|=0))<(0|(e|=0))&(0|e)<(t+(n|=0)|0)){for(r=e,t=t+n|0,e=e+n|0;(0|n)>0;)t=t-1|0,n=n-1|0,A[(e=e-1|0)|0]=0|A[t|0];e=r}else Jt(e,t,n);return 0|e}function qt(e,t,n){t|=0;var i,s=0,o=0,a=0;if(i=(e|=0)+(n|=0)|0,t&=255,(0|n)>=67){for(;3&e;)A[e|0]=t,e=e+1|0;for(a=t|t<<8|t<<16|t<<24,o=(s=-4&i)-64|0;(0|e)<=(0|o);)r[e>>2]=a,r[e+4>>2]=a,r[e+8>>2]=a,r[e+12>>2]=a,r[e+16>>2]=a,r[e+20>>2]=a,r[e+24>>2]=a,r[e+28>>2]=a,r[e+32>>2]=a,r[e+36>>2]=a,r[e+40>>2]=a,r[e+44>>2]=a,r[e+48>>2]=a,r[e+52>>2]=a,r[e+56>>2]=a,r[e+60>>2]=a,e=e+64|0;for(;(0|e)<(0|s);)r[e>>2]=a,e=e+4|0}for(;(0|e)<(0|i);)A[e|0]=t,e=e+1|0;return i-n|0}function Yt(e){return(e=+e)>=0?+a(e+.5):+b(e-.5)}function Wt(e){e|=0;var t,n,A;return A=0|x(),(0|e)>0&(0|(t=(n=0|r[o>>2])+e|0))<(0|n)|(0|t)<0?(R(0|t),E(12),-1):(0|t)>(0|A)&&!(0|I(0|t))?(E(12),-1):(r[o>>2]=t,0|n)}var Xt=[function(e,t){return _(0),0},function(e,t){t|=0;var n=0,A=0;return e=0|r[(A=e|=0)>>2],A=0|r[A+4>>2],t=0|r[(n=t)>>2],0|(A>>>0<(n=0|r[n+4>>2])>>>0|(0|A)==(0|n)&e>>>0<t>>>0?-1:1&(A>>>0>n>>>0|(0|A)==(0|n)&e>>>0>t>>>0))},function(e,t){t|=0;var n,A,s,o,a=0,l=0;return o=0|r[(l=e|=0)>>2],l=0|r[l+4>>2],s=0|r[(a=t)>>2],l>>>0<(a=0|r[a+4>>2])>>>0|(0|l)==(0|a)&o>>>0<s>>>0?0|(t=-1):l>>>0>a>>>0|(0|l)==(0|a)&o>>>0>s>>>0?0|(t=1):(A=+i[e+8>>3])<(n=+i[t+8>>3])?0|(t=-1):0|(t=A>n&1)},function(e,t){var n,A;return t|=0,0|((A=+i[(e|=0)>>3])>(n=+i[t>>3])?-1:A<n&1)}];return{___divdi3:Ft,___muldi3:Nt,___remdi3:Ot,___uremdi3:Ut,_areNeighborCells:function(e,t,n,A,i){i|=0;var s,o,a,l=0,c=0,u=0,f=0;if(a=L,L=L+64|0,o=a,s=a+56|0,!(!0&134217728==(2013265920&(t|=0))&!0&134217728==(2013265920&(A|=0))))return L=a,0|(i=5);if((0|(e|=0))==(0|(n|=0))&(0|t)==(0|A))return r[i>>2]=0,L=a,0|(i=0);if(c=0|Gt(0|e,0|t,52),w(),c&=15,f=0|Gt(0|n,0|A,52),w(),(0|c)!=(15&f))return L=a,0|(i=12);if(l=c+-1|0,c>>>0>1){_e(e,t,l,o),_e(n,A,l,s),u=0|r[(f=o)>>2],f=0|r[f+4>>2];e:do{if((0|u)==(0|r[s>>2])&&(0|f)==(0|r[s+4>>2])){l=0|Gt(0|e,0|t,0|(c=3*(15^c)|0)),w(),l&=7,c=0|Gt(0|n,0|A,0|c),w(),c&=7;do{if(!(0|l)|!(0|c))r[i>>2]=1,l=0;else if(7==(0|l))l=5;else{if(1==(0|l)|1==(0|c)&&0|we(u,f)){l=5;break}if((0|r[15824+(l<<2)>>2])!=(0|c)&&(0|r[15856+(l<<2)>>2])!=(0|c))break e;r[i>>2]=1,l=0}}while(0);return L=a,0|(i=l)}}while(0)}c=(l=o)+56|0;do{r[l>>2]=0,l=l+4|0}while((0|l)<(0|c));return D(e,t,1,o),l=(0|r[(t=o)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)||(0|r[(t=o+8|0)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)||(0|r[(t=o+16|0)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)||(0|r[(t=o+24|0)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)||(0|r[(t=o+32|0)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)||(0|r[(t=o+40|0)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)?1:1&((0|r[(l=o+48|0)>>2])==(0|n)?(0|r[l+4>>2])==(0|A):0),r[i>>2]=l,L=a,0|(i=0)},_bitshift64Ashr:kt,_bitshift64Lshr:Gt,_bitshift64Shl:Vt,_calloc:xt,_cellAreaKm2:function(e,t,n){n|=0;var A,s,o,a=0;return o=L,L=L+192|0,A=o+176|0,a=o+168|0,(e=0|ke(e|=0,t|=0,s=o))?(L=o,0|(a=e)):(r[a>>2]=r[s>>2],r[a+4>>2]=s+8,r[A>>2]=r[a>>2],r[A+4>>2]=r[a+4>>2],H(A,n),i[n>>3]=40589732.49931477*+i[n>>3],L=o,0|(a=0))},_cellAreaM2:function(e,t,n){n|=0;var A,s,o,a=0;return o=L,L=L+192|0,A=o+176|0,a=o+168|0,(e=0|ke(e|=0,t|=0,s=o))?(L=o,0|(a=e)):(r[a>>2]=r[s>>2],r[a+4>>2]=s+8,r[A>>2]=r[a>>2],r[A+4>>2]=r[a+4>>2],H(A,n),i[n>>3]=40589732.49931477*+i[n>>3]*1e6,L=o,0|(a=0))},_cellAreaRads2:function(e,t,n){n|=0;var A,i,s,o=0;return s=L,L=L+192|0,A=s+176|0,o=s+168|0,0|(e=0|ke(e|=0,t|=0,i=s))?(L=s,0|(o=e)):(r[o>>2]=r[i>>2],r[o+4>>2]=i+8,r[A>>2]=r[o>>2],r[A+4>>2]=r[o+4>>2],H(A,n),L=s,0|(o=0))},_cellToBoundary:ke,_cellToCenterChild:Ee,_cellToChildPos:function(e,t,n,A){n|=0,A|=0;var i,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0;if(i=L,L=L+16|0,b=i,y=0|Gt(0|(e|=0),0|(t|=0),52),w(),y&=15,n>>>0>15)return L=i,0|(y=4);if((0|y)<(0|n))return L=i,0|(y=12);if((0|y)!=(0|n))if(o=0|Vt(0|n,0,52),o|=e,l=w()|-15728641&t,(0|y)>(0|n)){c=n;do{g=0|Vt(7,0,3*(14-c|0)|0),c=c+1|0,o|=g,l=0|w()|l}while((0|c)<(0|y));g=o}else g=o;else g=e,l=t;m=0|Gt(0|g,0|l,45),w();e:do{if(0|Q(127&m)){if(c=0|Gt(0|g,0|l,52),w(),0|(c&=15))for(o=1;;){if(!(!((m=0|Vt(7,0,3*(15-o|0)|0))&g|0)&!((0|w())&l))){u=33;break e}if(!(o>>>0<c>>>0))break;o=o+1|0}if(r[(m=A)>>2]=0,r[m+4>>2]=0,(0|y)>(0|n)){for(m=-15728641&t,p=y;;){if(d=p,(p=p+-1|0)>>>0>15|(0|y)<(0|p)){u=19;break}if((0|y)!=(0|p))if(o=0|Vt(0|p,0,52),o|=e,c=0|w()|m,(0|y)<(0|d))h=o;else{u=p;do{h=0|Vt(7,0,3*(14-u|0)|0),u=u+1|0,o|=h,c=0|w()|c}while((0|u)<(0|y));h=o}else h=e,c=t;if(f=0|Gt(0|h,0|c,45),w(),0|Q(127&f)){f=0|Gt(0|h,0|c,52),w(),f&=15;t:do{if(f)for(u=1;;){if(o=0|Gt(0|h,0|c,3*(15-u|0)|0),w(),0|(o&=7))break t;if(!(u>>>0<f>>>0)){o=0;break}u=u+1|0}else o=0}while(0);o=1&!(0|o)}else o=0;if(c=0|Gt(0|e,0|t,3*(15-d|0)|0),w(),7==(0|(c&=7))){s=5,u=42;break}if(1==(0|c)&(o=!!(0|o))){s=5,u=42;break}if(0|(h=c+((!!(0|c)&o)<<31>>31)|0)&&(u=0|$e(7,0,u=y-d|0,((0|u)<0)<<31>>31),f=0|w(),o?(o=0|Rt(0|(o=0|Nt(0|u,0|f,5,0)),0|w(),-5,-1),o=0|Rt(0|(o=0|Ft(0|o,0|w(),6,0)),0|w(),1,0),c=0|w()):(o=u,c=f),d=0|Rt(0|o,0|c,0|(d=0|Nt(0|u,0|f,0|(d=h+-1|0),((0|d)<0)<<31>>31)),0|w()),f=0|Rt(0|d,0|(h=0|w()),0|r[(f=A)>>2],0|r[f+4>>2]),h=0|w(),r[(d=A)>>2]=f,r[d+4>>2]=h),(0|p)<=(0|n)){u=37;break}}if(19==(0|u))T(27634,27225,1407,27259);else{if(37==(0|u)){s=0|r[(a=A)+4>>2],a=0|r[a>>2];break}if(42==(0|u))return L=i,0|s}}else s=0,a=0}else u=33}while(0);e:do{if(33==(0|u)){if(r[(m=A)>>2]=0,r[m+4>>2]=0,(0|y)>(0|n)){for(o=y;;){if(s=0|Gt(0|e,0|t,3*(15-o|0)|0),w(),7==(0|(s&=7))){s=5;break}if(s=0|Nt(0|(a=0|$e(7,0,a=y-o|0,((0|a)<0)<<31>>31)),0|w(),0|s,0),a=0|w(),a=0|Rt(0|r[(m=A)>>2],0|r[m+4>>2],0|s,0|a),s=0|w(),r[(m=A)>>2]=a,r[m+4>>2]=s,(0|(o=o+-1|0))<=(0|n))break e}return L=i,0|s}s=0,a=0}}while(0);return 0|Me(g,l,y,b)&&T(27634,27225,1367,27274),((0|s)>-1|-1==(0|s)&a>>>0>4294967295)&((0|(b=0|r[(y=b)+4>>2]))>(0|s)|((0|b)==(0|s)?(0|r[y>>2])>>>0>a>>>0:0))?(L=i,0|(y=0)):(T(27634,27225,1447,27259),0)},_cellToChildren:function(e,t,n,A){A|=0;var i,s,o=0,a=0;if(s=L,L=L+16|0,Ve(i=s,e|=0,t|=0,n|=0),!(0|(e=0|r[(t=i)>>2]))&!(0|(t=0|r[t+4>>2])))return L=s,0;o=0,n=0;do{r[(a=A+(o<<3)|0)>>2]=e,r[a+4>>2]=t,o=0|Rt(0|o,0|n,1,0),n=0|w(),Qe(i),e=0|r[(a=i)>>2],t=0|r[a+4>>2]}while(!(!(0|e)&!(0|t)));return L=s,0},_cellToChildrenSize:Me,_cellToLatLng:Ue,_cellToLocalIj:function(e,t,n,A,i,s){s|=0;var o,a=0;return o=L,L=L+16|0,a=o,0|(i|=0)?(L=o,0|(a=15)):((e=0|Ye(e|=0,t|=0,n|=0,A|=0,a))||(i=0|r[a+4>>2],e=0|r[a+8>>2],r[s>>2]=(0|r[a>>2])-e,r[s+4>>2]=i-e,e=0),L=o,0|(a=e))},_cellToParent:_e,_cellToVertex:pt,_cellToVertexes:function(e,t,n){n|=0;var A,i=0,s=0;return s=!(0|we(e|=0,t|=0)),A=!(0|(i=0|pt(e,t,0,n))),s?A?0|(i=0|pt(e,t,1,n+8|0))||0|(i=0|pt(e,t,2,n+16|0))||0|(i=0|pt(e,t,3,n+24|0))||(i=0|pt(e,t,4,n+32|0))?0|(s=i):0|pt(e,t,5,n+40|0):0|(s=i):A?0|(i=0|pt(e,t,1,n+8|0))||0|(i=0|pt(e,t,2,n+16|0))||0|(i=0|pt(e,t,3,n+24|0))||0|(i=0|pt(e,t,4,n+32|0))?0|(s=i):(r[(s=n+40|0)>>2]=0,r[s+4>>2]=0,0|(s=0)):0|(s=i)},_cellsToDirectedEdge:function(e,t,n,A,i){return i|=0,7==(0|(n=0|G(e|=0,t|=0,n|=0,A|=0)))?0|(i=11):(A=0|Vt(0|n,0,56),t=-2130706433&t|w()|268435456,r[i>>2]=e|A,r[i+4>>2]=t,0|(i=0))},_cellsToLinkedMultiPolygon:function(e,t,n){n|=0;var A,i,s=0,o=0,a=0,l=0,c=0;if(i=L,L=L+16|0,0|(e=0|re(e|=0,t|=0,((0|t)<0)<<31>>31,a=i)))return L=i,0|(a=e);if(A=0|function(e,t){e|=0,t|=0;var n=0,A=0,i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0;if(r[t>>2]=0,g=t+4|0,r[g>>2]=0,b=t+8|0,r[b>>2]=0,m=0|r[e>>2],(0|m)<=0)return 0|(t=0);p=e+4|0,e=t,d=0;e:for(;;){if(d){if(!(n=0|xt(1,12))){n=5;break}r[e+8>>2]=n,e=n}if(l=0|r[p>>2],!(c=0|xt(1,12))){e=13,n=37;break}if(A=0|r[(h=e+4|0)>>2],r[(0|A?A+8:e)>>2]=c,r[h>>2]=c,(0|(A=0|r[l+(d<<4)>>2]))<3){e=1,n=37;break}i=l+(d<<4)+4|0,s=c+4|0,n=0,o=0;do{if(a=o,!(o=0|Tt(24))){e=13,n=37;break e}Kt(0|o,(0|r[i>>2])+(n<<4)|0,16),r[o+16>>2]=0,a?r[a+16>>2]=o:r[c>>2]=o,r[s>>2]=o,n=n+1|0}while((0|n)<(0|A));if((0|(f=0|r[l+(d<<4)+8>>2]))>0){u=l+(d<<4)+12|0,l=0;do{if(A=0|r[u>>2],n=c,!(c=0|xt(1,12))){e=13,n=37;break e}if(r[n+8>>2]=c,r[h>>2]=c,(0|(a=0|r[A+(l<<3)>>2]))<3){e=1,n=37;break e}A=A+(l<<3)+4|0,i=c+4|0,n=0,s=0;do{if(o=s,!(s=0|Tt(24))){e=13,n=37;break e}Kt(0|s,(0|r[A>>2])+(n<<4)|0,16),r[s+16>>2]=0,o?r[o+16>>2]=s:r[c>>2]=s,r[i>>2]=s,n=n+1|0}while((0|n)<(0|a));l=l+1|0}while((0|l)<(0|f))}if((0|(d=d+1|0))>=(0|m)){e=0,n=50;break}}if(5==(0|n)){if(!t)return 0|(t=13);for(A=1,i=t;;){if(0|(e=0|r[i>>2]))do{if(0|(n=0|r[e>>2]))do{m=n,n=0|r[n+16>>2],Et(m)}while(0|n);m=e,e=0|r[e+8>>2],Et(m)}while(0|e);if(e=i,i=0|r[i+8>>2],A?(r[t>>2]=0,r[g>>2]=0,r[b>>2]=0):Et(e),!i){e=13;break}A=0}return 0|e}if(37==(0|n)){if(!t)return 0|(t=e);for(i=1,s=t;;){if(0|(n=0|r[s>>2]))do{if(0|(A=0|r[n>>2]))do{m=A,A=0|r[A+16>>2],Et(m)}while(0|A);m=n,n=0|r[n+8>>2],Et(m)}while(0|n);if(n=s,s=0|r[s+8>>2],i?(r[t>>2]=0,r[g>>2]=0,r[b>>2]=0):Et(n),!s)break;i=0}return 0|e}if(50==(0|n))return 0|e;return 0}(a,n),n=a+4|0,(0|r[a>>2])>0){t=0;do{if(o=0|r[n>>2],Et(0|r[(s=o+(t<<4)+4|0)>>2]),r[s>>2]=0,r[o+(t<<4)>>2]=0,s=o+(t<<4)+8|0,o=o+(t<<4)+12|0,(0|r[s>>2])>0){e=0;do{l=0|r[o>>2],Et(0|r[(c=l+(e<<3)+4|0)>>2]),r[c>>2]=0,r[l+(e<<3)>>2]=0,e=e+1|0}while((0|e)<(0|r[s>>2]))}Et(0|r[o>>2]),r[o>>2]=0,r[s>>2]=0,t=t+1|0}while((0|t)<(0|r[a>>2]))}return Et(0|r[n>>2]),r[n>>2]=0,r[a>>2]=0,L=i,0|(c=A)},_childPosToCell:function(e,t,n,A,i,s){e|=0,t|=0,s|=0;var o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0;if(o=L,L=L+16|0,a=o,(i|=0)>>>0>15)return L=o,0|(s=4);if(l=0|Gt(0|(n|=0),0|(A|=0),52),w(),(0|(l&=15))>(0|i))return L=o,0|(s=12);if(0|Me(n,A,i,a)&&T(27634,27225,1367,27274),!(((0|t)>-1|-1==(0|t)&e>>>0>4294967295)&((0|(u=0|r[(f=a)+4>>2]))>(0|t)|((0|u)==(0|t)?(0|r[f>>2])>>>0>e>>>0:0))))return L=o,0|(s=2);f=i-l|0,i=0|Vt(0|i,0,52),c=w()|-15728641&A,r[(u=s)>>2]=i|n,r[u+4>>2]=c,u=0|Gt(0|n,0|A,45),w();e:do{if(0|Q(127&u)){if(0|l)for(a=1;;){if(!(!((u=0|Vt(7,0,3*(15-a|0)|0))&n|0)&!((0|w())&A)))break e;if(!(a>>>0<l>>>0))break;a=a+1|0}if((0|f)<1)return L=o,0|(s=0);for(u=15^l,A=-1,c=1,a=1;;){l=0|$e(7,0,l=f-c|0,((0|l)<0)<<31>>31),n=0|w();do{if(a){if(a=0|Ft(0|(a=0|Rt(0|(a=0|Nt(0|l,0|n,5,0)),0|w(),-5,-1)),0|w(),6,0),(0|t)>(0|(i=0|w()))|(0|t)==(0|i)&e>>>0>a>>>0){t=0|Lt(0|(t=0|Rt(0|e,0|t,-1,-1)),0|w(),0|a,0|i),a=0|w(),p=0|r[(h=s)>>2],h=0|r[h+4>>2],d=0|Vt(7,0,0|(m=3*(u+A|0)|0)),h&=~w(),m=0|Vt(0|(i=0|Rt(0|(A=0|Ft(0|t,0|a,0|l,0|n)),0|(e=0|w()),2,0)),0|w(),0|m),h=0|w()|h,r[(i=s)>>2]=m|p&~d,r[i+4>>2]=h,e=0|Lt(0|t,0|a,0|(e=0|Nt(0|A,0|e,0|l,0|n)),0|w()),a=0,t=0|w();break}d=0|r[(m=s)>>2],m=0|r[m+4>>2],p=0|Vt(7,0,3*(u+A|0)|0),m&=~w(),r[(a=s)>>2]=d&~p,r[a+4>>2]=m,a=1;break}i=0|r[(d=s)>>2],d=0|r[d+4>>2],h=0|Vt(7,0,0|(A=3*(u+A|0)|0)),d&=~w(),A=0|Vt(0|(m=0|Ft(0|e,0|t,0|l,0|n)),0|(a=0|w()),0|A),d=0|w()|d,r[(p=s)>>2]=A|i&~h,r[p+4>>2]=d,e=0|Lt(0|e,0|t,0|(a=0|Nt(0|m,0|a,0|l,0|n)),0|w()),a=0,t=0|w()}while(0);if(!((0|f)>(0|c))){t=0;break}A=~c,c=c+1|0}return L=o,0|t}}while(0);if((0|f)<1)return L=o,0|(m=0);for(i=15^l,a=1;;){if(p=0|$e(7,0,p=f-a|0,((0|p)<0)<<31>>31),m=0|w(),n=0|r[(c=s)>>2],c=0|r[c+4>>2],A=0|Vt(7,0,0|(l=3*(i-a|0)|0)),c&=~w(),l=0|Vt(0|(h=0|Ft(0|e,0|t,0|p,0|m)),0|(d=0|w()),0|l),c=0|w()|c,r[(u=s)>>2]=l|n&~A,r[u+4>>2]=c,e=0|Lt(0|e,0|t,0|(m=0|Nt(0|h,0|d,0|p,0|m)),0|w()),t=0|w(),(0|f)<=(0|a)){t=0;break}a=a+1|0}return L=o,0|t},_compactCells:function(e,t,n,A){t|=0;var i,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,E=0,x=0,S=0,I=0,R=0,L=0;if(!(0|(n|=0))&!(0|(A|=0)))return 0|(L=0);if(o=0|r[(s=e|=0)>>2],!0&!(15728640&(s=0|r[s+4>>2]))){if(!((0|A)>0|!(0|A)&n>>>0>0))return 0|(L=0);if(r[(L=t)>>2]=o,r[L+4>>2]=s,1==(0|n)&!(0|A))return 0|(L=0);s=1,o=0;do{R=0|r[(I=e+(s<<3)|0)+4>>2],r[(L=t+(s<<3)|0)>>2]=r[I>>2],r[L+4>>2]=R,s=0|Rt(0|s,0|o,1,0),o=0|w()}while((0|o)<(0|A)|(0|o)==(0|A)&s>>>0<n>>>0);return 0|(s=0)}if(!(R=0|Tt(i=n<<3)))return 0|(L=13);if(Jt(0|R,0|e,0|i),!(I=0|xt(n,8)))return Et(R),0|(L=13);e:for(;;){x=0|Gt(0|(u=0|r[(s=R)>>2]),0|(s=0|r[s+4>>2]),52),w(),S=(x&=15)+-1|0,E=!!(0|x),M=(0|A)>0|!(0|A)&n>>>0>0;t:do{if(E&M){if(B=0|Vt(0|S,0,52),v=0|w(),S>>>0>15){if(!(!(0|u)&!(0|s))){L=16;break e}for(o=0,e=0;;){if(o=0|Rt(0|o,0|e,1,0),!((0|(e=0|w()))<(0|A)|(0|e)==(0|A)&o>>>0<n>>>0))break t;if(!(!(0|(_=0|r[(a=R+(o<<3)|0)>>2]))&!(0|(a=0|r[a+4>>2])))){s=a,L=16;break e}}}for(l=u,e=s,o=0,a=0;;){if(!(!(0|l)&!(0|e))){if(!(!0&!(117440512&e))){L=21;break e}if(f=0|Gt(0|l,0|e,52),w(),(0|(f&=15))<(0|S)){s=12,L=27;break e}if((0|f)!=(0|S)&&(l|=B,e=-15728641&e|v,f>>>0>=x>>>0)){c=S;do{_=0|Vt(7,0,3*(14-c|0)|0),c=c+1|0,l|=_,e=0|w()|e}while(c>>>0<f>>>0)}if(d=0|Ut(0|l,0|e,0|n,0|A),p=0|w(),!(!(0|(h=0|r[(f=c=I+(d<<3)|0)>>2]))&!(0|(f=0|r[f+4>>2])))){b=0,y=0;do{if((0|b)>(0|A)|(0|b)==(0|A)&y>>>0>n>>>0){L=31;break e}if((0|h)==(0|l)&(-117440513&f)==(0|e)){m=0|Gt(0|h,0|f,56),w(),g=(m&=7)+1|0,_=0|Gt(0|h,0|f,45),w();n:do{if(0|Q(127&_)){if(h=0|Gt(0|h,0|f,52),w(),!(h&=15)){f=6;break}for(f=1;;){if(!(!((_=0|Vt(7,0,3*(15-f|0)|0))&l|0)&!((0|w())&e))){f=7;break n}if(!(f>>>0<h>>>0)){f=6;break}f=f+1|0}}else f=7}while(0);if((m+2|0)>>>0>f>>>0){L=41;break e}_=0|Vt(0|g,0,56),e=w()|-117440513&e,r[(C=c)>>2]=0,r[C+4>>2]=0,l|=_}else d=0|Ot(0|(d=0|Rt(0|d,0|p,1,0)),0|w(),0|n,0|A),p=0|w();y=0|Rt(0|y,0|b,1,0),b=0|w(),h=0|r[(f=c=I+(d<<3)|0)>>2],f=0|r[f+4>>2]}while(!(!(0|h)&!(0|f)))}r[(_=c)>>2]=l,r[_+4>>2]=e}if(o=0|Rt(0|o,0|a,1,0),!((0|(a=0|w()))<(0|A)|(0|a)==(0|A)&o>>>0<n>>>0))break t;l=0|r[(e=R+(o<<3)|0)>>2],e=0|r[e+4>>2]}}}while(0);if(_=0|Rt(0|n,0|A,5,0),(C=0|w())>>>0<0|!(0|C)&_>>>0<11){L=85;break}if(_=0|Ft(0|n,0|A,6,0),w(),!(_=0|xt(_,8))){L=48;break}do{if(M){for(g=0,e=0,m=0,b=0;;){if(!(0|(o=0|r[(a=f=I+(g<<3)|0)>>2]))&!(0|(a=0|r[a+4>>2])))C=m;else{h=0|Gt(0|o,0|a,56),w(),l=(h&=7)+1|0,d=-117440513&a,C=0|Gt(0|o,0|a,45),w();t:do{if(0|Q(127&C)){if(p=0|Gt(0|o,0|a,52),w(),0|(p&=15))for(c=1;;){if(!(!(o&(C=0|Vt(7,0,3*(15-c|0)|0))|0)&!(d&(0|w()))))break t;if(!(c>>>0<p>>>0))break;c=c+1|0}o|=a=0|Vt(0|l,0,56),a=0|w()|d,r[(l=f)>>2]=o,r[l+4>>2]=a,l=h+2|0}}while(0);7==(0|l)?(r[(C=_+(e<<3)|0)>>2]=o,r[C+4>>2]=-117440513&a,e=0|Rt(0|e,0|m,1,0),C=0|w()):C=m}if(g=0|Rt(0|g,0|b,1,0),!((0|(b=0|w()))<(0|A)|(0|b)==(0|A)&g>>>0<n>>>0))break;m=C}if(M){if(y=S>>>0>15,B=0|Vt(0|S,0,52),v=0|w(),!E){for(o=0,c=0,l=0,a=0;!(0|u)&!(0|s)||(r[(S=t+(o<<3)|0)>>2]=u,r[S+4>>2]=s,o=0|Rt(0|o,0|c,1,0),c=0|w()),l=0|Rt(0|l,0|a,1,0),(0|(a=0|w()))<(0|A)|(0|a)==(0|A)&l>>>0<n>>>0;)u=0|r[(s=R+(l<<3)|0)>>2],s=0|r[s+4>>2];s=C;break}for(o=0,c=0,a=0,l=0;;){do{if(!(!(0|u)&!(0|s))){if(p=0|Gt(0|u,0|s,52),w(),y|(0|(p&=15))<(0|S)){L=80;break e}if((0|p)!=(0|S)){if(f=u|B,h=-15728641&s|v,p>>>0>=x>>>0){d=S;do{E=0|Vt(7,0,3*(14-d|0)|0),d=d+1|0,f|=E,h=0|w()|h}while(d>>>0<p>>>0)}}else f=u,h=s;m=0|Ut(0|f,0|h,0|n,0|A),d=0,p=0,b=0|w();do{if((0|d)>(0|A)|(0|d)==(0|A)&p>>>0>n>>>0){L=81;break e}if((-117440513&(g=0|r[(E=I+(m<<3)|0)+4>>2]))==(0|h)&&(0|r[E>>2])==(0|f)){L=65;break}m=0|Ot(0|(E=0|Rt(0|m,0|b,1,0)),0|w(),0|n,0|A),b=0|w(),p=0|Rt(0|p,0|d,1,0),d=0|w(),E=I+(m<<3)|0}while((0|r[E>>2])!=(0|f)||(0|r[E+4>>2])!=(0|h));if(65==(0|L)&&(L=0,!0&100663296==(117440512&g)))break;r[(E=t+(o<<3)|0)>>2]=u,r[E+4>>2]=s,o=0|Rt(0|o,0|c,1,0),c=0|w()}}while(0);if(a=0|Rt(0|a,0|l,1,0),!((0|(l=0|w()))<(0|A)|(0|l)==(0|A)&a>>>0<n>>>0))break;u=0|r[(s=R+(a<<3)|0)>>2],s=0|r[s+4>>2]}s=C}else o=0,s=C}else o=0,e=0,s=0}while(0);if(qt(0|I,0,0|i),Jt(0|R,0|_,e<<3),Et(_),!(0|e)&!(0|s)){L=89;break}t=t+(o<<3)|0,A=s,n=e}if(16==(0|L))!0&!(117440512&s)?(s=4,L=27):L=21;else if(31==(0|L))T(27634,27225,620,27235);else{if(41==(0|L))return Et(R),Et(I),0|(L=10);if(48==(0|L))return Et(R),Et(I),0|(L=13);80==(0|L)?T(27634,27225,711,27235):81==(0|L)?T(27634,27225,723,27235):85==(0|L)&&(Jt(0|t,0|R,n<<3),L=89)}return 21==(0|L)?(Et(R),Et(I),0|(L=5)):27==(0|L)?(Et(R),Et(I),0|(L=s)):89==(0|L)?(Et(R),Et(I),0|(L=0)):0},_constructCell:function(e,t,n,i){n|=0,i|=0;var s=0,o=0,a=0,l=0,c=0,u=0;if((e|=0)>>>0>15)return 0|(i=4);if((t|=0)>>>0>121)return 0|(i=17);a=0|Vt(0|e,0,52),s=0|w(),l=0|Vt(0|t,0,45),s=0|s|w()|134225919;e:do{if((0|e)>=1){for(l=1,a=!!(0|A[20496+t|0]),o=-1;;){if((t=0|r[n+(l+-1<<2)>>2])>>>0>6){s=18,t=10;break}if(!(!(0|t)|1^a)){if(1==(0|t)){s=19,t=10;break}a=0}if(c=0|Vt(7,0,0|(u=3*(15-l|0)|0)),s&=~w(),o=(t=0|Vt(0|t,((0|t)<0)<<31>>31,0|u))|o&~c,s=0|w()|s,!((0|l)<(0|e)))break e;l=l+1|0}if(10==(0|t))return 0|s}else o=-1}while(0);return r[(u=i)>>2]=o,r[u+4>>2]=s,0|(u=0)},_destroyLinkedMultiPolygon:function(e){var t,n,A=0,i=0,s=0,o=0,a=0;if(e|=0)for(t=e+4|0,n=e+8|0,s=1,o=e;;){if(0|(A=0|r[o>>2]))do{if(0|(i=0|r[A>>2]))do{a=i,i=0|r[i+16>>2],Et(a)}while(0|i);a=A,A=0|r[A+8>>2],Et(a)}while(0|A);if(A=o,o=0|r[o+8>>2],s?(r[e>>2]=0,r[t>>2]=0,r[n>>2]=0):Et(A),!o)break;s=0}},_directedEdgeToBoundary:ae,_directedEdgeToCells:function(e,t,n){e|=0;var A,i,s,o=0;return A=L,L=L+16|0,o=A,!0&268435456==(2013265920&(t|=0))?(i=-2130706433&t|134217728,r[(s=n|=0)>>2]=e,r[s+4>>2]=i,r[o>>2]=0,t=0|Gt(0|e,0|t,56),w(),o=0|O(e,i,7&t,o,n+8|0),L=A,0|o):(L=A,0|(o=6))},_edgeLengthKm:function(e,t,n){n|=0;var A,s=0,o=0,a=0,l=0,h=0,d=0,p=0;if(A=L,L=L+176|0,0|(e=0|ae(e|=0,t|=0,l=A)))return l=e,a=+i[n>>3],a*=6371.007180918475,i[n>>3]=a,L=A,0|l;if(i[n>>3]=0,(0|(e=0|r[l>>2]))<=1)return l=0,a=0,a*=6371.007180918475,i[n>>3]=a,L=A,0|l;t=e+-1|0,e=0,s=+i[l+8>>3],o=+i[l+16>>3],a=0;do{d=s,s=+i[l+8+((e=e+1|0)<<4)>>3],p=+f(.5*(s-d)),h=o,o=+i[l+8+(e<<4)+8>>3],h=p*p+(h=+f(.5*(o-h)))*(+u(+d)*+u(+s)*h),a+=2*+g(+ +c(+h),+ +c(+(1-h)))}while((0|e)!=(0|t));return i[n>>3]=a,l=0,p=a,p*=6371.007180918475,i[n>>3]=p,L=A,0|l},_edgeLengthM:function(e,t,n){n|=0;var A,s=0,o=0,a=0,l=0,h=0,d=0,p=0;if(A=L,L=L+176|0,0|(e=0|ae(e|=0,t|=0,l=A)))return l=e,a=+i[n>>3],a*=6371.007180918475,a*=1e3,i[n>>3]=a,L=A,0|l;if(i[n>>3]=0,(0|(e=0|r[l>>2]))<=1)return l=0,a=0,a*=6371.007180918475,a*=1e3,i[n>>3]=a,L=A,0|l;t=e+-1|0,e=0,s=+i[l+8>>3],o=+i[l+16>>3],a=0;do{d=s,s=+i[l+8+((e=e+1|0)<<4)>>3],p=+f(.5*(s-d)),h=o,o=+i[l+8+(e<<4)+8>>3],h=p*p+(h=+f(.5*(o-h)))*(+u(+d)*+u(+s)*h),a+=2*+g(+ +c(+h),+ +c(+(1-h)))}while((0|e)!=(0|t));return i[n>>3]=a,l=0,p=a,p*=6371.007180918475,p*=1e3,i[n>>3]=p,L=A,0|l},_edgeLengthRads:function(e,t,n){n|=0;var A,s=0,o=0,a=0,l=0,h=0,d=0,p=0;if(A=L,L=L+176|0,0|(e=0|ae(e|=0,t|=0,l=A)))return L=A,0|(l=e);if(i[n>>3]=0,(0|(e=0|r[l>>2]))<=1)return L=A,0|(l=0);t=e+-1|0,e=0,s=+i[l+8>>3],o=+i[l+16>>3],a=0;do{d=s,s=+i[l+8+((e=e+1|0)<<4)>>3],p=+f(.5*(s-d)),h=o,o=+i[l+8+(e<<4)+8>>3],h=p*p+(h=+f(.5*(o-h)))*(+u(+s)*+u(+d)*h),a+=2*+g(+ +c(+h),+ +c(+(1-h)))}while((0|e)<(0|t));return i[n>>3]=a,L=A,0|(l=0)},_emscripten_replace_memory:function(e){return A=new Int8Array(e),r=new Int32Array(e),i=new Float64Array(e),n=e,!0},_free:Et,_getBaseCellNumber:Be,_getDirectedEdgeDestination:function(e,t,n){e|=0,t|=0,n|=0;var A,i,s=0;return A=L,L=L+16|0,r[(s=A)>>2]=0,!0&268435456==(2013265920&t)?(i=0|Gt(0|e,0|t,56),w(),s=0|O(e,-2130706433&t|134217728,7&i,s,n),L=A,0|s):(L=A,0|(s=6))},_getDirectedEdgeOrigin:function(e,t,n){return e|=0,n|=0,!0&268435456==(2013265920&(t|=0))?(r[n>>2]=e,r[n+4>>2]=-2130706433&t|134217728,0|(n=0)):0|(n=6)},_getHexagonAreaAvgKm2:Ke,_getHexagonAreaAvgM2:function(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(i[t>>3]=+i[20752+(e<<3)>>3],0|(t=0))},_getHexagonEdgeLengthAvgKm:function(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(i[t>>3]=+i[20880+(e<<3)>>3],0|(t=0))},_getHexagonEdgeLengthAvgM:function(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(i[t>>3]=+i[21008+(e<<3)>>3],0|(t=0))},_getIcosahedronFaces:function e(t,n,A){A|=0;var i,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0;i=L,L=L+128|0,f=i+112|0,a=i+96|0,h=i,o=0|Gt(0|(t|=0),0|(n|=0),52),w(),c=15&o,r[f>>2]=c,l=0|Gt(0|t,0|n,45),w(),l&=127;e:do{if(0|Q(l)){if(0|c)for(s=1;;){if(!(!((u=0|Vt(7,0,3*(15-s|0)|0))&t|0)&!((0|w())&n))){o=0;break e}if(!(s>>>0<c>>>0))break;s=s+1|0}if(!(1&o))return u=0|Vt(c+1|0,0,52),h=w()|-15728641&n,h=0|e((u|t)&~(f=0|Vt(7,0,3*(14-c|0)|0)),h&~w(),A),L=i,0|h;o=1}else o=0}while(0);if(!(s=0|Oe(t,n,a))){o?(de(a,f,h),u=5):(be(a,f,h),u=6);e:do{if(0|Q(l))if(c)for(s=1;;){if(!(!((l=0|Vt(7,0,3*(15-s|0)|0))&t|0)&!((0|w())&n))){t=2;break e}if(!(s>>>0<c>>>0)){t=5;break}s=s+1|0}else t=5;else t=2}while(0);qt(0|A,-1,t<<2);e:do{if(o)for(a=0;;){if(me(l=h+(a<<4)|0,0|r[f>>2]),l=0|r[l>>2],-1==(0|(c=0|r[A>>2]))|(0|c)==(0|l))s=A;else{o=0;do{if((o=o+1|0)>>>0>=t>>>0){s=1;break e}c=0|r[(s=A+(o<<2)|0)>>2]}while(!(-1==(0|c)|(0|c)==(0|l)))}if(r[s>>2]=l,(a=a+1|0)>>>0>=u>>>0){s=0;break}}else for(a=0;;){if(pe(l=h+(a<<4)|0,0|r[f>>2],0,1),l=0|r[l>>2],-1==(0|(c=0|r[A>>2]))|(0|c)==(0|l))s=A;else{o=0;do{if((o=o+1|0)>>>0>=t>>>0){s=1;break e}c=0|r[(s=A+(o<<2)|0)>>2]}while(!(-1==(0|c)|(0|c)==(0|l)))}if(r[s>>2]=l,(a=a+1|0)>>>0>=u>>>0){s=0;break}}}while(0)}return L=i,0|(h=s)},_getIndexDigit:function(e,t,n,A){return A|=0,((n|=0)+-1|0)>>>0>14?0|(A=4):(n=0|Gt(0|(e|=0),0|(t|=0),3*(15-n|0)|0),w(),r[A>>2]=7&n,0|(A=0))},_getNumCells:qe,_getPentagons:Ge,_getRes0Cells:function(e){e|=0;var t=0,n=0,A=0;t=0;do{Vt(0|t,0,45),A=134225919|w(),r[(n=e+(t<<3)|0)>>2]=-1,r[n+4>>2]=A,t=t+1|0}while(122!=(0|t));return 0},_getResolution:ye,_greatCircleDistanceKm:Je,_greatCircleDistanceM:function(e,t){e|=0;var n,A,r,s=0;return A=+i[(t|=0)>>3],n=+i[e>>3],s=(r=+f(.5*(A-n)))*r+(s=+f(.5*(+i[t+8>>3]-+i[e+8>>3])))*(+u(+A)*+u(+n)*s),2*+g(+ +c(+s),+ +c(+(1-s)))*6371.007180918475*1e3},_greatCircleDistanceRads:function(e,t){e|=0;var n,A,r,s=0;return A=+i[(t|=0)>>3],n=+i[e>>3],s=(r=+f(.5*(A-n)))*r+(s=+f(.5*(+i[t+8>>3]-+i[e+8>>3])))*(+u(+A)*+u(+n)*s),2*+g(+ +c(+s),+ +c(+(1-s)))},_gridDisk:D,_gridDiskDistances:P,_gridDistance:Xe,_gridPathCells:function(e,t,n,A,i){i|=0;var s,o,a=0,l=0;return o=L,L=L+16|0,0|(l=0|Xe(e|=0,t|=0,n|=0,A|=0,a=o))?(L=o,0|(i=l)):!(0|(a=0|r[(l=a)>>2]))&!(0|(l=0|r[l+4>>2]))?(r[i>>2]=e,r[i+4>>2]=t,L=o,0|(i=0)):(s=0|Ze(e,t,n,A,a,l,i,0,0,1,0))?(i=!(0|Ze(n,A,e,t,a,l,i,a,l,-1,-1)),L=o,0|(i=i?0:s)):(L=o,0|(i=0))},_gridPathCellsSize:function(e,t,n,A,i){i|=0;var s,o=0;return s=L,L=L+16|0,0|(e=0|Xe(e|=0,t|=0,n|=0,A|=0,o=s))?(L=s,0|(o=e)):(n=0|Rt(0|r[(n=o)>>2],0|r[n+4>>2],1,0),A=0|w(),r[(o=i)>>2]=n,r[o+4>>2]=A,L=s,0|(o=0))},_gridRing:function(e,t,n,A){return 0|U(e|=0,t|=0,n|=0,A|=0)?(qt(0|A,0,48*n|0),0|(A=0|k(e,t,n,A))):0|(A=0)},_gridRingUnsafe:U,_i64Add:Rt,_i64Subtract:Lt,_isPentagon:we,_isResClassIII:function(e,t){return t=0|Gt(0|(e|=0),0|(t|=0),52),w(),1&t},_isValidCell:ve,_isValidDirectedEdge:se,_isValidIndex:function(e,t){e|=0;var n=0,r=0,i=0,s=0;if(!0&134217728==(-16777216&(t|=0))&&(r=0|Gt(0|e,0|t,52),w(),r&=15,n=0|Gt(0|e,0|t,45),w(),(n&=127)>>>0<=121)&&!(613566756&(s=0|Vt(0|(i=0|Gt(0|e,0|t,0|(s=3*(15^r)|0))),0|w(),0|s))&(0|Lt(-1227133514,-1171,0|s,0|(i=0|w()))))&!(4681&i&w())&&15==(0|r)|!(0|(s=0|Gt(0|(0|Vt(0|~e,0|~t,0|(s=19+(3*r|0)|0))),0|w(),0|s)))&!(0|w())){if(!(0|A[20496+n|0]))return 0|(s=1);if(!(0|e)&!(0|(n=8191&t)))return 0|(s=1);if(s=0|Ht(0|e,0|n),w(),(63-s|0)%3|0)return 0|(s=1)}return 0|se(e,t)?0|(s=1):0|(s=1&!!(0|mt(e,t)))},_isValidVertex:mt,_latLngToCell:Fe,_llvm_ctlz_i64:Ht,_llvm_maxnum_f64:Qt,_llvm_minnum_f64:jt,_llvm_round_f64:zt,_localIjToCell:function(e,t,n,A,i){e|=0,t|=0,i|=0;var s,o,a,l=0,c=0,u=0,f=0;return a=L,L=L+16|0,f=a,0|(A|=0)?(L=a,0|(f=15)):(u=0|r[(n|=0)>>2],c=0|r[n+4>>2],r[f>>2]=u,r[(s=f+4|0)>>2]=c,r[(o=f+8|0)>>2]=0,A=(n=(0|c)<(0|u))?u:c,(0|(n=n?c:u))<0&&(-2147483648==(0|n)||((0|A)>0?(2147483647-A|0)<(0|n):(-2147483648-A|0)>(0|n))||((0|A)>-1?(-2147483648|A)>=(0|n):(-2147483648^A)<(0|n)))?A=1:l=5,5==(0|l)&&(A=c-u|0,l=0-u|0,(0|u)<0?(r[s>>2]=A,r[o>>2]=l,r[f>>2]=0,u=0):(A=c,l=0),c=u-A|0,n=l-A|0,(0|A)<0?(r[f>>2]=c,r[o>>2]=n,r[s>>2]=0,u=c,A=0):n=l,c=u-n|0,l=A-n|0,(0|n)<0?(r[f>>2]=c,r[s>>2]=l,r[o>>2]=0,n=0):(l=A,c=u),(0|(A=(0|n)<(0|(A=(0|l)<(0|c)?l:c))?n:A))>0&&(r[f>>2]=c-A,r[s>>2]=l-A,r[o>>2]=n-A),A=0|We(e,t,f,i)),L=a,0|(f=A))},_malloc:Tt,_maxFaceCount:function(e,t,n){n|=0;var A=0,i=0;if(i=0|Gt(0|(e|=0),0|(t|=0),45),w(),!(0|Q(127&i)))return i=2,r[n>>2]=i,0;if(i=0|Gt(0|e,0|t,52),w(),!(i&=15))return i=5,r[n>>2]=i,0;for(A=1;;){if(!(!((0|Vt(7,0,3*(15-A|0)|0))&e|0)&!((0|w())&t))){A=2,e=6;break}if(!(A>>>0<i>>>0)){A=5,e=6;break}A=A+1|0}return 6==(0|e)?(r[n>>2]=A,0):0},_maxGridDiskSize:function(e,t){t|=0;var n=0,A=0,i=0;return(0|(e|=0))<0?0|(t=2):(0|e)>13780509?0|(t=0|qe(15,t)):(i=0|Nt(0|e,0|(n=((0|e)<0)<<31>>31),3,0),A=0|w(),n=0|Rt(0|e,0|n,1,0),n=0|Rt(0|(n=0|Nt(0|i,0|A,0|n,0|w())),0|w(),1,0),e=0|w(),r[t>>2]=n,r[t+4>>2]=e,0|(t=0))},_maxPolygonToCellsSize:function(e,t,n,A){e|=0,t|=0,A|=0;var i,s=0,o=0,a=0,l=0,c=0;if(i=L,L=L+48|0,s=i+16|0,o=i+8|0,a=i,0|(n=0|st(n|=0)))return L=i,0|(a=n);if(l=0|r[(c=e)+4>>2],r[(n=o)>>2]=r[c>>2],r[n+4>>2]=l,it(o,s),!(n=0|ne(s,t,a))){if(t=0|r[o>>2],(0|(o=0|r[e+8>>2]))>0){s=0|r[e+12>>2],n=0;do{t=(0|r[s+(n<<3)>>2])+t|0,n=n+1|0}while((0|n)<(0|o))}s=0|r[(n=a)>>2],(0|(n=0|r[n+4>>2]))<(0|(o=((0|t)<0)<<31>>31))|(0|n)==(0|o)&s>>>0<t>>>0?(r[(n=a)>>2]=t,r[n+4>>2]=o,n=o):t=s,l=0|Rt(0|t,0|n,12,0),c=0|w(),r[(n=a)>>2]=l,r[n+4>>2]=c,r[(n=A)>>2]=l,r[n+4>>2]=c,n=0}return L=i,0|(c=n)},_maxPolygonToCellsSizeExperimental:function(e,t,n,s){t|=0,n|=0,s|=0;var o,a,c=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0;if(a=L,L=L+48|0,p=a+32|0,d=a+40|0,o=a,!(0|r[(e|=0)>>2]))return r[(m=s)>>2]=0,r[m+4>>2]=0,L=a,0|(m=0);Ce(p,0,0,0),c=0|r[(h=p)>>2],h=0|r[h+4>>2];do{if(t>>>0>15)r[(m=o)>>2]=0,r[m+4>>2]=0,r[o+8>>2]=4,r[o+12>>2]=-1,n=o+29|0,r[(m=o+16|0)>>2]=0,r[m+4>>2]=0,r[m+8>>2]=0,A[m+12|0]=0,A[n|0]=0|A[d|0],A[n+1|0]=0|A[d+1|0],A[n+2|0]=0|A[d+2|0],n=4,m=9;else{if(0|(n=0|st(n))){r[(p=o)>>2]=0,r[p+4>>2]=0,r[o+8>>2]=n,r[o+12>>2]=-1,m=o+29|0,r[(p=o+16|0)>>2]=0,r[p+4>>2]=0,r[p+8>>2]=0,A[p+12|0]=0,A[m|0]=0|A[d|0],A[m+1|0]=0|A[d+1|0],A[m+2|0]=0|A[d+2|0],m=9;break}if(!(n=0|xt(1+(0|r[e+8>>2])|0,32))){r[(m=o)>>2]=0,r[m+4>>2]=0,r[o+8>>2]=13,r[o+12>>2]=-1,n=o+29|0,r[(m=o+16|0)>>2]=0,r[m+4>>2]=0,r[m+8>>2]=0,A[m+12|0]=0,A[n|0]=0|A[d|0],A[n+1|0]=0|A[d+1|0],A[n+2|0]=0|A[d+2|0],n=13,m=9;break}ot(e,n),r[(b=o)>>2]=c,r[b+4>>2]=h,r[(h=o+8|0)>>2]=0,r[o+12>>2]=t,r[o+20>>2]=e,r[o+24>>2]=n,A[o+28|0]=0,A[(c=o+29|0)|0]=0|A[d|0],A[c+1|0]=0|A[d+1|0],A[c+2|0]=0|A[d+2|0],r[o+16>>2]=3,g=+X(n),g*=+W(n),f=+l(+ +i[n>>3]),f=g/+u(+ +jt(+f,+ +l(+ +i[n+8>>3])))*6371.007180918475*6371.007180918475,n=0|r[(c=o+12|0)>>2];e:do{if((0|n)>0)do{if(Ke(n+-1|0,p),!(f/+i[p>>3]>10))break e;n=(b=0|r[c>>2])+-1|0,r[c>>2]=n}while((0|b)>1)}while(0);if(nt(o),r[(c=s)>>2]=0,r[c+4>>2]=0,!(!(0|(n=0|r[(c=o)>>2]))&!(0|(c=0|r[c+4>>2]))))do{Me(n,c,t,p),d=p,d=0|Rt(0|r[(e=s)>>2],0|r[e+4>>2],0|r[d>>2],0|r[d+4>>2]),e=0|w(),r[(b=s)>>2]=d,r[b+4>>2]=e,nt(o),n=0|r[(b=o)>>2],c=0|r[b+4>>2]}while(!(!(0|n)&!(0|c)));n=0|r[h>>2]}}while(0);return L=a,0|(b=n)},_memcpy:Jt,_memmove:Kt,_memset:qt,_originToDirectedEdges:oe,_pentagonCount:function(){return 12},_polygonToCells:function(e,t,n,A){e|=0,t|=0,A|=0;var i,s,o,a,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,T=0,E=0,x=0,S=0,I=0,R=0,D=0,P=0,O=0,U=0,k=0;if(a=L,L=L+112|0,i=a+80|0,h=a+72|0,s=a,o=a+56|0,0|(l=0|st(n|=0)))return L=a,0|(k=l);if(!(k=0|Tt(32+(r[(d=e+8|0)>>2]<<5)|0)))return L=a,0|(k=13);if(ot(e,k),!(l=0|st(n))){if(U=0|r[(O=e)+4>>2],r[(l=h)>>2]=r[O>>2],r[l+4>>2]=U,it(h,i),l=0|ne(i,t,s))O=0,U=0;else{if(l=0|r[h>>2],(0|(c=0|r[d>>2]))>0){u=0|r[e+12>>2],n=0;do{l=(0|r[u+(n<<3)>>2])+l|0,n=n+1|0}while((0|n)!=(0|c));n=l}else n=l;c=0|r[(l=s)>>2],(0|(l=0|r[l+4>>2]))<(0|(u=((0|n)<0)<<31>>31))|(0|l)==(0|u)&c>>>0<n>>>0?(r[(l=s)>>2]=n,r[l+4>>2]=u,l=u):n=c,O=0|Rt(0|n,0|l,12,0),U=0|w(),r[(l=s)>>2]=O,r[l+4>>2]=U,l=0}if(!l){if(!(n=0|xt(O,8)))return Et(k),L=a,0|(k=13);if(!(f=0|xt(O,8)))return Et(k),Et(n),L=a,0|(k=13);r[(D=i)>>2]=0,r[D+4>>2]=0,P=0|r[(D=e)+4>>2],r[(l=h)>>2]=r[D>>2],r[l+4>>2]=P,l=0|V(h,O,U,t,i,n,f);e:do{if(l)Et(n),Et(f),Et(k);else{t:do{if((0|r[d>>2])>0){for(u=e+12|0,c=0;l=0|V((0|r[u>>2])+(c<<3)|0,O,U,t,i,n,f),c=c+1|0,!(0|l);)if((0|c)>=(0|r[d>>2]))break t;Et(n),Et(f),Et(k);break e}}while(0);(0|U)>0|!(0|U)&O>>>0>0&&qt(0|f,0,O<<3),D=0|r[(P=i)+4>>2];t:do{if((0|D)>0|!(0|D)&(0|r[P>>2])>>>0>0){S=n,I=f,R=n,D=f,P=n,l=n,T=n,E=f,x=f,n=f;n:for(;;){for(v=0,C=0,_=0,M=0,c=0,u=0;;){h=(f=s)+56|0;do{r[f>>2]=0,f=f+4|0}while((0|f)<(0|h));if(0|F(d=0|r[(t=S+(v<<3)|0)>>2],t=0|r[t+4>>2],1,s,0)){h=(f=s)+56|0;do{r[f>>2]=0,f=f+4|0}while((0|f)<(0|h));0|(f=0|xt(7,4))&&(N(d,t,1,s,f,7,0,0),Et(f))}for(B=0;;){b=0|r[(y=s+(B<<3)|0)>>2],y=0|r[y+4>>2];A:do{if(!(0|b)&!(0|y))f=c,h=u;else{if(p=0|Ut(0|b,0|y,0|O,0|U),d=0|w(),!(!(0|(h=0|r[(t=f=A+(p<<3)|0)>>2]))&!(0|(t=0|r[t+4>>2])))){m=0,g=0;do{if((0|m)>(0|U)|(0|m)==(0|U)&g>>>0>O>>>0)break n;if((0|h)==(0|b)&(0|t)==(0|y)){f=c,h=u;break A}p=0|Ot(0|(f=0|Rt(0|p,0|d,1,0)),0|w(),0|O,0|U),d=0|w(),g=0|Rt(0|g,0|m,1,0),m=0|w(),h=0|r[(t=f=A+(p<<3)|0)>>2],t=0|r[t+4>>2]}while(!(!(0|h)&!(0|t)))}if(!(0|b)&!(0|y)){f=c,h=u;break}Ue(b,y,o),0|at(e,k,o)&&(g=0|Rt(0|c,0|u,1,0),u=0|w(),r[(m=f)>>2]=b,r[m+4>>2]=y,r[(c=I+(c<<3)|0)>>2]=b,r[c+4>>2]=y,c=g),f=c,h=u}}while(0);if((B=B+1|0)>>>0>=7)break;c=f,u=h}if(v=0|Rt(0|v,0|C,1,0),C=0|w(),_=0|Rt(0|_,0|M,1,0),M=0|w(),c=0|r[(u=i)>>2],!((0|M)<(0|(u=0|r[u+4>>2]))|(0|M)==(0|u)&_>>>0<c>>>0))break;c=f,u=h}if((0|u)>0|!(0|u)&c>>>0>0){c=0,u=0;do{r[(M=S+(c<<3)|0)>>2]=0,r[M+4>>2]=0,c=0|Rt(0|c,0|u,1,0),u=0|w(),_=0|r[(M=i)+4>>2]}while((0|u)<(0|_)|((0|u)==(0|_)?c>>>0<(0|r[M>>2])>>>0:0))}if(r[(M=i)>>2]=f,r[M+4>>2]=h,!((0|h)>0|!(0|h)&f>>>0>0))break t;B=n,v=x,C=P,_=E,M=I,n=T,x=l,E=R,T=B,l=v,P=D,D=C,R=_,I=S,S=M}Et(R),Et(D),Et(k),l=1;break e}l=f}while(0);Et(k),Et(n),Et(l),l=0}}while(0);return L=a,0|(k=l)}}return Et(k),L=a,0|(k=l)},_polygonToCellsExperimental:function(e,t,n,A,i,s){A|=0,i|=0,s|=0;var o,a,l,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0;l=L,L=L+160|0,u=l+64|0,d=l+112|0,g=l,tt(h=l+80|0,e|=0,t|=0,n|=0),Ve(u,0|r[(f=h)>>2],0|r[f+4>>2],t),o=0|r[(f=u)>>2],f=0|r[f+4>>2],c=0|r[h+8>>2],r[(p=d+4|0)>>2]=r[h>>2],r[p+4>>2]=r[h+4>>2],r[p+8>>2]=r[h+8>>2],r[p+12>>2]=r[h+12>>2],r[p+16>>2]=r[h+16>>2],r[p+20>>2]=r[h+20>>2],r[p+24>>2]=r[h+24>>2],r[p+28>>2]=r[h+28>>2],r[(p=g)>>2]=o,r[p+4>>2]=f,r[(p=g+8|0)>>2]=c,t=d,n=(e=g+12|0)+36|0;do{r[e>>2]=r[t>>2],e=e+4|0,t=t+4|0}while((0|e)<(0|n));if(r[(d=g+48|0)>>2]=r[u>>2],r[d+4>>2]=r[u+4>>2],r[d+8>>2]=r[u+8>>2],r[d+12>>2]=r[u+12>>2],!(0|o)&!(0|f))return L=l,0|(g=c);n=g+16|0,a=g+24|0,h=g+28|0,c=0,u=0,t=o,e=f;do{if(!((0|c)<(0|i)|(0|c)==(0|i)&u>>>0<A>>>0)){m=4;break}if(f=u,u=0|Rt(0|u,0|c,1,0),c=0|w(),r[(f=s+(f<<3)|0)>>2]=t,r[f+4>>2]=e,Qe(d),!(0|(t=0|r[(e=d)>>2]))&!(0|(e=0|r[e+4>>2]))){if(nt(n),!(0|(e=0|r[(t=n)>>2]))&!(0|(t=0|r[t+4>>2]))){m=10;break}He(e,t,0|r[h>>2],d),t=0|r[(e=d)>>2],e=0|r[e+4>>2]}r[(f=g)>>2]=t,r[f+4>>2]=e}while(!(!(0|t)&!(0|e)));return 4==(0|m)?(0|(t=0|r[(e=g+40|0)>>2])&&Et(t),r[(m=g+16|0)>>2]=0,r[m+4>>2]=0,r[a>>2]=0,r[g+36>>2]=0,r[h>>2]=-1,r[g+32>>2]=0,r[e>>2]=0,He(0,0,0,d),r[g>>2]=0,r[g+4>>2]=0,r[p>>2]=0,L=l,0|(g=14)):(10==(0|m)&&(r[g>>2]=0,r[g+4>>2]=0,r[p>>2]=r[a>>2]),g=0|r[p>>2],L=l,0|g)},_readInt64AsDoubleFromPointer:function(e){return+(+((0|r[(e|=0)>>2])>>>0)+4294967296*+(0|r[e+4>>2]))},_res0CellCount:function(){return 122},_reverseDirectedEdge:le,_round:Yt,_sbrk:Wt,_sizeOfCellBoundary:function(){return 168},_sizeOfCoordIJ:function(){return 8},_sizeOfGeoLoop:function(){return 8},_sizeOfGeoPolygon:function(){return 16},_sizeOfH3Index:function(){return 8},_sizeOfLatLng:function(){return 16},_sizeOfLinkedGeoPolygon:function(){return 12},_uncompactCells:function(e,t,n,A,i,s,o){e|=0,A|=0,i|=0,s|=0;var a,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0;if(a=L,L=L+16|0,m=a,!((0|(n|=0))>0|!(0|n)&(t|=0)>>>0>0))return L=a,0|(m=0);if((0|(o|=0))>=16)return L=a,0|(m=12);d=0,p=0,h=0,l=0;e:for(;;){if(f=0|Gt(0|(c=0|r[(u=e+(d<<3)|0)>>2]),0|(u=0|r[u+4>>2]),52),w(),(15&f)>(0|o)){l=12,c=11;break}if(Ve(m,c,u,o),!(0|(u=0|r[(f=m)>>2]))&!(0|(f=0|r[f+4>>2])))c=h;else{c=h;do{if(!((0|l)<(0|s)|(0|l)==(0|s)&c>>>0<i>>>0)){c=10;break e}r[(h=A+(c<<3)|0)>>2]=u,r[h+4>>2]=f,c=0|Rt(0|c,0|l,1,0),l=0|w(),Qe(m),u=0|r[(h=m)>>2],f=0|r[h+4>>2]}while(!(!(0|u)&!(0|f)))}if(d=0|Rt(0|d,0|p,1,0),!((0|(p=0|w()))<(0|n)|(0|p)==(0|n)&d>>>0<t>>>0)){l=0,c=11;break}h=c}return 10==(0|c)?(L=a,0|(m=14)):11==(0|c)?(L=a,0|l):0},_uncompactCellsSize:function(e,t,n,A,i){e|=0,t|=0,n|=0,A|=0,i|=0;var s,o,a=0,l=0,c=0,u=0,f=0,h=0;o=L,L=L+16|0,s=o;e:do{if((0|n)>0|!(0|n)&t>>>0>0){for(f=0,l=0,a=0,h=0;;){if(!(!(0|(c=0|r[(u=e+(f<<3)|0)>>2]))&!(0|(u=0|r[u+4>>2]))||(u=!(0|Me(c,u,A,s)),l=0|Rt(0|r[(c=s)>>2],0|r[c+4>>2],0|l,0|a),a=0|w(),u))){a=12;break}if(f=0|Rt(0|f,0|h,1,0),!((0|(h=0|w()))<(0|n)|(0|h)==(0|n)&f>>>0<t>>>0))break e}return L=o,0|a}l=0,a=0}while(0);return r[i>>2]=l,r[i+4>>2]=a,L=o,0|(i=0)},_vertexToLatLng:function(e,t,n){n|=0;var A,i,s,o,a=0,l=0;return o=L,L=L+192|0,i=o,s=o+168|0,a=0|Gt(0|(e|=0),0|(t|=0),56),w(),a&=7,0|(A=0|Oe(e,l=-2130706433&t|134217728,s))?(L=o,0|(l=A)):(t=0|Gt(0|e,0|t,52),w(),t&=15,0|we(e,l)?he(s,t,a,1,i):ge(s,t,a,1,i),l=i+8|0,r[n>>2]=r[l>>2],r[n+4>>2]=r[l+4>>2],r[n+8>>2]=r[l+8>>2],r[n+12>>2]=r[l+12>>2],L=o,0|(l=0))},dynCall_iii:function(e,t,n){return t|=0,n|=0,0|Xt[3&(e|=0)](0|t,0|n)},establishStackSpace:function(e,t){L=e|=0},stackAlloc:function(e){var t;return t=L,L=(L=L+(e|=0)|0)+15&-16,0|t},stackRestore:function(e){L=e|=0},stackSave:function(){return 0|L}}}({Math:Math,Int8Array:Int8Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Float32Array:Float32Array,Float64Array:Float64Array},{a:Ae,b:function(e){a=e},c:function(){return a},d:function(e,t,n,A){Ae("Assertion failed: "+B(e)+", at: "+[t?B(t):"unknown filename",n,A?B(A):"unknown function"])},e:function(e){return n.___errno_location&&(m[n.___errno_location()>>2]=e),e},f:H,g:function(e,t,n){d.set(d.subarray(t,t+n),e)},h:function(e){var t=H(),n=16777216,A=2130706432;if(e>A)return!1;for(var r=Math.max(t,16777216);r<e;)r=r<=536870912?v(2*r,n):Math.min(v((3*r+2147483648)/4,n),A);return!!function(e){try{var t=new ArrayBuffer(e);if(t.byteLength!=e)return;return new Int8Array(t).set(h),J(t),C(t),1}catch(VA){}}(r)},i:function(e){Ae("OOM")},o:28400,p:28384},f);n.___divdi3=z.___divdi3,n.___muldi3=z.___muldi3,n.___remdi3=z.___remdi3,n.___uremdi3=z.___uremdi3,n._areNeighborCells=z._areNeighborCells,n._bitshift64Ashr=z._bitshift64Ashr,n._bitshift64Lshr=z._bitshift64Lshr,n._bitshift64Shl=z._bitshift64Shl,n._calloc=z._calloc,n._cellAreaKm2=z._cellAreaKm2,n._cellAreaM2=z._cellAreaM2,n._cellAreaRads2=z._cellAreaRads2,n._cellToBoundary=z._cellToBoundary,n._cellToCenterChild=z._cellToCenterChild,n._cellToChildPos=z._cellToChildPos,n._cellToChildren=z._cellToChildren,n._cellToChildrenSize=z._cellToChildrenSize,n._cellToLatLng=z._cellToLatLng,n._cellToLocalIj=z._cellToLocalIj,n._cellToParent=z._cellToParent,n._cellToVertex=z._cellToVertex,n._cellToVertexes=z._cellToVertexes,n._cellsToDirectedEdge=z._cellsToDirectedEdge,n._cellsToLinkedMultiPolygon=z._cellsToLinkedMultiPolygon,n._childPosToCell=z._childPosToCell,n._compactCells=z._compactCells,n._constructCell=z._constructCell,n._destroyLinkedMultiPolygon=z._destroyLinkedMultiPolygon,n._directedEdgeToBoundary=z._directedEdgeToBoundary,n._directedEdgeToCells=z._directedEdgeToCells,n._edgeLengthKm=z._edgeLengthKm,n._edgeLengthM=z._edgeLengthM,n._edgeLengthRads=z._edgeLengthRads;var J=n._emscripten_replace_memory=z._emscripten_replace_memory;n._free=z._free,n._getBaseCellNumber=z._getBaseCellNumber,n._getDirectedEdgeDestination=z._getDirectedEdgeDestination,n._getDirectedEdgeOrigin=z._getDirectedEdgeOrigin,n._getHexagonAreaAvgKm2=z._getHexagonAreaAvgKm2,n._getHexagonAreaAvgM2=z._getHexagonAreaAvgM2,n._getHexagonEdgeLengthAvgKm=z._getHexagonEdgeLengthAvgKm,n._getHexagonEdgeLengthAvgM=z._getHexagonEdgeLengthAvgM,n._getIcosahedronFaces=z._getIcosahedronFaces,n._getIndexDigit=z._getIndexDigit,n._getNumCells=z._getNumCells,n._getPentagons=z._getPentagons,n._getRes0Cells=z._getRes0Cells,n._getResolution=z._getResolution,n._greatCircleDistanceKm=z._greatCircleDistanceKm,n._greatCircleDistanceM=z._greatCircleDistanceM,n._greatCircleDistanceRads=z._greatCircleDistanceRads,n._gridDisk=z._gridDisk,n._gridDiskDistances=z._gridDiskDistances,n._gridDistance=z._gridDistance,n._gridPathCells=z._gridPathCells,n._gridPathCellsSize=z._gridPathCellsSize,n._gridRing=z._gridRing,n._gridRingUnsafe=z._gridRingUnsafe,n._i64Add=z._i64Add,n._i64Subtract=z._i64Subtract,n._isPentagon=z._isPentagon,n._isResClassIII=z._isResClassIII,n._isValidCell=z._isValidCell,n._isValidDirectedEdge=z._isValidDirectedEdge,n._isValidIndex=z._isValidIndex,n._isValidVertex=z._isValidVertex,n._latLngToCell=z._latLngToCell,n._llvm_ctlz_i64=z._llvm_ctlz_i64,n._llvm_maxnum_f64=z._llvm_maxnum_f64,n._llvm_minnum_f64=z._llvm_minnum_f64,n._llvm_round_f64=z._llvm_round_f64,n._localIjToCell=z._localIjToCell,n._malloc=z._malloc,n._maxFaceCount=z._maxFaceCount,n._maxGridDiskSize=z._maxGridDiskSize,n._maxPolygonToCellsSize=z._maxPolygonToCellsSize,n._maxPolygonToCellsSizeExperimental=z._maxPolygonToCellsSizeExperimental,n._memcpy=z._memcpy,n._memmove=z._memmove,n._memset=z._memset,n._originToDirectedEdges=z._originToDirectedEdges,n._pentagonCount=z._pentagonCount,n._polygonToCells=z._polygonToCells,n._polygonToCellsExperimental=z._polygonToCellsExperimental,n._readInt64AsDoubleFromPointer=z._readInt64AsDoubleFromPointer,n._res0CellCount=z._res0CellCount,n._reverseDirectedEdge=z._reverseDirectedEdge,n._round=z._round,n._sbrk=z._sbrk,n._sizeOfCellBoundary=z._sizeOfCellBoundary,n._sizeOfCoordIJ=z._sizeOfCoordIJ,n._sizeOfGeoLoop=z._sizeOfGeoLoop,n._sizeOfGeoPolygon=z._sizeOfGeoPolygon,n._sizeOfH3Index=z._sizeOfH3Index,n._sizeOfLatLng=z._sizeOfLatLng,n._sizeOfLinkedGeoPolygon=z._sizeOfLinkedGeoPolygon,n._uncompactCells=z._uncompactCells,n._uncompactCellsSize=z._uncompactCellsSize,n._vertexToLatLng=z._vertexToLatLng,n.establishStackSpace=z.establishStackSpace;var K,q,Y=n.stackAlloc=z.stackAlloc,W=n.stackRestore=z.stackRestore,X=n.stackSave=z.stackSave;if(n.dynCall_iii=z.dynCall_iii,n.asm=z,n.cwrap=function(e,t,n,A){var r=(n=n||[]).every(function(e){return"number"===e});return"string"!==t&&r&&!A?c(e):function(){return u(e,t,n,arguments)}},n.setValue=function(e,t,n,A){switch("*"===(n=n||"i8").charAt(n.length-1)&&(n="i32"),n){case"i1":case"i8":h[e|0]=t;break;case"i16":p[e>>1]=t;break;case"i32":m[e>>2]=t;break;case"i64":U=[t>>>0,(O=t,+R(O)>=1?O>0?(0|P(+D(O/4294967296),4294967295))>>>0:~~+L((O-+(~~O>>>0))/4294967296)>>>0:0)],m[e>>2]=U[0],m[e+4>>2]=U[1];break;case"float":g[e>>2]=t;break;case"double":b[e>>3]=t;break;default:Ae("invalid type for setValue: "+n)}},n.getValue=function(e,t,n){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return h[e|0];case"i16":return p[e>>1];case"i32":case"i64":return m[e>>2];case"float":return g[e>>2];case"double":return b[e>>3];default:Ae("invalid type for getValue: "+t)}return null},k){V(k)||(K=k,k=n.locateFile?n.locateFile(K,i):i+K),F++,n.monitorRunDependencies&&n.monitorRunDependencies(F);var Z=function(e){e.byteLength&&(e=new Uint8Array(e)),d.set(e,8),n.memoryInitializerRequest&&delete n.memoryInitializerRequest.response,function(){if(F--,n.monitorRunDependencies&&n.monitorRunDependencies(F),0==F&&N){var e=N;N=null,e()}}()},$=function(){r(k,Z,function(){throw"could not load memory initializer "+k})},ee=j(k);if(ee)Z(ee.buffer);else if(n.memoryInitializerRequest){var te=function(){var e=n.memoryInitializerRequest,t=e.response;if(200!==e.status&&0!==e.status){var A=j(n.memoryInitializerRequestURL);if(!A)return console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+e.status+", retrying "+k),void $();t=A.buffer}Z(t)};n.memoryInitializerRequest.response?setTimeout(te,0):n.memoryInitializerRequest.addEventListener("load",te)}else $()}function ne(e){function t(){q||(q=!0,l||(M(T),M(E),n.onRuntimeInitialized&&n.onRuntimeInitialized(),function(){if(n.postRun)for("function"==typeof n.postRun&&(n.postRun=[n.postRun]);n.postRun.length;)I(n.postRun.shift());M(x)}()))}F>0||(!function(){if(n.preRun)for("function"==typeof n.preRun&&(n.preRun=[n.preRun]);n.preRun.length;)S(n.preRun.shift());M(w)}(),F>0||(n.setStatus?(n.setStatus("Running..."),setTimeout(function(){setTimeout(function(){n.setStatus("")},1),t()},1)):t()))}function Ae(e){throw n.onAbort&&n.onAbort(e),s(e+=""),o(e),l=!0,"abort("+e+"). Build with -s ASSERTIONS=1 for more info."}if(N=function e(){q||ne(),q||(N=e)},n.run=ne,n.abort=Ae,n.preInit)for("function"==typeof n.preInit&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.pop()();return ne(),e}("object"==typeof yi?yi:{}),Bi="number",vi={0:"Success",1:"The operation failed but a more specific error is not available",2:"Argument was outside of acceptable range",3:"Latitude or longitude arguments were outside of acceptable range",4:"Resolution argument was outside of acceptable range",5:"Cell argument was not valid",6:"Directed edge argument was not valid",7:"Undirected edge argument was not valid",8:"Vertex argument was not valid",9:"Pentagon distortion was encountered",10:"Duplicate input",11:"Cell arguments were not neighbors",12:"Cell arguments had incompatible resolutions",13:"Memory allocation failed",14:"Bounds of provided memory were insufficient",15:"Mode or flags argument was not valid",16:"Index argument was not valid",17:"Base cell number was outside of acceptable range",18:"Child indexing digits invalid",19:"Child indexing digits refer to a deleted subsequence"},Ci={1e3:"Unknown unit",1001:"Array length out of bounds",1002:"Got unexpected null value for H3 index"};function _i(e,t,n){var A=n&&"value"in n,r=new Error((e[t]||"Unknown error")+" (code: "+t+(A?", value: "+n.value:"")+")");return r.code=t,r}function Mi(e,t){return _i(vi,e,2===arguments.length?{value:t}:{})}function wi(e,t){return _i(Ci,e,2===arguments.length?{value:t}:{})}function Ti(e){if(0!==e)throw Mi(e)}var Ei={};[["sizeOfH3Index",Bi],["sizeOfLatLng",Bi],["sizeOfCellBoundary",Bi],["sizeOfGeoLoop",Bi],["sizeOfGeoPolygon",Bi],["sizeOfLinkedGeoPolygon",Bi],["sizeOfCoordIJ",Bi],["readInt64AsDoubleFromPointer",Bi],["isValidCell",Bi,[Bi,Bi]],["isValidIndex",Bi,[Bi,Bi]],["latLngToCell",Bi,[Bi,Bi,Bi,Bi]],["cellToLatLng",Bi,[Bi,Bi,Bi]],["cellToBoundary",Bi,[Bi,Bi,Bi]],["maxGridDiskSize",Bi,[Bi,Bi]],["gridDisk",Bi,[Bi,Bi,Bi,Bi]],["gridDiskDistances",Bi,[Bi,Bi,Bi,Bi,Bi]],["gridRing",Bi,[Bi,Bi,Bi,Bi]],["gridRingUnsafe",Bi,[Bi,Bi,Bi,Bi]],["maxPolygonToCellsSize",Bi,[Bi,Bi,Bi,Bi]],["polygonToCells",Bi,[Bi,Bi,Bi,Bi]],["maxPolygonToCellsSizeExperimental",Bi,[Bi,Bi,Bi,Bi]],["polygonToCellsExperimental",Bi,[Bi,Bi,Bi,Bi,Bi,Bi]],["cellsToLinkedMultiPolygon",Bi,[Bi,Bi,Bi]],["destroyLinkedMultiPolygon",null,[Bi]],["compactCells",Bi,[Bi,Bi,Bi,Bi]],["uncompactCells",Bi,[Bi,Bi,Bi,Bi,Bi,Bi]],["uncompactCellsSize",Bi,[Bi,Bi,Bi,Bi,Bi]],["isPentagon",Bi,[Bi,Bi]],["isResClassIII",Bi,[Bi,Bi]],["getBaseCellNumber",Bi,[Bi,Bi]],["getResolution",Bi,[Bi,Bi]],["getIndexDigit",Bi,[Bi,Bi,Bi]],["constructCell",Bi,[Bi,Bi,Bi,Bi]],["maxFaceCount",Bi,[Bi,Bi,Bi]],["getIcosahedronFaces",Bi,[Bi,Bi,Bi]],["cellToParent",Bi,[Bi,Bi,Bi,Bi]],["cellToChildren",Bi,[Bi,Bi,Bi,Bi]],["cellToCenterChild",Bi,[Bi,Bi,Bi,Bi]],["cellToChildrenSize",Bi,[Bi,Bi,Bi,Bi]],["cellToChildPos",Bi,[Bi,Bi,Bi,Bi]],["childPosToCell",Bi,[Bi,Bi,Bi,Bi,Bi,Bi]],["areNeighborCells",Bi,[Bi,Bi,Bi,Bi,Bi]],["cellsToDirectedEdge",Bi,[Bi,Bi,Bi,Bi,Bi]],["getDirectedEdgeOrigin",Bi,[Bi,Bi,Bi]],["getDirectedEdgeDestination",Bi,[Bi,Bi,Bi]],["isValidDirectedEdge",Bi,[Bi,Bi]],["directedEdgeToCells",Bi,[Bi,Bi,Bi]],["originToDirectedEdges",Bi,[Bi,Bi,Bi]],["directedEdgeToBoundary",Bi,[Bi,Bi,Bi]],["reverseDirectedEdge",Bi,[Bi,Bi,Bi]],["gridDistance",Bi,[Bi,Bi,Bi,Bi,Bi]],["gridPathCells",Bi,[Bi,Bi,Bi,Bi,Bi]],["gridPathCellsSize",Bi,[Bi,Bi,Bi,Bi,Bi]],["cellToLocalIj",Bi,[Bi,Bi,Bi,Bi,Bi,Bi]],["localIjToCell",Bi,[Bi,Bi,Bi,Bi,Bi]],["getHexagonAreaAvgM2",Bi,[Bi,Bi]],["getHexagonAreaAvgKm2",Bi,[Bi,Bi]],["getHexagonEdgeLengthAvgM",Bi,[Bi,Bi]],["getHexagonEdgeLengthAvgKm",Bi,[Bi,Bi]],["greatCircleDistanceM",Bi,[Bi,Bi]],["greatCircleDistanceKm",Bi,[Bi,Bi]],["greatCircleDistanceRads",Bi,[Bi,Bi]],["cellAreaM2",Bi,[Bi,Bi,Bi]],["cellAreaKm2",Bi,[Bi,Bi,Bi]],["cellAreaRads2",Bi,[Bi,Bi,Bi]],["edgeLengthM",Bi,[Bi,Bi,Bi]],["edgeLengthKm",Bi,[Bi,Bi,Bi]],["edgeLengthRads",Bi,[Bi,Bi,Bi]],["getNumCells",Bi,[Bi,Bi]],["getRes0Cells",Bi,[Bi]],["res0CellCount",Bi],["getPentagons",Bi,[Bi,Bi]],["pentagonCount",Bi],["cellToVertex",Bi,[Bi,Bi,Bi,Bi]],["cellToVertexes",Bi,[Bi,Bi,Bi]],["vertexToLatLng",Bi,[Bi,Bi,Bi]],["isValidVertex",Bi,[Bi,Bi]]].forEach(function(e){Ei[e[0]]=yi.cwrap.apply(yi,e)});var xi=16,Si=Ei.sizeOfH3Index(),Ii=Ei.sizeOfLatLng(),Ri=Ei.sizeOfCellBoundary();Ei.sizeOfGeoPolygon(),Ei.sizeOfGeoLoop();var Li=Ei.sizeOfLinkedGeoPolygon();Ei.sizeOfCoordIJ();var Di="m",Pi="km";var Fi=/[^0-9a-fA-F]/;function Ni(e){if(Array.isArray(e)&&2===e.length&&Number.isInteger(e[0])&&Number.isInteger(e[1]))return e;if("string"!=typeof e||Fi.test(e))return[0,0];var t=parseInt(e.substring(0,e.length-8),xi);return[parseInt(e.substring(e.length-8),xi),t]}function Oi(e){if(e>=0)return e.toString(xi);var t=Ui(8,(e&=2147483647).toString(xi));return t=(parseInt(t[0],xi)+8).toString(xi)+t.substring(1)}function Ui(e,t){for(var n=e-t.length,A="",r=0;r<n;r++)A+="0";return A+=t}function ki(e,t){void 0===t&&(t=0);var n=yi.getValue(e+Si*t,"i32"),A=yi.getValue(e+Si*t+4,"i32");return A?function(e,t){return Oi(t)+Ui(8,Oi(e))}(n,A):null}function Gi(e,t,n){yi.HEAPU32.set(Ni(e),t/4+2*n)}function Vi(e){return 180*yi.getValue(e,"double")/Math.PI}function Hi(e){return[Vi(e+8),Vi(e)]}function Qi(e){var t=Ni(e),n=t[0],A=t[1];return Boolean(Ei.isPentagon(n,A))}function ji(e){var t=Ni(e),n=t[0],A=t[1];return Ei.isValidCell(n,A)?Ei.getResolution(n,A):-1}function zi(e,t,n){var A=yi._malloc(Ii);yi.HEAPF64.set([e,t].map(Xi),A/8);var r=yi._malloc(Si);try{return Ti(Ei.latLngToCell(A,n,r)),function(e){if(!e)throw wi(1002);return e}(ki(r))}finally{yi._free(r),yi._free(A)}}function Ji(e){var t,n=yi._malloc(Ii),A=Ni(e),r=A[0],i=A[1];try{return Ti(Ei.cellToLatLng(r,i,n)),[Vi(t=n),Vi(t+8)]}finally{yi._free(n)}}function Ki(e,t){var n=yi._malloc(Ri),A=Ni(e),r=A[0],i=A[1];try{return Ti(Ei.cellToBoundary(r,i,n)),function(e){for(var t=yi.getValue(e,"i32"),n=e+8,A=[],r=Hi,i=0;i<2*t;i+=2)A.push(r(n+8*i));return A.push(A[0]),A}(n)}finally{yi._free(n)}}function qi(e,t){if(!e||!e.length)return[];var n=e.length,A=yi._calloc(n,Si);!function(e,t){for(var n=t.length,A=0;A<n;A++)Gi(t[A],e,A)}(A,e);var r=yi._calloc(Li);try{return Ti(Ei.cellsToLinkedMultiPolygon(A,n,r)),function(e){for(var t,n,A,r,i=[],s=Hi;e;){for(i.push(t=[]),n=yi.getValue(e,"i8*");n;){for(t.push(A=[]),r=yi.getValue(n,"i8*");r;)A.push(s(r)),r=yi.getValue(r+16,"i8*");A.push(A[0]),n=yi.getValue(n+8,"i8*")}e=yi.getValue(e+8,"i8*")}return i}(r)}finally{Ei.destroyLinkedMultiPolygon(r),yi._free(r),yi._free(A)}}function Yi(e,t){var n,A=Ni(e),r=A[0],i=A[1],s=Ni(t),o=s[0],a=s[1],l=yi._malloc(8);try{return Ti(Ei.gridDistance(r,i,o,a,l)),n=l,Ei.readInt64AsDoubleFromPointer(n)}finally{yi._free(l)}}function Wi(e,t){!function(e){if("number"!=typeof e||e<0||e>15||Math.floor(e)!==e)throw Mi(4,e)}(e);var n,A,r=yi._malloc(8);try{switch(t){case Di:Ti(Ei.getHexagonEdgeLengthAvgM(e,r));break;case Pi:Ti(Ei.getHexagonEdgeLengthAvgKm(e,r));break;default:throw wi(1e3,t)}return n=r,void 0===A&&(A=0),yi.getValue(n+8*A,"double")}finally{yi._free(r)}}function Xi(e){return e*Math.PI/180}function Zi(e,t){t=void 0===t?e[0][0]:t;for(const n of e){const e=n[0]-t;e>180?n[0]-=360:e<-180&&(n[0]+=360)}}function $i(e,t,n){const A=e(t,n),[r,i]=Ji(A);return[i,r]}function es(e,n=1){const A=Ki(e);return 1!==n?function(e,n,A){const[r,i]=Ji(e),s=n.length;Zi(n,i);const o=n[0]===n[s-1]?s-1:s;for(let a=0;a<o;a++)n[a][0]=t.lerp$1(i,n[a][0],A),n[a][1]=t.lerp$1(r,n[a][1],A)}(e,A,n):Zi(A),A}function ts(e){const t=new Float64Array(2*e.length);let n=0;for(const A of e)t[n++]=A[0],t[n++]=A[1];return t}class ns extends ae{indexToBounds(){const{data:e,getPentagon:t}=this.props;return{data:e,_normalize:!1,_windingOrder:"CCW",positionFormat:"XY",getPolygon:(e,n)=>{const A=t(e,n);return ts(function(e,{closedRing:t=!0,segments:n="auto"}={closedRing:!0,segments:"auto"}){if(0n===e)return[];const{S:A,segment:r,origin:i,resolution:s}=di(e);"auto"===n&&(n=Math.max(1,Math.pow(2,6-s)));const o=cr(mi({S:A,segment:r,origin:i,resolution:s}).splitEdges(n).getVertices().map(e=>pi.inverse(e,i.id)).map(e=>lr(e)));return t&&o.push(o[0]),o.reverse(),o}("string"==typeof A?BigInt(`0x${A}`):A,{closedRing:!0,segments:"auto"}))}}}}function As(e){return"string"==typeof e?e.charAt(0).toLowerCase()+e.slice(1):e}function rs(e){if(Array.isArray(e))return e.map(e=>rs(e));if(e&&"object"==typeof e){const t={};for(const[n,A]of Object.entries(e))t[As(n)]=rs(A);return t}return e}ns.layerName="A5Layer",ns.defaultProps={getPentagon:{type:"accessor",value:e=>e.pentagon}};const is=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",ss=new RegExp("^"+("["+is+"]["+(is+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040")+"]*")+"$");function os(e,t){const n=[];let A=t.exec(e);for(;A;){const r=[];r.startIndex=t.lastIndex-A[0].length;const i=A.length;for(let e=0;e<i;e++)r.push(A[e]);n.push(r),A=t.exec(e)}return n}const as=function(e){const t=ss.exec(e);return!(null==t)};const ls=["hasOwnProperty","toString","valueOf","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"],cs=["__proto__","constructor","prototype"],us={allowBooleanAttributes:!1,unpairedTags:[]};function fs(e){return" "===e||"\t"===e||"\n"===e||"\r"===e}function hs(e,t){const n=t;for(;t<e.length;t++)if("?"==e[t]||" "==e[t]){const A=e.substr(n,t-n);if(t>5&&"xml"===A)return vs("InvalidXml","XML declaration allowed only at the start of the document.",Ms(e,t));if("?"==e[t]&&">"==e[t+1]){t++;break}continue}return t}function ds(e,t){if(e.length>t+5&&"-"===e[t+1]&&"-"===e[t+2]){for(t+=3;t<e.length;t++)if("-"===e[t]&&"-"===e[t+1]&&">"===e[t+2]){t+=2;break}}else if(e.length>t+8&&"D"===e[t+1]&&"O"===e[t+2]&&"C"===e[t+3]&&"T"===e[t+4]&&"Y"===e[t+5]&&"P"===e[t+6]&&"E"===e[t+7]){let n=1;for(t+=8;t<e.length;t++)if("<"===e[t])n++;else if(">"===e[t]&&(n--,0===n))break}else if(e.length>t+9&&"["===e[t+1]&&"C"===e[t+2]&&"D"===e[t+3]&&"A"===e[t+4]&&"T"===e[t+5]&&"A"===e[t+6]&&"["===e[t+7])for(t+=8;t<e.length;t++)if("]"===e[t]&&"]"===e[t+1]&&">"===e[t+2]){t+=2;break}return t}const ps='"',ms="'";function gs(e,t){let n="",A="",r=!1;for(;t<e.length;t++){if(e[t]===ps||e[t]===ms)""===A?A=e[t]:A!==e[t]||(A="");else if(">"===e[t]&&""===A){r=!0;break}n+=e[t]}return""===A&&{value:n,index:t,tagClosed:r}}const bs=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function ys(e,t){const n=os(e,bs),A={};for(let r=0;r<n.length;r++){if(0===n[r][1].length)return vs("InvalidAttr","Attribute '"+n[r][2]+"' has no space in starting.",ws(n[r]));if(void 0!==n[r][3]&&void 0===n[r][4])return vs("InvalidAttr","Attribute '"+n[r][2]+"' is without value.",ws(n[r]));if(void 0===n[r][3]&&!t.allowBooleanAttributes)return vs("InvalidAttr","boolean attribute '"+n[r][2]+"' is not allowed.",ws(n[r]));const e=n[r][2];if(!Cs(e))return vs("InvalidAttr","Attribute '"+e+"' is an invalid name.",ws(n[r]));if(Object.prototype.hasOwnProperty.call(A,e))return vs("InvalidAttr","Attribute '"+e+"' is repeated.",ws(n[r]));A[e]=1}return!0}function Bs(e,t){if(";"===e[++t])return-1;if("#"===e[t])return function(e,t){let n=/\d/;for("x"===e[t]&&(t++,n=/[\da-fA-F]/);t<e.length;t++){if(";"===e[t])return t;if(!e[t].match(n))break}return-1}(e,++t);let n=0;for(;t<e.length;t++,n++)if(!(e[t].match(/\w/)&&n<20)){if(";"===e[t])break;return-1}return t}function vs(e,t,n){return{err:{code:e,msg:t,line:n.line||n,col:n.col}}}function Cs(e){return as(e)}function _s(e){return as(e)}function Ms(e,t){const n=e.substring(0,t).split(/\r?\n/);return{line:n.length,col:n[n.length-1].length+1}}function ws(e){return e.startIndex+e[1].length}const Ts={cent:"¢",pound:"£",curren:"¤",yen:"¥",euro:"€",dollar:"$",fnof:"ƒ",inr:"₹",af:"؋",birr:"ብር",peso:"₱",rub:"₽",won:"₩",yuan:"¥",cedil:"¸"},Es={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'},xs={nbsp:" ",copy:"©",reg:"®",trade:"™",mdash:"—",ndash:"–",hellip:"…",laquo:"«",raquo:"»",lsquo:"‘",rsquo:"’",ldquo:"“",rdquo:"”",bull:"•",para:"¶",sect:"§",deg:"°",frac12:"½",frac14:"¼",frac34:"¾"},Ss=Object.freeze({ALLOW:"allow",BLOCK:"block",THROW:"throw"}),Is=new Set("!?\\\\/[]$%{}^&*()<>|+");function Rs(e){if("#"===e[0])throw new Error(`[EntityReplacer] Invalid character '#' in entity name: "${e}"`);for(const t of e)if(Is.has(t))throw new Error(`[EntityReplacer] Invalid character '${t}' in entity name: "${e}"`);return e}function Ls(...e){const t=Object.create(null);for(const n of e)if(n)for(const e of Object.keys(n)){const A=n[e];if("string"==typeof A)t[e]=A;else if(A&&"object"==typeof A&&void 0!==A.val){const n=A.val;"string"==typeof n&&(t[e]=n)}}return t}const Ds="external",Ps="base",Fs="all";const Ns=Object.freeze({allow:0,leave:1,remove:2,throw:3}),Os=new Set([9,10,13]);class Us{constructor(e={}){var t;this._limit=e.limit||{},this._maxTotalExpansions=this._limit.maxTotalExpansions||0,this._maxExpandedLength=this._limit.maxExpandedLength||0,this._postCheck="function"==typeof e.postCheck?e.postCheck:e=>e,this._limitTiers=(t=this._limit.applyLimitsTo??Ds)&&t!==Ds?t===Fs?new Set([Fs]):t===Ps?new Set([Ps]):Array.isArray(t)?new Set(t):new Set([Ds]):new Set([Ds]),this._numericAllowed=e.numericAllowed??!0,this._baseMap=Ls(Es,e.namedEntities||null),this._externalMap=Object.create(null),this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this._removeSet=new Set(e.remove&&Array.isArray(e.remove)?e.remove:[]),this._leaveSet=new Set(e.leave&&Array.isArray(e.leave)?e.leave:[]);const n=function(e){if(!e)return{xmlVersion:1,onLevel:Ns.allow,nullLevel:Ns.remove};const t=1.1===e.xmlVersion?1.1:1,n=Ns[e.onNCR]??Ns.allow,A=Ns[e.nullNCR]??Ns.remove;return{xmlVersion:t,onLevel:n,nullLevel:Math.max(A,Ns.remove)}}(e.ncr);this._ncrXmlVersion=n.xmlVersion,this._ncrOnLevel=n.onLevel,this._ncrNullLevel=n.nullLevel,this._onExternalEntity="function"==typeof e.onExternalEntity?e.onExternalEntity:null,this._onInputEntity="function"==typeof e.onInputEntity?e.onInputEntity:null}_applyRegistrationHook(e,t,n,A){if(!e)return!0;const r=e(t,n);if(r===Ss.BLOCK)return!1;if(r===Ss.THROW)throw new Error(`[EntityDecoder] Registration of ${A} entity "&${t};" was rejected by hook`);return!0}setExternalEntities(e){if(e)for(const A of Object.keys(e))Rs(A);if(!this._onExternalEntity)return void(this._externalMap=Ls(e));const t=Ls(e),n=Object.create(null);for(const[A,r]of Object.entries(t))this._applyRegistrationHook(this._onExternalEntity,A,r,"external")&&(n[A]=r);this._externalMap=n}addExternalEntity(e,t){Rs(e),"string"==typeof t&&-1===t.indexOf("&")&&this._applyRegistrationHook(this._onExternalEntity,e,t,"external")&&(this._externalMap[e]=t)}addInputEntities(e){if(this._totalExpansions=0,this._expandedLength=0,!this._onInputEntity)return void(this._inputMap=Ls(e));const t=Ls(e),n=Object.create(null);for(const[A,r]of Object.entries(t))this._applyRegistrationHook(this._onInputEntity,A,r,"input")&&(n[A]=r);this._inputMap=n}reset(){return this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this}setXmlVersion(e){this._ncrXmlVersion=1.1===e?1.1:1}decode(e){if("string"!=typeof e||0===e.length)return e;if(-1===e.indexOf("&"))return e;const t=e,n=[],A=e.length;let r=0,i=0;const s=this._maxTotalExpansions>0,o=this._maxExpandedLength>0,a=s||o;for(;i<A;){if(38!==e.charCodeAt(i)){i++;continue}let t=i+1;for(;t<A&&59!==e.charCodeAt(t)&&t-i<=32;)t++;if(t>=A||59!==e.charCodeAt(t)){i++;continue}const l=e.slice(i+1,t);if(0===l.length){i++;continue}let c,u;if(this._removeSet.has(l))c="",void 0===u&&(u=Ds);else{if(this._leaveSet.has(l)){i++;continue}if(35===l.charCodeAt(0)){const e=this._resolveNCR(l);if(void 0===e){i++;continue}c=e,u=Ps}else{const e=this._resolveName(l);c=e?.value,u=e?.tier}}if(void 0!==c){if(i>r&&n.push(e.slice(r,i)),n.push(c),r=t+1,i=r,a&&this._tierCounts(u)){if(s&&(this._totalExpansions++,this._totalExpansions>this._maxTotalExpansions))throw new Error(`[EntityReplacer] Entity expansion count limit exceeded: ${this._totalExpansions} > ${this._maxTotalExpansions}`);if(o){const e=c.length-(l.length+2);if(e>0&&(this._expandedLength+=e,this._expandedLength>this._maxExpandedLength))throw new Error(`[EntityReplacer] Expanded content length limit exceeded: ${this._expandedLength} > ${this._maxExpandedLength}`)}}}else i++}r<A&&n.push(e.slice(r));const l=0===n.length?e:n.join("");return this._postCheck(l,t)}_tierCounts(e){return!!this._limitTiers.has(Fs)||this._limitTiers.has(e)}_resolveName(e){return e in this._inputMap?{value:this._inputMap[e],tier:Ds}:e in this._externalMap?{value:this._externalMap[e],tier:Ds}:e in this._baseMap?{value:this._baseMap[e],tier:Ps}:void 0}_classifyNCR(e){return 0===e?this._ncrNullLevel:e>=55296&&e<=57343||1===this._ncrXmlVersion&&e>=1&&e<=31&&!Os.has(e)?Ns.remove:-1}_applyNCRAction(e,t,n){switch(e){case Ns.allow:return String.fromCodePoint(n);case Ns.remove:return"";case Ns.leave:return;case Ns.throw:throw new Error(`[EntityDecoder] Prohibited numeric character reference &${t}; (U+${n.toString(16).toUpperCase().padStart(4,"0")})`);default:return String.fromCodePoint(n)}}_resolveNCR(e){const t=e.charCodeAt(1);let n;if(n=120===t||88===t?parseInt(e.slice(2),16):parseInt(e.slice(1),10),Number.isNaN(n)||n<0||n>1114111)return;const A=this._classifyNCR(n);if(!this._numericAllowed&&A<Ns.remove)return;const r=-1===A?this._ncrOnLevel:Math.max(this._ncrOnLevel,A);return this._applyNCRAction(r,e,n)}}const ks=e=>ls.includes(e)?"__"+e:e,Gs={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0,unicode:!1},tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,entityDecoder:null,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(e,t,n){return e},captureMetaData:!1,maxNestedTags:100,strictReservedNames:!0,jPath:!0,onDangerousProperty:ks};function Vs(e,t){if("string"!=typeof e)return;const n=e.toLowerCase();if(ls.some(e=>n===e.toLowerCase()))throw new Error(`[SECURITY] Invalid ${t}: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`);if(cs.some(e=>n===e.toLowerCase()))throw new Error(`[SECURITY] Invalid ${t}: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`)}function Hs(e,t){return"boolean"==typeof e?{enabled:e,maxEntitySize:1e4,maxExpansionDepth:1e4,maxTotalExpansions:1/0,maxExpandedLength:1e5,maxEntityCount:1e3,allowedTags:null,tagFilter:null,appliesTo:"all"}:"object"==typeof e&&null!==e?{enabled:!1!==e.enabled,maxEntitySize:Math.max(1,e.maxEntitySize??1e4),maxExpansionDepth:Math.max(1,e.maxExpansionDepth??1e4),maxTotalExpansions:Math.max(1,e.maxTotalExpansions??1/0),maxExpandedLength:Math.max(1,e.maxExpandedLength??1e5),maxEntityCount:Math.max(1,e.maxEntityCount??1e3),allowedTags:e.allowedTags??null,tagFilter:e.tagFilter??null,appliesTo:e.appliesTo??"all"}:Hs(!0)}const Qs=function(e){const t=Object.assign({},Gs,e),n=[{value:t.attributeNamePrefix,name:"attributeNamePrefix"},{value:t.attributesGroupName,name:"attributesGroupName"},{value:t.textNodeName,name:"textNodeName"},{value:t.cdataPropName,name:"cdataPropName"},{value:t.commentPropName,name:"commentPropName"}];for(const{value:A,name:r}of n)A&&Vs(A,r);return null===t.onDangerousProperty&&(t.onDangerousProperty=ks),t.processEntities=Hs(t.processEntities,t.htmlEntities),t.unpairedTagsSet=new Set(t.unpairedTags),t.stopNodes&&Array.isArray(t.stopNodes)&&(t.stopNodes=t.stopNodes.map(e=>"string"==typeof e&&e.startsWith("*.")?".."+e.substring(2):e)),t};let js;js="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");class zs{constructor(e){this.tagname=e,this.child=[],this[":@"]=Object.create(null)}add(e,t){"__proto__"===e&&(e="#__proto__"),this.child.push({[e]:t})}addChild(e,t){"__proto__"===e.tagname&&(e.tagname="#__proto__"),e[":@"]&&Object.keys(e[":@"]).length>0?this.child.push({[e.tagname]:e.child,":@":e[":@"]}):this.child.push({[e.tagname]:e.child}),void 0!==t&&(this.child[this.child.length-1][js]={startIndex:t})}static getMetaDataSymbol(){return js}}const Js=":A-Za-z_À-ÖØ-öø-˿Ͱ-ͽͿ-҆҈--⁰-Ⰰ-、-豈-﷏ﷰ-�",Ks=":A-Za-z_À-˿Ͱ-ͽͿ-҆҈--⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-",qs=Ks+"\\-\\.\\d·̀-ͯ҇‿-⁀",Ys=(e,t,n="")=>{const A=`[${e.replace(":","")}][${t.replace(":","")}]*`;return{name:new RegExp(`^[${e}][${t}]*$`,n),ncName:new RegExp(`^${A}$`,n),qName:new RegExp(`^${A}(?::${A})?$`,n),nmToken:new RegExp(`^[${t}]+$`,n),nmTokens:new RegExp(`^[${t}]+(?:\\s+[${t}]+)*$`,n)}},Ws=Ys(Js,Js+"\\-\\.\\d·̀-ͯ‿-⁀"),Xs=Ys(Ks,qs,"u"),Zs=":A-Za-z_",$s=Ys(Zs,Zs+"\\-\\.\\d"),eo=(e,{xmlVersion:t="1.0",asciiOnly:n=!1}={})=>((e="1.0",t=!1)=>t?$s:"1.1"===e?Xs:Ws)(t,n).qName.test(e);class to{constructor(e,t){this.suppressValidationErr=!e,this.options=e,this.xmlVersion=t||1}setXmlVersion(e=1){this.xmlVersion=e}readDocType(e,t){const n=Object.create(null);let A=0;if("O"!==e[t+3]||"C"!==e[t+4]||"T"!==e[t+5]||"Y"!==e[t+6]||"P"!==e[t+7]||"E"!==e[t+8])throw new Error("Invalid Tag instead of DOCTYPE");{t+=9;let r=1,i=!1,s=!1,o="";for(;t<e.length;t++)if("<"!==e[t]||s)if(">"===e[t]){if(s?"-"===e[t-1]&&"-"===e[t-2]&&(s=!1,r--):r--,0===r)break}else"["===e[t]?i=!0:o+=e[t];else{if(i&&Ao(e,"!ENTITY",t)){let r,i;if(t+=7,[r,i,t]=this.readEntityExp(e,t+1,this.suppressValidationErr),-1===i.indexOf("&")){if(!1!==this.options.enabled&&null!=this.options.maxEntityCount&&A>=this.options.maxEntityCount)throw new Error(`Entity count (${A+1}) exceeds maximum allowed (${this.options.maxEntityCount})`);n[r]=i,A++}}else if(i&&Ao(e,"!ELEMENT",t)){t+=8;const{index:n}=this.readElementExp(e,t+1);t=n}else if(i&&Ao(e,"!ATTLIST",t))t+=8;else if(i&&Ao(e,"!NOTATION",t)){t+=9;const{index:n}=this.readNotationExp(e,t+1,this.suppressValidationErr);t=n}else{if(!Ao(e,"!--",t))throw new Error("Invalid DOCTYPE");s=!0}r++,o=""}if(0!==r)throw new Error("Unclosed DOCTYPE")}return{entities:n,i:t}}readEntityExp(e,t){const n=t=no(e,t);for(;t<e.length&&!/\s/.test(e[t])&&'"'!==e[t]&&"'"!==e[t];)t++;let A=e.substring(n,t);if(ro(A,{xmlVersion:this.xmlVersion}),t=no(e,t),!this.suppressValidationErr){if("SYSTEM"===e.substring(t,t+6).toUpperCase())throw new Error("External entities are not supported");if("%"===e[t])throw new Error("Parameter entities are not supported")}let r="";if([t,r]=this.readIdentifierVal(e,t,"entity"),!1!==this.options.enabled&&null!=this.options.maxEntitySize&&r.length>this.options.maxEntitySize)throw new Error(`Entity "${A}" size (${r.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`);return[A,r,--t]}readNotationExp(e,t){const n=t=no(e,t);for(;t<e.length&&!/\s/.test(e[t]);)t++;let A=e.substring(n,t);!this.suppressValidationErr&&ro(A,{xmlVersion:this.xmlVersion}),t=no(e,t);const r=e.substring(t,t+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==r&&"PUBLIC"!==r)throw new Error(`Expected SYSTEM or PUBLIC, found "${r}"`);t+=r.length,t=no(e,t);let i=null,s=null;if("PUBLIC"===r)[t,i]=this.readIdentifierVal(e,t,"publicIdentifier"),'"'!==e[t=no(e,t)]&&"'"!==e[t]||([t,s]=this.readIdentifierVal(e,t,"systemIdentifier"));else if("SYSTEM"===r&&([t,s]=this.readIdentifierVal(e,t,"systemIdentifier"),!this.suppressValidationErr&&!s))throw new Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:A,publicIdentifier:i,systemIdentifier:s,index:--t}}readIdentifierVal(e,t,n){let A="";const r=e[t];if('"'!==r&&"'"!==r)throw new Error(`Expected quoted string, found "${r}"`);const i=++t;for(;t<e.length&&e[t]!==r;)t++;if(A=e.substring(i,t),e[t]!==r)throw new Error(`Unterminated ${n} value`);return[++t,A]}readElementExp(e,t){const n=t=no(e,t);for(;t<e.length&&!/\s/.test(e[t]);)t++;let A=e.substring(n,t);if(!this.suppressValidationErr&&!eo(A,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid element name: "${A}"`);let r="";if("E"===e[t=no(e,t)]&&Ao(e,"MPTY",t))t+=4;else if("A"===e[t]&&Ao(e,"NY",t))t+=2;else if("("===e[t]){const n=++t;for(;t<e.length&&")"!==e[t];)t++;if(r=e.substring(n,t),")"!==e[t])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error(`Invalid Element Expression, found "${e[t]}"`);return{elementName:A,contentModel:r.trim(),index:t}}readAttlistExp(e,t){let n=t=no(e,t);for(;t<e.length&&!/\s/.test(e[t]);)t++;let A=e.substring(n,t);for(ro(A,{xmlVersion:this.xmlVersion}),n=t=no(e,t);t<e.length&&!/\s/.test(e[t]);)t++;let r=e.substring(n,t);if(!ro(r,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid attribute name: "${r}"`);t=no(e,t);let i="";if("NOTATION"===e.substring(t,t+8).toUpperCase()){if(i="NOTATION","("!==e[t=no(e,t+=8)])throw new Error(`Expected '(', found "${e[t]}"`);t++;let n=[];for(;t<e.length&&")"!==e[t];){const A=t;for(;t<e.length&&"|"!==e[t]&&")"!==e[t];)t++;let r=e.substring(A,t);if(r=r.trim(),!ro(r,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid notation name: "${r}"`);n.push(r),"|"===e[t]&&(t++,t=no(e,t))}if(")"!==e[t])throw new Error("Unterminated list of notations");t++,i+=" ("+n.join("|")+")"}else{const n=t;for(;t<e.length&&!/\s/.test(e[t]);)t++;i+=e.substring(n,t);const A=["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"];if(!this.suppressValidationErr&&!A.includes(i.toUpperCase()))throw new Error(`Invalid attribute type: "${i}"`)}t=no(e,t);let s="";return"#REQUIRED"===e.substring(t,t+8).toUpperCase()?(s="#REQUIRED",t+=8):"#IMPLIED"===e.substring(t,t+7).toUpperCase()?(s="#IMPLIED",t+=7):[t,s]=this.readIdentifierVal(e,t,"ATTLIST"),{elementName:A,attributeName:r,attributeType:i,defaultValue:s,index:t}}}const no=(e,t)=>{for(;t<e.length&&/\s/.test(e[t]);)t++;return t};function Ao(e,t,n){for(let A=0;A<t.length;A++)if(t[A]!==e[n+A+1])return!1;return!0}function ro(e,t){if(eo(e,{xmlVersion:t}))return e;throw new Error(`Invalid entity name ${e}`)}const io=[48,1632,1776,2406,2534,2662,2790,2918,3046,3174,3302,3430,3558,3664,3792,3872,4160,4240,6112,6160,6470,6608,6784,6800,6992,7088,7232,7248,65296,120782,120792,120802,120812,120822,66720,68912,69734,69872,69942,70096,70384,70736,70864,71248,71360,71472,71904,72016,72688,72784,73040,73120,73552,92768,92864,93008,123200,123632,124144,125264,130032],so=new Map,oo=1632,ao=new Uint8Array(63904).fill(255);for(const wy of io)for(let e=0;e<10;e++){const t=wy+e;t<=65535?ao[t-oo]=e:so.set(t,e)}const lo=new Set([8722,65293,65123]);const co=/^[-+]?0x[a-fA-F0-9]+$/,uo=/^0b[01]+$/,fo=/^0o[0-7]+$/,ho=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,po={hex:!0,binary:!1,octal:!1,leadingZeros:!0,decimalPoint:".",eNotation:!0,infinity:"original",unicode:!1};function mo(e,t={}){if(t=Object.assign({},po,t),!e||"string"!=typeof e)return e;let n=e.trim();if(0===n.length)return e;if(void 0!==t.skipLike&&t.skipLike.test(n))return e;if("0"===n)return 0;if(t.unicode&&(n=function(e){if("string"!=typeof e)return e;const t=e.length;if(0===t)return e;let n=-1;for(let r=0;r<t;r++){const A=e.charCodeAt(r);if(!(A>=48&&A<=57||45===A))if(A<oo){if(lo.has(A)){n=r;break}}else if(A>=55296&&A<=56319){if(r+1<t){const t=e.charCodeAt(r+1);if(t>=56320&&t<=57343){const e=65536+(A-55296<<10)+(t-56320);if(so.has(e)){n=r;break}}}}else if(255!==ao[A-oo]||lo.has(A)){n=r;break}}if(-1===n)return e;const A=[];n>0&&A.push(e.slice(0,n));for(let r=n;r<t;r++){const n=e.charCodeAt(r);if(n>=48&&n<=57||45===n){A.push(e[r]);continue}if(n<oo){A.push(lo.has(n)?"-":e[r]);continue}if(n>=55296&&n<=56319){if(r+1<t){const t=e.charCodeAt(r+1);if(t>=56320&&t<=57343){const e=65536+(n-55296<<10)+(t-56320),i=so.get(e);if(void 0!==i){A.push(String.fromCharCode(i+48)),r++;continue}}}A.push(e[r]);continue}if(lo.has(n)){A.push("-");continue}const i=ao[n-oo];A.push(255!==i?String.fromCharCode(i+48):e[r])}return A.join("")}(n),"0"===n))return 0;if(t.hex&&co.test(n))return bo(n,16);if(t.binary&&uo.test(n))return bo(n,2);if(t.octal&&fo.test(n))return bo(n,8);if(isFinite(n)){if(n.includes("e")||n.includes("E"))return function(e,t,n){if(!n.eNotation)return e;const A=t.match(go);if(A){let r=A[1]||"";const i=-1===A[3].indexOf("e")?"E":"e",s=A[2],o=r?e[s.length+1]===i:e[s.length]===i;return s.length>1&&o?e:(1!==s.length||!A[3].startsWith(`.${i}`)&&A[3][0]!==i)&&s.length>0?n.leadingZeros&&!o?(t=(A[1]||"")+A[3],Number(t)):e:Number(t)}return e}(e,n,t);{const A=ho.exec(n);if(A){const r=A[1]||"",i=A[2];let s=function(e){if(e&&-1!==e.indexOf("."))return"."===(e=e.replace(/0+$/,""))?e="0":"."===e[0]?e="0"+e:"."===e[e.length-1]&&(e=e.substring(0,e.length-1)),e;return e}(A[3]);const o=r?"."===e[i.length+1]:"."===e[i.length];if(!t.leadingZeros&&(i.length>1||1===i.length&&!o))return e;{const A=Number(n),o=String(A);if(0===A)return A;if(-1!==o.search(/[eE]/))return t.eNotation?A:e;if(-1!==n.indexOf("."))return"0"===o||o===s||o===`${r}${s}`?A:e;let a=i?s:n;return i?a===o||r+a===o?A:e:a===o||a===r+o?A:e}}return e}}return function(e,t,n){const A=t===1/0;switch(n.infinity.toLowerCase()){case"null":return null;case"infinity":return t;case"string":return A?"Infinity":"-Infinity";default:return e}}(e,Number(n),t)}const go=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function bo(e,t){const n=e.trim();if(2!==t&&8!==t||(e=n.substring(2)),parseInt)return parseInt(e,t);if(Number.parseInt)return Number.parseInt(e,t);if(window&&window.parseInt)return window.parseInt(e,t);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}class yo{constructor(e,t={},n){this.pattern=e,this.separator=t.separator||".",this.segments=this._parse(e),this.data=n,this._hasDeepWildcard=this.segments.some(e=>"deep-wildcard"===e.type),this._hasAttributeCondition=this.segments.some(e=>void 0!==e.attrName),this._hasPositionSelector=this.segments.some(e=>void 0!==e.position)}_parse(e){const t=[];let n=0,A="";for(;n<e.length;)e[n]===this.separator?n+1<e.length&&e[n+1]===this.separator?(A.trim()&&(t.push(this._parseSegment(A.trim())),A=""),t.push({type:"deep-wildcard"}),n+=2):(A.trim()&&t.push(this._parseSegment(A.trim())),A="",n++):(A+=e[n],n++);return A.trim()&&t.push(this._parseSegment(A.trim())),t}_parseSegment(e){const t={type:"tag"};let n=null,A=e;const r=e.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(r&&(A=r[1]+r[3],r[2])){const e=r[2].slice(1,-1);e&&(n=e)}let i,s,o=A;if(A.includes("::")){const t=A.indexOf("::");if(i=A.substring(0,t).trim(),o=A.substring(t+2).trim(),!i)throw new Error(`Invalid namespace in pattern: ${e}`)}let a=null;if(o.includes(":")){const e=o.lastIndexOf(":"),t=o.substring(0,e).trim(),n=o.substring(e+1).trim();["first","last","odd","even"].includes(n)||/^nth\(\d+\)$/.test(n)?(s=t,a=n):s=o}else s=o;if(!s)throw new Error(`Invalid segment pattern: ${e}`);if(t.tag=s,i&&(t.namespace=i),n)if(n.includes("=")){const e=n.indexOf("=");t.attrName=n.substring(0,e).trim(),t.attrValue=n.substring(e+1).trim()}else t.attrName=n.trim();if(a){const e=a.match(/^nth\((\d+)\)$/);e?(t.position="nth",t.positionValue=parseInt(e[1],10)):t.position=a}return t}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}class Bo{constructor(){this._byDepthAndTag=new Map,this._wildcardByDepth=new Map,this._deepWildcards=[],this._deepByTerminalTag=new Map,this._patterns=new Set,this._sealed=!1}add(e){if(this._sealed)throw new TypeError("ExpressionSet is sealed. Create a new ExpressionSet to add more expressions.");if(this._patterns.has(e.pattern))return this;if(this._patterns.add(e.pattern),e.hasDeepWildcard()){const t=e.segments[e.segments.length-1];if(t&&"deep-wildcard"!==t.type&&"*"!==t.tag){const n=t.tag;this._deepByTerminalTag.has(n)||this._deepByTerminalTag.set(n,[]),this._deepByTerminalTag.get(n).push(e)}else this._deepWildcards.push(e);return this}const t=e.length,n=e.segments[e.segments.length-1],A=n?.tag;if(A&&"*"!==A){const n=`${t}:${A}`;this._byDepthAndTag.has(n)||this._byDepthAndTag.set(n,[]),this._byDepthAndTag.get(n).push(e)}else this._wildcardByDepth.has(t)||this._wildcardByDepth.set(t,[]),this._wildcardByDepth.get(t).push(e);return this}addAll(e){for(const t of e)this.add(t);return this}has(e){return this._patterns.has(e.pattern)}get size(){return this._patterns.size}seal(){return this._sealed=!0,this}get isSealed(){return this._sealed}matchesAny(e){return null!==this.findMatch(e)}findMatch(e){const t=e.getDepth(),n=e.getCurrentTag(),A=`${t}:${n}`,r=this._byDepthAndTag.get(A);if(r)for(let o=0;o<r.length;o++)if(e.matches(r[o]))return r[o];const i=this._wildcardByDepth.get(t);if(i)for(let o=0;o<i.length;o++)if(e.matches(i[o]))return i[o];const s=this._deepByTerminalTag.get(n);if(s)for(let o=0;o<s.length;o++)if(e.matches(s[o]))return s[o];for(let o=0;o<this._deepWildcards.length;o++)if(e.matches(this._deepWildcards[o]))return this._deepWildcards[o];return null}}class vo{constructor(e){this._matcher=e}get separator(){return this._matcher.separator}getCurrentTag(){const e=this._matcher.path;return e.length>0?e[e.length-1].tag:void 0}getCurrentNamespace(){const e=this._matcher.path;return e.length>0?e[e.length-1].namespace:void 0}getAttrValue(e){const t=this._matcher.path;if(0!==t.length)return t[t.length-1].values?.[e]}hasAttr(e){const t=this._matcher.path;if(0===t.length)return!1;const n=t[t.length-1];return void 0!==n.values&&e in n.values}getAnyParentAttr(e){return this._matcher.getAnyParentAttr(e)}hasAnyParentAttr(e){return this._matcher.hasAnyParentAttr(e)}getPosition(){const e=this._matcher.path;return 0===e.length?-1:e[e.length-1].position??0}getCounter(){const e=this._matcher.path;return 0===e.length?-1:e[e.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this._matcher.path.length}toString(e,t=!0){return this._matcher.toString(e,t)}toArray(){return this._matcher.path.map(e=>e.tag)}matches(e){return this._matcher.matches(e)}matchesAny(e){return e.matchesAny(this._matcher)}}class Co{constructor(e={}){this.separator=e.separator||".",this.path=[],this.siblingStacks=[],this._pathStringCache=null,this._view=new vo(this),this._keptAttrs=[]}push(e,t=null,n=null,A=null){this._pathStringCache=null,this.path.length>0&&(this.path[this.path.length-1].values=void 0);const r=this.path.length;let i=this.siblingStacks[r];i||(i={counts:new Map,total:0},this.siblingStacks[r]=i);const s=n?`${n}:${e}`:e,o=i.counts.get(s)||0,a=i.total;i.counts.set(s,o+1),i.total++;const l={tag:e,position:a,counter:o};null!=n&&(l.namespace=n),null!=t&&(l.values=t),this.path.push(l);const c=this.path.length,u=null!==A?A.keep:null;if(null!=u&&u.length>0&&t)for(let f=0;f<u.length;f++){const e=u[f];void 0!==t[e]&&this._keptAttrs.push({depth:c,name:e,value:t[e]})}}pop(){if(0===this.path.length)return;this._pathStringCache=null;const e=this.path.pop();this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1);const t=this.path.length+1;for(;this._keptAttrs.length>0&&this._keptAttrs[this._keptAttrs.length-1].depth>=t;)this._keptAttrs.pop();return e}updateCurrent(e){if(this.path.length>0){const t=this.path[this.path.length-1];null!=e&&(t.values=e)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(e){if(0!==this.path.length)return this.path[this.path.length-1].values?.[e]}hasAttr(e){if(0===this.path.length)return!1;const t=this.path[this.path.length-1];return void 0!==t.values&&e in t.values}getAnyParentAttr(e){const t=this._keptAttrs;for(let n=t.length-1;n>=0;n--)if(t[n].name===e)return t[n].value}hasAnyParentAttr(e){const t=this._keptAttrs;for(let n=t.length-1;n>=0;n--)if(t[n].name===e)return!0;return!1}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(e,t=!0){const n=e||this.separator;if(n===this.separator&&!0===t){if(null!==this._pathStringCache)return this._pathStringCache;const e=this.path.map(e=>e.namespace?`${e.namespace}:${e.tag}`:e.tag).join(n);return this._pathStringCache=e,e}return this.path.map(e=>t&&e.namespace?`${e.namespace}:${e.tag}`:e.tag).join(n)}toArray(){return this.path.map(e=>e.tag)}reset(){this._pathStringCache=null,this.path=[],this.siblingStacks=[],this._keptAttrs=[]}matches(e){const t=e.segments;return 0!==t.length&&(e.hasDeepWildcard()?this._matchWithDeepWildcard(t):this._matchSimple(t))}_matchSimple(e){if(this.path.length!==e.length)return!1;for(let t=0;t<e.length;t++)if(!this._matchSegment(e[t],this.path[t],t===this.path.length-1))return!1;return!0}_matchWithDeepWildcard(e){let t=this.path.length-1,n=e.length-1;for(;n>=0&&t>=0;){const A=e[n];if("deep-wildcard"===A.type){if(n--,n<0)return!0;const A=e[n];let r=!1;for(let e=t;e>=0;e--)if(this._matchSegment(A,this.path[e],e===this.path.length-1)){t=e-1,n--,r=!0;break}if(!r)return!1}else{if(!this._matchSegment(A,this.path[t],t===this.path.length-1))return!1;t--,n--}}return n<0}_matchSegment(e,t,n){if("*"!==e.tag&&e.tag!==t.tag)return!1;if(void 0!==e.namespace&&"*"!==e.namespace&&e.namespace!==t.namespace)return!1;if(void 0!==e.attrName){if(!n)return!1;if(!t.values||!(e.attrName in t.values))return!1;if(void 0!==e.attrValue&&String(t.values[e.attrName])!==String(e.attrValue))return!1}if(void 0!==e.position){if(!n)return!1;const A=t.counter??0;if("first"===e.position&&0!==A)return!1;if("odd"===e.position&&A%2!=1)return!1;if("even"===e.position&&A%2!=0)return!1;if("nth"===e.position&&A!==e.positionValue)return!1}return!0}matchesAny(e){return e.matchesAny(this)}snapshot(){return{path:this.path.map(e=>({...e})),siblingStacks:this.siblingStacks.map(e=>e?{counts:new Map(e.counts),total:e.total}:e),keptAttrs:this._keptAttrs.map(e=>({...e}))}}restore(e){this._pathStringCache=null,this.path=e.path.map(e=>({...e})),this.siblingStacks=e.siblingStacks.map(e=>e?{counts:new Map(e.counts),total:e.total}:e),this._keptAttrs=(e.keptAttrs||[]).map(e=>({...e}))}readOnly(){return this._view}}const _o=[{id:"html-script-open",description:"<script opening tag",pattern:/<script[\s>/]/i},{id:"html-script-close",description:"<\/script closing tag",pattern:/<\/script[\s>]/i},{id:"html-javascript-protocol",description:"javascript: URI scheme (with optional whitespace/encoding)",pattern:/j[\t\n\r ]*a[\t\n\r ]*v[\t\n\r ]*a[\t\n\r ]*s[\t\n\r ]*c[\t\n\r ]*r[\t\n\r ]*i[\t\n\r ]*p[\t\n\r ]*t[\t\n\r ]*:/i},{id:"html-vbscript-protocol",description:"vbscript: URI scheme",pattern:/vbscript[\t\n\r ]*:/i},{id:"html-data-html",description:"data:text/html URI — can execute scripts in browsers",pattern:/data[\t\n\r ]*:[\t\n\r ]*text\/html/i},{id:"html-data-xhtml",description:"data:application/xhtml+xml URI",pattern:/data[\t\n\r ]*:[\t\n\r ]*application\/xhtml/i},{id:"html-data-svg",description:"data:image/svg+xml URI — can execute scripts",pattern:/data[\t\n\r ]*:[\t\n\r ]*image\/svg\+xml/i},{id:"html-inline-event-handler",description:"Inline event handler attributes: onclick=, onerror=, onload=, etc.",pattern:/\bon\w{1,30}\s*=/i},{id:"html-entity-obfuscated-script",description:"HTML-entity-encoded <script (e.g. <script or <script)",pattern:/(?:�*3[Cc];?|�*60;?|<)\s*script/i},{id:"html-entity-obfuscated-javascript",description:'HTML-entity-encoded javascript: (partial — catches common j or j for "j")',pattern:/(?:�*6[Aa];?|�*106;?)\s*(?:�*61;?|a)[\s\S]{0,80}script\s*:/i},{id:"html-style-expression",description:"CSS expression() — IE-era code execution in style attributes",pattern:/style[\s\S]{0,20}expression\s*\(/i},{id:"html-object-embed",description:"<object or <embed tags that can load active content",pattern:/<(?:object|embed)[\s>/]/i},{id:"html-base-tag",description:"<base href= — can hijack all relative URLs on a page",pattern:/<base[\s>]/i},{id:"html-meta-refresh",description:'<meta http-equiv="refresh" — can redirect users',pattern:/<meta[\s\S]{0,40}http-equiv[\s\S]{0,20}refresh/i},{id:"html-srcdoc",description:"srcdoc= attribute on iframes — embeds HTML that can run scripts",pattern:/srcdoc\s*=/i},{id:"html-iframe",description:"<iframe tag",pattern:/<iframe[\s>/]/i},{id:"html-form",description:"<form tag — can be used for phishing / credential harvesting injection",pattern:/<form[\s>/]/i}],Mo=[{id:"xml-cdata-injection",description:"CDATA section injection: <![CDATA[ breaks out of text node context",pattern:/<!\[CDATA\[/i},{id:"xml-cdata-close",description:"CDATA close sequence: ]]> can terminate an enclosing CDATA section",pattern:/\]\]>/},{id:"xml-processing-instruction",description:"XML processing instruction: <?xml-stylesheet or <?php etc.",pattern:/<\?(?:xml[\- ]|php|asp)/i},{id:"xml-doctype-injection",description:"DOCTYPE declaration embedded in content — can define entities",pattern:/<!DOCTYPE(?:[\s[]|$)/i},{id:"xml-entity-system",description:"SYSTEM keyword — used in external entity declarations (XXE)",pattern:/\bSYSTEM\s+["']/i},{id:"xml-entity-public",description:"PUBLIC keyword — used in external entity declarations (XXE)",pattern:/\bPUBLIC\s+["']/i},{id:"xml-entity-declaration",description:"<!ENTITY declaration — defines entities, potential XXE or entity expansion",pattern:/<!ENTITY[\s%]/i},{id:"xml-billion-laughs",description:"Entity reference chaining / billion laughs: repeated &eX; style references",pattern:/(?:&\w{1,20};){3,}/},{id:"xml-namespace-confusion",description:"xmlns: attribute injection — can redefine namespaces to confuse parsers",pattern:/\bxmlns\s*(?::\w{1,40})?\s*=/i},{id:"xml-comment-injection",description:"\x3c!-- comment injection — can hide content from some parsers",pattern:/<!--/},{id:"xml-comment-close",description:"--\x3e closes an enclosing XML comment",pattern:/-->/},{id:"xml-pi-close",description:"?> closes an enclosing processing instruction",pattern:/\?>/}],wo=[{id:"sql-block-comment-open",description:"SQL block comment open: /* ... */ — unusual in legitimate user text",pattern:/\/\*/},{id:"sql-union-select",description:"UNION SELECT — most common SQL injection aggregation attack",pattern:/\bUNION\s{1,20}(?:ALL\s{1,20})?SELECT\b/i},{id:"sql-drop-table",description:"DROP TABLE — destructive DDL injection",pattern:/\bDROP\s{1,20}TABLE\b/i},{id:"sql-drop-database",description:"DROP DATABASE — destructive DDL injection",pattern:/\bDROP\s{1,20}DATABASE\b/i},{id:"sql-insert-into",description:"INSERT INTO — data injection",pattern:/\bINSERT\s{1,20}INTO\b/i},{id:"sql-delete-from",description:"DELETE FROM — data deletion injection",pattern:/\bDELETE\s{1,20}FROM\b/i},{id:"sql-update-set",description:"UPDATE ... SET — data modification injection",pattern:/\bUPDATE\b[\s\S]{1,60}\bSET\b/i},{id:"sql-exec-xp",description:"EXEC xp_ — MSSQL extended stored procedure execution",pattern:/\bEXEC(?:UTE)?\s{1,20}xp_/i},{id:"sql-tautology-string",description:'Classic string tautology: \' OR \'1\'=\'1 or " OR "1"="1"',pattern:/'\s{0,10}OR\s{0,10}'[^']{0,20}'\s*=\s*'[^']{0,20}/i},{id:"sql-tautology-numeric",description:"Numeric tautology: OR 1=1",pattern:/\bOR\s{1,10}1\s*=\s*1\b/i},{id:"sql-always-true-zero",description:"Numeric tautology: OR 0=0",pattern:/\bOR\s{1,10}0\s*=\s*0\b/i},{id:"sql-sleep-benchmark",description:"Time-based blind injection: SLEEP() or BENCHMARK()",pattern:/\b(?:SLEEP|BENCHMARK)\s*\(/i},{id:"sql-waitfor-delay",description:"MSSQL time-based blind injection: WAITFOR DELAY",pattern:/\bWAITFOR\s{1,20}DELAY\b/i},{id:"sql-char-function",description:"CHAR() function — used to obfuscate injected strings",pattern:/\bCHAR\s*\(\s*\d{1,3}/i},{id:"sql-information-schema",description:"INFORMATION_SCHEMA — reconnaissance query for table/column enumeration",pattern:/\bINFORMATION_SCHEMA\b/i}],To="[\"'\\s]*:",Eo=[{id:"nosql-where-operator",description:"$where — executes arbitrary JavaScript server-side in MongoDB",pattern:new RegExp(`\\$where${To}`,"i")},{id:"nosql-ne-operator",description:'$ne — "not equal" operator used to bypass equality checks',pattern:new RegExp(`\\$ne${To}`,"i")},{id:"nosql-gt-operator",description:'$gt — "greater than" used to bypass password/value checks',pattern:new RegExp(`\\$gte?${To}`,"i")},{id:"nosql-lt-operator",description:'$lt / $lte — "less than" bypass variants',pattern:new RegExp(`\\$lte?${To}`,"i")},{id:"nosql-regex-operator",description:"$regex — can be used to extract data character by character (blind injection)",pattern:new RegExp(`\\$regex${To}`,"i")},{id:"nosql-or-operator",description:"$or — logical OR; used to create always-true conditions",pattern:new RegExp(`\\$or${To}\\s*\\[`,"i")},{id:"nosql-and-operator",description:"$and — logical AND operator injection",pattern:new RegExp(`\\$and${To}\\s*\\[`,"i")},{id:"nosql-nor-operator",description:"$nor — logical NOR operator injection",pattern:new RegExp(`\\$nor${To}\\s*\\[`,"i")},{id:"nosql-exists-operator",description:"$exists — can enumerate fields to determine schema",pattern:new RegExp(`\\$exists${To}`,"i")},{id:"nosql-in-operator",description:"$in — matches any value in a list; can enumerate values",pattern:new RegExp(`\\$in${To}\\s*\\[`,"i")},{id:"nosql-expr-operator",description:"$expr — allows aggregation expressions in queries (MongoDB 3.6+)",pattern:new RegExp(`\\$expr${To}`,"i")},{id:"nosql-function-operator",description:"$function — executes arbitrary JavaScript in MongoDB 4.4+",pattern:new RegExp(`\\$function${To}`,"i")},{id:"nosql-accumulator-operator",description:"$accumulator — custom aggregation with arbitrary JS execution",pattern:new RegExp(`\\$accumulator${To}`,"i")},{id:"nosql-proto-pollution",description:"__proto__ — prototype pollution via object key injection",pattern:/__proto__/},{id:"nosql-constructor-prototype",description:"constructor.prototype — alternative prototype pollution vector (dot notation or JSON key)",pattern:/constructor[\s"':.,{\[]*prototype/i},{id:"nosql-proto-bracket",description:'["__proto__"] — bracket-notation prototype pollution',pattern:/\[["']__proto__["']\]/}],xo=[...wo,{id:"sql-line-comment",description:"SQL line comment: -- followed by whitespace or end of string",pattern:/--(?:\s|$)/},{id:"sql-stacked-query",description:"Stacked queries: semicolon immediately followed by a SQL keyword",pattern:/;\s{0,10}(?:SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|EXEC)\b/i},{id:"sql-hex-encoding",description:"Hex-encoded string injection: 0x41414141 style (MySQL)",pattern:/\b0x[0-9a-f]{4,}/i}];function So(e,t){const n=t.label??"CUSTOM";for(const A of t)if(A.pattern.test(e))return{context:n,id:A.id,description:A.description,pattern:A.pattern};return null}function Io(e,t){!function(e){if("string"!=typeof e)throw new TypeError("is-unsafe: first argument must be a string, got "+typeof e)}(e),function(e){if(!(e instanceof RegExp)){if(!Array.isArray(e))throw new TypeError("is-unsafe: second argument must be a PatternList (e.g. HTML), an array of PatternLists (e.g. [HTML, XML]), or a RegExp. Got: "+typeof e);if(0===e.length)throw new TypeError("is-unsafe: context must not be an empty array");if(Array.isArray(e[0]))for(const t of e)if(!Array.isArray(t)||0===t.length)throw new TypeError("is-unsafe: each context in the array must be a non-empty pattern array (PatternList)")}}(t);const{lists:n,regex:A}=function(e){return e instanceof RegExp?{lists:null,regex:e}:Array.isArray(e[0])?{lists:e,regex:null}:{lists:[e],regex:null}}(t);if(A)return A.test(e);for(const r of n)if(null!==So(e,r))return!0;return!1}function Ro(e,t){if(!e)return{};const n=t.attributesGroupName?e[t.attributesGroupName]:e;if(!n)return{};const A={};for(const r in n)if(r.startsWith(t.attributeNamePrefix)){A[r.substring(t.attributeNamePrefix.length)]=n[r]}else A[r]=n[r];return A}function Lo(e){if(!e||"string"!=typeof e)return;const t=e.indexOf(":");if(-1!==t&&t>0){const n=e.substring(0,t);if("xmlns"!==n)return n}}_o.label="HTML",Mo.label="XML",wo.label="SQL",xo.label="SQL-STRICT",Eo.label="NOSQL";class Do{constructor(e,t){var n;this.options=e,this.currentNode=null,this.tagsNodeStack=[],this.parseXml=Uo,this.parseTextData=Po,this.resolveNameSpace=Fo,this.buildAttributesMap=Oo,this.isItStopNode=Ho,this.replaceEntitiesValue=Go,this.readStopNodeData=Jo,this.saveTextToParentTag=Vo,this.addChild=ko,this.ignoreAttributesFn="function"==typeof(n=this.options.ignoreAttributes)?n:Array.isArray(n)?e=>{for(const t of n){if("string"==typeof t&&e===t)return!0;if(t instanceof RegExp&&t.test(e))return!0}}:()=>!1,this.entityExpansionCount=0,this.currentExpandedLength=0,this.doctypefound=!1;let A={...Es};this.options.entityDecoder?this.entityDecoder=this.options.entityDecoder:("object"==typeof this.options.htmlEntities?A=this.options.htmlEntities:!0===this.options.htmlEntities&&(A={...xs,...Ts}),this.entityDecoder=new Us({namedEntities:{...A,...t},numericAllowed:this.options.htmlEntities,limit:{maxTotalExpansions:this.options.processEntities.maxTotalExpansions,maxExpandedLength:this.options.processEntities.maxExpandedLength,applyLimitsTo:this.options.processEntities.appliesTo},onInputEntity:(e,t)=>Io(t,[_o,Mo])?Ss.BLOCK:Ss.ALLOW})),this.matcher=new Co,this.readonlyMatcher=this.matcher.readOnly(),this.isCurrentNodeStopNode=!1,this.stopNodeExpressionsSet=new Bo;const r=this.options.stopNodes;if(r&&r.length>0){for(let e=0;e<r.length;e++){const t=r[e];"string"==typeof t?this.stopNodeExpressionsSet.add(new yo(t)):t instanceof yo&&this.stopNodeExpressionsSet.add(t)}this.stopNodeExpressionsSet.seal()}}}function Po(e,t,n,A,r,i,s){const o=this.options;if(void 0!==e&&(o.trimValues&&!A&&(e=e.trim()),e.length>0)){s||(e=this.replaceEntitiesValue(e,t,n));const A=o.jPath?n.toString():n,a=o.tagValueProcessor(t,e,A,r,i);if(null==a)return e;if(typeof a!=typeof e||a!==e)return a;if(o.trimValues)return Ko(e,o.parseTagValue,o.numberParseOptions);return e.trim()===e?Ko(e,o.parseTagValue,o.numberParseOptions):e}}function Fo(e){if(this.options.removeNSPrefix){const t=e.split(":"),n="/"===e.charAt(0)?"/":"";if("xmlns"===t[0])return"";2===t.length&&(e=n+t[1])}return e}const No=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function Oo(e,t,n,A=!1){const r=this.options;if(!0===A||!0!==r.ignoreAttributes&&"string"==typeof e){const A=os(e,No),i=A.length,s={},o=new Array(i);let a=!1;const l={};for(let e=0;e<i;e++){const t=this.resolveNameSpace(A[e][1]),i=A[e][4];if(t.length&&void 0!==i){let A=i;r.trimValues&&(A=A.trim()),A=this.replaceEntitiesValue(A,n,this.readonlyMatcher),o[e]=A,l[t]=A,a=!0}}a&&"object"==typeof t&&t.updateCurrent&&t.updateCurrent(l);const c=r.jPath?t.toString():this.readonlyMatcher;let u=!1;for(let e=0;e<i;e++){const t=this.resolveNameSpace(A[e][1]);if(this.ignoreAttributesFn(t,c))continue;let n=r.attributeNamePrefix+t;if(t.length)if(r.transformAttributeName&&(n=r.transformAttributeName(n)),n=Yo(n,r),void 0!==A[e][4]){const A=o[e],i=r.attributeValueProcessor(t,A,c);s[n]=null==i?A:typeof i!=typeof A||i!==A?i:Ko(A,r.parseAttributeValue,r.numberParseOptions),u=!0}else r.allowBooleanAttributes&&(s[n]=!0,u=!0)}if(!u)return;if(r.attributesGroupName&&!r.preserveOrder){const e={};return e[r.attributesGroupName]=s,e}return s}}const Uo=function(e){e=e.replace(/\r\n?/g,"\n");const t=new zs("!xml");let n=t,A="";this.matcher.reset(),this.entityDecoder.reset(),this.entityExpansionCount=0,this.currentExpandedLength=0,this.doctypefound=!1;const r=this.options,i=new to(r.processEntities),s=e.length;for(let o=0;o<s;o++){if("<"===e[o]){const a=e.charCodeAt(o+1);if(47===a){const t=Qo(e,">",o,"Closing Tag is not closed.");let i=e.substring(o+2,t).trim();if(r.removeNSPrefix){const e=i.indexOf(":");-1!==e&&(i=i.substr(e+1))}i=qo(r.transformTagName,i,"",r).tagName,n&&(A=this.saveTextToParentTag(A,n,this.readonlyMatcher));const s=this.matcher.getCurrentTag();if(i&&r.unpairedTagsSet.has(i))throw new Error(`Unpaired tag can not be used as closing tag: </${i}>`);s&&r.unpairedTagsSet.has(s)&&(this.matcher.pop(),this.tagsNodeStack.pop()),this.matcher.pop(),this.isCurrentNodeStopNode=!1,n=this.tagsNodeStack.pop(),A="",o=t}else if(63===a){let t=zo(e,o,!1,"?>");if(!t)throw new Error("Pi Tag is not closed.");A=this.saveTextToParentTag(A,n,this.readonlyMatcher);const s=this.buildAttributesMap(t.tagExp,this.matcher,t.tagName,!0);if(s){const e=s[this.options.attributeNamePrefix+"version"];this.entityDecoder.setXmlVersion(Number(e)||1),i.setXmlVersion(Number(e)||1)}if(r.ignoreDeclaration&&"?xml"===t.tagName||r.ignorePiTags);else{const e=new zs(t.tagName);e.add(r.textNodeName,""),t.tagName!==t.tagExp&&t.attrExpPresent&&!0!==r.ignoreAttributes&&(e[":@"]=s),this.addChild(n,e,this.readonlyMatcher,o)}o=t.closeIndex+1}else if(33===a&&45===e.charCodeAt(o+2)&&45===e.charCodeAt(o+3)){const t=Qo(e,"--\x3e",o+4,"Comment is not closed.");if(r.commentPropName){const i=e.substring(o+4,t-2);A=this.saveTextToParentTag(A,n,this.readonlyMatcher),n.add(r.commentPropName,[{[r.textNodeName]:i}])}o=t}else if(33===a&&68===e.charCodeAt(o+2)){if(this.doctypefound)throw new Error("Multiple DOCTYPE declarations found.");this.doctypefound=!0;const t=i.readDocType(e,o);this.entityDecoder.addInputEntities(t.entities),o=t.i}else if(33===a&&91===e.charCodeAt(o+2)){const t=Qo(e,"]]>",o,"CDATA is not closed.")-2,i=e.substring(o+9,t);A=this.saveTextToParentTag(A,n,this.readonlyMatcher);let s=this.parseTextData(i,n.tagname,this.readonlyMatcher,!0,!1,!0,!0);null==s&&(s=""),r.cdataPropName?n.add(r.cdataPropName,[{[r.textNodeName]:i}]):n.add(r.textNodeName,s),o=t+2}else{let i=zo(e,o,r.removeNSPrefix);if(!i){const t=e.substring(Math.max(0,o-50),Math.min(s,o+50));throw new Error(`readTagExp returned undefined at position ${o}. Context: "${t}"`)}let a=i.tagName;const l=i.rawTagName;let c=i.tagExp,u=i.attrExpPresent,f=i.closeIndex;if(({tagName:a,tagExp:c}=qo(r.transformTagName,a,c,r)),r.strictReservedNames&&(a===r.commentPropName||a===r.cdataPropName||a===r.textNodeName||a===r.attributesGroupName))throw new Error(`Invalid tag name: ${a}`);n&&A&&"!xml"!==n.tagname&&(A=this.saveTextToParentTag(A,n,this.readonlyMatcher,!1));const h=n;h&&r.unpairedTagsSet.has(h.tagname)&&(n=this.tagsNodeStack.pop(),this.matcher.pop());let d=!1;c.length>0&&c.lastIndexOf("/")===c.length-1&&(d=!0,"/"===a[a.length-1]?(a=a.substr(0,a.length-1),c=a):c=c.substr(0,c.length-1),u=a!==c);let p,m=null;p=Lo(l),a!==t.tagname&&this.matcher.push(a,{},p),a!==c&&u&&(m=this.buildAttributesMap(c,this.matcher,a),m&&Ro(m,r)),a!==t.tagname&&(this.isCurrentNodeStopNode=this.isItStopNode());const g=o;if(this.isCurrentNodeStopNode){let t="";if(d)o=i.closeIndex;else if(r.unpairedTagsSet.has(a))o=i.closeIndex;else{const n=this.readStopNodeData(e,l,f+1);if(!n)throw new Error(`Unexpected end of ${l}`);o=n.i,t=n.tagContent}const A=new zs(a);m&&(A[":@"]=m),A.add(r.textNodeName,t),this.matcher.pop(),this.isCurrentNodeStopNode=!1,this.addChild(n,A,this.readonlyMatcher,g)}else{if(d){({tagName:a,tagExp:c}=qo(r.transformTagName,a,c,r));const e=new zs(a);m&&(e[":@"]=m),this.addChild(n,e,this.readonlyMatcher,g),this.matcher.pop(),this.isCurrentNodeStopNode=!1}else{if(r.unpairedTagsSet.has(a)){const e=new zs(a);m&&(e[":@"]=m),this.addChild(n,e,this.readonlyMatcher,g),this.matcher.pop(),this.isCurrentNodeStopNode=!1,o=i.closeIndex;continue}{const e=new zs(a);if(this.tagsNodeStack.length>r.maxNestedTags)throw new Error("Maximum nested tags exceeded");this.tagsNodeStack.push(n),m&&(e[":@"]=m),this.addChild(n,e,this.readonlyMatcher,g),n=e}}A="",o=f}}}else A+=e[o]}return t.child};function ko(e,t,n,A){this.options.captureMetaData||(A=void 0);const r=this.options.jPath?n.toString():n,i=this.options.updateTag(t.tagname,r,t[":@"]);!1===i||("string"==typeof i?(t.tagname=i,e.addChild(t,A)):e.addChild(t,A))}function Go(e,t,n){const A=this.options.processEntities;if(!A||!A.enabled)return e;if(A.allowedTags){const r=this.options.jPath?n.toString():n;if(!(Array.isArray(A.allowedTags)?A.allowedTags.includes(t):A.allowedTags(t,r)))return e}if(A.tagFilter){const r=this.options.jPath?n.toString():n;if(!A.tagFilter(t,r))return e}return this.entityDecoder.decode(e)}function Vo(e,t,n,A){return e&&(void 0===A&&(A=0===t.child.length),void 0!==(e=this.parseTextData(e,t.tagname,n,!1,!!t[":@"]&&0!==Object.keys(t[":@"]).length,A))&&""!==e&&t.add(this.options.textNodeName,e),e=""),e}function Ho(){return 0!==this.stopNodeExpressionsSet.size&&this.matcher.matchesAny(this.stopNodeExpressionsSet)}function Qo(e,t,n,A){const r=e.indexOf(t,n);if(-1===r)throw new Error(A);return r+t.length-1}function jo(e,t,n,A){const r=e.indexOf(t,n);if(-1===r)throw new Error(A);return r}function zo(e,t,n,A=">"){const r=function(e,t,n=">"){let A=0;const r=e.length,i=n.charCodeAt(0),s=n.length>1?n.charCodeAt(1):-1;let o="",a=t;for(let l=t;l<r;l++){const t=e.charCodeAt(l);if(A)t===A&&(A=0);else if(34===t||39===t)A=t;else if(t===i){if(-1===s)return o+=e.substring(a,l),{data:o,index:l};if(e.charCodeAt(l+1)===s)return o+=e.substring(a,l),{data:o,index:l}}else 9!==t||A||(o+=e.substring(a,l)+" ",a=l+1)}}(e,t+1,A);if(!r)return;let i=r.data;const s=r.index,o=i.search(/\s/);let a=i,l=!0;-1!==o&&(a=i.substring(0,o),i=i.substring(o+1).trimStart());const c=a;if(n){const e=a.indexOf(":");-1!==e&&(a=a.substr(e+1),l=a!==r.data.substr(e+1))}return{tagName:a,tagExp:i,closeIndex:s,attrExpPresent:l,rawTagName:c}}function Jo(e,t,n){const A=n;let r=1;const i=e.length;for(;n<i;n++)if("<"===e[n]){const i=e.charCodeAt(n+1);if(47===i){const i=jo(e,">",n,`${t} is not closed`);if(e.substring(n+2,i).trim()===t&&(r--,0===r))return{tagContent:e.substring(A,n),i:i};n=i}else if(63===i){n=Qo(e,"?>",n+1,"StopNode is not closed.")}else if(33===i&&45===e.charCodeAt(n+2)&&45===e.charCodeAt(n+3)){n=Qo(e,"--\x3e",n+3,"StopNode is not closed.")}else if(33===i&&91===e.charCodeAt(n+2)){n=Qo(e,"]]>",n,"StopNode is not closed.")-2}else{const A=zo(e,n,!1);if(A){(A&&A.tagName)===t&&"/"!==A.tagExp[A.tagExp.length-1]&&r++,n=A.closeIndex}}}}function Ko(e,t,n){if(t&&"string"==typeof e){const t=e.trim();return"true"===t||"false"!==t&&mo(e,n)}return function(e){return void 0!==e}(e)?e:""}function qo(e,t,n,A){if(e){const A=e(t);n===t&&(n=A),t=A}return{tagName:t=Yo(t,A),tagExp:n}}function Yo(e,t){if(cs.includes(e))throw new Error(`[SECURITY] Invalid name: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`);return ls.includes(e)?t.onDangerousProperty(e):e}const Wo=zs.getMetaDataSymbol();function Xo(e,t){if(!e||"object"!=typeof e)return{};if(!t)return e;const n={};for(const A in e)if(A.startsWith(t)){n[A.substring(t.length)]=e[A]}else n[A]=e[A];return n}function Zo(e,t,n,A){return $o(e,t,n,A)}function $o(e,t,n,A){let r;const i={};for(let s=0;s<e.length;s++){const o=e[s],a=ea(o);if(void 0!==a&&a!==t.textNodeName){const e=Xo(o[":@"]||{},t.attributeNamePrefix);n.push(a,e)}if(a===t.textNodeName)void 0===r?r=o[a]:r+=""+o[a];else{if(void 0===a)continue;if(o[a]){let e=$o(o[a],t,n,A);const r=na(e,t);if(0===Object.keys(e).length&&t.alwaysCreateTextNode&&(e[t.textNodeName]=""),o[":@"]?ta(e,o[":@"],A,t):1!==Object.keys(e).length||void 0===e[t.textNodeName]||t.alwaysCreateTextNode?0===Object.keys(e).length&&(t.alwaysCreateTextNode?e[t.textNodeName]="":e=""):e=e[t.textNodeName],void 0!==o[Wo]&&"object"==typeof e&&null!==e&&(e[Wo]=o[Wo]),void 0!==i[a]&&Object.prototype.hasOwnProperty.call(i,a))Array.isArray(i[a])||(i[a]=[i[a]]),i[a].push(e);else{const n=t.jPath?A.toString():A;t.isArray(a,n,r)?i[a]=[e]:i[a]=e}void 0!==a&&a!==t.textNodeName&&n.pop()}}}return"string"==typeof r?r.length>0&&(i[t.textNodeName]=r):void 0!==r&&(i[t.textNodeName]=r),i}function ea(e){const t=Object.keys(e);for(let n=0;n<t.length;n++){const e=t[n];if(":@"!==e)return e}}function ta(e,t,n,A){if(t){const r=Object.keys(t),i=r.length;for(let s=0;s<i;s++){const i=r[s],o=i.startsWith(A.attributeNamePrefix)?i.substring(A.attributeNamePrefix.length):i,a=A.jPath?n.toString()+"."+o:n;A.isArray(i,a,!0,!0)?e[i]=[t[i]]:e[i]=t[i]}}}function na(e,t){const{textNodeName:n}=t,A=Object.keys(e).length;return 0===A||!(1!==A||!e[n]&&"boolean"!=typeof e[n]&&0!==e[n])}class Aa{constructor(e){this.externalEntities={},this.options=Qs(e)}parse(e,t){if("string"!=typeof e&&e.toString)e=e.toString();else if("string"!=typeof e)throw new Error("XML data is accepted in String or Bytes[] form.");if(t){!0===t&&(t={});const n=function(e,t){t=Object.assign({},us,t);const n=[];let A=!1,r=!1;"\ufeff"===e[0]&&(e=e.substr(1));for(let i=0;i<e.length;i++)if("<"===e[i]&&"?"===e[i+1]){if(i+=2,i=hs(e,i),i.err)return i}else{if("<"!==e[i]){if(fs(e[i]))continue;return vs("InvalidChar","char '"+e[i]+"' is not expected.",Ms(e,i))}{let s=i;if(i++,"!"===e[i]){i=ds(e,i);continue}{let o=!1;"/"===e[i]&&(o=!0,i++);let a="";for(;i<e.length&&">"!==e[i]&&" "!==e[i]&&"\t"!==e[i]&&"\n"!==e[i]&&"\r"!==e[i];i++)a+=e[i];if(a=a.trim(),"/"===a[a.length-1]&&(a=a.substring(0,a.length-1),i--),!_s(a)){let t;return t=0===a.trim().length?"Invalid space after '<'.":"Tag '"+a+"' is an invalid name.",vs("InvalidTag",t,Ms(e,i))}const l=gs(e,i);if(!1===l)return vs("InvalidAttr","Attributes for '"+a+"' have open quote.",Ms(e,i));let c=l.value;if(i=l.index,"/"===c[c.length-1]){const n=i-c.length;c=c.substring(0,c.length-1);const r=ys(c,t);if(!0!==r)return vs(r.err.code,r.err.msg,Ms(e,n+r.err.line));A=!0}else if(o){if(!l.tagClosed)return vs("InvalidTag","Closing tag '"+a+"' doesn't have proper closing.",Ms(e,i));if(c.trim().length>0)return vs("InvalidTag","Closing tag '"+a+"' can't have attributes or invalid starting.",Ms(e,s));if(0===n.length)return vs("InvalidTag","Closing tag '"+a+"' has not been opened.",Ms(e,s));{const t=n.pop();if(a!==t.tagName){let n=Ms(e,t.tagStartPos);return vs("InvalidTag","Expected closing tag '"+t.tagName+"' (opened in line "+n.line+", col "+n.col+") instead of closing tag '"+a+"'.",Ms(e,s))}0==n.length&&(r=!0)}}else{const o=ys(c,t);if(!0!==o)return vs(o.err.code,o.err.msg,Ms(e,i-c.length+o.err.line));if(!0===r)return vs("InvalidXml","Multiple possible root nodes found.",Ms(e,i));-1!==t.unpairedTags.indexOf(a)||n.push({tagName:a,tagStartPos:s}),A=!0}for(i++;i<e.length;i++)if("<"===e[i]){if("!"===e[i+1]){i++,i=ds(e,i);continue}if("?"!==e[i+1])break;if(i=hs(e,++i),i.err)return i}else if("&"===e[i]){const t=Bs(e,i);if(-1==t)return vs("InvalidChar","char '&' is not expected.",Ms(e,i));i=t}else if(!0===r&&!fs(e[i]))return vs("InvalidXml","Extra text at the end",Ms(e,i));"<"===e[i]&&i--}}}return A?1==n.length?vs("InvalidTag","Unclosed tag '"+n[0].tagName+"'.",Ms(e,n[0].tagStartPos)):!(n.length>0)||vs("InvalidXml","Invalid '"+JSON.stringify(n.map(e=>e.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):vs("InvalidXml","Start tag expected.",1)}(e,t);if(!0!==n)throw Error(`${n.err.msg}:${n.err.line}:${n.err.col}`)}const n=new Do(this.options,this.externalEntities),A=n.parseXml(e);return this.options.preserveOrder||void 0===A?A:Zo(A,this.options,n.matcher,n.readonlyMatcher)}addEntity(e,t){if(-1!==t.indexOf("&"))throw new Error("Entity value can't have '&'");if(-1!==e.indexOf("&")||-1!==e.indexOf(";"))throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '
'");if("&"===t)throw new Error("An entity with value '&' is not permitted");this.externalEntities[e]=t}static getMetaDataSymbol(){return zs.getMetaDataSymbol()}}function ra(e,t){if(t?._parser&&"fast-xml-parser"!==t._parser)throw new Error(t?._parser);const n=function(e,t){const n=new Aa({ignoreAttributes:!1,attributeNamePrefix:"",...t}),A=n.parse(e);return A}(e,{allowBooleanAttributes:!0,ignoreDeclaration:!0,removeNSPrefix:t?.removeNSPrefix,textNodeName:t?.textNodeName,isArray:(e,n,A,r)=>Boolean(t?.arrayPaths?.some(e=>n===e)),...t?._fastXML});return t?.uncapitalizeKeys?rs(n):n}const ia={dataType:null,batchType:null,name:"XML",id:"xml",module:"xml",version:"4.4.3",worker:!1,extensions:["xml"],mimeTypes:["application/xml","text/xml"],testText:function(e){return e.startsWith("<?xml")},options:{xml:{_parser:"fast-xml-parser",uncapitalizeKeys:!1,removeNSPrefix:!1,textNodeName:"value",arrayPaths:[]}},parse:async(e,t)=>ra((new TextDecoder).decode(e),{...ia.options.xml,...t?.xml}),parseTextSync:(e,t)=>ra(e,{...ia.options.xml,...t?.xml})};const sa={dataType:null,batchType:null,id:"wms-error",name:"WMS Error",module:"wms",version:"4.4.3",worker:!1,extensions:["xml"],mimeTypes:["application/vnd.ogc.se_xml","application/xml","text/xml"],testText:function(e){return e.startsWith("<?xml")},options:{wms:{throwOnError:!1}},parse:async(e,t)=>oa((new TextDecoder).decode(e),t),parseSync:(e,t)=>oa((new TextDecoder).decode(e),t),parseTextSync:(e,t)=>oa(e,t)};function oa(e,t){const n={...sa.options.wms,...t?.wms},A=function(e,t){const n=ia.parseTextSync?.(e,t),A=n?.ServiceExceptionReport?.ServiceException||n?.["ogc:ServiceExceptionReport"]?.["ogc:ServiceException"];return"string"==typeof A?A:A.value||A.code||"Unknown error"}(e,n),r=n.minimalErrors?A:`WMS Service error: ${A}`;if(n.throwOnError)throw new Error(r);return r}function aa(e){return Array.isArray(e)?e:e?[e]:[]}function la(e){const t=aa(e);return t.length>0&&t.every(e=>"string"==typeof e)?t:[]}function ca(e,t=void 0){switch(typeof e){case"number":return e;case"string":return parseFloat(e);default:return}}function ua(e,t=void 0){switch(typeof e){case"number":return e;case"string":return parseInt(e,10);default:return}}function fa(e){switch(e){case"true":case"1":return!0;default:return!1}}function ha(e,t){const n=ia.parseTextSync?.(e,t),A=n.WMT_MS_Capabilities||n.WMS_Capabilities||n,r=function(e){const t={version:String(e.version||""),name:String(e.Service?.Name||"unnamed"),title:e.Service?.Title?String(e.Service?.Title):void 0,abstract:e.Service?.Abstract?String(e.Service?.Abstract):void 0,keywords:la(e.Service?.KeywordList?.Keyword),fees:e.Service?.Fees?JSON.stringify(e.Service?.Fees):void 0,accessConstraints:e.Service?.AccessConstraints?JSON.stringify(e.Service?.AccessConstraints):void 0,layerLimit:ua(e.Service?.LayerLimit),maxWidth:ua(e.Service?.maxWidth),maxHeight:ua(e.Service?.maxHeight),layers:[],requests:da(e.Capability?.Request),exceptions:pa(e.Exception)},n=aa(e.Capability?.Layer);for(const A of n)t.layers.push(ma(A));for(const[A,r]of Object.entries(t))void 0===r&&delete t[A];return t}(A);if(t?.inheritedLayerProps)for(const i of r.layers)ga(i,null);return t?.includeRawJSON&&(r.json=A),t?.includeXMLText&&(r.xml=e),r}function da(e){const t={};for(const[n,A]of Object.entries(e||{})){const e=la(A?.Format);t[n]={mimeTypes:e}}return t}function pa(e){if(aa(e?.Format).length>0)return{mimeTypes:la(e)}}function ma(e){const t={title:String(e?.Title||""),name:e?.Name&&String(e?.Name),abstract:e?.Name&&String(e?.Abstract),keywords:la(e.KeywordList?.Keyword)},n=e?.CRS||e?.SRS;n&&Array.isArray(n)&&n.every(e=>"string"==typeof e)&&(t.crs=n);let A=e?.EX_GeographicBoundingBox&&function(e){const{westBoundLongitude:t,northBoundLatitude:n,eastBoundLongitude:A,southBoundLatitude:r}=e;return[[t,r],[A,n]]}(e?.EX_GeographicBoundingBox);A&&(t.geographicBoundingBox=A),A=e?.LatLonBoundingBox&&function(e){const{minx:t,miny:n,maxx:A,maxy:r}=e;return[[t,n],[A,r]]}(e?.LatLonBoundingBox),A&&(t.geographicBoundingBox=A);const r=e?.BoundingBox&&(i=e?.BoundingBox,aa(i).map(e=>function(e){const{CRS:t,SRS:n,minx:A,miny:r,maxx:i,maxy:s,resx:o,resy:a}=e,l={crs:t||n,boundingBox:[[ca(A),ca(r)],[ca(i),ca(s)]]};return o&&(l.xResolution=o),a&&(l.yResolution=a),l}(e)));var i;r&&r.length>0&&(t.boundingBoxes=r);const s=aa(e?.Dimension).map(e=>function(e){const{name:t,units:n,value:A}=e,r={name:t,units:n,extent:A};e.unitSymbol&&(r.unitSymbol=e.unitSymbol);e.default&&(r.defaultValue=e.default);e.multipleValues&&(r.multipleValues=fa(e.multipleValues));e.nearestValue&&(r.nearestValue=fa(e.nearestValue));e.current&&(r.current=fa(e.current));return r}(e));s.length&&(t.dimensions=s),e?.opaque&&(t.opaque=fa(e?.opaque)),e?.cascaded&&(t.cascaded=fa(e?.cascaded)),e?.queryable&&(t.queryable=fa(e?.queryable));const o=aa(e?.Layer),a=[];for(const l of o)a.push(ma(l));a.length>0&&(t.layers=a);for(const[l,c]of Object.entries(t))void 0===c&&delete t[l];return t}function ga(e,t){t?.geographicBoundingBox&&!e.geographicBoundingBox&&(e.geographicBoundingBox=[...t.geographicBoundingBox]),t?.crs&&!e.crs&&(e.crs=[...t.crs]),t?.boundingBoxes&&!e.boundingBoxes&&(e.boundingBoxes=[...t.boundingBoxes]),t?.dimensions&&!e.dimensions&&(e.dimensions=[...t.dimensions]);for(const n of e.layers||[])ga(n,e)}const ba={dataType:null,batchType:null,id:"wms-capabilities",name:"WMS Capabilities",module:"wms",version:"4.4.3",worker:!1,extensions:["xml"],mimeTypes:["application/vnd.ogc.wms_xml","application/xml","text/xml"],testText:function(e){return e.startsWith("<?xml")},options:{wms:{}},parse:async(e,t)=>ha((new TextDecoder).decode(e),t?.wms),parseTextSync:(e,t)=>ha(e,t?.wms)};function ya(e,t){const n=ia.parseTextSync?.(e,t),A=n.FeatureInfoResponse?.FIELDS||[];return{features:(Array.isArray(A)?A:[A]).map(e=>function(e){const t=e||{};return{attributes:t,type:"",bounds:{bottom:0,top:0,left:0,right:0}}}(e))}}const Ba={...ba,dataType:null,id:"wms-feature-info",name:"WMS FeatureInfo",parse:async(e,t)=>ya((new TextDecoder).decode(e),t),parseTextSync:(e,t)=>ya(e,t)};function va(e,t){const n=ia.parseTextSync?.(e,t);return n}const Ca={...ba,dataType:null,id:"wms-layer-description",name:"WMS DescribeLayer",parse:async(e,t)=>va((new TextDecoder).decode(e),t),parseTextSync:(e,t)=>va(e,t)},_a={name:"Web Map Service (OGC WMS)",id:"wms",module:"wms",version:"0.0.0",extensions:[],mimeTypes:[],type:"wms",fromUrl:!0,fromBlob:!1,defaultOptions:{wms:{}},testURL:e=>e.toLowerCase().includes("wms"),createDataSource:(e,t)=>new Ma(e,t)};class Ma extends m{substituteCRS84;flipCRS;wmsParameters;vendorParameters;capabilities=null;constructor(e,t){super(e,t,_a.defaultOptions),this.substituteCRS84=t.wms?.substituteCRS84??!1,this.flipCRS=["EPSG:4326"],this.wmsParameters={layers:void 0,query_layers:void 0,styles:void 0,version:"1.3.0",crs:"EPSG:4326",format:"image/png",info_format:"text/plain",transparent:void 0,time:void 0,elevation:void 0,...t.wmsParameters,...t.wms?.wmsParameters},this.vendorParameters=t.wms?.vendorParameters||t.vendorParameters||{}}async getMetadata(){const e=await this.getCapabilities();return this.normalizeMetadata(e)}async getImage(e){const{boundingBox:t,bbox:n,...A}=e,r={bbox:t?[...t[0],...t[1]]:n,...A};return await this.getMap(r)}normalizeMetadata(e){return e}async getCapabilities(e,t){const n=this.getCapabilitiesURL(e,t),A=await this.fetch(n),r=await A.arrayBuffer();this._checkResponse(A,r);const i=await ba.parse(r,this.loadOptions);return this.capabilities=i,i}async getMap(e,t){const A=this.getMapURL(e,t),r=await this.fetch(A),i=await r.arrayBuffer();this._checkResponse(r,i);try{return await n.ImageLoader.parse(i,this.loadOptions)}catch{throw this._parseError(i)}}async getFeatureInfo(e,t){const n=this.getFeatureInfoURL(e,t),A=await this.fetch(n),r=await A.arrayBuffer();return this._checkResponse(A,r),await Ba.parse(r,this.loadOptions)}async getFeatureInfoText(e,t){const n=this.getFeatureInfoURL(e,t),A=await this.fetch(n),r=await A.arrayBuffer();return this._checkResponse(A,r),(new TextDecoder).decode(r)}async describeLayer(e,t){const n=this.describeLayerURL(e,t),A=await this.fetch(n),r=await A.arrayBuffer();return this._checkResponse(A,r),await Ca.parse(r,this.loadOptions)}async getLegendGraphic(e,t){const A=this.getLegendGraphicURL(e,t),r=await this.fetch(A),i=await r.arrayBuffer();this._checkResponse(r,i);try{return await n.ImageLoader.parse(i,this.loadOptions)}catch{throw this._parseError(i)}}getCapabilitiesURL(e,t){const n={version:this.wmsParameters.version,...e};return this._getWMSUrl("GetCapabilities",n,t)}getMapURL(e,t){e=this._getWMS130Parameters(e);const n={version:this.wmsParameters.version,format:this.wmsParameters.format,transparent:this.wmsParameters.transparent,time:this.wmsParameters.time,elevation:this.wmsParameters.elevation,layers:this.wmsParameters.layers,styles:this.wmsParameters.styles,crs:this.wmsParameters.crs,...e};return this._getWMSUrl("GetMap",n,t)}getFeatureInfoURL(e,t){e=this._getWMS130Parameters(e);const{boundingBox:n,bbox:A}=e;e.bbox=n?[...n[0],...n[1]]:A;const r={version:this.wmsParameters.version,info_format:this.wmsParameters.info_format,layers:this.wmsParameters.layers,query_layers:this.wmsParameters.query_layers,styles:this.wmsParameters.styles,crs:this.wmsParameters.crs,...e};return this._getWMSUrl("GetFeatureInfo",r,t)}describeLayerURL(e,t){const n={version:this.wmsParameters.version,...e};return this._getWMSUrl("DescribeLayer",n,t)}getLegendGraphicURL(e,t){const n={version:this.wmsParameters.version,...e};return this._getWMSUrl("GetLegendGraphic",n,t)}_parseWMSUrl(e){const[t,n]=e.split("?"),A=n.split("&"),r={};for(const i of A){const[e,t]=i.split("=");r[e]=t}return{url:t,parameters:r}}_getWMSUrl(e,t,n){let A=this.url,r=!0;const i={service:"WMS",version:t.version,request:e,...t,...this.vendorParameters,...n},s=["transparent","time","elevation"];for(const[o,a]of Object.entries(i))s.includes(o)&&!a||(A+=r?"?":"&",r=!1,A+=this._getURLParameter(o,a,t));return encodeURI(A)}_getWMS130Parameters(e){const t={...e};return t.srs&&(t.crs=t.crs||t.srs,delete t.srs),t}_getURLParameter(e,t,n){switch(e){case"crs":"1.3.0"!==n.version?e="srs":this.substituteCRS84&&"EPSG:4326"===t&&(t="CRS:84");break;case"srs":"1.3.0"===n.version&&(e="crs");break;case"bbox":const A=this._flipBoundingBox(t,n);A&&(t=A);break;case"x":"1.3.0"===n.version&&(e="i");break;case"y":"1.3.0"===n.version&&(e="j")}return e=e.toUpperCase(),Array.isArray(t)?`${e}=${t.join(",")}`:`${e}=${t?String(t):""}`}_flipBoundingBox(e,t){if(!Array.isArray(e)||4!==e.length)return null;const n=e;return"1.3.0"===t.version&&this.flipCRS.includes(t.crs||"")&&!(this.substituteCRS84&&"EPSG:4326"===t.crs)?[n[1],n[0],n[3],n[2]]:n}async _fetchArrayBuffer(e){const t=await this.fetch(e),n=await t.arrayBuffer();return this._checkResponse(t,n),n}_checkResponse(e,n){const A=e.headers["content-type"];if(!e.ok||sa.mimeTypes.includes(A)){const e=t.mergeOptions(this.loadOptions,{wms:{throwOnError:!0}}),A=sa.parseSync?.(n,e);throw new Error(A)}}_parseError(e){const t=sa.parseSync?.(e,this.options.core?.loadOptions);return new Error(t)}}const wa=6378137*Math.PI;function Ta(e){const n=t.lngLatToWorld(e);return n[0]=(n[0]/256-1)*wa,n[1]=(n[1]/256-1)*wa,n}const Ea={id:"imagery-layer",data:"",serviceType:"auto",srs:"auto",layers:{type:"array",compare:!0,value:[]},onMetadataLoad:{type:"function",value:()=>{}},onMetadataLoadError:{type:"function",value:console.error},onImageLoadStart:{type:"function",value:()=>{}},onImageLoad:{type:"function",value:()=>{}},onImageLoadError:{type:"function",compare:!1,value:(e,t)=>console.error(t,e)}};class xa extends e.CompositeLayer{get isLoaded(){return 0===this.state?.loadCounter&&super.isLoaded}shouldUpdateState(){return!0}initializeState(){this.state._nextRequestId=0,this.state.lastRequestId=-1,this.state.loadCounter=0}updateState({changeFlags:e,props:n,oldProps:A}){const{viewport:r}=this.context;e.dataChanged||n.serviceType!==A.serviceType?(this.state.imageSource=this._createImageSource(n),this._loadMetadata(),this.debounce(()=>this.loadImage(r,"image source changed"),0)):t.deepEqual(n.layers,A.layers,1)?e.viewportChanged&&this.debounce(()=>this.loadImage(r,"viewport changed")):this.debounce(()=>this.loadImage(r,"layers changed"),0)}finalizeState(){}renderLayers(){const{bounds:n,image:A,lastRequestParameters:r}=this.state;return A&&new e.BitmapLayer({...this.getSubLayerProps({id:"bitmap"}),_imageCoordinateSystem:"EPSG:4326"===r.srs?t.COORDINATE_SYSTEM.LNGLAT:t.COORDINATE_SYSTEM.CARTESIAN,bounds:n,image:A})}async getFeatureInfoText(e,t){const{lastRequestParameters:n}=this.state;if(n){return await(this.state.imageSource.getFeatureInfoText?.({...n,query_layers:n.layers,x:e,y:t,info_format:"application/vnd.ogc.gml"}))}return""}_createImageSource(e){if(e.data instanceof g)return e.data;if("string"==typeof e.data)return function(e,t,n){const A=n?.core?.type||n.type||"auto",r="auto"===A?function(e,t){for(const n of t)if(n.testURL&&n.testURL(e))return n;return null}(e,t):function(e,t){for(const n of t)if(n.type===e)return n;return null}(A,t);if(!r)throw new Error("Not a valid source type");return r.createDataSource(e,n)}(e.data,[_a],{core:{type:e.serviceType,loadOptions:e.loadOptions}});throw new Error("invalid image source in props.data")}async _loadMetadata(){const{imageSource:e}=this.state;try{this.state.loadCounter++;const t=await e.getMetadata();this.state.imageSource===e&&this.getCurrentLayer()?.props.onMetadataLoad(t)}catch(t){this.getCurrentLayer()?.props.onMetadataLoadError(t)}finally{this.state.loadCounter--}}async loadImage(e,t){const{layers:n,serviceType:A}=this.props;if("wms"===A&&0===n.length)return;const r=e.getBounds(),{width:i,height:s}=e,o=this.getRequestId();let{srs:a}=this.props;"auto"===a&&(a=e.resolution?"EPSG:4326":"EPSG:3857");const l={width:i,height:s,boundingBox:[[r[0],r[1]],[r[2],r[3]]],layers:n,crs:a};if("EPSG:3857"===a){const e=Ta([r[0],r[1]]),t=Ta([r[2],r[3]]);l.boundingBox=[e,t]}try{this.state.loadCounter++,this.props.onImageLoadStart(o);const e=await this.state.imageSource.getImage(l);this.state.lastRequestId<o&&(this.getCurrentLayer()?.props.onImageLoad(o),this.setState({image:e,bounds:r,lastRequestParameters:l,lastRequestId:o}))}catch(c){this.raiseError(c,"Load image"),this.getCurrentLayer()?.props.onImageLoadError(o,c)}finally{this.state.loadCounter--}}getRequestId(){return this.state._nextRequestId++}debounce(e,t=500){clearTimeout(this.state._timeoutId),this.state._timeoutId=setTimeout(()=>e(),t)}}xa.layerName="WMSLayer",xa.defaultProps=Ea;class Sa extends e.ArcLayer{}Sa.layerName="GreatCircleLayer",Sa.defaultProps={getHeight:{type:"accessor",value:0},greatCircle:!0};var Ia,Ra={exports:{}};var La,Da,Pa,Fa=(Ia||(Ia=1,
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./geojson-layer-wtQbiowp.cjs"),t=require("./webgl-developer-tools-DyDR0yGE.cjs"),n=require("./globe-viewport-BD9L086Z.cjs"),A=require("./sdk-controller-5LmYQQhJ.cjs"),r=require("./webgl-device-DikFjUoh.cjs");async function i(e,t,n,A){return A._parse(e,t,n,A)}globalThis.probe={};const s=new t.ProbeLog({id:"@probe.gl/log"});const o={};function a(e={}){const t=e.useLocalLibraries??e.core?.useLocalLibraries,n=e.CDN??e.core?.CDN,A=e.modules;return{...void 0!==t?{useLocalLibraries:t}:{},...void 0!==n?{CDN:n}:{},...void 0!==A?{modules:A}:{}}}async function l(e,n=null,A={},r=null){return n&&(e=function(e,n,A={},r=null){if(A?.core)throw new Error("loadLibrary: options.core must be pre-normalized");if(!A.useLocalLibraries&&e.startsWith("http"))return e;r=r||e;const i=A.modules||{};if(i[r])return i[r];if(!t.isBrowser$2)return`modules/${n}/dist/libs/${r}`;if(A.CDN)return t.assert$2(A.CDN.startsWith("http")),`${A.CDN}/${n}@${t.VERSION}/dist/libs/${r}`;if(t.isWorker)return`../src/libs/${r}`;return`modules/${n}/src/libs/${r}`}(e,n,A,r)),o[e]=o[e]||async function(e){if(e.endsWith("wasm"))return await async function(e){const{readFileAsArrayBuffer:n}=globalThis.loaders||{};if(t.isBrowser$2||!n||e.startsWith("http")){const t=await fetch(e);return await t.arrayBuffer()}try{return await n(e)}catch{if(e.includes("/dist/libs/"))return await n(e.replace("/dist/libs/","/src/libs/"));throw new Error(`Failed to load ArrayBuffer from ${e}`)}}(e);if(!t.isBrowser$2){const{requireFromFile:t}=globalThis.loaders||{};try{const n=await(t?.(e));return n||!e.includes("/dist/libs/")?n:await(t?.(e.replace("/dist/libs/","/src/libs/")))}catch(A){if(e.includes("/dist/libs/"))try{return await(t?.(e.replace("/dist/libs/","/src/libs/")))}catch{}return console.error(A),null}}if(t.isWorker)return importScripts(e);const n=await async function(e){const{readFileAsText:n}=globalThis.loaders||{};if(t.isBrowser$2||!n||e.startsWith("http")){const t=await fetch(e);return await t.text()}try{return await n(e)}catch{if(e.includes("/dist/libs/"))return await n(e.replace("/dist/libs/","/src/libs/"));throw new Error(`Failed to load text from ${e}`)}}(e);return function(e,n){if(!t.isBrowser$2){const{requireFromString:t}=globalThis.loaders||{};return t?.(e,n)}if(t.isWorker)return eval.call(globalThis,e),null;const A=document.createElement("script");A.id=n;try{A.appendChild(document.createTextNode(e))}catch(VA){A.text=e}return document.body.appendChild(A),null}(n,e)}(e),await o[e]}function c(e,t,n){if(e.byteLength<=t+n)return"";const A=new DataView(e);let r="";for(let i=0;i<n;i++)r+=String.fromCharCode(A.getUint8(t+i));return r}function u(e){try{return JSON.parse(e)}catch(t){throw new Error(`Failed to parse JSON from data starting with "${function(e,t=5){if("string"==typeof e)return e.slice(0,t);if(ArrayBuffer.isView(e))return c(e.buffer,e.byteOffset,t);if(e instanceof ArrayBuffer)return c(e,0,t);return""}(e)}"`)}}function f(e,n){return t.assert(e>=0),t.assert(n>0),e+(n-1)&-4}function h(e,t,n){let A;if(e instanceof ArrayBuffer)A=new Uint8Array(e);else{const t=e.byteOffset,n=e.byteLength;A=new Uint8Array(e.buffer||e.arrayBuffer,t,n)}return t.set(A,n),n+f(A.byteLength,4)}const d={id:"request-scheduler",throttleRequests:!0,maxRequests:6,debounceTime:0};class p{props;stats;activeRequestCount=0;requestQueue=[];requestMap=new Map;updateTimer=null;constructor(e={}){this.props={...d,...e},this.stats=new t.Stats({id:this.props.id}),this.stats.get("Queued Requests"),this.stats.get("Active Requests"),this.stats.get("Cancelled Requests"),this.stats.get("Queued Requests Ever"),this.stats.get("Active Requests Ever")}setProps(e){void 0!==e.throttleRequests&&(this.props.throttleRequests=e.throttleRequests),void 0!==e.maxRequests&&(this.props.maxRequests=e.maxRequests),void 0!==e.debounceTime&&(this.props.debounceTime=e.debounceTime)}scheduleRequest(e,t=()=>0){if(!this.props.throttleRequests)return Promise.resolve({done:()=>{}});if(this.requestMap.has(e))return this.requestMap.get(e);const n={handle:e,priority:0,getPriority:t},A=new Promise(e=>(n.resolve=e,n));return this.requestQueue.push(n),this.requestMap.set(e,A),this._issueNewRequests(),A}_issueRequest(e){const{handle:t,resolve:n}=e;let A=!1;const r=()=>{A||(A=!0,this.requestMap.delete(t),this.activeRequestCount--,this._issueNewRequests())};return this.activeRequestCount++,n?n({done:r}):Promise.resolve({done:r})}_issueNewRequests(){null!==this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(()=>this._issueNewRequestsAsync(),this.props.debounceTime)}_issueNewRequestsAsync(){null!==this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=null;const e=Math.max(this.props.maxRequests-this.activeRequestCount,0);if(0!==e){this._updateAllRequests();for(let t=0;t<e;++t){const e=this.requestQueue.shift();e&&this._issueRequest(e)}}}_updateAllRequests(){const e=this.requestQueue;for(let t=0;t<e.length;++t){const n=e[t];this._updateRequest(n)||(e.splice(t,1),this.requestMap.delete(n.handle),t--)}e.sort((e,t)=>e.priority-t.priority)}_updateRequest(e){return e.priority=e.getPriority(e.handle),!(e.priority<0)||(e.resolve(null),!1)}}class m{static defaultOptions={core:{type:"auto",attributions:[],loadOptions:{},loaders:[]}};optionsType;options;data;url;loadOptions;fetch;_needsRefresh=!0;constructor(e,n,A){this.options=A?t.mergeOptions({...A,core:m.defaultOptions},n):{...n},this.data=e,this.url="string"==typeof e?t.resolvePath(e):"",this.loadOptions=function(e){const t={...e};e?.core&&(t.core={...e.core});const n="string"==typeof t.baseUri?t.baseUri:void 0,A="string"==typeof t.baseUrl?t.baseUrl:void 0;void 0===n&&void 0===A||(t.core||={},void 0===t.core.baseUrl&&(t.core.baseUrl=A??n),delete t.baseUri,delete t.baseUrl);return t}(this.options.core?.loadOptions),this.fetch=function(e){const t=e?.core?.fetch;if(t&&"function"==typeof t)return(e,n)=>t(e,n);const n=e?.fetch;if(n&&"function"!=typeof n)return e=>fetch(e,n);return e=>fetch(e)}(this.loadOptions)}setProps(e){this.options=Object.assign(this.options,e),this.setNeedsRefresh()}setNeedsRefresh(){this._needsRefresh=!0}getNeedsRefresh(e=!0){const t=this._needsRefresh;return e&&(this._needsRefresh=!1),t}}class g{static type="template";static testURL=e=>!1}function b(e,t,n){const A=function(e){switch(e.constructor){case Int8Array:return"int8";case Uint8Array:case Uint8ClampedArray:return"uint8";case Int16Array:return"int16";case Uint16Array:return"uint16";case Int32Array:return"int32";case Uint32Array:return"uint32";case Float32Array:return"float32";case Float64Array:return"float64";default:return"null"}}(t.value),r=n||function(e){const t={};"byteOffset"in e&&(t.byteOffset=e.byteOffset.toString(10));"byteStride"in e&&(t.byteStride=e.byteStride.toString(10));"normalized"in e&&(t.normalized=e.normalized.toString());return t}(t);return{name:e,type:{type:"fixed-size-list",listSize:t.size,children:[{name:"value",type:A}]},nullable:!1,metadata:r}}const y={};function B(e){if(void 0===y[e]){const n=t.isBrowser?function(e){switch(e){case"image/avif":case"image/webp":return function(e){try{const t=document.createElement("canvas");return 0===t.toDataURL(e).indexOf(`data:${e}`)}catch{return!1}}(e);default:return!0}}(e):function(e){const t=["image/png","image/jpeg","image/gif"],n=globalThis.loaders?.imageFormatsNode||t,A=globalThis.loaders?.parseImageNode;return Boolean(A)&&n.includes(e)}(e);y[e]=n}return y[e]}class v extends t.Vector{constructor(e=0,n=0){super(2),t.isArray(e)&&1===arguments.length?this.copy(e):(t.config.debug&&(t.checkNumber(e),t.checkNumber(n)),this[0]=e,this[1]=n)}set(e,t){return this[0]=e,this[1]=t,this.check()}copy(e){return this[0]=e[0],this[1]=e[1],this.check()}fromObject(e){return t.config.debug&&(t.checkNumber(e.x),t.checkNumber(e.y)),this[0]=e.x,this[1]=e.y,this.check()}toObject(e){return e.x=this[0],e.y=this[1],e}get ELEMENTS(){return 2}horizontalAngle(){return Math.atan2(this.y,this.x)}verticalAngle(){return Math.atan2(this.x,this.y)}transform(e){return this.transformAsPoint(e)}transformAsPoint(e){return t.transformMat4$1(this,this,e),this.check()}transformAsVector(e){return t.vec2_transformMat4AsVector(this,this,e),this.check()}transformByMatrix3(e){return t.transformMat3(this,this,e),this.check()}transformByMatrix2x3(e){return t.transformMat2d(this,this,e),this.check()}transformByMatrix2(e){return t.transformMat2(this,this,e),this.check()}}let C;class _ extends t.Vector{static get ZERO(){return C||(C=new _(0,0,0,0),Object.freeze(C)),C}constructor(e=0,n=0,A=0,r=0){super(-0,-0,-0,-0),t.isArray(e)&&1===arguments.length?this.copy(e):(t.config.debug&&(t.checkNumber(e),t.checkNumber(n),t.checkNumber(A),t.checkNumber(r)),this[0]=e,this[1]=n,this[2]=A,this[3]=r)}set(e,t,n,A){return this[0]=e,this[1]=t,this[2]=n,this[3]=A,this.check()}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this.check()}fromObject(e){return t.config.debug&&(t.checkNumber(e.x),t.checkNumber(e.y),t.checkNumber(e.z),t.checkNumber(e.w)),this[0]=e.x,this[1]=e.y,this[2]=e.z,this[3]=e.w,this}toObject(e){return e.x=this[0],e.y=this[1],e.z=this[2],e.w=this[3],e}get ELEMENTS(){return 4}get z(){return this[2]}set z(e){this[2]=t.checkNumber(e)}get w(){return this[3]}set w(e){this[3]=t.checkNumber(e)}transform(e){return t.transformMat4$2(this,this,e),this.check()}transformByMatrix3(e){return t.vec4_transformMat3(this,this,e),this.check()}transformByMatrix2(e){return t.vec4_transformMat2(this,this,e),this.check()}transformByQuaternion(e){return t.transformQuat(this,this,e),this.check()}applyMatrix4(e){return e.transform(this,this),this}}function M(e,t,n){const A=t[0],r=t[1],i=t[2],s=t[3],o=t[4],a=t[5],l=t[6],c=t[7],u=t[8],f=n[0],h=n[1],d=n[2],p=n[3],m=n[4],g=n[5],b=n[6],y=n[7],B=n[8];return e[0]=f*A+h*s+d*l,e[1]=f*r+h*o+d*c,e[2]=f*i+h*a+d*u,e[3]=p*A+m*s+g*l,e[4]=p*r+m*o+g*c,e[5]=p*i+m*a+g*u,e[6]=b*A+y*s+B*l,e[7]=b*r+y*o+B*c,e[8]=b*i+y*a+B*u,e}function w(e,t,n){const A=n[0],r=n[1];return e[0]=A*t[0],e[1]=A*t[1],e[2]=A*t[2],e[3]=r*t[3],e[4]=r*t[4],e[5]=r*t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}var T;!function(e){e[e.COL0ROW0=0]="COL0ROW0",e[e.COL0ROW1=1]="COL0ROW1",e[e.COL0ROW2=2]="COL0ROW2",e[e.COL1ROW0=3]="COL1ROW0",e[e.COL1ROW1=4]="COL1ROW1",e[e.COL1ROW2=5]="COL1ROW2",e[e.COL2ROW0=6]="COL2ROW0",e[e.COL2ROW1=7]="COL2ROW1",e[e.COL2ROW2=8]="COL2ROW2"}(T||(T={}));const E=Object.freeze([1,0,0,0,1,0,0,0,1]);class x extends t.Matrix{static get IDENTITY(){return function(){I||(I=new x,Object.freeze(I));return I}()}static get ZERO(){return function(){S||(S=new x([0,0,0,0,0,0,0,0,0]),Object.freeze(S));return S}()}get ELEMENTS(){return 9}get RANK(){return 3}get INDICES(){return T}constructor(e,...t){super(-0,-0,-0,-0,-0,-0,-0,-0,-0),1===arguments.length&&Array.isArray(e)?this.copy(e):t.length>0?this.copy([e,...t]):this.identity()}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this[4]=e[4],this[5]=e[5],this[6]=e[6],this[7]=e[7],this[8]=e[8],this.check()}identity(){return this.copy(E)}fromObject(e){return this.check()}fromQuaternion(e){return function(e,t){const n=t[0],A=t[1],r=t[2],i=t[3],s=n+n,o=A+A,a=r+r,l=n*s,c=A*s,u=A*o,f=r*s,h=r*o,d=r*a,p=i*s,m=i*o,g=i*a;e[0]=1-u-d,e[3]=c-g,e[6]=f+m,e[1]=c+g,e[4]=1-l-d,e[7]=h-p,e[2]=f-m,e[5]=h+p,e[8]=1-l-u}(this,e),this.check()}set(e,t,n,A,r,i,s,o,a){return this[0]=e,this[1]=t,this[2]=n,this[3]=A,this[4]=r,this[5]=i,this[6]=s,this[7]=o,this[8]=a,this.check()}setRowMajor(e,t,n,A,r,i,s,o,a){return this[0]=e,this[1]=A,this[2]=s,this[3]=t,this[4]=r,this[5]=o,this[6]=n,this[7]=i,this[8]=a,this.check()}determinant(){return function(e){const t=e[0],n=e[1],A=e[2],r=e[3],i=e[4],s=e[5],o=e[6],a=e[7],l=e[8];return t*(l*i-s*a)+n*(-l*r+s*o)+A*(a*r-i*o)}(this)}transpose(){return function(e,t){if(e===t){const n=t[1],A=t[2],r=t[5];e[1]=t[3],e[2]=t[6],e[3]=n,e[5]=t[7],e[6]=A,e[7]=r}else e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8]}(this,this),this.check()}invert(){return function(e,t){const n=t[0],A=t[1],r=t[2],i=t[3],s=t[4],o=t[5],a=t[6],l=t[7],c=t[8],u=c*s-o*l,f=-c*i+o*a,h=l*i-s*a;let d=n*u+A*f+r*h;d&&(d=1/d,e[0]=u*d,e[1]=(-c*A+r*l)*d,e[2]=(o*A-r*s)*d,e[3]=f*d,e[4]=(c*n-r*a)*d,e[5]=(-o*n+r*i)*d,e[6]=h*d,e[7]=(-l*n+A*a)*d,e[8]=(s*n-A*i)*d)}(this,this),this.check()}multiplyLeft(e){return M(this,e,this),this.check()}multiplyRight(e){return M(this,this,e),this.check()}rotate(e){return function(e,t,n){const A=t[0],r=t[1],i=t[2],s=t[3],o=t[4],a=t[5],l=t[6],c=t[7],u=t[8],f=Math.sin(n),h=Math.cos(n);e[0]=h*A+f*s,e[1]=h*r+f*o,e[2]=h*i+f*a,e[3]=h*s-f*A,e[4]=h*o-f*r,e[5]=h*a-f*i,e[6]=l,e[7]=c,e[8]=u}(this,this,e),this.check()}scale(e){return Array.isArray(e)?w(this,this,e):w(this,this,[e,e]),this.check()}translate(e){return function(e,t,n){const A=t[0],r=t[1],i=t[2],s=t[3],o=t[4],a=t[5],l=t[6],c=t[7],u=t[8],f=n[0],h=n[1];e[0]=A,e[1]=r,e[2]=i,e[3]=s,e[4]=o,e[5]=a,e[6]=f*A+h*s+l,e[7]=f*r+h*o+c,e[8]=f*i+h*a+u}(this,this,e),this.check()}transform(e,n){let A;switch(e.length){case 2:A=t.transformMat3(n||[-0,-0],e,this);break;case 3:A=t.transformMat3$1(n||[-0,-0,-0],e,this);break;case 4:A=t.vec4_transformMat3(n||[-0,-0,-0,-0],e,this);break;default:throw new Error("Illegal vector")}return t.checkVector(A,e.length),A}transformVector(e,t){return this.transform(e,t)}transformVector2(e,t){return this.transform(e,t)}transformVector3(e,t){return this.transform(e,t)}}let S,I=null;function R(){const e=new t.ARRAY_TYPE(4);return t.ARRAY_TYPE!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function L(e,t,n){n*=.5;const A=Math.sin(n);return e[0]=A*t[0],e[1]=A*t[1],e[2]=A*t[2],e[3]=Math.cos(n),e}function D(e,t,n){const A=t[0],r=t[1],i=t[2],s=t[3],o=n[0],a=n[1],l=n[2],c=n[3];return e[0]=A*c+s*o+r*l-i*a,e[1]=r*c+s*a+i*o-A*l,e[2]=i*c+s*l+A*a-r*o,e[3]=s*c-A*o-r*a-i*l,e}function P(e,n,A,r){const i=n[0],s=n[1],o=n[2],a=n[3];let l,c,u,f,h,d=A[0],p=A[1],m=A[2],g=A[3];return l=i*d+s*p+o*m+a*g,l<0&&(l=-l,d=-d,p=-p,m=-m,g=-g),1-l>t.EPSILON?(c=Math.acos(l),h=Math.sin(c),u=Math.sin((1-r)*c)/h,f=Math.sin(r*c)/h):(u=1-r,f=r),e[0]=u*i+f*d,e[1]=u*s+f*p,e[2]=u*o+f*m,e[3]=u*a+f*g,e}function F(e,t){const n=t[0]+t[4]+t[8];let A;if(n>0)A=Math.sqrt(n+1),e[3]=.5*A,A=.5/A,e[0]=(t[5]-t[7])*A,e[1]=(t[6]-t[2])*A,e[2]=(t[1]-t[3])*A;else{let n=0;t[4]>t[0]&&(n=1),t[8]>t[3*n+n]&&(n=2);const r=(n+1)%3,i=(n+2)%3;A=Math.sqrt(t[3*n+n]-t[3*r+r]-t[3*i+i]+1),e[n]=.5*A,A=.5/A,e[3]=(t[3*r+i]-t[3*i+r])*A,e[r]=(t[3*r+n]+t[3*n+r])*A,e[i]=(t[3*i+n]+t[3*n+i])*A}return e}const N=t.add,O=t.scale,U=t.dot,k=t.lerp$2,G=t.length,V=t.squaredLength,H=t.normalize$1,Q=function(){const e=t.create(),n=t.fromValues(1,0,0),A=t.fromValues(0,1,0);return function(r,i,s){const o=t.dot$1(i,s);return o<-.999999?(t.cross(e,n,i),t.len(e)<1e-6&&t.cross(e,A,i),t.normalize(e,e),L(r,e,Math.PI),r):o>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(t.cross(e,i,s),r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=1+o,H(r,r))}}();!function(){const e=R(),t=R()}(),function(){const e=function(){const e=new t.ARRAY_TYPE(9);return t.ARRAY_TYPE!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}()}();const j=[0,0,0,1];class z extends t.MathArray{constructor(e=0,t=0,n=0,A=1){super(-0,-0,-0,-0),Array.isArray(e)&&1===arguments.length?this.copy(e):this.set(e,t,n,A)}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this.check()}set(e,t,n,A){return this[0]=e,this[1]=t,this[2]=n,this[3]=A,this.check()}fromObject(e){return this[0]=e.x,this[1]=e.y,this[2]=e.z,this[3]=e.w,this.check()}fromMatrix3(e){return F(this,e),this.check()}fromAxisRotation(e,t){return L(this,e,t),this.check()}identity(){var e;return(e=this)[0]=0,e[1]=0,e[2]=0,e[3]=1,this.check()}setAxisAngle(e,t){return this.fromAxisRotation(e,t)}get ELEMENTS(){return 4}get x(){return this[0]}set x(e){this[0]=t.checkNumber(e)}get y(){return this[1]}set y(e){this[1]=t.checkNumber(e)}get z(){return this[2]}set z(e){this[2]=t.checkNumber(e)}get w(){return this[3]}set w(e){this[3]=t.checkNumber(e)}len(){return G(this)}lengthSquared(){return V(this)}dot(e){return U(this,e)}rotationTo(e,t){return Q(this,e,t),this.check()}add(e){return N(this,this,e),this.check()}calculateW(){return function(e,t){const n=t[0],A=t[1],r=t[2];e[0]=n,e[1]=A,e[2]=r,e[3]=Math.sqrt(Math.abs(1-n*n-A*A-r*r))}(this,this),this.check()}conjugate(){return function(e,t){e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3]}(this,this),this.check()}invert(){return function(e,t){const n=t[0],A=t[1],r=t[2],i=t[3],s=n*n+A*A+r*r+i*i,o=s?1/s:0;e[0]=-n*o,e[1]=-A*o,e[2]=-r*o,e[3]=i*o}(this,this),this.check()}lerp(e,t,n){return void 0===n?this.lerp(this,e,t):(k(this,e,t,n),this.check())}multiplyRight(e){return D(this,this,e),this.check()}multiplyLeft(e){return D(this,e,this),this.check()}normalize(){const e=this.len(),t=e>0?1/e:0;return this[0]=this[0]*t,this[1]=this[1]*t,this[2]=this[2]*t,this[3]=this[3]*t,0===e&&(this[3]=1),this.check()}rotateX(e){return function(e,t,n){n*=.5;const A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);e[0]=A*a+s*o,e[1]=r*a+i*o,e[2]=i*a-r*o,e[3]=s*a-A*o}(this,this,e),this.check()}rotateY(e){return function(e,t,n){n*=.5;const A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);e[0]=A*a-i*o,e[1]=r*a+s*o,e[2]=i*a+A*o,e[3]=s*a-r*o}(this,this,e),this.check()}rotateZ(e){return function(e,t,n){n*=.5;const A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);e[0]=A*a+r*o,e[1]=r*a-A*o,e[2]=i*a+s*o,e[3]=s*a-i*o}(this,this,e),this.check()}scale(e){return O(this,this,e),this.check()}slerp(e,t,n){let A,r,i;switch(arguments.length){case 1:({start:A=j,target:r,ratio:i}=e);break;case 2:A=this,r=e,i=t;break;default:A=e,r=t,i=n}return P(this,A,r,i),this.check()}transformVector4(e,n=new _){return t.transformQuat$1(n,e,this),t.checkVector(n,4)}lengthSq(){return this.lengthSquared()}setFromAxisAngle(e,t){return this.setAxisAngle(e,t)}premultiply(e){return this.multiplyLeft(e)}multiply(e){return this.multiplyRight(e)}}const J={props:{},uniforms:{},name:"skin",bindingLayout:[{name:"skin",group:0}],dependencies:[],source:"\nstruct skinUniforms {\n jointMatrix: array<mat4x4<f32>, 20>,\n};\n\n@group(0) @binding(auto) var<uniform> skin: skinUniforms;\n\nfn getSkinMatrix(weights: vec4f, joints: vec4u) -> mat4x4<f32> {\n return (weights.x * skin.jointMatrix[joints.x])\n + (weights.y * skin.jointMatrix[joints.y])\n + (weights.z * skin.jointMatrix[joints.z])\n + (weights.w * skin.jointMatrix[joints.w]);\n}\n",vs:"\nlayout(std140) uniform skinUniforms {\n mat4 jointMatrix[SKIN_MAX_JOINTS];\n} skin;\n\nmat4 getSkinMatrix(vec4 weights, uvec4 joints) {\n return (weights.x * skin.jointMatrix[joints.x])\n + (weights.y * skin.jointMatrix[joints.y])\n + (weights.z * skin.jointMatrix[joints.z])\n + (weights.w * skin.jointMatrix[joints.w]);\n}\n\n",fs:"",defines:{SKIN_MAX_JOINTS:20},getUniforms:(e={},n)=>{const{scenegraphsFromGLTF:A}=e;if(!A?.gltf?.skins?.[0])return{jointMatrix:[]};const{inverseBindMatrices:r,joints:i,skeleton:s}=A.gltf.skins[0],o=[],a=r.value.length/16;for(let f=0;f<a;f++){const e=r.value.subarray(16*f,16*f+16);o.push(new t.Matrix4(Array.from(e)))}const l=A.gltfNodeIndexToNodeMap.get(s),c={};l.preorderTraversal((e,{worldMatrix:t})=>{c[e.id]=t});const u=new Float32Array(320);for(let f=0;f<20;++f){const e=i[f];if(void 0===e)break;const n=c[A.gltfNodeIndexToNodeMap.get(e).id],r=o[f],s=(new t.Matrix4).copy(n).multiplyRight(r),a=16*f;for(let t=0;t<16;t++)u[a+t]=s[t]}return{jointMatrix:u}},uniformTypes:{jointMatrix:["mat4x4<f32>",20]}},K="#ifdef USE_IBL\nuniform samplerCube pbr_diffuseEnvSampler;\nuniform samplerCube pbr_specularEnvSampler;\nuniform sampler2D pbr_brdfLUT;\n#endif\n",q={name:"ibl",firstBindingSlot:32,bindingLayout:[{name:"pbr_diffuseEnvSampler",group:2},{name:"pbr_specularEnvSampler",group:2},{name:"pbr_brdfLUT",group:2}],source:"#ifdef USE_IBL\n@group(2) @binding(auto) var pbr_diffuseEnvSampler: texture_cube<f32>;\n@group(2) @binding(auto) var pbr_diffuseEnvSamplerSampler: sampler;\n@group(2) @binding(auto) var pbr_specularEnvSampler: texture_cube<f32>;\n@group(2) @binding(auto) var pbr_specularEnvSamplerSampler: sampler;\n@group(2) @binding(auto) var pbr_brdfLUT: texture_2d<f32>;\n@group(2) @binding(auto) var pbr_brdfLUTSampler: sampler;\n#endif\n",vs:K,fs:K},Y="layout(std140) uniform pbrProjectionUniforms {\n mat4 modelViewProjectionMatrix;\n mat4 modelMatrix;\n mat4 normalMatrix;\n vec3 camera;\n} pbrProjection;\n",W={name:"pbrProjection",bindingLayout:[{name:"pbrProjection",group:0}],source:"struct pbrProjectionUniforms {\n modelViewProjectionMatrix: mat4x4<f32>,\n modelMatrix: mat4x4<f32>,\n normalMatrix: mat4x4<f32>,\n camera: vec3<f32>\n};\n\n@group(0) @binding(auto) var<uniform> pbrProjection: pbrProjectionUniforms;\n",vs:Y,fs:Y,getUniforms:e=>e,uniformTypes:{modelViewProjectionMatrix:"mat4x4<f32>",modelMatrix:"mat4x4<f32>",normalMatrix:"mat4x4<f32>",camera:"vec3<f32>"}},X={props:{},uniforms:{},defaultUniforms:{unlit:!1,baseColorMapEnabled:!1,baseColorFactor:[1,1,1,1],normalMapEnabled:!1,normalScale:1,emissiveMapEnabled:!1,emissiveFactor:[0,0,0],metallicRoughnessValues:[1,1],metallicRoughnessMapEnabled:!1,occlusionMapEnabled:!1,occlusionStrength:1,alphaCutoffEnabled:!1,alphaCutoff:.5,IBLenabled:!1,scaleIBLAmbient:[1,1],scaleDiffBaseMR:[0,0,0,0],scaleFGDSpec:[0,0,0,0],specularColorFactor:[1,1,1],specularIntensityFactor:1,specularColorMapEnabled:!1,specularIntensityMapEnabled:!1,ior:1.5,transmissionFactor:0,transmissionMapEnabled:!1,thicknessFactor:0,attenuationDistance:1e9,attenuationColor:[1,1,1],clearcoatFactor:0,clearcoatRoughnessFactor:0,clearcoatMapEnabled:!1,clearcoatRoughnessMapEnabled:!1,sheenColorFactor:[0,0,0],sheenRoughnessFactor:0,sheenColorMapEnabled:!1,sheenRoughnessMapEnabled:!1,iridescenceFactor:0,iridescenceIor:1.3,iridescenceThicknessRange:[100,400],iridescenceMapEnabled:!1,anisotropyStrength:0,anisotropyRotation:0,anisotropyDirection:[1,0],anisotropyMapEnabled:!1,emissiveStrength:1,baseColorUVSet:0,baseColorUVTransform:[1,0,0,0,1,0,0,0,1],metallicRoughnessUVSet:0,metallicRoughnessUVTransform:[1,0,0,0,1,0,0,0,1],normalUVSet:0,normalUVTransform:[1,0,0,0,1,0,0,0,1],occlusionUVSet:0,occlusionUVTransform:[1,0,0,0,1,0,0,0,1],emissiveUVSet:0,emissiveUVTransform:[1,0,0,0,1,0,0,0,1],specularColorUVSet:0,specularColorUVTransform:[1,0,0,0,1,0,0,0,1],specularIntensityUVSet:0,specularIntensityUVTransform:[1,0,0,0,1,0,0,0,1],transmissionUVSet:0,transmissionUVTransform:[1,0,0,0,1,0,0,0,1],thicknessUVSet:0,thicknessUVTransform:[1,0,0,0,1,0,0,0,1],clearcoatUVSet:0,clearcoatUVTransform:[1,0,0,0,1,0,0,0,1],clearcoatRoughnessUVSet:0,clearcoatRoughnessUVTransform:[1,0,0,0,1,0,0,0,1],clearcoatNormalUVSet:0,clearcoatNormalUVTransform:[1,0,0,0,1,0,0,0,1],sheenColorUVSet:0,sheenColorUVTransform:[1,0,0,0,1,0,0,0,1],sheenRoughnessUVSet:0,sheenRoughnessUVTransform:[1,0,0,0,1,0,0,0,1],iridescenceUVSet:0,iridescenceUVTransform:[1,0,0,0,1,0,0,0,1],iridescenceThicknessUVSet:0,iridescenceThicknessUVTransform:[1,0,0,0,1,0,0,0,1],anisotropyUVSet:0,anisotropyUVTransform:[1,0,0,0,1,0,0,0,1]},name:"pbrMaterial",firstBindingSlot:0,bindingLayout:[{name:"pbrMaterial",group:3},{name:"pbr_baseColorSampler",group:3},{name:"pbr_normalSampler",group:3},{name:"pbr_emissiveSampler",group:3},{name:"pbr_metallicRoughnessSampler",group:3},{name:"pbr_occlusionSampler",group:3},{name:"pbr_specularColorSampler",group:3},{name:"pbr_specularIntensitySampler",group:3},{name:"pbr_transmissionSampler",group:3},{name:"pbr_thicknessSampler",group:3},{name:"pbr_clearcoatSampler",group:3},{name:"pbr_clearcoatRoughnessSampler",group:3},{name:"pbr_clearcoatNormalSampler",group:3},{name:"pbr_sheenColorSampler",group:3},{name:"pbr_sheenRoughnessSampler",group:3},{name:"pbr_iridescenceSampler",group:3},{name:"pbr_iridescenceThicknessSampler",group:3},{name:"pbr_anisotropySampler",group:3}],dependencies:[e.lighting,q,W],source:"struct PBRFragmentInputs {\n pbr_vPosition: vec3f,\n pbr_vUV0: vec2f,\n pbr_vUV1: vec2f,\n pbr_vTBN: mat3x3f,\n pbr_vNormal: vec3f\n};\n\nvar<private> fragmentInputs: PBRFragmentInputs;\n\nfn pbr_setPositionNormalTangentUV(\n position: vec4f,\n normal: vec4f,\n tangent: vec4f,\n uv0: vec2f,\n uv1: vec2f\n)\n{\n var pos: vec4f = pbrProjection.modelMatrix * position;\n fragmentInputs.pbr_vPosition = pos.xyz / pos.w;\n fragmentInputs.pbr_vNormal = vec3f(0.0, 0.0, 1.0);\n fragmentInputs.pbr_vTBN = mat3x3f(\n vec3f(1.0, 0.0, 0.0),\n vec3f(0.0, 1.0, 0.0),\n vec3f(0.0, 0.0, 1.0)\n );\n fragmentInputs.pbr_vUV0 = vec2f(0.0, 0.0);\n fragmentInputs.pbr_vUV1 = uv1;\n\n#ifdef HAS_NORMALS\n let normalW: vec3f = normalize((pbrProjection.normalMatrix * vec4f(normal.xyz, 0.0)).xyz);\n fragmentInputs.pbr_vNormal = normalW;\n#ifdef HAS_TANGENTS\n let tangentW: vec3f = normalize((pbrProjection.modelMatrix * vec4f(tangent.xyz, 0.0)).xyz);\n let bitangentW: vec3f = cross(normalW, tangentW) * tangent.w;\n fragmentInputs.pbr_vTBN = mat3x3f(tangentW, bitangentW, normalW);\n#endif\n#endif\n\n#ifdef HAS_UV\n fragmentInputs.pbr_vUV0 = uv0;\n#endif\n}\n\nstruct pbrMaterialUniforms {\n // Material is unlit\n unlit: u32,\n\n // Base color map\n baseColorMapEnabled: u32,\n baseColorFactor: vec4f,\n\n normalMapEnabled : u32,\n normalScale: f32, // #ifdef HAS_NORMALMAP\n\n emissiveMapEnabled: u32,\n emissiveFactor: vec3f, // #ifdef HAS_EMISSIVEMAP\n\n metallicRoughnessValues: vec2f,\n metallicRoughnessMapEnabled: u32,\n\n occlusionMapEnabled: i32,\n occlusionStrength: f32, // #ifdef HAS_OCCLUSIONMAP\n \n alphaCutoffEnabled: i32,\n alphaCutoff: f32, // #ifdef ALPHA_CUTOFF\n\n specularColorFactor: vec3f,\n specularIntensityFactor: f32,\n specularColorMapEnabled: i32,\n specularIntensityMapEnabled: i32,\n\n ior: f32,\n\n transmissionFactor: f32,\n transmissionMapEnabled: i32,\n\n thicknessFactor: f32,\n attenuationDistance: f32,\n attenuationColor: vec3f,\n\n clearcoatFactor: f32,\n clearcoatRoughnessFactor: f32,\n clearcoatMapEnabled: i32,\n clearcoatRoughnessMapEnabled: i32,\n\n sheenColorFactor: vec3f,\n sheenRoughnessFactor: f32,\n sheenColorMapEnabled: i32,\n sheenRoughnessMapEnabled: i32,\n\n iridescenceFactor: f32,\n iridescenceIor: f32,\n iridescenceThicknessRange: vec2f,\n iridescenceMapEnabled: i32,\n\n anisotropyStrength: f32,\n anisotropyRotation: f32,\n anisotropyDirection: vec2f,\n anisotropyMapEnabled: i32,\n\n emissiveStrength: f32,\n \n // IBL\n IBLenabled: i32,\n scaleIBLAmbient: vec2f, // #ifdef USE_IBL\n \n // debugging flags used for shader output of intermediate PBR variables\n // #ifdef PBR_DEBUG\n scaleDiffBaseMR: vec4f,\n scaleFGDSpec: vec4f,\n // #endif\n\n baseColorUVSet: i32,\n baseColorUVTransform: mat3x3f,\n metallicRoughnessUVSet: i32,\n metallicRoughnessUVTransform: mat3x3f,\n normalUVSet: i32,\n normalUVTransform: mat3x3f,\n occlusionUVSet: i32,\n occlusionUVTransform: mat3x3f,\n emissiveUVSet: i32,\n emissiveUVTransform: mat3x3f,\n specularColorUVSet: i32,\n specularColorUVTransform: mat3x3f,\n specularIntensityUVSet: i32,\n specularIntensityUVTransform: mat3x3f,\n transmissionUVSet: i32,\n transmissionUVTransform: mat3x3f,\n thicknessUVSet: i32,\n thicknessUVTransform: mat3x3f,\n clearcoatUVSet: i32,\n clearcoatUVTransform: mat3x3f,\n clearcoatRoughnessUVSet: i32,\n clearcoatRoughnessUVTransform: mat3x3f,\n clearcoatNormalUVSet: i32,\n clearcoatNormalUVTransform: mat3x3f,\n sheenColorUVSet: i32,\n sheenColorUVTransform: mat3x3f,\n sheenRoughnessUVSet: i32,\n sheenRoughnessUVTransform: mat3x3f,\n iridescenceUVSet: i32,\n iridescenceUVTransform: mat3x3f,\n iridescenceThicknessUVSet: i32,\n iridescenceThicknessUVTransform: mat3x3f,\n anisotropyUVSet: i32,\n anisotropyUVTransform: mat3x3f,\n}\n\n@group(3) @binding(auto) var<uniform> pbrMaterial : pbrMaterialUniforms;\n\n// Samplers\n#ifdef HAS_BASECOLORMAP\n@group(3) @binding(auto) var pbr_baseColorSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_baseColorSamplerSampler: sampler;\n#endif\n#ifdef HAS_NORMALMAP\n@group(3) @binding(auto) var pbr_normalSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_normalSamplerSampler: sampler;\n#endif\n#ifdef HAS_EMISSIVEMAP\n@group(3) @binding(auto) var pbr_emissiveSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_emissiveSamplerSampler: sampler;\n#endif\n#ifdef HAS_METALROUGHNESSMAP\n@group(3) @binding(auto) var pbr_metallicRoughnessSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_metallicRoughnessSamplerSampler: sampler;\n#endif\n#ifdef HAS_OCCLUSIONMAP\n@group(3) @binding(auto) var pbr_occlusionSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_occlusionSamplerSampler: sampler;\n#endif\n#ifdef HAS_SPECULARCOLORMAP\n@group(3) @binding(auto) var pbr_specularColorSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_specularColorSamplerSampler: sampler;\n#endif\n#ifdef HAS_SPECULARINTENSITYMAP\n@group(3) @binding(auto) var pbr_specularIntensitySampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_specularIntensitySamplerSampler: sampler;\n#endif\n#ifdef HAS_TRANSMISSIONMAP\n@group(3) @binding(auto) var pbr_transmissionSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_transmissionSamplerSampler: sampler;\n#endif\n#ifdef HAS_THICKNESSMAP\n@group(3) @binding(auto) var pbr_thicknessSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_thicknessSamplerSampler: sampler;\n#endif\n#ifdef HAS_CLEARCOATMAP\n@group(3) @binding(auto) var pbr_clearcoatSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_clearcoatSamplerSampler: sampler;\n#endif\n#ifdef HAS_CLEARCOATROUGHNESSMAP\n@group(3) @binding(auto) var pbr_clearcoatRoughnessSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_clearcoatRoughnessSamplerSampler: sampler;\n#endif\n#ifdef HAS_CLEARCOATNORMALMAP\n@group(3) @binding(auto) var pbr_clearcoatNormalSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_clearcoatNormalSamplerSampler: sampler;\n#endif\n#ifdef HAS_SHEENCOLORMAP\n@group(3) @binding(auto) var pbr_sheenColorSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_sheenColorSamplerSampler: sampler;\n#endif\n#ifdef HAS_SHEENROUGHNESSMAP\n@group(3) @binding(auto) var pbr_sheenRoughnessSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_sheenRoughnessSamplerSampler: sampler;\n#endif\n#ifdef HAS_IRIDESCENCEMAP\n@group(3) @binding(auto) var pbr_iridescenceSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_iridescenceSamplerSampler: sampler;\n#endif\n#ifdef HAS_IRIDESCENCETHICKNESSMAP\n@group(3) @binding(auto) var pbr_iridescenceThicknessSampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_iridescenceThicknessSamplerSampler: sampler;\n#endif\n#ifdef HAS_ANISOTROPYMAP\n@group(3) @binding(auto) var pbr_anisotropySampler: texture_2d<f32>;\n@group(3) @binding(auto) var pbr_anisotropySamplerSampler: sampler;\n#endif\n// Encapsulate the various inputs used by the various functions in the shading equation\n// We store values in this struct to simplify the integration of alternative implementations\n// of the shading terms, outlined in the Readme.MD Appendix.\nstruct PBRInfo {\n NdotL: f32, // cos angle between normal and light direction\n NdotV: f32, // cos angle between normal and view direction\n NdotH: f32, // cos angle between normal and half vector\n LdotH: f32, // cos angle between light direction and half vector\n VdotH: f32, // cos angle between view direction and half vector\n perceptualRoughness: f32, // roughness value, as authored by the model creator (input to shader)\n metalness: f32, // metallic value at the surface\n reflectance0: vec3f, // full reflectance color (normal incidence angle)\n reflectance90: vec3f, // reflectance color at grazing angle\n alphaRoughness: f32, // roughness mapped to a more linear change in the roughness (proposed by [2])\n diffuseColor: vec3f, // color contribution from diffuse lighting\n specularColor: vec3f, // color contribution from specular lighting\n n: vec3f, // normal at surface point\n v: vec3f, // vector from surface point to camera\n};\n\nconst M_PI = 3.141592653589793;\nconst c_MinRoughness = 0.04;\n\nfn SRGBtoLINEAR(srgbIn: vec4f ) -> vec4f\n{\n var linOut: vec3f = srgbIn.xyz;\n#ifdef MANUAL_SRGB\n let bLess: vec3f = step(vec3f(0.04045), srgbIn.xyz);\n linOut = mix(\n srgbIn.xyz / vec3f(12.92),\n pow((srgbIn.xyz + vec3f(0.055)) / vec3f(1.055), vec3f(2.4)),\n bLess\n );\n#ifdef SRGB_FAST_APPROXIMATION\n linOut = pow(srgbIn.xyz, vec3f(2.2));\n#endif\n#endif\n return vec4f(linOut, srgbIn.w);\n}\n\nfn getMaterialUV(uvSet: i32, uvTransform: mat3x3f) -> vec2f\n{\n var baseUV = fragmentInputs.pbr_vUV0;\n if (uvSet == 1) {\n baseUV = fragmentInputs.pbr_vUV1;\n }\n return (uvTransform * vec3f(baseUV, 1.0)).xy;\n}\n\n// Build the tangent basis from interpolated attributes or screen-space derivatives.\nfn getTBN(uv: vec2f) -> mat3x3f\n{\n let pos_dx: vec3f = dpdx(fragmentInputs.pbr_vPosition);\n let pos_dy: vec3f = dpdy(fragmentInputs.pbr_vPosition);\n let tex_dx: vec3f = dpdx(vec3f(uv, 0.0));\n let tex_dy: vec3f = dpdy(vec3f(uv, 0.0));\n var t: vec3f = (tex_dy.y * pos_dx - tex_dx.y * pos_dy) / (tex_dx.x * tex_dy.y - tex_dy.x * tex_dx.y);\n\n var ng: vec3f = cross(pos_dx, pos_dy);\n#ifdef HAS_NORMALS\n ng = normalize(fragmentInputs.pbr_vNormal);\n#endif\n t = normalize(t - ng * dot(ng, t));\n var b: vec3f = normalize(cross(ng, t));\n var tbn: mat3x3f = mat3x3f(t, b, ng);\n#ifdef HAS_TANGENTS\n tbn = fragmentInputs.pbr_vTBN;\n#endif\n\n return tbn;\n}\n\n// Find the normal for this fragment, pulling either from a predefined normal map\n// or from the interpolated mesh normal and tangent attributes.\nfn getMappedNormal(\n normalSampler: texture_2d<f32>,\n normalSamplerBinding: sampler,\n tbn: mat3x3f,\n normalScale: f32,\n uv: vec2f\n) -> vec3f\n{\n let n = textureSample(normalSampler, normalSamplerBinding, uv).rgb;\n return normalize(tbn * ((2.0 * n - 1.0) * vec3f(normalScale, normalScale, 1.0)));\n}\n\nfn getNormal(tbn: mat3x3f, uv: vec2f) -> vec3f\n{\n // The tbn matrix is linearly interpolated, so we need to re-normalize\n var n: vec3f = normalize(tbn[2].xyz);\n#ifdef HAS_NORMALMAP\n n = getMappedNormal(\n pbr_normalSampler,\n pbr_normalSamplerSampler,\n tbn,\n pbrMaterial.normalScale,\n uv\n );\n#endif\n\n return n;\n}\n\nfn getClearcoatNormal(tbn: mat3x3f, baseNormal: vec3f, uv: vec2f) -> vec3f\n{\n#ifdef HAS_CLEARCOATNORMALMAP\n return getMappedNormal(\n pbr_clearcoatNormalSampler,\n pbr_clearcoatNormalSamplerSampler,\n tbn,\n 1.0,\n uv\n );\n#else\n return baseNormal;\n#endif\n}\n\n// Calculation of the lighting contribution from an optional Image Based Light source.\n// Precomputed Environment Maps are required uniform inputs and are computed as outlined in [1].\n// See our README.md on Environment Maps [3] for additional discussion.\n#ifdef USE_IBL\nfn getIBLContribution(pbrInfo: PBRInfo, n: vec3f, reflection: vec3f) -> vec3f\n{\n let mipCount: f32 = 9.0; // resolution of 512x512\n let lod: f32 = pbrInfo.perceptualRoughness * mipCount;\n // retrieve a scale and bias to F0. See [1], Figure 3\n let brdf = SRGBtoLINEAR(\n textureSampleLevel(\n pbr_brdfLUT,\n pbr_brdfLUTSampler,\n vec2f(pbrInfo.NdotV, 1.0 - pbrInfo.perceptualRoughness),\n 0.0\n )\n ).rgb;\n let diffuseLight =\n SRGBtoLINEAR(\n textureSampleLevel(pbr_diffuseEnvSampler, pbr_diffuseEnvSamplerSampler, n, 0.0)\n ).rgb;\n var specularLight = SRGBtoLINEAR(\n textureSampleLevel(\n pbr_specularEnvSampler,\n pbr_specularEnvSamplerSampler,\n reflection,\n 0.0\n )\n ).rgb;\n#ifdef USE_TEX_LOD\n specularLight = SRGBtoLINEAR(\n textureSampleLevel(\n pbr_specularEnvSampler,\n pbr_specularEnvSamplerSampler,\n reflection,\n lod\n )\n ).rgb;\n#endif\n\n let diffuse = diffuseLight * pbrInfo.diffuseColor * pbrMaterial.scaleIBLAmbient.x;\n let specular =\n specularLight * (pbrInfo.specularColor * brdf.x + brdf.y) * pbrMaterial.scaleIBLAmbient.y;\n\n return diffuse + specular;\n}\n#endif\n\n// Basic Lambertian diffuse\n// Implementation from Lambert's Photometria https://archive.org/details/lambertsphotome00lambgoog\n// See also [1], Equation 1\nfn diffuse(pbrInfo: PBRInfo) -> vec3<f32> {\n return pbrInfo.diffuseColor / M_PI;\n}\n\n// The following equation models the Fresnel reflectance term of the spec equation (aka F())\n// Implementation of fresnel from [4], Equation 15\nfn specularReflection(pbrInfo: PBRInfo) -> vec3<f32> {\n return pbrInfo.reflectance0 +\n (pbrInfo.reflectance90 - pbrInfo.reflectance0) *\n pow(clamp(1.0 - pbrInfo.VdotH, 0.0, 1.0), 5.0);\n}\n\n// This calculates the specular geometric attenuation (aka G()),\n// where rougher material will reflect less light back to the viewer.\n// This implementation is based on [1] Equation 4, and we adopt their modifications to\n// alphaRoughness as input as originally proposed in [2].\nfn geometricOcclusion(pbrInfo: PBRInfo) -> f32 {\n let NdotL: f32 = pbrInfo.NdotL;\n let NdotV: f32 = pbrInfo.NdotV;\n let r: f32 = pbrInfo.alphaRoughness;\n\n let attenuationL = 2.0 * NdotL / (NdotL + sqrt(r * r + (1.0 - r * r) * (NdotL * NdotL)));\n let attenuationV = 2.0 * NdotV / (NdotV + sqrt(r * r + (1.0 - r * r) * (NdotV * NdotV)));\n return attenuationL * attenuationV;\n}\n\n// The following equation(s) model the distribution of microfacet normals across\n// the area being drawn (aka D())\n// Implementation from \"Average Irregularity Representation of a Roughened Surface\n// for Ray Reflection\" by T. S. Trowbridge, and K. P. Reitz\n// Follows the distribution function recommended in the SIGGRAPH 2013 course notes\n// from EPIC Games [1], Equation 3.\nfn microfacetDistribution(pbrInfo: PBRInfo) -> f32 {\n let roughnessSq = pbrInfo.alphaRoughness * pbrInfo.alphaRoughness;\n let f = (pbrInfo.NdotH * roughnessSq - pbrInfo.NdotH) * pbrInfo.NdotH + 1.0;\n return roughnessSq / (M_PI * f * f);\n}\n\nfn maxComponent(value: vec3f) -> f32 {\n return max(max(value.r, value.g), value.b);\n}\n\nfn getDielectricF0(ior: f32) -> f32 {\n let clampedIor = max(ior, 1.0);\n let ratio = (clampedIor - 1.0) / (clampedIor + 1.0);\n return ratio * ratio;\n}\n\nfn normalizeDirection(direction: vec2f) -> vec2f {\n let directionLength = length(direction);\n if (directionLength > 0.0001) {\n return direction / directionLength;\n }\n\n return vec2f(1.0, 0.0);\n}\n\nfn rotateDirection(direction: vec2f, rotation: f32) -> vec2f {\n let s = sin(rotation);\n let c = cos(rotation);\n return vec2f(direction.x * c - direction.y * s, direction.x * s + direction.y * c);\n}\n\nfn getIridescenceTint(iridescence: f32, thickness: f32, NdotV: f32) -> vec3f {\n if (iridescence <= 0.0) {\n return vec3f(1.0);\n }\n\n let phase = 0.015 * thickness * pbrMaterial.iridescenceIor + (1.0 - NdotV) * 6.0;\n let thinFilmTint =\n 0.5 +\n 0.5 *\n cos(vec3f(phase, phase + 2.0943951, phase + 4.1887902));\n return mix(vec3f(1.0), thinFilmTint, iridescence);\n}\n\nfn getVolumeAttenuation(thickness: f32) -> vec3f {\n if (thickness <= 0.0) {\n return vec3f(1.0);\n }\n\n let attenuationCoefficient =\n -log(max(pbrMaterial.attenuationColor, vec3f(0.0001))) /\n max(pbrMaterial.attenuationDistance, 0.0001);\n return exp(-attenuationCoefficient * thickness);\n}\n\nfn createClearcoatPBRInfo(\n basePBRInfo: PBRInfo,\n clearcoatNormal: vec3f,\n clearcoatRoughness: f32\n) -> PBRInfo {\n let perceptualRoughness = clamp(clearcoatRoughness, c_MinRoughness, 1.0);\n let alphaRoughness = perceptualRoughness * perceptualRoughness;\n let NdotV = clamp(abs(dot(clearcoatNormal, basePBRInfo.v)), 0.001, 1.0);\n\n return PBRInfo(\n basePBRInfo.NdotL,\n NdotV,\n basePBRInfo.NdotH,\n basePBRInfo.LdotH,\n basePBRInfo.VdotH,\n perceptualRoughness,\n 0.0,\n vec3f(0.04),\n vec3f(1.0),\n alphaRoughness,\n vec3f(0.0),\n vec3f(0.04),\n clearcoatNormal,\n basePBRInfo.v\n );\n}\n\nfn calculateClearcoatContribution(\n pbrInfo: PBRInfo,\n lightColor: vec3f,\n clearcoatNormal: vec3f,\n clearcoatFactor: f32,\n clearcoatRoughness: f32\n) -> vec3f {\n if (clearcoatFactor <= 0.0) {\n return vec3f(0.0);\n }\n\n let clearcoatPBRInfo = createClearcoatPBRInfo(pbrInfo, clearcoatNormal, clearcoatRoughness);\n return calculateFinalColor(clearcoatPBRInfo, lightColor) * clearcoatFactor;\n}\n\n#ifdef USE_IBL\nfn calculateClearcoatIBLContribution(\n pbrInfo: PBRInfo,\n clearcoatNormal: vec3f,\n reflection: vec3f,\n clearcoatFactor: f32,\n clearcoatRoughness: f32\n) -> vec3f {\n if (clearcoatFactor <= 0.0) {\n return vec3f(0.0);\n }\n\n let clearcoatPBRInfo = createClearcoatPBRInfo(pbrInfo, clearcoatNormal, clearcoatRoughness);\n return getIBLContribution(clearcoatPBRInfo, clearcoatNormal, reflection) * clearcoatFactor;\n}\n#endif\n\nfn calculateSheenContribution(\n pbrInfo: PBRInfo,\n lightColor: vec3f,\n sheenColor: vec3f,\n sheenRoughness: f32\n) -> vec3f {\n if (maxComponent(sheenColor) <= 0.0) {\n return vec3f(0.0);\n }\n\n let sheenFresnel = pow(clamp(1.0 - pbrInfo.VdotH, 0.0, 1.0), 5.0);\n let sheenVisibility = mix(1.0, pbrInfo.NdotL * pbrInfo.NdotV, sheenRoughness);\n return pbrInfo.NdotL *\n lightColor *\n sheenColor *\n (0.25 + 0.75 * sheenFresnel) *\n sheenVisibility *\n (1.0 - pbrInfo.metalness);\n}\n\nfn calculateAnisotropyBoost(\n pbrInfo: PBRInfo,\n anisotropyTangent: vec3f,\n anisotropyStrength: f32\n) -> f32 {\n if (anisotropyStrength <= 0.0) {\n return 1.0;\n }\n\n let anisotropyBitangent = normalize(cross(pbrInfo.n, anisotropyTangent));\n let bitangentViewAlignment = abs(dot(pbrInfo.v, anisotropyBitangent));\n return mix(1.0, 0.65 + 0.7 * bitangentViewAlignment, anisotropyStrength);\n}\n\nfn calculateMaterialLightColor(\n pbrInfo: PBRInfo,\n lightColor: vec3f,\n clearcoatNormal: vec3f,\n clearcoatFactor: f32,\n clearcoatRoughness: f32,\n sheenColor: vec3f,\n sheenRoughness: f32,\n anisotropyTangent: vec3f,\n anisotropyStrength: f32\n) -> vec3f {\n let anisotropyBoost = calculateAnisotropyBoost(pbrInfo, anisotropyTangent, anisotropyStrength);\n var color = calculateFinalColor(pbrInfo, lightColor) * anisotropyBoost;\n color += calculateClearcoatContribution(\n pbrInfo,\n lightColor,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness\n );\n color += calculateSheenContribution(pbrInfo, lightColor, sheenColor, sheenRoughness);\n return color;\n}\n\nfn PBRInfo_setAmbientLight(pbrInfo: ptr<function, PBRInfo>) {\n (*pbrInfo).NdotL = 1.0;\n (*pbrInfo).NdotH = 0.0;\n (*pbrInfo).LdotH = 0.0;\n (*pbrInfo).VdotH = 1.0;\n}\n\nfn PBRInfo_setDirectionalLight(pbrInfo: ptr<function, PBRInfo>, lightDirection: vec3<f32>) {\n let n = (*pbrInfo).n;\n let v = (*pbrInfo).v;\n let l = normalize(lightDirection); // Vector from surface point to light\n let h = normalize(l + v); // Half vector between both l and v\n\n (*pbrInfo).NdotL = clamp(dot(n, l), 0.001, 1.0);\n (*pbrInfo).NdotH = clamp(dot(n, h), 0.0, 1.0);\n (*pbrInfo).LdotH = clamp(dot(l, h), 0.0, 1.0);\n (*pbrInfo).VdotH = clamp(dot(v, h), 0.0, 1.0);\n}\n\nfn PBRInfo_setPointLight(pbrInfo: ptr<function, PBRInfo>, pointLight: PointLight) {\n let light_direction = normalize(pointLight.position - fragmentInputs.pbr_vPosition);\n PBRInfo_setDirectionalLight(pbrInfo, light_direction);\n}\n\nfn PBRInfo_setSpotLight(pbrInfo: ptr<function, PBRInfo>, spotLight: SpotLight) {\n let light_direction = normalize(spotLight.position - fragmentInputs.pbr_vPosition);\n PBRInfo_setDirectionalLight(pbrInfo, light_direction);\n}\n\nfn calculateFinalColor(pbrInfo: PBRInfo, lightColor: vec3<f32>) -> vec3<f32> {\n // Calculate the shading terms for the microfacet specular shading model\n let F = specularReflection(pbrInfo);\n let G = geometricOcclusion(pbrInfo);\n let D = microfacetDistribution(pbrInfo);\n\n // Calculation of analytical lighting contribution\n let diffuseContrib = (1.0 - F) * diffuse(pbrInfo);\n let specContrib = F * G * D / (4.0 * pbrInfo.NdotL * pbrInfo.NdotV);\n // Obtain final intensity as reflectance (BRDF) scaled by the energy of the light (cosine law)\n return pbrInfo.NdotL * lightColor * (diffuseContrib + specContrib);\n}\n\nfn pbr_filterColor(colorUnused: vec4<f32>) -> vec4<f32> {\n let baseColorUV = getMaterialUV(pbrMaterial.baseColorUVSet, pbrMaterial.baseColorUVTransform);\n let metallicRoughnessUV = getMaterialUV(\n pbrMaterial.metallicRoughnessUVSet,\n pbrMaterial.metallicRoughnessUVTransform\n );\n let normalUV = getMaterialUV(pbrMaterial.normalUVSet, pbrMaterial.normalUVTransform);\n let occlusionUV = getMaterialUV(pbrMaterial.occlusionUVSet, pbrMaterial.occlusionUVTransform);\n let emissiveUV = getMaterialUV(pbrMaterial.emissiveUVSet, pbrMaterial.emissiveUVTransform);\n let specularColorUV = getMaterialUV(\n pbrMaterial.specularColorUVSet,\n pbrMaterial.specularColorUVTransform\n );\n let specularIntensityUV = getMaterialUV(\n pbrMaterial.specularIntensityUVSet,\n pbrMaterial.specularIntensityUVTransform\n );\n let transmissionUV = getMaterialUV(\n pbrMaterial.transmissionUVSet,\n pbrMaterial.transmissionUVTransform\n );\n let thicknessUV = getMaterialUV(pbrMaterial.thicknessUVSet, pbrMaterial.thicknessUVTransform);\n let clearcoatUV = getMaterialUV(pbrMaterial.clearcoatUVSet, pbrMaterial.clearcoatUVTransform);\n let clearcoatRoughnessUV = getMaterialUV(\n pbrMaterial.clearcoatRoughnessUVSet,\n pbrMaterial.clearcoatRoughnessUVTransform\n );\n let clearcoatNormalUV = getMaterialUV(\n pbrMaterial.clearcoatNormalUVSet,\n pbrMaterial.clearcoatNormalUVTransform\n );\n let sheenColorUV = getMaterialUV(\n pbrMaterial.sheenColorUVSet,\n pbrMaterial.sheenColorUVTransform\n );\n let sheenRoughnessUV = getMaterialUV(\n pbrMaterial.sheenRoughnessUVSet,\n pbrMaterial.sheenRoughnessUVTransform\n );\n let iridescenceUV = getMaterialUV(\n pbrMaterial.iridescenceUVSet,\n pbrMaterial.iridescenceUVTransform\n );\n let iridescenceThicknessUV = getMaterialUV(\n pbrMaterial.iridescenceThicknessUVSet,\n pbrMaterial.iridescenceThicknessUVTransform\n );\n let anisotropyUV = getMaterialUV(\n pbrMaterial.anisotropyUVSet,\n pbrMaterial.anisotropyUVTransform\n );\n\n // The albedo may be defined from a base texture or a flat color\n var baseColor: vec4<f32> = pbrMaterial.baseColorFactor;\n #ifdef HAS_BASECOLORMAP\n baseColor = SRGBtoLINEAR(\n textureSample(pbr_baseColorSampler, pbr_baseColorSamplerSampler, baseColorUV)\n ) * pbrMaterial.baseColorFactor;\n #endif\n\n #ifdef ALPHA_CUTOFF\n if (baseColor.a < pbrMaterial.alphaCutoff) {\n discard;\n }\n #endif\n\n var color = vec3<f32>(0.0, 0.0, 0.0);\n var transmission = 0.0;\n\n if (pbrMaterial.unlit != 0u) {\n color = baseColor.rgb;\n } else {\n // Metallic and Roughness material properties are packed together\n // In glTF, these factors can be specified by fixed scalar values\n // or from a metallic-roughness map\n var perceptualRoughness = pbrMaterial.metallicRoughnessValues.y;\n var metallic = pbrMaterial.metallicRoughnessValues.x;\n #ifdef HAS_METALROUGHNESSMAP\n // Roughness is stored in the 'g' channel, metallic is stored in the 'b' channel.\n // This layout intentionally reserves the 'r' channel for (optional) occlusion map data\n let mrSample = textureSample(\n pbr_metallicRoughnessSampler,\n pbr_metallicRoughnessSamplerSampler,\n metallicRoughnessUV\n );\n perceptualRoughness = mrSample.g * perceptualRoughness;\n metallic = mrSample.b * metallic;\n #endif\n perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0);\n metallic = clamp(metallic, 0.0, 1.0);\n let tbn = getTBN(normalUV);\n let n = getNormal(tbn, normalUV); // normal at surface point\n let v = normalize(pbrProjection.camera - fragmentInputs.pbr_vPosition); // Vector from surface point to camera\n let NdotV = clamp(abs(dot(n, v)), 0.001, 1.0);\n var useExtendedPBR = false;\n #ifdef USE_MATERIAL_EXTENSIONS\n useExtendedPBR =\n pbrMaterial.specularColorMapEnabled != 0 ||\n pbrMaterial.specularIntensityMapEnabled != 0 ||\n abs(pbrMaterial.specularIntensityFactor - 1.0) > 0.0001 ||\n maxComponent(abs(pbrMaterial.specularColorFactor - vec3f(1.0))) > 0.0001 ||\n abs(pbrMaterial.ior - 1.5) > 0.0001 ||\n pbrMaterial.transmissionMapEnabled != 0 ||\n pbrMaterial.transmissionFactor > 0.0001 ||\n pbrMaterial.clearcoatMapEnabled != 0 ||\n pbrMaterial.clearcoatRoughnessMapEnabled != 0 ||\n pbrMaterial.clearcoatFactor > 0.0001 ||\n pbrMaterial.clearcoatRoughnessFactor > 0.0001 ||\n pbrMaterial.sheenColorMapEnabled != 0 ||\n pbrMaterial.sheenRoughnessMapEnabled != 0 ||\n maxComponent(pbrMaterial.sheenColorFactor) > 0.0001 ||\n pbrMaterial.sheenRoughnessFactor > 0.0001 ||\n pbrMaterial.iridescenceMapEnabled != 0 ||\n pbrMaterial.iridescenceFactor > 0.0001 ||\n abs(pbrMaterial.iridescenceIor - 1.3) > 0.0001 ||\n abs(pbrMaterial.iridescenceThicknessRange.x - 100.0) > 0.0001 ||\n abs(pbrMaterial.iridescenceThicknessRange.y - 400.0) > 0.0001 ||\n pbrMaterial.anisotropyMapEnabled != 0 ||\n pbrMaterial.anisotropyStrength > 0.0001 ||\n abs(pbrMaterial.anisotropyRotation) > 0.0001 ||\n length(pbrMaterial.anisotropyDirection - vec2f(1.0, 0.0)) > 0.0001;\n #endif\n\n if (!useExtendedPBR) {\n let alphaRoughness = perceptualRoughness * perceptualRoughness;\n\n let f0 = vec3<f32>(0.04);\n var diffuseColor = baseColor.rgb * (vec3<f32>(1.0) - f0);\n diffuseColor *= 1.0 - metallic;\n let specularColor = mix(f0, baseColor.rgb, metallic);\n\n let reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n let reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);\n let specularEnvironmentR0 = specularColor;\n let specularEnvironmentR90 = vec3<f32>(1.0, 1.0, 1.0) * reflectance90;\n let reflection = -normalize(reflect(v, n));\n\n var pbrInfo = PBRInfo(\n 0.0, // NdotL\n NdotV,\n 0.0, // NdotH\n 0.0, // LdotH\n 0.0, // VdotH\n perceptualRoughness,\n metallic,\n specularEnvironmentR0,\n specularEnvironmentR90,\n alphaRoughness,\n diffuseColor,\n specularColor,\n n,\n v\n );\n\n #ifdef USE_LIGHTS\n PBRInfo_setAmbientLight(&pbrInfo);\n color += calculateFinalColor(pbrInfo, lighting.ambientColor);\n\n for (var i = 0; i < lighting.directionalLightCount; i++) {\n if (i < lighting.directionalLightCount) {\n PBRInfo_setDirectionalLight(&pbrInfo, lighting_getDirectionalLight(i).direction);\n color += calculateFinalColor(pbrInfo, lighting_getDirectionalLight(i).color);\n }\n }\n\n for (var i = 0; i < lighting.pointLightCount; i++) {\n if (i < lighting.pointLightCount) {\n PBRInfo_setPointLight(&pbrInfo, lighting_getPointLight(i));\n let attenuation = getPointLightAttenuation(\n lighting_getPointLight(i),\n distance(lighting_getPointLight(i).position, fragmentInputs.pbr_vPosition)\n );\n color += calculateFinalColor(pbrInfo, lighting_getPointLight(i).color / attenuation);\n }\n }\n\n for (var i = 0; i < lighting.spotLightCount; i++) {\n if (i < lighting.spotLightCount) {\n PBRInfo_setSpotLight(&pbrInfo, lighting_getSpotLight(i));\n let attenuation = getSpotLightAttenuation(\n lighting_getSpotLight(i),\n fragmentInputs.pbr_vPosition\n );\n color += calculateFinalColor(pbrInfo, lighting_getSpotLight(i).color / attenuation);\n }\n }\n #endif\n\n #ifdef USE_IBL\n if (pbrMaterial.IBLenabled != 0) {\n color += getIBLContribution(pbrInfo, n, reflection);\n }\n #endif\n\n #ifdef HAS_OCCLUSIONMAP\n if (pbrMaterial.occlusionMapEnabled != 0) {\n let ao = textureSample(pbr_occlusionSampler, pbr_occlusionSamplerSampler, occlusionUV).r;\n color = mix(color, color * ao, pbrMaterial.occlusionStrength);\n }\n #endif\n\n var emissive = pbrMaterial.emissiveFactor;\n #ifdef HAS_EMISSIVEMAP\n if (pbrMaterial.emissiveMapEnabled != 0u) {\n emissive *= SRGBtoLINEAR(\n textureSample(pbr_emissiveSampler, pbr_emissiveSamplerSampler, emissiveUV)\n ).rgb;\n }\n #endif\n color += emissive * pbrMaterial.emissiveStrength;\n\n #ifdef PBR_DEBUG\n color = mix(color, baseColor.rgb, pbrMaterial.scaleDiffBaseMR.y);\n color = mix(color, vec3<f32>(metallic), pbrMaterial.scaleDiffBaseMR.z);\n color = mix(color, vec3<f32>(perceptualRoughness), pbrMaterial.scaleDiffBaseMR.w);\n #endif\n\n return vec4<f32>(pow(color, vec3<f32>(1.0 / 2.2)), baseColor.a);\n }\n\n var specularIntensity = pbrMaterial.specularIntensityFactor;\n #ifdef HAS_SPECULARINTENSITYMAP\n if (pbrMaterial.specularIntensityMapEnabled != 0) {\n specularIntensity *= textureSample(\n pbr_specularIntensitySampler,\n pbr_specularIntensitySamplerSampler,\n specularIntensityUV\n ).a;\n }\n #endif\n\n var specularFactor = pbrMaterial.specularColorFactor;\n #ifdef HAS_SPECULARCOLORMAP\n if (pbrMaterial.specularColorMapEnabled != 0) {\n specularFactor *= SRGBtoLINEAR(\n textureSample(\n pbr_specularColorSampler,\n pbr_specularColorSamplerSampler,\n specularColorUV\n )\n ).rgb;\n }\n #endif\n\n transmission = pbrMaterial.transmissionFactor;\n #ifdef HAS_TRANSMISSIONMAP\n if (pbrMaterial.transmissionMapEnabled != 0) {\n transmission *= textureSample(\n pbr_transmissionSampler,\n pbr_transmissionSamplerSampler,\n transmissionUV\n ).r;\n }\n #endif\n transmission = clamp(transmission * (1.0 - metallic), 0.0, 1.0);\n var thickness = max(pbrMaterial.thicknessFactor, 0.0);\n #ifdef HAS_THICKNESSMAP\n thickness *= textureSample(\n pbr_thicknessSampler,\n pbr_thicknessSamplerSampler,\n thicknessUV\n ).g;\n #endif\n\n var clearcoatFactor = pbrMaterial.clearcoatFactor;\n var clearcoatRoughness = pbrMaterial.clearcoatRoughnessFactor;\n #ifdef HAS_CLEARCOATMAP\n if (pbrMaterial.clearcoatMapEnabled != 0) {\n clearcoatFactor *= textureSample(\n pbr_clearcoatSampler,\n pbr_clearcoatSamplerSampler,\n clearcoatUV\n ).r;\n }\n #endif\n #ifdef HAS_CLEARCOATROUGHNESSMAP\n if (pbrMaterial.clearcoatRoughnessMapEnabled != 0) {\n clearcoatRoughness *= textureSample(\n pbr_clearcoatRoughnessSampler,\n pbr_clearcoatRoughnessSamplerSampler,\n clearcoatRoughnessUV\n ).g;\n }\n #endif\n clearcoatFactor = clamp(clearcoatFactor, 0.0, 1.0);\n clearcoatRoughness = clamp(clearcoatRoughness, c_MinRoughness, 1.0);\n let clearcoatNormal = getClearcoatNormal(getTBN(clearcoatNormalUV), n, clearcoatNormalUV);\n\n var sheenColor = pbrMaterial.sheenColorFactor;\n var sheenRoughness = pbrMaterial.sheenRoughnessFactor;\n #ifdef HAS_SHEENCOLORMAP\n if (pbrMaterial.sheenColorMapEnabled != 0) {\n sheenColor *= SRGBtoLINEAR(\n textureSample(\n pbr_sheenColorSampler,\n pbr_sheenColorSamplerSampler,\n sheenColorUV\n )\n ).rgb;\n }\n #endif\n #ifdef HAS_SHEENROUGHNESSMAP\n if (pbrMaterial.sheenRoughnessMapEnabled != 0) {\n sheenRoughness *= textureSample(\n pbr_sheenRoughnessSampler,\n pbr_sheenRoughnessSamplerSampler,\n sheenRoughnessUV\n ).a;\n }\n #endif\n sheenRoughness = clamp(sheenRoughness, c_MinRoughness, 1.0);\n\n var iridescence = pbrMaterial.iridescenceFactor;\n #ifdef HAS_IRIDESCENCEMAP\n if (pbrMaterial.iridescenceMapEnabled != 0) {\n iridescence *= textureSample(\n pbr_iridescenceSampler,\n pbr_iridescenceSamplerSampler,\n iridescenceUV\n ).r;\n }\n #endif\n iridescence = clamp(iridescence, 0.0, 1.0);\n var iridescenceThickness = mix(\n pbrMaterial.iridescenceThicknessRange.x,\n pbrMaterial.iridescenceThicknessRange.y,\n 0.5\n );\n #ifdef HAS_IRIDESCENCETHICKNESSMAP\n iridescenceThickness = mix(\n pbrMaterial.iridescenceThicknessRange.x,\n pbrMaterial.iridescenceThicknessRange.y,\n textureSample(\n pbr_iridescenceThicknessSampler,\n pbr_iridescenceThicknessSamplerSampler,\n iridescenceThicknessUV\n ).g\n );\n #endif\n\n var anisotropyStrength = clamp(pbrMaterial.anisotropyStrength, 0.0, 1.0);\n var anisotropyDirection = normalizeDirection(pbrMaterial.anisotropyDirection);\n #ifdef HAS_ANISOTROPYMAP\n if (pbrMaterial.anisotropyMapEnabled != 0) {\n let anisotropySample = textureSample(\n pbr_anisotropySampler,\n pbr_anisotropySamplerSampler,\n anisotropyUV\n ).rgb;\n anisotropyStrength *= anisotropySample.b;\n let mappedDirection = anisotropySample.rg * 2.0 - 1.0;\n if (length(mappedDirection) > 0.0001) {\n anisotropyDirection = normalize(mappedDirection);\n }\n }\n #endif\n anisotropyDirection = rotateDirection(anisotropyDirection, pbrMaterial.anisotropyRotation);\n var anisotropyTangent =\n normalize(tbn[0] * anisotropyDirection.x + tbn[1] * anisotropyDirection.y);\n if (length(anisotropyTangent) < 0.0001) {\n anisotropyTangent = normalize(tbn[0]);\n }\n let anisotropyViewAlignment = abs(dot(v, anisotropyTangent));\n perceptualRoughness = mix(\n perceptualRoughness,\n clamp(perceptualRoughness * (1.0 - 0.6 * anisotropyViewAlignment), c_MinRoughness, 1.0),\n anisotropyStrength\n );\n\n // Roughness is authored as perceptual roughness; as is convention,\n // convert to material roughness by squaring the perceptual roughness [2].\n let alphaRoughness = perceptualRoughness * perceptualRoughness;\n\n let dielectricF0 = getDielectricF0(pbrMaterial.ior);\n var dielectricSpecularF0 = min(\n vec3f(dielectricF0) * specularFactor * specularIntensity,\n vec3f(1.0)\n );\n let iridescenceTint = getIridescenceTint(iridescence, iridescenceThickness, NdotV);\n dielectricSpecularF0 = mix(\n dielectricSpecularF0,\n dielectricSpecularF0 * iridescenceTint,\n iridescence\n );\n var diffuseColor = baseColor.rgb * (vec3f(1.0) - dielectricSpecularF0);\n diffuseColor *= (1.0 - metallic) * (1.0 - transmission);\n var specularColor = mix(dielectricSpecularF0, baseColor.rgb, metallic);\n\n let baseLayerEnergy = 1.0 - clearcoatFactor * 0.25;\n diffuseColor *= baseLayerEnergy;\n specularColor *= baseLayerEnergy;\n\n // Compute reflectance.\n let reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n\n // For typical incident reflectance range (between 4% to 100%) set the grazing\n // reflectance to 100% for typical fresnel effect.\n // For very low reflectance range on highly diffuse objects (below 4%),\n // incrementally reduce grazing reflectance to 0%.\n let reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);\n let specularEnvironmentR0 = specularColor;\n let specularEnvironmentR90 = vec3<f32>(1.0, 1.0, 1.0) * reflectance90;\n let reflection = -normalize(reflect(v, n));\n\n var pbrInfo = PBRInfo(\n 0.0, // NdotL\n NdotV,\n 0.0, // NdotH\n 0.0, // LdotH\n 0.0, // VdotH\n perceptualRoughness,\n metallic,\n specularEnvironmentR0,\n specularEnvironmentR90,\n alphaRoughness,\n diffuseColor,\n specularColor,\n n,\n v\n );\n\n #ifdef USE_LIGHTS\n // Apply ambient light\n PBRInfo_setAmbientLight(&pbrInfo);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting.ambientColor,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n\n // Apply directional light\n for (var i = 0; i < lighting.directionalLightCount; i++) {\n if (i < lighting.directionalLightCount) {\n PBRInfo_setDirectionalLight(&pbrInfo, lighting_getDirectionalLight(i).direction);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getDirectionalLight(i).color,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n\n // Apply point light\n for (var i = 0; i < lighting.pointLightCount; i++) {\n if (i < lighting.pointLightCount) {\n PBRInfo_setPointLight(&pbrInfo, lighting_getPointLight(i));\n let attenuation = getPointLightAttenuation(\n lighting_getPointLight(i),\n distance(lighting_getPointLight(i).position, fragmentInputs.pbr_vPosition)\n );\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getPointLight(i).color / attenuation,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n\n for (var i = 0; i < lighting.spotLightCount; i++) {\n if (i < lighting.spotLightCount) {\n PBRInfo_setSpotLight(&pbrInfo, lighting_getSpotLight(i));\n let attenuation = getSpotLightAttenuation(lighting_getSpotLight(i), fragmentInputs.pbr_vPosition);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getSpotLight(i).color / attenuation,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n #endif\n\n // Calculate lighting contribution from image based lighting source (IBL)\n #ifdef USE_IBL\n if (pbrMaterial.IBLenabled != 0) {\n color += getIBLContribution(pbrInfo, n, reflection) *\n calculateAnisotropyBoost(pbrInfo, anisotropyTangent, anisotropyStrength);\n color += calculateClearcoatIBLContribution(\n pbrInfo,\n clearcoatNormal,\n -normalize(reflect(v, clearcoatNormal)),\n clearcoatFactor,\n clearcoatRoughness\n );\n color += sheenColor * pbrMaterial.scaleIBLAmbient.x * (1.0 - sheenRoughness) * 0.25;\n }\n #endif\n\n // Apply optional PBR terms for additional (optional) shading\n #ifdef HAS_OCCLUSIONMAP\n if (pbrMaterial.occlusionMapEnabled != 0) {\n let ao = textureSample(pbr_occlusionSampler, pbr_occlusionSamplerSampler, occlusionUV).r;\n color = mix(color, color * ao, pbrMaterial.occlusionStrength);\n }\n #endif\n\n var emissive = pbrMaterial.emissiveFactor;\n #ifdef HAS_EMISSIVEMAP\n if (pbrMaterial.emissiveMapEnabled != 0u) {\n emissive *= SRGBtoLINEAR(\n textureSample(pbr_emissiveSampler, pbr_emissiveSamplerSampler, emissiveUV)\n ).rgb;\n }\n #endif\n color += emissive * pbrMaterial.emissiveStrength;\n\n if (transmission > 0.0) {\n color = mix(color, color * getVolumeAttenuation(thickness), transmission);\n }\n\n // This section uses mix to override final color for reference app visualization\n // of various parameters in the lighting equation.\n #ifdef PBR_DEBUG\n // TODO: Figure out how to debug multiple lights\n\n // color = mix(color, F, pbr_scaleFGDSpec.x);\n // color = mix(color, vec3(G), pbr_scaleFGDSpec.y);\n // color = mix(color, vec3(D), pbr_scaleFGDSpec.z);\n // color = mix(color, specContrib, pbr_scaleFGDSpec.w);\n\n // color = mix(color, diffuseContrib, pbr_scaleDiffBaseMR.x);\n color = mix(color, baseColor.rgb, pbrMaterial.scaleDiffBaseMR.y);\n color = mix(color, vec3<f32>(metallic), pbrMaterial.scaleDiffBaseMR.z);\n color = mix(color, vec3<f32>(perceptualRoughness), pbrMaterial.scaleDiffBaseMR.w);\n #endif\n }\n\n let alpha = clamp(baseColor.a * (1.0 - transmission), 0.0, 1.0);\n return vec4<f32>(pow(color, vec3<f32>(1.0 / 2.2)), alpha);\n}\n",vs:"out vec3 pbr_vPosition;\nout vec2 pbr_vUV0;\nout vec2 pbr_vUV1;\n\n#ifdef HAS_NORMALS\n# ifdef HAS_TANGENTS\nout mat3 pbr_vTBN;\n# else\nout vec3 pbr_vNormal;\n# endif\n#endif\n\nvoid pbr_setPositionNormalTangentUV(\n vec4 position,\n vec4 normal,\n vec4 tangent,\n vec2 uv0,\n vec2 uv1\n)\n{\n vec4 pos = pbrProjection.modelMatrix * position;\n pbr_vPosition = vec3(pos.xyz) / pos.w;\n\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\n vec3 normalW = normalize(vec3(pbrProjection.normalMatrix * vec4(normal.xyz, 0.0)));\n vec3 tangentW = normalize(vec3(pbrProjection.modelMatrix * vec4(tangent.xyz, 0.0)));\n vec3 bitangentW = cross(normalW, tangentW) * tangent.w;\n pbr_vTBN = mat3(tangentW, bitangentW, normalW);\n#else // HAS_TANGENTS != 1\n pbr_vNormal = normalize(vec3(pbrProjection.modelMatrix * vec4(normal.xyz, 0.0)));\n#endif\n#endif\n\n#ifdef HAS_UV\n pbr_vUV0 = uv0;\n#else\n pbr_vUV0 = vec2(0.,0.);\n#endif\n\n pbr_vUV1 = uv1;\n}\n",fs:"precision highp float;\n\nlayout(std140) uniform pbrMaterialUniforms {\n // Material is unlit\n bool unlit;\n\n // Base color map\n bool baseColorMapEnabled;\n vec4 baseColorFactor;\n\n bool normalMapEnabled; \n float normalScale; // #ifdef HAS_NORMALMAP\n\n bool emissiveMapEnabled;\n vec3 emissiveFactor; // #ifdef HAS_EMISSIVEMAP\n\n vec2 metallicRoughnessValues;\n bool metallicRoughnessMapEnabled;\n\n bool occlusionMapEnabled;\n float occlusionStrength; // #ifdef HAS_OCCLUSIONMAP\n \n bool alphaCutoffEnabled;\n float alphaCutoff; // #ifdef ALPHA_CUTOFF\n\n vec3 specularColorFactor;\n float specularIntensityFactor;\n bool specularColorMapEnabled;\n bool specularIntensityMapEnabled;\n\n float ior;\n\n float transmissionFactor;\n bool transmissionMapEnabled;\n\n float thicknessFactor;\n float attenuationDistance;\n vec3 attenuationColor;\n\n float clearcoatFactor;\n float clearcoatRoughnessFactor;\n bool clearcoatMapEnabled;\n bool clearcoatRoughnessMapEnabled;\n\n vec3 sheenColorFactor;\n float sheenRoughnessFactor;\n bool sheenColorMapEnabled;\n bool sheenRoughnessMapEnabled;\n\n float iridescenceFactor;\n float iridescenceIor;\n vec2 iridescenceThicknessRange;\n bool iridescenceMapEnabled;\n\n float anisotropyStrength;\n float anisotropyRotation;\n vec2 anisotropyDirection;\n bool anisotropyMapEnabled;\n\n float emissiveStrength;\n \n // IBL\n bool IBLenabled;\n vec2 scaleIBLAmbient; // #ifdef USE_IBL\n \n // debugging flags used for shader output of intermediate PBR variables\n // #ifdef PBR_DEBUG\n vec4 scaleDiffBaseMR;\n vec4 scaleFGDSpec;\n // #endif\n\n int baseColorUVSet;\n mat3 baseColorUVTransform;\n int metallicRoughnessUVSet;\n mat3 metallicRoughnessUVTransform;\n int normalUVSet;\n mat3 normalUVTransform;\n int occlusionUVSet;\n mat3 occlusionUVTransform;\n int emissiveUVSet;\n mat3 emissiveUVTransform;\n int specularColorUVSet;\n mat3 specularColorUVTransform;\n int specularIntensityUVSet;\n mat3 specularIntensityUVTransform;\n int transmissionUVSet;\n mat3 transmissionUVTransform;\n int thicknessUVSet;\n mat3 thicknessUVTransform;\n int clearcoatUVSet;\n mat3 clearcoatUVTransform;\n int clearcoatRoughnessUVSet;\n mat3 clearcoatRoughnessUVTransform;\n int clearcoatNormalUVSet;\n mat3 clearcoatNormalUVTransform;\n int sheenColorUVSet;\n mat3 sheenColorUVTransform;\n int sheenRoughnessUVSet;\n mat3 sheenRoughnessUVTransform;\n int iridescenceUVSet;\n mat3 iridescenceUVTransform;\n int iridescenceThicknessUVSet;\n mat3 iridescenceThicknessUVTransform;\n int anisotropyUVSet;\n mat3 anisotropyUVTransform;\n} pbrMaterial;\n\n// Samplers\n#ifdef HAS_BASECOLORMAP\nuniform sampler2D pbr_baseColorSampler;\n#endif\n#ifdef HAS_NORMALMAP\nuniform sampler2D pbr_normalSampler;\n#endif\n#ifdef HAS_EMISSIVEMAP\nuniform sampler2D pbr_emissiveSampler;\n#endif\n#ifdef HAS_METALROUGHNESSMAP\nuniform sampler2D pbr_metallicRoughnessSampler;\n#endif\n#ifdef HAS_OCCLUSIONMAP\nuniform sampler2D pbr_occlusionSampler;\n#endif\n#ifdef HAS_SPECULARCOLORMAP\nuniform sampler2D pbr_specularColorSampler;\n#endif\n#ifdef HAS_SPECULARINTENSITYMAP\nuniform sampler2D pbr_specularIntensitySampler;\n#endif\n#ifdef HAS_TRANSMISSIONMAP\nuniform sampler2D pbr_transmissionSampler;\n#endif\n#ifdef HAS_THICKNESSMAP\nuniform sampler2D pbr_thicknessSampler;\n#endif\n#ifdef HAS_CLEARCOATMAP\nuniform sampler2D pbr_clearcoatSampler;\n#endif\n#ifdef HAS_CLEARCOATROUGHNESSMAP\nuniform sampler2D pbr_clearcoatRoughnessSampler;\n#endif\n#ifdef HAS_CLEARCOATNORMALMAP\nuniform sampler2D pbr_clearcoatNormalSampler;\n#endif\n#ifdef HAS_SHEENCOLORMAP\nuniform sampler2D pbr_sheenColorSampler;\n#endif\n#ifdef HAS_SHEENROUGHNESSMAP\nuniform sampler2D pbr_sheenRoughnessSampler;\n#endif\n#ifdef HAS_IRIDESCENCEMAP\nuniform sampler2D pbr_iridescenceSampler;\n#endif\n#ifdef HAS_IRIDESCENCETHICKNESSMAP\nuniform sampler2D pbr_iridescenceThicknessSampler;\n#endif\n#ifdef HAS_ANISOTROPYMAP\nuniform sampler2D pbr_anisotropySampler;\n#endif\n// Inputs from vertex shader\n\nin vec3 pbr_vPosition;\nin vec2 pbr_vUV0;\nin vec2 pbr_vUV1;\n\n#ifdef HAS_NORMALS\n#ifdef HAS_TANGENTS\nin mat3 pbr_vTBN;\n#else\nin vec3 pbr_vNormal;\n#endif\n#endif\n\n// Encapsulate the various inputs used by the various functions in the shading equation\n// We store values in this struct to simplify the integration of alternative implementations\n// of the shading terms, outlined in the Readme.MD Appendix.\nstruct PBRInfo {\n float NdotL; // cos angle between normal and light direction\n float NdotV; // cos angle between normal and view direction\n float NdotH; // cos angle between normal and half vector\n float LdotH; // cos angle between light direction and half vector\n float VdotH; // cos angle between view direction and half vector\n float perceptualRoughness; // roughness value, as authored by the model creator (input to shader)\n float metalness; // metallic value at the surface\n vec3 reflectance0; // full reflectance color (normal incidence angle)\n vec3 reflectance90; // reflectance color at grazing angle\n float alphaRoughness; // roughness mapped to a more linear change in the roughness (proposed by [2])\n vec3 diffuseColor; // color contribution from diffuse lighting\n vec3 specularColor; // color contribution from specular lighting\n vec3 n; // normal at surface point\n vec3 v; // vector from surface point to camera\n};\n\nconst float M_PI = 3.141592653589793;\nconst float c_MinRoughness = 0.04;\n\nvec3 calculateFinalColor(PBRInfo pbrInfo, vec3 lightColor);\n\nvec4 SRGBtoLINEAR(vec4 srgbIn)\n{\n#ifdef MANUAL_SRGB\n#ifdef SRGB_FAST_APPROXIMATION\n vec3 linOut = pow(srgbIn.xyz,vec3(2.2));\n#else // SRGB_FAST_APPROXIMATION\n vec3 bLess = step(vec3(0.04045),srgbIn.xyz);\n vec3 linOut = mix( srgbIn.xyz/vec3(12.92), pow((srgbIn.xyz+vec3(0.055))/vec3(1.055),vec3(2.4)), bLess );\n#endif //SRGB_FAST_APPROXIMATION\n return vec4(linOut,srgbIn.w);;\n#else //MANUAL_SRGB\n return srgbIn;\n#endif //MANUAL_SRGB\n}\n\nvec2 getMaterialUV(int uvSet, mat3 uvTransform)\n{\n vec2 baseUV = uvSet == 1 ? pbr_vUV1 : pbr_vUV0;\n return (uvTransform * vec3(baseUV, 1.0)).xy;\n}\n\n// Build the tangent basis from interpolated attributes or screen-space derivatives.\nmat3 getTBN(vec2 uv)\n{\n#ifndef HAS_TANGENTS\n vec3 pos_dx = dFdx(pbr_vPosition);\n vec3 pos_dy = dFdy(pbr_vPosition);\n vec3 tex_dx = dFdx(vec3(uv, 0.0));\n vec3 tex_dy = dFdy(vec3(uv, 0.0));\n vec3 t = (tex_dy.t * pos_dx - tex_dx.t * pos_dy) / (tex_dx.s * tex_dy.t - tex_dy.s * tex_dx.t);\n\n#ifdef HAS_NORMALS\n vec3 ng = normalize(pbr_vNormal);\n#else\n vec3 ng = cross(pos_dx, pos_dy);\n#endif\n\n t = normalize(t - ng * dot(ng, t));\n vec3 b = normalize(cross(ng, t));\n mat3 tbn = mat3(t, b, ng);\n#else // HAS_TANGENTS\n mat3 tbn = pbr_vTBN;\n#endif\n\n return tbn;\n}\n\n// Find the normal for this fragment, pulling either from a predefined normal map\n// or from the interpolated mesh normal and tangent attributes.\nvec3 getMappedNormal(sampler2D normalSampler, mat3 tbn, float normalScale, vec2 uv)\n{\n vec3 n = texture(normalSampler, uv).rgb;\n return normalize(tbn * ((2.0 * n - 1.0) * vec3(normalScale, normalScale, 1.0)));\n}\n\nvec3 getNormal(mat3 tbn, vec2 uv)\n{\n#ifdef HAS_NORMALMAP\n vec3 n = getMappedNormal(pbr_normalSampler, tbn, pbrMaterial.normalScale, uv);\n#else\n // The tbn matrix is linearly interpolated, so we need to re-normalize\n vec3 n = normalize(tbn[2].xyz);\n#endif\n\n return n;\n}\n\nvec3 getClearcoatNormal(mat3 tbn, vec3 baseNormal, vec2 uv)\n{\n#ifdef HAS_CLEARCOATNORMALMAP\n return getMappedNormal(pbr_clearcoatNormalSampler, tbn, 1.0, uv);\n#else\n return baseNormal;\n#endif\n}\n\n// Calculation of the lighting contribution from an optional Image Based Light source.\n// Precomputed Environment Maps are required uniform inputs and are computed as outlined in [1].\n// See our README.md on Environment Maps [3] for additional discussion.\n#ifdef USE_IBL\nvec3 getIBLContribution(PBRInfo pbrInfo, vec3 n, vec3 reflection)\n{\n float mipCount = 9.0; // resolution of 512x512\n float lod = (pbrInfo.perceptualRoughness * mipCount);\n // retrieve a scale and bias to F0. See [1], Figure 3\n vec3 brdf = SRGBtoLINEAR(texture(pbr_brdfLUT,\n vec2(pbrInfo.NdotV, 1.0 - pbrInfo.perceptualRoughness))).rgb;\n vec3 diffuseLight = SRGBtoLINEAR(texture(pbr_diffuseEnvSampler, n)).rgb;\n\n#ifdef USE_TEX_LOD\n vec3 specularLight = SRGBtoLINEAR(texture(pbr_specularEnvSampler, reflection, lod)).rgb;\n#else\n vec3 specularLight = SRGBtoLINEAR(texture(pbr_specularEnvSampler, reflection)).rgb;\n#endif\n\n vec3 diffuse = diffuseLight * pbrInfo.diffuseColor;\n vec3 specular = specularLight * (pbrInfo.specularColor * brdf.x + brdf.y);\n\n // For presentation, this allows us to disable IBL terms\n diffuse *= pbrMaterial.scaleIBLAmbient.x;\n specular *= pbrMaterial.scaleIBLAmbient.y;\n\n return diffuse + specular;\n}\n#endif\n\n// Basic Lambertian diffuse\n// Implementation from Lambert's Photometria https://archive.org/details/lambertsphotome00lambgoog\n// See also [1], Equation 1\nvec3 diffuse(PBRInfo pbrInfo)\n{\n return pbrInfo.diffuseColor / M_PI;\n}\n\n// The following equation models the Fresnel reflectance term of the spec equation (aka F())\n// Implementation of fresnel from [4], Equation 15\nvec3 specularReflection(PBRInfo pbrInfo)\n{\n return pbrInfo.reflectance0 +\n (pbrInfo.reflectance90 - pbrInfo.reflectance0) *\n pow(clamp(1.0 - pbrInfo.VdotH, 0.0, 1.0), 5.0);\n}\n\n// This calculates the specular geometric attenuation (aka G()),\n// where rougher material will reflect less light back to the viewer.\n// This implementation is based on [1] Equation 4, and we adopt their modifications to\n// alphaRoughness as input as originally proposed in [2].\nfloat geometricOcclusion(PBRInfo pbrInfo)\n{\n float NdotL = pbrInfo.NdotL;\n float NdotV = pbrInfo.NdotV;\n float r = pbrInfo.alphaRoughness;\n\n float attenuationL = 2.0 * NdotL / (NdotL + sqrt(r * r + (1.0 - r * r) * (NdotL * NdotL)));\n float attenuationV = 2.0 * NdotV / (NdotV + sqrt(r * r + (1.0 - r * r) * (NdotV * NdotV)));\n return attenuationL * attenuationV;\n}\n\n// The following equation(s) model the distribution of microfacet normals across\n// the area being drawn (aka D())\n// Implementation from \"Average Irregularity Representation of a Roughened Surface\n// for Ray Reflection\" by T. S. Trowbridge, and K. P. Reitz\n// Follows the distribution function recommended in the SIGGRAPH 2013 course notes\n// from EPIC Games [1], Equation 3.\nfloat microfacetDistribution(PBRInfo pbrInfo)\n{\n float roughnessSq = pbrInfo.alphaRoughness * pbrInfo.alphaRoughness;\n float f = (pbrInfo.NdotH * roughnessSq - pbrInfo.NdotH) * pbrInfo.NdotH + 1.0;\n return roughnessSq / (M_PI * f * f);\n}\n\nfloat maxComponent(vec3 value)\n{\n return max(max(value.r, value.g), value.b);\n}\n\nfloat getDielectricF0(float ior)\n{\n float clampedIor = max(ior, 1.0);\n float ratio = (clampedIor - 1.0) / (clampedIor + 1.0);\n return ratio * ratio;\n}\n\nvec2 normalizeDirection(vec2 direction)\n{\n float directionLength = length(direction);\n return directionLength > 0.0001 ? direction / directionLength : vec2(1.0, 0.0);\n}\n\nvec2 rotateDirection(vec2 direction, float rotation)\n{\n float s = sin(rotation);\n float c = cos(rotation);\n return vec2(direction.x * c - direction.y * s, direction.x * s + direction.y * c);\n}\n\nvec3 getIridescenceTint(float iridescence, float thickness, float NdotV)\n{\n if (iridescence <= 0.0) {\n return vec3(1.0);\n }\n\n float phase = 0.015 * thickness * pbrMaterial.iridescenceIor + (1.0 - NdotV) * 6.0;\n vec3 thinFilmTint =\n 0.5 + 0.5 * cos(vec3(phase, phase + 2.0943951, phase + 4.1887902));\n return mix(vec3(1.0), thinFilmTint, iridescence);\n}\n\nvec3 getVolumeAttenuation(float thickness)\n{\n if (thickness <= 0.0) {\n return vec3(1.0);\n }\n\n vec3 attenuationCoefficient =\n -log(max(pbrMaterial.attenuationColor, vec3(0.0001))) /\n max(pbrMaterial.attenuationDistance, 0.0001);\n return exp(-attenuationCoefficient * thickness);\n}\n\nPBRInfo createClearcoatPBRInfo(PBRInfo basePBRInfo, vec3 clearcoatNormal, float clearcoatRoughness)\n{\n float perceptualRoughness = clamp(clearcoatRoughness, c_MinRoughness, 1.0);\n float alphaRoughness = perceptualRoughness * perceptualRoughness;\n float NdotV = clamp(abs(dot(clearcoatNormal, basePBRInfo.v)), 0.001, 1.0);\n\n return PBRInfo(\n basePBRInfo.NdotL,\n NdotV,\n basePBRInfo.NdotH,\n basePBRInfo.LdotH,\n basePBRInfo.VdotH,\n perceptualRoughness,\n 0.0,\n vec3(0.04),\n vec3(1.0),\n alphaRoughness,\n vec3(0.0),\n vec3(0.04),\n clearcoatNormal,\n basePBRInfo.v\n );\n}\n\nvec3 calculateClearcoatContribution(\n PBRInfo pbrInfo,\n vec3 lightColor,\n vec3 clearcoatNormal,\n float clearcoatFactor,\n float clearcoatRoughness\n) {\n if (clearcoatFactor <= 0.0) {\n return vec3(0.0);\n }\n\n PBRInfo clearcoatPBRInfo = createClearcoatPBRInfo(pbrInfo, clearcoatNormal, clearcoatRoughness);\n return calculateFinalColor(clearcoatPBRInfo, lightColor) * clearcoatFactor;\n}\n\n#ifdef USE_IBL\nvec3 calculateClearcoatIBLContribution(\n PBRInfo pbrInfo,\n vec3 clearcoatNormal,\n vec3 reflection,\n float clearcoatFactor,\n float clearcoatRoughness\n) {\n if (clearcoatFactor <= 0.0) {\n return vec3(0.0);\n }\n\n PBRInfo clearcoatPBRInfo = createClearcoatPBRInfo(pbrInfo, clearcoatNormal, clearcoatRoughness);\n return getIBLContribution(clearcoatPBRInfo, clearcoatNormal, reflection) * clearcoatFactor;\n}\n#endif\n\nvec3 calculateSheenContribution(\n PBRInfo pbrInfo,\n vec3 lightColor,\n vec3 sheenColor,\n float sheenRoughness\n) {\n if (maxComponent(sheenColor) <= 0.0) {\n return vec3(0.0);\n }\n\n float sheenFresnel = pow(clamp(1.0 - pbrInfo.VdotH, 0.0, 1.0), 5.0);\n float sheenVisibility = mix(1.0, pbrInfo.NdotL * pbrInfo.NdotV, sheenRoughness);\n return pbrInfo.NdotL *\n lightColor *\n sheenColor *\n (0.25 + 0.75 * sheenFresnel) *\n sheenVisibility *\n (1.0 - pbrInfo.metalness);\n}\n\nfloat calculateAnisotropyBoost(\n PBRInfo pbrInfo,\n vec3 anisotropyTangent,\n float anisotropyStrength\n) {\n if (anisotropyStrength <= 0.0) {\n return 1.0;\n }\n\n vec3 anisotropyBitangent = normalize(cross(pbrInfo.n, anisotropyTangent));\n float bitangentViewAlignment = abs(dot(pbrInfo.v, anisotropyBitangent));\n return mix(1.0, 0.65 + 0.7 * bitangentViewAlignment, anisotropyStrength);\n}\n\nvec3 calculateMaterialLightColor(\n PBRInfo pbrInfo,\n vec3 lightColor,\n vec3 clearcoatNormal,\n float clearcoatFactor,\n float clearcoatRoughness,\n vec3 sheenColor,\n float sheenRoughness,\n vec3 anisotropyTangent,\n float anisotropyStrength\n) {\n float anisotropyBoost = calculateAnisotropyBoost(pbrInfo, anisotropyTangent, anisotropyStrength);\n vec3 color = calculateFinalColor(pbrInfo, lightColor) * anisotropyBoost;\n color += calculateClearcoatContribution(\n pbrInfo,\n lightColor,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness\n );\n color += calculateSheenContribution(pbrInfo, lightColor, sheenColor, sheenRoughness);\n return color;\n}\n\nvoid PBRInfo_setAmbientLight(inout PBRInfo pbrInfo) {\n pbrInfo.NdotL = 1.0;\n pbrInfo.NdotH = 0.0;\n pbrInfo.LdotH = 0.0;\n pbrInfo.VdotH = 1.0;\n}\n\nvoid PBRInfo_setDirectionalLight(inout PBRInfo pbrInfo, vec3 lightDirection) {\n vec3 n = pbrInfo.n;\n vec3 v = pbrInfo.v;\n vec3 l = normalize(lightDirection); // Vector from surface point to light\n vec3 h = normalize(l+v); // Half vector between both l and v\n\n pbrInfo.NdotL = clamp(dot(n, l), 0.001, 1.0);\n pbrInfo.NdotH = clamp(dot(n, h), 0.0, 1.0);\n pbrInfo.LdotH = clamp(dot(l, h), 0.0, 1.0);\n pbrInfo.VdotH = clamp(dot(v, h), 0.0, 1.0);\n}\n\nvoid PBRInfo_setPointLight(inout PBRInfo pbrInfo, PointLight pointLight) {\n vec3 light_direction = normalize(pointLight.position - pbr_vPosition);\n PBRInfo_setDirectionalLight(pbrInfo, light_direction);\n}\n\nvoid PBRInfo_setSpotLight(inout PBRInfo pbrInfo, SpotLight spotLight) {\n vec3 light_direction = normalize(spotLight.position - pbr_vPosition);\n PBRInfo_setDirectionalLight(pbrInfo, light_direction);\n}\n\nvec3 calculateFinalColor(PBRInfo pbrInfo, vec3 lightColor) {\n // Calculate the shading terms for the microfacet specular shading model\n vec3 F = specularReflection(pbrInfo);\n float G = geometricOcclusion(pbrInfo);\n float D = microfacetDistribution(pbrInfo);\n\n // Calculation of analytical lighting contribution\n vec3 diffuseContrib = (1.0 - F) * diffuse(pbrInfo);\n vec3 specContrib = F * G * D / (4.0 * pbrInfo.NdotL * pbrInfo.NdotV);\n // Obtain final intensity as reflectance (BRDF) scaled by the energy of the light (cosine law)\n return pbrInfo.NdotL * lightColor * (diffuseContrib + specContrib);\n}\n\nvec4 pbr_filterColor(vec4 colorUnused)\n{\n vec2 baseColorUV = getMaterialUV(pbrMaterial.baseColorUVSet, pbrMaterial.baseColorUVTransform);\n vec2 metallicRoughnessUV = getMaterialUV(\n pbrMaterial.metallicRoughnessUVSet,\n pbrMaterial.metallicRoughnessUVTransform\n );\n vec2 normalUV = getMaterialUV(pbrMaterial.normalUVSet, pbrMaterial.normalUVTransform);\n vec2 occlusionUV = getMaterialUV(pbrMaterial.occlusionUVSet, pbrMaterial.occlusionUVTransform);\n vec2 emissiveUV = getMaterialUV(pbrMaterial.emissiveUVSet, pbrMaterial.emissiveUVTransform);\n vec2 specularColorUV = getMaterialUV(\n pbrMaterial.specularColorUVSet,\n pbrMaterial.specularColorUVTransform\n );\n vec2 specularIntensityUV = getMaterialUV(\n pbrMaterial.specularIntensityUVSet,\n pbrMaterial.specularIntensityUVTransform\n );\n vec2 transmissionUV = getMaterialUV(\n pbrMaterial.transmissionUVSet,\n pbrMaterial.transmissionUVTransform\n );\n vec2 thicknessUV = getMaterialUV(pbrMaterial.thicknessUVSet, pbrMaterial.thicknessUVTransform);\n vec2 clearcoatUV = getMaterialUV(pbrMaterial.clearcoatUVSet, pbrMaterial.clearcoatUVTransform);\n vec2 clearcoatRoughnessUV = getMaterialUV(\n pbrMaterial.clearcoatRoughnessUVSet,\n pbrMaterial.clearcoatRoughnessUVTransform\n );\n vec2 clearcoatNormalUV = getMaterialUV(\n pbrMaterial.clearcoatNormalUVSet,\n pbrMaterial.clearcoatNormalUVTransform\n );\n vec2 sheenColorUV = getMaterialUV(\n pbrMaterial.sheenColorUVSet,\n pbrMaterial.sheenColorUVTransform\n );\n vec2 sheenRoughnessUV = getMaterialUV(\n pbrMaterial.sheenRoughnessUVSet,\n pbrMaterial.sheenRoughnessUVTransform\n );\n vec2 iridescenceUV = getMaterialUV(\n pbrMaterial.iridescenceUVSet,\n pbrMaterial.iridescenceUVTransform\n );\n vec2 iridescenceThicknessUV = getMaterialUV(\n pbrMaterial.iridescenceThicknessUVSet,\n pbrMaterial.iridescenceThicknessUVTransform\n );\n vec2 anisotropyUV = getMaterialUV(\n pbrMaterial.anisotropyUVSet,\n pbrMaterial.anisotropyUVTransform\n );\n\n // The albedo may be defined from a base texture or a flat color\n#ifdef HAS_BASECOLORMAP\n vec4 baseColor =\n SRGBtoLINEAR(texture(pbr_baseColorSampler, baseColorUV)) * pbrMaterial.baseColorFactor;\n#else\n vec4 baseColor = pbrMaterial.baseColorFactor;\n#endif\n\n#ifdef ALPHA_CUTOFF\n if (baseColor.a < pbrMaterial.alphaCutoff) {\n discard;\n }\n#endif\n\n vec3 color = vec3(0, 0, 0);\n\n float transmission = 0.0;\n\n if(pbrMaterial.unlit){\n color.rgb = baseColor.rgb;\n }\n else{\n // Metallic and Roughness material properties are packed together\n // In glTF, these factors can be specified by fixed scalar values\n // or from a metallic-roughness map\n float perceptualRoughness = pbrMaterial.metallicRoughnessValues.y;\n float metallic = pbrMaterial.metallicRoughnessValues.x;\n#ifdef HAS_METALROUGHNESSMAP\n // Roughness is stored in the 'g' channel, metallic is stored in the 'b' channel.\n // This layout intentionally reserves the 'r' channel for (optional) occlusion map data\n vec4 mrSample = texture(pbr_metallicRoughnessSampler, metallicRoughnessUV);\n perceptualRoughness = mrSample.g * perceptualRoughness;\n metallic = mrSample.b * metallic;\n#endif\n perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0);\n metallic = clamp(metallic, 0.0, 1.0);\n mat3 tbn = getTBN(normalUV);\n vec3 n = getNormal(tbn, normalUV); // normal at surface point\n vec3 v = normalize(pbrProjection.camera - pbr_vPosition); // Vector from surface point to camera\n float NdotV = clamp(abs(dot(n, v)), 0.001, 1.0);\n#ifdef USE_MATERIAL_EXTENSIONS\n bool useExtendedPBR =\n pbrMaterial.specularColorMapEnabled ||\n pbrMaterial.specularIntensityMapEnabled ||\n abs(pbrMaterial.specularIntensityFactor - 1.0) > 0.0001 ||\n maxComponent(abs(pbrMaterial.specularColorFactor - vec3(1.0))) > 0.0001 ||\n abs(pbrMaterial.ior - 1.5) > 0.0001 ||\n pbrMaterial.transmissionMapEnabled ||\n pbrMaterial.transmissionFactor > 0.0001 ||\n pbrMaterial.clearcoatMapEnabled ||\n pbrMaterial.clearcoatRoughnessMapEnabled ||\n pbrMaterial.clearcoatFactor > 0.0001 ||\n pbrMaterial.clearcoatRoughnessFactor > 0.0001 ||\n pbrMaterial.sheenColorMapEnabled ||\n pbrMaterial.sheenRoughnessMapEnabled ||\n maxComponent(pbrMaterial.sheenColorFactor) > 0.0001 ||\n pbrMaterial.sheenRoughnessFactor > 0.0001 ||\n pbrMaterial.iridescenceMapEnabled ||\n pbrMaterial.iridescenceFactor > 0.0001 ||\n abs(pbrMaterial.iridescenceIor - 1.3) > 0.0001 ||\n abs(pbrMaterial.iridescenceThicknessRange.x - 100.0) > 0.0001 ||\n abs(pbrMaterial.iridescenceThicknessRange.y - 400.0) > 0.0001 ||\n pbrMaterial.anisotropyMapEnabled ||\n pbrMaterial.anisotropyStrength > 0.0001 ||\n abs(pbrMaterial.anisotropyRotation) > 0.0001 ||\n length(pbrMaterial.anisotropyDirection - vec2(1.0, 0.0)) > 0.0001;\n#else\n bool useExtendedPBR = false;\n#endif\n\n if (!useExtendedPBR) {\n // Keep the baseline metallic-roughness implementation byte-for-byte equivalent in behavior.\n float alphaRoughness = perceptualRoughness * perceptualRoughness;\n\n vec3 f0 = vec3(0.04);\n vec3 diffuseColor = baseColor.rgb * (vec3(1.0) - f0);\n diffuseColor *= 1.0 - metallic;\n vec3 specularColor = mix(f0, baseColor.rgb, metallic);\n\n float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n float reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);\n vec3 specularEnvironmentR0 = specularColor.rgb;\n vec3 specularEnvironmentR90 = vec3(1.0, 1.0, 1.0) * reflectance90;\n vec3 reflection = -normalize(reflect(v, n));\n\n PBRInfo pbrInfo = PBRInfo(\n 0.0, // NdotL\n NdotV,\n 0.0, // NdotH\n 0.0, // LdotH\n 0.0, // VdotH\n perceptualRoughness,\n metallic,\n specularEnvironmentR0,\n specularEnvironmentR90,\n alphaRoughness,\n diffuseColor,\n specularColor,\n n,\n v\n );\n\n#ifdef USE_LIGHTS\n PBRInfo_setAmbientLight(pbrInfo);\n color += calculateFinalColor(pbrInfo, lighting.ambientColor);\n\n for(int i = 0; i < lighting.directionalLightCount; i++) {\n if (i < lighting.directionalLightCount) {\n PBRInfo_setDirectionalLight(pbrInfo, lighting_getDirectionalLight(i).direction);\n color += calculateFinalColor(pbrInfo, lighting_getDirectionalLight(i).color);\n }\n }\n\n for(int i = 0; i < lighting.pointLightCount; i++) {\n if (i < lighting.pointLightCount) {\n PBRInfo_setPointLight(pbrInfo, lighting_getPointLight(i));\n float attenuation = getPointLightAttenuation(lighting_getPointLight(i), distance(lighting_getPointLight(i).position, pbr_vPosition));\n color += calculateFinalColor(pbrInfo, lighting_getPointLight(i).color / attenuation);\n }\n }\n\n for(int i = 0; i < lighting.spotLightCount; i++) {\n if (i < lighting.spotLightCount) {\n PBRInfo_setSpotLight(pbrInfo, lighting_getSpotLight(i));\n float attenuation = getSpotLightAttenuation(lighting_getSpotLight(i), pbr_vPosition);\n color += calculateFinalColor(pbrInfo, lighting_getSpotLight(i).color / attenuation);\n }\n }\n#endif\n\n#ifdef USE_IBL\n if (pbrMaterial.IBLenabled) {\n color += getIBLContribution(pbrInfo, n, reflection);\n }\n#endif\n\n#ifdef HAS_OCCLUSIONMAP\n if (pbrMaterial.occlusionMapEnabled) {\n float ao = texture(pbr_occlusionSampler, occlusionUV).r;\n color = mix(color, color * ao, pbrMaterial.occlusionStrength);\n }\n#endif\n\n vec3 emissive = pbrMaterial.emissiveFactor;\n#ifdef HAS_EMISSIVEMAP\n if (pbrMaterial.emissiveMapEnabled) {\n emissive *= SRGBtoLINEAR(texture(pbr_emissiveSampler, emissiveUV)).rgb;\n }\n#endif\n color += emissive * pbrMaterial.emissiveStrength;\n\n#ifdef PBR_DEBUG\n color = mix(color, baseColor.rgb, pbrMaterial.scaleDiffBaseMR.y);\n color = mix(color, vec3(metallic), pbrMaterial.scaleDiffBaseMR.z);\n color = mix(color, vec3(perceptualRoughness), pbrMaterial.scaleDiffBaseMR.w);\n#endif\n\n return vec4(pow(color, vec3(1.0 / 2.2)), baseColor.a);\n }\n\n float specularIntensity = pbrMaterial.specularIntensityFactor;\n#ifdef HAS_SPECULARINTENSITYMAP\n if (pbrMaterial.specularIntensityMapEnabled) {\n specularIntensity *= texture(pbr_specularIntensitySampler, specularIntensityUV).a;\n }\n#endif\n\n vec3 specularFactor = pbrMaterial.specularColorFactor;\n#ifdef HAS_SPECULARCOLORMAP\n if (pbrMaterial.specularColorMapEnabled) {\n specularFactor *= SRGBtoLINEAR(texture(pbr_specularColorSampler, specularColorUV)).rgb;\n }\n#endif\n\n transmission = pbrMaterial.transmissionFactor;\n#ifdef HAS_TRANSMISSIONMAP\n if (pbrMaterial.transmissionMapEnabled) {\n transmission *= texture(pbr_transmissionSampler, transmissionUV).r;\n }\n#endif\n transmission = clamp(transmission * (1.0 - metallic), 0.0, 1.0);\n float thickness = max(pbrMaterial.thicknessFactor, 0.0);\n#ifdef HAS_THICKNESSMAP\n thickness *= texture(pbr_thicknessSampler, thicknessUV).g;\n#endif\n\n float clearcoatFactor = pbrMaterial.clearcoatFactor;\n float clearcoatRoughness = pbrMaterial.clearcoatRoughnessFactor;\n#ifdef HAS_CLEARCOATMAP\n if (pbrMaterial.clearcoatMapEnabled) {\n clearcoatFactor *= texture(pbr_clearcoatSampler, clearcoatUV).r;\n }\n#endif\n#ifdef HAS_CLEARCOATROUGHNESSMAP\n if (pbrMaterial.clearcoatRoughnessMapEnabled) {\n clearcoatRoughness *= texture(pbr_clearcoatRoughnessSampler, clearcoatRoughnessUV).g;\n }\n#endif\n clearcoatFactor = clamp(clearcoatFactor, 0.0, 1.0);\n clearcoatRoughness = clamp(clearcoatRoughness, c_MinRoughness, 1.0);\n vec3 clearcoatNormal = getClearcoatNormal(getTBN(clearcoatNormalUV), n, clearcoatNormalUV);\n\n vec3 sheenColor = pbrMaterial.sheenColorFactor;\n float sheenRoughness = pbrMaterial.sheenRoughnessFactor;\n#ifdef HAS_SHEENCOLORMAP\n if (pbrMaterial.sheenColorMapEnabled) {\n sheenColor *= SRGBtoLINEAR(texture(pbr_sheenColorSampler, sheenColorUV)).rgb;\n }\n#endif\n#ifdef HAS_SHEENROUGHNESSMAP\n if (pbrMaterial.sheenRoughnessMapEnabled) {\n sheenRoughness *= texture(pbr_sheenRoughnessSampler, sheenRoughnessUV).a;\n }\n#endif\n sheenRoughness = clamp(sheenRoughness, c_MinRoughness, 1.0);\n\n float iridescence = pbrMaterial.iridescenceFactor;\n#ifdef HAS_IRIDESCENCEMAP\n if (pbrMaterial.iridescenceMapEnabled) {\n iridescence *= texture(pbr_iridescenceSampler, iridescenceUV).r;\n }\n#endif\n iridescence = clamp(iridescence, 0.0, 1.0);\n float iridescenceThickness = mix(\n pbrMaterial.iridescenceThicknessRange.x,\n pbrMaterial.iridescenceThicknessRange.y,\n 0.5\n );\n#ifdef HAS_IRIDESCENCETHICKNESSMAP\n iridescenceThickness = mix(\n pbrMaterial.iridescenceThicknessRange.x,\n pbrMaterial.iridescenceThicknessRange.y,\n texture(pbr_iridescenceThicknessSampler, iridescenceThicknessUV).g\n );\n#endif\n\n float anisotropyStrength = clamp(pbrMaterial.anisotropyStrength, 0.0, 1.0);\n vec2 anisotropyDirection = normalizeDirection(pbrMaterial.anisotropyDirection);\n#ifdef HAS_ANISOTROPYMAP\n if (pbrMaterial.anisotropyMapEnabled) {\n vec3 anisotropySample = texture(pbr_anisotropySampler, anisotropyUV).rgb;\n anisotropyStrength *= anisotropySample.b;\n vec2 mappedDirection = anisotropySample.rg * 2.0 - 1.0;\n if (length(mappedDirection) > 0.0001) {\n anisotropyDirection = normalize(mappedDirection);\n }\n }\n#endif\n anisotropyDirection = rotateDirection(anisotropyDirection, pbrMaterial.anisotropyRotation);\n vec3 anisotropyTangent = normalize(tbn[0] * anisotropyDirection.x + tbn[1] * anisotropyDirection.y);\n if (length(anisotropyTangent) < 0.0001) {\n anisotropyTangent = normalize(tbn[0]);\n }\n float anisotropyViewAlignment = abs(dot(v, anisotropyTangent));\n perceptualRoughness = mix(\n perceptualRoughness,\n clamp(perceptualRoughness * (1.0 - 0.6 * anisotropyViewAlignment), c_MinRoughness, 1.0),\n anisotropyStrength\n );\n\n // Roughness is authored as perceptual roughness; as is convention,\n // convert to material roughness by squaring the perceptual roughness [2].\n float alphaRoughness = perceptualRoughness * perceptualRoughness;\n\n float dielectricF0 = getDielectricF0(pbrMaterial.ior);\n vec3 dielectricSpecularF0 = min(\n vec3(dielectricF0) * specularFactor * specularIntensity,\n vec3(1.0)\n );\n vec3 iridescenceTint = getIridescenceTint(iridescence, iridescenceThickness, NdotV);\n dielectricSpecularF0 = mix(\n dielectricSpecularF0,\n dielectricSpecularF0 * iridescenceTint,\n iridescence\n );\n vec3 diffuseColor = baseColor.rgb * (vec3(1.0) - dielectricSpecularF0);\n diffuseColor *= (1.0 - metallic) * (1.0 - transmission);\n vec3 specularColor = mix(dielectricSpecularF0, baseColor.rgb, metallic);\n\n float baseLayerEnergy = 1.0 - clearcoatFactor * 0.25;\n diffuseColor *= baseLayerEnergy;\n specularColor *= baseLayerEnergy;\n\n // Compute reflectance.\n float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);\n\n // For typical incident reflectance range (between 4% to 100%) set the grazing\n // reflectance to 100% for typical fresnel effect.\n // For very low reflectance range on highly diffuse objects (below 4%),\n // incrementally reduce grazing reflecance to 0%.\n float reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);\n vec3 specularEnvironmentR0 = specularColor.rgb;\n vec3 specularEnvironmentR90 = vec3(1.0, 1.0, 1.0) * reflectance90;\n vec3 reflection = -normalize(reflect(v, n));\n\n PBRInfo pbrInfo = PBRInfo(\n 0.0, // NdotL\n NdotV,\n 0.0, // NdotH\n 0.0, // LdotH\n 0.0, // VdotH\n perceptualRoughness,\n metallic,\n specularEnvironmentR0,\n specularEnvironmentR90,\n alphaRoughness,\n diffuseColor,\n specularColor,\n n,\n v\n );\n\n\n#ifdef USE_LIGHTS\n // Apply ambient light\n PBRInfo_setAmbientLight(pbrInfo);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting.ambientColor,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n\n // Apply directional light\n for(int i = 0; i < lighting.directionalLightCount; i++) {\n if (i < lighting.directionalLightCount) {\n PBRInfo_setDirectionalLight(pbrInfo, lighting_getDirectionalLight(i).direction);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getDirectionalLight(i).color,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n\n // Apply point light\n for(int i = 0; i < lighting.pointLightCount; i++) {\n if (i < lighting.pointLightCount) {\n PBRInfo_setPointLight(pbrInfo, lighting_getPointLight(i));\n float attenuation = getPointLightAttenuation(lighting_getPointLight(i), distance(lighting_getPointLight(i).position, pbr_vPosition));\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getPointLight(i).color / attenuation,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n\n for(int i = 0; i < lighting.spotLightCount; i++) {\n if (i < lighting.spotLightCount) {\n PBRInfo_setSpotLight(pbrInfo, lighting_getSpotLight(i));\n float attenuation = getSpotLightAttenuation(lighting_getSpotLight(i), pbr_vPosition);\n color += calculateMaterialLightColor(\n pbrInfo,\n lighting_getSpotLight(i).color / attenuation,\n clearcoatNormal,\n clearcoatFactor,\n clearcoatRoughness,\n sheenColor,\n sheenRoughness,\n anisotropyTangent,\n anisotropyStrength\n );\n }\n }\n#endif\n\n // Calculate lighting contribution from image based lighting source (IBL)\n#ifdef USE_IBL\n if (pbrMaterial.IBLenabled) {\n color += getIBLContribution(pbrInfo, n, reflection) *\n calculateAnisotropyBoost(pbrInfo, anisotropyTangent, anisotropyStrength);\n color += calculateClearcoatIBLContribution(\n pbrInfo,\n clearcoatNormal,\n -normalize(reflect(v, clearcoatNormal)),\n clearcoatFactor,\n clearcoatRoughness\n );\n color += sheenColor * pbrMaterial.scaleIBLAmbient.x * (1.0 - sheenRoughness) * 0.25;\n }\n#endif\n\n // Apply optional PBR terms for additional (optional) shading\n#ifdef HAS_OCCLUSIONMAP\n if (pbrMaterial.occlusionMapEnabled) {\n float ao = texture(pbr_occlusionSampler, occlusionUV).r;\n color = mix(color, color * ao, pbrMaterial.occlusionStrength);\n }\n#endif\n\n vec3 emissive = pbrMaterial.emissiveFactor;\n#ifdef HAS_EMISSIVEMAP\n if (pbrMaterial.emissiveMapEnabled) {\n emissive *= SRGBtoLINEAR(texture(pbr_emissiveSampler, emissiveUV)).rgb;\n }\n#endif\n color += emissive * pbrMaterial.emissiveStrength;\n\n if (transmission > 0.0) {\n color = mix(color, color * getVolumeAttenuation(thickness), transmission);\n }\n\n // This section uses mix to override final color for reference app visualization\n // of various parameters in the lighting equation.\n#ifdef PBR_DEBUG\n // TODO: Figure out how to debug multiple lights\n\n // color = mix(color, F, pbr_scaleFGDSpec.x);\n // color = mix(color, vec3(G), pbr_scaleFGDSpec.y);\n // color = mix(color, vec3(D), pbr_scaleFGDSpec.z);\n // color = mix(color, specContrib, pbr_scaleFGDSpec.w);\n\n // color = mix(color, diffuseContrib, pbr_scaleDiffBaseMR.x);\n color = mix(color, baseColor.rgb, pbrMaterial.scaleDiffBaseMR.y);\n color = mix(color, vec3(metallic), pbrMaterial.scaleDiffBaseMR.z);\n color = mix(color, vec3(perceptualRoughness), pbrMaterial.scaleDiffBaseMR.w);\n#endif\n\n }\n\n float alpha = clamp(baseColor.a * (1.0 - transmission), 0.0, 1.0);\n return vec4(pow(color,vec3(1.0/2.2)), alpha);\n}\n",defines:{LIGHTING_FRAGMENT:!0,HAS_NORMALMAP:!1,HAS_EMISSIVEMAP:!1,HAS_OCCLUSIONMAP:!1,HAS_BASECOLORMAP:!1,HAS_METALROUGHNESSMAP:!1,HAS_SPECULARCOLORMAP:!1,HAS_SPECULARINTENSITYMAP:!1,HAS_TRANSMISSIONMAP:!1,HAS_THICKNESSMAP:!1,HAS_CLEARCOATMAP:!1,HAS_CLEARCOATROUGHNESSMAP:!1,HAS_CLEARCOATNORMALMAP:!1,HAS_SHEENCOLORMAP:!1,HAS_SHEENROUGHNESSMAP:!1,HAS_IRIDESCENCEMAP:!1,HAS_IRIDESCENCETHICKNESSMAP:!1,HAS_ANISOTROPYMAP:!1,USE_MATERIAL_EXTENSIONS:!1,ALPHA_CUTOFF:!1,USE_IBL:!1,PBR_DEBUG:!1},getUniforms:e=>e,uniformTypes:{unlit:"i32",baseColorMapEnabled:"i32",baseColorFactor:"vec4<f32>",normalMapEnabled:"i32",normalScale:"f32",emissiveMapEnabled:"i32",emissiveFactor:"vec3<f32>",metallicRoughnessValues:"vec2<f32>",metallicRoughnessMapEnabled:"i32",occlusionMapEnabled:"i32",occlusionStrength:"f32",alphaCutoffEnabled:"i32",alphaCutoff:"f32",specularColorFactor:"vec3<f32>",specularIntensityFactor:"f32",specularColorMapEnabled:"i32",specularIntensityMapEnabled:"i32",ior:"f32",transmissionFactor:"f32",transmissionMapEnabled:"i32",thicknessFactor:"f32",attenuationDistance:"f32",attenuationColor:"vec3<f32>",clearcoatFactor:"f32",clearcoatRoughnessFactor:"f32",clearcoatMapEnabled:"i32",clearcoatRoughnessMapEnabled:"i32",sheenColorFactor:"vec3<f32>",sheenRoughnessFactor:"f32",sheenColorMapEnabled:"i32",sheenRoughnessMapEnabled:"i32",iridescenceFactor:"f32",iridescenceIor:"f32",iridescenceThicknessRange:"vec2<f32>",iridescenceMapEnabled:"i32",anisotropyStrength:"f32",anisotropyRotation:"f32",anisotropyDirection:"vec2<f32>",anisotropyMapEnabled:"i32",emissiveStrength:"f32",IBLenabled:"i32",scaleIBLAmbient:"vec2<f32>",scaleDiffBaseMR:"vec4<f32>",scaleFGDSpec:"vec4<f32>",baseColorUVSet:"i32",baseColorUVTransform:"mat3x3<f32>",metallicRoughnessUVSet:"i32",metallicRoughnessUVTransform:"mat3x3<f32>",normalUVSet:"i32",normalUVTransform:"mat3x3<f32>",occlusionUVSet:"i32",occlusionUVTransform:"mat3x3<f32>",emissiveUVSet:"i32",emissiveUVTransform:"mat3x3<f32>",specularColorUVSet:"i32",specularColorUVTransform:"mat3x3<f32>",specularIntensityUVSet:"i32",specularIntensityUVTransform:"mat3x3<f32>",transmissionUVSet:"i32",transmissionUVTransform:"mat3x3<f32>",thicknessUVSet:"i32",thicknessUVTransform:"mat3x3<f32>",clearcoatUVSet:"i32",clearcoatUVTransform:"mat3x3<f32>",clearcoatRoughnessUVSet:"i32",clearcoatRoughnessUVTransform:"mat3x3<f32>",clearcoatNormalUVSet:"i32",clearcoatNormalUVTransform:"mat3x3<f32>",sheenColorUVSet:"i32",sheenColorUVTransform:"mat3x3<f32>",sheenRoughnessUVSet:"i32",sheenRoughnessUVTransform:"mat3x3<f32>",iridescenceUVSet:"i32",iridescenceUVTransform:"mat3x3<f32>",iridescenceThicknessUVSet:"i32",iridescenceThicknessUVTransform:"mat3x3<f32>",anisotropyUVSet:"i32",anisotropyUVTransform:"mat3x3<f32>"}},Z=3;class ${device;modules;_materialBindingNames;_materialModuleNames;constructor(t,n={}){this.device=t,this.modules=n.modules||[];const A=new e.ShaderInputs(Object.fromEntries(this.modules.map(e=>[e.name,e])));this._materialBindingNames=function(e){const t=new Set;for(const n of Object.values(e.modules))for(const e of n.bindingLayout||[])3===e.group&&t.add(e.name);return t}(A),this._materialModuleNames=function(e){const t=new Set;for(const n of Object.values(e.modules))n.name&&n.bindingLayout?.some(e=>3===e.group&&e.name===n.name)&&t.add(n.name);return t}(A)}createMaterial(e={}){return new te(this.device,{...e,factory:this})}getBindingNames(){return Array.from(this._materialBindingNames)}ownsBinding(e){if(this._materialBindingNames.has(e))return!0;const t=ee(e);return!!t&&this._materialModuleNames.has(t)}ownsModule(e){return this._materialModuleNames.has(e)}getBindingsByGroup(e){return Object.keys(e).length>0?{[Z]:e}:{}}}function ee(e){return e.endsWith("Uniforms")?e.slice(0,-8):null}class te{id;device;factory;shaderInputs;bindings={};_uniformStore;_bindGroupCacheToken={};constructor(t,n={}){this.id=n.id||e.uid("material"),this.device=t,this.factory=n.factory||new $(t,{modules:n.modules||n.shaderInputs?.getModules()||[]});const A=Object.fromEntries((n.shaderInputs?.getModules()||this.factory.modules).map(e=>[e.name,e]));this.shaderInputs=n.shaderInputs||new e.ShaderInputs(A),this._uniformStore=new e.UniformStore(this.device,this.shaderInputs.modules);for(const[r,i]of Object.entries(this.shaderInputs.modules))if(this.ownsModule(r)&&e.shaderModuleHasUniforms(i)){const e=this._uniformStore.getManagedUniformBuffer(r);this.bindings[`${r}Uniforms`]=e}this.updateShaderInputs(),n.bindings&&this._replaceOwnedBindings(n.bindings)}destroy(){this._uniformStore.destroy()}clone(e={}){const t=this.factory.createMaterial({id:e.id,shaderInputs:e.shaderInputs,bindings:{...this.getResourceBindings(),...e.bindings}});return e.shaderInputs||t.setProps(this.shaderInputs.getUniformValues()),e.moduleProps&&t.setProps(e.moduleProps),t}ownsBinding(e){return this.factory.ownsBinding(e)}ownsModule(e){return this.factory.ownsModule(e)}setProps(e){this.shaderInputs.setProps(e),this.updateShaderInputs()}updateShaderInputs(){this._uniformStore.setUniforms(this.shaderInputs.getUniformValues());this._setOwnedBindings(this.shaderInputs.getBindingValues())&&(this._bindGroupCacheToken={})}getResourceBindings(){const e={};for(const[t,n]of Object.entries(this.bindings))ee(t)||(e[t]=n);return e}getBindings(){const t={},n=t;for(const[A,r]of Object.entries(this.bindings))r instanceof e.DynamicTexture?r.isReady&&(n[A]=r.texture):n[A]=r;return t}getBindingsByGroup(){return this.factory.getBindingsByGroup(this.getBindings())}getBindGroupCacheKey(e){return 3===e?this._bindGroupCacheToken:null}getBindingsUpdateTimestamp(){let n=0;for(const A of Object.values(this.bindings))A instanceof r.TextureView?n=Math.max(n,A.texture.updateTimestamp):A instanceof t.Buffer||A instanceof t.Texture?n=Math.max(n,A.updateTimestamp):A instanceof e.DynamicTexture?n=A.texture?Math.max(n,A.texture.updateTimestamp):1/0:A instanceof t.Sampler||(n=Math.max(n,A.buffer.updateTimestamp));return n}_replaceOwnedBindings(e){this._setOwnedBindings(e)&&(this._bindGroupCacheToken={})}_setOwnedBindings(e){let t=!1;for(const[n,A]of Object.entries(e))void 0!==A&&this.ownsBinding(n)&&this.bindings[n]!==A&&(this.bindings[n]=A,t=!0);return t}}function ne(e,t){if(!e)throw new Error(t)}class Ae{id;matrix=new t.Matrix4;display=!0;position=new t.Vector3;rotation=new t.Vector3;scale=new t.Vector3(1,1,1);userData={};props={};constructor(t={}){const{id:n}=t;this.id=n||e.uid(this.constructor.name),this._setScenegraphNodeProps(t)}getBounds(){return null}destroy(){}delete(){this.destroy()}setProps(e){return this._setScenegraphNodeProps(e),this}toString(){return`{type: ScenegraphNode, id: ${this.id})}`}setPosition(e){return ne(3===e.length,"setPosition requires vector argument"),this.position=e,this}setRotation(e){return ne(3===e.length||4===e.length,"setRotation requires vector argument"),this.rotation=e,this}setScale(e){return ne(3===e.length,"setScale requires vector argument"),this.scale=e,this}setMatrix(e,t=!0){t?this.matrix.copy(e):this.matrix=e}setMatrixComponents(e){const{position:t,rotation:n,scale:A,update:r=!0}=e;return t&&this.setPosition(t),n&&this.setRotation(n),A&&this.setScale(A),r&&this.updateMatrix(),this}updateMatrix(){if(this.matrix.identity(),this.matrix.translate(this.position),4===this.rotation.length){const e=(new t.Matrix4).fromQuaternion(this.rotation);this.matrix.multiplyRight(e)}else this.matrix.rotateXYZ(this.rotation);return this.matrix.scale(this.scale),this}update({position:e,rotation:t,scale:n}={}){return e&&this.setPosition(e),t&&this.setRotation(t),n&&this.setScale(n),this.updateMatrix(),this}getCoordinateUniforms(e,n){n=n||this.matrix;const A=new t.Matrix4(e).multiplyRight(n),r=A.invert(),i=r.transpose();return{viewMatrix:e,modelMatrix:n,objectMatrix:n,worldMatrix:A,worldInverseMatrix:r,worldInverseTransposeMatrix:i}}_setScenegraphNodeProps(e){e?.position&&this.setPosition(e.position),e?.rotation&&this.setRotation(e.rotation),e?.scale&&this.setScale(e.scale),this.updateMatrix(),e?.matrix&&this.setMatrix(e.matrix),Object.assign(this.props,e)}}class re extends Ae{children;constructor(e={}){e=Array.isArray(e)?{children:e}:e;const{children:n=[]}=e;t.log.assert(n.every(e=>e instanceof Ae),"every child must an instance of ScenegraphNode"),super(e),this.children=n}getBounds(){const e=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];return this.traverse((n,{worldMatrix:A})=>{const r=n.getBounds();if(!r)return;const[i,s]=r,o=new t.Vector3(i).add(s).divide([2,2,2]);A.transformAsPoint(o,o);const a=new t.Vector3(s).subtract(i).divide([2,2,2]);A.transformAsVector(a,a);for(let l=0;l<8;l++){const n=new t.Vector3(1&l?-1:1,2&l?-1:1,4&l?-1:1).multiply(a).add(o);for(let t=0;t<3;t++)e[0][t]=Math.min(e[0][t],n[t]),e[1][t]=Math.max(e[1][t],n[t])}}),Number.isFinite(e[0][0])?e:null}destroy(){this.children.forEach(e=>e.destroy()),this.removeAll(),super.destroy()}add(...e){for(const t of e)Array.isArray(t)?this.add(...t):this.children.push(t);return this}remove(e){const t=this.children,n=t.indexOf(e);return n>-1&&t.splice(n,1),this}removeAll(){return this.children=[],this}traverse(e,{worldMatrix:n=new t.Matrix4}={}){const A=new t.Matrix4(n).multiplyRight(this.matrix);for(const t of this.children)t instanceof re?t.traverse(e,{worldMatrix:A}):e(t,{worldMatrix:A})}preorderTraversal(e,{worldMatrix:n=new t.Matrix4}={}){const A=new t.Matrix4(n).multiplyRight(this.matrix);e(this,{worldMatrix:A});for(const t of this.children)t instanceof re?t.preorderTraversal(e,{worldMatrix:A}):e(t,{worldMatrix:A})}}class ie extends Ae{model;bounds=null;managedResources;constructor(e){super(e),this.model=e.model,this.managedResources=e.managedResources||[],this.bounds=e.bounds||null,this.setProps(e)}destroy(){this.model&&(this.model.destroy(),this.model=null),this.managedResources.forEach(e=>e.destroy()),this.managedResources=[]}getBounds(){return this.bounds}draw(e){return this.model.draw(e)}}class se{static get componentName(){return Object.prototype.hasOwnProperty.call(this,"extensionName")?this.extensionName:""}constructor(e){e&&(this.opts=e)}equals(e){return this===e||this.constructor===e.constructor&&t.deepEqual(this.opts,e.opts,1)}getShaders(e){return null}getSubLayerProps(e){const{defaultProps:t}=e.constructor,n={updateTriggers:{}};for(const A in t)if(A in this.props){const e=t[A],r=this.props[A];n[A]=r,e&&"accessor"===e.type&&(n.updateTriggers[A]=this.props.updateTriggers[A],"function"==typeof r&&(n[A]=this.getSubLayerAccessor(r)))}return n}initializeState(e,t){}updateState(e,t){}onNeedsRedraw(e){}getNeedsPickingBuffer(e){return!1}draw(e,t){}finalizeState(e,t){}}se.defaultProps={},se.extensionName="LayerExtension";const oe={...e.PolygonLayer.defaultProps};class ae extends e.CompositeLayer{indexToBounds(){return null}renderLayers(){const{elevationScale:t,extruded:n,wireframe:A,filled:r,stroked:i,lineWidthUnits:s,lineWidthScale:o,lineWidthMinPixels:a,lineWidthMaxPixels:l,lineJointRounded:c,lineMiterLimit:u,lineDashJustified:f,getElevation:h,getFillColor:d,getLineColor:p,getLineWidth:m}=this.props,{updateTriggers:g,material:b,transitions:y}=this.props,B=this.getSubLayerClass("cell",e.PolygonLayer),{updateTriggers:v,...C}=this.indexToBounds()||{};return new B({filled:r,wireframe:A,extruded:n,elevationScale:t,stroked:i,lineWidthUnits:s,lineWidthScale:o,lineWidthMinPixels:a,lineWidthMaxPixels:l,lineJointRounded:c,lineMiterLimit:u,lineDashJustified:f,material:b,transitions:y,getElevation:h,getFillColor:d,getLineColor:p,getLineWidth:m},this.getSubLayerProps({id:"cell",updateTriggers:g&&{...v,getElevation:g.getElevation,getFillColor:g.getFillColor,getLineColor:g.getLineColor,getLineWidth:g.getLineWidth}}),C)}}ae.layerName="GeoCellLayer",ae.defaultProps=oe;var le=Object.defineProperty,ce=(e,t)=>{for(var n in t)le(e,n,{get:t[n],enumerable:!0})},ue={};ce(ue,{ARRAY_TYPE:()=>he,EPSILON:()=>fe,RANDOM:()=>de,equals:()=>be,setMatrixArrayType:()=>pe,toRadian:()=>ge});var fe=1e-6,he="undefined"!=typeof Float32Array?Float32Array:Array,de=Math.random;function pe(e){he=e}var me=Math.PI/180;function ge(e){return e*me}function be(e,t){return Math.abs(e-t)<=fe*Math.max(1,Math.abs(e),Math.abs(t))}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var ye={};function Be(){var e=new he(4);return he!=Float32Array&&(e[1]=0,e[2]=0),e[0]=1,e[3]=1,e}function ve(e){var t=new he(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Ce(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function _e(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e}function Me(e,t,n,A){var r=new he(4);return r[0]=e,r[1]=t,r[2]=n,r[3]=A,r}function we(e,t,n,A,r){return e[0]=t,e[1]=n,e[2]=A,e[3]=r,e}function Te(e,t){if(e===t){var n=t[1];e[1]=t[2],e[2]=n}else e[0]=t[0],e[1]=t[2],e[2]=t[1],e[3]=t[3];return e}function Ee(e,t){var n=t[0],A=t[1],r=t[2],i=t[3],s=n*i-r*A;return s?(s=1/s,e[0]=i*s,e[1]=-A*s,e[2]=-r*s,e[3]=n*s,e):null}function xe(e,t){var n=t[0];return e[0]=t[3],e[1]=-t[1],e[2]=-t[2],e[3]=n,e}function Se(e){return e[0]*e[3]-e[2]*e[1]}function Ie(e,t,n){var A=t[0],r=t[1],i=t[2],s=t[3],o=n[0],a=n[1],l=n[2],c=n[3];return e[0]=A*o+i*a,e[1]=r*o+s*a,e[2]=A*l+i*c,e[3]=r*l+s*c,e}function Re(e,t,n){var A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);return e[0]=A*a+i*o,e[1]=r*a+s*o,e[2]=A*-o+i*a,e[3]=r*-o+s*a,e}function Le(e,t,n){var A=t[0],r=t[1],i=t[2],s=t[3],o=n[0],a=n[1];return e[0]=A*o,e[1]=r*o,e[2]=i*a,e[3]=s*a,e}function De(e,t){var n=Math.sin(t),A=Math.cos(t);return e[0]=A,e[1]=n,e[2]=-n,e[3]=A,e}function Pe(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=t[1],e}function Fe(e){return"mat2("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"}function Ne(e){return Math.hypot(e[0],e[1],e[2],e[3])}function Oe(e,t,n,A){return e[2]=A[2]/A[0],n[0]=A[0],n[1]=A[1],n[3]=A[3]-e[2]*n[1],[e,t,n]}function Ue(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e}function ke(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e[3]=t[3]-n[3],e}function Ge(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]}function Ve(e,t){var n=e[0],A=e[1],r=e[2],i=e[3],s=t[0],o=t[1],a=t[2],l=t[3];return Math.abs(n-s)<=fe*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(A-o)<=fe*Math.max(1,Math.abs(A),Math.abs(o))&&Math.abs(r-a)<=fe*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(i-l)<=fe*Math.max(1,Math.abs(i),Math.abs(l))}function He(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e}function Qe(e,t,n,A){return e[0]=t[0]+n[0]*A,e[1]=t[1]+n[1]*A,e[2]=t[2]+n[2]*A,e[3]=t[3]+n[3]*A,e}ce(ye,{LDU:()=>Oe,add:()=>Ue,adjoint:()=>xe,clone:()=>ve,copy:()=>Ce,create:()=>Be,determinant:()=>Se,equals:()=>Ve,exactEquals:()=>Ge,frob:()=>Ne,fromRotation:()=>De,fromScaling:()=>Pe,fromValues:()=>Me,identity:()=>_e,invert:()=>Ee,mul:()=>je,multiply:()=>Ie,multiplyScalar:()=>He,multiplyScalarAndAdd:()=>Qe,rotate:()=>Re,scale:()=>Le,set:()=>we,str:()=>Fe,sub:()=>ze,subtract:()=>ke,transpose:()=>Te});var je=Ie,ze=ke;var Je={};ce(Je,{add:()=>vn,calculateW:()=>Zt,clone:()=>gn,conjugate:()=>sn,copy:()=>yn,create:()=>Qt,dot:()=>Mn,equals:()=>Ln,exactEquals:()=>Rn,exp:()=>$t,fromEuler:()=>an,fromMat3:()=>on,fromValues:()=>bn,getAngle:()=>Kt,getAxisAngle:()=>Jt,identity:()=>jt,invert:()=>rn,len:()=>En,length:()=>Tn,lerp:()=>wn,ln:()=>en,mul:()=>Cn,multiply:()=>qt,normalize:()=>In,pow:()=>tn,random:()=>An,rotateX:()=>Yt,rotateY:()=>Wt,rotateZ:()=>Xt,rotationTo:()=>Dn,scale:()=>_n,set:()=>Bn,setAxes:()=>Fn,setAxisAngle:()=>zt,slerp:()=>nn,sqlerp:()=>Pn,sqrLen:()=>Sn,squaredLength:()=>xn,str:()=>ln});var Ke={};function qe(){var e=new he(3);return he!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function Ye(e){var t=new he(3);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function We(e){var t=e[0],n=e[1],A=e[2];return Math.hypot(t,n,A)}function Xe(e,t,n){var A=new he(3);return A[0]=e,A[1]=t,A[2]=n,A}function Ze(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function $e(e,t,n,A){return e[0]=t,e[1]=n,e[2]=A,e}function et(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e}function tt(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e}function nt(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e[2]=t[2]*n[2],e}function At(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e[2]=t[2]/n[2],e}function rt(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e[2]=Math.ceil(t[2]),e}function it(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e[2]=Math.floor(t[2]),e}function st(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e[2]=Math.min(t[2],n[2]),e}function ot(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e[2]=Math.max(t[2],n[2]),e}function at(e,t){return e[0]=Math.round(t[0]),e[1]=Math.round(t[1]),e[2]=Math.round(t[2]),e}function lt(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e}function ct(e,t,n,A){return e[0]=t[0]+n[0]*A,e[1]=t[1]+n[1]*A,e[2]=t[2]+n[2]*A,e}function ut(e,t){var n=t[0]-e[0],A=t[1]-e[1],r=t[2]-e[2];return Math.hypot(n,A,r)}function ft(e,t){var n=t[0]-e[0],A=t[1]-e[1],r=t[2]-e[2];return n*n+A*A+r*r}function ht(e){var t=e[0],n=e[1],A=e[2];return t*t+n*n+A*A}function dt(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e}function pt(e,t){return e[0]=1/t[0],e[1]=1/t[1],e[2]=1/t[2],e}function mt(e,t){var n=t[0],A=t[1],r=t[2],i=n*n+A*A+r*r;return i>0&&(i=1/Math.sqrt(i)),e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e}function gt(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function bt(e,t,n){var A=t[0],r=t[1],i=t[2],s=n[0],o=n[1],a=n[2];return e[0]=r*a-i*o,e[1]=i*s-A*a,e[2]=A*o-r*s,e}function yt(e,t,n,A){var r=t[0],i=t[1],s=t[2];return e[0]=r+A*(n[0]-r),e[1]=i+A*(n[1]-i),e[2]=s+A*(n[2]-s),e}function Bt(e,t,n,A,r,i){var s=i*i,o=s*(2*i-3)+1,a=s*(i-2)+i,l=s*(i-1),c=s*(3-2*i);return e[0]=t[0]*o+n[0]*a+A[0]*l+r[0]*c,e[1]=t[1]*o+n[1]*a+A[1]*l+r[1]*c,e[2]=t[2]*o+n[2]*a+A[2]*l+r[2]*c,e}function vt(e,t,n,A,r,i){var s=1-i,o=s*s,a=i*i,l=o*s,c=3*i*o,u=3*a*s,f=a*i;return e[0]=t[0]*l+n[0]*c+A[0]*u+r[0]*f,e[1]=t[1]*l+n[1]*c+A[1]*u+r[1]*f,e[2]=t[2]*l+n[2]*c+A[2]*u+r[2]*f,e}function Ct(e,t){t=t||1;var n=2*de()*Math.PI,A=2*de()-1,r=Math.sqrt(1-A*A)*t;return e[0]=Math.cos(n)*r,e[1]=Math.sin(n)*r,e[2]=A*t,e}function _t(e,t,n){var A=t[0],r=t[1],i=t[2],s=n[3]*A+n[7]*r+n[11]*i+n[15];return s=s||1,e[0]=(n[0]*A+n[4]*r+n[8]*i+n[12])/s,e[1]=(n[1]*A+n[5]*r+n[9]*i+n[13])/s,e[2]=(n[2]*A+n[6]*r+n[10]*i+n[14])/s,e}function Mt(e,t,n){var A=t[0],r=t[1],i=t[2];return e[0]=A*n[0]+r*n[3]+i*n[6],e[1]=A*n[1]+r*n[4]+i*n[7],e[2]=A*n[2]+r*n[5]+i*n[8],e}function wt(e,t,n){var A=n[0],r=n[1],i=n[2],s=n[3],o=t[0],a=t[1],l=t[2],c=r*l-i*a,u=i*o-A*l,f=A*a-r*o,h=r*f-i*u,d=i*c-A*f,p=A*u-r*c,m=2*s;return c*=m,u*=m,f*=m,h*=2,d*=2,p*=2,e[0]=o+c+h,e[1]=a+u+d,e[2]=l+f+p,e}function Tt(e,t,n,A){var r=[],i=[];return r[0]=t[0]-n[0],r[1]=t[1]-n[1],r[2]=t[2]-n[2],i[0]=r[0],i[1]=r[1]*Math.cos(A)-r[2]*Math.sin(A),i[2]=r[1]*Math.sin(A)+r[2]*Math.cos(A),e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2],e}function Et(e,t,n,A){var r=[],i=[];return r[0]=t[0]-n[0],r[1]=t[1]-n[1],r[2]=t[2]-n[2],i[0]=r[2]*Math.sin(A)+r[0]*Math.cos(A),i[1]=r[1],i[2]=r[2]*Math.cos(A)-r[0]*Math.sin(A),e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2],e}function xt(e,t,n,A){var r=[],i=[];return r[0]=t[0]-n[0],r[1]=t[1]-n[1],r[2]=t[2]-n[2],i[0]=r[0]*Math.cos(A)-r[1]*Math.sin(A),i[1]=r[0]*Math.sin(A)+r[1]*Math.cos(A),i[2]=r[2],e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2],e}function St(e,t){var n=e[0],A=e[1],r=e[2],i=t[0],s=t[1],o=t[2],a=Math.sqrt(n*n+A*A+r*r)*Math.sqrt(i*i+s*s+o*o),l=a&>(e,t)/a;return Math.acos(Math.min(Math.max(l,-1),1))}function It(e){return e[0]=0,e[1]=0,e[2]=0,e}function Rt(e){return"vec3("+e[0]+", "+e[1]+", "+e[2]+")"}function Lt(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function Dt(e,t){var n=e[0],A=e[1],r=e[2],i=t[0],s=t[1],o=t[2];return Math.abs(n-i)<=fe*Math.max(1,Math.abs(n),Math.abs(i))&&Math.abs(A-s)<=fe*Math.max(1,Math.abs(A),Math.abs(s))&&Math.abs(r-o)<=fe*Math.max(1,Math.abs(r),Math.abs(o))}ce(Ke,{add:()=>et,angle:()=>St,bezier:()=>vt,ceil:()=>rt,clone:()=>Ye,copy:()=>Ze,create:()=>qe,cross:()=>bt,dist:()=>Ut,distance:()=>ut,div:()=>Ot,divide:()=>At,dot:()=>gt,equals:()=>Dt,exactEquals:()=>Lt,floor:()=>it,forEach:()=>Ht,fromValues:()=>Xe,hermite:()=>Bt,inverse:()=>pt,len:()=>Gt,length:()=>We,lerp:()=>yt,max:()=>ot,min:()=>st,mul:()=>Nt,multiply:()=>nt,negate:()=>dt,normalize:()=>mt,random:()=>Ct,rotateX:()=>Tt,rotateY:()=>Et,rotateZ:()=>xt,round:()=>at,scale:()=>lt,scaleAndAdd:()=>ct,set:()=>$e,sqrDist:()=>kt,sqrLen:()=>Vt,squaredDistance:()=>ft,squaredLength:()=>ht,str:()=>Rt,sub:()=>Ft,subtract:()=>tt,transformMat3:()=>Mt,transformMat4:()=>_t,transformQuat:()=>wt,zero:()=>It});var Pt,Ft=tt,Nt=nt,Ot=At,Ut=ut,kt=ft,Gt=We,Vt=ht,Ht=(Pt=qe(),function(e,t,n,A,r,i){var s,o;for(t||(t=3),n||(n=0),o=A?Math.min(A*t+n,e.length):e.length,s=n;s<o;s+=t)Pt[0]=e[s],Pt[1]=e[s+1],Pt[2]=e[s+2],r(Pt,Pt,i),e[s]=Pt[0],e[s+1]=Pt[1],e[s+2]=Pt[2];return e});function Qt(){var e=new he(4);return he!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function jt(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e}function zt(e,t,n){n*=.5;var A=Math.sin(n);return e[0]=A*t[0],e[1]=A*t[1],e[2]=A*t[2],e[3]=Math.cos(n),e}function Jt(e,t){var n=2*Math.acos(t[3]),A=Math.sin(n/2);return A>fe?(e[0]=t[0]/A,e[1]=t[1]/A,e[2]=t[2]/A):(e[0]=1,e[1]=0,e[2]=0),n}function Kt(e,t){var n=Mn(e,t);return Math.acos(2*n*n-1)}function qt(e,t,n){var A=t[0],r=t[1],i=t[2],s=t[3],o=n[0],a=n[1],l=n[2],c=n[3];return e[0]=A*c+s*o+r*l-i*a,e[1]=r*c+s*a+i*o-A*l,e[2]=i*c+s*l+A*a-r*o,e[3]=s*c-A*o-r*a-i*l,e}function Yt(e,t,n){n*=.5;var A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);return e[0]=A*a+s*o,e[1]=r*a+i*o,e[2]=i*a-r*o,e[3]=s*a-A*o,e}function Wt(e,t,n){n*=.5;var A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);return e[0]=A*a-i*o,e[1]=r*a+s*o,e[2]=i*a+A*o,e[3]=s*a-r*o,e}function Xt(e,t,n){n*=.5;var A=t[0],r=t[1],i=t[2],s=t[3],o=Math.sin(n),a=Math.cos(n);return e[0]=A*a+r*o,e[1]=r*a-A*o,e[2]=i*a+s*o,e[3]=s*a-i*o,e}function Zt(e,t){var n=t[0],A=t[1],r=t[2];return e[0]=n,e[1]=A,e[2]=r,e[3]=Math.sqrt(Math.abs(1-n*n-A*A-r*r)),e}function $t(e,t){var n=t[0],A=t[1],r=t[2],i=t[3],s=Math.sqrt(n*n+A*A+r*r),o=Math.exp(i),a=s>0?o*Math.sin(s)/s:0;return e[0]=n*a,e[1]=A*a,e[2]=r*a,e[3]=o*Math.cos(s),e}function en(e,t){var n=t[0],A=t[1],r=t[2],i=t[3],s=Math.sqrt(n*n+A*A+r*r),o=s>0?Math.atan2(s,i)/s:0;return e[0]=n*o,e[1]=A*o,e[2]=r*o,e[3]=.5*Math.log(n*n+A*A+r*r+i*i),e}function tn(e,t,n){return en(e,t),_n(e,e,n),$t(e,e),e}function nn(e,t,n,A){var r,i,s,o,a,l=t[0],c=t[1],u=t[2],f=t[3],h=n[0],d=n[1],p=n[2],m=n[3];return(i=l*h+c*d+u*p+f*m)<0&&(i=-i,h=-h,d=-d,p=-p,m=-m),1-i>fe?(r=Math.acos(i),s=Math.sin(r),o=Math.sin((1-A)*r)/s,a=Math.sin(A*r)/s):(o=1-A,a=A),e[0]=o*l+a*h,e[1]=o*c+a*d,e[2]=o*u+a*p,e[3]=o*f+a*m,e}function An(e){var t=de(),n=de(),A=de(),r=Math.sqrt(1-t),i=Math.sqrt(t);return e[0]=r*Math.sin(2*Math.PI*n),e[1]=r*Math.cos(2*Math.PI*n),e[2]=i*Math.sin(2*Math.PI*A),e[3]=i*Math.cos(2*Math.PI*A),e}function rn(e,t){var n=t[0],A=t[1],r=t[2],i=t[3],s=n*n+A*A+r*r+i*i,o=s?1/s:0;return e[0]=-n*o,e[1]=-A*o,e[2]=-r*o,e[3]=i*o,e}function sn(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e}function on(e,t){var n,A=t[0]+t[4]+t[8];if(A>0)n=Math.sqrt(A+1),e[3]=.5*n,n=.5/n,e[0]=(t[5]-t[7])*n,e[1]=(t[6]-t[2])*n,e[2]=(t[1]-t[3])*n;else{var r=0;t[4]>t[0]&&(r=1),t[8]>t[3*r+r]&&(r=2);var i=(r+1)%3,s=(r+2)%3;n=Math.sqrt(t[3*r+r]-t[3*i+i]-t[3*s+s]+1),e[r]=.5*n,n=.5/n,e[3]=(t[3*i+s]-t[3*s+i])*n,e[i]=(t[3*i+r]+t[3*r+i])*n,e[s]=(t[3*s+r]+t[3*r+s])*n}return e}function an(e,t,n,A){var r=.5*Math.PI/180;t*=r,n*=r,A*=r;var i=Math.sin(t),s=Math.cos(t),o=Math.sin(n),a=Math.cos(n),l=Math.sin(A),c=Math.cos(A);return e[0]=i*a*c-s*o*l,e[1]=s*o*c+i*a*l,e[2]=s*a*l-i*o*c,e[3]=s*a*c+i*o*l,e}function ln(e){return"quat("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+")"}!function(){var e,t=(e=new he(4),he!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e)}();var cn,un,fn,hn,dn,pn,mn,gn=function(e){var t=new he(4);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},bn=function(e,t,n,A){var r=new he(4);return r[0]=e,r[1]=t,r[2]=n,r[3]=A,r},yn=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},Bn=function(e,t,n,A,r){return e[0]=t,e[1]=n,e[2]=A,e[3]=r,e},vn=function(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e},Cn=qt,_n=function(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e},Mn=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]},wn=function(e,t,n,A){var r=t[0],i=t[1],s=t[2],o=t[3];return e[0]=r+A*(n[0]-r),e[1]=i+A*(n[1]-i),e[2]=s+A*(n[2]-s),e[3]=o+A*(n[3]-o),e},Tn=function(e){var t=e[0],n=e[1],A=e[2],r=e[3];return Math.hypot(t,n,A,r)},En=Tn,xn=function(e){var t=e[0],n=e[1],A=e[2],r=e[3];return t*t+n*n+A*A+r*r},Sn=xn,In=function(e,t){var n=t[0],A=t[1],r=t[2],i=t[3],s=n*n+A*A+r*r+i*i;return s>0&&(s=1/Math.sqrt(s)),e[0]=n*s,e[1]=A*s,e[2]=r*s,e[3]=i*s,e},Rn=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]},Ln=function(e,t){var n=e[0],A=e[1],r=e[2],i=e[3],s=t[0],o=t[1],a=t[2],l=t[3];return Math.abs(n-s)<=fe*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(A-o)<=fe*Math.max(1,Math.abs(A),Math.abs(o))&&Math.abs(r-a)<=fe*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(i-l)<=fe*Math.max(1,Math.abs(i),Math.abs(l))},Dn=(cn=qe(),un=Xe(1,0,0),fn=Xe(0,1,0),function(e,t,n){var A=gt(t,n);return A<-.999999?(bt(cn,un,t),Gt(cn)<1e-6&&bt(cn,fn,t),mt(cn,cn),zt(e,cn,Math.PI),e):A>.999999?(e[0]=0,e[1]=0,e[2]=0,e[3]=1,e):(bt(cn,t,n),e[0]=cn[0],e[1]=cn[1],e[2]=cn[2],e[3]=1+A,In(e,e))}),Pn=(hn=Qt(),dn=Qt(),function(e,t,n,A,r,i){return nn(hn,t,r,i),nn(dn,n,A,i),nn(e,hn,dn,2*i*(1-i)),e}),Fn=(pn=new he(9),he!=Float32Array&&(pn[1]=0,pn[2]=0,pn[3]=0,pn[5]=0,pn[6]=0,pn[7]=0),pn[0]=1,pn[4]=1,pn[8]=1,mn=pn,function(e,t,n,A){return mn[0]=n[0],mn[3]=n[1],mn[6]=n[2],mn[1]=A[0],mn[4]=A[1],mn[7]=A[2],mn[2]=-t[0],mn[5]=-t[1],mn[8]=-t[2],In(e,on(e,mn))}),Nn={};function On(){var e=new he(2);return he!=Float32Array&&(e[0]=0,e[1]=0),e}function Un(e){var t=new he(2);return t[0]=e[0],t[1]=e[1],t}function kn(e,t){var n=new he(2);return n[0]=e,n[1]=t,n}function Gn(e,t){return e[0]=t[0],e[1]=t[1],e}function Vn(e,t,n){return e[0]=t,e[1]=n,e}function Hn(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e}function Qn(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e}function jn(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e}function zn(e,t,n){return e[0]=t[0]/n[0],e[1]=t[1]/n[1],e}function Jn(e,t){return e[0]=Math.ceil(t[0]),e[1]=Math.ceil(t[1]),e}function Kn(e,t){return e[0]=Math.floor(t[0]),e[1]=Math.floor(t[1]),e}function qn(e,t,n){return e[0]=Math.min(t[0],n[0]),e[1]=Math.min(t[1],n[1]),e}function Yn(e,t,n){return e[0]=Math.max(t[0],n[0]),e[1]=Math.max(t[1],n[1]),e}function Wn(e,t){return e[0]=Math.round(t[0]),e[1]=Math.round(t[1]),e}function Xn(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e}function Zn(e,t,n,A){return e[0]=t[0]+n[0]*A,e[1]=t[1]+n[1]*A,e}function $n(e,t){var n=t[0]-e[0],A=t[1]-e[1];return Math.hypot(n,A)}function eA(e,t){var n=t[0]-e[0],A=t[1]-e[1];return n*n+A*A}function tA(e){var t=e[0],n=e[1];return Math.hypot(t,n)}function nA(e){var t=e[0],n=e[1];return t*t+n*n}function AA(e,t){return e[0]=-t[0],e[1]=-t[1],e}function rA(e,t){return e[0]=1/t[0],e[1]=1/t[1],e}function iA(e,t){var n=t[0],A=t[1],r=n*n+A*A;return r>0&&(r=1/Math.sqrt(r)),e[0]=t[0]*r,e[1]=t[1]*r,e}function sA(e,t){return e[0]*t[0]+e[1]*t[1]}function oA(e,t,n){var A=t[0]*n[1]-t[1]*n[0];return e[0]=e[1]=0,e[2]=A,e}function aA(e,t,n,A){var r=t[0],i=t[1];return e[0]=r+A*(n[0]-r),e[1]=i+A*(n[1]-i),e}function lA(e,t){t=t||1;var n=2*de()*Math.PI;return e[0]=Math.cos(n)*t,e[1]=Math.sin(n)*t,e}function cA(e,t,n){var A=t[0],r=t[1];return e[0]=n[0]*A+n[2]*r,e[1]=n[1]*A+n[3]*r,e}function uA(e,t,n){var A=t[0],r=t[1];return e[0]=n[0]*A+n[2]*r+n[4],e[1]=n[1]*A+n[3]*r+n[5],e}function fA(e,t,n){var A=t[0],r=t[1];return e[0]=n[0]*A+n[3]*r+n[6],e[1]=n[1]*A+n[4]*r+n[7],e}function hA(e,t,n){var A=t[0],r=t[1];return e[0]=n[0]*A+n[4]*r+n[12],e[1]=n[1]*A+n[5]*r+n[13],e}function dA(e,t,n,A){var r=t[0]-n[0],i=t[1]-n[1],s=Math.sin(A),o=Math.cos(A);return e[0]=r*o-i*s+n[0],e[1]=r*s+i*o+n[1],e}function pA(e,t){var n=e[0],A=e[1],r=t[0],i=t[1],s=Math.sqrt(n*n+A*A)*Math.sqrt(r*r+i*i),o=s&&(n*r+A*i)/s;return Math.acos(Math.min(Math.max(o,-1),1))}function mA(e){return e[0]=0,e[1]=0,e}function gA(e){return"vec2("+e[0]+", "+e[1]+")"}function bA(e,t){return e[0]===t[0]&&e[1]===t[1]}function yA(e,t){var n=e[0],A=e[1],r=t[0],i=t[1];return Math.abs(n-r)<=fe*Math.max(1,Math.abs(n),Math.abs(r))&&Math.abs(A-i)<=fe*Math.max(1,Math.abs(A),Math.abs(i))}ce(Nn,{add:()=>Hn,angle:()=>pA,ceil:()=>Jn,clone:()=>Un,copy:()=>Gn,create:()=>On,cross:()=>oA,dist:()=>MA,distance:()=>$n,div:()=>_A,divide:()=>zn,dot:()=>sA,equals:()=>yA,exactEquals:()=>bA,floor:()=>Kn,forEach:()=>EA,fromValues:()=>kn,inverse:()=>rA,len:()=>BA,length:()=>tA,lerp:()=>aA,max:()=>Yn,min:()=>qn,mul:()=>CA,multiply:()=>jn,negate:()=>AA,normalize:()=>iA,random:()=>lA,rotate:()=>dA,round:()=>Wn,scale:()=>Xn,scaleAndAdd:()=>Zn,set:()=>Vn,sqrDist:()=>wA,sqrLen:()=>TA,squaredDistance:()=>eA,squaredLength:()=>nA,str:()=>gA,sub:()=>vA,subtract:()=>Qn,transformMat2:()=>cA,transformMat2d:()=>uA,transformMat3:()=>fA,transformMat4:()=>hA,zero:()=>mA});var BA=tA,vA=Qn,CA=jn,_A=zn,MA=$n,wA=eA,TA=nA,EA=function(){var e=On();return function(t,n,A,r,i,s){var o,a;for(n||(n=2),A||(A=0),a=r?Math.min(r*n+A,t.length):t.length,o=A;o<a;o+=n)e[0]=t[o],e[1]=t[o+1],i(e,e,s),t[o]=e[0],t[o+1]=e[1];return t}}(),xA=(1+Math.sqrt(5))/2,SA=2*Math.PI/5,IA=Math.PI/5,RA=Math.PI/10,LA=2*Math.atan(xA),DA=Math.PI-LA,PA=(Math.sqrt(5)-1)/2,FA=3-Math.sqrt(5);ue.setMatrixArrayType(Float64Array);var NA=class e{constructor(e){this.vertices=e,this.isWindingCorrect()||this.vertices.reverse()}getArea(){let e=0;const t=this.vertices.length;for(let n=0;n<t;n++){const A=(n+1)%t;e+=(this.vertices[A][0]-this.vertices[n][0])*(this.vertices[A][1]+this.vertices[n][1])}return e}isWindingCorrect(){return this.getArea()>=0}getVertices(){return this.vertices}scale(e){for(const t of this.vertices)Nn.scale(t,t,e);return this}rotate180(){for(const e of this.vertices)Nn.negate(e,e);return this}reflectY(){for(const e of this.vertices)e[1]=-e[1];return this.vertices.reverse(),this}translate(e){for(const t of this.vertices)Nn.add(t,t,e);return this}transform(e){for(const t of this.vertices)Nn.transformMat2(t,t,e);return this}transform2d(e){for(const t of this.vertices)Nn.transformMat2d(t,t,e);return this}clone(){return new e(this.vertices.map(e=>Nn.clone(e)))}getCenter(){const e=this.vertices.length;return this.vertices.reduce((t,n)=>[t[0]+n[0]/e,t[1]+n[1]/e],[0,0])}containsPoint(e){if(!this.isWindingCorrect())throw new Error("Pentagon is not counter-clockwise");const t=this.vertices.length;let n=1;for(let A=0;A<t;A++){const r=this.vertices[A],i=this.vertices[(A+1)%t],s=r[0]-i[0],o=r[1]-i[1],a=e[0]-r[0],l=e[1]-r[1],c=s*l-o*a;if(c<0){const e=Math.sqrt(a*a+l*l);n=Math.min(n,c/e)}}return n}splitEdges(t){if(t<=1)return this;const n=[],A=this.vertices.length;for(let e=0;e<A;e++){const r=this.vertices[e],i=this.vertices[(e+1)%A];n.push(Nn.clone(r));for(let e=1;e<t;e++){const A=e/t,s=Nn.create();Nn.lerp(s,r,i,A),n.push(s)}}return new e(n)}};ue.setMatrixArrayType(Float64Array);var OA=[0,0],UA=[0,1],kA=[.7885966681787006,1.6149108024237764],GA=[1.6171013659387945,1.054928690397459],VA=[Math.cos(RA),Math.sin(RA)],HA=2*Nn.length(kA)*Math.cos(IA),QA=IA-Math.atan2(kA[1],kA[0]),jA=2*PA/HA;[OA,UA,kA,GA,VA].forEach(e=>{Nn.scale(e,e,jA),Nn.rotate(e,e,[0,0],QA)});var zA=new NA([OA,UA,kA,GA,VA]),JA=Math.atan2(kA[1],kA[0])-IA,KA=PA/Math.cos(IA),qA=JA+IA,YA=[KA*Math.cos(qA),KA*Math.sin(qA)],WA=JA-IA,XA=[KA*Math.cos(WA),KA*Math.sin(WA)],ZA=new NA([[0,0],YA,XA]),$A=ye.fromValues(YA[0],YA[1],XA[0],XA[1]);ye.invert(ye.create(),$A);var er=new Float64Array([-.0022392098386786394,21308606513250217e-22,-2.559257686421274e-9,33701965267802837e-28,-4667545312611249e-30,667492870384816e-32]),tr=new Float64Array([.0022392089963541657,28831978048607556e-22,5.08622073997266e-9,102018123778161e-25,21912872306767718e-30,49284235482523806e-33]);ue.setMatrixArrayType(Float64Array);var nr=new class{applyCoefficients(e,t){const n=Math.sin(e),A=Math.cos(e),r=2*(A-n)*(A+n);let i,s;return i=r*t[5]+t[4],s=r*i+t[3],i=r*s-i+t[2],s=r*i-s+t[1],i=r*s-i+t[0],e+2*n*A*i}forward(e){return this.applyCoefficients(e,er)}inverse(e){return this.applyCoefficients(e,tr)}};function Ar(e){return e*(Math.PI/180)}function rr(e){return e*(180/Math.PI)}function ir(e){return[Nn.length(e),Math.atan2(e[1],e[0])]}function sr(e){const t=Math.atan2(e[1],e[0]),n=Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);return[t,Math.acos(e[2]/n)]}function or([e,t]){const n=Math.sin(t);return[n*Math.cos(e),n*Math.sin(e),Math.cos(t)]}function ar(e){return((e+180)%360+360)%360-180}function lr([e,t]){const n=ar(rr(e)-93),A=Math.PI/2-t;return[n,rr(nr.inverse(A))]}function cr(e){const t=e.map(e=>or(function([e,t]){const n=Ar(e+93),A=Ar(t),r=nr.forward(A);return[n,Math.PI/2-r]}(e))),n=Ke.create();for(const i of t)Ke.add(n,n,i);Ke.normalize(n,n);let[A,r]=lr(sr(n));return(r>89.99||r<-89.99)&&(A=e[0][0]),A=ar(A),e.map(e=>{let[t,n]=e;for(;t-A>180;)t-=360;for(;t-A<-180;)t+=360;return[t,n]})}ue.setMatrixArrayType(Float64Array);var ur=Math.sqrt(5),fr=Math.sqrt(.2),hr=Math.sqrt((1-fr)/2),dr=Math.sqrt((1+fr)/2),pr=.5,mr=Math.sqrt((2.5-ur)/10),gr=Math.sqrt((2.5+ur)/10),br=Math.sqrt((1+fr)/8),yr=Math.sqrt((1-fr)/8),Br=Math.sqrt((3-ur)/8),vr=Math.sqrt((3+ur)/8),Cr=[[0,0],[hr,0],[mr,pr],[-br,Br],[-br,-Br],[mr,-pr],[-dr,0],[-yr,-vr],[gr,-pr],[gr,pr],[-yr,vr],[0,0]].map(([e,t])=>[-t,e]).map((e,t)=>0===t?[0,0,0,1]:11===t?[0,-1,0,0]:[...e,0,t<6?dr:hr]);ue.setMatrixArrayType(Float64Array);var _r=["vu","uw","vw","vw","vw"],Mr=["wu","uw","vw","vu","uw"],wr=["wu","uv","wv","wu","uw"],Tr=["vu","uv","wv","wu","uw"],Er=[_r,Tr,wr,Mr,wr,Tr,wr,Mr,Mr,Mr,Tr,Tr],xr=[4,2,3,2,0,4,3,2,2,0,3,0],Sr=[0,1,2,4,3,5,7,8,6,11,10,9],Ir=[];var Rr=0;function Lr(e,t,n){if(Rr>11)throw new Error(`Too many origins: ${Rr}`);const A=Je.create();Je.conjugate(A,n);const r={id:Rr,axis:e,quat:n,inverseQuat:A,angle:t,orientation:Er[Rr],firstQuintant:xr[Rr]};Ir.push(r),Rr++}!function(){Lr([0,0],0,Cr[0]);for(let e=0;e<5;e++){const t=e*SA,n=t+IA;Lr([t,DA],IA,Cr[e+1]),Lr([n,Math.PI-DA],IA,Cr[(e+3)%5+6])}Lr([0,Math.PI],0,Cr[11])}(),Ir.sort((e,t)=>Sr.indexOf(e.id)-Sr.indexOf(t.id)),Ir.forEach((e,t)=>e.id=t);var Dr=class{forward([e,t]){return[Math.tan(t),e]}inverse([e,t]){return[t,Math.atan(e)]}},Pr=Ke.create(),Fr=Ke.create(),Nr=Ke.create(),Or=Ke.create();function Ur(e,t){Ke.lerp(Pr,e,t,.5),Ke.normalize(Pr,Pr),Ke.cross(Pr,e,Pr);const n=Ke.length(Pr);if(n<1e-8){const n=Ke.subtract(Ke.create(),e,t);return.5*Ke.length(n)}return n}function kr(e,t,n,A){const r=Ke.angle(t,n);if(r<1e-12)return Ke.lerp(e,t,n,A);const i=Math.sin((1-A)*r)/Math.sin(r),s=Math.sin(A*r)/Math.sin(r),o=Ke.scale(Ke.create(),t,i),a=Ke.scale(Ke.create(),n,s);return Ke.add(e,o,a)}ue.setMatrixArrayType(Float64Array);var Gr=Ke.create(),Vr=Ke.create(),Hr=Ke.create(),Qr=Ke.create(),jr=class{constructor(e){this._area=null,this.vertices=e,Object.freeze(this.vertices)}getBoundary(e=1,t=!0){const n=[],A=this.vertices.length;for(let r=0;r<A*e;r++){const t=r/e;n.push(this.slerp(t))}return t&&n.push(n[0]),n}slerp(e){const t=this.vertices.length,n=e%1,A=Math.floor(e%t),r=(A+1)%t;return kr(Ke.create(),this.vertices[A],this.vertices[r],n)}getTransformedVertices(e){const t=this.vertices.length,n=Math.floor(e%t),A=(n+1)%t,r=(n+t-1)%t,i=Ke.clone(this.vertices[n]),s=Ke.clone(this.vertices[A]),o=Ke.clone(this.vertices[r]);return Ke.sub(s,s,i),Ke.sub(o,o,i),[i,s,o]}containsPoint(e){const t=this.vertices.length;let n=1/0;for(let A=0;A<t;A++){const[t,r,i]=this.getTransformedVertices(A),s=Ke.sub(Ke.create(),e,t);Ke.normalize(s,s),Ke.normalize(r,r),Ke.normalize(i,i);const o=Ke.cross(Ke.create(),r,s),a=Ke.cross(Ke.create(),s,i),l=Ke.dot(t,o),c=Ke.dot(t,a);n=Math.min(n,l,c)}return n}getTriangleArea(e,t,n){Ke.lerp(Gr,t,n,.5),Ke.lerp(Vr,n,e,.5),Ke.lerp(Hr,e,t,.5),Ke.normalize(Gr,Gr),Ke.normalize(Vr,Vr),Ke.normalize(Hr,Hr);const A=(r=Gr,i=Vr,s=Hr,Ke.cross(Fr,i,s),Ke.dot(r,Fr));var r,i,s;const o=Math.max(-1,Math.min(1,A));return Math.abs(o)<1e-8?2*o:2*Math.asin(o)}getArea(){return null===this._area&&(this._area=this._getArea()),this._area}_getArea(){if(this.vertices.length<3)return 0;if(3===this.vertices.length)return this._area=this.getTriangleArea(this.vertices[0],this.vertices[1],this.vertices[2]),this._area;Ke.set(Qr,0,0,0);for(const t of this.vertices)Ke.add(Qr,Qr,t);Ke.normalize(Qr,Qr);let e=0;for(let t=0;t<this.vertices.length;t++){const n=this.vertices[t],A=this.vertices[(t+1)%this.vertices.length],r=this.getTriangleArea(Qr,n,A);isNaN(r)||(e+=r)}return this._area=e,this._area}isWindingCorrect(){this.getArea()}};ue.setMatrixArrayType(Float64Array);var zr=class extends jr{constructor(e){if(3!==e.length)throw new Error("SphericalTriangleShape requires exactly 3 vertices");super(e)}};ue.setMatrixArrayType(Float64Array);var Jr=class{forward(e,t,n){const[A,r,i]=t,s=new zr([A,r,i]),o=Ke.subtract(Ke.create(),e,A);Ke.normalize(o,o);const a=function(e,t,n,A,r){Ke.cross(Fr,A,r);const i=Ke.dot(t,Fr),s=Ke.dot(n,Fr);return Ke.scale(Nr,t,s),Ke.scale(Or,n,i),Ke.sub(e,Or,Nr)}(Ke.create(),A,o,r,i);Ke.normalize(a,a);const l=Ur(A,e)/Ur(A,a),c=l/s.getArea();return function(e,[t,n,A]){return[e[0]*t[0]+e[1]*n[0]+e[2]*A[0],e[0]*t[1]+e[1]*n[1]+e[2]*A[1]]}([1-l,c*new zr([A,a,i]).getArea(),c*new zr([A,r,a]).getArea()],n)}inverse(e,t,n){const[A,r,i]=n,s=new zr([A,r,i]),o=function(e,[t,n,A]){const r=[t[0]-A[0],t[1]-A[1]],i=[A[0]-n[0],A[1]-n[1]],s=[e[0]-A[0],e[1]-A[1]],o=i[0]*r[1]-i[1]*r[0],a=(i[0]*s[1]-i[1]*s[0])/o,l=(r[0]*s[1]-r[1]*s[0])/o;return[a,l,1-(a+l)]}(e,t),a=1-1e-14;if(o[0]>a)return A;if(o[1]>a)return r;if(o[2]>a)return i;const l=Ke.create();Ke.cross(l,r,i);const c=s.getArea(),u=1-o[0],f=o[2]/u*c,h=Math.sin(f),d=Math.sin(f/2),p=2*d*d,m=Ke.dot(A,r),g=Ke.dot(r,i),b=Ke.dot(i,A),y=Ke.length(l),B=h*Ke.dot(A,l)+p*(m*g-b),v=p*y*(1+m),C=2/Math.acos(g)*Math.atan2(v,B),_=kr(Ke.create(),r,i,C),M=Ur(A,_);return kr([0,0,0],A,_,this.safeAcos(u*M)/this.safeAcos(M))}safeAcos(e){return e<.001?2*e+e*e*e/3:Math.acos(1-2*e*e)}},Kr=-1;ue.setMatrixArrayType(Float64Array);var qr=([e,t])=>Nn.fromValues(e-t,t);ue.setMatrixArrayType(Float64Array);var Yr=Nn.fromValues(1,0),Wr=Nn.fromValues(0,1),Xr=Nn.negate(Nn.create(),Yr),Zr=Nn.negate(Nn.create(),Wr),$r=Nn.fromValues(0,0),ei=(e,[t,n])=>{let A=$r,r=$r;switch(1===t&&1===n?(A=Yr,r=Wr):t===Kr&&1===n?(A=Zr,r=Xr):1===t&&n===Kr?(A=Wr,r=Yr):t===Kr&&n===Kr&&(A=Xr,r=Zr),e){case 0:return $r;case 1:return A;case 2:return Nn.add(Nn.create(),r,A);case 3:return Nn.scaleAndAdd(Nn.create(),r,A,2);default:throw new Error(`Invalid Quaternary value: ${e}`)}},ti=e=>[[1,1],[1,Kr],[1,1],[Kr,1]][e];function ni(e){return Array.from({length:e.length},(t,n)=>e.indexOf(n))}var Ai=[0,1,3,4,5,6,7,2],ri=[0,1,2,7,3,4,5,6];ni(Ai),ni(ri);var ii=(e,t,n,A,r)=>{if(t<=0)return;const i=e[t]||0,s=e[t-1];let o=!0,a=!0;if(A!==(0===n[0]+n[1])?(o=1===i||2===i,a=1===i):(o=i<2,a=0===i),!o)return;const l=a?s:s+4,c=r[l];e[t-1]=c%4,e[t]=(i+4+Math.floor(c/4)-Math.floor(l/4))%4};ue.setMatrixArrayType(Float64Array);var si=Nn.fromValues(-1,1),oi=(e,t,n,A,r=true)=>{const i=Nn.create(),s=[1,1];let o=BigInt(e);const a=[];for(;o>0n||a.length<t;)a.push(Number(o%4n)),o>>=2n;const l=A?ri:Ai;for(let c=a.length-1;c>=0;c--)r&&ii(a,c,s,n,l),Nn.multiply(s,s,ti(a[c]));s[0]=1,s[1]=1;for(let c=a.length-1;c>=0;c--){Nn.scale(i,i,2);const e=ei(a[c],s);Nn.add(i,i,e),Nn.multiply(s,s,ti(a[c]))}return{q:a[0]||0,offset:qr(i),flips:s}};ue.setMatrixArrayType(Float64Array);var ai=Nn.clone(XA),li=Nn.negate(Nn.create(),XA),ci=[0,1,2,3,4].map(e=>{const t=ye.create();return ye.fromRotation(t,SA*e),t}),ui=Nn.create();function fi(e){const t=ZA.clone();return t.transform(ci[e]),t}ue.setMatrixArrayType(Float64Array);ue.setMatrixArrayType(Float64Array);var hi=new class{constructor(){if(this.vertices=[],this.invocations=0,this.addFaceCenters(),this.addVertices(),this.addMidpoints(),62!==this.vertices.length)throw new Error("Failed to construct CRS: vertices length is not 62");Object.freeze(this.vertices)}getVertex(e){this.invocations++,1e4===this.invocations&&console.warn("Too many CRS invocations, results should be cached");for(const t of this.vertices)if(Ke.distance(e,t)<1e-5)return t;throw new Error("Failed to find vertex in CRS")}addFaceCenters(){Ir.forEach(e=>this.add(or(e.axis)))}addVertices(){const e=Math.atan(FA);for(const t of Ir)for(let n=0;n<5;n++){const A=or([(2*n+1)*Math.PI/5+t.angle,e]);Ke.transformQuat(A,A,t.quat),this.add(A)}}addMidpoints(){const e=Math.atan(PA);for(const t of Ir)for(let n=0;n<5;n++){const A=or([2*n*Math.PI/5+t.angle,e]);Ke.transformQuat(A,A,t.quat),this.add(A)}}add(e){const t=Ke.normalize(Ke.create(),e);return!this.vertices.find(e=>Ke.distance(t,e)<1e-5)&&(this.vertices.push(t),!0)}};function di(e){const t=function(e){if(0n===e)return-1;if(1n&e||0b100n==(0b111n&e)||0b10000n==(0b11111n&e))return 30;let t=29,n=e>>1n;if(0n===n)return-1;let A,r=Number(0xFFFFFFFFn&n);for(0===r?(n>>=32n,t-=16,A=Number(n)):A=r,65535&A||(A>>=16,t-=8),t>=6&&!(255&A)&&(A>>=8,t-=4),t>=4&&!(15&A)&&(A>>=4,t-=2);t>-1&&!(1&A);)t-=1,A>>=t<2?1:2;return t}(e);if(-1===t)return{origin:Ir[0],segment:0,S:0n,resolution:t};let n=58n,A=0;if(30===t){const t=1n&e?1n:0b100n&e?3n:5n;n=58n+t,A=1n===t?0:3n===t?32:40}const r=Number(e>>n)+A;let i,s;if(0===t)i=Ir[r],s=0;else{const e=Math.floor(r/5);i=Ir[e],s=(r+i.firstQuintant)%5}if(!i)throw new Error(`Could not parse origin: ${r}`);if(t<2)return{origin:i,segment:s,S:0n,resolution:t};return{origin:i,segment:s,S:(e&(1n<<n)-1n)>>n-BigInt(2*(t-2+1)),resolution:t}}ue.setMatrixArrayType(Float64Array),ye.create();var pi=new class{constructor(){this.faceTriangles=[],this.sphericalTriangles=[],this.polyhedral=new Jr,this.gnomonic=new Dr}forward(e,t){const n=Ir[t],A=or(e),r=Ke.create();Ke.transformQuat(r,A,n.inverseQuat);const i=sr(r),s=this.gnomonic.forward(i);s[1]=s[1]-n.angle;const o=this.getFaceTriangleIndex(s),a=this.shouldReflect(s);let l=this.getFaceTriangle(o,a,!1),c=this.getSphericalTriangle(o,t,a);return this.polyhedral.forward(A,c,l)}inverse(e,t){const n=ir(e),A=this.getFaceTriangleIndex(n),r=this.shouldReflect(n),i=this.getFaceTriangle(A,r,!1),s=this.getSphericalTriangle(A,t,r);return sr(this.polyhedral.inverse(e,i,s))}shouldReflect(e){const[t,n]=e,A=function([e,t]){return[e*Math.cos(t),e*Math.sin(t)]}([t,this.normalizeGamma(n)])[0];return A>PA}getFaceTriangleIndex([e,t]){return(Math.floor(t/IA)+10)%10}getFaceTriangle(e,t=!1,n=!1){let A=e;return t&&(A+=n?20:10),this.faceTriangles[A]||(this.faceTriangles[A]=t?this._getReflectedFaceTriangle(e,n):this._getFaceTriangle(e),Object.freeze(this.faceTriangles[A])),this.faceTriangles[A]}_getFaceTriangle(e){const t=Math.floor((e+1)/2)%5,[n,A,r]=fi(t).getVertices(),i=Nn.create();Nn.lerp(i,A,r,.5);return e%2==0?[n,i,A]:[n,r,i]}_getReflectedFaceTriangle(e,t=!1){let[n,A,r]=this._getFaceTriangle(e).map(e=>Nn.clone(e));const i=e%2==0;Nn.negate(n,n);const s=i?A:r;return Nn.scaleAndAdd(n,n,s,t?1+1/Math.cos(DA):2),[n,r,A]}getSphericalTriangle(e,t,n=!1){let A=10*t+e;return n&&(A+=120),this.sphericalTriangles[A]||(this.sphericalTriangles[A]=this._getSphericalTriangle(e,t,n),Object.freeze(this.sphericalTriangles[A])),this.sphericalTriangles[A]}_getSphericalTriangle(e,t,n=!1){const A=Ir[t];return this.getFaceTriangle(e,n,!0).map(e=>{const[t,n]=ir(e),r=[t,n+A.angle],i=or(this.gnomonic.inverse(r));return Ke.transformQuat(i,i,A.quat),hi.getVertex(i)})}normalizeGamma(e){const t=e/SA;return(t-Math.round(t))*SA}};function mi({S:e,segment:t,origin:n,resolution:A}){const{quintant:r,orientation:i}=function(e,t){const n=t.orientation,A=n===_r||n===Mr?-1:1,r=(e-t.firstQuintant+5)%5,i=n[r];return{quintant:(t.firstQuintant+A*r+5)%5,orientation:i}}(t,n);if(1===A){return fi(r)}if(0===A)return function(){const e=[];for(const t of ci)e.push(Nn.transformMat2(Nn.create(),YA,t));return e.reverse(),new NA(e)}();const s=A-2+1,o=((e,t,n,A=!0)=>{let r=BigInt(e);const i="wv"===n||"vw"===n,s="wu"===n||"uw"===n;("vu"===n||"wu"===n||"vw"===n)&&(r=(1n<<BigInt(2*t))-r-1n);const o=oi(r,t,i,s,A);if(s){const{offset:[e,t],flips:[n,A]}=o;o.offset=[t,e],n===Kr&&Nn.add(o.offset,o.offset,si),A===Kr&&Nn.subtract(o.offset,o.offset,si)}if(i){const{offset:[e,n],flips:A}=o,r=(1<<t)-(e+n);A[0]=-A[0],o.offset[1]=r,o.flips=A}return o})(e,s,i);return function(e,t,n){const A=zA.clone();Nn.transformMat2(ui,n.offset,$A),1===n.flips[0]&&n.flips[1]===Kr&&A.rotate180();const{q:r}=n,i=n.flips[0]+n.flips[1];return((-2===i||2===i)&&r>1||0===i&&(0===r||3===r))&&A.reflectY(),n.flips[0]===Kr&&n.flips[1]===Kr?A.rotate180():n.flips[0]===Kr?A.translate(li):n.flips[1]===Kr&&A.translate(ai),A.translate(ui),A.scale(1/2**e),A.transform(ci[t]),A}(s,r,o)}var gi=12742014.4/Math.sqrt(15),bi=new Array(31);bi[0]=12742014.4/Math.sqrt(3);for(let wy=1;wy<=30;wy++)bi[wy]=gi/(1<<wy-1);ue.setMatrixArrayType(Float64Array);var yi=function(e){var t,n=void 0!==(e=e||{})?e:{},A={};for(t in n)n.hasOwnProperty(t)&&(A[t]=n[t]);var r,i="";"undefined"!=typeof document&&document.currentScript&&(i=document.currentScript.src),i=0!==i.indexOf("blob:")?i.substr(0,i.lastIndexOf("/")+1):"",r=function(e,t,n){var A=new XMLHttpRequest;A.open("GET",e,!0),A.responseType="arraybuffer",A.onload=function(){if(200==A.status||0==A.status&&A.response)t(A.response);else{var r=j(e);r?t(r.buffer):n()}},A.onerror=n,A.send(null)};var s=n.print||console.log.bind(console),o=n.printErr||console.warn.bind(console);for(t in A)A.hasOwnProperty(t)&&(n[t]=A[t]);A=null,n.arguments&&n.arguments;var a=0;var l=!1;function c(e){var t,A=n["_"+e];return t="Cannot call unknown function "+e+", make sure it is exported",A||Ae("Assertion failed: "+t),A}function u(e,t,n,A,r){var i={string:function(e){var t=0;if(null!=e&&0!==e){var n=1+(e.length<<2);(function(e,t,n){(function(e,t,n,A){if(!(A>0))return 0;for(var r=n,i=n+A-1,s=0;s<e.length;++s){var o=e.charCodeAt(s);if(o>=55296&&o<=57343)o=65536+((1023&o)<<10)|1023&e.charCodeAt(++s);if(o<=127){if(n>=i)break;t[n++]=o}else if(o<=2047){if(n+1>=i)break;t[n++]=192|o>>6,t[n++]=128|63&o}else if(o<=65535){if(n+2>=i)break;t[n++]=224|o>>12,t[n++]=128|o>>6&63,t[n++]=128|63&o}else{if(n+3>=i)break;t[n++]=240|o>>18,t[n++]=128|o>>12&63,t[n++]=128|o>>6&63,t[n++]=128|63&o}}t[n]=0})(e,d,t,n)})(e,t=Y(n),n)}return t},array:function(e){var t=Y(e.length);return function(e,t){h.set(e,t)}(e,t),t}};var s=c(e),o=[],a=0;if(A)for(var l=0;l<A.length;l++){var u=i[n[l]];u?(0===a&&(a=X()),o[l]=u(A[l])):o[l]=A[l]}var f=s.apply(null,o);return f=function(e){return"string"===t?B(e):"boolean"===t?Boolean(e):e}(f),0!==a&&W(a),f}var f,h,d,p,m,g,b,y="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function B(e,t){return e?function(e,t,n){for(var A=t+n,r=t;e[r]&&!(r>=A);)++r;if(r-t>16&&e.subarray&&y)return y.decode(e.subarray(t,r));for(var i="";t<r;){var s=e[t++];if(128&s){var o=63&e[t++];if(192!=(224&s)){var a=63&e[t++];if((s=224==(240&s)?(15&s)<<12|o<<6|a:(7&s)<<18|o<<12|a<<6|63&e[t++])<65536)i+=String.fromCharCode(s);else{var l=s-65536;i+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else i+=String.fromCharCode((31&s)<<6|o)}else i+=String.fromCharCode(s)}return i}(d,e,t):""}function v(e,t){return e%t>0&&(e+=t-e%t),e}function C(e){f=e,n.HEAP8=h=new Int8Array(e),n.HEAP16=p=new Int16Array(e),n.HEAP32=m=new Int32Array(e),n.HEAPU8=d=new Uint8Array(e),n.HEAPU16=new Uint16Array(e),n.HEAPU32=new Uint32Array(e),n.HEAPF32=g=new Float32Array(e),n.HEAPF64=b=new Float64Array(e)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var _=n.TOTAL_MEMORY||33554432;function M(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var A=t.func;"number"==typeof A?void 0===t.arg?n.dynCall_v(A):n.dynCall_vi(A,t.arg):A(void 0===t.arg?null:t.arg)}else t()}}_=(f=n.buffer?n.buffer:new ArrayBuffer(_)).byteLength,C(f),m[7096]=5271296;var w=[],T=[],E=[],x=[];function S(e){w.unshift(e)}function I(e){x.unshift(e)}var R=Math.abs,L=Math.ceil,D=Math.floor,P=Math.min,F=0,N=null;n.preloadedImages={},n.preloadedAudios={};var O,U,k=null,G="data:application/octet-stream;base64,";function V(e){return String.prototype.startsWith?e.startsWith(G):0===e.indexOf(G)}k="data:application/octet-stream;base64,AAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAAQAAAAQAAAADAAAABgAAAAUAAAACAAAAAAAAAAIAAAADAAAAAQAAAAQAAAAGAAAAAAAAAAUAAAADAAAABgAAAAQAAAAFAAAAAAAAAAEAAAACAAAABAAAAAUAAAAGAAAAAAAAAAIAAAADAAAAAQAAAAUAAAACAAAAAAAAAAEAAAADAAAABgAAAAQAAAAGAAAAAAAAAAUAAAACAAAAAQAAAAQAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAIAAAADAAAAAAAAAAAAAAACAAAAAAAAAAEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAYAAAAAAAAABQAAAAAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAIAAAADAAAABQAAAAYAAAAAAAAAAQAAAAIAAAADAAAABAAAAAYAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAYAAAAAAAAAAwAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAFAAAABAAAAAAAAAABAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAYAAAAAAAAABAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAgAAAAQAAAADAAAACAAAAAEAAAAHAAAABgAAAAkAAAAAAAAAAwAAAAIAAAACAAAA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AAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAADAAAABQAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAUAAAABAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAUAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAIAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAD/////AQAAAAAAAAADAAAABAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAUAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAD//////////wEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAACAAAAAAAAAAAAAAABAAAAAgAAAAYAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAgAAAAAAAAAAAAAAAQAAAAEAAAAFAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAAAAAAAAAAABAAAAAwAAAAcAAAAGAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAADgAAAAIAAAAAAAAAAAAAAAEAAAAAAAAACQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAMAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAAAAAAAAAAAAAEAAAAEAAAACAAAAAoAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAACQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAgAAAAAAAAAAAAAAAQAAAAsAAAAPAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAIAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAgAAAAAAAAAAAAAAAQAAAAwAAAAQAAAADAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAADwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAAAAAAAAAAABAAAACgAAABMAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAAAAAEAAAANAAAAEQAAAA0AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAACAAAAAAAAAAAAAAABAAAADgAAABIAAAAPAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAADwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABIAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATAAAAAgAAAAAAAAAAAAAAAQAAAP//////////EwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAASAAAAAAAAABgAAAAAAAAAIQAAAAAAAAAeAAAAAAAAACAAAAADAAAAMQAAAAEAAAAwAAAAAwAAADIAAAADAAAACAAAAAAAAAAFAAAABQAAAAoAAAAFAAAAFgAAAAAAAAAQAAAAAAAAABIAAAAAAAAAKQAAAAEAAAAhAAAAAAAAAB4AAAAAAAAABAAAAAAAAAAAAAAABQAAAAIAAAAFAAAADwAAAAEAAAAIAAAAAAAAAAUAAAAFAAAAHwAAAAEAAAAWAAAAAAAAABAAAAAAAAAAAgAAAAAAAAAGAAAAAAAAAA4AAAAAAAAACgAAAAAAAAALAAAAAAAAABEAAAADAAAAGAAAAAEAAAAXAAAAAwAAABkAAAADAAAAAAAAAAAAAAABAAAABQAAAAkAAAAFAAAABQAAAAAAAAACAAAAAAAAAAYAAAAAAAAAEgAAAAEAAAAKAAAAAAAAAAsAAAAAAAAABAAAAAEAAAADAAAABQAAAAcAAAAFAAAACAAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAEAAAAAEAAAAFAAAAAAAAAAIAAAAAAAAABwAAAAAAAAAVAAAAAAAAACYAAAAAAAAACQAAAAAAAAATAAAAAAAAACIAAAADAAAADgAAAAEAAAAUAAAAAwAAACQAAAADAAAAAwAAAAAAAAANAAAABQAAAB0AAAAFAAAAAQAAAAAAAAAHAAAAAAAAABUAAAAAAAAABgAAAAEAAAAJAAAAAAAAABMAAAAAAAAABAAAAAIAAAAMAAAA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74auECWhw7+cjSACjzniv8CZ+wUhN9I/1uGEKzup6z+/GYr/04bavwmkNHp7xee/F2NMZVAA1z+82s+x2BLivwr2ytbJ9em/KwEH1sMS1r8yp/2LhTfev81i5RexJsy/BlIKPVwR5b95Wyu0/Qjnv5DjoT7YYcs/nBhKZ6zrwr8wRYS7Nebuv3OW6geh+Lu/SLrixebL3j+pcyymN9Xrv8rHIFfWehZAMBwUdlo0DECTUc17EOb2PxpVB1SWChdAzjbhb9pTDUDQhmdvECX5P9FlMKCC9+g/IIAzjELgE0DajDngMv8GQFhWDmDPjNs/y1guLh96EkAxPi8k7DIEQJCc4URlhRhA3eLKKLwkEECqpNAyTBD/P6xpjXcDiwVAFtl//cQm4z+Ibt3XKiYTQM7mCLUb3QdAoM1t8yVv7D8aLZv2Nk8UQEAJPV5nQwxAtSsfTCoE9z9TPjXLXIIWQBVanC5W9AtAYM3d7Adm9j++5mQz1FoWQBUThyaVBghAwH5muQsV7T89Q1qv82MUQJoWGOfNuBdAzrkClkmwDkDQjKq77t37Py+g0dtitsE/ZwAMTwVPEUBojepluNwBQGYbtuW+t9w/HNWIJs6MEkDTNuQUSlgEQKxktPP5TcQ/ixbLB8JjEUCwuWjXMQYCQAS/R09FkRdAowpiZjhhDkB7LmlczD/7P01iQmhhsAVAnrtTwDy84z/Z6jfQ2TgTQChOCXMnWwpAhrW3daoz8z/HYJvVPI4VQLT3ik5FcA5Angi7LOZd+z+NNVzDy5gXQBXdvVTFUA1AYNMgOeYe+T8+qHXGCwkXQKQTOKwa5AJA8gFVoEMW0T+FwzJyttIRQAEAAAD/////BwAAAP////8xAAAA/////1cBAAD/////YQkAAP////+nQQAA/////5HLAQD/////95AMAP/////B9lcAAAAAAAAAAAAAAAAAAgAAAP////8OAAAA/////2IAAAD/////rgIAAP/////CEgAA/////06DAAD/////IpcDAP/////uIRkA/////4LtrwAAAAAAAAAAAAAAAAAAAAAAAgAAAP//////////AQAAAAMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////////////////////wEAAAAAAAAAAgAAAP///////////////wMAAAD//////////////////////////////////////////////////////////wIAAAD//////////wEAAAAAAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA/////////////////////wEAAAD///////////////8CAAAA////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAA////////////////AgAAAAEAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AQAAAAIAAAD///////////////8AAAAA/////////////////////wMAAAD///////////////////////////////8CAAAA////////////////AQAAAP////////////////////8AAAAA/////////////////////wMAAAD/////////////////////////////////////////////////////AwAAAP////////////////////8AAAAAAQAAAP//////////AgAAAP//////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAP///////////////wIAAAAAAAAAAQAAAP//////////////////////////////////////////////////////////////////////////AwAAAAEAAAD//////////wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAgAAAAAAAAACAAAAAQAAAAEAAAACAAAAAgAAAAAAAAAFAAAABQAAAAAAAAACAAAAAgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAABAAAAAgAAAAIAAAACAAAAAAAAAAUAAAAGAAAAAAAAAAIAAAACAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAAAAAAAgAAAAEAAAADAAAAAgAAAAIAAAAAAAAABQAAAAcAAAAAAAAAAgAAAAIAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAAACAAAAAQAAAAQAAAACAAAAAgAAAAAAAAAFAAAACAAAAAAAAAACAAAAAgAAAAMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAACAAAAAAAAAAIAAAABAAAAAAAAAAIAAAACAAAAAAAAAAUAAAAJAAAAAAAAAAIAAAACAAAAAwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAIAAAACAAAAAAAAAAMAAAAOAAAAAgAAAAAAAAACAAAAAwAAAAAAAAAAAAAAAgAAAAIAAAADAAAABgAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAgAAAAIAAAAAAAAAAwAAAAoAAAACAAAAAAAAAAIAAAADAAAAAQAAAAAAAAACAAAAAgAAAAMAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAgAAAAAAAAADAAAACwAAAAIAAAAAAAAAAgAAAAMAAAACAAAAAAAAAAIAAAACAAAAAwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAACAAAAAAAAAAMAAAAMAAAAAgAAAAAAAAACAAAAAwAAAAMAAAAAAAAAAgAAAAIAAAADAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAgAAAAIAAAAAAAAAAwAAAA0AAAACAAAAAAAAAAIAAAADAAAABAAAAAAAAAACAAAAAgAAAAMAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAgAAAAAAAAADAAAABgAAAAIAAAAAAAAAAgAAAAMAAAAPAAAAAAAAAAIAAAACAAAAAwAAAAsAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAIAAAACAAAAAAAAAAMAAAAHAAAAAgAAAAAAAAACAAAAAwAAABAAAAAAAAAAAgAAAAIAAAADAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAgAAAAIAAAAAAAAAAwAAAAgAAAACAAAAAAAAAAIAAAADAAAAEQAAAAAAAAACAAAAAgAAAAMAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAACAAAAAgAAAAAAAAADAAAACQAAAAIAAAAAAAAAAgAAAAMAAAASAAAAAAAAAAIAAAACAAAAAwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAACQAAAAIAAAACAAAAAAAAAAMAAAAFAAAAAgAAAAAAAAACAAAAAwAAABMAAAAAAAAAAgAAAAIAAAADAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAgAAAAAAAAACAAAAAQAAABMAAAACAAAAAgAAAAAAAAAFAAAACgAAAAAAAAACAAAAAgAAAAMAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABEAAAACAAAAAAAAAAIAAAABAAAADwAAAAIAAAACAAAAAAAAAAUAAAALAAAAAAAAAAIAAAACAAAAAwAAABEAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAIAAAAAAAAAAgAAAAEAAAAQAAAAAgAAAAIAAAAAAAAABQAAAAwAAAAAAAAAAgAAAAIAAAADAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAgAAAAAAAAACAAAAAQAAABEAAAACAAAAAgAAAAAAAAAFAAAADQAAAAAAAAACAAAAAgAAAAMAAAATAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAACAAAAAAAAAAIAAAABAAAAEgAAAAIAAAACAAAAAAAAAAUAAAAOAAAAAAAAAAIAAAACAAAAAwAAAAIAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAAACAAAAAQAAAAAAAAABAAAAAgAAAAEAAAAAAAAAAgAAAAAAAAAFAAAABAAAAAAAAAABAAAABQAAAAAAAAAAAAAABQAAAAQAAAAAAAAAAQAAAAUAAAAEAAAAAAAAAAUAAAAAAAAAAgAAAAEAAAAAAAAAAQAAAAIAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAEAAAACAAAAAQAAAAAAAAACAAAAAgAAAAAAAAABAAAAAAAAAAAAAAAFAAAABAAAAAAAAAABAAAABQAAAAAAAAAAAAAABQAAAAQAAAAAAAAAAQAAAAUAAAAEAAAAAAAAAAUAAAAFAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAABAAAAAAEAAAAAAAAAAAEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAOgehWlKfUEEz1zLi+JsiQa2og3wcMfVAWCbHorc0yEDi+Yn/Y6mbQJ11/mfsnG9At6bnG4UQQkBvMCQWKqUUQJVmwwswmOc/3hVgVBL3uj//qqOEOdGOPw/WDN4gnGE/H3ANkCUgND+AA8btKgAHPwTXBqJVSdo+XfRQAqsKrj4fc+zLYbSPQklEmCZHv2FCUP+uDso1NEKYtPhwphUHQptxnyFXYdpB7CddZAMmrkGAt1AxSTqBQUibBVdTsFNBSuX3MV+AJkFocv82SLf5QAqmgj7AY81A23VDSEnLoEDGEJVSeDFzQDYrqvBk70VA8U157pcRGUBWfEF+ZKbsP6phvycGBZRAJbod0OgwfkCp+L8jatBmQCjl3pGrPlFAfMWm114SOkButwtqS7UjQHQwbcjXyw1A8jnLuuyA9j9KwjL0VwHhPyotk0lcs8k/Q5PvEs9rsz+SfsOQEVqdPzUAKDojLoY/WJz/kcjCcD8YFu070FRZPyoLC2BdJEM/YOXQAuiMM0HIBz1bw3sdQdV46aaHRwZByatzjDPX8EDb3Jie8HXZQCJxj6ULP8NAUaG6uRAZrUCWdmou5/mVQLb9huRPm4BAhvoCHygZaUCuX/I3SPdSQC9/bC/1qTxAfKxsYQ6pJUCuslH+N14QQMS/cv7SvPg/Ol8maYKx4j8AAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAD/////AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA/////wAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAP////8AAAAABQAAAAAAAAAAAAAAAAAAAAAAAAD/////BQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////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cmNQYWlycwBjcmVhdGVTb3J0YWJsZUxvb3AAZGlyZWN0ZWRFZGdlLmMAZGlyZWN0ZWRFZGdlVG9Cb3VuZGFyeQBhZGphY2VudEZhY2VEaXJbdG1wRmlqay5mYWNlXVtmaWprLmZhY2VdID09IEtJAGZhY2VpamsuYwBfZmFjZUlqa1BlbnRUb0NlbGxCb3VuZGFyeQBhZGphY2VudEZhY2VEaXJbY2VudGVySUpLLmZhY2VdW2ZhY2UyXSA9PSBLSQBfZmFjZUlqa1RvQ2VsbEJvdW5kYXJ5AGgzSW5kZXguYwBjb21wYWN0Q2VsbHMAdmVjM1RvQ2VsbABjZWxsVG9DaGlsZFBvcwB2YWxpZGF0ZUNoaWxkUG9zAHJldkRpciAhPSBJTlZBTElEX0RJR0lUAGxvY2FsaWouYwBjZWxsVG9Mb2NhbElqawBiYXNlQ2VsbCAhPSBvcmlnaW5CYXNlQ2VsbAAhKG9yaWdpbk9uUGVudCAmJiBpbmRleE9uUGVudCkAYmFzZUNlbGwgPT0gb3JpZ2luQmFzZUNlbGwALi4vaW5jbHVkZS9jb29yZGlqay5oAF91cEFwN0NoZWNrZWQAX3VwQXA3ckNoZWNrZWQAYmFzZUNlbGwgIT0gSU5WQUxJRF9CQVNFX0NFTEwAbG9jYWxJamtUb0NlbGwAIV9pc0Jhc2VDZWxsUGVudGFnb24oYmFzZUNlbGwpAGJhc2VDZWxsUm90YXRpb25zID49IDAAZ3JpZFBhdGhDZWxsc0ludGVycG9sYXRlAHBvbHlmaWxsLmMAaXRlclN0ZXBQb2x5Z29uQ29tcGFjdAAwAHZlcnRleC5jAHZlcnRleFJvdGF0aW9ucwBjZWxsVG9WZXJ0ZXg=";function H(){return h.length}var Q="function"==typeof atob?atob:function(e){var t,n,A,r,i,s,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a="",l=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{t=o.indexOf(e.charAt(l++))<<2|(r=o.indexOf(e.charAt(l++)))>>4,n=(15&r)<<4|(i=o.indexOf(e.charAt(l++)))>>2,A=(3&i)<<6|(s=o.indexOf(e.charAt(l++))),a+=String.fromCharCode(t),64!==i&&(a+=String.fromCharCode(n)),64!==s&&(a+=String.fromCharCode(A))}while(l<e.length);return a};function j(e){if(V(e))return function(e){try{for(var t=Q(e),n=new Uint8Array(t.length),A=0;A<t.length;++A)n[A]=t.charCodeAt(A);return n}catch(r){throw new Error("Converting base64 string to bytes failed.")}}(e.slice(G.length))}var z=function(e,t,n){var A=new e.Int8Array(n),r=new e.Int32Array(n);new e.Uint8Array(n),new e.Float32Array(n);var i=new e.Float64Array(n),s=0|t.o,o=0|t.p,a=e.Math.floor,l=e.Math.abs,c=e.Math.sqrt,u=e.Math.cos,f=e.Math.sin,h=e.Math.tan,d=e.Math.acos,p=e.Math.asin,m=e.Math.atan,g=e.Math.atan2,b=e.Math.ceil,y=e.Math.imul,B=e.Math.min,v=e.Math.max,C=e.Math.clz32,_=t.a,M=t.b,w=t.c,T=t.d,E=t.e,x=t.f,S=t.g,I=t.h,R=t.i,L=28416;function D(e,t,n,A){return 0|P(e|=0,t|=0,n|=0,A|=0,0)}function P(e,t,n,A,i){var s,o=0,a=0,l=0,c=0;if(s=L,L=L+16|0,a=s,!(0|F(e|=0,t|=0,n|=0,A|=0,i|=0)))return L=s,0|(A=0);do{if((0|n)>=0){if((0|n)>13780509){if(0|(o=0|qe(15,a)))break;a=0|r[(l=a)>>2],l=0|r[l+4>>2]}else c=0|Nt(0|n,0|(o=((0|n)<0)<<31>>31),3,0),l=0|w(),o=0|Rt(0|n,0|o,1,0),o=0|Rt(0|(o=0|Nt(0|c,0|l,0|o,0|w())),0|w(),1,0),l=0|w(),r[a>>2]=o,r[a+4>>2]=l,a=o;if(qt(0|A,0,a<<3),0|i){qt(0|i,0,a<<2),o=0|N(e,t,n,A,i,a,l,0);break}(o=0|xt(a,4))?(c=0|N(e,t,n,A,o,a,l,0),Et(o),o=c):o=13}else o=2}while(0);return L=s,0|(c=o)}function F(e,t,n,A,i){e|=0,t|=0,n|=0,A|=0,i|=0;var s,o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0;if(o=L,L=L+16|0,m=o+8|0,r[(p=s=o)>>2]=e,r[p+4>>2]=t,(0|n)<0)return L=o,0|(m=2);if(r[(a=A)>>2]=e,r[a+4>>2]=t,(a=!!(0|i))&&(r[i>>2]=0),0|we(e,t))return L=o,0|(m=9);r[m>>2]=0;e:do{if((0|n)>=1)if(a)for(h=1,f=0,d=0,p=1,a=e;;){if(!(f|d)){if(0|(a=0|O(a,t,4,m,s)))break e;if(0|we(a=0|r[(t=s)>>2],t=0|r[t+4>>2])){a=9;break e}}if(0|(a=0|O(a,t,0|r[26864+(d<<2)>>2],m,s)))break e;if(a=0|r[(t=s)>>2],t=0|r[t+4>>2],r[(e=A+(h<<3)|0)>>2]=a,r[e+4>>2]=t,r[i+(h<<2)>>2]=p,l=(0|(e=f+1|0))==(0|p),u=6==(0|(c=d+1|0)),0|we(a,t)){a=9;break e}if((0|(p=p+(u&l&1)|0))>(0|n)){a=0;break}h=h+1|0,f=l?0:e,d=l?u?0:c:d}else for(h=1,f=0,d=0,p=1,a=e;;){if(!(f|d)){if(0|(a=0|O(a,t,4,m,s)))break e;if(0|we(a=0|r[(t=s)>>2],t=0|r[t+4>>2])){a=9;break e}}if(0|(a=0|O(a,t,0|r[26864+(d<<2)>>2],m,s)))break e;if(a=0|r[(t=s)>>2],t=0|r[t+4>>2],r[(e=A+(h<<3)|0)>>2]=a,r[e+4>>2]=t,l=(0|(e=f+1|0))==(0|p),u=6==(0|(c=d+1|0)),0|we(a,t)){a=9;break e}if((0|(p=p+(u&l&1)|0))>(0|n)){a=0;break}h=h+1|0,f=l?0:e,d=l?u?0:c:d}else a=0}while(0);return L=o,0|(m=a)}function N(e,t,n,A,i,s,o,a){n|=0,A|=0,i|=0,a|=0;var l,c,u,f=0,h=0,d=0,p=0,m=0,g=0,b=0;if(u=L,L=L+16|0,l=u+8|0,c=u,f=0|Ut(0|(e|=0),0|(t|=0),0|(s|=0),0|(o|=0)),d=0|w(),!(!(0|(b=0|r[(g=p=A+(f<<3)|0)>>2]))&!(0|(g=0|r[g+4>>2]))|(h=(0|b)==(0|e)&(0|g)==(0|t))))do{f=0|Ot(0|(f=0|Rt(0|f,0|d,1,0)),0|w(),0|s,0|o),d=0|w(),h=(0|(g=0|r[(b=p=A+(f<<3)|0)>>2]))==(0|e)&(0|(b=0|r[b+4>>2]))==(0|t)}while(!(!(0|g)&!(0|b)|h));if(f=i+(f<<2)|0,h&&(0|r[f>>2])<=(0|a))return L=u,0|(b=0);if(r[(b=p)>>2]=e,r[b+4>>2]=t,r[f>>2]=a,(0|a)>=(0|n))return L=u,0|(b=0);switch(h=a+1|0,r[l>>2]=0,0|(f=0|O(e,t,2,l,c))){case 9:m=9;break;case 0:(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h))||(m=9)}e:do{if(9==(0|m)){switch(r[l>>2]=0,0|(f=0|O(e,t,3,l,c))){case 9:break;case 0:if(0|(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h)))break e;break;default:break e}switch(r[l>>2]=0,0|(f=0|O(e,t,1,l,c))){case 9:break;case 0:if(0|(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h)))break e;break;default:break e}switch(r[l>>2]=0,0|(f=0|O(e,t,5,l,c))){case 9:break;case 0:if(0|(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h)))break e;break;default:break e}switch(r[l>>2]=0,0|(f=0|O(e,t,4,l,c))){case 9:break;case 0:if(0|(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h)))break e;break;default:break e}switch(r[l>>2]=0,0|(f=0|O(e,t,6,l,c))){case 9:break;case 0:if(0|(f=0|N(0|r[(f=c)>>2],0|r[f+4>>2],n,A,i,s,o,h)))break e;break;default:break e}return L=u,0|(b=0)}}while(0);return L=u,0|(b=f)}function O(e,t,n,A,i){e|=0,t|=0,i|=0;var s,o,a,l=0,c=0,u=0,f=0,h=0,d=0;if((n|=0)>>>0>6)return 0|(i=1);c=(0|r[(A|=0)>>2])%6|0,r[A>>2]=c;e:do{if((0|c)>0)for(l=0;;){switch(0|n){case 1:n=5;break;case 5:n=4;break;case 4:n=6;break;case 6:n=2;break;case 2:n=3;break;case 3:n=1}if((0|(l=l+1|0))==(0|c))break e}}while(0);if(a=0|Gt(0|e,0|t,45),w(),(o=127&a)>>>0>121)return 0|(i=5);s=0|xe(e,t),l=0|Gt(0|e,0|t,52),w(),l&=15;e:do{if(l){for(;;){if(u=0|Gt(0|e,0|t,0|(c=3*(15-l|0)|0)),w(),7==(0|(u&=7))){t=5;break}if(d=!(0|Pe(l)),l=l+-1|0,h=0|Vt(7,0,0|c),t&=~w(),e=0|Vt(0|r[(d?432:16)+(28*u|0)+(n<<2)>>2],0,0|c)|e&~h,t|=c=0|w(),!(n=0|r[(d?640:224)+(28*u|0)+(n<<2)>>2])){n=0;break e}if(!l){f=15;break e}}return 0|t}f=15}while(0);15==(0|f)&&(e|=0|Vt(0|(d=0|r[848+(28*o|0)+(n<<2)>>2]),0,45),t=w()|-1040385&t,n=0|r[4272+(28*o|0)+(n<<2)>>2],127&~d||(d=0|Vt(0|r[848+(28*o|0)+20>>2],0,45),t=w()|-1040385&t,n=0|r[4272+(28*o|0)+20>>2],e=0|Ie(d|e,t),t=0|w(),r[A>>2]=1+(0|r[A>>2]))),u=0|Gt(0|e,0|t,45),w(),u&=127;e:do{if(0|Q(u)){t:do{if(1==(0|xe(e,t))){if((0|o)!=(0|u)){if(0|K(u,0|r[7696+(28*o|0)>>2])){e=0|Le(e,t),c=1,t=0|w();break}T(27634,26928,533,26936)}switch(0|s){case 3:e=0|Ie(e,t),t=0|w(),r[A>>2]=1+(0|r[A>>2]),c=0;break t;case 5:e=0|Le(e,t),t=0|w(),r[A>>2]=5+(0|r[A>>2]),c=0;break t;case 0:return 0|(d=9);default:return 0|(d=1)}}else c=0}while(0);if((0|n)>0){l=0;do{e=0|Se(e,t),t=0|w(),l=l+1|0}while((0|l)!=(0|n))}if((0|o)!=(0|u)){if(!(0|j(u))){if(!!(0|c)|5!=(0|xe(e,t)))break;r[A>>2]=1+(0|r[A>>2]);break}switch(127&a){case 8:case 118:break e}3!=(0|xe(e,t))&&(r[A>>2]=1+(0|r[A>>2]))}}else if((0|n)>0){l=0;do{e=0|Ie(e,t),t=0|w(),l=l+1|0}while((0|l)!=(0|n))}}while(0);return r[A>>2]=((0|r[A>>2])+n|0)%6|0,r[(d=i)>>2]=e,r[d+4>>2]=t,0|(d=0)}function U(e,t,n,A){e|=0,t|=0,n|=0,A|=0;var i,s,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0;if(s=L,L=L+16|0,p=s+8|0,r[(d=i=s)>>2]=e,r[d+4>>2]=t,(0|n)<0)return L=s,0|(p=2);if(!n)return r[(p=A)>>2]=e,r[p+4>>2]=t,L=s,0|(p=0);r[p>>2]=0;e:do{if(0|we(e,t))e=9;else{o=0,d=e;do{if(0|(e=0|O(d,t,4,p,i)))break e;if(o=o+1|0,0|we(d=0|r[(t=i)>>2],t=0|r[t+4>>2])){e=9;break e}}while((0|o)<(0|n));r[(h=A)>>2]=d,r[h+4>>2]=t,h=n+-1|0,f=0,e=1;do{if(o=26864+(f<<2)|0,5==(0|f))for(l=0|r[o>>2],a=0,o=e;;){if(0|(e=0|O(0|r[(e=i)>>2],0|r[e+4>>2],l,p,i)))break e;if((0|a)!=(0|h)){if(c=0|r[(u=i)>>2],u=0|r[u+4>>2],r[(e=A+(o<<3)|0)>>2]=c,r[e+4>>2]=u,0|we(c,u)){e=9;break e}e=o+1|0}else e=o;if((0|(a=a+1|0))>=(0|n))break;o=e}else for(l=i,u=0|r[o>>2],c=0,o=e,a=0|r[l>>2],l=0|r[l+4>>2];;){if(0|(e=0|O(a,l,u,p,i)))break e;if(a=0|r[(l=i)>>2],l=0|r[l+4>>2],r[(e=A+(o<<3)|0)>>2]=a,r[e+4>>2]=l,e=o+1|0,0|we(a,l)){e=9;break e}if((0|(c=c+1|0))>=(0|n))break;o=e}f=f+1|0}while(f>>>0<6);e=(0|d)==(0|r[(e=i)>>2])&&(0|t)==(0|r[e+4>>2])?0:9}}while(0);return L=s,0|(p=e)}function k(e,t,n,A){e|=0,t|=0,A|=0;var i,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0;if(i=L,L=L+16|0,a=i,!(n|=0))return r[A>>2]=e,r[A+4>>2]=t,L=i,0|(A=0);do{if((0|n)>=0){if((0|n)>13780509){if(0|(s=0|qe(15,a)))break;s=0|r[(o=a)>>2],o=0|r[o+4>>2]}else f=0|Nt(0|n,0|(s=((0|n)<0)<<31>>31),3,0),o=0|w(),s=0|Rt(0|n,0|s,1,0),s=0|Rt(0|(s=0|Nt(0|f,0|o,0|s,0|w())),0|w(),1,0),o=0|w(),r[(f=a)>>2]=s,r[f+4>>2]=o;if(u=0|xt(s,8)){if(!(f=0|xt(s,4))){Et(u),s=13;break}if(0|(s=0|N(e,t,n,u,f,s,o,0))){Et(u),Et(f);break}if(t=0|r[a>>2],(0|(a=0|r[a+4>>2]))>0|!(0|a)&t>>>0>0){s=0,l=0,c=0;do{!(0|(o=0|r[(e=u+(l<<3)|0)>>2]))&!(0|(e=0|r[e+4>>2]))||(0|r[f+(l<<2)>>2])!=(0|n)||(r[(h=A+(s<<3)|0)>>2]=o,r[h+4>>2]=e,s=s+1|0),l=0|Rt(0|l,0|c,1,0),c=0|w()}while((0|c)<(0|a)|(0|c)==(0|a)&l>>>0<t>>>0)}Et(u),Et(f),s=0}else s=13}else s=2}while(0);return L=i,0|(h=s)}function G(e,t,n,A){n|=0,A|=0;var i,s,o,a=0,l=0;for(o=L,L=L+16|0,i=o,s=o+8|0,a=(a=!(0|we(e|=0,t|=0)))?1:2;;){if(r[s>>2]=0,!(0|O(e,t,a,s,i))&((0|r[(l=i)>>2])==(0|n)?(0|r[l+4>>2])==(0|A):0)){e=4;break}if((a=a+1|0)>>>0>=7){a=7,e=4;break}}return 4==(0|e)?(L=o,0|a):0}function V(e,t,n,A,s,o,a){t|=0,n|=0,A|=0,s|=0,o|=0,a|=0;var l,c,u,f,h,d,p,m,g,b,y=0,B=0,v=0,C=0,_=0,M=0,T=0,E=0,x=0,S=0,I=0,R=0,D=0,P=0,F=0,N=0,O=0,U=0,k=0;if(b=L,L=L+64|0,p=b+48|0,m=b+32|0,g=b+24|0,l=b+8|0,c=b,(0|(B=0|r[(e|=0)>>2]))<=0)return L=b,0|(F=0);for(u=e+4|0,f=p+8|0,h=m+8|0,d=l+8|0,y=0,D=0;;){R=(v=0|r[u>>2])+(D<<4)|0,r[p>>2]=r[R>>2],r[p+4>>2]=r[R+4>>2],r[p+8>>2]=r[R+8>>2],r[p+12>>2]=r[R+12>>2],(0|D)==(B+-1|0)?(r[m>>2]=r[v>>2],r[m+4>>2]=r[v+4>>2],r[m+8>>2]=r[v+8>>2],r[m+12>>2]=r[v+12>>2]):(R=v+(D+1<<4)|0,r[m>>2]=r[R>>2],r[m+4>>2]=r[R+4>>2],r[m+8>>2]=r[R+8>>2],r[m+12>>2]=r[R+12>>2]),B=0|Ae(p,m,A,g);e:do{if(B)v=0,y=B;else if(v=0|r[(B=g)>>2],(0|(B=0|r[B+4>>2]))>0|!(0|B)&v>>>0>0){I=0,R=0;t:for(;;){if(O=1/(+(v>>>0)+4294967296*+(0|B)),k=+i[p>>3],U=+((B=0|Lt(0|v,0|B,0|I,0|R))>>>0)+4294967296*+(0|w()),N=+(I>>>0)+4294967296*+(0|R),i[l>>3]=O*(k*U)+O*(+i[m>>3]*N),i[d>>3]=O*(+i[f>>3]*U)+O*(+i[h>>3]*N),0|(B=0|Fe(l,A,c))){y=B;break}M=0|Ut(0|(x=0|r[(S=c)>>2]),0|(S=0|r[S+4>>2]),0|t,0|n),C=0|w(),v=0|r[(_=B=a+(M<<3)|0)>>2],_=0|r[_+4>>2];n:do{if(!(0|v)&!(0|_))P=B,F=16;else for(T=0,E=0;;){if((0|T)>(0|n)|(0|T)==(0|n)&E>>>0>t>>>0){y=1;break t}if((0|v)==(0|x)&(0|_)==(0|S))break n;if(M=0|Ot(0|(B=0|Rt(0|M,0|C,1,0)),0|w(),0|t,0|n),C=0|w(),E=0|Rt(0|E,0|T,1,0),T=0|w(),!(0|(v=0|r[(_=B=a+(M<<3)|0)>>2]))&!(0|(_=0|r[_+4>>2]))){P=B,F=16;break}}}while(0);if(16!=(0|F)||(F=0,!(0|x)&!(0|S))||(r[(E=P)>>2]=x,r[E+4>>2]=S,E=o+(r[s>>2]<<3)|0,r[E>>2]=x,r[E+4>>2]=S,E=0|Rt(0|r[(E=s)>>2],0|r[E+4>>2],1,0),x=0|w(),r[(S=s)>>2]=E,r[S+4>>2]=x),I=0|Rt(0|I,0|R,1,0),R=0|w(),v=0|r[(B=g)>>2],!((0|(B=0|r[B+4>>2]))>(0|R)|(0|B)==(0|R)&v>>>0>I>>>0)){v=1;break e}}v=0}else v=1}while(0);if(D=D+1|0,!v){F=21;break}if((0|D)>=(0|(B=0|r[e>>2]))){y=0,F=21;break}}return 21==(0|F)?(L=b,0|y):0}function H(e,t){t|=0;var n,A=0,s=0,o=0,a=0,l=0,c=0,h=0,d=0,p=0;if((0|(a=0|r[(e|=0)>>2]))<=0)return s=(o=0)+(s=12.566370614359172-(s=0)),o=(a=o<0)?s:o,i[t>>3]=o,0;if(n=0|r[e+4>>2],e=1!=(0|a)&1,l=.5*+i[n>>3]+.7853981633974483,o=.5*+i[n+(e<<4)>>3]+.7853981633974483,A=+f(+l)*+f(+o),s=+i[n+(e<<4)+8>>3]-+i[n+8>>3],A=(s=(A=-2*+g(+ +f(+s)*A,+(+u(+l)*+u(+o)+ +u(+s)*A)))+0)-A,1==(0|a))return o=(l=s)+(o=12.566370614359172-(o=A)),l=(a=l<0)?o:l,i[t>>3]=l,0;for(e=1,o=s;d=e,p=(0|(e=e+1|0))%(0|a)|0,h=.5*+i[n+(d<<4)>>3]+.7853981633974483,c=.5*+i[n+(p<<4)>>3]+.7853981633974483,s=+f(+h)*+f(+c),l=+i[n+(p<<4)+8>>3]-+i[n+(d<<4)+8>>3],A=(s=o+(A=-2*+g(+ +f(+l)*s,+(+u(+h)*+u(+c)+ +u(+l)*s))-A))-o-A,!((0|e)>=(0|a));)o=s;return h=s+(h=12.566370614359172-A),h=(p=s<0)?h:s,i[t>>3]=h,0}function Q(e){return(e|=0)>>>0>121?0|(e=0):0|(e=0|r[7696+(28*e|0)+16>>2])}function j(e){return 4==(0|(e|=0))|117==(0|e)|0}function z(e){return 0|r[11120+(216*(0|r[(e|=0)>>2])|0)+(72*(0|r[e+4>>2])|0)+(24*(0|r[e+8>>2])|0)+(r[e+12>>2]<<3)>>2]}function J(e){return 0|r[11120+(216*(0|r[(e|=0)>>2])|0)+(72*(0|r[e+4>>2])|0)+(24*(0|r[e+8>>2])|0)+(r[e+12>>2]<<3)+4>>2]}function K(e,t){return t|=0,(0|r[7696+(28*(e|=0)|0)+20>>2])==(0|t)?0|(t=1):0|(t=(0|r[7696+(28*e|0)+24>>2])==(0|t))}function q(e,t){return 0|r[848+(28*(e|=0)|0)+((t|=0)<<2)>>2]}function Y(e,t){return t|=0,(0|r[848+(28*(e|=0)|0)>>2])==(0|t)?0|(t=0):(0|r[848+(28*e|0)+4>>2])==(0|t)?0|(t=1):(0|r[848+(28*e|0)+8>>2])==(0|t)?0|(t=2):(0|r[848+(28*e|0)+12>>2])==(0|t)?0|(t=3):(0|r[848+(28*e|0)+16>>2])==(0|t)?0|(t=4):(0|r[848+(28*e|0)+20>>2])==(0|t)?0|(t=5):0|((0|r[848+(28*e|0)+24>>2])==(0|t)?6:7)}function W(e){var t,n,A;return t=(A=+i[(e|=0)+16>>3])-(n=+i[e+24>>3]),+(A<n?t+6.283185307179586:t)}function X(e){return+(+i[(e|=0)>>3]-+i[e+8>>3])}function Z(e,t){e|=0;var n,A,r=0;return(r=+i[(t|=0)>>3])>=+i[e+8>>3]&&r<=+i[e>>3]?(n=+i[e+16>>3],r=+i[e+24>>3],t=(A=+i[t+8>>3])>=r,e=A<=n&1,n<r?t&&(e=1):t||(e=0),0|(t=!!(0|e))):0|(t=0)}function $(e,t){t|=0;var n,A,r,s,o,a=0,l=0,c=0,u=0;return+i[(e|=0)>>3]<+i[t+8>>3]||+i[e+8>>3]>+i[t>>3]?0|(a=0):(r=(l=+i[e+16>>3])<(u=+i[(n=e+24|0)>>3]),c=(o=+i[(a=t+16|0)>>3])<(s=+i[(A=t+24|0)>>3]),t=u-o<s-l,e=r?c|t?1:2:0,t=c?r?1:t?2:1:0,(l=+ze(l,e))<+ze(+i[A>>3],t)||(u=+ze(+i[n>>3],e))>+ze(+i[a>>3],t)?0|(c=0):0|(c=1))}function ee(e,t){t|=0;var n,A,r,s,o,a=0,l=0,c=0,u=0;return+i[(e|=0)>>3]<+i[t>>3]||+i[e+8>>3]>+i[t+8>>3]?0|(a=0):(r=(s=+i[(a=e+16|0)>>3])<(l=+i[e+24>>3]),c=(u=+i[(n=t+16|0)>>3])<(o=+i[(A=t+24|0)>>3]),t=l-u<o-s,e=r?c|t?1:2:0,t=c?r?1:t?2:1:0,(l=+ze(l,e))<=+ze(+i[A>>3],t)?0|(c=(u=+ze(+i[a>>3],e))>=+ze(+i[n>>3],t)):0|(c=0))}function te(e,t){e|=0,t|=0;var n,A,s,o,a,l=0;s=L,L=L+176|0,r[(A=s)>>2]=4,l=+i[t>>3],i[A+8>>3]=l,o=+i[t+16>>3],i[A+16>>3]=o,i[A+24>>3]=l,l=+i[t+24>>3],i[A+32>>3]=l,a=+i[t+8>>3],i[A+40>>3]=a,i[A+48>>3]=l,i[A+56>>3]=a,i[A+64>>3]=o,n=(t=A+72|0)+96|0;do{r[t>>2]=0,t=t+4|0}while((0|t)<(0|n));Jt(0|e,0|A,168),L=s}function ne(e,t,n){e|=0,t|=0,n|=0;var A,o,c,u,f,h,d,p=0,m=0,g=0,y=0,v=0,C=0,_=0;h=L,L=L+288|0,f=h+264|0,y=h+96|0,m=(p=g=h)+96|0;do{r[p>>2]=0,p=p+4|0}while((0|p)<(0|m));return 0|(t=0|Ge(t,g))?(L=h,0|(C=t)):(Ue(g=0|r[(m=g)>>2],m=0|r[m+4>>2],f),ke(g,m,y),u=+Je(f,y+8|0),i[f>>3]=+i[e>>3],i[(m=f+8|0)>>3]=+i[e+16>>3],i[y>>3]=+i[e+8>>3],i[(g=y+8|0)>>3]=+i[e+24>>3],o=+Je(f,y),_=+i[m>>3]-+i[g>>3],c=+l(+_),d=+i[f>>3]-+i[y>>3],A=+l(+d),!(0==_|0==d)&&(_=+Qt(+c,+A),_=+b(+o*o/+jt(+_/+jt(+c,+A),3)/(u*(2.59807621135*u)*.8)),i[s>>3]=_,v=~~_>>>0,C=+l(_)>=1?_>0?~~+B(+a(_/4294967296),4294967295)>>>0:~~+b((_-+(~~_>>>0))/4294967296)>>>0:0,2146435072&~r[s+4>>2])?(y=!(0|v)&!(0|C),r[(t=n)>>2]=y?1:v,r[t+4>>2]=y?0:C,t=0):t=1,L=h,0|(C=t))}function Ae(e,t,n,A){e|=0,t|=0,n|=0,A|=0;var o,c,u,f,h=0,d=0,p=0;f=L,L=L+288|0,c=f+264|0,u=f+96|0,o=(h=d=f)+96|0;do{r[h>>2]=0,h=h+4|0}while((0|h)<(0|o));return 0|(n=0|Ge(n,d))?(L=f,0|(A=n)):(Ue(h=0|r[(n=d)>>2],n=0|r[n+4>>2],c),ke(h,n,u),p=+Je(c,u+8|0),p=+b(+ +Je(e,t)/(2*p)),i[s>>3]=p,n=~~p>>>0,h=+l(p)>=1?p>0?~~+B(+a(p/4294967296),4294967295)>>>0:~~+b((p-+(~~p>>>0))/4294967296)>>>0:0,2146435072&~r[s+4>>2]?(d=!(0|n)&!(0|h),r[A>>2]=d?1:n,r[A+4>>2]=d?0:h,L=f,0|(A=0)):(L=f,0|(A=1)))}function re(e,t,n,s){e|=0,s|=0;var o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,E=0,x=0,S=0,I=0,R=0,D=0,P=0,F=0;if(o=L,L=L+224|0,R=o,E=o+48|0,(f=(0|(n|=0))>0|!(0|n)&(t|=0)>>>0>0)&(n>>>0>0|!(0|n)&t>>>0>17895697))return L=o,0|(F=14);if((0|n)<0)return L=o,0|(F=2);if(!(0|t)&!(0|n))return r[s>>2]=0,r[s+4>>2]=0,L=o,0|(F=0);for(a=0|ye(0|r[(a=e)>>2],0|r[a+4>>2]),c=0,u=0;;){if(!(0|ve(0|r[(F=l=e+(c<<3)|0)>>2],0|r[F+4>>2]))){a=5,D=159;break}if(F=(0|ye(0|r[(F=l)>>2],0|r[F+4>>2]))==(0|a),c=0|Rt(0|c,0|u,1,0),u=0|w(),!F){a=12,D=159;break}if(!((0|u)<(0|n)|(0|u)==(0|n)&c>>>0<t>>>0)){D=8;break}}if(8==(0|D)){do{if((0|n)>0|!(0|n)&t>>>0>1){if(!(c=0|Tt(a=t<<3)))return L=o,0|(F=13);for(Jt(0|c,0|e,0|a),gt(c,t,8,1),a=1,l=0;F=c+(a+-1<<3)|0,F=(0|r[(P=c+(a<<3)|0)>>2])==(0|r[F>>2])?(0|r[P+4>>2])==(0|r[F+4>>2]):0,a=0|Rt(0|a,0|l,1,0),l=0|w(),!F;)if(!((0|l)<(0|n)|(0|l)==(0|n)&a>>>0<t>>>0)){D=14;break}if(14==(0|D)){Et(c);break}return Et(c),L=o,0|(F=10)}}while(0);if(a=0|Nt(0|t,0|n,6,0),l=0|w(),f){c=0,u=0;do{a=0|Rt(0|a,0|l,0|(F=!!(0|we(0|r[(F=e+(u<<3)|0)>>2],0|r[F+4>>2]))<<31>>31),((0|F)<0)<<31>>31),l=0|w(),u=0|Rt(0|u,0|c,1,0),c=0|w()}while((0|c)<(0|n)|(0|c)==(0|n)&u>>>0<t>>>0);M=a,_=l}else M=a,_=l;if(v=0|Nt(0|M,0|_,10,0),C=0|w(),!(P=0|Tt(M<<5)))return L=o,0|(F=13);if(!(F=0|xt(v,4)))return Et(P),L=o,0|(F=13);e:do{if(f){for(oe(0|r[(I=e)>>2],0|r[I+4>>2],R),g=P,b=0,y=0,a=0,B=0;;){l=(f=!(0|r[(f=R)>>2])&!(0|r[f+4>>2]))?26990:26995,c=f?5:6,f=R+((1&f)<<3)|0,h=0|Rt(0|c,0|(u=0),-1,-1),d=0|w(),p=0,m=0;do{x=0|r[(S=f+(p<<3)|0)+4>>2],r[(I=g+(p<<5)|0)>>2]=r[S>>2],r[I+4>>2]=x,A[g+(p<<5)+9|0]=0,A[g+(p<<5)+8|0]=0,r[g+(p<<5)+20>>2]=g,r[(I=g+(p<<5)+24|0)>>2]=1,r[I+4>>2]=0,I=0|A[l+p|0],x=0|Ut(0|(x=0|Rt(0|h,0|d,0|p,0|m)),0|w(),0|c,0|u),w(),x=0|A[l+x|0],p=0|Rt(0|p,0|m,1,0),m=0|w(),S=0|A[l+((0|p)==(0|c)&(0|m)==(0|u)?0:p)|0],r[g+((I&=255)<<5)+16>>2]=g+((255&x)<<5),r[g+(I<<5)+12>>2]=g+((255&S)<<5)}while(m>>>0<u>>>0|(0|m)==(0|u)&p>>>0<c>>>0);if(b=0|Rt(0|b,0|y,1,0),y=0|w(),a=0|Rt(0|c,0|u,0|a,0|B),B=0|w(),!((0|y)<(0|n)|(0|y)==(0|n)&b>>>0<t>>>0))break e;0|oe(0|r[(I=e+(b<<3)|0)>>2],0|r[I+4>>2],R)||(g=P+(a<<5)|0)}T(27634,26956,108,26975)}}while(0);if((0|_)>0|!(0|_)&M>>>0>0){u=0,f=0;do{if(a=0|Gt(0|(c=0|r[(l=P+(u<<5)|0)>>2]),0|(l=0|r[l+4>>2]),30),a=0|Gt(0|(l=0|Nt(a^c|0,(0|w())^l,484763065,-1084733587)),0|(c=0|w()),27),l=0|Ut((a=0|Gt(0|(c=0|Nt(a^l|0,(0|w())^c,321982955,-1798288965)),0|(l=0|w()),31))^c|0,(0|w())^l,0|v,0|C),c=0|w(),0|r[(a=F+(l<<2)|0)>>2])do{l=0|Ot(0|(a=0|Rt(0|l,0|c,1,0)),0|w(),0|v,0|C),c=0|w(),a=F+(l<<2)|0}while(0|r[a>>2]);r[a>>2]=P+(u<<5),u=0|Rt(0|u,0|f,1,0),f=0|w()}while((0|f)<(0|_)|(0|f)==(0|_)&u>>>0<M>>>0);p=0,m=0;do{if(u=P+(p<<5)|0,!(0|A[(f=P+(p<<5)+9|0)|0])){if(0|le(0|r[(I=u)>>2],0|r[I+4>>2],R)){D=39;break}l=0|Gt(0|(h=0|r[(d=R)>>2]),0|(d=0|r[d+4>>2]),30),a=0|Gt(0|(l=0|Nt(l^h|0,(0|w())^d,484763065,-1084733587)),0|(c=0|w()),27),l=0|Ut((a=0|Gt(0|(c=0|Nt(a^l|0,(0|w())^c,321982955,-1798288965)),0|(l=0|w()),31))^c|0,(0|w())^l,0|v,0|C),c=0|w(),a=0|r[F+(l<<2)>>2];e:do{if(0|a){for(;(0|r[(I=a)>>2])!=(0|h)||(0|r[I+4>>2])!=(0|d);)if(l=0|Ot(0|(a=0|Rt(0|l,0|c,1,0)),0|w(),0|v,0|C),c=0|w(),!(a=0|r[F+(l<<2)>>2]))break e;A[f|0]=1,A[a+9|0]=1,l=a+16|0,r[16+(0|r[(I=P+(p<<5)+12|0)>>2])>>2]=r[l>>2],n=a+12|0,S=0|r[P+(p<<5)+16>>2],r[S+12>>2]=r[n>>2],r[16+(0|r[n>>2])>>2]=S,r[12+(0|r[l>>2])>>2]=r[I>>2],l=0|ie(u),I=0|ie(a),a=(S=(0|(n=0|r[(a=l+24|0)+4>>2]))<(0|(x=0|r[(S=I+24|0)+4>>2]))|((0|n)==(0|x)?(0|r[a>>2])>>>0<(0|r[S>>2])>>>0:0))?l:I,(0|(l=S?I:l))!=(0|a)&&(x=a+24|0,x=0|Rt(0|r[(S=I=l+24|0)>>2],0|r[S+4>>2],0|r[x>>2],0|r[x+4>>2]),S=0|w(),r[I>>2]=x,r[I+4>>2]=S,r[a+20>>2]=l)}}while(0)}p=0|Rt(0|p,0|m,1,0),m=0|w()}while((0|m)<(0|_)|(0|m)==(0|_)&p>>>0<M>>>0);39==(0|D)&&T(27634,26956,258,27001),a=0,l=0;do{A[P+(a<<5)+8|0]=0,a=0|Rt(0|a,0|l,1,0),l=0|w()}while((0|l)<(0|_)|(0|l)==(0|_)&a>>>0<M>>>0);for(h=0,c=0,f=0,d=0;;){if(a=P+(h<<5)|0,0|A[P+(h<<5)+8|0]||0|A[P+(h<<5)+9|0])u=f;else{l=0|r[(u=a)>>2],u=0|r[u+4>>2];do{A[a+8|0]=1,I=a=0|r[a+12>>2]}while((0|r[I>>2])!=(0|l)||(0|r[I+4>>2])!=(0|u));c=0|Rt(0|c,0|f,1,0),u=0|w()}if(h=0|Rt(0|h,0|d,1,0),!((0|(d=0|w()))<(0|_)|(0|d)==(0|_)&h>>>0<M>>>0))break;f=u}a=0,l=0;do{A[P+(a<<5)+8|0]=0,a=0|Rt(0|a,0|l,1,0),l=0|w()}while((0|l)<(0|_)|(0|l)==(0|_)&a>>>0<M>>>0);S=c,x=u,a=1}else S=0,x=0,a=0;I=0|Tt(24*S|0);e:do{if(0|I){t:do{if(a){e=0,v=0,n=0,t=0;n:for(;;){if(a=P+(e<<5)|0,0|A[P+(e<<5)+8|0]||0|A[P+(e<<5)+9|0])l=n,a=v;else{y=0|r[(B=a)>>2],B=0|r[B+4>>2],l=0,c=0;do{l=0|Rt(0|l,0|c,2,0),c=0|w(),C=a=0|r[a+12>>2]}while((0|r[C>>2])!=(0|y)||(0|r[C+4>>2])!=(0|B));if(!(b=0|Tt(l<<4)))break;l=y,c=B,g=0,m=0,u=0,f=0;do{if(0|ae(l,c,E)){D=69;break n}if(p=((0|(d=(C=0|r[E>>2])+-1|0))<0)<<31>>31,(0|C)>1){c=u,h=0,l=f,u=0;do{f=E+8+(h<<4)|0,r[(C=b+(c<<4)|0)>>2]=r[f>>2],r[C+4>>2]=r[f+4>>2],r[C+8>>2]=r[f+8>>2],r[C+12>>2]=r[f+12>>2],c=0|Rt(0|c,0|l,1,0),l=0|w(),h=0|Rt(0|h,0|u,1,0),u=0|w()}while((0|u)<(0|p)|(0|u)==(0|p)&h>>>0<d>>>0);u=c,f=l}g=0|Rt(0|g,0|m,0|d,0|p),m=0|w(),A[a+8|0]=1,a=0|r[a+12>>2],l=0|r[(c=a)>>2],c=0|r[c+4>>2]}while(!((0|l)==(0|y)&(0|c)==(0|B)));if(!(l=0|St(b,g<<4))){D=75;break}B=0|ie(a),C=0|r[B+4>>2],r[(a=I+(24*n|0)|0)>>2]=r[B>>2],r[a+4>>2]=C,r[(a=I+(24*n|0)+16|0)>>2]=g,r[I+(24*n|0)+20>>2]=l,r[R>>2]=r[a>>2],r[R+4>>2]=r[a+4>>2],H(R,I+(24*n|0)+8|0),l=0|Rt(0|n,0|v,1,0),a=0|w()}if(e=0|Rt(0|e,0|t,1,0),!((0|(t=0|w()))<(0|_)|(0|t)==(0|_)&e>>>0<M>>>0))break t;v=a,n=l}if(69==(0|D)?T(27634,26956,351,27016):75==(0|D)&&Et(b),(0|v)>0|!(0|v)&n>>>0>0)for(u=0,f=0,a=n,c=v;(l=0|r[I+(24*u|0)+20>>2])?(Et(l),l=v,a=n):l=c,u=0|Rt(0|u,0|f,1,0),(0|(f=0|w()))<(0|l)|(0|f)==(0|l)&u>>>0<a>>>0;)c=l;Et(I);break e}}while(0);gt(I,S,24,2);t:do{if(!(0|S)&!(0|x)){if(0|(C=0|Tt(192))){if(r[C+16>>2]=0,r[C+20>>2]=0,r[(m=C+8|0)>>2]=3,a=0|Tt(48),r[(g=C+12|0)>>2]=a,0|a){r[a>>2]=r[3860],r[a+4>>2]=r[3861],r[a+8>>2]=r[3862],r[a+12>>2]=r[3863],r[(p=a+16|0)>>2]=r[3864],r[p+4>>2]=r[3865],r[p+8>>2]=r[3866],r[p+12>>2]=r[3867],r[(p=a+32|0)>>2]=r[3868],r[p+4>>2]=r[3869],r[p+8>>2]=r[3870],r[p+12>>2]=r[3871],r[R>>2]=r[m>>2],r[R+4>>2]=r[m+4>>2],H(R,C),r[C+40>>2]=0,r[C+44>>2]=0,r[(p=C+32|0)>>2]=3,a=0|Tt(48),r[(b=C+36|0)>>2]=a;do{if(a){if(r[a>>2]=r[3872],r[a+4>>2]=r[3873],r[a+8>>2]=r[3874],r[a+12>>2]=r[3875],r[(d=a+16|0)>>2]=r[3876],r[d+4>>2]=r[3877],r[d+8>>2]=r[3878],r[d+12>>2]=r[3879],r[(d=a+32|0)>>2]=r[3880],r[d+4>>2]=r[3881],r[d+8>>2]=r[3882],r[d+12>>2]=r[3883],r[R>>2]=r[p>>2],r[R+4>>2]=r[p+4>>2],H(R,C+24|0),r[C+64>>2]=0,r[C+68>>2]=0,r[(d=C+56|0)>>2]=3,a=0|Tt(48),r[(y=C+60|0)>>2]=a,!a){u=0,f=2;break}if(r[a>>2]=r[3884],r[a+4>>2]=r[3885],r[a+8>>2]=r[3886],r[a+12>>2]=r[3887],r[(h=a+16|0)>>2]=r[3888],r[h+4>>2]=r[3889],r[h+8>>2]=r[3890],r[h+12>>2]=r[3891],r[(h=a+32|0)>>2]=r[3892],r[h+4>>2]=r[3893],r[h+8>>2]=r[3894],r[h+12>>2]=r[3895],r[R>>2]=r[d>>2],r[R+4>>2]=r[d+4>>2],H(R,C+48|0),r[C+88>>2]=0,r[C+92>>2]=0,r[(h=C+80|0)>>2]=3,a=0|Tt(48),r[(B=C+84|0)>>2]=a,!a){u=0,f=3;break}if(r[a>>2]=r[3896],r[a+4>>2]=r[3897],r[a+8>>2]=r[3898],r[a+12>>2]=r[3899],r[(f=a+16|0)>>2]=r[3900],r[f+4>>2]=r[3901],r[f+8>>2]=r[3902],r[f+12>>2]=r[3903],r[(f=a+32|0)>>2]=r[3904],r[f+4>>2]=r[3905],r[f+8>>2]=r[3906],r[f+12>>2]=r[3907],r[R>>2]=r[h>>2],r[R+4>>2]=r[h+4>>2],H(R,C+72|0),r[C+112>>2]=0,r[C+116>>2]=0,r[(f=C+104|0)>>2]=3,a=0|Tt(48),r[(e=C+108|0)>>2]=a,!a){u=0,f=4;break}if(r[a>>2]=r[3908],r[a+4>>2]=r[3909],r[a+8>>2]=r[3910],r[a+12>>2]=r[3911],r[(u=a+16|0)>>2]=r[3912],r[u+4>>2]=r[3913],r[u+8>>2]=r[3914],r[u+12>>2]=r[3915],r[(u=a+32|0)>>2]=r[3916],r[u+4>>2]=r[3917],r[u+8>>2]=r[3918],r[u+12>>2]=r[3919],r[R>>2]=r[f>>2],r[R+4>>2]=r[f+4>>2],H(R,C+96|0),r[C+136>>2]=0,r[C+140>>2]=0,r[(u=C+128|0)>>2]=3,a=0|Tt(48),r[(t=C+132|0)>>2]=a,!a){u=0,f=5;break}if(r[a>>2]=r[3920],r[a+4>>2]=r[3921],r[a+8>>2]=r[3922],r[a+12>>2]=r[3923],r[(c=a+16|0)>>2]=r[3924],r[c+4>>2]=r[3925],r[c+8>>2]=r[3926],r[c+12>>2]=r[3927],r[(c=a+32|0)>>2]=r[3928],r[c+4>>2]=r[3929],r[c+8>>2]=r[3930],r[c+12>>2]=r[3931],r[R>>2]=r[u>>2],r[R+4>>2]=r[u+4>>2],H(R,C+120|0),r[C+160>>2]=0,r[C+164>>2]=0,r[(c=C+152|0)>>2]=3,a=0|Tt(48),r[(n=C+156|0)>>2]=a,!a){u=0,f=6;break}if(r[a>>2]=r[3932],r[a+4>>2]=r[3933],r[a+8>>2]=r[3934],r[a+12>>2]=r[3935],r[(l=a+16|0)>>2]=r[3936],r[l+4>>2]=r[3937],r[l+8>>2]=r[3938],r[l+12>>2]=r[3939],r[(l=a+32|0)>>2]=r[3940],r[l+4>>2]=r[3941],r[l+8>>2]=r[3942],r[l+12>>2]=r[3943],r[R>>2]=r[c>>2],r[R+4>>2]=r[c+4>>2],H(R,C+144|0),r[C+184>>2]=0,r[C+188>>2]=0,r[(l=C+176|0)>>2]=3,a=0|Tt(48),r[(v=C+180|0)>>2]=a,!a){u=0,f=7;break}if(r[a>>2]=r[3944],r[a+4>>2]=r[3945],r[a+8>>2]=r[3946],r[a+12>>2]=r[3947],r[(E=a+16|0)>>2]=r[3948],r[E+4>>2]=r[3949],r[E+8>>2]=r[3950],r[E+12>>2]=r[3951],r[(a=a+32|0)>>2]=r[3952],r[a+4>>2]=r[3953],r[a+8>>2]=r[3954],r[a+12>>2]=r[3955],r[R>>2]=r[l>>2],r[R+4>>2]=r[l+4>>2],H(R,C+168|0),gt(C,8,24,3),a=0|Tt(128),r[s+4>>2]=a,0|a){r[s>>2]=8,r[a>>2]=r[m>>2],r[a+4>>2]=r[m+4>>2],r[a+8>>2]=r[m+8>>2],r[a+12>>2]=r[m+12>>2],r[(D=a+16|0)>>2]=r[p>>2],r[D+4>>2]=r[p+4>>2],r[D+8>>2]=r[p+8>>2],r[D+12>>2]=r[p+12>>2],r[(D=a+32|0)>>2]=r[d>>2],r[D+4>>2]=r[d+4>>2],r[D+8>>2]=r[d+8>>2],r[D+12>>2]=r[d+12>>2],r[(D=a+48|0)>>2]=r[h>>2],r[D+4>>2]=r[h+4>>2],r[D+8>>2]=r[h+8>>2],r[D+12>>2]=r[h+12>>2],r[(D=a+64|0)>>2]=r[f>>2],r[D+4>>2]=r[f+4>>2],r[D+8>>2]=r[f+8>>2],r[D+12>>2]=r[f+12>>2],r[(D=a+80|0)>>2]=r[u>>2],r[D+4>>2]=r[u+4>>2],r[D+8>>2]=r[u+8>>2],r[D+12>>2]=r[u+12>>2],r[(D=a+96|0)>>2]=r[c>>2],r[D+4>>2]=r[c+4>>2],r[D+8>>2]=r[c+8>>2],r[D+12>>2]=r[c+12>>2],r[(D=a+112|0)>>2]=r[l>>2],r[D+4>>2]=r[l+4>>2],r[D+8>>2]=r[l+8>>2],r[D+12>>2]=r[l+12>>2],Et(C),D=158;break t}0|(a=0|r[g>>2])&&Et(a),0|(a=0|r[b>>2])&&Et(a),0|(a=0|r[y>>2])&&Et(a),0|(a=0|r[B>>2])&&Et(a),0|(a=0|r[e>>2])&&Et(a),0|(a=0|r[t>>2])&&Et(a),0|(a=0|r[n>>2])&&Et(a),0|(a=0|r[v>>2])&&Et(a),Et(C);break t}u=0,f=1}while(0);a=0,c=0;do{0|(l=0|r[C+(24*a|0)+12>>2])&&Et(l),a=0|Rt(0|a,0|c,1,0),c=0|w()}while(c>>>0<u>>>0|(0|c)==(0|u)&a>>>0<f>>>0)}Et(C),D=152}}else{if((0|x)>0|!(0|x)&S>>>0>0){c=0,u=0,f=0,l=0,a=0,h=0;do{R=u,D=f,l=0|Rt(0|l,0|a,1&((0|(u=0|r[(E=I+(24*c|0)|0)>>2]))!=(0|R)|(0|(f=0|r[E+4>>2]))!=(0|D)),0),a=0|w(),c=0|Rt(0|c,0|h,1,0),h=0|w()}while((0|h)<(0|x)|(0|h)==(0|x)&c>>>0<S>>>0);B=l,y=a}else B=0,y=0;if(e=0|Tt(24*B|0)){n:do{if((0|x)>=0){for(m=0,g=0,l=0,c=0,b=0,u=0;;){if((0|m)==(0|S)&(0|g)==(0|x)||(D=I+(24*m|0)|0,(0|r[(R=I+(24*l|0)|0)>>2])!=(0|r[D>>2])||(0|r[R+4>>2])!=(0|r[D+4>>2]))){if(d=I+(24*l|0)|0,p=0|Rt(0|(D=0|Lt(0|m,0|g,0|l,0|c)),0|(R=0|w()),-1,-1),c=0|w(),(0|R)>0|!(0|R)&D>>>0>1){if(!(a=0|Tt(p<<3)))break;f=0,h=0;do{D=f,f=0|Rt(0|f,0|h,1,0),h=0|w(),R=0|r[(E=d+(24*f|0)+16|0)+4>>2],r[(D=a+(D<<3)|0)>>2]=r[E>>2],r[D+4>>2]=R}while((0|h)<(0|c)|(0|h)==(0|c)&f>>>0<p>>>0)}else a=0;D=0|r[(R=I+(24*l|0)+16|0)+4>>2],r[(c=e+(24*u|0)+8|0)>>2]=r[R>>2],r[c+4>>2]=D,r[e+(24*u|0)+16>>2]=p,r[e+(24*u|0)+20>>2]=a,i[e+(24*u|0)>>3]=+i[I+(24*l|0)+8>>3],u=0|Rt(0|u,0|b,1,0),l=m,c=g,a=0|w()}else a=b;if(D=m,m=0|Rt(0|m,0|g,1,0),R=g,g=0|w(),!((0|R)<(0|x)|(0|R)==(0|x)&D>>>0<S>>>0))break n;b=a}if((0|b)>0|!(0|b)&u>>>0>0){a=0,c=0;do{0|(l=0|r[e+(24*a|0)+20>>2])&&Et(l),a=0|Rt(0|a,0|c,1,0),c=0|w()}while((0|c)<(0|b)|(0|c)==(0|b)&a>>>0<u>>>0)}Et(e),D=152;break t}}while(0);if(gt(e,B,24,3),a=0|Tt(B<<4),r[(c=s+4|0)>>2]=a,a){r[s>>2]=B;do{if((0|y)>0|!(0|y)&B>>>0>0){if(s=e+8|0,r[a>>2]=r[s>>2],r[a+4>>2]=r[s+4>>2],r[a+8>>2]=r[s+8>>2],r[a+12>>2]=r[s+12>>2],1==(0|B)&!(0|y))break;if(D=e+32|0,r[(s=a+16|0)>>2]=r[D>>2],r[s+4>>2]=r[D+4>>2],r[s+8>>2]=r[D+8>>2],r[s+12>>2]=r[D+12>>2],!((0|y)>0|!(0|y)&B>>>0>2))break;a=2,l=0;do{s=(0|r[c>>2])+(a<<4)|0,D=e+(24*a|0)+8|0,r[s>>2]=r[D>>2],r[s+4>>2]=r[D+4>>2],r[s+8>>2]=r[D+8>>2],r[s+12>>2]=r[D+12>>2],a=0|Rt(0|a,0|l,1,0),l=0|w()}while((0|l)<(0|y)|(0|l)==(0|y)&a>>>0<B>>>0)}}while(0);Et(e),D=158;break}if((0|y)>0|!(0|y)&B>>>0>0){a=0,c=0;do{0|(l=0|r[e+(24*a|0)+20>>2])&&Et(l),a=0|Rt(0|a,0|c,1,0),c=0|w()}while((0|c)<(0|y)|(0|c)==(0|y)&a>>>0<B>>>0)}Et(e),D=152;break}D=152}}while(0);if(158==(0|D))return Et(P),Et(F),Et(I),L=o,0|(F=0);if(152==(0|D)&&(0|x)>0|!(0|x)&S>>>0>0)for(u=0,f=0,a=S,c=x;(l=0|r[I+(24*u|0)+20>>2])?(Et(l),l=x,a=S):l=c,u=0|Rt(0|u,0|f,1,0),(0|(f=0|w()))<(0|l)|(0|f)==(0|l)&u>>>0<a>>>0;)c=l;return Et(I),Et(P),Et(F),L=o,0|(F=13)}}while(0);return Et(P),Et(F),L=o,0|(F=13)}return 159==(0|D)?(L=o,0|a):0}function ie(e){var t,n=0;return(0|(n=0|r[(t=(e|=0)+20|0)>>2]))==(0|e)?0|e:(n=0|ie(n),r[t>>2]=n,0|n)}function se(e,t){var n=0;switch(n=0|Gt(0|(e|=0),0|(t|=0),56),w(),7&n){case 0:case 7:return 0|(n=0)}return n=-2130706433&t|134217728,!0&268435456==(2013265920&t)?!0&16777216==(117440512&t)&!!(0|we(e,n))?0|(n=0):0|(n=0|ve(e,n)):0|(n=0)}function oe(e,t,n){n|=0;var A,i=0;return A=!(0|we(e|=0,t|=0)),t&=-2130706433,r[(i=n)>>2]=A?e:0,r[i+4>>2]=A?285212672|t:0,r[(i=n+8|0)>>2]=e,r[i+4>>2]=301989888|t,r[(i=n+16|0)>>2]=e,r[i+4>>2]=318767104|t,r[(i=n+24|0)>>2]=e,r[i+4>>2]=335544320|t,r[(i=n+32|0)>>2]=e,r[i+4>>2]=352321536|t,r[(n=n+40|0)>>2]=e,r[n+4>>2]=369098752|t,0}function ae(e,t,n){n|=0;var A,i,s=0,o=0;return i=L,L=L+16|0,A=i,o=-2130706433&(t|=0)|134217728,!0&268435456==(2013265920&t)?(s=0|Gt(0|(e|=0),0|t,56),w(),s=0|function(e,t,n){e|=0,t|=0,n|=0;var A=0,i=0,s=0;if(s=L,L=L+16|0,i=s,A=0|we(e,t),(n+-1|0)>>>0>5)return L=s,0|(i=-1);if(A=!!(0|A),1==(0|n)&A)return L=s,0|(i=-1);do{if(!(0|dt(e,t,i))){if(A){A=(5+(0|r[26416+(n<<2)>>2])-(0|r[i>>2])|0)%5|0;break}A=(6+(0|r[26448+(n<<2)>>2])-(0|r[i>>2])|0)%6|0;break}A=-1}while(0);return i=A,L=s,0|i}(e,o,7&s),-1==(0|s)?(r[n>>2]=0,L=i,0|(o=6)):(0|Oe(e,o,A)&&T(27634,27035,282,27050),t=0|Gt(0|e,0|t,52),w(),t&=15,0|we(e,o)?he(A,t,s,2,n):ge(A,t,s,2,n),L=i,0|(o=0))):(L=i,0|(o=6))}function le(e,t,n){e|=0,n|=0;var A,i=0,s=0,o=0;return A=L,L=L+16|0,s=A,o=-2130706433&(t|=0)|134217728,!0&268435456==(2013265920&t)?(r[(i=A+8|0)>>2]=0,t=0|Gt(0|e,0|t,56),w(),0|(t=0|O(e,o,7&t,i,s))?(L=A,0|(n=t)):7==(0|(t=0|G(i=0|r[s>>2],s=0|r[s+4>>2],e,o)))?(L=A,0|(n=11)):(e=0|Vt(0|t,0,56),o=-2130706433&s|w()|268435456,r[n>>2]=i|e,r[n+4>>2]=o,L=A,0|(n=0))):(L=A,0|(n=6))}function ce(e,t,n){e|=0,t|=0;var A,s,o=0,a=0,p=0,m=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,T=0,E=0,x=0,S=0,I=0,R=0;r[(n|=0)>>2]=0,B=+i[e>>3],v=+i[e+8>>3],y=+i[e+16>>3],a=0,p=5,o=5,e=0;do{(m=(M=+i[15888+(24*a|0)>>3]-B)*M+(_=+i[15888+(24*a|0)+8>>3]-v)*_+(m=+i[15888+(24*a|0)+16>>3]-y)*m)<o&&(r[n>>2]=a,p=m,e=a,o=m),a=a+1|0}while(20!=(0|a));if((p=+d(+(1-.5*p)))<1e-16)y=0,m=0;else{if(I=+i[16368+(24*e|0)>>3],x=+i[15888+(24*e|0)>>3],S=+i[15888+(24*e|0)+8>>3],m=x*(R=-((E=+i[15888+(24*e|0)+16>>3])+(0*x+0*S)))+0,M=S*R+0,m*=T=(T=+c(+((R=E*R+1)*R+(m*m+M*M))))>0?1/T:0,M*=T,T*=R,_=B+x*(R=-(B*x+v*S+y*E)),_*=v=(v=+c(+((B=y+E*R)*B+(_*_+(o=v+S*R)*o))))>0?1/v:0,o*=v,o=+je(I-+je(+g(+((v*=B)*(S*m-x*M)+(_*(E*M-S*T)+o*(x*T-E*m))),+(T*v+(m*_+M*o))))),m=0|Pe(t)?+je(o+-.3334731722518321):o,o=2.618033988749896*+h(+p),(0|t)>0){e=0;do{o*=2.6457513110645907,e=e+1|0}while((0|e)!=(0|t))}y=+u(+m)*o,m=+f(+m)*o}t=n+4|0,r[(s=n+12|0)>>2]=0,p=1.1547005383792515*+l(+m),o=+l(+y)+.5*p,o-=+(0|(e=~~o)),p-=+(0|(a=~~p));do{if(o<.5){if(o<.3333333333333333){if(r[t>>2]=e,p<.5*(o+1)){r[n+8>>2]=a;break}a=a+1|0,r[n+8>>2]=a;break}if(a=(1&!(p<(R=1-o)))+a|0,r[n+8>>2]=a,R<=p&p<2*o){e=e+1|0,r[t>>2]=e;break}r[t>>2]=e;break}if(!(o<.6666666666666666)){if(e=e+1|0,r[t>>2]=e,p<.5*o){r[n+8>>2]=a;break}a=a+1|0,r[n+8>>2]=a;break}if(p<1-o){if(r[n+8>>2]=a,2*o-1<p){r[t>>2]=e;break}}else a=a+1|0,r[n+8>>2]=a;e=e+1|0,r[t>>2]=e}while(0);do{if(y<0){if(1&a){e=~~(+(0|e)-(2*(+((C=0|Lt(0|e,((0|e)<0)<<31>>31,0|(C=(a+1|0)/2|0),((0|C)<0)<<31>>31))>>>0)+4294967296*+(0|w()))+1)),r[t>>2]=e,C=t;break}e=~~(+(0|e)-2*(+((C=0|Lt(0|e,((0|e)<0)<<31>>31,0|(C=(0|a)/2|0),((0|C)<0)<<31>>31))>>>0)+4294967296*+(0|w()))),r[t>>2]=e,C=t;break}C=t}while(0);A=n+8|0,t=0-a|0,m<0?(n=e-((1|a<<1)/2|0)|0,r[C>>2]=n,r[A>>2]=t,a=t):n=e,e=a-n|0,t=0-n|0,(0|n)<0?(r[A>>2]=e,r[s>>2]=t,r[C>>2]=0,b=0):(e=a,b=n,t=0),n=b-e|0,a=t-e|0,(0|e)<0?(r[C>>2]=n,r[s>>2]=a,r[A>>2]=0,b=n,e=0):a=t,n=b-a|0,t=e-a|0,(0|a)<0?(r[C>>2]=n,r[A>>2]=t,r[s>>2]=0,a=0):(t=e,n=b),(0|(e=(0|a)<(0|(e=(0|t)<(0|n)?t:n))?a:e))<=0||(r[C>>2]=n-e,r[A>>2]=t-e,r[s>>2]=a-e)}function ue(e,t,n){t|=0,n|=0;var A,s,o,a;A=L,L=L+16|0,s=A,a=0|r[(e|=0)+12>>2],o=+((0|r[e+8>>2])-a|0),i[s>>3]=+((0|r[e+4>>2])-a|0)-.5*o,i[s+8>>3]=.8660254037844386*o,fe(s,0|r[e>>2],t,0,n),L=A}function fe(e,t,n,A,s){t|=0,n|=0,A|=0,s|=0;var o,a,l,h,d,p=0,b=0,y=0,B=0,v=0,C=0,_=0;if(p=+function(e){e|=0;var t=0,n=0;return n=+i[e>>3],t=+i[e+8>>3],+ +c(+(n*n+t*t))}(e|=0),p<1e-16)return t=15888+(24*t|0)|0,r[s>>2]=r[t>>2],r[s+4>>2]=r[t+4>>2],r[s+8>>2]=r[t+8>>2],r[s+12>>2]=r[t+12>>2],r[s+16>>2]=r[t+16>>2],void(r[s+20>>2]=r[t+20>>2]);if(b=+g(+ +i[e+8>>3],+ +i[e>>3]),(0|n)>0){e=0;do{p*=.37796447300922725,e=e+1|0}while((0|e)!=(0|n))}y=.3333333333333333*p,A?(n=!(0|Pe(n)),p=+m(.381966011250105*(n?y:.37796447300922725*y))):(p=+m(.381966011250105*p),0|Pe(n)&&(b=+je(b+.3334731722518321))),v=+je(+i[16368+(24*t|0)>>3]-b),y=+i[15888+(24*t|0)>>3],a=+i[15888+(24*t|0)+8>>3],B=y*(_=-((h=+i[15888+(24*t|0)+16>>3])+(0*y+0*a)))+0,b=a*_+0,B*=C=(C=+c(+((_=h*_+1)*_+(B*B+b*b))))>0?1/C:0,b*=C,C*=_,_=+u(+v),v=+f(+v),o=(d=+u(+p))*y+(l=+f(+p))*(_*B+v*(h*b-a*C)),p=d*a+l*(_*b+v*(y*C-h*B)),y=(y=+c(+((b=d*h+l*(_*C+v*(a*B-y*b)))*b+(o*o+p*p))))>0?1/y:0,i[s>>3]=o*y,i[s+8>>3]=p*y,i[s+16>>3]=b*y}function he(e,t,n,A,s){e|=0,t|=0,n|=0,A|=0,s|=0;var o,a,l,c,u,f,h,d,m,b,B,v,C,_,M,w,E,x,S,I,R,D,P,F,N,O,U,k=0,G=0,V=0,H=0,Q=0,j=0,z=0,J=0,K=0,q=0,Y=0,W=0,X=0,Z=0,$=0;if(U=L,L=L+256|0,K=U+224|0,F=U,N=U+208|0,O=U+192|0,x=U+168|0,S=U+152|0,I=U+136|0,R=U+120|0,D=U+104|0,P=U+80|0,r[(k=U+240|0)>>2]=t,r[K>>2]=r[e>>2],r[K+4>>2]=r[e+4>>2],r[K+8>>2]=r[e+8>>2],r[K+12>>2]=r[e+12>>2],de(K,k,F),r[s>>2]=0,(0|(K=A+n+(5==(0|A)&1)|0))<=(0|n))L=U;else{h=N+4|0,u=N+8|0,f=N+12|0,m=O+8|0,b=n+5|0,B=16848+((d=0|r[k>>2])<<2)|0,v=x+8|0,C=16928+(d<<2)|0,_=S+8|0,M=I+8|0,w=R+8|0,E=O+8|0,o=x+8|0,l=x+16|0,a=P+8|0,c=P+16|0,J=n,A=0,G=0,V=0,H=0;e:for(;;){z=F+((0|J)%5<<4)|0,r[N>>2]=r[z>>2],r[N+4>>2]=r[z+4>>2],r[N+8>>2]=r[z+8>>2],r[N+12>>2]=r[z+12>>2];do{}while(2==(0|pe(N,d,0,1)));if((0|J)>(0|n)&!!(0|Pe(t))){if(z=0|r[N>>2],e=0|r[h>>2],Q=0|r[u>>2],k=0|r[f>>2],q=+(V-H|0),i[O>>3]=+(G-H|0)-.5*q,i[m>>3]=.8660254037844386*q,H=0|r[17008+(80*z|0)+(A<<2)>>2],j=0|r[18608+(80*z|0)+(20*H|0)>>2],(0|(V=0|r[18608+(80*z|0)+(20*H|0)+16>>2]))>0){G=0,A=Q;do{A=((W=(0|(Q=A+e-((Z=(0|(X=k+e|0))<0)?X:0)|0))<0)?0:Q)-((k=(0|(Y=k+A-(Z?X:0)-(W?Q:0)|0))<0)?Y:0)|0,e=(e=(Z?0:X)-(W?Q:0)-(k?Y:0)|0)-((Q=(0|(k=(0|(Y=k?0:Y))<(0|(k=(0|A)<(0|e)?A:e))?Y:k))>0)?k:0)|0,A=A-(Q?k:0)|0,k=Y-(Q?k:0)|0,G=G+1|0}while((0|G)<(0|V))}else A=Q;switch(Z=3*(0|r[B>>2])|0,Y=(0|y(Z,0|r[18608+(80*z|0)+(20*H|0)+4>>2]))+e|0,Q=(0|y(Z,0|r[18608+(80*z|0)+(20*H|0)+8>>2]))+A|0,Z=(0|y(Z,0|r[18608+(80*z|0)+(20*H|0)+12>>2]))+k|0,Y=((H=(0|Y)<0)?0:Y)-((W=(0|(Q=Q-(H?Y:0)|0))<0)?Q:0)-((X=(0|(Z=Z+(H?0-Y|0:0)+(W?0-Q|0:0)|0))<0)?Z:0)|0,q=+((Q=(W?0:Q)-(X?Z:0)|0)-((W=(0|(X=(0|(Z=X?0:Z))<(0|(X=(0|Q)<(0|Y)?Q:Y))?Z:X))>0)?X:0)-(Z=Z-(W?X:0)|0)|0),i[x>>3]=+(Y-(W?X:0)-Z|0)-.5*q,i[v>>3]=.8660254037844386*q,q=+(0|r[C>>2]),i[S>>3]=3*q,i[_>>3]=0,$=-1.5*q,i[I>>3]=$,i[M>>3]=2.598076211353316*q,i[R>>3]=$,i[w>>3]=-2.598076211353316*q,0|r[17008+(80*j|0)+(z<<2)>>2]){case 1:e=I,A=S;break;case 3:e=R,A=I;break;case 2:e=S,A=R;break;default:e=12;break e}ft(O,x,A,e,D),fe(D,j,d,1,P),Z=0|r[s>>2],q=+p(+ +i[c>>3]),$=+g(+ +i[a>>3],+ +i[P>>3]),i[s+8+(Z<<4)>>3]=q,i[s+8+(Z<<4)+8>>3]=$,r[s>>2]=1+(0|r[s>>2])}if((0|J)<(0|b)&&(Z=0|r[f>>2],q=+((0|r[u>>2])-Z|0),i[O>>3]=+((0|r[h>>2])-Z|0)-.5*q,i[E>>3]=.8660254037844386*q,fe(O,0|r[N>>2],d,1,x),Z=0|r[s>>2],q=+p(+ +i[l>>3]),$=+g(+ +i[o>>3],+ +i[x>>3]),i[s+8+(Z<<4)>>3]=q,i[s+8+(Z<<4)+8>>3]=$,r[s>>2]=1+(0|r[s>>2])),(0|(J=J+1|0))>=(0|K)){e=3;break}A=0|r[N>>2],G=0|r[h>>2],V=0|r[u>>2],H=0|r[f>>2]}3!=(0|e)?12==(0|e)&&T(27073,27120,599,27130):L=U}}function de(e,t,n){e|=0,t|=0,n|=0;var A,i,s,o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0;o=L,L=L+128|0,l=o,u=20208,f=(c=a=o+64|0)+60|0;do{r[c>>2]=r[u>>2],c=c+4|0,u=u+4|0}while((0|c)<(0|f));u=20272,f=(c=l)+60|0;do{r[c>>2]=r[u>>2],c=c+4|0,u=u+4|0}while((0|c)<(0|f));p=(p=!(0|Pe(0|r[t>>2])))?a:l,c=0|r[(s=e+4|0)>>2],a=0|r[(A=e+8|0)>>2],l=0|r[(i=e+12|0)>>2],u=a+(c<<1)|0,r[s>>2]=u,a=l+(a<<1)|0,r[A>>2]=a,c=(l<<1)+c|0,r[i>>2]=c,l=a-u|0,f=c-u|0,(0|u)<0&&(r[A>>2]=l,r[i>>2]=f,r[s>>2]=0,a=l,u=0,c=f),f=u-a|0,l=c-a|0,(0|a)<0?(r[s>>2]=f,r[i>>2]=l,r[A>>2]=0,a=0):(l=c,f=u),u=f-l|0,c=a-l|0,(0|l)<0?(r[s>>2]=u,r[A>>2]=c,r[i>>2]=0,l=0):(c=a,u=f),(0|(a=(0|l)<(0|(a=(0|c)<(0|u)?c:u))?l:a))>0&&(l=l-a|0,c=c-a|0,u=u-a|0,r[s>>2]=u,r[A>>2]=c,r[i>>2]=l),h=(c<<1)+u|0,f=l+(u<<1)|0,r[s>>2]=f,r[A>>2]=h,c=(l<<1)+c|0,r[i>>2]=c,a=h-f|0,l=c-f|0,(0|f)<0?(r[A>>2]=a,r[i>>2]=l,r[s>>2]=0,f=0,c=l):a=h,u=f-a|0,l=c-a|0,(0|a)<0?(r[s>>2]=u,r[i>>2]=l,r[A>>2]=0,f=u,a=0):l=c,u=f-l|0,c=a-l|0,(0|l)<0?(r[s>>2]=u,r[A>>2]=c,r[i>>2]=0,l=0):(c=a,u=f),(0|(a=(0|l)<(0|(a=(0|c)<(0|u)?c:u))?l:a))>0&&(r[s>>2]=u-a,r[A>>2]=c-a,r[i>>2]=l-a),0|Pe(0|r[t>>2])&&(c=0|r[s>>2],a=(3*(u=0|r[A>>2])|0)+c|0,c=(l=0|r[i>>2])+(3*c|0)|0,r[s>>2]=c,r[A>>2]=a,u=(3*l|0)+u|0,r[i>>2]=u,l=a-c|0,f=u-c|0,(0|c)<0?(r[A>>2]=l,r[i>>2]=f,r[s>>2]=0,a=l,h=0):(h=c,f=u),c=h-a|0,l=f-a|0,(0|a)<0?(r[s>>2]=c,r[i>>2]=l,r[A>>2]=0,h=c,u=0):(u=a,l=f),c=h-l|0,a=u-l|0,(0|l)<0?(r[s>>2]=c,r[A>>2]=a,r[i>>2]=0,u=a,l=0):c=h,(0|(a=(0|l)<(0|(a=(0|u)<(0|c)?u:c))?l:a))>0&&(r[s>>2]=c-a,r[A>>2]=u-a,r[i>>2]=l-a),r[t>>2]=1+(0|r[t>>2])),r[n>>2]=r[e>>2],l=0|r[A>>2],a=0|r[i>>2],t=0|r[p+4>>2],d=0|r[p+8>>2],u=(0|r[p>>2])+(0|r[s>>2])|0,r[(h=n+4|0)>>2]=u,l=t+l|0,r[(t=n+8|0)>>2]=l,a=d+a|0,r[(d=n+12|0)>>2]=a,c=l-u|0,(0|u)<0&&(a=a-u|0,r[t>>2]=c,r[d>>2]=a,r[h>>2]=0,l=c,u=0),(0|l)<0&&(u=u-l|0,r[h>>2]=u,a=a-l|0,r[d>>2]=a,r[t>>2]=0,l=0),f=u-a|0,c=l-a|0,(0|a)<0?(r[h>>2]=f,r[t>>2]=c,r[d>>2]=0,u=f,a=0):c=l,(0|(l=(0|a)<(0|(l=(0|c)<(0|u)?c:u))?a:l))>0&&(r[h>>2]=u-l,r[t>>2]=c-l,r[d>>2]=a-l),r[n+16>>2]=r[e>>2],l=0|r[A>>2],a=0|r[i>>2],t=0|r[p+16>>2],d=0|r[p+20>>2],u=(0|r[p+12>>2])+(0|r[s>>2])|0,r[(h=n+20|0)>>2]=u,l=t+l|0,r[(t=n+24|0)>>2]=l,a=d+a|0,r[(d=n+28|0)>>2]=a,c=l-u|0,(0|u)<0&&(a=a-u|0,r[t>>2]=c,r[d>>2]=a,r[h>>2]=0,l=c,u=0),(0|l)<0&&(u=u-l|0,r[h>>2]=u,a=a-l|0,r[d>>2]=a,r[t>>2]=0,l=0),f=u-a|0,c=l-a|0,(0|a)<0?(r[h>>2]=f,r[t>>2]=c,r[d>>2]=0,u=f,a=0):c=l,(0|(l=(0|a)<(0|(l=(0|c)<(0|u)?c:u))?a:l))>0&&(r[h>>2]=u-l,r[t>>2]=c-l,r[d>>2]=a-l),r[n+32>>2]=r[e>>2],l=0|r[A>>2],a=0|r[i>>2],t=0|r[p+28>>2],d=0|r[p+32>>2],u=(0|r[p+24>>2])+(0|r[s>>2])|0,r[(h=n+36|0)>>2]=u,l=t+l|0,r[(t=n+40|0)>>2]=l,a=d+a|0,r[(d=n+44|0)>>2]=a,c=l-u|0,(0|u)<0&&(a=a-u|0,r[t>>2]=c,r[d>>2]=a,r[h>>2]=0,l=c,u=0),(0|l)<0&&(u=u-l|0,r[h>>2]=u,a=a-l|0,r[d>>2]=a,r[t>>2]=0,l=0),f=u-a|0,c=l-a|0,(0|a)<0?(r[h>>2]=f,r[t>>2]=c,r[d>>2]=0,u=f,a=0):c=l,(0|(l=(0|a)<(0|(l=(0|c)<(0|u)?c:u))?a:l))>0&&(r[h>>2]=u-l,r[t>>2]=c-l,r[d>>2]=a-l),r[n+48>>2]=r[e>>2],l=0|r[A>>2],a=0|r[i>>2],t=0|r[p+40>>2],d=0|r[p+44>>2],u=(0|r[p+36>>2])+(0|r[s>>2])|0,r[(h=n+52|0)>>2]=u,l=t+l|0,r[(t=n+56|0)>>2]=l,a=d+a|0,r[(d=n+60|0)>>2]=a,c=l-u|0,(0|u)<0&&(a=a-u|0,r[t>>2]=c,r[d>>2]=a,r[h>>2]=0,l=c,u=0),(0|l)<0&&(u=u-l|0,r[h>>2]=u,a=a-l|0,r[d>>2]=a,r[t>>2]=0,l=0),f=u-a|0,c=l-a|0,(0|a)<0?(r[h>>2]=f,r[t>>2]=c,r[d>>2]=0,u=f,a=0):c=l,(0|(l=(0|a)<(0|(l=(0|c)<(0|u)?c:u))?a:l))>0&&(r[h>>2]=u-l,r[t>>2]=c-l,r[d>>2]=a-l),r[n+64>>2]=r[e>>2],c=0|r[A>>2],a=0|r[i>>2],d=0|r[p+52>>2],h=0|r[p+56>>2],u=(0|r[p+48>>2])+(0|r[s>>2])|0,r[(t=n+68|0)>>2]=u,c=d+c|0,r[(d=n+72|0)>>2]=c,a=h+a|0,r[(h=n+76|0)>>2]=a,l=c-u|0,(0|u)<0?(a=a-u|0,r[d>>2]=l,r[h>>2]=a,r[t>>2]=0,c=0):(l=c,c=u),(0|l)<0&&(c=c-l|0,r[t>>2]=c,a=a-l|0,r[h>>2]=a,r[d>>2]=0,l=0),f=c-a|0,u=l-a|0,(0|a)<0?(r[t>>2]=f,r[d>>2]=u,r[h>>2]=0,c=f,a=0):u=l,(0|(l=(0|a)<(0|(l=(0|u)<(0|c)?u:c))?a:l))<=0||(r[t>>2]=c-l,r[d>>2]=u-l,r[h>>2]=a-l),L=o}function pe(e,t,n,A){e|=0,n|=0,A|=0;var i,s,o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0;if(h=0|r[16928+((t|=0)<<2)>>2],h=(o=!!(0|A))?3*h|0:h,u=0|r[(s=e+4|0)>>2],l=0|r[(i=e+8|0)>>2],o){if((0|(a=l+u+(A=0|r[(c=e+12|0)>>2])|0))==(0|h))return 0|(h=1);f=c}else A=a=0|r[(f=e+12|0)>>2],a=l+u+a|0;if((0|a)<=(0|h))return 0|(h=0);do{if((0|A)>0){if(a=0|r[e>>2],(0|l)>0){a=18608+(80*a|0)+60|0,c=u;break}a=18608+(80*a|0)+40|0,n?(n=((d=(0|(n=l+(c=u-h|0)|0))<0)?0:n)-((u=(0|(l=A+l-(d?n:0)|0))<0)?l:0)-((c=(0|(A=A+c-(d?n:0)-(u?l:0)|0))<0)?A:0)|0,l=(l=(u?0:l)-(c?A:0)|0)-((u=(0|(c=(0|(A=c?0:A))<(0|(c=(0|l)<(0|n)?l:n))?A:c))>0)?c:0)|0,A=A-(u?c:0)|0,c=n-(u?c:0)+h|0,r[s>>2]=c,r[i>>2]=l,r[f>>2]=A):c=u}else a=18608+(80*(0|r[e>>2])|0)+20|0,c=u}while(0);if(r[e>>2]=r[a>>2],(0|(u=0|r[a+16>>2]))>0){n=0;do{(0|(e=(0|(A=(l=(0|(c=A+l-(b=(p=(0|(d=A+c|0))<0)?d:0)-(e=(g=(0|(m=l+c-b|0))<0)?m:0)|0))<0)?0:c))<(0|(e=(0|(l=(g?0:m)-(c=l?c:0)|0))<(0|(c=(p?0:d)-e-c|0))?l:c))?A:e))>0&&(c=c-e|0,l=l-e|0,A=A-e|0),n=n+1|0}while((0|n)<(0|u));r[s>>2]=c,r[i>>2]=l,r[f>>2]=A}return m=0|r[16848+(t<<2)>>2],g=0|y(m=o?3*m|0:m,0|r[a+8>>2]),b=0|y(m,0|r[a+12>>2]),c=(0|y(m,0|r[a+4>>2]))+c|0,r[s>>2]=c,l=g+l|0,r[i>>2]=l,A=b+A|0,r[f>>2]=A,a=l-c|0,(0|c)<0?(A=A-c|0,r[i>>2]=a,r[f>>2]=A,r[s>>2]=0,l=0):(a=l,l=c),(0|a)<0?(e=l-a|0,r[s>>2]=e,A=A-a|0,r[f>>2]=A,r[i>>2]=0,c=0):(e=l,c=a),l=e-A|0,a=c-A|0,(0|A)<0?(r[s>>2]=l,r[i>>2]=a,r[f>>2]=0,A=0):(a=c,l=e),(0|(c=(0|A)<(0|(c=(0|a)<(0|l)?a:l))?A:c))>0&&(l=l-c|0,a=a-c|0,A=A-c|0,r[s>>2]=l,r[i>>2]=a,r[f>>2]=A),o?0|(b=(a+l+A|0)==(0|h)?1:2):0|(b=2)}function me(e,t){e|=0,t|=0;var n=0;do{n=0|pe(e,t,0,1)}while(2==(0|n));return 0|n}function ge(e,t,n,A,s){e|=0,t|=0,n|=0,A|=0,s|=0;var o,a,l,c,u,f,h,d,m,b,y,B,v,C,_,M,w,E,x,S,I,R,D,P,F,N,O,U,k=0,G=0,V=0,H=0,Q=0,j=0,z=0;if(U=L,L=L+272|0,G=U+240|0,F=U,N=U+224|0,O=U+208|0,x=U+184|0,S=U+168|0,I=U+152|0,R=U+136|0,D=U+120|0,P=U+96|0,r[(k=U+256|0)>>2]=t,r[G>>2]=r[e>>2],r[G+4>>2]=r[e+4>>2],r[G+8>>2]=r[e+8>>2],r[G+12>>2]=r[e+12>>2],be(G,k,F),r[s>>2]=0,(0|(E=A+n+(6==(0|A)&1)|0))<=(0|n))L=U;else{y=n+6|0,B=O+8|0,v=x+8|0,C=16928+((b=0|r[k>>2])<<2)|0,_=S+8|0,M=I+8|0,w=R+8|0,d=0|r[G>>2],u=N+4|0,f=N+8|0,h=N+12|0,m=O+8|0,o=x+8|0,l=x+16|0,a=P+8|0,c=P+16|0,G=0,V=n,A=-1;e:for(;;){if(e=F+((k=(0|V)%6|0)<<4)|0,r[N>>2]=r[e>>2],r[N+4>>2]=r[e+4>>2],r[N+8>>2]=r[e+8>>2],r[N+12>>2]=r[e+12>>2],e=G,G=0|pe(N,b,0,1),(0|V)>(0|n)&!!(0|Pe(t))&&1!=(0|e)&(0|(H=0|r[N>>2]))!=(0|A)){switch(e=0|r[F+((z=(k+5|0)%6|0)<<4)+12>>2],Q=+((0|r[F+(z<<4)+8>>2])-e|0),i[O>>3]=+((0|r[F+(z<<4)+4>>2])-e|0)-.5*Q,i[B>>3]=.8660254037844386*Q,e=0|r[F+(k<<4)+12>>2],Q=+((0|r[F+(k<<4)+8>>2])-e|0),i[x>>3]=+((0|r[F+(k<<4)+4>>2])-e|0)-.5*Q,i[v>>3]=.8660254037844386*Q,Q=+(0|r[C>>2]),i[S>>3]=3*Q,i[_>>3]=0,j=-1.5*Q,i[I>>3]=j,i[M>>3]=2.598076211353316*Q,i[R>>3]=j,i[w>>3]=-2.598076211353316*Q,0|r[17008+(80*d|0)+(((0|A)==(0|d)?H:A)<<2)>>2]){case 1:e=I,A=S;break;case 3:e=R,A=I;break;case 2:e=S,A=R;break;default:e=8;break e}ft(O,x,A,e,D),0|ht(O,D)||0|ht(x,D)||(fe(D,d,b,1,P),z=0|r[s>>2],Q=+p(+ +i[c>>3]),j=+g(+ +i[a>>3],+ +i[P>>3]),i[s+8+(z<<4)>>3]=Q,i[s+8+(z<<4)+8>>3]=j,r[s>>2]=1+(0|r[s>>2]))}if((0|V)<(0|y)&&(z=0|r[h>>2],Q=+((0|r[f>>2])-z|0),i[O>>3]=+((0|r[u>>2])-z|0)-.5*Q,i[m>>3]=.8660254037844386*Q,fe(O,0|r[N>>2],b,1,x),z=0|r[s>>2],Q=+p(+ +i[l>>3]),j=+g(+ +i[o>>3],+ +i[x>>3]),i[s+8+(z<<4)>>3]=Q,i[s+8+(z<<4)+8>>3]=j,r[s>>2]=1+(0|r[s>>2])),(0|(V=V+1|0))>=(0|E)){e=3;break}A=0|r[N>>2]}3!=(0|e)?8==(0|e)&&T(27157,27120,766,27202):L=U}}function be(e,t,n){e|=0,t|=0,n|=0;var A,i,s,o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0;o=L,L=L+160|0,l=o,u=20336,f=(c=a=o+80|0)+72|0;do{r[c>>2]=r[u>>2],c=c+4|0,u=u+4|0}while((0|c)<(0|f));u=20416,f=(c=l)+72|0;do{r[c>>2]=r[u>>2],c=c+4|0,u=u+4|0}while((0|c)<(0|f));m=(m=!(0|Pe(0|r[t>>2])))?a:l,c=0|r[(s=e+4|0)>>2],a=0|r[(A=e+8|0)>>2],l=0|r[(i=e+12|0)>>2],u=a+(c<<1)|0,r[s>>2]=u,a=l+(a<<1)|0,r[A>>2]=a,c=(l<<1)+c|0,r[i>>2]=c,l=a-u|0,f=c-u|0,(0|u)<0&&(r[A>>2]=l,r[i>>2]=f,r[s>>2]=0,a=l,u=0,c=f),f=u-a|0,l=c-a|0,(0|a)<0?(r[s>>2]=f,r[i>>2]=l,r[A>>2]=0,a=0):(l=c,f=u),u=f-l|0,c=a-l|0,(0|l)<0?(r[s>>2]=u,r[A>>2]=c,r[i>>2]=0,l=0):(c=a,u=f),(0|(a=(0|l)<(0|(a=(0|c)<(0|u)?c:u))?l:a))>0&&(l=l-a|0,c=c-a|0,u=u-a|0,r[s>>2]=u,r[A>>2]=c,r[i>>2]=l),h=(c<<1)+u|0,f=l+(u<<1)|0,r[s>>2]=f,r[A>>2]=h,c=(l<<1)+c|0,r[i>>2]=c,a=h-f|0,l=c-f|0,(0|f)<0?(r[A>>2]=a,r[i>>2]=l,r[s>>2]=0,f=0,c=l):a=h,u=f-a|0,l=c-a|0,(0|a)<0?(r[s>>2]=u,r[i>>2]=l,r[A>>2]=0,f=u,a=0):l=c,u=f-l|0,c=a-l|0,(0|l)<0?(r[s>>2]=u,r[A>>2]=c,r[i>>2]=0,l=0):(c=a,u=f),(0|(a=(0|l)<(0|(a=(0|c)<(0|u)?c:u))?l:a))>0&&(r[s>>2]=u-a,r[A>>2]=c-a,r[i>>2]=l-a),0|Pe(0|r[t>>2])&&(c=0|r[s>>2],a=(3*(u=0|r[A>>2])|0)+c|0,c=(l=0|r[i>>2])+(3*c|0)|0,r[s>>2]=c,r[A>>2]=a,u=(3*l|0)+u|0,r[i>>2]=u,l=a-c|0,f=u-c|0,(0|c)<0?(r[A>>2]=l,r[i>>2]=f,r[s>>2]=0,a=l,h=0):(h=c,f=u),c=h-a|0,l=f-a|0,(0|a)<0?(r[s>>2]=c,r[i>>2]=l,r[A>>2]=0,h=c,u=0):(u=a,l=f),c=h-l|0,a=u-l|0,(0|l)<0?(r[s>>2]=c,r[A>>2]=a,r[i>>2]=0,u=a,l=0):c=h,(0|(a=(0|l)<(0|(a=(0|u)<(0|c)?u:c))?l:a))>0&&(r[s>>2]=c-a,r[A>>2]=u-a,r[i>>2]=l-a),r[t>>2]=1+(0|r[t>>2])),h=0;do{r[n+(h<<4)>>2]=r[e>>2],l=0|r[A>>2],a=0|r[i>>2],d=0|r[m+(12*h|0)+4>>2],p=0|r[m+(12*h|0)+8>>2],u=(0|r[m+(12*h|0)>>2])+(0|r[s>>2])|0,r[(t=n+(h<<4)+4|0)>>2]=u,l=d+l|0,r[(d=n+(h<<4)+8|0)>>2]=l,a=p+a|0,r[(p=n+(h<<4)+12|0)>>2]=a,c=l-u|0,(0|u)<0&&(a=a-u|0,r[d>>2]=c,r[p>>2]=a,r[t>>2]=0,l=c,u=0),(0|l)<0&&(u=u-l|0,r[t>>2]=u,a=a-l|0,r[p>>2]=a,r[d>>2]=0,l=0),f=u-a|0,c=l-a|0,(0|a)<0?(r[t>>2]=f,r[d>>2]=c,r[p>>2]=0,u=f,a=0):c=l,(0|(l=(0|a)<(0|(l=(0|c)<(0|u)?c:u))?a:l))>0&&(r[t>>2]=u-l,r[d>>2]=c-l,r[p>>2]=a-l),h=h+1|0}while(6!=(0|h));L=o}function ye(e,t){return t=0|Gt(0|(e|=0),0|(t|=0),52),w(),15&t}function Be(e,t){return t=0|Gt(0|(e|=0),0|(t|=0),45),w(),127&t}function ve(e,t){e|=0;var n=0,r=0,i=0,s=0;return!0&134217728==(-16777216&(t|=0))?(r=0|Gt(0|e,0|t,52),w(),r&=15,n=0|Gt(0|e,0|t,45),w(),(n&=127)>>>0>121?0|(e=0):!(613566756&(s=0|Vt(0|(i=0|Gt(0|e,0|t,0|(s=3*(15^r)|0))),0|w(),0|s))&(0|Lt(-1227133514,-1171,0|s,0|(i=0|w()))))&!(4681&i&w())&&15==(0|r)|!(0|(s=0|Gt(0|(0|Vt(0|~e,0|~t,0|(s=19+(3*r|0)|0))),0|w(),0|s)))&!(0|w())?0|A[20496+n|0]?!(0|e)&!(0|(t&=8191))?0|(s=1):(s=0|Ht(0|e,0|t),w(),0|!!((63-s|0)%3|0)):0|(s=1):0|(s=0)):0|(e=0)}function Ce(e,t,n,A){e|=0,n|=0,A|=0;var i=0,s=0,o=0,a=0;if(i=0|Vt(0|(t|=0),0,52),s=0|w(),n=0|Vt(0|n,0,45),n=0|s|w()|134225919,(0|t)<1)return s=-1,A=n,r[(t=e)>>2]=s,void(r[(e=e+4|0)>>2]=A);for(s=1,i=-1;a=0|Vt(7,0,0|(o=3*(15-s|0)|0)),n&=~w(),i=i&~a|(o=0|Vt(0|A,0,0|o)),n=0|n|w(),(0|s)!=(0|t);)s=s+1|0;r[(o=a=e)>>2]=i,r[(a=a+4|0)>>2]=n}function _e(e,t,n,A){n|=0,A|=0;var i=0,s=0;if(s=0|Gt(0|(e|=0),0|(t|=0),52),w(),n>>>0>15)return 0|(A=4);if((0|(s&=15))<(0|n))return 0|(A=12);if((0|s)==(0|n))return r[A>>2]=e,r[A+4>>2]=t,0|(A=0);if(i=0|Vt(0|n,0,52),i|=e,e=w()|-15728641&t,(0|s)>(0|n))do{t=0|Vt(7,0,3*(14-n|0)|0),n=n+1|0,i|=t,e=0|w()|e}while((0|n)<(0|s));return r[A>>2]=i,r[A+4>>2]=e,0|(A=0)}function Me(e,t,n,A){n|=0,A|=0;var i=0,s=0,o=0;if(s=0|Gt(0|(e|=0),0|(t|=0),52),w(),!((0|n)<16&(0|(s&=15))<=(0|n)))return 0|(A=4);i=n-s|0,n=0|Gt(0|e,0|t,45),w();e:do{if(0|Q(127&n)){t:do{if(0|s){for(n=1;!((o=0|Vt(7,0,3*(15-n|0)|0))&e|0)&!((0|w())&t);){if(!(n>>>0<s>>>0))break t;n=n+1|0}n=0|$e(7,0,i,((0|i)<0)<<31>>31),i=0|w();break e}}while(0);n=0|Rt(0|(n=0|Nt(0|(n=0|$e(7,0,i,((0|i)<0)<<31>>31)),0|w(),5,0)),0|w(),-5,-1),n=0|Rt(0|(n=0|Ft(0|n,0|w(),6,0)),0|w(),1,0),i=0|w()}else n=0|$e(7,0,i,((0|i)<0)<<31>>31),i=0|w()}while(0);return r[(o=A)>>2]=n,r[o+4>>2]=i,0|(o=0)}function we(e,t){var n=0,A=0,r=0;if(r=0|Gt(0|(e|=0),0|(t|=0),45),w(),!(0|Q(127&r)))return 0|(r=0);r=0|Gt(0|e,0|t,52),w(),r&=15;e:do{if(r)for(A=1;;){if(n=0|Gt(0|e,0|t,3*(15-A|0)|0),w(),0|(n&=7))break e;if(!(A>>>0<r>>>0)){n=0;break}A=A+1|0}else n=0}while(0);return 0|(r=1&!(0|n))}function Te(e,t,n,A){return e|=0,t|=0,(0|(A|=0))<(0|(n|=0))?(A=e,M(0|(n=t)),0|A):(n=0|Vt(-1,-1,3+(3*(A-n|0)|0)|0),A=0|Vt(0|~n,0|~w(),3*(15-A|0)|0),n=~w()&t,A=~A&e,M(0|n),0|A)}function Ee(e,t,n,A){n|=0,A|=0;var i=0;return i=0|Gt(0|(e|=0),0|(t|=0),52),w(),(0|n)<16&(0|(i&=15))<=(0|n)?((0|i)<(0|n)&&(i=0|Vt(-1,-1,3+(3*(n+-1-i|0)|0)|0),i=0|Vt(0|~i,0|~w(),3*(15-n|0)|0),t=~w()&t,e&=~i),i=0|Vt(0|n,0,52),n=-15728641&t|w(),r[A>>2]=e|i,r[A+4>>2]=n,0|(A=0)):0|(A=4)}function xe(e,t){var n=0,A=0,r=0;if(r=0|Gt(0|(e|=0),0|(t|=0),52),w(),!(r&=15))return 0|(r=0);for(A=1;;){if(n=0|Gt(0|e,0|t,3*(15-A|0)|0),w(),0|(n&=7)){A=5;break}if(!(A>>>0<r>>>0)){n=0,A=5;break}A=A+1|0}return 5==(0|A)?0|n:0}function Se(e,t){var n=0,A=0,r=0,i=0,s=0,o=0,a=0,l=0,c=0;if(c=0|Gt(0|(e|=0),0|(t|=0),52),w(),!(c&=15))return c=e,M(0|(l=t)),0|c;for(l=1,n=0;;){switch(i=e&~(o=0|Vt(7,0,0|(A=3*(15-l|0)|0))),s=t&~(a=0|w()),e=0|Gt(0|e,0|t,0|A),w(),7&e){case 1:e=5;break;case 5:e=4;break;case 4:e=6;break;case 6:e=2;break;case 2:e=3;break;case 3:e=1;break;default:e&=7}e=(A=0|Vt(0|e,0,0|A))|i,t=(r=0|w())|s;e:do{if(!n)if(!(A&o|0)&!(r&a|0))n=0;else if(s=0|Gt(0|e,0|t,52),w(),s&=15){n=1;t:for(;;){switch(a=0|Gt(0|e,0|t,3*(15-n|0)|0),w(),7&a){case 1:break t;case 0:break;default:n=1;break e}if(!(n>>>0<s>>>0)){n=1;break e}n=n+1|0}for(i=1;;){switch(n=0|Gt(0|e,0|t,0|(r=3*(15-i|0)|0)),w(),A=e&~(A=0|Vt(7,0,0|r)),t&=~w(),7&n){case 1:e=5;break;case 5:e=4;break;case 4:e=6;break;case 6:e=2;break;case 2:e=3;break;case 3:e=1;break;default:e=7&n}if(e=0|Vt(0|e,0,0|r),e|=A,t=0|w()|t,!(i>>>0<s>>>0)){n=1;break e}i=i+1|0}}else n=1}while(0);if(!(l>>>0<c>>>0))break;l=l+1|0}return M(0|t),0|e}function Ie(e,t){var n=0,A=0,r=0,i=0,s=0;if(s=0|Gt(0|(e|=0),0|(t|=0),52),w(),!(s&=15))return s=e,M(0|(i=t)),0|s;for(i=1;;){switch(n=0|Gt(0|e,0|t,0|(r=3*(15-i|0)|0)),w(),A=e&~(A=0|Vt(7,0,0|r)),t&=~w(),7&n){case 1:e=5;break;case 5:e=4;break;case 4:e=6;break;case 6:e=2;break;case 2:e=3;break;case 3:e=1;break;default:e=7&n}if(e=0|Vt(0|e,0,0|r),e|=A,t=0|w()|t,!(i>>>0<s>>>0))break;i=i+1|0}return M(0|t),0|e}function Re(e,t){var n=0,A=0,r=0,i=0,s=0,o=0,a=0,l=0,c=0;if(c=0|Gt(0|(e|=0),0|(t|=0),52),w(),!(c&=15))return c=e,M(0|(l=t)),0|c;for(l=1,n=0;;){switch(i=e&~(o=0|Vt(7,0,0|(A=3*(15-l|0)|0))),s=t&~(a=0|w()),e=0|Gt(0|e,0|t,0|A),w(),7&e){case 1:e=3;break;case 3:e=2;break;case 2:e=6;break;case 6:e=4;break;case 4:e=5;break;case 5:e=1;break;default:e&=7}e=(A=0|Vt(0|e,0,0|A))|i,t=(r=0|w())|s;e:do{if(!n)if(!(A&o|0)&!(r&a|0))n=0;else if(s=0|Gt(0|e,0|t,52),w(),s&=15){n=1;t:for(;;){switch(a=0|Gt(0|e,0|t,3*(15-n|0)|0),w(),7&a){case 1:break t;case 0:break;default:n=1;break e}if(!(n>>>0<s>>>0)){n=1;break e}n=n+1|0}for(i=1;;){switch(A=e&~(A=0|Vt(7,0,0|(n=3*(15-i|0)|0))),r=t&~w(),e=0|Gt(0|e,0|t,0|n),w(),7&e){case 1:e=3;break;case 3:e=2;break;case 2:e=6;break;case 6:e=4;break;case 4:e=5;break;case 5:e=1;break;default:e&=7}if(e=0|Vt(0|e,0,0|n),e|=A,t=0|w()|r,!(i>>>0<s>>>0)){n=1;break e}i=i+1|0}}else n=1}while(0);if(!(l>>>0<c>>>0))break;l=l+1|0}return M(0|t),0|e}function Le(e,t){var n=0,A=0,r=0,i=0,s=0;if(s=0|Gt(0|(e|=0),0|(t|=0),52),w(),!(s&=15))return s=e,M(0|(i=t)),0|s;for(i=1;;){switch(n=e&~(n=0|Vt(7,0,0|(A=3*(15-i|0)|0))),r=t&~w(),e=0|Gt(0|e,0|t,0|A),w(),7&e){case 1:e=3;break;case 3:e=2;break;case 2:e=6;break;case 6:e=4;break;case 4:e=5;break;case 5:e=1;break;default:e&=7}if(e=0|Vt(0|e,0,0|A),e|=n,t=0|w()|r,!(i>>>0<s>>>0))break;i=i+1|0}return M(0|t),0|e}function De(e,t){e|=0;var n,A=0,i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,T=0;if(n=L,L=L+16|0,v=n,Vt(0|(t|=0),0,52),A=134225919|w(),!t)return(0|r[e+4>>2])>2||(0|r[e+8>>2])>2||(0|r[e+12>>2])>2?(v=0,M(0|(B=0)),L=n,0|v):(Vt(0|z(e),0,45),B=0|w()|A,v=-1,M(0|B),L=n,0|v);r[v>>2]=r[e>>2],r[v+4>>2]=r[e+4>>2],r[v+8>>2]=r[e+8>>2],r[v+12>>2]=r[e+12>>2],B=v+4|0;e:do{if((0|t)>0)for(b=v+12|0,m=t,h=0|r[(g=v+8|0)>>2],d=0|r[b>>2],t=-1,f=0|r[v+4>>2];;){p=m,m=m+-1|0,e=f-d|0,i=h-d|0,1&p?(o=0|wt(.14285714285714285*+((3*e|0)-i|0)),r[B>>2]=o,e=0|wt(.14285714285714285*+((i<<1)+e|0)),r[g>>2]=e,r[b>>2]=0,i=e-o|0,s=0-o|0,(0|o)<0?(r[g>>2]=i,r[b>>2]=s,r[B>>2]=0,e=i,a=0):(a=o,s=0),o=a-e|0,i=s-e|0,(0|e)<0?(r[B>>2]=o,r[b>>2]=i,r[g>>2]=0,a=o,o=0):(i=s,o=e),e=a-i|0,s=o-i|0,(0|i)<0?(r[B>>2]=e,r[g>>2]=s,r[b>>2]=0,o=0):(s=o,e=a,o=i),(0|(i=(0|o)<(0|(i=(0|s)<(0|e)?s:e))?o:i))>0&&(o=o-i|0,s=s-i|0,e=e-i|0,r[B>>2]=e,r[g>>2]=s,r[b>>2]=o),c=(u=(0|(l=(0|(T=(l=(0|(i=(3*o|0)+e-((C=(0|(_=s+(3*e|0)|0))<0)?_:0)-((c=(0|(u=o+(3*s|0)-(C?_:0)|0))<0)?u:0)|0))<0)?0:i))<(0|(l=(0|(a=(c?0:u)-(l?i:0)|0))<(0|(i=(C?0:_)-(c?u:0)-(l?i:0)|0))?a:i))?T:l))>0)?l:0,a=a-(u?l:0)|0,l=T-(u?l:0)|0,u=o):(l=0|wt(.14285714285714285*+((e<<1)+i|0)),r[B>>2]=l,s=0|wt(.14285714285714285*+((3*i|0)-e|0)),r[g>>2]=s,r[b>>2]=0,i=s-l|0,e=0-l|0,(0|l)<0?(r[g>>2]=i,r[b>>2]=e,r[B>>2]=0,s=i,l=0):e=0,a=l-s|0,i=e-s|0,(0|s)<0?(r[B>>2]=a,r[b>>2]=i,r[g>>2]=0,o=i,s=0):(o=e,a=l),e=a-o|0,i=s-o|0,(0|o)<0?(r[B>>2]=e,r[g>>2]=i,r[b>>2]=0,s=i,o=0):e=a,(0|(i=(0|o)<(0|(i=(0|s)<(0|e)?s:e))?o:i))>0&&(o=o-i|0,s=s-i|0,e=e-i|0,r[B>>2]=e,r[g>>2]=s,r[b>>2]=o),c=(u=(0|(l=(0|(C=(l=(0|(i=(3*o|0)+s-((T=(0|(_=o+(3*e|0)|0))<0)?_:0)-((c=(0|(u=(3*s|0)+e-(T?_:0)|0))<0)?u:0)|0))<0)?0:i))<(0|(l=(0|(a=(c?0:u)-(l?i:0)|0))<(0|(i=(T?0:_)-(c?u:0)-(l?i:0)|0))?a:i))?C:l))>0)?l:0,a=a-(u?l:0)|0,l=C-(u?l:0)|0,u=o),l=(f=(0|(d=d-l+((o=(0|(i=f+(c-i)|0))<0)?0-i|0:0)+((a=(0|(c=h-a-(o?i:0)|0))<0)?0-c|0:0)|0))<0)?0:d,T=(a?0:c)-(f?d:0)|0,d=(d=(o?0:i)-(a?c:0)-(f?d:0)|0)-((c=(0|(f=(0|l)<(0|(f=(0|T)<(0|d)?T:d))?l:f))>0)?f:0)|0,i=t&~(i=0|Vt(7,0,0|(a=3*(15-p|0)|0))),o=A&~w(),t=(t=(A=(0|(_=l-(c?f:0)-(_=(h=(0|d)<0)?d:0)+((C=(0|(T=T-(c?f:0)-_|0))<0)?0-T|0:0)|0))<0)?0:_)-(T=(0|(T=(0|t)<(0|(T=(0|(A=(C?0:T)-(_=A?_:0)|0))<(0|(_=(h?0:d)-(C?T:0)-_|0))?A:_))?t:T))>0?T:0)|0,A=A-T|0;t:do{switch(_-T|0){case 0:switch(0|A){case 0:t=0|t?1==(0|t)?1:7:0;break t;case 1:t=0|t?1==(0|t)?3:7:2;break t;default:y=36;break t}case 1:switch(0|A){case 0:t=0|t?1==(0|t)?5:7:4;break t;case 1:if(t){y=36;break t}t=6;break t;default:y=36;break t}default:y=36}}while(0);if(36==(0|y)&&(y=0,t=7),t=0|Vt(0|t,0,0|a),t|=i,A=0|w()|o,(0|p)<=1)break e;h=s,d=u,f=e}else t=-1,e=0|r[B>>2]}while(0);e:do{if((0|e)<=2&&(0|r[v+8>>2])<=2&&(0|r[v+12>>2])<=2){if(t|=e=0|Vt(0|(i=0|z(v)),0,45),e=w()|-1040385&A,c=0|J(v),!(0|Q(i))){if((0|c)<=0)break;for(l=0;;){a=0|Gt(0|t,0|e,52),w(),a&=15;t:do{if(a)for(o=1;;){switch(A=0|Gt(0|t,0|e,0|(s=3*(15-o|0)|0)),w(),t&=~(i=0|Vt(7,0,0|s)),i=e&~w(),7&A){case 1:e=5;break;case 5:e=4;break;case 4:e=6;break;case 6:e=2;break;case 2:e=3;break;case 3:e=1;break;default:e=7&A}if(t|=e=0|Vt(0|e,0,0|s),e=0|w()|i,!(o>>>0<a>>>0))break t;o=o+1|0}}while(0);if((0|(l=l+1|0))==(0|c))break e}}a=0|Gt(0|t,0|e,52),w(),a&=15;t:do{if(a){A=1;n:for(;;){switch(T=0|Gt(0|t,0|e,3*(15-A|0)|0),w(),7&T){case 1:break n;case 0:break;default:break t}if(!(A>>>0<a>>>0))break t;A=A+1|0}if(0|K(i,0|r[v>>2]))for(o=1;;){switch(i=t&~(i=0|Vt(7,0,0|(A=3*(15-o|0)|0))),s=e&~w(),e=0|Gt(0|t,0|e,0|A),w(),7&e){case 1:e=3;break;case 3:e=2;break;case 2:e=6;break;case 6:e=4;break;case 4:e=5;break;case 5:e=1;break;default:e&=7}if(t=0|Vt(0|e,0,0|A),t|=i,e=0|w()|s,!(o>>>0<a>>>0))break t;o=o+1|0}else for(o=1;;){switch(A=0|Gt(0|t,0|e,0|(s=3*(15-o|0)|0)),w(),t&=~(i=0|Vt(7,0,0|s)),i=e&~w(),7&A){case 1:e=5;break;case 5:e=4;break;case 4:e=6;break;case 6:e=2;break;case 2:e=3;break;case 3:e=1;break;default:e=7&A}if(t|=e=0|Vt(0|e,0,0|s),e=0|w()|i,!(o>>>0<a>>>0))break t;o=o+1|0}}}while(0);if((0|c)>0){A=0;do{t=0|Se(t,e),e=0|w(),A=A+1|0}while((0|A)!=(0|c))}}else t=0,e=0}while(0);return T=t,M(0|(_=e)),L=n,0|T}function Pe(e){return(0|(e|=0))%2|0}function Fe(e,t,n){n|=0;var A,o,a,l,c=0,h=0,d=0,p=0,m=0;if(a=L,L=L+64|0,o=a+24|0,p=a+48|0,m=a,(t|=0)>>>0>15)return L=a,0|(m=4);if(A=+i[(e|=0)>>3],i[s>>3]=A,!(2146435072&~r[s+4>>2]))return L=a,0|(m=3);if(c=+i[e+8>>3],i[s>>3]=c,!(2146435072&~r[s+4>>2]))return L=a,0|(m=3);l=(h=+u(+A))*+u(+c),h*=+f(+c),c=+f(+A),i[m>>3]=l,i[m+8>>3]=h,i[m+16>>3]=c,i[s>>3]=l;do{if(2146435072&~r[s+4>>2]&&(i[s>>3]=c,e=0|r[s+4>>2],i[s>>3]=h,!(!(2146435072&~r[s+4>>2])|!0&!(2146435072&~e)))){if(r[o>>2]=r[m>>2],r[o+4>>2]=r[m+4>>2],r[o+8>>2]=r[m+8>>2],r[o+12>>2]=r[m+12>>2],r[o+16>>2]=r[m+16>>2],r[o+20>>2]=r[m+20>>2],ce(o,t,p),p=0|De(p,t),m=0|w(),r[n>>2]=p,r[n+4>>2]=m,!(!(0|p)&!(0|m))){d=0;break}T(27634,27225,1073,27248)}else d=2}while(0);return L=a,0|(m=d)}function Ne(e,t,n){var A,i,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0;if(i=(n|=0)+4|0,p=0|Gt(0|(e|=0),0|(t|=0),52),w(),p&=15,d=0|Gt(0|e,0|t,45),w(),s=!(0|p),0|Q(127&d)){if(s)return 0|(p=1);s=1}else{if(s)return 0|(p=0);s=0|r[i>>2]||0|r[n+8>>2]?1:1&!!(0|r[n+12>>2])}for(d=n+8|0,A=n+12|0,h=1,n=0|r[i>>2],l=0|r[d>>2],a=0|r[A>>2];o=3*n|0,c=3*l|0,f=3*a|0,1&h?(u=l+o|0,r[i>>2]=u,a=a+c|0,r[d>>2]=a,o=f+n|0,r[A>>2]=o,n=a-u|0,l=o-u|0,(0|u)<0?(r[d>>2]=n,r[A>>2]=l,r[i>>2]=0,c=0,o=l):(n=a,c=u),l=c-n|0,a=o-n|0,(0|n)<0?(r[i>>2]=l,r[A>>2]=a,r[d>>2]=0,c=l,o=0):(a=o,o=n),n=c-a|0,l=o-a|0,(0|a)<0?(r[i>>2]=n,r[d>>2]=l,r[A>>2]=0,a=0):(l=o,n=c),(0|(o=(0|a)<(0|(o=(0|l)<(0|n)?l:n))?a:o))>0&&(a=a-o|0,l=l-o|0,n=n-o|0,r[i>>2]=n,r[d>>2]=l,r[A>>2]=a)):(u=c+n|0,c=a+o|0,r[i>>2]=c,r[d>>2]=u,o=f+l|0,r[A>>2]=o,n=u-c|0,a=o-c|0,(0|c)<0?(r[d>>2]=n,r[A>>2]=a,r[i>>2]=0,c=0,o=a):n=u,l=c-n|0,a=o-n|0,(0|n)<0?(r[i>>2]=l,r[A>>2]=a,r[d>>2]=0,c=l,o=0):(a=o,o=n),n=c-a|0,l=o-a|0,(0|a)<0?(r[i>>2]=n,r[d>>2]=l,r[A>>2]=0,a=0):(l=o,n=c),(0|(o=(0|a)<(0|(o=(0|l)<(0|n)?l:n))?a:o))>0&&(a=a-o|0,l=l-o|0,n=n-o|0,r[i>>2]=n,r[d>>2]=l,r[A>>2]=a)),o=0|Gt(0|e,0|t,3*(15-h|0)|0),w(),((o&=7)+-1|0)>>>0<6&&(u=0|r[22032+(12*o|0)+4>>2],f=0|r[22032+(12*o|0)+8>>2],c=(0|r[22032+(12*o|0)>>2])+n|0,r[i>>2]=c,l=u+l|0,r[d>>2]=l,n=f+a|0,r[A>>2]=n,a=l-c|0,o=n-c|0,(0|c)<0&&(r[d>>2]=a,r[A>>2]=o,r[i>>2]=0,c=0,n=o,l=a),o=c-l|0,a=n-l|0,(0|l)<0?(r[i>>2]=o,r[A>>2]=a,r[d>>2]=0,c=o,l=0):a=n,n=c-a|0,o=l-a|0,(0|a)<0?(r[i>>2]=n,r[d>>2]=o,r[A>>2]=0,l=o,a=0):n=c,(0|(o=(0|a)<(0|(o=(0|l)<(0|n)?l:n))?a:o))>0&&(a=a-o|0,l=l-o|0,n=n-o|0,r[i>>2]=n,r[d>>2]=l,r[A>>2]=a)),h>>>0<p>>>0;)h=h+1|0;return 0|s}function Oe(e,t,n){n|=0;var A,i,s,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0;if(s=L,L=L+16|0,i=s,d=0|Gt(0|(e|=0),0|(t|=0),45),w(),(d&=127)>>>0>121)return r[n>>2]=0,r[n+4>>2]=0,r[n+8>>2]=0,r[n+12>>2]=0,L=s,0|(p=5);e:do{if(0|Q(d)&&(u=0|Gt(0|e,0|t,52),w(),0|(u&=15))){o=1;t:for(;;){switch(p=0|Gt(0|e,0|t,3*(15-o|0)|0),w(),7&p){case 5:break t;case 0:break;default:h=t;break e}if(!(o>>>0<u>>>0)){h=t;break e}o=o+1|0}for(c=1,o=t;;){switch(a=e&~(a=0|Vt(7,0,0|(t=3*(15-c|0)|0))),l=o&~w(),o=0|Gt(0|e,0|o,0|t),w(),7&o){case 1:o=3;break;case 3:o=2;break;case 2:o=6;break;case 6:o=4;break;case 4:o=5;break;case 5:o=1;break;default:o&=7}if(e=0|Vt(0|o,0,0|t),e|=a,o=0|w()|l,!(c>>>0<u>>>0)){h=o;break e}c=c+1|0}}else h=t}while(0);if(p=7696+(28*d|0)|0,r[n>>2]=r[p>>2],r[n+4>>2]=r[p+4>>2],r[n+8>>2]=r[p+8>>2],r[n+12>>2]=r[p+12>>2],!(0|Ne(e,h,n)))return L=s,0|(p=0);if(p=n+4|0,r[i>>2]=r[p>>2],r[i+4>>2]=r[p+4>>2],r[i+8>>2]=r[p+8>>2],f=0|Gt(0|e,0|h,52),w(),A=15&f,1&f?(l=0|r[p>>2],o=(3*(a=0|r[(u=n+8|0)>>2])|0)+l|0,l=(t=0|r[(f=n+12|0)>>2])+(3*l|0)|0,r[p>>2]=l,r[u>>2]=o,a=(3*t|0)+a|0,r[f>>2]=a,t=o-l|0,c=a-l|0,(0|l)<0&&(r[u>>2]=t,r[f>>2]=c,r[p>>2]=0,o=t,l=0,a=c),c=l-o|0,t=a-o|0,(0|o)<0?(r[p>>2]=c,r[f>>2]=t,r[u>>2]=0,o=0):(t=a,c=l),l=c-t|0,a=o-t|0,(0|t)<0?(r[p>>2]=l,r[u>>2]=a,r[f>>2]=0,t=0):(a=o,l=c),(0|(o=(0|t)<(0|(o=(0|a)<(0|l)?a:l))?t:o))>0&&(r[p>>2]=l-o,r[u>>2]=a-o,r[f>>2]=t-o),a=A+1|0):a=A,0|Q(d)){e:do{if(A)for(t=1;;){if(o=0|Gt(0|e,0|h,3*(15-t|0)|0),w(),0|(o&=7))break e;if(!(t>>>0<A>>>0)){o=0;break}t=t+1|0}else o=0}while(0);o=4==(0|o)&1}else o=0;if(0|pe(n,a,o,0)){if(0|Q(d))do{}while(0|pe(n,a,0,0));(0|a)!=(0|A)&&(e=0|r[(u=n+12|0)>>2],t=0|wt(.14285714285714285*+(((o=(0|r[p>>2])-e|0)<<1)+(e=(0|r[(c=n+8|0)>>2])-e|0)|0)),r[p>>2]=t,o=0|wt(.14285714285714285*+((3*e|0)-o|0)),r[c>>2]=o,r[u>>2]=0,e=o-t|0,a=0-t|0,(0|t)<0?(r[c>>2]=e,r[u>>2]=a,r[p>>2]=0,o=e,t=0):a=0,l=t-o|0,e=a-o|0,(0|o)<0?(r[p>>2]=l,r[u>>2]=e,r[c>>2]=0,t=l,o=0):e=a,l=t-e|0,a=o-e|0,(0|e)<0?(r[p>>2]=l,r[c>>2]=a,r[u>>2]=0,t=l,e=0):a=o,(0|(o=(0|e)<(0|(o=(0|a)<(0|t)?a:t))?e:o))>0&&(r[p>>2]=t-o,r[c>>2]=a-o,r[u>>2]=e-o))}else(0|a)!=(0|A)&&(r[p>>2]=r[i>>2],r[p+4>>2]=r[i+4>>2],r[p+8>>2]=r[i+8>>2]);return L=s,0|(p=0)}function Ue(e,t,n){n|=0;var A,r,s,o=0,a=0,l=0;return s=L,L=L+48|0,r=s,(o=0|Oe(e|=0,t|=0,A=s+24|0))?(L=s,0|o):(o=0|Gt(0|e,0|t,52),w(),ue(A,15&o,r),l=+p(+ +i[r+16>>3]),a=+g(+ +i[r+8>>3],+ +i[r>>3]),i[n>>3]=l,i[n+8>>3]=a,L=s,0|(o=0))}function ke(e,t,n){n|=0;var A,r=0,i=0,s=0;if(A=L,L=L+16|0,0|(r=0|Oe(e|=0,t|=0,s=A)))return L=A,0|(s=r);r=0|Gt(0|e,0|t,45),w(),r=!(0|Q(127&r)),i=0|Gt(0|e,0|t,52),w(),i&=15;e:do{if(!r){if(0|i)for(r=1;;){if(!(!((0|Vt(7,0,3*(15-r|0)|0))&e|0)&!((0|w())&t)))break e;if(!(r>>>0<i>>>0))break;r=r+1|0}return he(s,i,0,5,n),L=A,0|0}}while(0);return ge(s,i,0,6,n),L=A,0|0}function Ge(e,t){t|=0;var n=0,A=0,i=0,s=0,o=0,a=0,l=0;if((e|=0)>>>0>15)return 0|(a=4);if(Vt(0|e,0,52),a=134225919|w(),!e){n=0,A=0;do{0|Q(A)&&(Vt(0|A,0,45),o=0|a|w(),r[(e=t+(n<<3)|0)>>2]=-1,r[e+4>>2]=o,n=n+1|0),A=A+1|0}while(122!=(0|A));return 0|(n=0)}n=0,o=0;do{if(0|Q(o)){for(Vt(0|o,0,45),A=1,i=-1,s=0|a|w();i&=~(l=0|Vt(7,0,3*(15-A|0)|0)),s&=~w(),(0|A)!=(0|e);)A=A+1|0;r[(l=t+(n<<3)|0)>>2]=i,r[l+4>>2]=s,n=n+1|0}o=o+1|0}while(122!=(0|o));return 0|(n=0)}function Ve(e,t,n,A){e|=0,A|=0;var i=0,s=0,o=0;i=0|Gt(0|(t|=0),0|(n|=0),52),w(),!(0|t)&!(0|n)|(0|A)>15|(0|(i&=15))>(0|A)?(s=-1,t=-1,n=0,i=0):(t=0|Te(t,n,i+1|0,A),o=-15728641&w(),n=0|Vt(0|A,0,52),s=i,t=(t=!(0|we(n|=t,o=0|o|w())))?-1:A,i=o),r[(o=e)>>2]=n,r[o+4>>2]=i,r[e+8>>2]=s,r[e+12>>2]=t}function He(e,t,n,A){n|=0,A|=0;var i=0,s=0;return i=0|Gt(0|(e|=0),0|(t|=0),52),w(),i&=15,r[(s=A+8|0)>>2]=i,!(0|e)&!(0|t)|(0|n)>15|(0|i)>(0|n)?(r[(n=A)>>2]=0,r[n+4>>2]=0,r[s>>2]=-1,void(r[A+12>>2]=-1)):(e=0|Te(e,t,i+1|0,n),s=-15728641&w(),i=0|Vt(0|n,0,52),i|=e,s=0|s|w(),r[(e=A)>>2]=i,r[e+4>>2]=s,e=A+12|0,0|we(i,s)?void(r[e>>2]=n):void(r[e>>2]=-1))}function Qe(e){var t,n=0,A=0,i=0,s=0,o=0,a=0,l=0,c=0;if(!(!(0|(n=0|r[(A=e|=0)>>2]))&!(0|(A=0|r[A+4>>2]))||(i=0|Gt(0|n,0|A,52),w(),n=0|Rt(0|(l=0|Vt(1,0,3*(15^(i&=15))|0)),0|w(),0|n,0|A),A=0|w(),r[(l=e)>>2]=n,r[l+4>>2]=A,(0|i)<(0|(a=0|r[(l=e+8|0)>>2]))))){for(t=e+12|0,o=i;;){if((0|o)==(0|a)){i=5;break}if(c=(0|o)==(0|r[t>>2]),i=0|Gt(0|n,0|A,0|(s=3*(15-o|0)|0)),w(),c&1==(0|(i&=7))&!0){i=7;break}if(!(7==(0|i)&!0)){i=10;break}if(n=0|Rt(0|n,0|A,0|(c=0|Vt(1,0,0|s)),0|w()),A=0|w(),r[(c=e)>>2]=n,r[c+4>>2]=A,!((0|o)>(0|a))){i=10;break}o=o+-1|0}if(5==(0|i))return r[(c=e)>>2]=0,r[c+4>>2]=0,r[l>>2]=-1,void(r[t>>2]=-1);if(7==(0|i))return a=0|Rt(0|n,0|A,0|(a=0|Vt(1,0,0|s)),0|w()),l=0|w(),r[(c=e)>>2]=a,r[c+4>>2]=l,void(r[t>>2]=o+-1)}}function je(e){var t;return t=(e=+e)<0?e+6.283185307179586:e,+(e>=6.283185307179586?t+-6.283185307179586:t)}function ze(e,t){switch(e=+e,0|(t|=0)){case 1:e=e<0?e+6.283185307179586:e;break;case 2:e=e>0?e+-6.283185307179586:e}return+e}function Je(e,t){e|=0;var n,A,r,s=0;return A=+i[(t|=0)>>3],n=+i[e>>3],s=(r=+f(.5*(A-n)))*r+(s=+f(.5*(+i[t+8>>3]-+i[e+8>>3])))*(+u(+A)*+u(+n)*s),2*+g(+ +c(+s),+ +c(+(1-s)))*6371.007180918475}function Ke(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(i[t>>3]=+i[20624+(e<<3)>>3],0|(t=0))}function qe(e,t){t|=0;var n=0;return(e|=0)>>>0>15?0|(t=4):(n=0|Nt(0|(n=0|$e(7,0,e,((0|e)<0)<<31>>31)),0|w(),120,0),e=0|w(),r[t>>2]=2|n,r[t+4>>2]=e,0|(t=0))}function Ye(e,t,n,i,s){n|=0,i|=0,s|=0;var o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0;if(o=L,L=L+16|0,y=o,h=0|Gt(0|(e|=0),0|(t|=0),52),w(),h&=15,m=0|Gt(0|n,0|i,52),w(),(0|h)!=(15&m))return L=o,0|(y=12);if(u=0|Gt(0|e,0|t,45),w(),u&=127,f=0|Gt(0|n,0|i,45),w(),u>>>0>121|(f&=127)>>>0>121)return L=o,0|(y=5);if(m=(0|u)!=(0|f)){if(7==(0|(l=0|Y(u,f))))return L=o,0|(y=1);7==(0|(c=0|Y(f,u)))?T(27291,27315,164,27325):(b=l,a=c)}else b=0,a=0;d=0|Q(u),p=0|Q(f),r[y>>2]=0,r[y+4>>2]=0,r[y+8>>2]=0,r[y+12>>2]=0;do{if(b){l=(0|(f=0|r[4272+(28*u|0)+(b<<2)>>2]))>0;e:do{if(p)if(l)for(u=0,c=n,l=i;;){switch(c=0|Re(c,l),l=0|w(),0|a){case 5:case 1:a=3;break;case 3:a=2;break;case 2:a=6;break;case 6:a=4;break;case 4:a=5}if((0|(u=u+1|0))==(0|f)){f=a,u=c,c=l;break e}}else f=a,u=n,c=i;else if(l)for(u=0,c=n,l=i;;){switch(c=0|Le(c,l),l=0|w(),0|a){case 1:a=3;break;case 3:a=2;break;case 2:a=6;break;case 6:a=4;break;case 4:a=5;break;case 5:a=1}if((0|(u=u+1|0))==(0|f)){f=a,u=c,c=l;break e}}else f=a,u=n,c=i}while(0);if(Ne(u,c,y),m||T(27340,27315,194,27325),(l=!!(0|d))&(a=!!(0|p))&&T(27367,27315,195,27325),l){if(7==(0|(a=0|xe(e,t)))){a=5;break}if(0|A[21968+(7*a|0)+b|0]){a=1;break}m=p=0|r[21136+(28*a|0)+(b<<2)>>2]}else if(a){if(7==(0|(a=0|xe(u,c)))){a=5;break}if(0|A[21968+(7*a|0)+f|0]){a=1;break}m=0,p=0|r[21136+(28*f|0)+(a<<2)>>2]}else m=0,p=0;if((m|p|0)>=0){if((0|p)>0){i=y+8|0,d=y+12|0,f=0,c=0|r[(n=y+4|0)>>2],l=0|r[i>>2],a=0|r[d>>2];do{(0|(u=(0|(a=(B=(0|(c=a+c-(B=(t=(0|(g=l+c|0))<0)?g:0)-(u=(e=(0|(l=a+l-B|0))<0)?l:0)|0))<0)?0:c))<(0|(u=(0|(l=(e?0:l)-(c=B?c:0)|0))<(0|(c=(t?0:g)-u-c|0))?l:c))?a:u))>0&&(c=c-u|0,l=l-u|0,a=a-u|0),f=f+1|0}while((0|f)!=(0|p));r[n>>2]=c,r[i>>2]=l,r[d>>2]=a}if((b+-1|0)>>>0<6?(a=0|r[22032+(12*b|0)>>2],c=0|r[22032+(12*b|0)+4>>2],a=a-(l=(0|(l=(0|(B=0|r[22032+(12*b|0)+8>>2]))<(0|(l=(0|c)<(0|a)?c:a))?B:l))>0?l:0)|0,c=c-l|0,l=B-l|0):(a=0,c=0,l=0),h)for(;;){if(u=3*a|0,f=3*c|0,n=3*l|0,0|Pe(h)?(a=(B=(0|(l=(0|(b=(l=(0|(c=a+n-((e=(0|(t=u+c|0))<0)?t:0)-((g=(0|(B=f+l-(e?t:0)|0))<0)?B:0)|0))<0)?0:c))<(0|(l=(0|(u=(g?0:B)-(l?c:0)|0))<(0|(c=(e?0:t)-(g?B:0)-(l?c:0)|0))?u:c))?b:l))>0)?l:0,u=u-(B?l:0)|0,l=b-(B?l:0)|0):(a=(B=(0|(l=(0|(b=(l=(0|(c=n+c-((t=(0|(g=u+l|0))<0)?g:0)-((a=(0|(B=f+a-(t?g:0)|0))<0)?B:0)|0))<0)?0:c))<(0|(l=(0|(u=(a?0:B)-(l?c:0)|0))<(0|(c=(t?0:g)-(a?B:0)-(l?c:0)|0))?u:c))?b:l))>0)?l:0,u=u-(B?l:0)|0,l=b-(B?l:0)|0),a=c-a|0,!((0|h)>1)){c=u;break}h=h+-1|0,c=u}if((0|m)>0){u=0;do{l=(l=(a=(0|(b=a+l-((e=(0|(t=a+c|0))<0)?t:0)-((g=(0|(B=c+l-(e?t:0)|0))<0)?B:0)|0))<0)?0:b)-((B=(0|(a=(0|l)<(0|(a=(0|(c=(g?0:B)-(a?b:0)|0))<(0|(b=(e?0:t)-(g?B:0)-(a?b:0)|0))?c:b))?l:a))>0)?a:0)|0,c=c-(B?a:0)|0,a=b-(B?a:0)|0,u=u+1|0}while((0|u)!=(0|m))}n=y+4|0,b=0|r[(h=y+8|0)>>2],B=0|r[(i=y+12|0)>>2],u=(0|r[n>>2])+a|0,r[n>>2]=u,c=b+c|0,r[h>>2]=c,a=B+l|0,r[i>>2]=a,l=c-u|0,(0|u)<0?(a=a-u|0,r[h>>2]=l,r[i>>2]=a,r[n>>2]=0,c=0):(l=c,c=u),(0|l)<0&&(c=c-l|0,r[n>>2]=c,a=a-l|0,r[i>>2]=a,r[h>>2]=0,l=0),f=c-a|0,u=l-a|0,(0|a)<0?(r[n>>2]=f,r[h>>2]=u,r[i>>2]=0,c=f,a=0):u=l,(0|(l=(0|a)<(0|(l=(0|u)<(0|c)?u:c))?a:l))>0?(r[n>>2]=c-l,r[h>>2]=u-l,r[i>>2]=a-l,g=77):g=77}else a=5}else if(Ne(n,i,y),!!(0|d)&!!(0|p))if((0|f)!=(0|u)&&T(27398,27315,264,27325),7==(0|(l=0|xe(e,t)))|7==(0|(a=0|xe(n,i))))a=5;else if(0|A[21968+(7*l|0)+a|0])a=1;else if((0|(n=0|r[21136+(28*l|0)+(a<<2)>>2]))>0){i=y+8|0,d=y+12|0,f=0,c=0|r[(h=y+4|0)>>2],l=0|r[i>>2],a=0|r[d>>2];do{(0|(u=(0|(a=(e=(0|(c=a+c-(e=(g=(0|(b=l+c|0))<0)?b:0)-(u=(t=(0|(l=a+l-e|0))<0)?l:0)|0))<0)?0:c))<(0|(u=(0|(l=(t?0:l)-(c=e?c:0)|0))<(0|(c=(g?0:b)-u-c|0))?l:c))?a:u))>0&&(c=c-u|0,l=l-u|0,a=a-u|0),f=f+1|0}while((0|f)!=(0|n));r[h>>2]=c,r[i>>2]=l,r[d>>2]=a,g=77}else g=77;else g=77}while(0);return 77==(0|g)&&(a=y+4|0,r[s>>2]=r[a>>2],r[s+4>>2]=r[a+4>>2],r[s+8>>2]=r[a+8>>2],a=0),L=o,0|(B=a)}function We(e,t,n,A){n|=0,A|=0;var i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,E=0;if(s=0|Gt(0|(e|=0),0|(t|=0),52),w(),s&=15,v=0|Gt(0|e,0|t,45),w(),(v&=127)>>>0>121)return 0|(A=5);if(g=0|Q(v),Vt(0|s,0,52),a=134225919|w(),r[(o=A)>>2]=-1,r[o+4>>2]=a,o=0|r[n>>2],a=0|r[n+4>>2],n=0|r[n+8>>2],!s){i=(i=(n=(0|(b=n-(b=(t=(0|o)<0)?o:0)+((g=(0|(B=a-b|0))<0)?0-B|0:0)|0))<0)?0:b)-(B=(0|(B=(0|i)<(0|(B=(0|(n=(g?0:B)-(b=n?b:0)|0))<(0|(b=(t?0:o)-(g?B:0)-b|0))?n:b))?i:B))>0?B:0)|0,n=n-B|0;e:do{switch(b-B|0){case 0:switch(0|n){case 0:if(i){i=1==(0|i)?1:7,y=11;break e}i=0;break e;case 1:if(i){i=1==(0|i)?3:7,y=11;break e}i=2;break e;default:return 0|(A=1)}case 1:switch(0|n){case 0:if(i){i=1==(0|i)?5:7,y=11;break e}i=4;break e;case 1:if(!i){i=6;break e}return 0|(i=1);default:return 0|(A=1)}default:return 0|(A=1)}}while(0);return 11==(0|y)&&7==(0|i)||127==(0|(i=0|q(v,i)))?0|(A=1):(B=0|Vt(0|i,0,45),v=0|w(),v=-1040385&r[(y=A)+4>>2]|v,r[A>>2]=r[y>>2]|B,r[A+4>>2]=v,0|(A=0))}for(;;){if(m=s,s=s+-1|0,l=(p=o-n|0)>>>0>715827881|(d=a-n|0)>>>0>715827881,0|Pe(m)){if(l){if(f=2147483647-p|0,h=-2147483648-p|0,(u=(0|p)>0)?(0|f)<(0|p):(0|h)>(0|p)){i=1,y=107;break}if(E=p<<1,u?(2147483647-E|0)<(0|p):(-2147483648-E|0)>(0|p)){i=1,y=107;break}if((0|d)>0?(2147483647-d|0)<(0|d):(-2147483648-d|0)>(0|d)){i=1,y=107;break}if(l=3*p|0,c=d<<1,(u?(0|f)<(0|c):(0|h)>(0|c))||((0|p)>-1?(-2147483648|l)>=(0|d):(-2147483648^l)<(0|d))){i=1,y=107;break}}else l=3*p|0,c=d<<1;if(f=0|wt(.14285714285714285*+(l-d|0)),l=(c=(0|(u=0|wt(.14285714285714285*+(c+p|0))))<(0|f))?f:u,(0|(c=c?u:f))<0){if(-2147483648==(0|c)||((0|l)>0?(2147483647-l|0)<(0|c):(-2147483648-l|0)>(0|c))){y=24;break}if((0|l)>-1?(-2147483648|l)>=(0|c):(-2147483648^l)<(0|c)){y=24;break}}h=((h=(0|f)<0)?0:f)-((_=(0|(d=u-(h?f:0)|0))<0)?d:0)-((p=(0|(C=(h?0-f|0:0)-(_?d:0)|0))<0)?C:0)|0,d=(_?0:d)-(p?C:0)|0,h=h-((_=(0|(p=(0|(C=p?0:C))<(0|(p=(0|d)<(0|h)?d:h))?C:p))>0)?p:0)|0,d=d-(_?p:0)|0,l=(E=(0|(u=(0|(M=(u=(0|(f=(3*(p=C-(_?p:0)|0)|0)+h-((C=(0|(_=(3*h|0)+d|0))<0)?_:0)-((l=(0|(E=(3*d|0)+p-(C?_:0)|0))<0)?E:0)|0))<0)?0:f))<(0|(u=(0|(c=(l?0:E)-(u?f:0)|0))<(0|(f=(C?0:_)-(l?E:0)-(u?f:0)|0))?c:f))?M:u))>0)?u:0,c=c-(E?u:0)|0,u=M-(E?u:0)|0}else{if(l){if((c=(0|p)>0)?(2147483647-p|0)<(0|p):(-2147483648-p|0)>(0|p)){i=1,y=107;break}if(l=p<<1,(u=(0|d)>0)?(2147483647-d|0)<(0|d):(-2147483648-d|0)>(0|d)){i=1,y=107;break}if(h=d<<1,u?(2147483647-h|0)<(0|d):(-2147483648-h|0)>(0|d)){i=1,y=107;break}if(c?(2147483647-l|0)<(0|d):(-2147483648-l|0)>(0|d)){i=1,y=107;break}if(c=3*d|0,(0|d)>-1?(-2147483648|c)>=(0|p):(-2147483648^c)<(0|p)){i=1,y=107;break}}else l=p<<1,c=3*d|0;if(f=0|wt(.14285714285714285*+(l+d|0)),l=(c=(0|(u=0|wt(.14285714285714285*+(c-p|0))))<(0|f))?f:u,(0|(c=c?u:f))<0){if(-2147483648==(0|c)||((0|l)>0?(2147483647-l|0)<(0|c):(-2147483648-l|0)>(0|c))){y=36;break}if((0|l)>-1?(-2147483648|l)>=(0|c):(-2147483648^l)<(0|c)){y=36;break}}h=((h=(0|f)<0)?0:f)-((M=(0|(d=u-(h?f:0)|0))<0)?d:0)-((p=(0|(E=(h?0-f|0:0)-(M?d:0)|0))<0)?E:0)|0,d=(M?0:d)-(p?E:0)|0,h=h-((M=(0|(p=(0|(E=p?0:E))<(0|(p=(0|d)<(0|h)?d:h))?E:p))>0)?p:0)|0,d=d-(M?p:0)|0,l=(C=(0|(u=(0|(_=(u=(0|(f=(3*(p=E-(M?p:0)|0)|0)+d-((E=(0|(M=(3*h|0)+p|0))<0)?M:0)-((l=(0|(C=(3*d|0)+h-(E?M:0)|0))<0)?C:0)|0))<0)?0:f))<(0|(u=(0|(c=(l?0:C)-(u?f:0)|0))<(0|(f=(E?0:M)-(l?C:0)-(u?f:0)|0))?c:f))?_:u))>0)?u:0,c=c-(C?u:0)|0,u=_-(C?u:0)|0}u=(o=(0|(C=n-u+((M=(0|(l=o+(l-f)|0))<0)?0-l|0:0)+((f=(0|(c=a-c-(M?l:0)|0))<0)?0-c|0:0)|0))<0)?0:C,E=(f?0:c)-(o?C:0)|0,C=(C=(M?0:l)-(f?c:0)-(o?C:0)|0)-((n=(0|(o=(0|u)<(0|(o=(0|E)<(0|C)?E:C))?u:o))>0)?o:0)|0,f=0|r[(c=A)>>2],c=0|r[c+4>>2],l=f&~(l=0|Vt(7,0,0|(a=3*(15-m|0)|0))),c&=~w(),n=(n=(o=(0|(M=u-(n?o:0)-(M=(f=(0|C)<0)?C:0)+((_=(0|(E=E-(n?o:0)-M|0))<0)?0-E|0:0)|0))<0)?0:M)-(E=(0|(E=(0|n)<(0|(E=(0|(o=(_?0:E)-(M=o?M:0)|0))<(0|(M=(f?0:C)-(_?E:0)-M|0))?o:M))?n:E))>0?E:0)|0,o=o-E|0;e:do{switch(M-E|0){case 0:switch(0|o){case 0:n=0|n?1==(0|n)?1:7:0;break e;case 1:n=0|n?1==(0|n)?3:7:2;break e;default:y=45;break e}case 1:switch(0|o){case 0:n=0|n?1==(0|n)?5:7:4;break e;case 1:if(n){y=45;break e}n=6;break e;default:y=45;break e}default:y=45}}while(0);if(45==(0|y)&&(y=0,n=7),_=0|Vt(0|n,0,0|a),M=0|w()|c,r[(E=A)>>2]=_|l,r[E+4>>2]=M,(0|m)<=1){y=47;break}o=h,a=d,n=p}if(24==(0|y))T(27634,27425,416,27447);else if(36==(0|y))T(27634,27425,464,27461);else{if(47==(0|y)){if((0|h)>1|(0|d)>1|(0|p)>1)return 0|(E=1);n=(n=(s=(0|(M=p-(M=(C=(0|h)<0)?h:0)+((_=(0|(E=d-M|0))<0)?0-E|0:0)|0))<0)?0:M)-(E=(0|(E=(0|n)<(0|(E=(0|(s=(_?0:E)-(M=s?M:0)|0))<(0|(M=(C?0:h)-(_?E:0)-M|0))?s:M))?n:E))>0?E:0)|0,s=s-E|0;e:do{switch(M-E|0){case 0:switch(0|s){case 0:s=0|n?1==(0|n)?1:7:0;break e;case 1:s=0|n?1==(0|n)?3:7:2;break e;default:y=55;break e}case 1:switch(0|s){case 0:s=0|n?1==(0|n)?5:7:4;break e;case 1:if(n){y=55;break e}s=6;break e;default:y=55;break e}default:y=55}}while(0);55==(0|y)&&(s=7),c=127==(0|(a=0|q(v,s)))?0:0|Q(a);e:do{if(s){if(g){if(7==(0|(n=0|xe(e,t))))return 0|(E=5);o=0|r[21344+(28*n|0)+(s<<2)>>2];t:do{if((0|o)>0)for(n=s,s=0;;){switch(0|n){case 1:n=5;break;case 5:n=4;break;case 4:n=6;break;case 6:n=2;break;case 2:n=3;break;case 3:n=1}if((0|(s=s+1|0))==(0|o))break t}else n=s}while(0);if(1==(0|n))return 0|(E=9);127==(0|(s=0|q(v,n)))&&T(27476,27315,415,27506),0|Q(s)?T(27521,27315,416,27506):(i=s,B=o,b=n)}else i=a,B=0,b=s;if((0|(l=0|r[4272+(28*v|0)+(b<<2)>>2]))<=-1&&T(27552,27315,423,27506),!c){if((0|B)<0)return 0|(E=5);if(0|B){n=0,s=0|r[(o=A)>>2],o=0|r[o+4>>2];do{s=0|Ie(s,o),o=0|w(),r[(E=A)>>2]=s,r[E+4>>2]=o,n=n+1|0}while((0|n)<(0|B))}if((0|l)<=0){y=104;break}for(n=0,s=0|r[(o=A)>>2],o=0|r[o+4>>2];;)if(s=0|Ie(s,o),o=0|w(),r[(E=A)>>2]=s,r[E+4>>2]=o,(0|(n=n+1|0))==(0|l)){y=104;break e}}if(7==(0|(a=0|Y(i,v)))&&T(27291,27315,432,27506),s=0|r[(n=A)>>2],n=0|r[n+4>>2],(0|l)>0){o=0;do{s=0|Ie(s,n),n=0|w(),r[(E=A)>>2]=s,r[E+4>>2]=n,o=o+1|0}while((0|o)!=(0|l))}if(7==(0|(n=0|xe(s,n)))&&T(27634,27315,444,27506),s=0|j(i),(0|(s=0|r[(s?21760:21552)+(28*a|0)+(n<<2)>>2]))<0&&T(27634,27315,458,27506),s){n=0,o=0|r[(a=A)>>2],a=0|r[a+4>>2];do{o=0|Se(o,a),a=0|w(),r[(E=A)>>2]=o,r[E+4>>2]=a,n=n+1|0}while((0|n)<(0|s));y=104}else y=104}else if(!!(0|g)&!!(0|c)){if(7==(0|(i=0|xe(e,t)))|7==(0|(n=0|xe(0|r[(n=A)>>2],0|r[n+4>>2]))))return 0|(E=5);if((0|(n=0|r[21344+(28*i|0)+(n<<2)>>2]))<0)return 0|(E=5);if(n){i=0,s=0|r[(o=A)>>2],o=0|r[o+4>>2];do{s=0|Ie(s,o),o=0|w(),r[(E=A)>>2]=s,r[E+4>>2]=o,i=i+1|0}while((0|i)<(0|n));i=a,y=104}else i=a,y=105}else i=a,y=104}while(0);return 104==(0|y)&&c&&(y=105),105==(0|y)&&1==(0|xe(0|r[(E=A)>>2],0|r[E+4>>2]))?0|(E=9):(C=0|r[(M=A)>>2],M=-1040385&r[M+4>>2],_=0|Vt(0|i,0,45),M=0|M|w(),r[(E=A)>>2]=C|_,r[E+4>>2]=M,0|(E=0))}if(107==(0|y))return 0|i}return 0}function Xe(e,t,n,A,i){n|=0,A|=0,i|=0;var s,o,a=0,l=0,c=0;return s=L,L=L+32|0,c=s,0|(a=0|Ye(e|=0,t|=0,e,t,l=s+12|0))?(L=s,0|(c=a)):0|(e=0|Ye(e,t,n,A,c))?(L=s,0|(c=e)):(t=(0|(n=(A=(o=(0|(e=(0|r[l>>2])-(0|r[c>>2])|0))<0)?0-e|0:0)+((0|r[l+4>>2])-(0|r[c+4>>2]))|0))<0,l=(l=(a=(0|(A=(0|r[l+8>>2])-(0|r[c+8>>2])+A+(t?0-n|0:0)|0))<0)?0:A)-(c=(0|(c=(0|l)<(0|(c=(0|(a=(t?0:n)-(A=a?A:0)|0))<(0|(A=(o?0:e)-(t?n:0)-A|0))?a:A))?l:c))>0?c:0)|0,a=a-c|0,l=(0|(c=(0|(c=A-c|0))>-1?c:0-c|0))>(0|(l=(0|(a=(0|a)>-1?a:0-a|0))>(0|(l=(0|l)>-1?l:0-l|0))?a:l))?c:l,r[(c=i)>>2]=l,r[c+4>>2]=((0|l)<0)<<31>>31,L=s,0|(c=0))}function Ze(e,t,n,A,i,s,o,a,c,u,f){e|=0,t|=0,n|=0,A|=0,i|=0,s|=0,o|=0,a|=0,c|=0,u|=0,f|=0;var h,d,p,m,g,b,y,B=0,v=0,C=0,_=0,M=0,E=0,x=0,S=0,I=0,R=0,D=0;if(y=L,L=L+48|0,v=y+12|0,b=y,r[(B=y+24|0)>>2]=0,r[B+4>>2]=0,r[B+8>>2]=0,r[v>>2]=0,r[v+4>>2]=0,r[v+8>>2]=0,0|Ye(e,t,e,t,B)&&T(27634,27315,696,27575),0|Ye(e,t,n,A,v)&&T(27634,27315,701,27575),n=(A=0|r[(M=B+8|0)>>2])-(0|r[B>>2])|0,r[B>>2]=n,A=(0|r[(R=B+4|0)>>2])-A|0,r[R>>2]=A,B=0-(R=A+n|0)|0,r[M>>2]=B,E=(x=0|r[(M=v+8|0)>>2])-(0|r[v>>2])|0,r[v>>2]=E,x=(0|r[(I=v+4|0)>>2])-x|0,r[I>>2]=x,I=x+E|0,r[M>>2]=0-I,m=(S=1/(+(i>>>0)+4294967296*+(0|s)))*+(E-n|0),g=S*+(x-A|0),S*=+(R-I|0),r[b>>2]=n,r[(I=b+4|0)>>2]=A,r[(R=b+8|0)>>2]=B,(0|s)<0)return L=y,0|(u=0);for(p=+(0|n),d=+(0|A),h=+(0|B),E=0,x=0;;){if(D=m*(_=+(E>>>0)+4294967296*+(0|x))+p,C=g*_+d,_=S*_+h,A=~~+zt(+D),B=~~+zt(+C),n=~~+zt(+_),(D=+l(+(+(0|A)-D)))>(C=+l(+(+(0|B)-C)))&D>(_=+l(+(+(0|n)-_)))?A=0-(v=n+B|0)|0:(v=0-A|0,C>_&&(B=v-n|0)),r[I>>2]=B,r[b>>2]=v,r[R>>2]=0,n=A+B|0,(0|A)>0?(r[I>>2]=n,r[R>>2]=A,r[b>>2]=0,v=0):(n=B,A=0),(0|n)<0?(B=v-n|0,r[b>>2]=B,A=A-n|0,r[R>>2]=A,r[I>>2]=0,v=B-A|0,n=0-A|0,(0|A)<0?(r[b>>2]=v,r[I>>2]=n,r[R>>2]=0,M=n,A=0):(M=0,v=B)):M=n,(0|(n=(0|A)<(0|(n=(0|M)<(0|v)?M:v))?A:n))>0&&(r[b>>2]=v-n,r[I>>2]=M-n,r[R>>2]=A-n),n=0|Rt(0|(n=0|Nt(0|E,0|x,0|u,0|f)),0|w(),0|a,0|c),w(),0|(n=0|We(e,t,b,o+(n<<3)|0))){A=20;break}if(M=E,E=0|Rt(0|E,0|x,1,0),v=x,x=0|w(),!((0|v)<(0|s)|(0|v)==(0|s)&M>>>0<i>>>0)){n=0,A=20;break}}return 20==(0|A)?(L=y,0|n):0}function $e(e,t,n,A){e|=0,t|=0;var r=0,i=0,s=0;if(!(0|(n|=0))&!(0|(A|=0)))return i=1,M(0|(r=0)),0|i;i=e,r=t,e=1,t=0;do{e=0|Nt(0|((s=!0&!(1&n))?1:i),0|(s?0:r),0|e,0|t),t=0|w(),n=0|kt(0|n,0|A,1),A=0|w(),i=0|Nt(0|i,0|r,0|i,0|r),r=0|w()}while(!(!(0|n)&!(0|A)));return M(0|t),0|e}function et(e,t,n,A){n|=0,A|=0;var s,o=0,a=0,l=0,c=0,f=0,h=0;s=L,L=L+16|0,a=s,l=0|Gt(0|(e|=0),0|(t|=0),52),w(),l&=15;do{if(l){if(!(o=0|Ue(e,t,a))){f=+i[a>>3],c=1/+u(+f),h=+i[26032+(l<<3)>>3],i[n>>3]=f+h,i[n+8>>3]=f-h,f=+i[a+8>>3],c*=h,i[n+16>>3]=c+f,i[n+24>>3]=f-c;break}return L=s,0|(l=o)}if(o=0|Gt(0|e,0|t,45),w(),(o&=127)>>>0>121)return L=s,0|(l=5);a=22128+(o<<5)|0,r[n>>2]=r[a>>2],r[n+4>>2]=r[a+4>>2],r[n+8>>2]=r[a+8>>2],r[n+12>>2]=r[a+12>>2],r[n+16>>2]=r[a+16>>2],r[n+20>>2]=r[a+20>>2],r[n+24>>2]=r[a+24>>2],r[n+28>>2]=r[a+28>>2];break}while(0);return function(e,t){t=+t;var n,A,r,s,o,a,l,c=0,u=0;c=(s=+i[(r=16+(e|=0)|0)>>3])-(A=+i[(n=e+24|0)>>3]),c=s<A?c+6.283185307179586:c,u=+i[e>>3],c=.5*(c*t-c),u+=t=.5*((l=u-(a=+i[(o=e+8|0)>>3]))*t-l),i[e>>3]=u>1.5707963267948966?1.5707963267948966:u,t=a-t,i[o>>3]=t<-1.5707963267948966?-1.5707963267948966:t,t=(t=s+c)>3.141592653589793?t+-6.283185307179586:t,i[r>>3]=t<-3.141592653589793?t+6.283185307179586:t,t=(t=A-c)>3.141592653589793?t+-6.283185307179586:t,i[n>>3]=t<-3.141592653589793?t+6.283185307179586:t}(n,A?1.4:1.1),(0|r[(A=26160+(l<<3)|0)>>2])==(0|e)&&(0|r[A+4>>2])==(0|t)&&(i[n>>3]=1.5707963267948966),(0|r[(l=26288+(l<<3)|0)>>2])==(0|e)&&(0|r[l+4>>2])==(0|t)&&(i[n+8>>3]=-1.5707963267948966),1.5707963267948966!=+i[n>>3]&&-1.5707963267948966!=+i[n+8>>3]?(L=s,0|(l=0)):(i[n+16>>3]=3.141592653589793,i[n+24>>3]=-3.141592653589793,L=s,0|(l=0))}function tt(e,t,n,i){e|=0,t|=0,n|=0,i|=0;var s,o,a,l=0,c=0,u=0,f=0;a=L,L=L+48|0,s=a+40|0,o=a,Ce(c=a+32|0,0,0,0),u=0|r[c>>2],c=0|r[c+4>>2];do{if(n>>>0<=15){if(0|(l=0|st(i))){r[(i=o)>>2]=0,r[i+4>>2]=0,r[o+8>>2]=l,r[o+12>>2]=-1,u=o+29|0,r[(i=o+16|0)>>2]=0,r[i+4>>2]=0,r[i+8>>2]=0,A[i+12|0]=0,A[u|0]=0|A[s|0],A[u+1|0]=0|A[s+1|0],A[u+2|0]=0|A[s+2|0];break}if(l=0|xt(1+(0|r[t+8>>2])|0,32)){ot(t,l),r[(f=o)>>2]=u,r[f+4>>2]=c,r[o+8>>2]=0,r[o+12>>2]=n,r[o+16>>2]=i,r[o+20>>2]=t,r[o+24>>2]=l,A[o+28|0]=0,A[(u=o+29|0)|0]=0|A[s|0],A[u+1|0]=0|A[s+1|0],A[u+2|0]=0|A[s+2|0];break}r[(i=o)>>2]=0,r[i+4>>2]=0,r[o+8>>2]=13,r[o+12>>2]=-1,u=o+29|0,r[(i=o+16|0)>>2]=0,r[i+4>>2]=0,r[i+8>>2]=0,A[i+12|0]=0,A[u|0]=0|A[s|0],A[u+1|0]=0|A[s+1|0],A[u+2|0]=0|A[s+2|0];break}r[(u=o)>>2]=0,r[u+4>>2]=0,r[o+8>>2]=4,r[o+12>>2]=-1,f=o+29|0,r[(u=o+16|0)>>2]=0,r[u+4>>2]=0,r[u+8>>2]=0,A[u+12|0]=0,A[f|0]=0|A[s|0],A[f+1|0]=0|A[s+1|0],A[f+2|0]=0|A[s+2|0]}while(0);nt(o),r[e>>2]=r[o>>2],r[e+4>>2]=r[o+4>>2],r[e+8>>2]=r[o+8>>2],r[e+12>>2]=r[o+12>>2],r[e+16>>2]=r[o+16>>2],r[e+20>>2]=r[o+20>>2],r[e+24>>2]=r[o+24>>2],r[e+28>>2]=r[o+28>>2],L=a}function nt(e){var t,n,i,s,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0;if(s=L,L=L+336|0,t=s+168|0,n=s,!(0|(a=0|r[(l=e|=0)>>2]))&!(0|(l=0|r[l+4>>2])))L=s;else{if(0|A[(o=e+28|0)|0]?(a=0|At(a,l),l=0|w()):A[o|0]=1,!(0|r[r[(i=e+20|0)>>2]>>2]))return 0|(a=0|r[(o=e+24|0)>>2])&&Et(a),r[(C=e)>>2]=0,r[C+4>>2]=0,r[e+8>>2]=0,r[i>>2]=0,r[e+12>>2]=-1,r[e+16>>2]=0,r[o>>2]=0,void(L=s);c=15&(o=0|r[(C=e+16|0)>>2]);e:do{if(!(0|a)&!(0|l))v=e+24|0;else{y=e+12|0,g=3==(0|c),m=255&o,d=3==(1|c),b=e+24|0,p=(c+-1|0)>>>0<3,f=3==(2|c),h=n+8|0;t:for(;;){if(u=0|Gt(0|a,0|l,52),w(),(0|(u&=15))==(0|r[y>>2])){switch(15&m){case 0:case 2:case 3:if(0|(c=0|Ue(a,l,t))){B=15;break t}if(0|at(0|r[i>>2],0|r[b>>2],t)){B=19;break t}}if(d&&(c=0|r[4+(0|r[i>>2])>>2],r[t>>2]=r[c>>2],r[t+4>>2]=r[c+4>>2],r[t+8>>2]=r[c+8>>2],r[t+12>>2]=r[c+12>>2],0|Z(26896,t))){if(0|Fe(0|r[4+(0|r[i>>2])>>2],u,n)){B=25;break}if((0|r[(c=n)>>2])==(0|a)&&(0|r[c+4>>2])==(0|l)){B=29;break}}if(p){if(0|(c=0|ke(a,l,t))){B=32;break}if(0|et(a,l,n,0)){B=36;break}if(f&&0|lt(0|r[i>>2],0|r[b>>2],t,n)){B=42;break}if(d&&0|ut(0|r[i>>2],0|r[b>>2],t,n)){B=42;break}}if(g){if(o=0|et(a,l,t,1),c=0|r[b>>2],0|o){B=45;break}if(0|$(c,t)){if(te(n,t),0|ee(t,0|r[b>>2])){B=53;break}if(0|at(0|r[i>>2],0|r[b>>2],h)){B=53;break}if(0|ut(0|r[i>>2],0|r[b>>2],n,t)){B=53;break}}}}do{if((0|u)<(0|r[y>>2])){if(o=0|et(a,l,t,1),c=0|r[b>>2],0|o){B=58;break t}if(!(0|$(c,t))){B=73;break}if(0|ee(0|r[b>>2],t)&&(te(n,t),0|lt(0|r[i>>2],0|r[b>>2],n,t))){B=65;break t}if(0|(a=0|Ee(a,l,u+1|0,n))){B=67;break t}a=0|r[(l=n)>>2],l=0|r[l+4>>2]}else B=73}while(0);if(73==(0|B)&&(B=0,a=0|At(a,l),l=0|w()),!(0|a)&!(0|l)){v=b;break e}}switch(0|B){case 15:0|(o=0|r[b>>2])&&Et(o),r[(B=e)>>2]=0,r[B+4>>2]=0,r[i>>2]=0,r[y>>2]=-1,r[C>>2]=0,r[b>>2]=0,r[e+8>>2]=c,B=20;break;case 19:r[e>>2]=a,r[e+4>>2]=l,B=20;break;case 25:T(27634,27600,470,27611);break;case 29:case 42:return r[e>>2]=a,r[e+4>>2]=l,void(L=s);case 32:return 0|(o=0|r[b>>2])&&Et(o),r[(v=e)>>2]=0,r[v+4>>2]=0,r[i>>2]=0,r[y>>2]=-1,r[C>>2]=0,r[b>>2]=0,r[e+8>>2]=c,void(L=s);case 36:T(27634,27600,493,27611);break;case 45:0|c&&Et(c),r[(B=e)>>2]=0,r[B+4>>2]=0,r[i>>2]=0,r[y>>2]=-1,r[C>>2]=0,r[b>>2]=0,r[e+8>>2]=o,B=55;break;case 53:r[e>>2]=a,r[e+4>>2]=l,B=55;break;case 58:0|c&&Et(c),r[(B=e)>>2]=0,r[B+4>>2]=0,r[i>>2]=0,r[y>>2]=-1,r[C>>2]=0,r[b>>2]=0,r[e+8>>2]=o,B=71;break;case 65:r[e>>2]=a,r[e+4>>2]=l,B=71;break;case 67:return 0|(o=0|r[b>>2])&&Et(o),r[(v=e)>>2]=0,r[v+4>>2]=0,r[i>>2]=0,r[y>>2]=-1,r[C>>2]=0,r[b>>2]=0,r[e+8>>2]=a,void(L=s)}if(20==(0|B))return void(L=s);if(55==(0|B))return void(L=s);if(71==(0|B))return void(L=s)}}while(0);0|(o=0|r[v>>2])&&Et(o),r[(B=e)>>2]=0,r[B+4>>2]=0,r[e+8>>2]=0,r[i>>2]=0,r[e+12>>2]=-1,r[C>>2]=0,r[v>>2]=0,L=s}}function At(e,t){var n,A=0,i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0;n=L,L=L+16|0,f=n,i=0|Gt(0|(e|=0),0|(t|=0),52),w(),i&=15,A=0|Gt(0|e,0|t,45),w();do{if(i){for(;A=0|Vt(i+4095|0,0,52),s=w()|-15728641&t,A=A|e|(a=0|Vt(7,0,0|(o=3*(15-i|0)|0))),s|=l=0|w(),c=0|Gt(0|e,0|t,0|o),w(),i=i+-1|0,!((c&=7)>>>0<6);){if(!i){u=4;break}t=s,e=A}if(4==(0|u)){A=0|Gt(0|A,0|s,45),w();break}return f=0|Vt(((f=!(0|c)&!!(0|we(A,s)))?2:1)+c|0,0,0|o),u=0|w()|t&~l,f|=e&~a,M(0|u),L=n,0|f}}while(0);return(A&=127)>>>0>120?(f=0,M(0|(u=0)),L=n,0|f):(Ce(f,0,A+1|0,0),u=0|r[f+4>>2],f=0|r[f>>2],M(0|u),L=n,0|f)}function rt(e,t,n){e|=0;var A,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0;if(!(0|Z(t|=0,n|=0)))return 0|(d=0);if(t=0|function(e){return+i[16+(e|=0)>>3]<+i[e+24>>3]|0}(t),s=+i[n>>3],o=t&(o=+i[n+8>>3])<0?o+6.283185307179586:o,(0|(d=0|r[e>>2]))<=0)return 0|(d=0);if(A=0|r[e+4>>2],t){t=0,h=o,n=-1,e=0;e:for(;;){for(f=e;l=+i[A+(f<<4)>>3],o=+i[A+(f<<4)+8>>3],a=+i[A+((e=(n+2|0)%(0|d)|0)<<4)>>3],c=+i[A+(e<<4)+8>>3],l>a?(u=l,l=c):(u=a,a=l,l=o,o=c),(s=s==a|s==u?s+2220446049250313e-31:s)<a|s>u;){if((0|(n=f+1|0))>=(0|d)){n=22;break e}e=f,f=n,n=e}if(((u=(c=l<0?l+6.283185307179586:l)+(s-a)/(u-a)*((l=o<0?o+6.283185307179586:o)-c))<0?u+6.283185307179586:u)>(h=c==h|l==h?h+-2220446049250313e-31:h)&&(t^=1),(0|(e=f+1|0))>=(0|d)){n=22;break}n=f}if(22==(0|n))return 0|t}else{t=0,h=o,n=-1,e=0;e:for(;;){for(f=e;l=+i[A+(f<<4)>>3],o=+i[A+(f<<4)+8>>3],a=+i[A+((e=(n+2|0)%(0|d)|0)<<4)>>3],c=+i[A+(e<<4)+8>>3],l>a?(u=l,l=c):(u=a,a=l,l=o,o=c),(s=s==a|s==u?s+2220446049250313e-31:s)<a|s>u;){if((0|(n=f+1|0))>=(0|d)){n=22;break e}e=f,f=n,n=e}if(l+(s-a)/(u-a)*(o-l)>(h=l==h|o==h?h+-2220446049250313e-31:h)&&(t^=1),(0|(e=f+1|0))>=(0|d)){n=22;break}n=f}if(22==(0|n))return 0|t}return 0}function it(e,t){t|=0;var n,A,s,o,a,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0;if(!(A=0|r[(e|=0)>>2]))return r[t>>2]=0,r[t+4>>2]=0,r[t+8>>2]=0,r[t+12>>2]=0,r[t+16>>2]=0,r[t+20>>2]=0,r[t+24>>2]=0,void(r[t+28>>2]=0);if(i[(s=t+8|0)>>3]=17976931348623157e292,i[(o=t+24|0)>>3]=17976931348623157e292,i[t>>3]=-17976931348623157e292,i[(a=t+16|0)>>3]=-17976931348623157e292,!((0|A)<=0)){for(n=0|r[e+4>>2],g=17976931348623157e292,b=-17976931348623157e292,y=0,e=-1,h=17976931348623157e292,d=17976931348623157e292,m=-17976931348623157e292,u=-17976931348623157e292,B=0;c=+i[n+(B<<4)>>3],p=+i[n+(B<<4)+8>>3],f=+i[n+(((0|(e=e+2|0))==(0|A)?0:e)<<4)+8>>3],c<h&&(i[s>>3]=c,h=c),p<d&&(i[o>>3]=p,d=p),c>m?i[t>>3]=c:c=m,p>u&&(i[a>>3]=p,u=p),g=p>0&p<g?p:g,b=p<0&p>b?p:b,y|=+l(+(p-f))>3.141592653589793,(0|(e=B+1|0))!=(0|A);)v=B,m=c,B=e,e=v;y&&(i[a>>3]=b,i[o>>3]=g)}}function st(e){return 0|((e|=0)>>>0<4?0:15)}function ot(e,t){t|=0;var n,A=0,s=0,o=0,a=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,w=0,T=0;if(b=0|r[(e|=0)>>2]){if(i[(y=t+8|0)>>3]=17976931348623157e292,i[(B=t+24|0)>>3]=17976931348623157e292,i[t>>3]=-17976931348623157e292,i[(v=t+16|0)>>3]=-17976931348623157e292,(0|b)>0){for(o=0|r[e+4>>2],m=17976931348623157e292,g=-17976931348623157e292,s=0,A=-1,f=17976931348623157e292,h=17976931348623157e292,p=-17976931348623157e292,c=-17976931348623157e292,C=0;a=+i[o+(C<<4)>>3],d=+i[o+(C<<4)+8>>3],u=+i[o+(((0|(w=A+2|0))==(0|b)?0:w)<<4)+8>>3],a<f&&(i[y>>3]=a,f=a),d<h&&(i[B>>3]=d,h=d),a>p?i[t>>3]=a:a=p,d>c&&(i[v>>3]=d,c=d),m=d>0&d<m?d:m,g=d<0&d>g?d:g,s|=+l(+(d-u))>3.141592653589793,(0|(A=C+1|0))!=(0|b);)w=C,p=a,C=A,A=w;s&&(i[v>>3]=g,i[B>>3]=m)}}else r[t>>2]=0,r[t+4>>2]=0,r[t+8>>2]=0,r[t+12>>2]=0,r[t+16>>2]=0,r[t+20>>2]=0,r[t+24>>2]=0,r[t+28>>2]=0;if(!((0|(A=0|r[(w=e+8|0)>>2]))<=0)){n=e+12|0,M=0;do{if(o=0|r[n>>2],s=M,B=t+((M=M+1|0)<<5)|0,v=0|r[o+(s<<3)>>2]){if(i[(C=t+(M<<5)+8|0)>>3]=17976931348623157e292,i[(e=t+(M<<5)+24|0)>>3]=17976931348623157e292,i[B>>3]=-17976931348623157e292,i[(_=t+(M<<5)+16|0)>>3]=-17976931348623157e292,(0|v)>0){for(b=0|r[o+(s<<3)+4>>2],m=17976931348623157e292,g=-17976931348623157e292,o=0,s=-1,y=0,f=17976931348623157e292,h=17976931348623157e292,d=-17976931348623157e292,c=-17976931348623157e292;a=+i[b+(y<<4)>>3],p=+i[b+(y<<4)+8>>3],u=+i[b+(((0|(s=s+2|0))==(0|v)?0:s)<<4)+8>>3],a<f&&(i[C>>3]=a,f=a),p<h&&(i[e>>3]=p,h=p),a>d?i[B>>3]=a:a=d,p>c&&(i[_>>3]=p,c=p),m=p>0&p<m?p:m,g=p<0&p>g?p:g,o|=+l(+(p-u))>3.141592653589793,(0|(s=y+1|0))!=(0|v);)T=y,y=s,d=a,s=T;o&&(i[_>>3]=g,i[e>>3]=m)}}else r[B>>2]=0,r[B+4>>2]=0,r[B+8>>2]=0,r[B+12>>2]=0,r[B+16>>2]=0,r[B+20>>2]=0,r[B+24>>2]=0,r[B+28>>2]=0,A=0|r[w>>2]}while((0|M)<(0|A))}}function at(e,t,n){var A=0,i=0,s=0;if(!(0|rt(e|=0,t|=0,n|=0)))return 0|(i=0);if((0|r[(i=e+8|0)>>2])<=0)return 0|(i=1);for(A=e+12|0,e=0;;){if(s=e,e=e+1|0,0|rt((0|r[A>>2])+(s<<3)|0,t+(e<<5)|0,n)){e=0,A=6;break}if((0|e)>=(0|r[i>>2])){e=1,A=6;break}}return 6==(0|A)?0|e:0}function lt(e,t,n,A){A|=0;var i,s,o=0,a=0,l=0,c=0,u=0;if(s=L,L=L+16|0,i=s,!(0|rt(e|=0,t|=0,l=(n|=0)+8|0)))return L=s,0|(c=0);c=e+8|0;e:do{if((0|r[c>>2])>0){for(a=e+12|0,o=0;;){if(u=o,o=o+1|0,0|rt((0|r[a>>2])+(u<<3)|0,t+(o<<5)|0,l)){o=0;break}if((0|o)>=(0|r[c>>2]))break e}return L=s,0|o}}while(0);if(0|ct(e,t,n,A))return L=s,0|(u=0);r[i>>2]=r[n>>2],r[i+4>>2]=l,o=0|r[c>>2];e:do{if((0|o)>0)for(e=e+12|0,l=0,a=o;;){if(o=0|r[e>>2],(0|r[o+(l<<3)>>2])>0){if(0|rt(i,A,0|r[o+(l<<3)+4>>2])){o=0;break e}if(o=l+1|0,0|ct((0|r[e>>2])+(l<<3)|0,t+(o<<5)|0,n,A)){o=0;break e}a=0|r[c>>2]}else o=l+1|0;if(!((0|o)<(0|a))){o=1;break}l=o}else o=1}while(0);return L=s,0|(u=o)}function ct(e,t,n,A){e|=0,n|=0;var s,o,a,l,c,u,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,w=0,T=0;if(u=L,L=L+176|0,l=u+172|0,f=u+168|0,c=u,!(0|$(t|=0,A|=0)))return L=u,0|(e=0);if(function(e,t,n,A){var s,o,a,l,c;t|=0,n|=0,A|=0,e=(o=+i[16+(e|=0)>>3])<(c=+i[e+24>>3]),s=(l=+i[t+16>>3])<(a=+i[t+24>>3]),t=c-l<a-o,r[n>>2]=e?s|t?1:2:0,r[A>>2]=s?e?1:t?2:1:0}(t,A,l,f),Jt(0|c,0|n,168),(0|r[n>>2])>0){t=0;do{C=+ze(+i[(w=c+8+(t<<4)+8|0)>>3],0|r[f>>2]),i[w>>3]=C,t=t+1|0}while((0|t)<(0|r[n>>2]))}o=+i[A>>3],a=+i[A+8>>3],C=+ze(+i[A+16>>3],0|r[f>>2]),s=+ze(+i[A+24>>3],0|r[f>>2]);e:do{if((0|r[e>>2])>0){if(A=e+4|0,(0|(f=0|r[c>>2]))<=0)for(t=0;;)if((0|(t=t+1|0))>=(0|r[e>>2])){t=0;break e}for(n=0;;){if(t=0|r[A>>2],B=+i[t+(n<<4)>>3],v=+ze(+i[t+(n<<4)+8>>3],0|r[l>>2]),t=0|r[A>>2],w=(0|(n=n+1|0))%(0|r[e>>2])|0,h=+i[t+(w<<4)>>3],d=+ze(+i[t+(w<<4)+8>>3],0|r[l>>2]),!(B>=o)|!(h>=o)&&!(B<=a)|!(h<=a)&&!(v<=s)|!(d<=s)&&!(v>=C)|!(d>=C)){y=h-B,g=d-v,t=0;do{if(T=t,w=(0|(t=t+1|0))==(0|f)?0:t,h=+i[c+8+(T<<4)+8>>3],d=+i[c+8+(w<<4)+8>>3]-h,p=+i[c+8+(T<<4)>>3],!(0==(b=y*d-g*(m=+i[c+8+(w<<4)>>3]-p))||(_=v-h,M=B-p,m=(_*m-d*M)/b,m<0|m>1))&&(b=(y*_-g*M)/b)>=0&b<=1){t=1;break e}}while((0|t)<(0|f))}if((0|n)>=(0|r[e>>2])){t=0;break}}}else t=0}while(0);return L=u,0|(T=t)}function ut(e,t,n,A){var i=0,s=0,o=0;if(0|ct(e|=0,t|=0,n|=0,A|=0))return 0|(s=1);if((0|r[(s=e+8|0)>>2])<=0)return 0|(s=0);for(i=e+12|0,e=0;;){if(o=e,e=e+1|0,0|ct((0|r[i>>2])+(o<<3)|0,t+(e<<5)|0,n,A)){e=1,i=6;break}if((0|e)>=(0|r[s>>2])){e=0,i=6;break}}return 6==(0|i)?0|e:0}function ft(e,t,n,A,r){t|=0,n|=0,A|=0,r|=0;var s,o,a,l,c,u,f,h=0;l=+i[(e|=0)>>3],a=+i[t>>3]-l,o=+i[e+8>>3],s=+i[t+8>>3]-o,u=+i[n>>3],h=((h=+i[A>>3]-u)*(o-(f=+i[n+8>>3]))-(l-u)*(c=+i[A+8>>3]-f))/(a*c-s*h),i[r>>3]=l+a*h,i[r+8>>3]=o+s*h}function ht(e,t){return t|=0,+l(+(+i[(e|=0)>>3]-+i[t>>3]))<1.1920928955078125e-7?0|(t=+l(+(+i[e+8>>3]-+i[t+8>>3]))<1.1920928955078125e-7):0|(t=0)}function dt(e,t,n){n|=0;var A,i,s,o,a=0,l=0,c=0,u=0;if(o=L,L=L+32|0,u=o,0|(a=0|Oe(e|=0,t|=0,i=o+16|0)))return L=o,0|(n=a);A=0|Be(e,t),s=0|xe(e,t),function(e,t){e=7696+(28*(e|=0)|0)|0,r[(t|=0)>>2]=r[e>>2],r[t+4>>2]=r[e+4>>2],r[t+8>>2]=r[e+8>>2],r[t+12>>2]=r[e+12>>2]}(A,u),a=0|function(e,t){e|=0;var n=0,A=0;if((t|=0)>>>0>20)return-1;do{if((0|r[11120+(216*t|0)>>2])!=(0|e))if((0|r[11120+(216*t|0)+8>>2])!=(0|e))if((0|r[11120+(216*t|0)+16>>2])!=(0|e))if((0|r[11120+(216*t|0)+24>>2])!=(0|e))if((0|r[11120+(216*t|0)+32>>2])!=(0|e))if((0|r[11120+(216*t|0)+40>>2])!=(0|e))if((0|r[11120+(216*t|0)+48>>2])!=(0|e))if((0|r[11120+(216*t|0)+56>>2])!=(0|e))if((0|r[11120+(216*t|0)+64>>2])!=(0|e))if((0|r[11120+(216*t|0)+72>>2])!=(0|e))if((0|r[11120+(216*t|0)+80>>2])!=(0|e))if((0|r[11120+(216*t|0)+88>>2])!=(0|e))if((0|r[11120+(216*t|0)+96>>2])!=(0|e))if((0|r[11120+(216*t|0)+104>>2])!=(0|e))if((0|r[11120+(216*t|0)+112>>2])!=(0|e))if((0|r[11120+(216*t|0)+120>>2])!=(0|e))if((0|r[11120+(216*t|0)+128>>2])!=(0|e)){if((0|r[11120+(216*t|0)+136>>2])!=(0|e)){if((0|r[11120+(216*t|0)+144>>2])==(0|e)){e=0,n=2,A=0;break}if((0|r[11120+(216*t|0)+152>>2])==(0|e)){e=0,n=2,A=1;break}if((0|r[11120+(216*t|0)+160>>2])==(0|e)){e=0,n=2,A=2;break}if((0|r[11120+(216*t|0)+168>>2])==(0|e)){e=1,n=2,A=0;break}if((0|r[11120+(216*t|0)+176>>2])==(0|e)){e=1,n=2,A=1;break}if((0|r[11120+(216*t|0)+184>>2])==(0|e)){e=1,n=2,A=2;break}if((0|r[11120+(216*t|0)+192>>2])==(0|e)){e=2,n=2,A=0;break}if((0|r[11120+(216*t|0)+200>>2])==(0|e)){e=2,n=2,A=1;break}if((0|r[11120+(216*t|0)+208>>2])==(0|e)){e=2,n=2,A=2;break}return-1}e=2,n=1,A=2}else e=2,n=1,A=1;else e=2,n=1,A=0;else e=1,n=1,A=2;else e=1,n=1,A=1;else e=1,n=1,A=0;else e=0,n=1,A=2;else e=0,n=1,A=1;else e=0,n=1,A=0;else e=2,n=0,A=2;else e=2,n=0,A=1;else e=2,n=0,A=0;else e=1,n=0,A=2;else e=1,n=0,A=1;else e=1,n=0,A=0;else e=0,n=0,A=2;else e=0,n=0,A=1;else e=0,n=0,A=0}while(0);return 0|r[11120+(216*t|0)+(72*n|0)+(24*e|0)+(A<<3)+4>>2]}(A,0|r[i>>2]);do{if(0|Q(A)){switch(0|A){case 4:l=0;break;case 14:l=1;break;case 24:l=2;break;case 38:l=3;break;case 49:l=4;break;case 58:l=5;break;case 63:l=6;break;case 72:l=7;break;case 83:l=8;break;case 97:l=9;break;case 107:l=10;break;case 117:l=11;break;default:T(27634,27636,75,27645)}if(c=0|r[26480+(24*l|0)+8>>2],t=0|r[26480+(24*l|0)+16>>2],(0|(e=0|r[i>>2]))!=(0|r[u>>2])&&(u=0|j(A))|(0|(e=0|r[i>>2]))==(0|t)&&(a=(a+1|0)%6|0),3==(0|s)&(0|e)==(0|t)){a=(a+5|0)%6|0;break}5==(0|s)&(0|e)==(0|c)&&(a=(a+1|0)%6|0)}}while(0);return r[n>>2]=a,L=o,0|(n=0)}function pt(e,t,n,A){n|=0,A|=0;var i,s,o,a,l,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0;if(l=L,L=L+32|0,B=l+24|0,a=l+20|0,o=l+8|0,s=l+16|0,i=l,d=(d=!(0|we(e|=0,t|=0)))?6:5,m=0|Gt(0|e,0|t,52),w(),d>>>0<=n>>>0)return L=l,0|(A=2);!(g=!(0|(m&=15)))&&!((b=0|Vt(7,0,3*(15^m)|0))&e|0)&!((0|w())&t)?c=n:u=4;e:do{if(4==(0|u)){if((0|((c=!!(0|we(e,t)))?4:5))<(0|n))return L=l,0|(A=1);if(0|dt(e,t,B))return L=l,0|(A=1);if(u=(0|r[B>>2])+n|0,7==(0|(b=0|r[(c=c?26768+((0|u)%5<<2)|0:26800+((0|u)%6<<2)|0)>>2])))return L=l,0|(A=1);r[a>>2]=0,c=0|O(e,t,b,a,o);do{if(!c){if(p=0|r[(h=o)>>2],u=(f=(h=0|r[h+4>>2])>>>0<t>>>0|(0|h)==(0|t)&p>>>0<e>>>0)?p:e,f=f?h:t,!g&&!(p&(g=0|Vt(7,0,3*(15^m)|0))|0)&!(h&(0|w())))c=n;else{if(h=(n+-1+d|0)%(0|d)|0,c=0|we(e,t),(0|h)<0&&T(27634,27636,248,27661),(0|((d=!!(0|c))?4:5))<(0|h)&&T(27634,27636,248,27661),0|dt(e,t,B)&&T(27634,27636,248,27661),c=(0|r[B>>2])+h|0,7==(0|(h=0|r[(c=d?26768+((0|c)%5<<2)|0:26800+((0|c)%6<<2)|0)>>2]))&&T(27634,27636,248,27661),r[s>>2]=0,0|(c=0|O(e,t,h,s,i)))break;d=0|r[(p=i)>>2],p=0|r[p+4>>2];do{if(p>>>0<f>>>0|(0|p)==(0|f)&d>>>0<u>>>0){if(u=0|we(d,p)?0|G(d,p,e,t):0|r[26864+(((0|r[s>>2])+(0|r[26832+(h<<2)>>2])|0)%6<<2)>>2],c=0|we(d,p),(u+-1|0)>>>0>5){c=-1,u=d,f=p;break}if(1==(0|u)&(c=!!(0|c))){c=-1,u=d,f=p;break}do{if(!(0|dt(d,p,B))){if(c){c=(5+(0|r[26416+(u<<2)>>2])-(0|r[B>>2])|0)%5|0;break}c=(6+(0|r[26448+(u<<2)>>2])-(0|r[B>>2])|0)%6|0;break}c=-1}while(0);u=d,f=p}else c=n}while(0);p=0|r[(h=o)>>2],h=0|r[h+4>>2]}if((0|u)==(0|p)&(0|f)==(0|h)){if(e=(d=!!(0|we(p,h)))?0|G(p,h,e,t):0|r[26864+(((0|r[a>>2])+(0|r[26832+(b<<2)>>2])|0)%6<<2)>>2],c=0|we(p,h),(e+-1|0)>>>0<=5&&!(1==(0|e)&(y=!!(0|c))))do{if(!(0|dt(p,h,B))){if(y){c=(5+(0|r[26416+(e<<2)>>2])-(0|r[B>>2])|0)%5|0;break}c=(6+(0|r[26448+(e<<2)>>2])-(0|r[B>>2])|0)%6|0;break}c=-1}while(0);else c=-1;c=6==(0|(c=c+1|0))|d&5==(0|c)?0:c}t=f,e=u;break e}}while(0);return L=l,0|(A=c)}}while(0);return y=0|Vt(0|c,0,56),B=w()|-2130706433&t|536870912,r[A>>2]=y|e,r[A+4>>2]=B,L=l,0|(A=0)}function mt(e,t){e|=0;var n,A,i=0,s=0;return A=L,L=L+16|0,n=A,!0&536870912==(2013265920&(t|=0))&&0|ve(e,i=-2130706433&t|134217728)?(s=0|Gt(0|e,0|t,56),w(),i=(s=!(0|pt(e,i,7&s,n)))&((0|r[(i=n)>>2])==(0|e)?(0|r[i+4>>2])==(0|t):0)&1,L=A,0|i):(L=A,0|(i=0))}function gt(e,t,n,A){e|=0,A|=0;var i,s,o,a=0,l=0,c=0,u=0,f=0,h=0;o=L,L=L+208|0,i=o,s=o+192|0,c=0|y(n|=0,t|=0),r[(u=s)>>2]=1,r[u+4>>2]=0;e:do{if(0|c){for(u=0-n|0,r[i+4>>2]=n,r[i>>2]=n,a=2,t=n,l=n;t=t+n+l|0,r[i+(a<<2)>>2]=t,t>>>0<c>>>0;)h=l,a=a+1|0,l=t,t=h;if((l=e+c+u|0)>>>0>e>>>0){c=l,a=1,t=1;do{do{if(3&~t){if((0|r[i+((t=a+-1|0)<<2)>>2])>>>0<(c-e|0)>>>0?bt(e,n,A,a,i):Bt(e,n,A,s,a,0,i),1==(0|a)){vt(s,1),a=0;break}vt(s,t),a=1;break}bt(e,n,A,a,i),yt(s,2),a=a+2|0}while(0);t=1|r[s>>2],r[s>>2]=t,e=e+n|0}while(e>>>0<l>>>0)}else a=1,t=1;for(Bt(e,n,A,s,a,0,i),l=s+4|0;;){if(1==(0|a)&1==(0|t)){if(!(0|r[l>>2]))break e;f=19}else(0|a)<2?f=19:(vt(s,2),h=a+-2|0,r[s>>2]=7^r[s>>2],yt(s,1),Bt(e+(0-(0|r[i+(h<<2)>>2]))+u|0,n,A,s,a+-1|0,1,i),vt(s,1),t=1|r[s>>2],r[s>>2]=t,Bt(e=e+u|0,n,A,s,h,1,i),a=h);19==(0|f)&&(f=0,yt(s,t=0|Ct(s)),e=e+u|0,a=t+a|0,t=0|r[s>>2])}}}while(0);L=o}function bt(e,t,n,A,i){e|=0,t|=0,n|=0,A|=0,i|=0;var s,o,a=0,l=0,c=0,u=0,f=0;o=L,L=L+240|0,r[(s=o)>>2]=e;e:do{if((0|A)>1)for(f=0-t|0,c=e,a=A,A=1,l=e;;){if(e=(c=c+f|0)+(0-(0|r[i+((u=a+-2|0)<<2)>>2]))|0,(0|Xt[3&n](l,e))>-1&&(0|Xt[3&n](l,c))>-1)break e;if(l=s+(A<<2)|0,(0|Xt[3&n](e,c))>-1?(r[l>>2]=e,a=a+-1|0):(r[l>>2]=c,e=c,a=u),A=A+1|0,(0|a)<=1)break e;c=e,l=0|r[s>>2]}else A=1}while(0);Mt(t,s,A),L=o}function yt(e,t){var n,A=0,i=0;n=(e|=0)+4|0,(t|=0)>>>0>31?(i=0|r[n>>2],r[e>>2]=i,r[n>>2]=0,t=t+-32|0,A=0):(A=0|r[n>>2],i=0|r[e>>2]),r[e>>2]=A<<32-t|i>>>t,r[n>>2]=A>>>t}function Bt(e,t,n,A,i,s,o){e|=0,t|=0,n|=0,i|=0,s|=0,o|=0;var a,l,c,u,f=0,h=0,d=0,p=0;u=L,L=L+240|0,l=u+232|0,c=u,p=0|r[(A|=0)>>2],r[l>>2]=p,h=0|r[A+4>>2],r[(a=l+4|0)>>2]=h,r[c>>2]=e;e:do{if(1!=(0|p)|!!(0|h)&&(d=0-t|0,f=e+(0-(0|r[o+(i<<2)>>2]))|0,(0|Xt[3&n](f,e))>=1))for(A=1,s=!(0|s),h=f;;){if(s&(0|i)>1){if(s=e+d|0,f=0|r[o+(i+-2<<2)>>2],(0|Xt[3&n](s,h))>-1){f=10;break e}if((0|Xt[3&n](s+(0-f)|0,h))>-1){f=10;break e}}if(s=A+1|0,r[c+(A<<2)>>2]=h,yt(l,p=0|Ct(l)),i=p+i|0,!(1!=(0|r[l>>2])|!!(0|r[a>>2]))){A=s,e=h,f=10;break e}if(e=h+(0-(0|r[o+(i<<2)>>2]))|0,(0|Xt[3&n](e,0|r[c>>2]))<1){e=h,A=s,s=0,f=9;break}p=h,A=s,s=1,h=e,e=p}else A=1,f=9}while(0);9!=(0|f)||0|s||(f=10),10==(0|f)&&(Mt(t,c,A),bt(e,t,n,i,o)),L=u}function vt(e,t){var n,A=0,i=0;n=(e|=0)+4|0,(t|=0)>>>0>31?(i=0|r[e>>2],r[n>>2]=i,r[e>>2]=0,t=t+-32|0,A=0):(A=0|r[e>>2],i=0|r[n>>2]),r[n>>2]=A>>>(32-t|0)|i<<t,r[e>>2]=A<<t}function Ct(e){var t=0;return(t=0|_t((0|r[(e|=0)>>2])-1|0))?0|t:0|(0|(t=0|_t(0|r[e+4>>2]))?t+32:0)}function _t(e){var t=0;if(e|=0)if(1&e)e=0;else for(t=e,e=0;e=e+1|0,!(2&t);)t>>>=1;else e=32;return 0|e}function Mt(e,t,n){e|=0,t|=0,n|=0;var A,i=0,s=0,o=0,a=0;A=L,L=L+256|0,i=A;e:do{if((0|n)>=2&&(r[(o=t+(n<<2)|0)>>2]=i,0|e))for(;;){s=e>>>0<256?e:256,Jt(0|i,0|r[t>>2],0|s),i=0;do{a=t+(i<<2)|0,i=i+1|0,Jt(0|r[a>>2],0|r[t+(i<<2)>>2],0|s),r[a>>2]=(0|r[a>>2])+s}while((0|i)!=(0|n));if(!(e=e-s|0))break e;i=0|r[o>>2]}}while(0);L=A}function wt(e){return 0|+Yt(+(e=+e))}function Tt(e){e|=0;var t,n=0,A=0,i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0;t=L,L=L+16|0,d=t;do{if(e>>>0<245){if(e=(u=e>>>0<11?16:e+11&-8)>>>3,3&(A=(h=0|r[6921])>>>e))return i=0|r[(A=(e=27724+((n=(1&A^1)+e|0)<<1<<2)|0)+8|0)>>2],(0|(o=0|r[(s=i+8|0)>>2]))==(0|e)?r[6921]=h&~(1<<n):(r[o+12>>2]=e,r[A>>2]=o),C=n<<3,r[i+4>>2]=3|C,r[(C=i+C+4|0)>>2]=1|r[C>>2],L=t,0|(C=s);if(u>>>0>(f=0|r[6923])>>>0){if(0|A)return n=((n=A<<e&((n=2<<e)|0-n))&0-n)-1|0,o=0|r[(e=(n=27724+((i=((A=(n>>>=l=n>>>12&16)>>>5&8)|l|(o=(n>>>=A)>>>2&4)|(e=(n>>>=o)>>>1&2)|(i=(n>>>=e)>>>1&1))+(n>>>i)|0)<<1<<2)|0)+8|0)>>2],(0|(A=0|r[(l=o+8|0)>>2]))==(0|n)?(e=h&~(1<<i),r[6921]=e):(r[A+12>>2]=n,r[e>>2]=A,e=h),a=(C=i<<3)-u|0,r[o+4>>2]=3|u,r[(s=o+u|0)+4>>2]=1|a,r[o+C>>2]=a,0|f&&(i=0|r[6926],A=27724+((n=f>>>3)<<1<<2)|0,e&(n=1<<n)?n=0|r[(e=A+8|0)>>2]:(r[6921]=e|n,n=A,e=A+8|0),r[e>>2]=i,r[n+12>>2]=i,r[i+8>>2]=n,r[i+12>>2]=A),r[6923]=a,r[6926]=s,L=t,0|(C=l);if(o=0|r[6922]){for(A=(o&0-o)-1|0,A=c=0|r[27988+(((i=(A>>>=s=A>>>12&16)>>>5&8)|s|(a=(A>>>=i)>>>2&4)|(l=(A>>>=a)>>>1&2)|(c=(A>>>=l)>>>1&1))+(A>>>c)<<2)>>2],l=c,c=(-8&r[c+4>>2])-u|0;(e=0|r[A+16>>2])||(e=0|r[A+20>>2]);)A=e,l=(s=(a=(-8&r[e+4>>2])-u|0)>>>0<c>>>0)?e:l,c=s?a:c;if((a=l+u|0)>>>0>l>>>0){s=0|r[l+24>>2],n=0|r[l+12>>2];do{if((0|n)==(0|l)){if(!(n=0|r[(e=l+20|0)>>2])&&!(n=0|r[(e=l+16|0)>>2])){A=0;break}for(;;)if(A=0|r[(i=n+20|0)>>2])n=A,e=i;else{if(!(A=0|r[(i=n+16|0)>>2]))break;n=A,e=i}r[e>>2]=0,A=n}else A=0|r[l+8>>2],r[A+12>>2]=n,r[n+8>>2]=A,A=n}while(0);do{if(0|s){if(n=0|r[l+28>>2],(0|l)==(0|r[(e=27988+(n<<2)|0)>>2])){if(r[e>>2]=A,!A){r[6922]=o&~(1<<n);break}}else if(r[((0|r[(C=s+16|0)>>2])==(0|l)?C:s+20)>>2]=A,!A)break;r[A+24>>2]=s,0|(n=0|r[l+16>>2])&&(r[A+16>>2]=n,r[n+24>>2]=A),0|(n=0|r[l+20>>2])&&(r[A+20>>2]=n,r[n+24>>2]=A)}}while(0);return c>>>0<16?(C=c+u|0,r[l+4>>2]=3|C,r[(C=l+C+4|0)>>2]=1|r[C>>2]):(r[l+4>>2]=3|u,r[a+4>>2]=1|c,r[a+c>>2]=c,0|f&&(i=0|r[6926],A=27724+((n=f>>>3)<<1<<2)|0,(n=1<<n)&h?n=0|r[(e=A+8|0)>>2]:(r[6921]=n|h,n=A,e=A+8|0),r[e>>2]=i,r[n+12>>2]=i,r[i+8>>2]=n,r[i+12>>2]=A),r[6923]=c,r[6926]=a),L=t,0|(C=l+8|0)}h=u}else h=u}else h=u}else if(e>>>0<=4294967231)if(u=-8&(e=e+11|0),i=0|r[6922]){s=0-u|0,c=(e>>>=8)?u>>>0>16777215?31:u>>>((c=14-((l=((g=e<<(h=(e+1048320|0)>>>16&8))+520192|0)>>>16&4)|h|(c=((g<<=l)+245760|0)>>>16&2))+(g<<c>>>15)|0)+7|0)&1|c<<1:0,A=0|r[27988+(c<<2)>>2];e:do{if(A)for(e=0,l=u<<(31==(0|c)?0:25-(c>>>1)|0),o=0;;){if((a=(-8&r[A+4>>2])-u|0)>>>0<s>>>0){if(!a){e=A,s=0,g=65;break e}e=A,s=a}if(o=!(0|(g=0|r[A+20>>2]))|(0|g)==(0|(A=0|r[A+16+(l>>>31<<2)>>2]))?o:g,!A){A=o,g=61;break}l<<=1}else A=0,e=0,g=61}while(0);if(61==(0|g)){if(!(0|A)&!(0|e)){if(!(e=((e=2<<c)|0-e)&i)){h=u;break}h=(e&0-e)-1|0,e=0,A=0|r[27988+(((o=(h>>>=a=h>>>12&16)>>>5&8)|a|(l=(h>>>=o)>>>2&4)|(c=(h>>>=l)>>>1&2)|(A=(h>>>=c)>>>1&1))+(h>>>A)<<2)>>2]}A?g=65:(l=e,a=s)}if(65==(0|g))for(o=A;;){if(s=(A=(h=(-8&r[o+4>>2])-u|0)>>>0<s>>>0)?h:s,e=A?o:e,(A=0|r[o+16>>2])||(A=0|r[o+20>>2]),!A){l=e,a=s;break}o=A}if(0|l&&a>>>0<((0|r[6923])-u|0)>>>0&&(f=l+u|0)>>>0>l>>>0){o=0|r[l+24>>2],n=0|r[l+12>>2];do{if((0|n)==(0|l)){if(!(n=0|r[(e=l+20|0)>>2])&&!(n=0|r[(e=l+16|0)>>2])){n=0;break}for(;;)if(A=0|r[(s=n+20|0)>>2])n=A,e=s;else{if(!(A=0|r[(s=n+16|0)>>2]))break;n=A,e=s}r[e>>2]=0}else C=0|r[l+8>>2],r[C+12>>2]=n,r[n+8>>2]=C}while(0);do{if(o){if(e=0|r[l+28>>2],(0|l)==(0|r[(A=27988+(e<<2)|0)>>2])){if(r[A>>2]=n,!n){i&=~(1<<e),r[6922]=i;break}}else if(r[((0|r[(C=o+16|0)>>2])==(0|l)?C:o+20)>>2]=n,!n)break;r[n+24>>2]=o,0|(e=0|r[l+16>>2])&&(r[n+16>>2]=e,r[e+24>>2]=n),(e=0|r[l+20>>2])&&(r[n+20>>2]=e,r[e+24>>2]=n)}}while(0);e:do{if(a>>>0<16)C=a+u|0,r[l+4>>2]=3|C,r[(C=l+C+4|0)>>2]=1|r[C>>2];else{if(r[l+4>>2]=3|u,r[f+4>>2]=1|a,r[f+a>>2]=a,n=a>>>3,a>>>0<256){A=27724+(n<<1<<2)|0,(e=0|r[6921])&(n=1<<n)?n=0|r[(e=A+8|0)>>2]:(r[6921]=e|n,n=A,e=A+8|0),r[e>>2]=f,r[n+12>>2]=f,r[f+8>>2]=n,r[f+12>>2]=A;break}if(n=27988+((A=(n=a>>>8)?a>>>0>16777215?31:a>>>((A=14-((B=((C=n<<(v=(n+1048320|0)>>>16&8))+520192|0)>>>16&4)|v|(A=((C<<=B)+245760|0)>>>16&2))+(C<<A>>>15)|0)+7|0)&1|A<<1:0)<<2)|0,r[f+28>>2]=A,r[(e=f+16|0)+4>>2]=0,r[e>>2]=0,!(i&(e=1<<A))){r[6922]=i|e,r[n>>2]=f,r[f+24>>2]=n,r[f+12>>2]=f,r[f+8>>2]=f;break}n=0|r[n>>2];t:do{if((-8&r[n+4>>2])!=(0|a)){for(i=a<<(31==(0|A)?0:25-(A>>>1)|0);e=0|r[(A=n+16+(i>>>31<<2)|0)>>2];){if((-8&r[e+4>>2])==(0|a)){n=e;break t}i<<=1,n=e}r[A>>2]=f,r[f+24>>2]=n,r[f+12>>2]=f,r[f+8>>2]=f;break e}}while(0);C=0|r[(v=n+8|0)>>2],r[C+12>>2]=f,r[v>>2]=f,r[f+8>>2]=C,r[f+12>>2]=n,r[f+24>>2]=0}}while(0);return L=t,0|(C=l+8|0)}h=u}else h=u;else h=-1}while(0);if((A=0|r[6923])>>>0>=h>>>0)return n=A-h|0,e=0|r[6926],n>>>0>15?(C=e+h|0,r[6926]=C,r[6923]=n,r[C+4>>2]=1|n,r[e+A>>2]=n,r[e+4>>2]=3|h):(r[6923]=0,r[6926]=0,r[e+4>>2]=3|A,r[(C=e+A+4|0)>>2]=1|r[C>>2]),L=t,0|(C=e+8|0);if((a=0|r[6924])>>>0>h>>>0)return B=a-h|0,r[6924]=B,v=(C=0|r[6927])+h|0,r[6927]=v,r[v+4>>2]=1|B,r[C+4>>2]=3|h,L=t,0|(C=C+8|0);if(0|r[7039]?e=0|r[7041]:(r[7041]=4096,r[7040]=4096,r[7042]=-1,r[7043]=-1,r[7044]=0,r[7032]=0,r[7039]=-16&d^1431655768,e=4096),l=h+48|0,(u=(o=e+(c=h+47|0)|0)&(s=0-e|0))>>>0<=h>>>0)return L=t,0|(C=0);if(0|(e=0|r[7031])&&(d=(f=0|r[7029])+u|0)>>>0<=f>>>0|d>>>0>e>>>0)return L=t,0|(C=0);e:do{if(4&r[7032])n=0,g=143;else{A=0|r[6927];t:do{if(A){for(i=28132;!((d=0|r[i>>2])>>>0<=A>>>0&&(d+(0|r[i+4>>2])|0)>>>0>A>>>0);){if(!(e=0|r[i+8>>2])){g=128;break t}i=e}if((n=o-a&s)>>>0<2147483647)if((0|(e=0|Wt(0|n)))==((0|r[i>>2])+(0|r[i+4>>2])|0)){if(-1!=(0|e)){a=n,o=e,g=145;break e}}else i=e,g=136;else n=0}else g=128}while(0);do{if(128==(0|g))if(-1!=(0|(A=0|Wt(0)))&&(n=A,m=(n=((m=(p=0|r[7040])+-1|0)&n|0?(m+n&0-p)-n|0:0)+u|0)+(p=0|r[7029])|0,n>>>0>h>>>0&n>>>0<2147483647)){if(0|(d=0|r[7031])&&m>>>0<=p>>>0|m>>>0>d>>>0){n=0;break}if((0|(e=0|Wt(0|n)))==(0|A)){a=n,o=A,g=145;break e}i=e,g=136}else n=0}while(0);do{if(136==(0|g)){if(A=0-n|0,!(l>>>0>n>>>0&n>>>0<2147483647&-1!=(0|i))){if(-1==(0|i)){n=0;break}a=n,o=i,g=145;break e}if((e=c-n+(e=0|r[7041])&0-e)>>>0>=2147483647){a=n,o=i,g=145;break e}if(-1==(0|Wt(0|e))){Wt(0|A),n=0;break}a=e+n|0,o=i,g=145;break e}}while(0);r[7032]=4|r[7032],g=143}}while(0);if(143==(0|g)&&u>>>0<2147483647&&!(-1==(0|(B=0|Wt(0|u)))|1^(y=(b=(m=0|Wt(0))-B|0)>>>0>(h+40|0)>>>0)|B>>>0<m>>>0&-1!=(0|B)&-1!=(0|m)^1)&&(a=y?b:n,o=B,g=145),145==(0|g)){n=(0|r[7029])+a|0,r[7029]=n,n>>>0>(0|r[7030])>>>0&&(r[7030]=n),c=0|r[6927];e:do{if(c){for(n=28132;;){if((0|o)==((e=0|r[n>>2])+(A=0|r[n+4>>2])|0)){g=154;break}if(!(i=0|r[n+8>>2]))break;n=i}if(!(154!=(0|g)||(v=n+4|0,8&r[n+12>>2]))&&o>>>0>c>>>0&e>>>0<=c>>>0){r[v>>2]=A+a,v=c+(B=7&(B=c+8|0)?0-B&7:0)|0,B=(C=(0|r[6924])+a|0)-B|0,r[6927]=v,r[6924]=B,r[v+4>>2]=1|B,r[c+C+4>>2]=40,r[6928]=r[7043];break}for(o>>>0<(0|r[6925])>>>0&&(r[6925]=o),A=o+a|0,n=28132;;){if((0|r[n>>2])==(0|A)){g=162;break}if(!(e=0|r[n+8>>2]))break;n=e}if(162==(0|g)&&!(8&r[n+12>>2])){r[n>>2]=o,r[(f=n+4|0)>>2]=(0|r[f>>2])+a,u=(f=o+(7&(f=o+8|0)?0-f&7:0)|0)+h|0,l=(n=A+(7&(n=A+8|0)?0-n&7:0)|0)-f-h|0,r[f+4>>2]=3|h;t:do{if((0|c)==(0|n))C=(0|r[6924])+l|0,r[6924]=C,r[6927]=u,r[u+4>>2]=1|C;else{if((0|r[6926])==(0|n)){C=(0|r[6923])+l|0,r[6923]=C,r[6926]=u,r[u+4>>2]=1|C,r[u+C>>2]=C;break}if(1==(3&(e=0|r[n+4>>2]))){a=-8&e,i=e>>>3;n:do{if(e>>>0<256){if(e=0|r[n+8>>2],(0|(A=0|r[n+12>>2]))==(0|e)){r[6921]=r[6921]&~(1<<i);break}r[e+12>>2]=A,r[A+8>>2]=e;break}o=0|r[n+24>>2],e=0|r[n+12>>2];do{if((0|e)==(0|n)){if(e=0|r[(i=(A=n+16|0)+4|0)>>2])A=i;else if(!(e=0|r[A>>2])){e=0;break}for(;;)if(i=0|r[(s=e+20|0)>>2])e=i,A=s;else{if(!(i=0|r[(s=e+16|0)>>2]))break;e=i,A=s}r[A>>2]=0}else C=0|r[n+8>>2],r[C+12>>2]=e,r[e+8>>2]=C}while(0);if(!o)break;i=27988+((A=0|r[n+28>>2])<<2)|0;do{if((0|r[i>>2])==(0|n)){if(r[i>>2]=e,0|e)break;r[6922]=r[6922]&~(1<<A);break n}if(r[((0|r[(C=o+16|0)>>2])==(0|n)?C:o+20)>>2]=e,!e)break n}while(0);if(r[e+24>>2]=o,0|(i=0|r[(A=n+16|0)>>2])&&(r[e+16>>2]=i,r[i+24>>2]=e),!(A=0|r[A+4>>2]))break;r[e+20>>2]=A,r[A+24>>2]=e}while(0);n=n+a|0,s=a+l|0}else s=l;if(r[(n=n+4|0)>>2]=-2&r[n>>2],r[u+4>>2]=1|s,r[u+s>>2]=s,n=s>>>3,s>>>0<256){A=27724+(n<<1<<2)|0,(e=0|r[6921])&(n=1<<n)?n=0|r[(e=A+8|0)>>2]:(r[6921]=e|n,n=A,e=A+8|0),r[e>>2]=u,r[n+12>>2]=u,r[u+8>>2]=n,r[u+12>>2]=A;break}n=s>>>8;do{if(n){if(s>>>0>16777215){i=31;break}i=s>>>((i=14-((B=((C=n<<(v=(n+1048320|0)>>>16&8))+520192|0)>>>16&4)|v|(i=((C<<=B)+245760|0)>>>16&2))+(C<<i>>>15)|0)+7|0)&1|i<<1}else i=0}while(0);if(n=27988+(i<<2)|0,r[u+28>>2]=i,r[(e=u+16|0)+4>>2]=0,r[e>>2]=0,!((e=0|r[6922])&(A=1<<i))){r[6922]=e|A,r[n>>2]=u,r[u+24>>2]=n,r[u+12>>2]=u,r[u+8>>2]=u;break}n=0|r[n>>2];n:do{if((-8&r[n+4>>2])!=(0|s)){for(i=s<<(31==(0|i)?0:25-(i>>>1)|0);e=0|r[(A=n+16+(i>>>31<<2)|0)>>2];){if((-8&r[e+4>>2])==(0|s)){n=e;break n}i<<=1,n=e}r[A>>2]=u,r[u+24>>2]=n,r[u+12>>2]=u,r[u+8>>2]=u;break t}}while(0);C=0|r[(v=n+8|0)>>2],r[C+12>>2]=u,r[v>>2]=u,r[u+8>>2]=C,r[u+12>>2]=n,r[u+24>>2]=0}}while(0);return L=t,0|(C=f+8|0)}for(n=28132;!((e=0|r[n>>2])>>>0<=c>>>0&&(C=e+(0|r[n+4>>2])|0)>>>0>c>>>0);)n=0|r[n+8>>2];n=(e=(e=(s=C+-47|0)+(7&(e=s+8|0)?0-e&7:0)|0)>>>0<(s=c+16|0)>>>0?c:e)+8|0,v=o+(B=7&(B=o+8|0)?0-B&7:0)|0,B=(A=a+-40|0)-B|0,r[6927]=v,r[6924]=B,r[v+4>>2]=1|B,r[o+A+4>>2]=40,r[6928]=r[7043],r[(A=e+4|0)>>2]=27,r[n>>2]=r[7033],r[n+4>>2]=r[7034],r[n+8>>2]=r[7035],r[n+12>>2]=r[7036],r[7033]=o,r[7034]=a,r[7036]=0,r[7035]=n,n=e+24|0;do{v=n,r[(n=n+4|0)>>2]=7}while((v+8|0)>>>0<C>>>0);if((0|e)!=(0|c)){if(o=e-c|0,r[A>>2]=-2&r[A>>2],r[c+4>>2]=1|o,r[e>>2]=o,n=o>>>3,o>>>0<256){A=27724+(n<<1<<2)|0,(e=0|r[6921])&(n=1<<n)?n=0|r[(e=A+8|0)>>2]:(r[6921]=e|n,n=A,e=A+8|0),r[e>>2]=c,r[n+12>>2]=c,r[c+8>>2]=n,r[c+12>>2]=A;break}if(A=27988+((i=(n=o>>>8)?o>>>0>16777215?31:o>>>((i=14-((B=((C=n<<(v=(n+1048320|0)>>>16&8))+520192|0)>>>16&4)|v|(i=((C<<=B)+245760|0)>>>16&2))+(C<<i>>>15)|0)+7|0)&1|i<<1:0)<<2)|0,r[c+28>>2]=i,r[c+20>>2]=0,r[s>>2]=0,!((n=0|r[6922])&(e=1<<i))){r[6922]=n|e,r[A>>2]=c,r[c+24>>2]=A,r[c+12>>2]=c,r[c+8>>2]=c;break}n=0|r[A>>2];t:do{if((-8&r[n+4>>2])!=(0|o)){for(i=o<<(31==(0|i)?0:25-(i>>>1)|0);e=0|r[(A=n+16+(i>>>31<<2)|0)>>2];){if((-8&r[e+4>>2])==(0|o)){n=e;break t}i<<=1,n=e}r[A>>2]=c,r[c+24>>2]=n,r[c+12>>2]=c,r[c+8>>2]=c;break e}}while(0);C=0|r[(v=n+8|0)>>2],r[C+12>>2]=c,r[v>>2]=c,r[c+8>>2]=C,r[c+12>>2]=n,r[c+24>>2]=0}}else!(0|(C=0|r[6925]))|o>>>0<C>>>0&&(r[6925]=o),r[7033]=o,r[7034]=a,r[7036]=0,r[6930]=r[7039],r[6929]=-1,r[6934]=27724,r[6933]=27724,r[6936]=27732,r[6935]=27732,r[6938]=27740,r[6937]=27740,r[6940]=27748,r[6939]=27748,r[6942]=27756,r[6941]=27756,r[6944]=27764,r[6943]=27764,r[6946]=27772,r[6945]=27772,r[6948]=27780,r[6947]=27780,r[6950]=27788,r[6949]=27788,r[6952]=27796,r[6951]=27796,r[6954]=27804,r[6953]=27804,r[6956]=27812,r[6955]=27812,r[6958]=27820,r[6957]=27820,r[6960]=27828,r[6959]=27828,r[6962]=27836,r[6961]=27836,r[6964]=27844,r[6963]=27844,r[6966]=27852,r[6965]=27852,r[6968]=27860,r[6967]=27860,r[6970]=27868,r[6969]=27868,r[6972]=27876,r[6971]=27876,r[6974]=27884,r[6973]=27884,r[6976]=27892,r[6975]=27892,r[6978]=27900,r[6977]=27900,r[6980]=27908,r[6979]=27908,r[6982]=27916,r[6981]=27916,r[6984]=27924,r[6983]=27924,r[6986]=27932,r[6985]=27932,r[6988]=27940,r[6987]=27940,r[6990]=27948,r[6989]=27948,r[6992]=27956,r[6991]=27956,r[6994]=27964,r[6993]=27964,r[6996]=27972,r[6995]=27972,v=o+(B=7&(B=o+8|0)?0-B&7:0)|0,B=(C=a+-40|0)-B|0,r[6927]=v,r[6924]=B,r[v+4>>2]=1|B,r[o+C+4>>2]=40,r[6928]=r[7043]}while(0);if((n=0|r[6924])>>>0>h>>>0)return B=n-h|0,r[6924]=B,v=(C=0|r[6927])+h|0,r[6927]=v,r[v+4>>2]=1|B,r[C+4>>2]=3|h,L=t,0|(C=C+8|0)}return r[(C=27680)>>2]=12,L=t,0|(C=0)}function Et(e){var t=0,n=0,A=0,i=0,s=0,o=0,a=0,l=0;if(e|=0){n=e+-8|0,i=0|r[6925],l=n+(t=-8&(e=0|r[e+-4>>2]))|0;do{if(1&e)a=n,o=n;else{if(A=0|r[n>>2],!(3&e))return;if(s=A+t|0,(o=n+(0-A)|0)>>>0<i>>>0)return;if((0|r[6926])==(0|o)){if(3&~(t=0|r[(e=l+4|0)>>2])){a=o,t=s;break}return r[6923]=s,r[e>>2]=-2&t,r[o+4>>2]=1|s,void(r[o+s>>2]=s)}if(n=A>>>3,A>>>0<256){if(e=0|r[o+8>>2],(0|(t=0|r[o+12>>2]))==(0|e)){r[6921]=r[6921]&~(1<<n),a=o,t=s;break}r[e+12>>2]=t,r[t+8>>2]=e,a=o,t=s;break}i=0|r[o+24>>2],e=0|r[o+12>>2];do{if((0|e)==(0|o)){if(e=0|r[(n=(t=o+16|0)+4|0)>>2])t=n;else if(!(e=0|r[t>>2])){e=0;break}for(;;)if(n=0|r[(A=e+20|0)>>2])e=n,t=A;else{if(!(n=0|r[(A=e+16|0)>>2]))break;e=n,t=A}r[t>>2]=0}else a=0|r[o+8>>2],r[a+12>>2]=e,r[e+8>>2]=a}while(0);if(i){if(t=0|r[o+28>>2],(0|r[(n=27988+(t<<2)|0)>>2])==(0|o)){if(r[n>>2]=e,!e){r[6922]=r[6922]&~(1<<t),a=o,t=s;break}}else if(r[((0|r[(a=i+16|0)>>2])==(0|o)?a:i+20)>>2]=e,!e){a=o,t=s;break}r[e+24>>2]=i,0|(n=0|r[(t=o+16|0)>>2])&&(r[e+16>>2]=n,r[n+24>>2]=e),(t=0|r[t+4>>2])?(r[e+20>>2]=t,r[t+24>>2]=e,a=o,t=s):(a=o,t=s)}else a=o,t=s}}while(0);if(!(o>>>0>=l>>>0)&&1&(A=0|r[(e=l+4|0)>>2])){if(2&A)r[e>>2]=-2&A,r[a+4>>2]=1|t,r[o+t>>2]=t,i=t;else{if((0|r[6927])==(0|l)){if(l=(0|r[6924])+t|0,r[6924]=l,r[6927]=a,r[a+4>>2]=1|l,(0|a)!=(0|r[6926]))return;return r[6926]=0,void(r[6923]=0)}if((0|r[6926])==(0|l))return l=(0|r[6923])+t|0,r[6923]=l,r[6926]=o,r[a+4>>2]=1|l,void(r[o+l>>2]=l);i=(-8&A)+t|0,n=A>>>3;do{if(A>>>0<256){if(t=0|r[l+8>>2],(0|(e=0|r[l+12>>2]))==(0|t)){r[6921]=r[6921]&~(1<<n);break}r[t+12>>2]=e,r[e+8>>2]=t;break}s=0|r[l+24>>2],e=0|r[l+12>>2];do{if((0|e)==(0|l)){if(e=0|r[(n=(t=l+16|0)+4|0)>>2])t=n;else if(!(e=0|r[t>>2])){n=0;break}for(;;)if(n=0|r[(A=e+20|0)>>2])e=n,t=A;else{if(!(n=0|r[(A=e+16|0)>>2]))break;e=n,t=A}r[t>>2]=0,n=e}else n=0|r[l+8>>2],r[n+12>>2]=e,r[e+8>>2]=n,n=e}while(0);if(0|s){if(e=0|r[l+28>>2],(0|r[(t=27988+(e<<2)|0)>>2])==(0|l)){if(r[t>>2]=n,!n){r[6922]=r[6922]&~(1<<e);break}}else if(r[((0|r[(A=s+16|0)>>2])==(0|l)?A:s+20)>>2]=n,!n)break;r[n+24>>2]=s,0|(t=0|r[(e=l+16|0)>>2])&&(r[n+16>>2]=t,r[t+24>>2]=n),0|(e=0|r[e+4>>2])&&(r[n+20>>2]=e,r[e+24>>2]=n)}}while(0);if(r[a+4>>2]=1|i,r[o+i>>2]=i,(0|a)==(0|r[6926]))return void(r[6923]=i)}if(e=i>>>3,i>>>0<256)return n=27724+(e<<1<<2)|0,(t=0|r[6921])&(e=1<<e)?e=0|r[(t=n+8|0)>>2]:(r[6921]=t|e,e=n,t=n+8|0),r[t>>2]=a,r[e+12>>2]=a,r[a+8>>2]=e,void(r[a+12>>2]=n);e=27988+((A=(e=i>>>8)?i>>>0>16777215?31:i>>>((A=14-((s=((l=e<<(o=(e+1048320|0)>>>16&8))+520192|0)>>>16&4)|o|(A=((l<<=s)+245760|0)>>>16&2))+(l<<A>>>15)|0)+7|0)&1|A<<1:0)<<2)|0,r[a+28>>2]=A,r[a+20>>2]=0,r[a+16>>2]=0,t=0|r[6922],n=1<<A;e:do{if(t&n){e=0|r[e>>2];t:do{if((-8&r[e+4>>2])!=(0|i)){for(A=i<<(31==(0|A)?0:25-(A>>>1)|0);t=0|r[(n=e+16+(A>>>31<<2)|0)>>2];){if((-8&r[t+4>>2])==(0|i)){e=t;break t}A<<=1,e=t}r[n>>2]=a,r[a+24>>2]=e,r[a+12>>2]=a,r[a+8>>2]=a;break e}}while(0);l=0|r[(o=e+8|0)>>2],r[l+12>>2]=a,r[o>>2]=a,r[a+8>>2]=l,r[a+12>>2]=e,r[a+24>>2]=0}else r[6922]=t|n,r[e>>2]=a,r[a+24>>2]=e,r[a+12>>2]=a,r[a+8>>2]=a}while(0);if(l=(0|r[6929])-1|0,r[6929]=l,!(0|l)){for(e=28140;e=0|r[e>>2];)e=e+8|0;r[6929]=-1}}}}function xt(e,t){t|=0;var n=0;return(e|=0)?(n=0|y(t,e),(t|e)>>>0>65535&&(n=((n>>>0)/(e>>>0)|0)==(0|t)?n:-1)):n=0,(e=0|Tt(n))&&3&r[e+-4>>2]?(qt(0|e,0,0|n),0|e):0|e}function St(e,t){t|=0;var n=0,A=0;return(e|=0)?t>>>0>4294967231?(r[(t=27680)>>2]=12,0|(t=0)):(n=0|function(e,t){e|=0,t|=0;var n=0,A=0,i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0;if(u=e+4|0,f=0|r[u>>2],n=-8&f,a=e+n|0,!(3&f))return t>>>0<256?0|(e=0):n>>>0>=(t+4|0)>>>0&&(n-t|0)>>>0<=r[7041]<<1>>>0?0|e:0|(e=0);if(n>>>0>=t>>>0)return(n=n-t|0)>>>0<=15||(c=e+t|0,r[u>>2]=1&f|t|2,r[c+4>>2]=3|n,r[(f=a+4|0)>>2]=1|r[f>>2],It(c,n)),0|e;if((0|r[6927])==(0|a))return n=(c=(0|r[6924])+n|0)-t|0,A=e+t|0,c>>>0<=t>>>0?0|(e=0):(r[u>>2]=1&f|t|2,r[A+4>>2]=1|n,r[6927]=A,r[6924]=n,0|e);if((0|r[6926])==(0|a))return(A=(0|r[6923])+n|0)>>>0<t>>>0?0|(e=0):((n=A-t|0)>>>0>15?(c=e+t|0,A=e+A|0,r[u>>2]=1&f|t|2,r[c+4>>2]=1|n,r[A>>2]=n,r[(A=A+4|0)>>2]=-2&r[A>>2],A=c):(r[u>>2]=1&f|A|2,r[(A=e+A+4|0)>>2]=1|r[A>>2],A=0,n=0),r[6923]=n,r[6926]=A,0|e);if(A=0|r[a+4>>2],2&A)return 0|(e=0);if(l=(-8&A)+n|0,l>>>0<t>>>0)return 0|(e=0);c=l-t|0,i=A>>>3;do{if(A>>>0<256){if(A=0|r[a+8>>2],(0|(n=0|r[a+12>>2]))==(0|A)){r[6921]=r[6921]&~(1<<i);break}r[A+12>>2]=n,r[n+8>>2]=A;break}o=0|r[a+24>>2],n=0|r[a+12>>2];do{if((0|n)==(0|a)){if(n=0|r[(i=(A=a+16|0)+4|0)>>2])A=i;else if(!(n=0|r[A>>2])){i=0;break}for(;;)if(i=0|r[(s=n+20|0)>>2])n=i,A=s;else{if(!(i=0|r[(s=n+16|0)>>2]))break;n=i,A=s}r[A>>2]=0,i=n}else i=0|r[a+8>>2],r[i+12>>2]=n,r[n+8>>2]=i,i=n}while(0);if(0|o){if(n=0|r[a+28>>2],(0|r[(A=27988+(n<<2)|0)>>2])==(0|a)){if(r[A>>2]=i,!i){r[6922]=r[6922]&~(1<<n);break}}else if(r[((0|r[(s=o+16|0)>>2])==(0|a)?s:o+20)>>2]=i,!i)break;r[i+24>>2]=o,0|(A=0|r[(n=a+16|0)>>2])&&(r[i+16>>2]=A,r[A+24>>2]=i),0|(n=0|r[n+4>>2])&&(r[i+20>>2]=n,r[n+24>>2]=i)}}while(0);return c>>>0<16?(r[u>>2]=1&f|l|2,r[(f=e+l+4|0)>>2]=1|r[f>>2],0|e):(a=e+t|0,r[u>>2]=1&f|t|2,r[a+4>>2]=3|c,r[(f=e+l+4|0)>>2]=1|r[f>>2],It(a,c),0|e)}(e+-8|0,t>>>0<11?16:t+11&-8),0|n?0|(t=n+8|0):(n=0|Tt(t))?(Jt(0|n,0|e,0|((A=(-8&(A=0|r[e+-4>>2]))-(3&A?4:8)|0)>>>0<t>>>0?A:t)),Et(e),0|(t=n)):0|(t=0)):0|(t=0|Tt(t))}function It(e,t){var n=0,A=0,i=0,s=0,o=0,a=0;a=(e|=0)+(t|=0)|0,n=0|r[e+4>>2];do{if(1&n)o=e;else{if(i=0|r[e>>2],!(3&n))return;if(o=e+(0-i)|0,t=i+t|0,(0|r[6926])==(0|o)){if(3&~(n=0|r[(e=a+4|0)>>2]))break;return r[6923]=t,r[e>>2]=-2&n,r[o+4>>2]=1|t,void(r[a>>2]=t)}if(A=i>>>3,i>>>0<256){if(e=0|r[o+8>>2],(0|(n=0|r[o+12>>2]))==(0|e)){r[6921]=r[6921]&~(1<<A);break}r[e+12>>2]=n,r[n+8>>2]=e;break}s=0|r[o+24>>2],e=0|r[o+12>>2];do{if((0|e)==(0|o)){if(e=0|r[(A=(n=o+16|0)+4|0)>>2])n=A;else if(!(e=0|r[n>>2])){e=0;break}for(;;)if(A=0|r[(i=e+20|0)>>2])e=A,n=i;else{if(!(A=0|r[(i=e+16|0)>>2]))break;e=A,n=i}r[n>>2]=0}else i=0|r[o+8>>2],r[i+12>>2]=e,r[e+8>>2]=i}while(0);if(s){if(n=0|r[o+28>>2],(0|r[(A=27988+(n<<2)|0)>>2])==(0|o)){if(r[A>>2]=e,!e){r[6922]=r[6922]&~(1<<n);break}}else if(r[((0|r[(i=s+16|0)>>2])==(0|o)?i:s+20)>>2]=e,!e)break;r[e+24>>2]=s,0|(A=0|r[(n=o+16|0)>>2])&&(r[e+16>>2]=A,r[A+24>>2]=e),(n=0|r[n+4>>2])&&(r[e+20>>2]=n,r[n+24>>2]=e)}}}while(0);if(2&(A=0|r[(e=a+4|0)>>2]))r[e>>2]=-2&A,r[o+4>>2]=1|t,r[o+t>>2]=t,i=t;else{if((0|r[6927])==(0|a)){if(a=(0|r[6924])+t|0,r[6924]=a,r[6927]=o,r[o+4>>2]=1|a,(0|o)!=(0|r[6926]))return;return r[6926]=0,void(r[6923]=0)}if((0|r[6926])==(0|a))return a=(0|r[6923])+t|0,r[6923]=a,r[6926]=o,r[o+4>>2]=1|a,void(r[o+a>>2]=a);i=(-8&A)+t|0,n=A>>>3;do{if(A>>>0<256){if(e=0|r[a+8>>2],(0|(t=0|r[a+12>>2]))==(0|e)){r[6921]=r[6921]&~(1<<n);break}r[e+12>>2]=t,r[t+8>>2]=e;break}s=0|r[a+24>>2],t=0|r[a+12>>2];do{if((0|t)==(0|a)){if(t=0|r[(n=(e=a+16|0)+4|0)>>2])e=n;else if(!(t=0|r[e>>2])){n=0;break}for(;;)if(n=0|r[(A=t+20|0)>>2])t=n,e=A;else{if(!(n=0|r[(A=t+16|0)>>2]))break;t=n,e=A}r[e>>2]=0,n=t}else n=0|r[a+8>>2],r[n+12>>2]=t,r[t+8>>2]=n,n=t}while(0);if(0|s){if(t=0|r[a+28>>2],(0|r[(e=27988+(t<<2)|0)>>2])==(0|a)){if(r[e>>2]=n,!n){r[6922]=r[6922]&~(1<<t);break}}else if(r[((0|r[(A=s+16|0)>>2])==(0|a)?A:s+20)>>2]=n,!n)break;r[n+24>>2]=s,0|(e=0|r[(t=a+16|0)>>2])&&(r[n+16>>2]=e,r[e+24>>2]=n),0|(t=0|r[t+4>>2])&&(r[n+20>>2]=t,r[t+24>>2]=n)}}while(0);if(r[o+4>>2]=1|i,r[o+i>>2]=i,(0|o)==(0|r[6926]))return void(r[6923]=i)}if(t=i>>>3,i>>>0<256)return n=27724+(t<<1<<2)|0,(e=0|r[6921])&(t=1<<t)?t=0|r[(e=n+8|0)>>2]:(r[6921]=e|t,t=n,e=n+8|0),r[e>>2]=o,r[t+12>>2]=o,r[o+8>>2]=t,void(r[o+12>>2]=n);if(t=27988+((A=(t=i>>>8)?i>>>0>16777215?31:i>>>((A=14-((n=((a=t<<(s=(t+1048320|0)>>>16&8))+520192|0)>>>16&4)|s|(A=((a<<=n)+245760|0)>>>16&2))+(a<<A>>>15)|0)+7|0)&1|A<<1:0)<<2)|0,r[o+28>>2]=A,r[o+20>>2]=0,r[o+16>>2]=0,!((e=0|r[6922])&(n=1<<A)))return r[6922]=e|n,r[t>>2]=o,r[o+24>>2]=t,r[o+12>>2]=o,void(r[o+8>>2]=o);t=0|r[t>>2];e:do{if((-8&r[t+4>>2])!=(0|i)){for(A=i<<(31==(0|A)?0:25-(A>>>1)|0);e=0|r[(n=t+16+(A>>>31<<2)|0)>>2];){if((-8&r[e+4>>2])==(0|i)){t=e;break e}A<<=1,t=e}return r[n>>2]=o,r[o+24>>2]=t,r[o+12>>2]=o,void(r[o+8>>2]=o)}}while(0);a=0|r[(s=t+8|0)>>2],r[a+12>>2]=o,r[s>>2]=o,r[o+8>>2]=a,r[o+12>>2]=t,r[o+24>>2]=0}function Rt(e,t,n,A){return 0|(M((t|=0)+(A|=0)+((n=(e|=0)+(n|=0)>>>0)>>>0<e>>>0|0)>>>0|0),n)}function Lt(e,t,n,A){return 0|(M(0|(A=(t|=0)-(A|=0)-((n|=0)>>>0>(e|=0)>>>0|0)>>>0)),e-n>>>0)}function Dt(e){return 0|((e|=0)?31-(0|C(e^e-1)):32)}function Pt(e,t,n,A,i){i|=0;var s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0;if(u=e|=0,o=n|=0,a=h=A|=0,!(c=l=t|=0))return s=!!(0|i),a?s?(r[i>>2]=0|e,r[i+4>>2]=0&t,i=0,0|(M(0|(h=0)),i)):(i=0,0|(M(0|(h=0)),i)):(s&&(r[i>>2]=(u>>>0)%(o>>>0),r[i+4>>2]=0),i=(u>>>0)/(o>>>0)>>>0,0|(M(0|(h=0)),i));s=!(0|a);do{if(o){if(!s){if((s=(0|C(0|a))-(0|C(0|c))|0)>>>0<=31){o=f=s+1|0,e=u>>>(f>>>0)&(t=s-31>>31)|c<<(a=31-s|0),t&=c>>>(f>>>0),s=0,a=u<<a;break}return i?(r[i>>2]=0|e,r[i+4>>2]=l|0&t,i=0,0|(M(0|(h=0)),i)):(i=0,0|(M(0|(h=0)),i))}if((s=o-1|0)&o|0){o=a=33+(0|C(0|o))-(0|C(0|c))|0,e=(f=32-a|0)-1>>31&c>>>((d=a-32|0)>>>0)|(c<<f|u>>>(a>>>0))&(t=d>>31),t&=c>>>(a>>>0),s=u<<(p=64-a|0)&(l=f>>31),a=(c<<p|u>>>(d>>>0))&l|u<<f&a-33>>31;break}return 0|i&&(r[i>>2]=s&u,r[i+4>>2]=0),1==(0|o)?(p=0|e,0|(M(0|(d=l|0&t)),p)):(d=c>>>((p=0|Dt(0|o))>>>0)|0,p=c<<32-p|u>>>(p>>>0),0|(M(0|d),p))}if(s)return 0|i&&(r[i>>2]=(c>>>0)%(o>>>0),r[i+4>>2]=0),p=(c>>>0)/(o>>>0)>>>0,0|(M(0|(d=0)),p);if(!u)return 0|i&&(r[i>>2]=0,r[i+4>>2]=(c>>>0)%(a>>>0)),p=(c>>>0)/(a>>>0)>>>0,0|(M(0|(d=0)),p);if(!((s=a-1|0)&a))return 0|i&&(r[i>>2]=0|e,r[i+4>>2]=s&c|0&t),d=0,p=c>>>((0|Dt(0|a))>>>0),0|(M(0|d),p);if((s=(0|C(0|a))-(0|C(0|c))|0)>>>0<=30){o=t=s+1|0,e=c<<(a=31-s|0)|u>>>(t>>>0),t=c>>>(t>>>0),s=0,a=u<<a;break}return i?(r[i>>2]=0|e,r[i+4>>2]=l|0&t,p=0,0|(M(0|(d=0)),p)):(p=0,0|(M(0|(d=0)),p))}while(0);if(o){c=0|Rt(0|(f=0|n),0|(u=h|0&A),-1,-1),n=0|w(),l=a,a=0;do{A=l,l=s>>>31|l<<1,s=a|s<<1,Lt(0|c,0|n,0|(A=e<<1|A>>>31),0|(h=e>>>31|t<<1)),a=1&(d=(p=0|w())>>31|((0|p)<0?-1:0)<<1),e=0|Lt(0|A,0|h,d&f|0,(((0|p)<0?-1:0)>>31|((0|p)<0?-1:0)<<1)&u),t=0|w(),o=o-1|0}while(0|o);c=l,l=0}else c=a,l=0,a=0;return o=0,0|i&&(r[i>>2]=e,r[i+4>>2]=t),p=s<<1&-2|a,0|(M(0|(d=(0|s)>>>31|(c|o)<<1|l)),p)}function Ft(e,t,n,A){n|=0;var r,i,s,o,a;return i=(A|=0)>>31|((0|A)<0?-1:0)<<1,r=((0|A)<0?-1:0)>>31|((0|A)<0?-1:0)<<1,s=0|Lt((a=(t|=0)>>31|((0|t)<0?-1:0)<<1)^(e|=0)|0,(o=((0|t)<0?-1:0)>>31|((0|t)<0?-1:0)<<1)^t|0,0|a,0|o),e=i^a,t=r^o,0|Lt((0|Pt(s,0|w(),0|Lt(i^n|0,r^A|0,0|i,0|r),0|w(),0))^e,(0|w())^t,0|e,0|t)}function Nt(e,t,n,A){t|=0,A|=0;var r,i;return n=0|function(e,t){var n,A,r,i=0;return e=((n=0|y(i=65535&(t|=0),r=65535&(e|=0)))>>>16)+(0|y(i,A=e>>>16))|0,t=0|y(i=t>>>16,r),0|(M((e>>>16)+(0|y(i,A))+(((65535&e)+t|0)>>>16)|0),e+t<<16|65535&n)}(r=e|=0,i=n|=0),e=0|w(),0|(M((0|y(t,i))+(0|y(A,r))+e|0&e),n)}function Ot(e,t,n,A){n|=0;var i,s,o,a,l,c;return i=L,L=L+16|0,a=0|i,c=(A|=0)>>31|((0|A)<0?-1:0)<<1,l=((0|A)<0?-1:0)>>31|((0|A)<0?-1:0)<<1,Pt(e=0|Lt((o=(t|=0)>>31|((0|t)<0?-1:0)<<1)^(e|=0)|0,(s=((0|t)<0?-1:0)>>31|((0|t)<0?-1:0)<<1)^t|0,0|o,0|s),t=0|w(),0|Lt(c^n|0,l^A|0,0|c,0|l),0|w(),a),A=0|Lt(r[a>>2]^o|0,r[a+4>>2]^s|0,0|o,0|s),n=0|w(),L=i,0|(M(0|n),A)}function Ut(e,t,n,A){var i,s;return s=L,L=L+16|0,Pt(e|=0,t|=0,n|=0,A|=0,i=0|s),L=s,0|(M(0|r[i+4>>2]),r[i>>2])}function kt(e,t,n){return e|=0,t|=0,(0|(n|=0))<32?(M(t>>n|0),e>>>n|(t&(1<<n)-1)<<32-n):(M(0|((0|t)<0?-1:0)),t>>n-32)}function Gt(e,t,n){return e|=0,t|=0,(0|(n|=0))<32?(M(t>>>n|0),e>>>n|(t&(1<<n)-1)<<32-n):(M(0),t>>>n-32|0)}function Vt(e,t,n){return e|=0,t|=0,(0|(n|=0))<32?(M(t<<n|(e&(1<<n)-1<<32-n)>>>32-n),e<<n):(M(e<<n-32),0)}function Ht(e,t,n){return e|=0,32==(0|(t=0|C(t|=0)))&&(t=t+(0|C(e))|0),M(0),0|t}function Qt(e,t){return t=+t,(e=+e)!=e?+t:t!=t?+e:+v(+e,+t)}function jt(e,t){return t=+t,(e=+e)!=e?+t:t!=t?+e:+B(+e,+t)}function zt(e){return(e=+e)>=0?+a(e+.5):+b(e-.5)}function Jt(e,t,n){e|=0,t|=0;var i,s,o=0;if((0|(n|=0))>=8192)return S(0|e,0|t,0|n),0|e;if(s=0|e,i=e+n|0,(3&e)==(3&t)){for(;3&e;){if(!n)return 0|s;A[e|0]=0|A[t|0],e=e+1|0,t=t+1|0,n=n-1|0}for(o=(n=-4&i)-64|0;(0|e)<=(0|o);)r[e>>2]=r[t>>2],r[e+4>>2]=r[t+4>>2],r[e+8>>2]=r[t+8>>2],r[e+12>>2]=r[t+12>>2],r[e+16>>2]=r[t+16>>2],r[e+20>>2]=r[t+20>>2],r[e+24>>2]=r[t+24>>2],r[e+28>>2]=r[t+28>>2],r[e+32>>2]=r[t+32>>2],r[e+36>>2]=r[t+36>>2],r[e+40>>2]=r[t+40>>2],r[e+44>>2]=r[t+44>>2],r[e+48>>2]=r[t+48>>2],r[e+52>>2]=r[t+52>>2],r[e+56>>2]=r[t+56>>2],r[e+60>>2]=r[t+60>>2],e=e+64|0,t=t+64|0;for(;(0|e)<(0|n);)r[e>>2]=r[t>>2],e=e+4|0,t=t+4|0}else for(n=i-4|0;(0|e)<(0|n);)A[e|0]=0|A[t|0],A[e+1|0]=0|A[t+1|0],A[e+2|0]=0|A[t+2|0],A[e+3|0]=0|A[t+3|0],e=e+4|0,t=t+4|0;for(;(0|e)<(0|i);)A[e|0]=0|A[t|0],e=e+1|0,t=t+1|0;return 0|s}function Kt(e,t,n){var r=0;if((0|(t|=0))<(0|(e|=0))&(0|e)<(t+(n|=0)|0)){for(r=e,t=t+n|0,e=e+n|0;(0|n)>0;)t=t-1|0,n=n-1|0,A[(e=e-1|0)|0]=0|A[t|0];e=r}else Jt(e,t,n);return 0|e}function qt(e,t,n){t|=0;var i,s=0,o=0,a=0;if(i=(e|=0)+(n|=0)|0,t&=255,(0|n)>=67){for(;3&e;)A[e|0]=t,e=e+1|0;for(a=t|t<<8|t<<16|t<<24,o=(s=-4&i)-64|0;(0|e)<=(0|o);)r[e>>2]=a,r[e+4>>2]=a,r[e+8>>2]=a,r[e+12>>2]=a,r[e+16>>2]=a,r[e+20>>2]=a,r[e+24>>2]=a,r[e+28>>2]=a,r[e+32>>2]=a,r[e+36>>2]=a,r[e+40>>2]=a,r[e+44>>2]=a,r[e+48>>2]=a,r[e+52>>2]=a,r[e+56>>2]=a,r[e+60>>2]=a,e=e+64|0;for(;(0|e)<(0|s);)r[e>>2]=a,e=e+4|0}for(;(0|e)<(0|i);)A[e|0]=t,e=e+1|0;return i-n|0}function Yt(e){return(e=+e)>=0?+a(e+.5):+b(e-.5)}function Wt(e){e|=0;var t,n,A;return A=0|x(),(0|e)>0&(0|(t=(n=0|r[o>>2])+e|0))<(0|n)|(0|t)<0?(R(0|t),E(12),-1):(0|t)>(0|A)&&!(0|I(0|t))?(E(12),-1):(r[o>>2]=t,0|n)}var Xt=[function(e,t){return _(0),0},function(e,t){t|=0;var n=0,A=0;return e=0|r[(A=e|=0)>>2],A=0|r[A+4>>2],t=0|r[(n=t)>>2],0|(A>>>0<(n=0|r[n+4>>2])>>>0|(0|A)==(0|n)&e>>>0<t>>>0?-1:1&(A>>>0>n>>>0|(0|A)==(0|n)&e>>>0>t>>>0))},function(e,t){t|=0;var n,A,s,o,a=0,l=0;return o=0|r[(l=e|=0)>>2],l=0|r[l+4>>2],s=0|r[(a=t)>>2],l>>>0<(a=0|r[a+4>>2])>>>0|(0|l)==(0|a)&o>>>0<s>>>0?0|(t=-1):l>>>0>a>>>0|(0|l)==(0|a)&o>>>0>s>>>0?0|(t=1):(A=+i[e+8>>3])<(n=+i[t+8>>3])?0|(t=-1):0|(t=A>n&1)},function(e,t){var n,A;return t|=0,0|((A=+i[(e|=0)>>3])>(n=+i[t>>3])?-1:A<n&1)}];return{___divdi3:Ft,___muldi3:Nt,___remdi3:Ot,___uremdi3:Ut,_areNeighborCells:function(e,t,n,A,i){i|=0;var s,o,a,l=0,c=0,u=0,f=0;if(a=L,L=L+64|0,o=a,s=a+56|0,!(!0&134217728==(2013265920&(t|=0))&!0&134217728==(2013265920&(A|=0))))return L=a,0|(i=5);if((0|(e|=0))==(0|(n|=0))&(0|t)==(0|A))return r[i>>2]=0,L=a,0|(i=0);if(c=0|Gt(0|e,0|t,52),w(),c&=15,f=0|Gt(0|n,0|A,52),w(),(0|c)!=(15&f))return L=a,0|(i=12);if(l=c+-1|0,c>>>0>1){_e(e,t,l,o),_e(n,A,l,s),u=0|r[(f=o)>>2],f=0|r[f+4>>2];e:do{if((0|u)==(0|r[s>>2])&&(0|f)==(0|r[s+4>>2])){l=0|Gt(0|e,0|t,0|(c=3*(15^c)|0)),w(),l&=7,c=0|Gt(0|n,0|A,0|c),w(),c&=7;do{if(!(0|l)|!(0|c))r[i>>2]=1,l=0;else if(7==(0|l))l=5;else{if(1==(0|l)|1==(0|c)&&0|we(u,f)){l=5;break}if((0|r[15824+(l<<2)>>2])!=(0|c)&&(0|r[15856+(l<<2)>>2])!=(0|c))break e;r[i>>2]=1,l=0}}while(0);return L=a,0|(i=l)}}while(0)}c=(l=o)+56|0;do{r[l>>2]=0,l=l+4|0}while((0|l)<(0|c));return D(e,t,1,o),l=(0|r[(t=o)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)||(0|r[(t=o+8|0)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)||(0|r[(t=o+16|0)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)||(0|r[(t=o+24|0)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)||(0|r[(t=o+32|0)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)||(0|r[(t=o+40|0)>>2])==(0|n)&&(0|r[t+4>>2])==(0|A)?1:1&((0|r[(l=o+48|0)>>2])==(0|n)?(0|r[l+4>>2])==(0|A):0),r[i>>2]=l,L=a,0|(i=0)},_bitshift64Ashr:kt,_bitshift64Lshr:Gt,_bitshift64Shl:Vt,_calloc:xt,_cellAreaKm2:function(e,t,n){n|=0;var A,s,o,a=0;return o=L,L=L+192|0,A=o+176|0,a=o+168|0,(e=0|ke(e|=0,t|=0,s=o))?(L=o,0|(a=e)):(r[a>>2]=r[s>>2],r[a+4>>2]=s+8,r[A>>2]=r[a>>2],r[A+4>>2]=r[a+4>>2],H(A,n),i[n>>3]=40589732.49931477*+i[n>>3],L=o,0|(a=0))},_cellAreaM2:function(e,t,n){n|=0;var A,s,o,a=0;return o=L,L=L+192|0,A=o+176|0,a=o+168|0,(e=0|ke(e|=0,t|=0,s=o))?(L=o,0|(a=e)):(r[a>>2]=r[s>>2],r[a+4>>2]=s+8,r[A>>2]=r[a>>2],r[A+4>>2]=r[a+4>>2],H(A,n),i[n>>3]=40589732.49931477*+i[n>>3]*1e6,L=o,0|(a=0))},_cellAreaRads2:function(e,t,n){n|=0;var A,i,s,o=0;return s=L,L=L+192|0,A=s+176|0,o=s+168|0,0|(e=0|ke(e|=0,t|=0,i=s))?(L=s,0|(o=e)):(r[o>>2]=r[i>>2],r[o+4>>2]=i+8,r[A>>2]=r[o>>2],r[A+4>>2]=r[o+4>>2],H(A,n),L=s,0|(o=0))},_cellToBoundary:ke,_cellToCenterChild:Ee,_cellToChildPos:function(e,t,n,A){n|=0,A|=0;var i,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0;if(i=L,L=L+16|0,b=i,y=0|Gt(0|(e|=0),0|(t|=0),52),w(),y&=15,n>>>0>15)return L=i,0|(y=4);if((0|y)<(0|n))return L=i,0|(y=12);if((0|y)!=(0|n))if(o=0|Vt(0|n,0,52),o|=e,l=w()|-15728641&t,(0|y)>(0|n)){c=n;do{g=0|Vt(7,0,3*(14-c|0)|0),c=c+1|0,o|=g,l=0|w()|l}while((0|c)<(0|y));g=o}else g=o;else g=e,l=t;m=0|Gt(0|g,0|l,45),w();e:do{if(0|Q(127&m)){if(c=0|Gt(0|g,0|l,52),w(),0|(c&=15))for(o=1;;){if(!(!((m=0|Vt(7,0,3*(15-o|0)|0))&g|0)&!((0|w())&l))){u=33;break e}if(!(o>>>0<c>>>0))break;o=o+1|0}if(r[(m=A)>>2]=0,r[m+4>>2]=0,(0|y)>(0|n)){for(m=-15728641&t,p=y;;){if(d=p,(p=p+-1|0)>>>0>15|(0|y)<(0|p)){u=19;break}if((0|y)!=(0|p))if(o=0|Vt(0|p,0,52),o|=e,c=0|w()|m,(0|y)<(0|d))h=o;else{u=p;do{h=0|Vt(7,0,3*(14-u|0)|0),u=u+1|0,o|=h,c=0|w()|c}while((0|u)<(0|y));h=o}else h=e,c=t;if(f=0|Gt(0|h,0|c,45),w(),0|Q(127&f)){f=0|Gt(0|h,0|c,52),w(),f&=15;t:do{if(f)for(u=1;;){if(o=0|Gt(0|h,0|c,3*(15-u|0)|0),w(),0|(o&=7))break t;if(!(u>>>0<f>>>0)){o=0;break}u=u+1|0}else o=0}while(0);o=1&!(0|o)}else o=0;if(c=0|Gt(0|e,0|t,3*(15-d|0)|0),w(),7==(0|(c&=7))){s=5,u=42;break}if(1==(0|c)&(o=!!(0|o))){s=5,u=42;break}if(0|(h=c+((!!(0|c)&o)<<31>>31)|0)&&(u=0|$e(7,0,u=y-d|0,((0|u)<0)<<31>>31),f=0|w(),o?(o=0|Rt(0|(o=0|Nt(0|u,0|f,5,0)),0|w(),-5,-1),o=0|Rt(0|(o=0|Ft(0|o,0|w(),6,0)),0|w(),1,0),c=0|w()):(o=u,c=f),d=0|Rt(0|o,0|c,0|(d=0|Nt(0|u,0|f,0|(d=h+-1|0),((0|d)<0)<<31>>31)),0|w()),f=0|Rt(0|d,0|(h=0|w()),0|r[(f=A)>>2],0|r[f+4>>2]),h=0|w(),r[(d=A)>>2]=f,r[d+4>>2]=h),(0|p)<=(0|n)){u=37;break}}if(19==(0|u))T(27634,27225,1407,27259);else{if(37==(0|u)){s=0|r[(a=A)+4>>2],a=0|r[a>>2];break}if(42==(0|u))return L=i,0|s}}else s=0,a=0}else u=33}while(0);e:do{if(33==(0|u)){if(r[(m=A)>>2]=0,r[m+4>>2]=0,(0|y)>(0|n)){for(o=y;;){if(s=0|Gt(0|e,0|t,3*(15-o|0)|0),w(),7==(0|(s&=7))){s=5;break}if(s=0|Nt(0|(a=0|$e(7,0,a=y-o|0,((0|a)<0)<<31>>31)),0|w(),0|s,0),a=0|w(),a=0|Rt(0|r[(m=A)>>2],0|r[m+4>>2],0|s,0|a),s=0|w(),r[(m=A)>>2]=a,r[m+4>>2]=s,(0|(o=o+-1|0))<=(0|n))break e}return L=i,0|s}s=0,a=0}}while(0);return 0|Me(g,l,y,b)&&T(27634,27225,1367,27274),((0|s)>-1|-1==(0|s)&a>>>0>4294967295)&((0|(b=0|r[(y=b)+4>>2]))>(0|s)|((0|b)==(0|s)?(0|r[y>>2])>>>0>a>>>0:0))?(L=i,0|(y=0)):(T(27634,27225,1447,27259),0)},_cellToChildren:function(e,t,n,A){A|=0;var i,s,o=0,a=0;if(s=L,L=L+16|0,Ve(i=s,e|=0,t|=0,n|=0),!(0|(e=0|r[(t=i)>>2]))&!(0|(t=0|r[t+4>>2])))return L=s,0;o=0,n=0;do{r[(a=A+(o<<3)|0)>>2]=e,r[a+4>>2]=t,o=0|Rt(0|o,0|n,1,0),n=0|w(),Qe(i),e=0|r[(a=i)>>2],t=0|r[a+4>>2]}while(!(!(0|e)&!(0|t)));return L=s,0},_cellToChildrenSize:Me,_cellToLatLng:Ue,_cellToLocalIj:function(e,t,n,A,i,s){s|=0;var o,a=0;return o=L,L=L+16|0,a=o,0|(i|=0)?(L=o,0|(a=15)):((e=0|Ye(e|=0,t|=0,n|=0,A|=0,a))||(i=0|r[a+4>>2],e=0|r[a+8>>2],r[s>>2]=(0|r[a>>2])-e,r[s+4>>2]=i-e,e=0),L=o,0|(a=e))},_cellToParent:_e,_cellToVertex:pt,_cellToVertexes:function(e,t,n){n|=0;var A,i=0,s=0;return s=!(0|we(e|=0,t|=0)),A=!(0|(i=0|pt(e,t,0,n))),s?A?0|(i=0|pt(e,t,1,n+8|0))||0|(i=0|pt(e,t,2,n+16|0))||0|(i=0|pt(e,t,3,n+24|0))||(i=0|pt(e,t,4,n+32|0))?0|(s=i):0|pt(e,t,5,n+40|0):0|(s=i):A?0|(i=0|pt(e,t,1,n+8|0))||0|(i=0|pt(e,t,2,n+16|0))||0|(i=0|pt(e,t,3,n+24|0))||0|(i=0|pt(e,t,4,n+32|0))?0|(s=i):(r[(s=n+40|0)>>2]=0,r[s+4>>2]=0,0|(s=0)):0|(s=i)},_cellsToDirectedEdge:function(e,t,n,A,i){return i|=0,7==(0|(n=0|G(e|=0,t|=0,n|=0,A|=0)))?0|(i=11):(A=0|Vt(0|n,0,56),t=-2130706433&t|w()|268435456,r[i>>2]=e|A,r[i+4>>2]=t,0|(i=0))},_cellsToLinkedMultiPolygon:function(e,t,n){n|=0;var A,i,s=0,o=0,a=0,l=0,c=0;if(i=L,L=L+16|0,0|(e=0|re(e|=0,t|=0,((0|t)<0)<<31>>31,a=i)))return L=i,0|(a=e);if(A=0|function(e,t){e|=0,t|=0;var n=0,A=0,i=0,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0;if(r[t>>2]=0,g=t+4|0,r[g>>2]=0,b=t+8|0,r[b>>2]=0,m=0|r[e>>2],(0|m)<=0)return 0|(t=0);p=e+4|0,e=t,d=0;e:for(;;){if(d){if(!(n=0|xt(1,12))){n=5;break}r[e+8>>2]=n,e=n}if(l=0|r[p>>2],!(c=0|xt(1,12))){e=13,n=37;break}if(A=0|r[(h=e+4|0)>>2],r[(0|A?A+8:e)>>2]=c,r[h>>2]=c,(0|(A=0|r[l+(d<<4)>>2]))<3){e=1,n=37;break}i=l+(d<<4)+4|0,s=c+4|0,n=0,o=0;do{if(a=o,!(o=0|Tt(24))){e=13,n=37;break e}Kt(0|o,(0|r[i>>2])+(n<<4)|0,16),r[o+16>>2]=0,a?r[a+16>>2]=o:r[c>>2]=o,r[s>>2]=o,n=n+1|0}while((0|n)<(0|A));if((0|(f=0|r[l+(d<<4)+8>>2]))>0){u=l+(d<<4)+12|0,l=0;do{if(A=0|r[u>>2],n=c,!(c=0|xt(1,12))){e=13,n=37;break e}if(r[n+8>>2]=c,r[h>>2]=c,(0|(a=0|r[A+(l<<3)>>2]))<3){e=1,n=37;break e}A=A+(l<<3)+4|0,i=c+4|0,n=0,s=0;do{if(o=s,!(s=0|Tt(24))){e=13,n=37;break e}Kt(0|s,(0|r[A>>2])+(n<<4)|0,16),r[s+16>>2]=0,o?r[o+16>>2]=s:r[c>>2]=s,r[i>>2]=s,n=n+1|0}while((0|n)<(0|a));l=l+1|0}while((0|l)<(0|f))}if((0|(d=d+1|0))>=(0|m)){e=0,n=50;break}}if(5==(0|n)){if(!t)return 0|(t=13);for(A=1,i=t;;){if(0|(e=0|r[i>>2]))do{if(0|(n=0|r[e>>2]))do{m=n,n=0|r[n+16>>2],Et(m)}while(0|n);m=e,e=0|r[e+8>>2],Et(m)}while(0|e);if(e=i,i=0|r[i+8>>2],A?(r[t>>2]=0,r[g>>2]=0,r[b>>2]=0):Et(e),!i){e=13;break}A=0}return 0|e}if(37==(0|n)){if(!t)return 0|(t=e);for(i=1,s=t;;){if(0|(n=0|r[s>>2]))do{if(0|(A=0|r[n>>2]))do{m=A,A=0|r[A+16>>2],Et(m)}while(0|A);m=n,n=0|r[n+8>>2],Et(m)}while(0|n);if(n=s,s=0|r[s+8>>2],i?(r[t>>2]=0,r[g>>2]=0,r[b>>2]=0):Et(n),!s)break;i=0}return 0|e}if(50==(0|n))return 0|e;return 0}(a,n),n=a+4|0,(0|r[a>>2])>0){t=0;do{if(o=0|r[n>>2],Et(0|r[(s=o+(t<<4)+4|0)>>2]),r[s>>2]=0,r[o+(t<<4)>>2]=0,s=o+(t<<4)+8|0,o=o+(t<<4)+12|0,(0|r[s>>2])>0){e=0;do{l=0|r[o>>2],Et(0|r[(c=l+(e<<3)+4|0)>>2]),r[c>>2]=0,r[l+(e<<3)>>2]=0,e=e+1|0}while((0|e)<(0|r[s>>2]))}Et(0|r[o>>2]),r[o>>2]=0,r[s>>2]=0,t=t+1|0}while((0|t)<(0|r[a>>2]))}return Et(0|r[n>>2]),r[n>>2]=0,r[a>>2]=0,L=i,0|(c=A)},_childPosToCell:function(e,t,n,A,i,s){e|=0,t|=0,s|=0;var o,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0;if(o=L,L=L+16|0,a=o,(i|=0)>>>0>15)return L=o,0|(s=4);if(l=0|Gt(0|(n|=0),0|(A|=0),52),w(),(0|(l&=15))>(0|i))return L=o,0|(s=12);if(0|Me(n,A,i,a)&&T(27634,27225,1367,27274),!(((0|t)>-1|-1==(0|t)&e>>>0>4294967295)&((0|(u=0|r[(f=a)+4>>2]))>(0|t)|((0|u)==(0|t)?(0|r[f>>2])>>>0>e>>>0:0))))return L=o,0|(s=2);f=i-l|0,i=0|Vt(0|i,0,52),c=w()|-15728641&A,r[(u=s)>>2]=i|n,r[u+4>>2]=c,u=0|Gt(0|n,0|A,45),w();e:do{if(0|Q(127&u)){if(0|l)for(a=1;;){if(!(!((u=0|Vt(7,0,3*(15-a|0)|0))&n|0)&!((0|w())&A)))break e;if(!(a>>>0<l>>>0))break;a=a+1|0}if((0|f)<1)return L=o,0|(s=0);for(u=15^l,A=-1,c=1,a=1;;){l=0|$e(7,0,l=f-c|0,((0|l)<0)<<31>>31),n=0|w();do{if(a){if(a=0|Ft(0|(a=0|Rt(0|(a=0|Nt(0|l,0|n,5,0)),0|w(),-5,-1)),0|w(),6,0),(0|t)>(0|(i=0|w()))|(0|t)==(0|i)&e>>>0>a>>>0){t=0|Lt(0|(t=0|Rt(0|e,0|t,-1,-1)),0|w(),0|a,0|i),a=0|w(),p=0|r[(h=s)>>2],h=0|r[h+4>>2],d=0|Vt(7,0,0|(m=3*(u+A|0)|0)),h&=~w(),m=0|Vt(0|(i=0|Rt(0|(A=0|Ft(0|t,0|a,0|l,0|n)),0|(e=0|w()),2,0)),0|w(),0|m),h=0|w()|h,r[(i=s)>>2]=m|p&~d,r[i+4>>2]=h,e=0|Lt(0|t,0|a,0|(e=0|Nt(0|A,0|e,0|l,0|n)),0|w()),a=0,t=0|w();break}d=0|r[(m=s)>>2],m=0|r[m+4>>2],p=0|Vt(7,0,3*(u+A|0)|0),m&=~w(),r[(a=s)>>2]=d&~p,r[a+4>>2]=m,a=1;break}i=0|r[(d=s)>>2],d=0|r[d+4>>2],h=0|Vt(7,0,0|(A=3*(u+A|0)|0)),d&=~w(),A=0|Vt(0|(m=0|Ft(0|e,0|t,0|l,0|n)),0|(a=0|w()),0|A),d=0|w()|d,r[(p=s)>>2]=A|i&~h,r[p+4>>2]=d,e=0|Lt(0|e,0|t,0|(a=0|Nt(0|m,0|a,0|l,0|n)),0|w()),a=0,t=0|w()}while(0);if(!((0|f)>(0|c))){t=0;break}A=~c,c=c+1|0}return L=o,0|t}}while(0);if((0|f)<1)return L=o,0|(m=0);for(i=15^l,a=1;;){if(p=0|$e(7,0,p=f-a|0,((0|p)<0)<<31>>31),m=0|w(),n=0|r[(c=s)>>2],c=0|r[c+4>>2],A=0|Vt(7,0,0|(l=3*(i-a|0)|0)),c&=~w(),l=0|Vt(0|(h=0|Ft(0|e,0|t,0|p,0|m)),0|(d=0|w()),0|l),c=0|w()|c,r[(u=s)>>2]=l|n&~A,r[u+4>>2]=c,e=0|Lt(0|e,0|t,0|(m=0|Nt(0|h,0|d,0|p,0|m)),0|w()),t=0|w(),(0|f)<=(0|a)){t=0;break}a=a+1|0}return L=o,0|t},_compactCells:function(e,t,n,A){t|=0;var i,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,E=0,x=0,S=0,I=0,R=0,L=0;if(!(0|(n|=0))&!(0|(A|=0)))return 0|(L=0);if(o=0|r[(s=e|=0)>>2],!0&!(15728640&(s=0|r[s+4>>2]))){if(!((0|A)>0|!(0|A)&n>>>0>0))return 0|(L=0);if(r[(L=t)>>2]=o,r[L+4>>2]=s,1==(0|n)&!(0|A))return 0|(L=0);s=1,o=0;do{R=0|r[(I=e+(s<<3)|0)+4>>2],r[(L=t+(s<<3)|0)>>2]=r[I>>2],r[L+4>>2]=R,s=0|Rt(0|s,0|o,1,0),o=0|w()}while((0|o)<(0|A)|(0|o)==(0|A)&s>>>0<n>>>0);return 0|(s=0)}if(!(R=0|Tt(i=n<<3)))return 0|(L=13);if(Jt(0|R,0|e,0|i),!(I=0|xt(n,8)))return Et(R),0|(L=13);e:for(;;){x=0|Gt(0|(u=0|r[(s=R)>>2]),0|(s=0|r[s+4>>2]),52),w(),S=(x&=15)+-1|0,E=!!(0|x),M=(0|A)>0|!(0|A)&n>>>0>0;t:do{if(E&M){if(B=0|Vt(0|S,0,52),v=0|w(),S>>>0>15){if(!(!(0|u)&!(0|s))){L=16;break e}for(o=0,e=0;;){if(o=0|Rt(0|o,0|e,1,0),!((0|(e=0|w()))<(0|A)|(0|e)==(0|A)&o>>>0<n>>>0))break t;if(!(!(0|(_=0|r[(a=R+(o<<3)|0)>>2]))&!(0|(a=0|r[a+4>>2])))){s=a,L=16;break e}}}for(l=u,e=s,o=0,a=0;;){if(!(!(0|l)&!(0|e))){if(!(!0&!(117440512&e))){L=21;break e}if(f=0|Gt(0|l,0|e,52),w(),(0|(f&=15))<(0|S)){s=12,L=27;break e}if((0|f)!=(0|S)&&(l|=B,e=-15728641&e|v,f>>>0>=x>>>0)){c=S;do{_=0|Vt(7,0,3*(14-c|0)|0),c=c+1|0,l|=_,e=0|w()|e}while(c>>>0<f>>>0)}if(d=0|Ut(0|l,0|e,0|n,0|A),p=0|w(),!(!(0|(h=0|r[(f=c=I+(d<<3)|0)>>2]))&!(0|(f=0|r[f+4>>2])))){b=0,y=0;do{if((0|b)>(0|A)|(0|b)==(0|A)&y>>>0>n>>>0){L=31;break e}if((0|h)==(0|l)&(-117440513&f)==(0|e)){m=0|Gt(0|h,0|f,56),w(),g=(m&=7)+1|0,_=0|Gt(0|h,0|f,45),w();n:do{if(0|Q(127&_)){if(h=0|Gt(0|h,0|f,52),w(),!(h&=15)){f=6;break}for(f=1;;){if(!(!((_=0|Vt(7,0,3*(15-f|0)|0))&l|0)&!((0|w())&e))){f=7;break n}if(!(f>>>0<h>>>0)){f=6;break}f=f+1|0}}else f=7}while(0);if((m+2|0)>>>0>f>>>0){L=41;break e}_=0|Vt(0|g,0,56),e=w()|-117440513&e,r[(C=c)>>2]=0,r[C+4>>2]=0,l|=_}else d=0|Ot(0|(d=0|Rt(0|d,0|p,1,0)),0|w(),0|n,0|A),p=0|w();y=0|Rt(0|y,0|b,1,0),b=0|w(),h=0|r[(f=c=I+(d<<3)|0)>>2],f=0|r[f+4>>2]}while(!(!(0|h)&!(0|f)))}r[(_=c)>>2]=l,r[_+4>>2]=e}if(o=0|Rt(0|o,0|a,1,0),!((0|(a=0|w()))<(0|A)|(0|a)==(0|A)&o>>>0<n>>>0))break t;l=0|r[(e=R+(o<<3)|0)>>2],e=0|r[e+4>>2]}}}while(0);if(_=0|Rt(0|n,0|A,5,0),(C=0|w())>>>0<0|!(0|C)&_>>>0<11){L=85;break}if(_=0|Ft(0|n,0|A,6,0),w(),!(_=0|xt(_,8))){L=48;break}do{if(M){for(g=0,e=0,m=0,b=0;;){if(!(0|(o=0|r[(a=f=I+(g<<3)|0)>>2]))&!(0|(a=0|r[a+4>>2])))C=m;else{h=0|Gt(0|o,0|a,56),w(),l=(h&=7)+1|0,d=-117440513&a,C=0|Gt(0|o,0|a,45),w();t:do{if(0|Q(127&C)){if(p=0|Gt(0|o,0|a,52),w(),0|(p&=15))for(c=1;;){if(!(!(o&(C=0|Vt(7,0,3*(15-c|0)|0))|0)&!(d&(0|w()))))break t;if(!(c>>>0<p>>>0))break;c=c+1|0}o|=a=0|Vt(0|l,0,56),a=0|w()|d,r[(l=f)>>2]=o,r[l+4>>2]=a,l=h+2|0}}while(0);7==(0|l)?(r[(C=_+(e<<3)|0)>>2]=o,r[C+4>>2]=-117440513&a,e=0|Rt(0|e,0|m,1,0),C=0|w()):C=m}if(g=0|Rt(0|g,0|b,1,0),!((0|(b=0|w()))<(0|A)|(0|b)==(0|A)&g>>>0<n>>>0))break;m=C}if(M){if(y=S>>>0>15,B=0|Vt(0|S,0,52),v=0|w(),!E){for(o=0,c=0,l=0,a=0;!(0|u)&!(0|s)||(r[(S=t+(o<<3)|0)>>2]=u,r[S+4>>2]=s,o=0|Rt(0|o,0|c,1,0),c=0|w()),l=0|Rt(0|l,0|a,1,0),(0|(a=0|w()))<(0|A)|(0|a)==(0|A)&l>>>0<n>>>0;)u=0|r[(s=R+(l<<3)|0)>>2],s=0|r[s+4>>2];s=C;break}for(o=0,c=0,a=0,l=0;;){do{if(!(!(0|u)&!(0|s))){if(p=0|Gt(0|u,0|s,52),w(),y|(0|(p&=15))<(0|S)){L=80;break e}if((0|p)!=(0|S)){if(f=u|B,h=-15728641&s|v,p>>>0>=x>>>0){d=S;do{E=0|Vt(7,0,3*(14-d|0)|0),d=d+1|0,f|=E,h=0|w()|h}while(d>>>0<p>>>0)}}else f=u,h=s;m=0|Ut(0|f,0|h,0|n,0|A),d=0,p=0,b=0|w();do{if((0|d)>(0|A)|(0|d)==(0|A)&p>>>0>n>>>0){L=81;break e}if((-117440513&(g=0|r[(E=I+(m<<3)|0)+4>>2]))==(0|h)&&(0|r[E>>2])==(0|f)){L=65;break}m=0|Ot(0|(E=0|Rt(0|m,0|b,1,0)),0|w(),0|n,0|A),b=0|w(),p=0|Rt(0|p,0|d,1,0),d=0|w(),E=I+(m<<3)|0}while((0|r[E>>2])!=(0|f)||(0|r[E+4>>2])!=(0|h));if(65==(0|L)&&(L=0,!0&100663296==(117440512&g)))break;r[(E=t+(o<<3)|0)>>2]=u,r[E+4>>2]=s,o=0|Rt(0|o,0|c,1,0),c=0|w()}}while(0);if(a=0|Rt(0|a,0|l,1,0),!((0|(l=0|w()))<(0|A)|(0|l)==(0|A)&a>>>0<n>>>0))break;u=0|r[(s=R+(a<<3)|0)>>2],s=0|r[s+4>>2]}s=C}else o=0,s=C}else o=0,e=0,s=0}while(0);if(qt(0|I,0,0|i),Jt(0|R,0|_,e<<3),Et(_),!(0|e)&!(0|s)){L=89;break}t=t+(o<<3)|0,A=s,n=e}if(16==(0|L))!0&!(117440512&s)?(s=4,L=27):L=21;else if(31==(0|L))T(27634,27225,620,27235);else{if(41==(0|L))return Et(R),Et(I),0|(L=10);if(48==(0|L))return Et(R),Et(I),0|(L=13);80==(0|L)?T(27634,27225,711,27235):81==(0|L)?T(27634,27225,723,27235):85==(0|L)&&(Jt(0|t,0|R,n<<3),L=89)}return 21==(0|L)?(Et(R),Et(I),0|(L=5)):27==(0|L)?(Et(R),Et(I),0|(L=s)):89==(0|L)?(Et(R),Et(I),0|(L=0)):0},_constructCell:function(e,t,n,i){n|=0,i|=0;var s=0,o=0,a=0,l=0,c=0,u=0;if((e|=0)>>>0>15)return 0|(i=4);if((t|=0)>>>0>121)return 0|(i=17);a=0|Vt(0|e,0,52),s=0|w(),l=0|Vt(0|t,0,45),s=0|s|w()|134225919;e:do{if((0|e)>=1){for(l=1,a=!!(0|A[20496+t|0]),o=-1;;){if((t=0|r[n+(l+-1<<2)>>2])>>>0>6){s=18,t=10;break}if(!(!(0|t)|1^a)){if(1==(0|t)){s=19,t=10;break}a=0}if(c=0|Vt(7,0,0|(u=3*(15-l|0)|0)),s&=~w(),o=(t=0|Vt(0|t,((0|t)<0)<<31>>31,0|u))|o&~c,s=0|w()|s,!((0|l)<(0|e)))break e;l=l+1|0}if(10==(0|t))return 0|s}else o=-1}while(0);return r[(u=i)>>2]=o,r[u+4>>2]=s,0|(u=0)},_destroyLinkedMultiPolygon:function(e){var t,n,A=0,i=0,s=0,o=0,a=0;if(e|=0)for(t=e+4|0,n=e+8|0,s=1,o=e;;){if(0|(A=0|r[o>>2]))do{if(0|(i=0|r[A>>2]))do{a=i,i=0|r[i+16>>2],Et(a)}while(0|i);a=A,A=0|r[A+8>>2],Et(a)}while(0|A);if(A=o,o=0|r[o+8>>2],s?(r[e>>2]=0,r[t>>2]=0,r[n>>2]=0):Et(A),!o)break;s=0}},_directedEdgeToBoundary:ae,_directedEdgeToCells:function(e,t,n){e|=0;var A,i,s,o=0;return A=L,L=L+16|0,o=A,!0&268435456==(2013265920&(t|=0))?(i=-2130706433&t|134217728,r[(s=n|=0)>>2]=e,r[s+4>>2]=i,r[o>>2]=0,t=0|Gt(0|e,0|t,56),w(),o=0|O(e,i,7&t,o,n+8|0),L=A,0|o):(L=A,0|(o=6))},_edgeLengthKm:function(e,t,n){n|=0;var A,s=0,o=0,a=0,l=0,h=0,d=0,p=0;if(A=L,L=L+176|0,0|(e=0|ae(e|=0,t|=0,l=A)))return l=e,a=+i[n>>3],a*=6371.007180918475,i[n>>3]=a,L=A,0|l;if(i[n>>3]=0,(0|(e=0|r[l>>2]))<=1)return l=0,a=0,a*=6371.007180918475,i[n>>3]=a,L=A,0|l;t=e+-1|0,e=0,s=+i[l+8>>3],o=+i[l+16>>3],a=0;do{d=s,s=+i[l+8+((e=e+1|0)<<4)>>3],p=+f(.5*(s-d)),h=o,o=+i[l+8+(e<<4)+8>>3],h=p*p+(h=+f(.5*(o-h)))*(+u(+d)*+u(+s)*h),a+=2*+g(+ +c(+h),+ +c(+(1-h)))}while((0|e)!=(0|t));return i[n>>3]=a,l=0,p=a,p*=6371.007180918475,i[n>>3]=p,L=A,0|l},_edgeLengthM:function(e,t,n){n|=0;var A,s=0,o=0,a=0,l=0,h=0,d=0,p=0;if(A=L,L=L+176|0,0|(e=0|ae(e|=0,t|=0,l=A)))return l=e,a=+i[n>>3],a*=6371.007180918475,a*=1e3,i[n>>3]=a,L=A,0|l;if(i[n>>3]=0,(0|(e=0|r[l>>2]))<=1)return l=0,a=0,a*=6371.007180918475,a*=1e3,i[n>>3]=a,L=A,0|l;t=e+-1|0,e=0,s=+i[l+8>>3],o=+i[l+16>>3],a=0;do{d=s,s=+i[l+8+((e=e+1|0)<<4)>>3],p=+f(.5*(s-d)),h=o,o=+i[l+8+(e<<4)+8>>3],h=p*p+(h=+f(.5*(o-h)))*(+u(+d)*+u(+s)*h),a+=2*+g(+ +c(+h),+ +c(+(1-h)))}while((0|e)!=(0|t));return i[n>>3]=a,l=0,p=a,p*=6371.007180918475,p*=1e3,i[n>>3]=p,L=A,0|l},_edgeLengthRads:function(e,t,n){n|=0;var A,s=0,o=0,a=0,l=0,h=0,d=0,p=0;if(A=L,L=L+176|0,0|(e=0|ae(e|=0,t|=0,l=A)))return L=A,0|(l=e);if(i[n>>3]=0,(0|(e=0|r[l>>2]))<=1)return L=A,0|(l=0);t=e+-1|0,e=0,s=+i[l+8>>3],o=+i[l+16>>3],a=0;do{d=s,s=+i[l+8+((e=e+1|0)<<4)>>3],p=+f(.5*(s-d)),h=o,o=+i[l+8+(e<<4)+8>>3],h=p*p+(h=+f(.5*(o-h)))*(+u(+s)*+u(+d)*h),a+=2*+g(+ +c(+h),+ +c(+(1-h)))}while((0|e)<(0|t));return i[n>>3]=a,L=A,0|(l=0)},_emscripten_replace_memory:function(e){return A=new Int8Array(e),r=new Int32Array(e),i=new Float64Array(e),n=e,!0},_free:Et,_getBaseCellNumber:Be,_getDirectedEdgeDestination:function(e,t,n){e|=0,t|=0,n|=0;var A,i,s=0;return A=L,L=L+16|0,r[(s=A)>>2]=0,!0&268435456==(2013265920&t)?(i=0|Gt(0|e,0|t,56),w(),s=0|O(e,-2130706433&t|134217728,7&i,s,n),L=A,0|s):(L=A,0|(s=6))},_getDirectedEdgeOrigin:function(e,t,n){return e|=0,n|=0,!0&268435456==(2013265920&(t|=0))?(r[n>>2]=e,r[n+4>>2]=-2130706433&t|134217728,0|(n=0)):0|(n=6)},_getHexagonAreaAvgKm2:Ke,_getHexagonAreaAvgM2:function(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(i[t>>3]=+i[20752+(e<<3)>>3],0|(t=0))},_getHexagonEdgeLengthAvgKm:function(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(i[t>>3]=+i[20880+(e<<3)>>3],0|(t=0))},_getHexagonEdgeLengthAvgM:function(e,t){return t|=0,(e|=0)>>>0>15?0|(t=4):(i[t>>3]=+i[21008+(e<<3)>>3],0|(t=0))},_getIcosahedronFaces:function e(t,n,A){A|=0;var i,s=0,o=0,a=0,l=0,c=0,u=0,f=0,h=0;i=L,L=L+128|0,f=i+112|0,a=i+96|0,h=i,o=0|Gt(0|(t|=0),0|(n|=0),52),w(),c=15&o,r[f>>2]=c,l=0|Gt(0|t,0|n,45),w(),l&=127;e:do{if(0|Q(l)){if(0|c)for(s=1;;){if(!(!((u=0|Vt(7,0,3*(15-s|0)|0))&t|0)&!((0|w())&n))){o=0;break e}if(!(s>>>0<c>>>0))break;s=s+1|0}if(!(1&o))return u=0|Vt(c+1|0,0,52),h=w()|-15728641&n,h=0|e((u|t)&~(f=0|Vt(7,0,3*(14-c|0)|0)),h&~w(),A),L=i,0|h;o=1}else o=0}while(0);if(!(s=0|Oe(t,n,a))){o?(de(a,f,h),u=5):(be(a,f,h),u=6);e:do{if(0|Q(l))if(c)for(s=1;;){if(!(!((l=0|Vt(7,0,3*(15-s|0)|0))&t|0)&!((0|w())&n))){t=2;break e}if(!(s>>>0<c>>>0)){t=5;break}s=s+1|0}else t=5;else t=2}while(0);qt(0|A,-1,t<<2);e:do{if(o)for(a=0;;){if(me(l=h+(a<<4)|0,0|r[f>>2]),l=0|r[l>>2],-1==(0|(c=0|r[A>>2]))|(0|c)==(0|l))s=A;else{o=0;do{if((o=o+1|0)>>>0>=t>>>0){s=1;break e}c=0|r[(s=A+(o<<2)|0)>>2]}while(!(-1==(0|c)|(0|c)==(0|l)))}if(r[s>>2]=l,(a=a+1|0)>>>0>=u>>>0){s=0;break}}else for(a=0;;){if(pe(l=h+(a<<4)|0,0|r[f>>2],0,1),l=0|r[l>>2],-1==(0|(c=0|r[A>>2]))|(0|c)==(0|l))s=A;else{o=0;do{if((o=o+1|0)>>>0>=t>>>0){s=1;break e}c=0|r[(s=A+(o<<2)|0)>>2]}while(!(-1==(0|c)|(0|c)==(0|l)))}if(r[s>>2]=l,(a=a+1|0)>>>0>=u>>>0){s=0;break}}}while(0)}return L=i,0|(h=s)},_getIndexDigit:function(e,t,n,A){return A|=0,((n|=0)+-1|0)>>>0>14?0|(A=4):(n=0|Gt(0|(e|=0),0|(t|=0),3*(15-n|0)|0),w(),r[A>>2]=7&n,0|(A=0))},_getNumCells:qe,_getPentagons:Ge,_getRes0Cells:function(e){e|=0;var t=0,n=0,A=0;t=0;do{Vt(0|t,0,45),A=134225919|w(),r[(n=e+(t<<3)|0)>>2]=-1,r[n+4>>2]=A,t=t+1|0}while(122!=(0|t));return 0},_getResolution:ye,_greatCircleDistanceKm:Je,_greatCircleDistanceM:function(e,t){e|=0;var n,A,r,s=0;return A=+i[(t|=0)>>3],n=+i[e>>3],s=(r=+f(.5*(A-n)))*r+(s=+f(.5*(+i[t+8>>3]-+i[e+8>>3])))*(+u(+A)*+u(+n)*s),2*+g(+ +c(+s),+ +c(+(1-s)))*6371.007180918475*1e3},_greatCircleDistanceRads:function(e,t){e|=0;var n,A,r,s=0;return A=+i[(t|=0)>>3],n=+i[e>>3],s=(r=+f(.5*(A-n)))*r+(s=+f(.5*(+i[t+8>>3]-+i[e+8>>3])))*(+u(+A)*+u(+n)*s),2*+g(+ +c(+s),+ +c(+(1-s)))},_gridDisk:D,_gridDiskDistances:P,_gridDistance:Xe,_gridPathCells:function(e,t,n,A,i){i|=0;var s,o,a=0,l=0;return o=L,L=L+16|0,0|(l=0|Xe(e|=0,t|=0,n|=0,A|=0,a=o))?(L=o,0|(i=l)):!(0|(a=0|r[(l=a)>>2]))&!(0|(l=0|r[l+4>>2]))?(r[i>>2]=e,r[i+4>>2]=t,L=o,0|(i=0)):(s=0|Ze(e,t,n,A,a,l,i,0,0,1,0))?(i=!(0|Ze(n,A,e,t,a,l,i,a,l,-1,-1)),L=o,0|(i=i?0:s)):(L=o,0|(i=0))},_gridPathCellsSize:function(e,t,n,A,i){i|=0;var s,o=0;return s=L,L=L+16|0,0|(e=0|Xe(e|=0,t|=0,n|=0,A|=0,o=s))?(L=s,0|(o=e)):(n=0|Rt(0|r[(n=o)>>2],0|r[n+4>>2],1,0),A=0|w(),r[(o=i)>>2]=n,r[o+4>>2]=A,L=s,0|(o=0))},_gridRing:function(e,t,n,A){return 0|U(e|=0,t|=0,n|=0,A|=0)?(qt(0|A,0,48*n|0),0|(A=0|k(e,t,n,A))):0|(A=0)},_gridRingUnsafe:U,_i64Add:Rt,_i64Subtract:Lt,_isPentagon:we,_isResClassIII:function(e,t){return t=0|Gt(0|(e|=0),0|(t|=0),52),w(),1&t},_isValidCell:ve,_isValidDirectedEdge:se,_isValidIndex:function(e,t){e|=0;var n=0,r=0,i=0,s=0;if(!0&134217728==(-16777216&(t|=0))&&(r=0|Gt(0|e,0|t,52),w(),r&=15,n=0|Gt(0|e,0|t,45),w(),(n&=127)>>>0<=121)&&!(613566756&(s=0|Vt(0|(i=0|Gt(0|e,0|t,0|(s=3*(15^r)|0))),0|w(),0|s))&(0|Lt(-1227133514,-1171,0|s,0|(i=0|w()))))&!(4681&i&w())&&15==(0|r)|!(0|(s=0|Gt(0|(0|Vt(0|~e,0|~t,0|(s=19+(3*r|0)|0))),0|w(),0|s)))&!(0|w())){if(!(0|A[20496+n|0]))return 0|(s=1);if(!(0|e)&!(0|(n=8191&t)))return 0|(s=1);if(s=0|Ht(0|e,0|n),w(),(63-s|0)%3|0)return 0|(s=1)}return 0|se(e,t)?0|(s=1):0|(s=1&!!(0|mt(e,t)))},_isValidVertex:mt,_latLngToCell:Fe,_llvm_ctlz_i64:Ht,_llvm_maxnum_f64:Qt,_llvm_minnum_f64:jt,_llvm_round_f64:zt,_localIjToCell:function(e,t,n,A,i){e|=0,t|=0,i|=0;var s,o,a,l=0,c=0,u=0,f=0;return a=L,L=L+16|0,f=a,0|(A|=0)?(L=a,0|(f=15)):(u=0|r[(n|=0)>>2],c=0|r[n+4>>2],r[f>>2]=u,r[(s=f+4|0)>>2]=c,r[(o=f+8|0)>>2]=0,A=(n=(0|c)<(0|u))?u:c,(0|(n=n?c:u))<0&&(-2147483648==(0|n)||((0|A)>0?(2147483647-A|0)<(0|n):(-2147483648-A|0)>(0|n))||((0|A)>-1?(-2147483648|A)>=(0|n):(-2147483648^A)<(0|n)))?A=1:l=5,5==(0|l)&&(A=c-u|0,l=0-u|0,(0|u)<0?(r[s>>2]=A,r[o>>2]=l,r[f>>2]=0,u=0):(A=c,l=0),c=u-A|0,n=l-A|0,(0|A)<0?(r[f>>2]=c,r[o>>2]=n,r[s>>2]=0,u=c,A=0):n=l,c=u-n|0,l=A-n|0,(0|n)<0?(r[f>>2]=c,r[s>>2]=l,r[o>>2]=0,n=0):(l=A,c=u),(0|(A=(0|n)<(0|(A=(0|l)<(0|c)?l:c))?n:A))>0&&(r[f>>2]=c-A,r[s>>2]=l-A,r[o>>2]=n-A),A=0|We(e,t,f,i)),L=a,0|(f=A))},_malloc:Tt,_maxFaceCount:function(e,t,n){n|=0;var A=0,i=0;if(i=0|Gt(0|(e|=0),0|(t|=0),45),w(),!(0|Q(127&i)))return i=2,r[n>>2]=i,0;if(i=0|Gt(0|e,0|t,52),w(),!(i&=15))return i=5,r[n>>2]=i,0;for(A=1;;){if(!(!((0|Vt(7,0,3*(15-A|0)|0))&e|0)&!((0|w())&t))){A=2,e=6;break}if(!(A>>>0<i>>>0)){A=5,e=6;break}A=A+1|0}return 6==(0|e)?(r[n>>2]=A,0):0},_maxGridDiskSize:function(e,t){t|=0;var n=0,A=0,i=0;return(0|(e|=0))<0?0|(t=2):(0|e)>13780509?0|(t=0|qe(15,t)):(i=0|Nt(0|e,0|(n=((0|e)<0)<<31>>31),3,0),A=0|w(),n=0|Rt(0|e,0|n,1,0),n=0|Rt(0|(n=0|Nt(0|i,0|A,0|n,0|w())),0|w(),1,0),e=0|w(),r[t>>2]=n,r[t+4>>2]=e,0|(t=0))},_maxPolygonToCellsSize:function(e,t,n,A){e|=0,t|=0,A|=0;var i,s=0,o=0,a=0,l=0,c=0;if(i=L,L=L+48|0,s=i+16|0,o=i+8|0,a=i,0|(n=0|st(n|=0)))return L=i,0|(a=n);if(l=0|r[(c=e)+4>>2],r[(n=o)>>2]=r[c>>2],r[n+4>>2]=l,it(o,s),!(n=0|ne(s,t,a))){if(t=0|r[o>>2],(0|(o=0|r[e+8>>2]))>0){s=0|r[e+12>>2],n=0;do{t=(0|r[s+(n<<3)>>2])+t|0,n=n+1|0}while((0|n)<(0|o))}s=0|r[(n=a)>>2],(0|(n=0|r[n+4>>2]))<(0|(o=((0|t)<0)<<31>>31))|(0|n)==(0|o)&s>>>0<t>>>0?(r[(n=a)>>2]=t,r[n+4>>2]=o,n=o):t=s,l=0|Rt(0|t,0|n,12,0),c=0|w(),r[(n=a)>>2]=l,r[n+4>>2]=c,r[(n=A)>>2]=l,r[n+4>>2]=c,n=0}return L=i,0|(c=n)},_maxPolygonToCellsSizeExperimental:function(e,t,n,s){t|=0,n|=0,s|=0;var o,a,c=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0;if(a=L,L=L+48|0,p=a+32|0,d=a+40|0,o=a,!(0|r[(e|=0)>>2]))return r[(m=s)>>2]=0,r[m+4>>2]=0,L=a,0|(m=0);Ce(p,0,0,0),c=0|r[(h=p)>>2],h=0|r[h+4>>2];do{if(t>>>0>15)r[(m=o)>>2]=0,r[m+4>>2]=0,r[o+8>>2]=4,r[o+12>>2]=-1,n=o+29|0,r[(m=o+16|0)>>2]=0,r[m+4>>2]=0,r[m+8>>2]=0,A[m+12|0]=0,A[n|0]=0|A[d|0],A[n+1|0]=0|A[d+1|0],A[n+2|0]=0|A[d+2|0],n=4,m=9;else{if(0|(n=0|st(n))){r[(p=o)>>2]=0,r[p+4>>2]=0,r[o+8>>2]=n,r[o+12>>2]=-1,m=o+29|0,r[(p=o+16|0)>>2]=0,r[p+4>>2]=0,r[p+8>>2]=0,A[p+12|0]=0,A[m|0]=0|A[d|0],A[m+1|0]=0|A[d+1|0],A[m+2|0]=0|A[d+2|0],m=9;break}if(!(n=0|xt(1+(0|r[e+8>>2])|0,32))){r[(m=o)>>2]=0,r[m+4>>2]=0,r[o+8>>2]=13,r[o+12>>2]=-1,n=o+29|0,r[(m=o+16|0)>>2]=0,r[m+4>>2]=0,r[m+8>>2]=0,A[m+12|0]=0,A[n|0]=0|A[d|0],A[n+1|0]=0|A[d+1|0],A[n+2|0]=0|A[d+2|0],n=13,m=9;break}ot(e,n),r[(b=o)>>2]=c,r[b+4>>2]=h,r[(h=o+8|0)>>2]=0,r[o+12>>2]=t,r[o+20>>2]=e,r[o+24>>2]=n,A[o+28|0]=0,A[(c=o+29|0)|0]=0|A[d|0],A[c+1|0]=0|A[d+1|0],A[c+2|0]=0|A[d+2|0],r[o+16>>2]=3,g=+X(n),g*=+W(n),f=+l(+ +i[n>>3]),f=g/+u(+ +jt(+f,+ +l(+ +i[n+8>>3])))*6371.007180918475*6371.007180918475,n=0|r[(c=o+12|0)>>2];e:do{if((0|n)>0)do{if(Ke(n+-1|0,p),!(f/+i[p>>3]>10))break e;n=(b=0|r[c>>2])+-1|0,r[c>>2]=n}while((0|b)>1)}while(0);if(nt(o),r[(c=s)>>2]=0,r[c+4>>2]=0,!(!(0|(n=0|r[(c=o)>>2]))&!(0|(c=0|r[c+4>>2]))))do{Me(n,c,t,p),d=p,d=0|Rt(0|r[(e=s)>>2],0|r[e+4>>2],0|r[d>>2],0|r[d+4>>2]),e=0|w(),r[(b=s)>>2]=d,r[b+4>>2]=e,nt(o),n=0|r[(b=o)>>2],c=0|r[b+4>>2]}while(!(!(0|n)&!(0|c)));n=0|r[h>>2]}}while(0);return L=a,0|(b=n)},_memcpy:Jt,_memmove:Kt,_memset:qt,_originToDirectedEdges:oe,_pentagonCount:function(){return 12},_polygonToCells:function(e,t,n,A){e|=0,t|=0,A|=0;var i,s,o,a,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0,b=0,y=0,B=0,v=0,C=0,_=0,M=0,T=0,E=0,x=0,S=0,I=0,R=0,D=0,P=0,O=0,U=0,k=0;if(a=L,L=L+112|0,i=a+80|0,h=a+72|0,s=a,o=a+56|0,0|(l=0|st(n|=0)))return L=a,0|(k=l);if(!(k=0|Tt(32+(r[(d=e+8|0)>>2]<<5)|0)))return L=a,0|(k=13);if(ot(e,k),!(l=0|st(n))){if(U=0|r[(O=e)+4>>2],r[(l=h)>>2]=r[O>>2],r[l+4>>2]=U,it(h,i),l=0|ne(i,t,s))O=0,U=0;else{if(l=0|r[h>>2],(0|(c=0|r[d>>2]))>0){u=0|r[e+12>>2],n=0;do{l=(0|r[u+(n<<3)>>2])+l|0,n=n+1|0}while((0|n)!=(0|c));n=l}else n=l;c=0|r[(l=s)>>2],(0|(l=0|r[l+4>>2]))<(0|(u=((0|n)<0)<<31>>31))|(0|l)==(0|u)&c>>>0<n>>>0?(r[(l=s)>>2]=n,r[l+4>>2]=u,l=u):n=c,O=0|Rt(0|n,0|l,12,0),U=0|w(),r[(l=s)>>2]=O,r[l+4>>2]=U,l=0}if(!l){if(!(n=0|xt(O,8)))return Et(k),L=a,0|(k=13);if(!(f=0|xt(O,8)))return Et(k),Et(n),L=a,0|(k=13);r[(D=i)>>2]=0,r[D+4>>2]=0,P=0|r[(D=e)+4>>2],r[(l=h)>>2]=r[D>>2],r[l+4>>2]=P,l=0|V(h,O,U,t,i,n,f);e:do{if(l)Et(n),Et(f),Et(k);else{t:do{if((0|r[d>>2])>0){for(u=e+12|0,c=0;l=0|V((0|r[u>>2])+(c<<3)|0,O,U,t,i,n,f),c=c+1|0,!(0|l);)if((0|c)>=(0|r[d>>2]))break t;Et(n),Et(f),Et(k);break e}}while(0);(0|U)>0|!(0|U)&O>>>0>0&&qt(0|f,0,O<<3),D=0|r[(P=i)+4>>2];t:do{if((0|D)>0|!(0|D)&(0|r[P>>2])>>>0>0){S=n,I=f,R=n,D=f,P=n,l=n,T=n,E=f,x=f,n=f;n:for(;;){for(v=0,C=0,_=0,M=0,c=0,u=0;;){h=(f=s)+56|0;do{r[f>>2]=0,f=f+4|0}while((0|f)<(0|h));if(0|F(d=0|r[(t=S+(v<<3)|0)>>2],t=0|r[t+4>>2],1,s,0)){h=(f=s)+56|0;do{r[f>>2]=0,f=f+4|0}while((0|f)<(0|h));0|(f=0|xt(7,4))&&(N(d,t,1,s,f,7,0,0),Et(f))}for(B=0;;){b=0|r[(y=s+(B<<3)|0)>>2],y=0|r[y+4>>2];A:do{if(!(0|b)&!(0|y))f=c,h=u;else{if(p=0|Ut(0|b,0|y,0|O,0|U),d=0|w(),!(!(0|(h=0|r[(t=f=A+(p<<3)|0)>>2]))&!(0|(t=0|r[t+4>>2])))){m=0,g=0;do{if((0|m)>(0|U)|(0|m)==(0|U)&g>>>0>O>>>0)break n;if((0|h)==(0|b)&(0|t)==(0|y)){f=c,h=u;break A}p=0|Ot(0|(f=0|Rt(0|p,0|d,1,0)),0|w(),0|O,0|U),d=0|w(),g=0|Rt(0|g,0|m,1,0),m=0|w(),h=0|r[(t=f=A+(p<<3)|0)>>2],t=0|r[t+4>>2]}while(!(!(0|h)&!(0|t)))}if(!(0|b)&!(0|y)){f=c,h=u;break}Ue(b,y,o),0|at(e,k,o)&&(g=0|Rt(0|c,0|u,1,0),u=0|w(),r[(m=f)>>2]=b,r[m+4>>2]=y,r[(c=I+(c<<3)|0)>>2]=b,r[c+4>>2]=y,c=g),f=c,h=u}}while(0);if((B=B+1|0)>>>0>=7)break;c=f,u=h}if(v=0|Rt(0|v,0|C,1,0),C=0|w(),_=0|Rt(0|_,0|M,1,0),M=0|w(),c=0|r[(u=i)>>2],!((0|M)<(0|(u=0|r[u+4>>2]))|(0|M)==(0|u)&_>>>0<c>>>0))break;c=f,u=h}if((0|u)>0|!(0|u)&c>>>0>0){c=0,u=0;do{r[(M=S+(c<<3)|0)>>2]=0,r[M+4>>2]=0,c=0|Rt(0|c,0|u,1,0),u=0|w(),_=0|r[(M=i)+4>>2]}while((0|u)<(0|_)|((0|u)==(0|_)?c>>>0<(0|r[M>>2])>>>0:0))}if(r[(M=i)>>2]=f,r[M+4>>2]=h,!((0|h)>0|!(0|h)&f>>>0>0))break t;B=n,v=x,C=P,_=E,M=I,n=T,x=l,E=R,T=B,l=v,P=D,D=C,R=_,I=S,S=M}Et(R),Et(D),Et(k),l=1;break e}l=f}while(0);Et(k),Et(n),Et(l),l=0}}while(0);return L=a,0|(k=l)}}return Et(k),L=a,0|(k=l)},_polygonToCellsExperimental:function(e,t,n,A,i,s){A|=0,i|=0,s|=0;var o,a,l,c=0,u=0,f=0,h=0,d=0,p=0,m=0,g=0;l=L,L=L+160|0,u=l+64|0,d=l+112|0,g=l,tt(h=l+80|0,e|=0,t|=0,n|=0),Ve(u,0|r[(f=h)>>2],0|r[f+4>>2],t),o=0|r[(f=u)>>2],f=0|r[f+4>>2],c=0|r[h+8>>2],r[(p=d+4|0)>>2]=r[h>>2],r[p+4>>2]=r[h+4>>2],r[p+8>>2]=r[h+8>>2],r[p+12>>2]=r[h+12>>2],r[p+16>>2]=r[h+16>>2],r[p+20>>2]=r[h+20>>2],r[p+24>>2]=r[h+24>>2],r[p+28>>2]=r[h+28>>2],r[(p=g)>>2]=o,r[p+4>>2]=f,r[(p=g+8|0)>>2]=c,t=d,n=(e=g+12|0)+36|0;do{r[e>>2]=r[t>>2],e=e+4|0,t=t+4|0}while((0|e)<(0|n));if(r[(d=g+48|0)>>2]=r[u>>2],r[d+4>>2]=r[u+4>>2],r[d+8>>2]=r[u+8>>2],r[d+12>>2]=r[u+12>>2],!(0|o)&!(0|f))return L=l,0|(g=c);n=g+16|0,a=g+24|0,h=g+28|0,c=0,u=0,t=o,e=f;do{if(!((0|c)<(0|i)|(0|c)==(0|i)&u>>>0<A>>>0)){m=4;break}if(f=u,u=0|Rt(0|u,0|c,1,0),c=0|w(),r[(f=s+(f<<3)|0)>>2]=t,r[f+4>>2]=e,Qe(d),!(0|(t=0|r[(e=d)>>2]))&!(0|(e=0|r[e+4>>2]))){if(nt(n),!(0|(e=0|r[(t=n)>>2]))&!(0|(t=0|r[t+4>>2]))){m=10;break}He(e,t,0|r[h>>2],d),t=0|r[(e=d)>>2],e=0|r[e+4>>2]}r[(f=g)>>2]=t,r[f+4>>2]=e}while(!(!(0|t)&!(0|e)));return 4==(0|m)?(0|(t=0|r[(e=g+40|0)>>2])&&Et(t),r[(m=g+16|0)>>2]=0,r[m+4>>2]=0,r[a>>2]=0,r[g+36>>2]=0,r[h>>2]=-1,r[g+32>>2]=0,r[e>>2]=0,He(0,0,0,d),r[g>>2]=0,r[g+4>>2]=0,r[p>>2]=0,L=l,0|(g=14)):(10==(0|m)&&(r[g>>2]=0,r[g+4>>2]=0,r[p>>2]=r[a>>2]),g=0|r[p>>2],L=l,0|g)},_readInt64AsDoubleFromPointer:function(e){return+(+((0|r[(e|=0)>>2])>>>0)+4294967296*+(0|r[e+4>>2]))},_res0CellCount:function(){return 122},_reverseDirectedEdge:le,_round:Yt,_sbrk:Wt,_sizeOfCellBoundary:function(){return 168},_sizeOfCoordIJ:function(){return 8},_sizeOfGeoLoop:function(){return 8},_sizeOfGeoPolygon:function(){return 16},_sizeOfH3Index:function(){return 8},_sizeOfLatLng:function(){return 16},_sizeOfLinkedGeoPolygon:function(){return 12},_uncompactCells:function(e,t,n,A,i,s,o){e|=0,A|=0,i|=0,s|=0;var a,l=0,c=0,u=0,f=0,h=0,d=0,p=0,m=0;if(a=L,L=L+16|0,m=a,!((0|(n|=0))>0|!(0|n)&(t|=0)>>>0>0))return L=a,0|(m=0);if((0|(o|=0))>=16)return L=a,0|(m=12);d=0,p=0,h=0,l=0;e:for(;;){if(f=0|Gt(0|(c=0|r[(u=e+(d<<3)|0)>>2]),0|(u=0|r[u+4>>2]),52),w(),(15&f)>(0|o)){l=12,c=11;break}if(Ve(m,c,u,o),!(0|(u=0|r[(f=m)>>2]))&!(0|(f=0|r[f+4>>2])))c=h;else{c=h;do{if(!((0|l)<(0|s)|(0|l)==(0|s)&c>>>0<i>>>0)){c=10;break e}r[(h=A+(c<<3)|0)>>2]=u,r[h+4>>2]=f,c=0|Rt(0|c,0|l,1,0),l=0|w(),Qe(m),u=0|r[(h=m)>>2],f=0|r[h+4>>2]}while(!(!(0|u)&!(0|f)))}if(d=0|Rt(0|d,0|p,1,0),!((0|(p=0|w()))<(0|n)|(0|p)==(0|n)&d>>>0<t>>>0)){l=0,c=11;break}h=c}return 10==(0|c)?(L=a,0|(m=14)):11==(0|c)?(L=a,0|l):0},_uncompactCellsSize:function(e,t,n,A,i){e|=0,t|=0,n|=0,A|=0,i|=0;var s,o,a=0,l=0,c=0,u=0,f=0,h=0;o=L,L=L+16|0,s=o;e:do{if((0|n)>0|!(0|n)&t>>>0>0){for(f=0,l=0,a=0,h=0;;){if(!(!(0|(c=0|r[(u=e+(f<<3)|0)>>2]))&!(0|(u=0|r[u+4>>2]))||(u=!(0|Me(c,u,A,s)),l=0|Rt(0|r[(c=s)>>2],0|r[c+4>>2],0|l,0|a),a=0|w(),u))){a=12;break}if(f=0|Rt(0|f,0|h,1,0),!((0|(h=0|w()))<(0|n)|(0|h)==(0|n)&f>>>0<t>>>0))break e}return L=o,0|a}l=0,a=0}while(0);return r[i>>2]=l,r[i+4>>2]=a,L=o,0|(i=0)},_vertexToLatLng:function(e,t,n){n|=0;var A,i,s,o,a=0,l=0;return o=L,L=L+192|0,i=o,s=o+168|0,a=0|Gt(0|(e|=0),0|(t|=0),56),w(),a&=7,0|(A=0|Oe(e,l=-2130706433&t|134217728,s))?(L=o,0|(l=A)):(t=0|Gt(0|e,0|t,52),w(),t&=15,0|we(e,l)?he(s,t,a,1,i):ge(s,t,a,1,i),l=i+8|0,r[n>>2]=r[l>>2],r[n+4>>2]=r[l+4>>2],r[n+8>>2]=r[l+8>>2],r[n+12>>2]=r[l+12>>2],L=o,0|(l=0))},dynCall_iii:function(e,t,n){return t|=0,n|=0,0|Xt[3&(e|=0)](0|t,0|n)},establishStackSpace:function(e,t){L=e|=0},stackAlloc:function(e){var t;return t=L,L=(L=L+(e|=0)|0)+15&-16,0|t},stackRestore:function(e){L=e|=0},stackSave:function(){return 0|L}}}({Math:Math,Int8Array:Int8Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Float32Array:Float32Array,Float64Array:Float64Array},{a:Ae,b:function(e){a=e},c:function(){return a},d:function(e,t,n,A){Ae("Assertion failed: "+B(e)+", at: "+[t?B(t):"unknown filename",n,A?B(A):"unknown function"])},e:function(e){return n.___errno_location&&(m[n.___errno_location()>>2]=e),e},f:H,g:function(e,t,n){d.set(d.subarray(t,t+n),e)},h:function(e){var t=H(),n=16777216,A=2130706432;if(e>A)return!1;for(var r=Math.max(t,16777216);r<e;)r=r<=536870912?v(2*r,n):Math.min(v((3*r+2147483648)/4,n),A);return!!function(e){try{var t=new ArrayBuffer(e);if(t.byteLength!=e)return;return new Int8Array(t).set(h),J(t),C(t),1}catch(VA){}}(r)},i:function(e){Ae("OOM")},o:28400,p:28384},f);n.___divdi3=z.___divdi3,n.___muldi3=z.___muldi3,n.___remdi3=z.___remdi3,n.___uremdi3=z.___uremdi3,n._areNeighborCells=z._areNeighborCells,n._bitshift64Ashr=z._bitshift64Ashr,n._bitshift64Lshr=z._bitshift64Lshr,n._bitshift64Shl=z._bitshift64Shl,n._calloc=z._calloc,n._cellAreaKm2=z._cellAreaKm2,n._cellAreaM2=z._cellAreaM2,n._cellAreaRads2=z._cellAreaRads2,n._cellToBoundary=z._cellToBoundary,n._cellToCenterChild=z._cellToCenterChild,n._cellToChildPos=z._cellToChildPos,n._cellToChildren=z._cellToChildren,n._cellToChildrenSize=z._cellToChildrenSize,n._cellToLatLng=z._cellToLatLng,n._cellToLocalIj=z._cellToLocalIj,n._cellToParent=z._cellToParent,n._cellToVertex=z._cellToVertex,n._cellToVertexes=z._cellToVertexes,n._cellsToDirectedEdge=z._cellsToDirectedEdge,n._cellsToLinkedMultiPolygon=z._cellsToLinkedMultiPolygon,n._childPosToCell=z._childPosToCell,n._compactCells=z._compactCells,n._constructCell=z._constructCell,n._destroyLinkedMultiPolygon=z._destroyLinkedMultiPolygon,n._directedEdgeToBoundary=z._directedEdgeToBoundary,n._directedEdgeToCells=z._directedEdgeToCells,n._edgeLengthKm=z._edgeLengthKm,n._edgeLengthM=z._edgeLengthM,n._edgeLengthRads=z._edgeLengthRads;var J=n._emscripten_replace_memory=z._emscripten_replace_memory;n._free=z._free,n._getBaseCellNumber=z._getBaseCellNumber,n._getDirectedEdgeDestination=z._getDirectedEdgeDestination,n._getDirectedEdgeOrigin=z._getDirectedEdgeOrigin,n._getHexagonAreaAvgKm2=z._getHexagonAreaAvgKm2,n._getHexagonAreaAvgM2=z._getHexagonAreaAvgM2,n._getHexagonEdgeLengthAvgKm=z._getHexagonEdgeLengthAvgKm,n._getHexagonEdgeLengthAvgM=z._getHexagonEdgeLengthAvgM,n._getIcosahedronFaces=z._getIcosahedronFaces,n._getIndexDigit=z._getIndexDigit,n._getNumCells=z._getNumCells,n._getPentagons=z._getPentagons,n._getRes0Cells=z._getRes0Cells,n._getResolution=z._getResolution,n._greatCircleDistanceKm=z._greatCircleDistanceKm,n._greatCircleDistanceM=z._greatCircleDistanceM,n._greatCircleDistanceRads=z._greatCircleDistanceRads,n._gridDisk=z._gridDisk,n._gridDiskDistances=z._gridDiskDistances,n._gridDistance=z._gridDistance,n._gridPathCells=z._gridPathCells,n._gridPathCellsSize=z._gridPathCellsSize,n._gridRing=z._gridRing,n._gridRingUnsafe=z._gridRingUnsafe,n._i64Add=z._i64Add,n._i64Subtract=z._i64Subtract,n._isPentagon=z._isPentagon,n._isResClassIII=z._isResClassIII,n._isValidCell=z._isValidCell,n._isValidDirectedEdge=z._isValidDirectedEdge,n._isValidIndex=z._isValidIndex,n._isValidVertex=z._isValidVertex,n._latLngToCell=z._latLngToCell,n._llvm_ctlz_i64=z._llvm_ctlz_i64,n._llvm_maxnum_f64=z._llvm_maxnum_f64,n._llvm_minnum_f64=z._llvm_minnum_f64,n._llvm_round_f64=z._llvm_round_f64,n._localIjToCell=z._localIjToCell,n._malloc=z._malloc,n._maxFaceCount=z._maxFaceCount,n._maxGridDiskSize=z._maxGridDiskSize,n._maxPolygonToCellsSize=z._maxPolygonToCellsSize,n._maxPolygonToCellsSizeExperimental=z._maxPolygonToCellsSizeExperimental,n._memcpy=z._memcpy,n._memmove=z._memmove,n._memset=z._memset,n._originToDirectedEdges=z._originToDirectedEdges,n._pentagonCount=z._pentagonCount,n._polygonToCells=z._polygonToCells,n._polygonToCellsExperimental=z._polygonToCellsExperimental,n._readInt64AsDoubleFromPointer=z._readInt64AsDoubleFromPointer,n._res0CellCount=z._res0CellCount,n._reverseDirectedEdge=z._reverseDirectedEdge,n._round=z._round,n._sbrk=z._sbrk,n._sizeOfCellBoundary=z._sizeOfCellBoundary,n._sizeOfCoordIJ=z._sizeOfCoordIJ,n._sizeOfGeoLoop=z._sizeOfGeoLoop,n._sizeOfGeoPolygon=z._sizeOfGeoPolygon,n._sizeOfH3Index=z._sizeOfH3Index,n._sizeOfLatLng=z._sizeOfLatLng,n._sizeOfLinkedGeoPolygon=z._sizeOfLinkedGeoPolygon,n._uncompactCells=z._uncompactCells,n._uncompactCellsSize=z._uncompactCellsSize,n._vertexToLatLng=z._vertexToLatLng,n.establishStackSpace=z.establishStackSpace;var K,q,Y=n.stackAlloc=z.stackAlloc,W=n.stackRestore=z.stackRestore,X=n.stackSave=z.stackSave;if(n.dynCall_iii=z.dynCall_iii,n.asm=z,n.cwrap=function(e,t,n,A){var r=(n=n||[]).every(function(e){return"number"===e});return"string"!==t&&r&&!A?c(e):function(){return u(e,t,n,arguments)}},n.setValue=function(e,t,n,A){switch("*"===(n=n||"i8").charAt(n.length-1)&&(n="i32"),n){case"i1":case"i8":h[e|0]=t;break;case"i16":p[e>>1]=t;break;case"i32":m[e>>2]=t;break;case"i64":U=[t>>>0,(O=t,+R(O)>=1?O>0?(0|P(+D(O/4294967296),4294967295))>>>0:~~+L((O-+(~~O>>>0))/4294967296)>>>0:0)],m[e>>2]=U[0],m[e+4>>2]=U[1];break;case"float":g[e>>2]=t;break;case"double":b[e>>3]=t;break;default:Ae("invalid type for setValue: "+n)}},n.getValue=function(e,t,n){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return h[e|0];case"i16":return p[e>>1];case"i32":case"i64":return m[e>>2];case"float":return g[e>>2];case"double":return b[e>>3];default:Ae("invalid type for getValue: "+t)}return null},k){V(k)||(K=k,k=n.locateFile?n.locateFile(K,i):i+K),F++,n.monitorRunDependencies&&n.monitorRunDependencies(F);var Z=function(e){e.byteLength&&(e=new Uint8Array(e)),d.set(e,8),n.memoryInitializerRequest&&delete n.memoryInitializerRequest.response,function(){if(F--,n.monitorRunDependencies&&n.monitorRunDependencies(F),0==F&&N){var e=N;N=null,e()}}()},$=function(){r(k,Z,function(){throw"could not load memory initializer "+k})},ee=j(k);if(ee)Z(ee.buffer);else if(n.memoryInitializerRequest){var te=function(){var e=n.memoryInitializerRequest,t=e.response;if(200!==e.status&&0!==e.status){var A=j(n.memoryInitializerRequestURL);if(!A)return console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+e.status+", retrying "+k),void $();t=A.buffer}Z(t)};n.memoryInitializerRequest.response?setTimeout(te,0):n.memoryInitializerRequest.addEventListener("load",te)}else $()}function ne(e){function t(){q||(q=!0,l||(M(T),M(E),n.onRuntimeInitialized&&n.onRuntimeInitialized(),function(){if(n.postRun)for("function"==typeof n.postRun&&(n.postRun=[n.postRun]);n.postRun.length;)I(n.postRun.shift());M(x)}()))}F>0||(!function(){if(n.preRun)for("function"==typeof n.preRun&&(n.preRun=[n.preRun]);n.preRun.length;)S(n.preRun.shift());M(w)}(),F>0||(n.setStatus?(n.setStatus("Running..."),setTimeout(function(){setTimeout(function(){n.setStatus("")},1),t()},1)):t()))}function Ae(e){throw n.onAbort&&n.onAbort(e),s(e+=""),o(e),l=!0,"abort("+e+"). Build with -s ASSERTIONS=1 for more info."}if(N=function e(){q||ne(),q||(N=e)},n.run=ne,n.abort=Ae,n.preInit)for("function"==typeof n.preInit&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.pop()();return ne(),e}("object"==typeof yi?yi:{}),Bi="number",vi={0:"Success",1:"The operation failed but a more specific error is not available",2:"Argument was outside of acceptable range",3:"Latitude or longitude arguments were outside of acceptable range",4:"Resolution argument was outside of acceptable range",5:"Cell argument was not valid",6:"Directed edge argument was not valid",7:"Undirected edge argument was not valid",8:"Vertex argument was not valid",9:"Pentagon distortion was encountered",10:"Duplicate input",11:"Cell arguments were not neighbors",12:"Cell arguments had incompatible resolutions",13:"Memory allocation failed",14:"Bounds of provided memory were insufficient",15:"Mode or flags argument was not valid",16:"Index argument was not valid",17:"Base cell number was outside of acceptable range",18:"Child indexing digits invalid",19:"Child indexing digits refer to a deleted subsequence"},Ci={1e3:"Unknown unit",1001:"Array length out of bounds",1002:"Got unexpected null value for H3 index"};function _i(e,t,n){var A=n&&"value"in n,r=new Error((e[t]||"Unknown error")+" (code: "+t+(A?", value: "+n.value:"")+")");return r.code=t,r}function Mi(e,t){return _i(vi,e,2===arguments.length?{value:t}:{})}function wi(e,t){return _i(Ci,e,2===arguments.length?{value:t}:{})}function Ti(e){if(0!==e)throw Mi(e)}var Ei={};[["sizeOfH3Index",Bi],["sizeOfLatLng",Bi],["sizeOfCellBoundary",Bi],["sizeOfGeoLoop",Bi],["sizeOfGeoPolygon",Bi],["sizeOfLinkedGeoPolygon",Bi],["sizeOfCoordIJ",Bi],["readInt64AsDoubleFromPointer",Bi],["isValidCell",Bi,[Bi,Bi]],["isValidIndex",Bi,[Bi,Bi]],["latLngToCell",Bi,[Bi,Bi,Bi,Bi]],["cellToLatLng",Bi,[Bi,Bi,Bi]],["cellToBoundary",Bi,[Bi,Bi,Bi]],["maxGridDiskSize",Bi,[Bi,Bi]],["gridDisk",Bi,[Bi,Bi,Bi,Bi]],["gridDiskDistances",Bi,[Bi,Bi,Bi,Bi,Bi]],["gridRing",Bi,[Bi,Bi,Bi,Bi]],["gridRingUnsafe",Bi,[Bi,Bi,Bi,Bi]],["maxPolygonToCellsSize",Bi,[Bi,Bi,Bi,Bi]],["polygonToCells",Bi,[Bi,Bi,Bi,Bi]],["maxPolygonToCellsSizeExperimental",Bi,[Bi,Bi,Bi,Bi]],["polygonToCellsExperimental",Bi,[Bi,Bi,Bi,Bi,Bi,Bi]],["cellsToLinkedMultiPolygon",Bi,[Bi,Bi,Bi]],["destroyLinkedMultiPolygon",null,[Bi]],["compactCells",Bi,[Bi,Bi,Bi,Bi]],["uncompactCells",Bi,[Bi,Bi,Bi,Bi,Bi,Bi]],["uncompactCellsSize",Bi,[Bi,Bi,Bi,Bi,Bi]],["isPentagon",Bi,[Bi,Bi]],["isResClassIII",Bi,[Bi,Bi]],["getBaseCellNumber",Bi,[Bi,Bi]],["getResolution",Bi,[Bi,Bi]],["getIndexDigit",Bi,[Bi,Bi,Bi]],["constructCell",Bi,[Bi,Bi,Bi,Bi]],["maxFaceCount",Bi,[Bi,Bi,Bi]],["getIcosahedronFaces",Bi,[Bi,Bi,Bi]],["cellToParent",Bi,[Bi,Bi,Bi,Bi]],["cellToChildren",Bi,[Bi,Bi,Bi,Bi]],["cellToCenterChild",Bi,[Bi,Bi,Bi,Bi]],["cellToChildrenSize",Bi,[Bi,Bi,Bi,Bi]],["cellToChildPos",Bi,[Bi,Bi,Bi,Bi]],["childPosToCell",Bi,[Bi,Bi,Bi,Bi,Bi,Bi]],["areNeighborCells",Bi,[Bi,Bi,Bi,Bi,Bi]],["cellsToDirectedEdge",Bi,[Bi,Bi,Bi,Bi,Bi]],["getDirectedEdgeOrigin",Bi,[Bi,Bi,Bi]],["getDirectedEdgeDestination",Bi,[Bi,Bi,Bi]],["isValidDirectedEdge",Bi,[Bi,Bi]],["directedEdgeToCells",Bi,[Bi,Bi,Bi]],["originToDirectedEdges",Bi,[Bi,Bi,Bi]],["directedEdgeToBoundary",Bi,[Bi,Bi,Bi]],["reverseDirectedEdge",Bi,[Bi,Bi,Bi]],["gridDistance",Bi,[Bi,Bi,Bi,Bi,Bi]],["gridPathCells",Bi,[Bi,Bi,Bi,Bi,Bi]],["gridPathCellsSize",Bi,[Bi,Bi,Bi,Bi,Bi]],["cellToLocalIj",Bi,[Bi,Bi,Bi,Bi,Bi,Bi]],["localIjToCell",Bi,[Bi,Bi,Bi,Bi,Bi]],["getHexagonAreaAvgM2",Bi,[Bi,Bi]],["getHexagonAreaAvgKm2",Bi,[Bi,Bi]],["getHexagonEdgeLengthAvgM",Bi,[Bi,Bi]],["getHexagonEdgeLengthAvgKm",Bi,[Bi,Bi]],["greatCircleDistanceM",Bi,[Bi,Bi]],["greatCircleDistanceKm",Bi,[Bi,Bi]],["greatCircleDistanceRads",Bi,[Bi,Bi]],["cellAreaM2",Bi,[Bi,Bi,Bi]],["cellAreaKm2",Bi,[Bi,Bi,Bi]],["cellAreaRads2",Bi,[Bi,Bi,Bi]],["edgeLengthM",Bi,[Bi,Bi,Bi]],["edgeLengthKm",Bi,[Bi,Bi,Bi]],["edgeLengthRads",Bi,[Bi,Bi,Bi]],["getNumCells",Bi,[Bi,Bi]],["getRes0Cells",Bi,[Bi]],["res0CellCount",Bi],["getPentagons",Bi,[Bi,Bi]],["pentagonCount",Bi],["cellToVertex",Bi,[Bi,Bi,Bi,Bi]],["cellToVertexes",Bi,[Bi,Bi,Bi]],["vertexToLatLng",Bi,[Bi,Bi,Bi]],["isValidVertex",Bi,[Bi,Bi]]].forEach(function(e){Ei[e[0]]=yi.cwrap.apply(yi,e)});var xi=16,Si=Ei.sizeOfH3Index(),Ii=Ei.sizeOfLatLng(),Ri=Ei.sizeOfCellBoundary();Ei.sizeOfGeoPolygon(),Ei.sizeOfGeoLoop();var Li=Ei.sizeOfLinkedGeoPolygon();Ei.sizeOfCoordIJ();var Di="m",Pi="km";var Fi=/[^0-9a-fA-F]/;function Ni(e){if(Array.isArray(e)&&2===e.length&&Number.isInteger(e[0])&&Number.isInteger(e[1]))return e;if("string"!=typeof e||Fi.test(e))return[0,0];var t=parseInt(e.substring(0,e.length-8),xi);return[parseInt(e.substring(e.length-8),xi),t]}function Oi(e){if(e>=0)return e.toString(xi);var t=Ui(8,(e&=2147483647).toString(xi));return t=(parseInt(t[0],xi)+8).toString(xi)+t.substring(1)}function Ui(e,t){for(var n=e-t.length,A="",r=0;r<n;r++)A+="0";return A+=t}function ki(e,t){void 0===t&&(t=0);var n=yi.getValue(e+Si*t,"i32"),A=yi.getValue(e+Si*t+4,"i32");return A?function(e,t){return Oi(t)+Ui(8,Oi(e))}(n,A):null}function Gi(e,t,n){yi.HEAPU32.set(Ni(e),t/4+2*n)}function Vi(e){return 180*yi.getValue(e,"double")/Math.PI}function Hi(e){return[Vi(e+8),Vi(e)]}function Qi(e){var t=Ni(e),n=t[0],A=t[1];return Boolean(Ei.isPentagon(n,A))}function ji(e){var t=Ni(e),n=t[0],A=t[1];return Ei.isValidCell(n,A)?Ei.getResolution(n,A):-1}function zi(e,t,n){var A=yi._malloc(Ii);yi.HEAPF64.set([e,t].map(Xi),A/8);var r=yi._malloc(Si);try{return Ti(Ei.latLngToCell(A,n,r)),function(e){if(!e)throw wi(1002);return e}(ki(r))}finally{yi._free(r),yi._free(A)}}function Ji(e){var t,n=yi._malloc(Ii),A=Ni(e),r=A[0],i=A[1];try{return Ti(Ei.cellToLatLng(r,i,n)),[Vi(t=n),Vi(t+8)]}finally{yi._free(n)}}function Ki(e,t){var n=yi._malloc(Ri),A=Ni(e),r=A[0],i=A[1];try{return Ti(Ei.cellToBoundary(r,i,n)),function(e){for(var t=yi.getValue(e,"i32"),n=e+8,A=[],r=Hi,i=0;i<2*t;i+=2)A.push(r(n+8*i));return A.push(A[0]),A}(n)}finally{yi._free(n)}}function qi(e,t){if(!e||!e.length)return[];var n=e.length,A=yi._calloc(n,Si);!function(e,t){for(var n=t.length,A=0;A<n;A++)Gi(t[A],e,A)}(A,e);var r=yi._calloc(Li);try{return Ti(Ei.cellsToLinkedMultiPolygon(A,n,r)),function(e){for(var t,n,A,r,i=[],s=Hi;e;){for(i.push(t=[]),n=yi.getValue(e,"i8*");n;){for(t.push(A=[]),r=yi.getValue(n,"i8*");r;)A.push(s(r)),r=yi.getValue(r+16,"i8*");A.push(A[0]),n=yi.getValue(n+8,"i8*")}e=yi.getValue(e+8,"i8*")}return i}(r)}finally{Ei.destroyLinkedMultiPolygon(r),yi._free(r),yi._free(A)}}function Yi(e,t){var n,A=Ni(e),r=A[0],i=A[1],s=Ni(t),o=s[0],a=s[1],l=yi._malloc(8);try{return Ti(Ei.gridDistance(r,i,o,a,l)),n=l,Ei.readInt64AsDoubleFromPointer(n)}finally{yi._free(l)}}function Wi(e,t){!function(e){if("number"!=typeof e||e<0||e>15||Math.floor(e)!==e)throw Mi(4,e)}(e);var n,A,r=yi._malloc(8);try{switch(t){case Di:Ti(Ei.getHexagonEdgeLengthAvgM(e,r));break;case Pi:Ti(Ei.getHexagonEdgeLengthAvgKm(e,r));break;default:throw wi(1e3,t)}return n=r,void 0===A&&(A=0),yi.getValue(n+8*A,"double")}finally{yi._free(r)}}function Xi(e){return e*Math.PI/180}function Zi(e,t){t=void 0===t?e[0][0]:t;for(const n of e){const e=n[0]-t;e>180?n[0]-=360:e<-180&&(n[0]+=360)}}function $i(e,t,n){const A=e(t,n),[r,i]=Ji(A);return[i,r]}function es(e,n=1){const A=Ki(e);return 1!==n?function(e,n,A){const[r,i]=Ji(e),s=n.length;Zi(n,i);const o=n[0]===n[s-1]?s-1:s;for(let a=0;a<o;a++)n[a][0]=t.lerp$1(i,n[a][0],A),n[a][1]=t.lerp$1(r,n[a][1],A)}(e,A,n):Zi(A),A}function ts(e){const t=new Float64Array(2*e.length);let n=0;for(const A of e)t[n++]=A[0],t[n++]=A[1];return t}class ns extends ae{indexToBounds(){const{data:e,getPentagon:t}=this.props;return{data:e,_normalize:!1,_windingOrder:"CCW",positionFormat:"XY",getPolygon:(e,n)=>{const A=t(e,n);return ts(function(e,{closedRing:t=!0,segments:n="auto"}={closedRing:!0,segments:"auto"}){if(0n===e)return[];const{S:A,segment:r,origin:i,resolution:s}=di(e);"auto"===n&&(n=Math.max(1,Math.pow(2,6-s)));const o=cr(mi({S:A,segment:r,origin:i,resolution:s}).splitEdges(n).getVertices().map(e=>pi.inverse(e,i.id)).map(e=>lr(e)));return t&&o.push(o[0]),o.reverse(),o}("string"==typeof A?BigInt(`0x${A}`):A,{closedRing:!0,segments:"auto"}))}}}}function As(e){return"string"==typeof e?e.charAt(0).toLowerCase()+e.slice(1):e}function rs(e){if(Array.isArray(e))return e.map(e=>rs(e));if(e&&"object"==typeof e){const t={};for(const[n,A]of Object.entries(e))t[As(n)]=rs(A);return t}return e}ns.layerName="A5Layer",ns.defaultProps={getPentagon:{type:"accessor",value:e=>e.pentagon}};const is=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",ss=new RegExp("^"+("["+is+"]["+(is+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040")+"]*")+"$");function os(e,t){const n=[];let A=t.exec(e);for(;A;){const r=[];r.startIndex=t.lastIndex-A[0].length;const i=A.length;for(let e=0;e<i;e++)r.push(A[e]);n.push(r),A=t.exec(e)}return n}const as=function(e){const t=ss.exec(e);return!(null==t)};const ls=["hasOwnProperty","toString","valueOf","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"],cs=["__proto__","constructor","prototype"],us={allowBooleanAttributes:!1,unpairedTags:[]};function fs(e){return" "===e||"\t"===e||"\n"===e||"\r"===e}function hs(e,t){const n=t;for(;t<e.length;t++)if("?"==e[t]||" "==e[t]){const A=e.substr(n,t-n);if(t>5&&"xml"===A)return vs("InvalidXml","XML declaration allowed only at the start of the document.",Ms(e,t));if("?"==e[t]&&">"==e[t+1]){t++;break}continue}return t}function ds(e,t){if(e.length>t+5&&"-"===e[t+1]&&"-"===e[t+2]){for(t+=3;t<e.length;t++)if("-"===e[t]&&"-"===e[t+1]&&">"===e[t+2]){t+=2;break}}else if(e.length>t+8&&"D"===e[t+1]&&"O"===e[t+2]&&"C"===e[t+3]&&"T"===e[t+4]&&"Y"===e[t+5]&&"P"===e[t+6]&&"E"===e[t+7]){let n=1;for(t+=8;t<e.length;t++)if("<"===e[t])n++;else if(">"===e[t]&&(n--,0===n))break}else if(e.length>t+9&&"["===e[t+1]&&"C"===e[t+2]&&"D"===e[t+3]&&"A"===e[t+4]&&"T"===e[t+5]&&"A"===e[t+6]&&"["===e[t+7])for(t+=8;t<e.length;t++)if("]"===e[t]&&"]"===e[t+1]&&">"===e[t+2]){t+=2;break}return t}const ps='"',ms="'";function gs(e,t){let n="",A="",r=!1;for(;t<e.length;t++){if(e[t]===ps||e[t]===ms)""===A?A=e[t]:A!==e[t]||(A="");else if(">"===e[t]&&""===A){r=!0;break}n+=e[t]}return""===A&&{value:n,index:t,tagClosed:r}}const bs=new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function ys(e,t){const n=os(e,bs),A={};for(let r=0;r<n.length;r++){if(0===n[r][1].length)return vs("InvalidAttr","Attribute '"+n[r][2]+"' has no space in starting.",ws(n[r]));if(void 0!==n[r][3]&&void 0===n[r][4])return vs("InvalidAttr","Attribute '"+n[r][2]+"' is without value.",ws(n[r]));if(void 0===n[r][3]&&!t.allowBooleanAttributes)return vs("InvalidAttr","boolean attribute '"+n[r][2]+"' is not allowed.",ws(n[r]));const e=n[r][2];if(!Cs(e))return vs("InvalidAttr","Attribute '"+e+"' is an invalid name.",ws(n[r]));if(Object.prototype.hasOwnProperty.call(A,e))return vs("InvalidAttr","Attribute '"+e+"' is repeated.",ws(n[r]));A[e]=1}return!0}function Bs(e,t){if(";"===e[++t])return-1;if("#"===e[t])return function(e,t){let n=/\d/;for("x"===e[t]&&(t++,n=/[\da-fA-F]/);t<e.length;t++){if(";"===e[t])return t;if(!e[t].match(n))break}return-1}(e,++t);let n=0;for(;t<e.length;t++,n++)if(!(e[t].match(/\w/)&&n<20)){if(";"===e[t])break;return-1}return t}function vs(e,t,n){return{err:{code:e,msg:t,line:n.line||n,col:n.col}}}function Cs(e){return as(e)}function _s(e){return as(e)}function Ms(e,t){const n=e.substring(0,t).split(/\r?\n/);return{line:n.length,col:n[n.length-1].length+1}}function ws(e){return e.startIndex+e[1].length}const Ts={cent:"¢",pound:"£",curren:"¤",yen:"¥",euro:"€",dollar:"$",fnof:"ƒ",inr:"₹",af:"؋",birr:"ብር",peso:"₱",rub:"₽",won:"₩",yuan:"¥",cedil:"¸"},Es={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'},xs={nbsp:" ",copy:"©",reg:"®",trade:"™",mdash:"—",ndash:"–",hellip:"…",laquo:"«",raquo:"»",lsquo:"‘",rsquo:"’",ldquo:"“",rdquo:"”",bull:"•",para:"¶",sect:"§",deg:"°",frac12:"½",frac14:"¼",frac34:"¾"},Ss=Object.freeze({ALLOW:"allow",BLOCK:"block",THROW:"throw"}),Is=new Set("!?\\\\/[]$%{}^&*()<>|+");function Rs(e){if("#"===e[0])throw new Error(`[EntityReplacer] Invalid character '#' in entity name: "${e}"`);for(const t of e)if(Is.has(t))throw new Error(`[EntityReplacer] Invalid character '${t}' in entity name: "${e}"`);return e}function Ls(...e){const t=Object.create(null);for(const n of e)if(n)for(const e of Object.keys(n)){const A=n[e];if("string"==typeof A)t[e]=A;else if(A&&"object"==typeof A&&void 0!==A.val){const n=A.val;"string"==typeof n&&(t[e]=n)}}return t}const Ds="external",Ps="base",Fs="all";const Ns=Object.freeze({allow:0,leave:1,remove:2,throw:3}),Os=new Set([9,10,13]);class Us{constructor(e={}){var t;this._limit=e.limit||{},this._maxTotalExpansions=this._limit.maxTotalExpansions||0,this._maxExpandedLength=this._limit.maxExpandedLength||0,this._postCheck="function"==typeof e.postCheck?e.postCheck:e=>e,this._limitTiers=(t=this._limit.applyLimitsTo??Ds)&&t!==Ds?t===Fs?new Set([Fs]):t===Ps?new Set([Ps]):Array.isArray(t)?new Set(t):new Set([Ds]):new Set([Ds]),this._numericAllowed=e.numericAllowed??!0,this._baseMap=Ls(Es,e.namedEntities||null),this._externalMap=Object.create(null),this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this._removeSet=new Set(e.remove&&Array.isArray(e.remove)?e.remove:[]),this._leaveSet=new Set(e.leave&&Array.isArray(e.leave)?e.leave:[]);const n=function(e){if(!e)return{xmlVersion:1,onLevel:Ns.allow,nullLevel:Ns.remove};const t=1.1===e.xmlVersion?1.1:1,n=Ns[e.onNCR]??Ns.allow,A=Ns[e.nullNCR]??Ns.remove;return{xmlVersion:t,onLevel:n,nullLevel:Math.max(A,Ns.remove)}}(e.ncr);this._ncrXmlVersion=n.xmlVersion,this._ncrOnLevel=n.onLevel,this._ncrNullLevel=n.nullLevel,this._onExternalEntity="function"==typeof e.onExternalEntity?e.onExternalEntity:null,this._onInputEntity="function"==typeof e.onInputEntity?e.onInputEntity:null}_applyRegistrationHook(e,t,n,A){if(!e)return!0;const r=e(t,n);if(r===Ss.BLOCK)return!1;if(r===Ss.THROW)throw new Error(`[EntityDecoder] Registration of ${A} entity "&${t};" was rejected by hook`);return!0}setExternalEntities(e){if(e)for(const A of Object.keys(e))Rs(A);if(!this._onExternalEntity)return void(this._externalMap=Ls(e));const t=Ls(e),n=Object.create(null);for(const[A,r]of Object.entries(t))this._applyRegistrationHook(this._onExternalEntity,A,r,"external")&&(n[A]=r);this._externalMap=n}addExternalEntity(e,t){Rs(e),"string"==typeof t&&-1===t.indexOf("&")&&this._applyRegistrationHook(this._onExternalEntity,e,t,"external")&&(this._externalMap[e]=t)}addInputEntities(e){if(this._totalExpansions=0,this._expandedLength=0,!this._onInputEntity)return void(this._inputMap=Ls(e));const t=Ls(e),n=Object.create(null);for(const[A,r]of Object.entries(t))this._applyRegistrationHook(this._onInputEntity,A,r,"input")&&(n[A]=r);this._inputMap=n}reset(){return this._inputMap=Object.create(null),this._totalExpansions=0,this._expandedLength=0,this}setXmlVersion(e){this._ncrXmlVersion=1.1===e?1.1:1}decode(e){if("string"!=typeof e||0===e.length)return e;if(-1===e.indexOf("&"))return e;const t=e,n=[],A=e.length;let r=0,i=0;const s=this._maxTotalExpansions>0,o=this._maxExpandedLength>0,a=s||o;for(;i<A;){if(38!==e.charCodeAt(i)){i++;continue}let t=i+1;for(;t<A&&59!==e.charCodeAt(t)&&t-i<=32;)t++;if(t>=A||59!==e.charCodeAt(t)){i++;continue}const l=e.slice(i+1,t);if(0===l.length){i++;continue}let c,u;if(this._removeSet.has(l))c="",void 0===u&&(u=Ds);else{if(this._leaveSet.has(l)){i++;continue}if(35===l.charCodeAt(0)){const e=this._resolveNCR(l);if(void 0===e){i++;continue}c=e,u=Ps}else{const e=this._resolveName(l);c=e?.value,u=e?.tier}}if(void 0!==c){if(i>r&&n.push(e.slice(r,i)),n.push(c),r=t+1,i=r,a&&this._tierCounts(u)){if(s&&(this._totalExpansions++,this._totalExpansions>this._maxTotalExpansions))throw new Error(`[EntityReplacer] Entity expansion count limit exceeded: ${this._totalExpansions} > ${this._maxTotalExpansions}`);if(o){const e=c.length-(l.length+2);if(e>0&&(this._expandedLength+=e,this._expandedLength>this._maxExpandedLength))throw new Error(`[EntityReplacer] Expanded content length limit exceeded: ${this._expandedLength} > ${this._maxExpandedLength}`)}}}else i++}r<A&&n.push(e.slice(r));const l=0===n.length?e:n.join("");return this._postCheck(l,t)}_tierCounts(e){return!!this._limitTiers.has(Fs)||this._limitTiers.has(e)}_resolveName(e){return e in this._inputMap?{value:this._inputMap[e],tier:Ds}:e in this._externalMap?{value:this._externalMap[e],tier:Ds}:e in this._baseMap?{value:this._baseMap[e],tier:Ps}:void 0}_classifyNCR(e){return 0===e?this._ncrNullLevel:e>=55296&&e<=57343||1===this._ncrXmlVersion&&e>=1&&e<=31&&!Os.has(e)?Ns.remove:-1}_applyNCRAction(e,t,n){switch(e){case Ns.allow:return String.fromCodePoint(n);case Ns.remove:return"";case Ns.leave:return;case Ns.throw:throw new Error(`[EntityDecoder] Prohibited numeric character reference &${t}; (U+${n.toString(16).toUpperCase().padStart(4,"0")})`);default:return String.fromCodePoint(n)}}_resolveNCR(e){const t=e.charCodeAt(1);let n;if(n=120===t||88===t?parseInt(e.slice(2),16):parseInt(e.slice(1),10),Number.isNaN(n)||n<0||n>1114111)return;const A=this._classifyNCR(n);if(!this._numericAllowed&&A<Ns.remove)return;const r=-1===A?this._ncrOnLevel:Math.max(this._ncrOnLevel,A);return this._applyNCRAction(r,e,n)}}const ks=e=>ls.includes(e)?"__"+e:e,Gs={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0,unicode:!1},tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,entityDecoder:null,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(e,t,n){return e},captureMetaData:!1,maxNestedTags:100,strictReservedNames:!0,jPath:!0,onDangerousProperty:ks};function Vs(e,t){if("string"!=typeof e)return;const n=e.toLowerCase();if(ls.some(e=>n===e.toLowerCase()))throw new Error(`[SECURITY] Invalid ${t}: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`);if(cs.some(e=>n===e.toLowerCase()))throw new Error(`[SECURITY] Invalid ${t}: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`)}function Hs(e,t){return"boolean"==typeof e?{enabled:e,maxEntitySize:1e4,maxExpansionDepth:1e4,maxTotalExpansions:1/0,maxExpandedLength:1e5,maxEntityCount:1e3,allowedTags:null,tagFilter:null,appliesTo:"all"}:"object"==typeof e&&null!==e?{enabled:!1!==e.enabled,maxEntitySize:Math.max(1,e.maxEntitySize??1e4),maxExpansionDepth:Math.max(1,e.maxExpansionDepth??1e4),maxTotalExpansions:Math.max(1,e.maxTotalExpansions??1/0),maxExpandedLength:Math.max(1,e.maxExpandedLength??1e5),maxEntityCount:Math.max(1,e.maxEntityCount??1e3),allowedTags:e.allowedTags??null,tagFilter:e.tagFilter??null,appliesTo:e.appliesTo??"all"}:Hs(!0)}const Qs=function(e){const t=Object.assign({},Gs,e),n=[{value:t.attributeNamePrefix,name:"attributeNamePrefix"},{value:t.attributesGroupName,name:"attributesGroupName"},{value:t.textNodeName,name:"textNodeName"},{value:t.cdataPropName,name:"cdataPropName"},{value:t.commentPropName,name:"commentPropName"}];for(const{value:A,name:r}of n)A&&Vs(A,r);return null===t.onDangerousProperty&&(t.onDangerousProperty=ks),t.processEntities=Hs(t.processEntities,t.htmlEntities),t.unpairedTagsSet=new Set(t.unpairedTags),t.stopNodes&&Array.isArray(t.stopNodes)&&(t.stopNodes=t.stopNodes.map(e=>"string"==typeof e&&e.startsWith("*.")?".."+e.substring(2):e)),t};let js;js="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");class zs{constructor(e){this.tagname=e,this.child=[],this[":@"]=Object.create(null)}add(e,t){"__proto__"===e&&(e="#__proto__"),this.child.push({[e]:t})}addChild(e,t){"__proto__"===e.tagname&&(e.tagname="#__proto__"),e[":@"]&&Object.keys(e[":@"]).length>0?this.child.push({[e.tagname]:e.child,":@":e[":@"]}):this.child.push({[e.tagname]:e.child}),void 0!==t&&(this.child[this.child.length-1][js]={startIndex:t})}static getMetaDataSymbol(){return js}}const Js=":A-Za-z_À-ÖØ-öø-˿Ͱ-ͽͿ-҆҈--⁰-Ⰰ-、-豈-﷏ﷰ-�",Ks=":A-Za-z_À-˿Ͱ-ͽͿ-҆҈--⁰-Ⰰ-、-豈-﷏ﷰ-�𐀀-",qs=Ks+"\\-\\.\\d·̀-ͯ҇‿-⁀",Ys=(e,t,n="")=>{const A=`[${e.replace(":","")}][${t.replace(":","")}]*`;return{name:new RegExp(`^[${e}][${t}]*$`,n),ncName:new RegExp(`^${A}$`,n),qName:new RegExp(`^${A}(?::${A})?$`,n),nmToken:new RegExp(`^[${t}]+$`,n),nmTokens:new RegExp(`^[${t}]+(?:\\s+[${t}]+)*$`,n)}},Ws=Ys(Js,Js+"\\-\\.\\d·̀-ͯ‿-⁀"),Xs=Ys(Ks,qs,"u"),Zs=":A-Za-z_",$s=Ys(Zs,Zs+"\\-\\.\\d"),eo=(e,{xmlVersion:t="1.0",asciiOnly:n=!1}={})=>((e="1.0",t=!1)=>t?$s:"1.1"===e?Xs:Ws)(t,n).qName.test(e);class to{constructor(e,t){this.suppressValidationErr=!e,this.options=e,this.xmlVersion=t||1}setXmlVersion(e=1){this.xmlVersion=e}readDocType(e,t){const n=Object.create(null);let A=0;if("O"!==e[t+3]||"C"!==e[t+4]||"T"!==e[t+5]||"Y"!==e[t+6]||"P"!==e[t+7]||"E"!==e[t+8])throw new Error("Invalid Tag instead of DOCTYPE");{t+=9;let r=1,i=!1,s=!1,o="";for(;t<e.length;t++)if("<"!==e[t]||s)if(">"===e[t]){if(s?"-"===e[t-1]&&"-"===e[t-2]&&(s=!1,r--):r--,0===r)break}else"["===e[t]?i=!0:o+=e[t];else{if(i&&Ao(e,"!ENTITY",t)){let r,i;if(t+=7,[r,i,t]=this.readEntityExp(e,t+1,this.suppressValidationErr),-1===i.indexOf("&")){if(!1!==this.options.enabled&&null!=this.options.maxEntityCount&&A>=this.options.maxEntityCount)throw new Error(`Entity count (${A+1}) exceeds maximum allowed (${this.options.maxEntityCount})`);n[r]=i,A++}}else if(i&&Ao(e,"!ELEMENT",t)){t+=8;const{index:n}=this.readElementExp(e,t+1);t=n}else if(i&&Ao(e,"!ATTLIST",t))t+=8;else if(i&&Ao(e,"!NOTATION",t)){t+=9;const{index:n}=this.readNotationExp(e,t+1,this.suppressValidationErr);t=n}else{if(!Ao(e,"!--",t))throw new Error("Invalid DOCTYPE");s=!0}r++,o=""}if(0!==r)throw new Error("Unclosed DOCTYPE")}return{entities:n,i:t}}readEntityExp(e,t){const n=t=no(e,t);for(;t<e.length&&!/\s/.test(e[t])&&'"'!==e[t]&&"'"!==e[t];)t++;let A=e.substring(n,t);if(ro(A,{xmlVersion:this.xmlVersion}),t=no(e,t),!this.suppressValidationErr){if("SYSTEM"===e.substring(t,t+6).toUpperCase())throw new Error("External entities are not supported");if("%"===e[t])throw new Error("Parameter entities are not supported")}let r="";if([t,r]=this.readIdentifierVal(e,t,"entity"),!1!==this.options.enabled&&null!=this.options.maxEntitySize&&r.length>this.options.maxEntitySize)throw new Error(`Entity "${A}" size (${r.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`);return[A,r,--t]}readNotationExp(e,t){const n=t=no(e,t);for(;t<e.length&&!/\s/.test(e[t]);)t++;let A=e.substring(n,t);!this.suppressValidationErr&&ro(A,{xmlVersion:this.xmlVersion}),t=no(e,t);const r=e.substring(t,t+6).toUpperCase();if(!this.suppressValidationErr&&"SYSTEM"!==r&&"PUBLIC"!==r)throw new Error(`Expected SYSTEM or PUBLIC, found "${r}"`);t+=r.length,t=no(e,t);let i=null,s=null;if("PUBLIC"===r)[t,i]=this.readIdentifierVal(e,t,"publicIdentifier"),'"'!==e[t=no(e,t)]&&"'"!==e[t]||([t,s]=this.readIdentifierVal(e,t,"systemIdentifier"));else if("SYSTEM"===r&&([t,s]=this.readIdentifierVal(e,t,"systemIdentifier"),!this.suppressValidationErr&&!s))throw new Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:A,publicIdentifier:i,systemIdentifier:s,index:--t}}readIdentifierVal(e,t,n){let A="";const r=e[t];if('"'!==r&&"'"!==r)throw new Error(`Expected quoted string, found "${r}"`);const i=++t;for(;t<e.length&&e[t]!==r;)t++;if(A=e.substring(i,t),e[t]!==r)throw new Error(`Unterminated ${n} value`);return[++t,A]}readElementExp(e,t){const n=t=no(e,t);for(;t<e.length&&!/\s/.test(e[t]);)t++;let A=e.substring(n,t);if(!this.suppressValidationErr&&!eo(A,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid element name: "${A}"`);let r="";if("E"===e[t=no(e,t)]&&Ao(e,"MPTY",t))t+=4;else if("A"===e[t]&&Ao(e,"NY",t))t+=2;else if("("===e[t]){const n=++t;for(;t<e.length&&")"!==e[t];)t++;if(r=e.substring(n,t),")"!==e[t])throw new Error("Unterminated content model")}else if(!this.suppressValidationErr)throw new Error(`Invalid Element Expression, found "${e[t]}"`);return{elementName:A,contentModel:r.trim(),index:t}}readAttlistExp(e,t){let n=t=no(e,t);for(;t<e.length&&!/\s/.test(e[t]);)t++;let A=e.substring(n,t);for(ro(A,{xmlVersion:this.xmlVersion}),n=t=no(e,t);t<e.length&&!/\s/.test(e[t]);)t++;let r=e.substring(n,t);if(!ro(r,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid attribute name: "${r}"`);t=no(e,t);let i="";if("NOTATION"===e.substring(t,t+8).toUpperCase()){if(i="NOTATION","("!==e[t=no(e,t+=8)])throw new Error(`Expected '(', found "${e[t]}"`);t++;let n=[];for(;t<e.length&&")"!==e[t];){const A=t;for(;t<e.length&&"|"!==e[t]&&")"!==e[t];)t++;let r=e.substring(A,t);if(r=r.trim(),!ro(r,{xmlVersion:this.xmlVersion}))throw new Error(`Invalid notation name: "${r}"`);n.push(r),"|"===e[t]&&(t++,t=no(e,t))}if(")"!==e[t])throw new Error("Unterminated list of notations");t++,i+=" ("+n.join("|")+")"}else{const n=t;for(;t<e.length&&!/\s/.test(e[t]);)t++;i+=e.substring(n,t);const A=["CDATA","ID","IDREF","IDREFS","ENTITY","ENTITIES","NMTOKEN","NMTOKENS"];if(!this.suppressValidationErr&&!A.includes(i.toUpperCase()))throw new Error(`Invalid attribute type: "${i}"`)}t=no(e,t);let s="";return"#REQUIRED"===e.substring(t,t+8).toUpperCase()?(s="#REQUIRED",t+=8):"#IMPLIED"===e.substring(t,t+7).toUpperCase()?(s="#IMPLIED",t+=7):[t,s]=this.readIdentifierVal(e,t,"ATTLIST"),{elementName:A,attributeName:r,attributeType:i,defaultValue:s,index:t}}}const no=(e,t)=>{for(;t<e.length&&/\s/.test(e[t]);)t++;return t};function Ao(e,t,n){for(let A=0;A<t.length;A++)if(t[A]!==e[n+A+1])return!1;return!0}function ro(e,t){if(eo(e,{xmlVersion:t}))return e;throw new Error(`Invalid entity name ${e}`)}const io=[48,1632,1776,2406,2534,2662,2790,2918,3046,3174,3302,3430,3558,3664,3792,3872,4160,4240,6112,6160,6470,6608,6784,6800,6992,7088,7232,7248,65296,120782,120792,120802,120812,120822,66720,68912,69734,69872,69942,70096,70384,70736,70864,71248,71360,71472,71904,72016,72688,72784,73040,73120,73552,92768,92864,93008,123200,123632,124144,125264,130032],so=new Map,oo=1632,ao=new Uint8Array(63904).fill(255);for(const wy of io)for(let e=0;e<10;e++){const t=wy+e;t<=65535?ao[t-oo]=e:so.set(t,e)}const lo=new Set([8722,65293,65123]);const co=/^[-+]?0x[a-fA-F0-9]+$/,uo=/^0b[01]+$/,fo=/^0o[0-7]+$/,ho=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,po={hex:!0,binary:!1,octal:!1,leadingZeros:!0,decimalPoint:".",eNotation:!0,infinity:"original",unicode:!1};function mo(e,t={}){if(t=Object.assign({},po,t),!e||"string"!=typeof e)return e;let n=e.trim();if(0===n.length)return e;if(void 0!==t.skipLike&&t.skipLike.test(n))return e;if("0"===n)return 0;if(t.unicode&&(n=function(e){if("string"!=typeof e)return e;const t=e.length;if(0===t)return e;let n=-1;for(let r=0;r<t;r++){const A=e.charCodeAt(r);if(!(A>=48&&A<=57||45===A))if(A<oo){if(lo.has(A)){n=r;break}}else if(A>=55296&&A<=56319){if(r+1<t){const t=e.charCodeAt(r+1);if(t>=56320&&t<=57343){const e=65536+(A-55296<<10)+(t-56320);if(so.has(e)){n=r;break}}}}else if(255!==ao[A-oo]||lo.has(A)){n=r;break}}if(-1===n)return e;const A=[];n>0&&A.push(e.slice(0,n));for(let r=n;r<t;r++){const n=e.charCodeAt(r);if(n>=48&&n<=57||45===n){A.push(e[r]);continue}if(n<oo){A.push(lo.has(n)?"-":e[r]);continue}if(n>=55296&&n<=56319){if(r+1<t){const t=e.charCodeAt(r+1);if(t>=56320&&t<=57343){const e=65536+(n-55296<<10)+(t-56320),i=so.get(e);if(void 0!==i){A.push(String.fromCharCode(i+48)),r++;continue}}}A.push(e[r]);continue}if(lo.has(n)){A.push("-");continue}const i=ao[n-oo];A.push(255!==i?String.fromCharCode(i+48):e[r])}return A.join("")}(n),"0"===n))return 0;if(t.hex&&co.test(n))return bo(n,16);if(t.binary&&uo.test(n))return bo(n,2);if(t.octal&&fo.test(n))return bo(n,8);if(isFinite(n)){if(n.includes("e")||n.includes("E"))return function(e,t,n){if(!n.eNotation)return e;const A=t.match(go);if(A){let r=A[1]||"";const i=-1===A[3].indexOf("e")?"E":"e",s=A[2],o=r?e[s.length+1]===i:e[s.length]===i;return s.length>1&&o?e:(1!==s.length||!A[3].startsWith(`.${i}`)&&A[3][0]!==i)&&s.length>0?n.leadingZeros&&!o?(t=(A[1]||"")+A[3],Number(t)):e:Number(t)}return e}(e,n,t);{const A=ho.exec(n);if(A){const r=A[1]||"",i=A[2];let s=function(e){if(e&&-1!==e.indexOf("."))return"."===(e=e.replace(/0+$/,""))?e="0":"."===e[0]?e="0"+e:"."===e[e.length-1]&&(e=e.substring(0,e.length-1)),e;return e}(A[3]);const o=r?"."===e[i.length+1]:"."===e[i.length];if(!t.leadingZeros&&(i.length>1||1===i.length&&!o))return e;{const A=Number(n),o=String(A);if(0===A)return A;if(-1!==o.search(/[eE]/))return t.eNotation?A:e;if(-1!==n.indexOf("."))return"0"===o||o===s||o===`${r}${s}`?A:e;let a=i?s:n;return i?a===o||r+a===o?A:e:a===o||a===r+o?A:e}}return e}}return function(e,t,n){const A=t===1/0;switch(n.infinity.toLowerCase()){case"null":return null;case"infinity":return t;case"string":return A?"Infinity":"-Infinity";default:return e}}(e,Number(n),t)}const go=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function bo(e,t){const n=e.trim();if(2!==t&&8!==t||(e=n.substring(2)),parseInt)return parseInt(e,t);if(Number.parseInt)return Number.parseInt(e,t);if(window&&window.parseInt)return window.parseInt(e,t);throw new Error("parseInt, Number.parseInt, window.parseInt are not supported")}class yo{constructor(e,t={},n){this.pattern=e,this.separator=t.separator||".",this.segments=this._parse(e),this.data=n,this._hasDeepWildcard=this.segments.some(e=>"deep-wildcard"===e.type),this._hasAttributeCondition=this.segments.some(e=>void 0!==e.attrName),this._hasPositionSelector=this.segments.some(e=>void 0!==e.position)}_parse(e){const t=[];let n=0,A="";for(;n<e.length;)e[n]===this.separator?n+1<e.length&&e[n+1]===this.separator?(A.trim()&&(t.push(this._parseSegment(A.trim())),A=""),t.push({type:"deep-wildcard"}),n+=2):(A.trim()&&t.push(this._parseSegment(A.trim())),A="",n++):(A+=e[n],n++);return A.trim()&&t.push(this._parseSegment(A.trim())),t}_parseSegment(e){const t={type:"tag"};let n=null,A=e;const r=e.match(/^([^\[]+)(\[[^\]]*\])(.*)$/);if(r&&(A=r[1]+r[3],r[2])){const e=r[2].slice(1,-1);e&&(n=e)}let i,s,o=A;if(A.includes("::")){const t=A.indexOf("::");if(i=A.substring(0,t).trim(),o=A.substring(t+2).trim(),!i)throw new Error(`Invalid namespace in pattern: ${e}`)}let a=null;if(o.includes(":")){const e=o.lastIndexOf(":"),t=o.substring(0,e).trim(),n=o.substring(e+1).trim();["first","last","odd","even"].includes(n)||/^nth\(\d+\)$/.test(n)?(s=t,a=n):s=o}else s=o;if(!s)throw new Error(`Invalid segment pattern: ${e}`);if(t.tag=s,i&&(t.namespace=i),n)if(n.includes("=")){const e=n.indexOf("=");t.attrName=n.substring(0,e).trim(),t.attrValue=n.substring(e+1).trim()}else t.attrName=n.trim();if(a){const e=a.match(/^nth\((\d+)\)$/);e?(t.position="nth",t.positionValue=parseInt(e[1],10)):t.position=a}return t}get length(){return this.segments.length}hasDeepWildcard(){return this._hasDeepWildcard}hasAttributeCondition(){return this._hasAttributeCondition}hasPositionSelector(){return this._hasPositionSelector}toString(){return this.pattern}}class Bo{constructor(){this._byDepthAndTag=new Map,this._wildcardByDepth=new Map,this._deepWildcards=[],this._deepByTerminalTag=new Map,this._patterns=new Set,this._sealed=!1}add(e){if(this._sealed)throw new TypeError("ExpressionSet is sealed. Create a new ExpressionSet to add more expressions.");if(this._patterns.has(e.pattern))return this;if(this._patterns.add(e.pattern),e.hasDeepWildcard()){const t=e.segments[e.segments.length-1];if(t&&"deep-wildcard"!==t.type&&"*"!==t.tag){const n=t.tag;this._deepByTerminalTag.has(n)||this._deepByTerminalTag.set(n,[]),this._deepByTerminalTag.get(n).push(e)}else this._deepWildcards.push(e);return this}const t=e.length,n=e.segments[e.segments.length-1],A=n?.tag;if(A&&"*"!==A){const n=`${t}:${A}`;this._byDepthAndTag.has(n)||this._byDepthAndTag.set(n,[]),this._byDepthAndTag.get(n).push(e)}else this._wildcardByDepth.has(t)||this._wildcardByDepth.set(t,[]),this._wildcardByDepth.get(t).push(e);return this}addAll(e){for(const t of e)this.add(t);return this}has(e){return this._patterns.has(e.pattern)}get size(){return this._patterns.size}seal(){return this._sealed=!0,this}get isSealed(){return this._sealed}matchesAny(e){return null!==this.findMatch(e)}findMatch(e){const t=e.getDepth(),n=e.getCurrentTag(),A=`${t}:${n}`,r=this._byDepthAndTag.get(A);if(r)for(let o=0;o<r.length;o++)if(e.matches(r[o]))return r[o];const i=this._wildcardByDepth.get(t);if(i)for(let o=0;o<i.length;o++)if(e.matches(i[o]))return i[o];const s=this._deepByTerminalTag.get(n);if(s)for(let o=0;o<s.length;o++)if(e.matches(s[o]))return s[o];for(let o=0;o<this._deepWildcards.length;o++)if(e.matches(this._deepWildcards[o]))return this._deepWildcards[o];return null}}class vo{constructor(e){this._matcher=e}get separator(){return this._matcher.separator}getCurrentTag(){const e=this._matcher.path;return e.length>0?e[e.length-1].tag:void 0}getCurrentNamespace(){const e=this._matcher.path;return e.length>0?e[e.length-1].namespace:void 0}getAttrValue(e){const t=this._matcher.path;if(0!==t.length)return t[t.length-1].values?.[e]}hasAttr(e){const t=this._matcher.path;if(0===t.length)return!1;const n=t[t.length-1];return void 0!==n.values&&e in n.values}getAnyParentAttr(e){return this._matcher.getAnyParentAttr(e)}hasAnyParentAttr(e){return this._matcher.hasAnyParentAttr(e)}getPosition(){const e=this._matcher.path;return 0===e.length?-1:e[e.length-1].position??0}getCounter(){const e=this._matcher.path;return 0===e.length?-1:e[e.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this._matcher.path.length}toString(e,t=!0){return this._matcher.toString(e,t)}toArray(){return this._matcher.path.map(e=>e.tag)}matches(e){return this._matcher.matches(e)}matchesAny(e){return e.matchesAny(this._matcher)}}class Co{constructor(e={}){this.separator=e.separator||".",this.path=[],this.siblingStacks=[],this._pathStringCache=null,this._view=new vo(this),this._keptAttrs=[]}push(e,t=null,n=null,A=null){this._pathStringCache=null,this.path.length>0&&(this.path[this.path.length-1].values=void 0);const r=this.path.length;let i=this.siblingStacks[r];i||(i={counts:new Map,total:0},this.siblingStacks[r]=i);const s=n?`${n}:${e}`:e,o=i.counts.get(s)||0,a=i.total;i.counts.set(s,o+1),i.total++;const l={tag:e,position:a,counter:o};null!=n&&(l.namespace=n),null!=t&&(l.values=t),this.path.push(l);const c=this.path.length,u=null!==A?A.keep:null;if(null!=u&&u.length>0&&t)for(let f=0;f<u.length;f++){const e=u[f];void 0!==t[e]&&this._keptAttrs.push({depth:c,name:e,value:t[e]})}}pop(){if(0===this.path.length)return;this._pathStringCache=null;const e=this.path.pop();this.siblingStacks.length>this.path.length+1&&(this.siblingStacks.length=this.path.length+1);const t=this.path.length+1;for(;this._keptAttrs.length>0&&this._keptAttrs[this._keptAttrs.length-1].depth>=t;)this._keptAttrs.pop();return e}updateCurrent(e){if(this.path.length>0){const t=this.path[this.path.length-1];null!=e&&(t.values=e)}}getCurrentTag(){return this.path.length>0?this.path[this.path.length-1].tag:void 0}getCurrentNamespace(){return this.path.length>0?this.path[this.path.length-1].namespace:void 0}getAttrValue(e){if(0!==this.path.length)return this.path[this.path.length-1].values?.[e]}hasAttr(e){if(0===this.path.length)return!1;const t=this.path[this.path.length-1];return void 0!==t.values&&e in t.values}getAnyParentAttr(e){const t=this._keptAttrs;for(let n=t.length-1;n>=0;n--)if(t[n].name===e)return t[n].value}hasAnyParentAttr(e){const t=this._keptAttrs;for(let n=t.length-1;n>=0;n--)if(t[n].name===e)return!0;return!1}getPosition(){return 0===this.path.length?-1:this.path[this.path.length-1].position??0}getCounter(){return 0===this.path.length?-1:this.path[this.path.length-1].counter??0}getIndex(){return this.getPosition()}getDepth(){return this.path.length}toString(e,t=!0){const n=e||this.separator;if(n===this.separator&&!0===t){if(null!==this._pathStringCache)return this._pathStringCache;const e=this.path.map(e=>e.namespace?`${e.namespace}:${e.tag}`:e.tag).join(n);return this._pathStringCache=e,e}return this.path.map(e=>t&&e.namespace?`${e.namespace}:${e.tag}`:e.tag).join(n)}toArray(){return this.path.map(e=>e.tag)}reset(){this._pathStringCache=null,this.path=[],this.siblingStacks=[],this._keptAttrs=[]}matches(e){const t=e.segments;return 0!==t.length&&(e.hasDeepWildcard()?this._matchWithDeepWildcard(t):this._matchSimple(t))}_matchSimple(e){if(this.path.length!==e.length)return!1;for(let t=0;t<e.length;t++)if(!this._matchSegment(e[t],this.path[t],t===this.path.length-1))return!1;return!0}_matchWithDeepWildcard(e){let t=this.path.length-1,n=e.length-1;for(;n>=0&&t>=0;){const A=e[n];if("deep-wildcard"===A.type){if(n--,n<0)return!0;const A=e[n];let r=!1;for(let e=t;e>=0;e--)if(this._matchSegment(A,this.path[e],e===this.path.length-1)){t=e-1,n--,r=!0;break}if(!r)return!1}else{if(!this._matchSegment(A,this.path[t],t===this.path.length-1))return!1;t--,n--}}return n<0}_matchSegment(e,t,n){if("*"!==e.tag&&e.tag!==t.tag)return!1;if(void 0!==e.namespace&&"*"!==e.namespace&&e.namespace!==t.namespace)return!1;if(void 0!==e.attrName){if(!n)return!1;if(!t.values||!(e.attrName in t.values))return!1;if(void 0!==e.attrValue&&String(t.values[e.attrName])!==String(e.attrValue))return!1}if(void 0!==e.position){if(!n)return!1;const A=t.counter??0;if("first"===e.position&&0!==A)return!1;if("odd"===e.position&&A%2!=1)return!1;if("even"===e.position&&A%2!=0)return!1;if("nth"===e.position&&A!==e.positionValue)return!1}return!0}matchesAny(e){return e.matchesAny(this)}snapshot(){return{path:this.path.map(e=>({...e})),siblingStacks:this.siblingStacks.map(e=>e?{counts:new Map(e.counts),total:e.total}:e),keptAttrs:this._keptAttrs.map(e=>({...e}))}}restore(e){this._pathStringCache=null,this.path=e.path.map(e=>({...e})),this.siblingStacks=e.siblingStacks.map(e=>e?{counts:new Map(e.counts),total:e.total}:e),this._keptAttrs=(e.keptAttrs||[]).map(e=>({...e}))}readOnly(){return this._view}}const _o=[{id:"html-script-open",description:"<script opening tag",pattern:/<script[\s>/]/i},{id:"html-script-close",description:"<\/script closing tag",pattern:/<\/script[\s>]/i},{id:"html-javascript-protocol",description:"javascript: URI scheme (with optional whitespace/encoding)",pattern:/j[\t\n\r ]*a[\t\n\r ]*v[\t\n\r ]*a[\t\n\r ]*s[\t\n\r ]*c[\t\n\r ]*r[\t\n\r ]*i[\t\n\r ]*p[\t\n\r ]*t[\t\n\r ]*:/i},{id:"html-vbscript-protocol",description:"vbscript: URI scheme",pattern:/vbscript[\t\n\r ]*:/i},{id:"html-data-html",description:"data:text/html URI — can execute scripts in browsers",pattern:/data[\t\n\r ]*:[\t\n\r ]*text\/html/i},{id:"html-data-xhtml",description:"data:application/xhtml+xml URI",pattern:/data[\t\n\r ]*:[\t\n\r ]*application\/xhtml/i},{id:"html-data-svg",description:"data:image/svg+xml URI — can execute scripts",pattern:/data[\t\n\r ]*:[\t\n\r ]*image\/svg\+xml/i},{id:"html-inline-event-handler",description:"Inline event handler attributes: onclick=, onerror=, onload=, etc.",pattern:/\bon\w{1,30}\s*=/i},{id:"html-entity-obfuscated-script",description:"HTML-entity-encoded <script (e.g. <script or <script)",pattern:/(?:�*3[Cc];?|�*60;?|<)\s*script/i},{id:"html-entity-obfuscated-javascript",description:'HTML-entity-encoded javascript: (partial — catches common j or j for "j")',pattern:/(?:�*6[Aa];?|�*106;?)\s*(?:�*61;?|a)[\s\S]{0,80}script\s*:/i},{id:"html-style-expression",description:"CSS expression() — IE-era code execution in style attributes",pattern:/style[\s\S]{0,20}expression\s*\(/i},{id:"html-object-embed",description:"<object or <embed tags that can load active content",pattern:/<(?:object|embed)[\s>/]/i},{id:"html-base-tag",description:"<base href= — can hijack all relative URLs on a page",pattern:/<base[\s>]/i},{id:"html-meta-refresh",description:'<meta http-equiv="refresh" — can redirect users',pattern:/<meta[\s\S]{0,40}http-equiv[\s\S]{0,20}refresh/i},{id:"html-srcdoc",description:"srcdoc= attribute on iframes — embeds HTML that can run scripts",pattern:/srcdoc\s*=/i},{id:"html-iframe",description:"<iframe tag",pattern:/<iframe[\s>/]/i},{id:"html-form",description:"<form tag — can be used for phishing / credential harvesting injection",pattern:/<form[\s>/]/i}],Mo=[{id:"xml-cdata-injection",description:"CDATA section injection: <![CDATA[ breaks out of text node context",pattern:/<!\[CDATA\[/i},{id:"xml-cdata-close",description:"CDATA close sequence: ]]> can terminate an enclosing CDATA section",pattern:/\]\]>/},{id:"xml-processing-instruction",description:"XML processing instruction: <?xml-stylesheet or <?php etc.",pattern:/<\?(?:xml[\- ]|php|asp)/i},{id:"xml-doctype-injection",description:"DOCTYPE declaration embedded in content — can define entities",pattern:/<!DOCTYPE(?:[\s[]|$)/i},{id:"xml-entity-system",description:"SYSTEM keyword — used in external entity declarations (XXE)",pattern:/\bSYSTEM\s+["']/i},{id:"xml-entity-public",description:"PUBLIC keyword — used in external entity declarations (XXE)",pattern:/\bPUBLIC\s+["']/i},{id:"xml-entity-declaration",description:"<!ENTITY declaration — defines entities, potential XXE or entity expansion",pattern:/<!ENTITY[\s%]/i},{id:"xml-billion-laughs",description:"Entity reference chaining / billion laughs: repeated &eX; style references",pattern:/(?:&\w{1,20};){3,}/},{id:"xml-namespace-confusion",description:"xmlns: attribute injection — can redefine namespaces to confuse parsers",pattern:/\bxmlns\s*(?::\w{1,40})?\s*=/i},{id:"xml-comment-injection",description:"\x3c!-- comment injection — can hide content from some parsers",pattern:/<!--/},{id:"xml-comment-close",description:"--\x3e closes an enclosing XML comment",pattern:/-->/},{id:"xml-pi-close",description:"?> closes an enclosing processing instruction",pattern:/\?>/}],wo=[{id:"sql-block-comment-open",description:"SQL block comment open: /* ... */ — unusual in legitimate user text",pattern:/\/\*/},{id:"sql-union-select",description:"UNION SELECT — most common SQL injection aggregation attack",pattern:/\bUNION\s{1,20}(?:ALL\s{1,20})?SELECT\b/i},{id:"sql-drop-table",description:"DROP TABLE — destructive DDL injection",pattern:/\bDROP\s{1,20}TABLE\b/i},{id:"sql-drop-database",description:"DROP DATABASE — destructive DDL injection",pattern:/\bDROP\s{1,20}DATABASE\b/i},{id:"sql-insert-into",description:"INSERT INTO — data injection",pattern:/\bINSERT\s{1,20}INTO\b/i},{id:"sql-delete-from",description:"DELETE FROM — data deletion injection",pattern:/\bDELETE\s{1,20}FROM\b/i},{id:"sql-update-set",description:"UPDATE ... SET — data modification injection",pattern:/\bUPDATE\b[\s\S]{1,60}\bSET\b/i},{id:"sql-exec-xp",description:"EXEC xp_ — MSSQL extended stored procedure execution",pattern:/\bEXEC(?:UTE)?\s{1,20}xp_/i},{id:"sql-tautology-string",description:'Classic string tautology: \' OR \'1\'=\'1 or " OR "1"="1"',pattern:/'\s{0,10}OR\s{0,10}'[^']{0,20}'\s*=\s*'[^']{0,20}/i},{id:"sql-tautology-numeric",description:"Numeric tautology: OR 1=1",pattern:/\bOR\s{1,10}1\s*=\s*1\b/i},{id:"sql-always-true-zero",description:"Numeric tautology: OR 0=0",pattern:/\bOR\s{1,10}0\s*=\s*0\b/i},{id:"sql-sleep-benchmark",description:"Time-based blind injection: SLEEP() or BENCHMARK()",pattern:/\b(?:SLEEP|BENCHMARK)\s*\(/i},{id:"sql-waitfor-delay",description:"MSSQL time-based blind injection: WAITFOR DELAY",pattern:/\bWAITFOR\s{1,20}DELAY\b/i},{id:"sql-char-function",description:"CHAR() function — used to obfuscate injected strings",pattern:/\bCHAR\s*\(\s*\d{1,3}/i},{id:"sql-information-schema",description:"INFORMATION_SCHEMA — reconnaissance query for table/column enumeration",pattern:/\bINFORMATION_SCHEMA\b/i}],To="[\"'\\s]*:",Eo=[{id:"nosql-where-operator",description:"$where — executes arbitrary JavaScript server-side in MongoDB",pattern:new RegExp(`\\$where${To}`,"i")},{id:"nosql-ne-operator",description:'$ne — "not equal" operator used to bypass equality checks',pattern:new RegExp(`\\$ne${To}`,"i")},{id:"nosql-gt-operator",description:'$gt — "greater than" used to bypass password/value checks',pattern:new RegExp(`\\$gte?${To}`,"i")},{id:"nosql-lt-operator",description:'$lt / $lte — "less than" bypass variants',pattern:new RegExp(`\\$lte?${To}`,"i")},{id:"nosql-regex-operator",description:"$regex — can be used to extract data character by character (blind injection)",pattern:new RegExp(`\\$regex${To}`,"i")},{id:"nosql-or-operator",description:"$or — logical OR; used to create always-true conditions",pattern:new RegExp(`\\$or${To}\\s*\\[`,"i")},{id:"nosql-and-operator",description:"$and — logical AND operator injection",pattern:new RegExp(`\\$and${To}\\s*\\[`,"i")},{id:"nosql-nor-operator",description:"$nor — logical NOR operator injection",pattern:new RegExp(`\\$nor${To}\\s*\\[`,"i")},{id:"nosql-exists-operator",description:"$exists — can enumerate fields to determine schema",pattern:new RegExp(`\\$exists${To}`,"i")},{id:"nosql-in-operator",description:"$in — matches any value in a list; can enumerate values",pattern:new RegExp(`\\$in${To}\\s*\\[`,"i")},{id:"nosql-expr-operator",description:"$expr — allows aggregation expressions in queries (MongoDB 3.6+)",pattern:new RegExp(`\\$expr${To}`,"i")},{id:"nosql-function-operator",description:"$function — executes arbitrary JavaScript in MongoDB 4.4+",pattern:new RegExp(`\\$function${To}`,"i")},{id:"nosql-accumulator-operator",description:"$accumulator — custom aggregation with arbitrary JS execution",pattern:new RegExp(`\\$accumulator${To}`,"i")},{id:"nosql-proto-pollution",description:"__proto__ — prototype pollution via object key injection",pattern:/__proto__/},{id:"nosql-constructor-prototype",description:"constructor.prototype — alternative prototype pollution vector (dot notation or JSON key)",pattern:/constructor[\s"':.,{\[]*prototype/i},{id:"nosql-proto-bracket",description:'["__proto__"] — bracket-notation prototype pollution',pattern:/\[["']__proto__["']\]/}],xo=[...wo,{id:"sql-line-comment",description:"SQL line comment: -- followed by whitespace or end of string",pattern:/--(?:\s|$)/},{id:"sql-stacked-query",description:"Stacked queries: semicolon immediately followed by a SQL keyword",pattern:/;\s{0,10}(?:SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|EXEC)\b/i},{id:"sql-hex-encoding",description:"Hex-encoded string injection: 0x41414141 style (MySQL)",pattern:/\b0x[0-9a-f]{4,}/i}];function So(e,t){const n=t.label??"CUSTOM";for(const A of t)if(A.pattern.test(e))return{context:n,id:A.id,description:A.description,pattern:A.pattern};return null}function Io(e,t){!function(e){if("string"!=typeof e)throw new TypeError("is-unsafe: first argument must be a string, got "+typeof e)}(e),function(e){if(!(e instanceof RegExp)){if(!Array.isArray(e))throw new TypeError("is-unsafe: second argument must be a PatternList (e.g. HTML), an array of PatternLists (e.g. [HTML, XML]), or a RegExp. Got: "+typeof e);if(0===e.length)throw new TypeError("is-unsafe: context must not be an empty array");if(Array.isArray(e[0]))for(const t of e)if(!Array.isArray(t)||0===t.length)throw new TypeError("is-unsafe: each context in the array must be a non-empty pattern array (PatternList)")}}(t);const{lists:n,regex:A}=function(e){return e instanceof RegExp?{lists:null,regex:e}:Array.isArray(e[0])?{lists:e,regex:null}:{lists:[e],regex:null}}(t);if(A)return A.test(e);for(const r of n)if(null!==So(e,r))return!0;return!1}function Ro(e,t){if(!e)return{};const n=t.attributesGroupName?e[t.attributesGroupName]:e;if(!n)return{};const A={};for(const r in n)if(r.startsWith(t.attributeNamePrefix)){A[r.substring(t.attributeNamePrefix.length)]=n[r]}else A[r]=n[r];return A}function Lo(e){if(!e||"string"!=typeof e)return;const t=e.indexOf(":");if(-1!==t&&t>0){const n=e.substring(0,t);if("xmlns"!==n)return n}}_o.label="HTML",Mo.label="XML",wo.label="SQL",xo.label="SQL-STRICT",Eo.label="NOSQL";class Do{constructor(e,t){var n;this.options=e,this.currentNode=null,this.tagsNodeStack=[],this.parseXml=Uo,this.parseTextData=Po,this.resolveNameSpace=Fo,this.buildAttributesMap=Oo,this.isItStopNode=Ho,this.replaceEntitiesValue=Go,this.readStopNodeData=Jo,this.saveTextToParentTag=Vo,this.addChild=ko,this.ignoreAttributesFn="function"==typeof(n=this.options.ignoreAttributes)?n:Array.isArray(n)?e=>{for(const t of n){if("string"==typeof t&&e===t)return!0;if(t instanceof RegExp&&t.test(e))return!0}}:()=>!1,this.entityExpansionCount=0,this.currentExpandedLength=0,this.doctypefound=!1;let A={...Es};this.options.entityDecoder?this.entityDecoder=this.options.entityDecoder:("object"==typeof this.options.htmlEntities?A=this.options.htmlEntities:!0===this.options.htmlEntities&&(A={...xs,...Ts}),this.entityDecoder=new Us({namedEntities:{...A,...t},numericAllowed:this.options.htmlEntities,limit:{maxTotalExpansions:this.options.processEntities.maxTotalExpansions,maxExpandedLength:this.options.processEntities.maxExpandedLength,applyLimitsTo:this.options.processEntities.appliesTo},onInputEntity:(e,t)=>Io(t,[_o,Mo])?Ss.BLOCK:Ss.ALLOW})),this.matcher=new Co,this.readonlyMatcher=this.matcher.readOnly(),this.isCurrentNodeStopNode=!1,this.stopNodeExpressionsSet=new Bo;const r=this.options.stopNodes;if(r&&r.length>0){for(let e=0;e<r.length;e++){const t=r[e];"string"==typeof t?this.stopNodeExpressionsSet.add(new yo(t)):t instanceof yo&&this.stopNodeExpressionsSet.add(t)}this.stopNodeExpressionsSet.seal()}}}function Po(e,t,n,A,r,i,s){const o=this.options;if(void 0!==e&&(o.trimValues&&!A&&(e=e.trim()),e.length>0)){s||(e=this.replaceEntitiesValue(e,t,n));const A=o.jPath?n.toString():n,a=o.tagValueProcessor(t,e,A,r,i);if(null==a)return e;if(typeof a!=typeof e||a!==e)return a;if(o.trimValues)return Ko(e,o.parseTagValue,o.numberParseOptions);return e.trim()===e?Ko(e,o.parseTagValue,o.numberParseOptions):e}}function Fo(e){if(this.options.removeNSPrefix){const t=e.split(":"),n="/"===e.charAt(0)?"/":"";if("xmlns"===t[0])return"";2===t.length&&(e=n+t[1])}return e}const No=new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function Oo(e,t,n,A=!1){const r=this.options;if(!0===A||!0!==r.ignoreAttributes&&"string"==typeof e){const A=os(e,No),i=A.length,s={},o=new Array(i);let a=!1;const l={};for(let e=0;e<i;e++){const t=this.resolveNameSpace(A[e][1]),i=A[e][4];if(t.length&&void 0!==i){let A=i;r.trimValues&&(A=A.trim()),A=this.replaceEntitiesValue(A,n,this.readonlyMatcher),o[e]=A,l[t]=A,a=!0}}a&&"object"==typeof t&&t.updateCurrent&&t.updateCurrent(l);const c=r.jPath?t.toString():this.readonlyMatcher;let u=!1;for(let e=0;e<i;e++){const t=this.resolveNameSpace(A[e][1]);if(this.ignoreAttributesFn(t,c))continue;let n=r.attributeNamePrefix+t;if(t.length)if(r.transformAttributeName&&(n=r.transformAttributeName(n)),n=Yo(n,r),void 0!==A[e][4]){const A=o[e],i=r.attributeValueProcessor(t,A,c);s[n]=null==i?A:typeof i!=typeof A||i!==A?i:Ko(A,r.parseAttributeValue,r.numberParseOptions),u=!0}else r.allowBooleanAttributes&&(s[n]=!0,u=!0)}if(!u)return;if(r.attributesGroupName&&!r.preserveOrder){const e={};return e[r.attributesGroupName]=s,e}return s}}const Uo=function(e){e=e.replace(/\r\n?/g,"\n");const t=new zs("!xml");let n=t,A="";this.matcher.reset(),this.entityDecoder.reset(),this.entityExpansionCount=0,this.currentExpandedLength=0,this.doctypefound=!1;const r=this.options,i=new to(r.processEntities),s=e.length;for(let o=0;o<s;o++){if("<"===e[o]){const a=e.charCodeAt(o+1);if(47===a){const t=Qo(e,">",o,"Closing Tag is not closed.");let i=e.substring(o+2,t).trim();if(r.removeNSPrefix){const e=i.indexOf(":");-1!==e&&(i=i.substr(e+1))}i=qo(r.transformTagName,i,"",r).tagName,n&&(A=this.saveTextToParentTag(A,n,this.readonlyMatcher));const s=this.matcher.getCurrentTag();if(i&&r.unpairedTagsSet.has(i))throw new Error(`Unpaired tag can not be used as closing tag: </${i}>`);s&&r.unpairedTagsSet.has(s)&&(this.matcher.pop(),this.tagsNodeStack.pop()),this.matcher.pop(),this.isCurrentNodeStopNode=!1,n=this.tagsNodeStack.pop(),A="",o=t}else if(63===a){let t=zo(e,o,!1,"?>");if(!t)throw new Error("Pi Tag is not closed.");A=this.saveTextToParentTag(A,n,this.readonlyMatcher);const s=this.buildAttributesMap(t.tagExp,this.matcher,t.tagName,!0);if(s){const e=s[this.options.attributeNamePrefix+"version"];this.entityDecoder.setXmlVersion(Number(e)||1),i.setXmlVersion(Number(e)||1)}if(r.ignoreDeclaration&&"?xml"===t.tagName||r.ignorePiTags);else{const e=new zs(t.tagName);e.add(r.textNodeName,""),t.tagName!==t.tagExp&&t.attrExpPresent&&!0!==r.ignoreAttributes&&(e[":@"]=s),this.addChild(n,e,this.readonlyMatcher,o)}o=t.closeIndex+1}else if(33===a&&45===e.charCodeAt(o+2)&&45===e.charCodeAt(o+3)){const t=Qo(e,"--\x3e",o+4,"Comment is not closed.");if(r.commentPropName){const i=e.substring(o+4,t-2);A=this.saveTextToParentTag(A,n,this.readonlyMatcher),n.add(r.commentPropName,[{[r.textNodeName]:i}])}o=t}else if(33===a&&68===e.charCodeAt(o+2)){if(this.doctypefound)throw new Error("Multiple DOCTYPE declarations found.");this.doctypefound=!0;const t=i.readDocType(e,o);this.entityDecoder.addInputEntities(t.entities),o=t.i}else if(33===a&&91===e.charCodeAt(o+2)){const t=Qo(e,"]]>",o,"CDATA is not closed.")-2,i=e.substring(o+9,t);A=this.saveTextToParentTag(A,n,this.readonlyMatcher);let s=this.parseTextData(i,n.tagname,this.readonlyMatcher,!0,!1,!0,!0);null==s&&(s=""),r.cdataPropName?n.add(r.cdataPropName,[{[r.textNodeName]:i}]):n.add(r.textNodeName,s),o=t+2}else{let i=zo(e,o,r.removeNSPrefix);if(!i){const t=e.substring(Math.max(0,o-50),Math.min(s,o+50));throw new Error(`readTagExp returned undefined at position ${o}. Context: "${t}"`)}let a=i.tagName;const l=i.rawTagName;let c=i.tagExp,u=i.attrExpPresent,f=i.closeIndex;if(({tagName:a,tagExp:c}=qo(r.transformTagName,a,c,r)),r.strictReservedNames&&(a===r.commentPropName||a===r.cdataPropName||a===r.textNodeName||a===r.attributesGroupName))throw new Error(`Invalid tag name: ${a}`);n&&A&&"!xml"!==n.tagname&&(A=this.saveTextToParentTag(A,n,this.readonlyMatcher,!1));const h=n;h&&r.unpairedTagsSet.has(h.tagname)&&(n=this.tagsNodeStack.pop(),this.matcher.pop());let d=!1;c.length>0&&c.lastIndexOf("/")===c.length-1&&(d=!0,"/"===a[a.length-1]?(a=a.substr(0,a.length-1),c=a):c=c.substr(0,c.length-1),u=a!==c);let p,m=null;p=Lo(l),a!==t.tagname&&this.matcher.push(a,{},p),a!==c&&u&&(m=this.buildAttributesMap(c,this.matcher,a),m&&Ro(m,r)),a!==t.tagname&&(this.isCurrentNodeStopNode=this.isItStopNode());const g=o;if(this.isCurrentNodeStopNode){let t="";if(d)o=i.closeIndex;else if(r.unpairedTagsSet.has(a))o=i.closeIndex;else{const n=this.readStopNodeData(e,l,f+1);if(!n)throw new Error(`Unexpected end of ${l}`);o=n.i,t=n.tagContent}const A=new zs(a);m&&(A[":@"]=m),A.add(r.textNodeName,t),this.matcher.pop(),this.isCurrentNodeStopNode=!1,this.addChild(n,A,this.readonlyMatcher,g)}else{if(d){({tagName:a,tagExp:c}=qo(r.transformTagName,a,c,r));const e=new zs(a);m&&(e[":@"]=m),this.addChild(n,e,this.readonlyMatcher,g),this.matcher.pop(),this.isCurrentNodeStopNode=!1}else{if(r.unpairedTagsSet.has(a)){const e=new zs(a);m&&(e[":@"]=m),this.addChild(n,e,this.readonlyMatcher,g),this.matcher.pop(),this.isCurrentNodeStopNode=!1,o=i.closeIndex;continue}{const e=new zs(a);if(this.tagsNodeStack.length>r.maxNestedTags)throw new Error("Maximum nested tags exceeded");this.tagsNodeStack.push(n),m&&(e[":@"]=m),this.addChild(n,e,this.readonlyMatcher,g),n=e}}A="",o=f}}}else A+=e[o]}return t.child};function ko(e,t,n,A){this.options.captureMetaData||(A=void 0);const r=this.options.jPath?n.toString():n,i=this.options.updateTag(t.tagname,r,t[":@"]);!1===i||("string"==typeof i?(t.tagname=i,e.addChild(t,A)):e.addChild(t,A))}function Go(e,t,n){const A=this.options.processEntities;if(!A||!A.enabled)return e;if(A.allowedTags){const r=this.options.jPath?n.toString():n;if(!(Array.isArray(A.allowedTags)?A.allowedTags.includes(t):A.allowedTags(t,r)))return e}if(A.tagFilter){const r=this.options.jPath?n.toString():n;if(!A.tagFilter(t,r))return e}return this.entityDecoder.decode(e)}function Vo(e,t,n,A){return e&&(void 0===A&&(A=0===t.child.length),void 0!==(e=this.parseTextData(e,t.tagname,n,!1,!!t[":@"]&&0!==Object.keys(t[":@"]).length,A))&&""!==e&&t.add(this.options.textNodeName,e),e=""),e}function Ho(){return 0!==this.stopNodeExpressionsSet.size&&this.matcher.matchesAny(this.stopNodeExpressionsSet)}function Qo(e,t,n,A){const r=e.indexOf(t,n);if(-1===r)throw new Error(A);return r+t.length-1}function jo(e,t,n,A){const r=e.indexOf(t,n);if(-1===r)throw new Error(A);return r}function zo(e,t,n,A=">"){const r=function(e,t,n=">"){let A=0;const r=e.length,i=n.charCodeAt(0),s=n.length>1?n.charCodeAt(1):-1;let o="",a=t;for(let l=t;l<r;l++){const t=e.charCodeAt(l);if(A)t===A&&(A=0);else if(34===t||39===t)A=t;else if(t===i){if(-1===s)return o+=e.substring(a,l),{data:o,index:l};if(e.charCodeAt(l+1)===s)return o+=e.substring(a,l),{data:o,index:l}}else 9!==t||A||(o+=e.substring(a,l)+" ",a=l+1)}}(e,t+1,A);if(!r)return;let i=r.data;const s=r.index,o=i.search(/\s/);let a=i,l=!0;-1!==o&&(a=i.substring(0,o),i=i.substring(o+1).trimStart());const c=a;if(n){const e=a.indexOf(":");-1!==e&&(a=a.substr(e+1),l=a!==r.data.substr(e+1))}return{tagName:a,tagExp:i,closeIndex:s,attrExpPresent:l,rawTagName:c}}function Jo(e,t,n){const A=n;let r=1;const i=e.length;for(;n<i;n++)if("<"===e[n]){const i=e.charCodeAt(n+1);if(47===i){const i=jo(e,">",n,`${t} is not closed`);if(e.substring(n+2,i).trim()===t&&(r--,0===r))return{tagContent:e.substring(A,n),i:i};n=i}else if(63===i){n=Qo(e,"?>",n+1,"StopNode is not closed.")}else if(33===i&&45===e.charCodeAt(n+2)&&45===e.charCodeAt(n+3)){n=Qo(e,"--\x3e",n+3,"StopNode is not closed.")}else if(33===i&&91===e.charCodeAt(n+2)){n=Qo(e,"]]>",n,"StopNode is not closed.")-2}else{const A=zo(e,n,!1);if(A){(A&&A.tagName)===t&&"/"!==A.tagExp[A.tagExp.length-1]&&r++,n=A.closeIndex}}}}function Ko(e,t,n){if(t&&"string"==typeof e){const t=e.trim();return"true"===t||"false"!==t&&mo(e,n)}return function(e){return void 0!==e}(e)?e:""}function qo(e,t,n,A){if(e){const A=e(t);n===t&&(n=A),t=A}return{tagName:t=Yo(t,A),tagExp:n}}function Yo(e,t){if(cs.includes(e))throw new Error(`[SECURITY] Invalid name: "${e}" is a reserved JavaScript keyword that could cause prototype pollution`);return ls.includes(e)?t.onDangerousProperty(e):e}const Wo=zs.getMetaDataSymbol();function Xo(e,t){if(!e||"object"!=typeof e)return{};if(!t)return e;const n={};for(const A in e)if(A.startsWith(t)){n[A.substring(t.length)]=e[A]}else n[A]=e[A];return n}function Zo(e,t,n,A){return $o(e,t,n,A)}function $o(e,t,n,A){let r;const i={};for(let s=0;s<e.length;s++){const o=e[s],a=ea(o);if(void 0!==a&&a!==t.textNodeName){const e=Xo(o[":@"]||{},t.attributeNamePrefix);n.push(a,e)}if(a===t.textNodeName)void 0===r?r=o[a]:r+=""+o[a];else{if(void 0===a)continue;if(o[a]){let e=$o(o[a],t,n,A);const r=na(e,t);if(0===Object.keys(e).length&&t.alwaysCreateTextNode&&(e[t.textNodeName]=""),o[":@"]?ta(e,o[":@"],A,t):1!==Object.keys(e).length||void 0===e[t.textNodeName]||t.alwaysCreateTextNode?0===Object.keys(e).length&&(t.alwaysCreateTextNode?e[t.textNodeName]="":e=""):e=e[t.textNodeName],void 0!==o[Wo]&&"object"==typeof e&&null!==e&&(e[Wo]=o[Wo]),void 0!==i[a]&&Object.prototype.hasOwnProperty.call(i,a))Array.isArray(i[a])||(i[a]=[i[a]]),i[a].push(e);else{const n=t.jPath?A.toString():A;t.isArray(a,n,r)?i[a]=[e]:i[a]=e}void 0!==a&&a!==t.textNodeName&&n.pop()}}}return"string"==typeof r?r.length>0&&(i[t.textNodeName]=r):void 0!==r&&(i[t.textNodeName]=r),i}function ea(e){const t=Object.keys(e);for(let n=0;n<t.length;n++){const e=t[n];if(":@"!==e)return e}}function ta(e,t,n,A){if(t){const r=Object.keys(t),i=r.length;for(let s=0;s<i;s++){const i=r[s],o=i.startsWith(A.attributeNamePrefix)?i.substring(A.attributeNamePrefix.length):i,a=A.jPath?n.toString()+"."+o:n;A.isArray(i,a,!0,!0)?e[i]=[t[i]]:e[i]=t[i]}}}function na(e,t){const{textNodeName:n}=t,A=Object.keys(e).length;return 0===A||!(1!==A||!e[n]&&"boolean"!=typeof e[n]&&0!==e[n])}class Aa{constructor(e){this.externalEntities={},this.options=Qs(e)}parse(e,t){if("string"!=typeof e&&e.toString)e=e.toString();else if("string"!=typeof e)throw new Error("XML data is accepted in String or Bytes[] form.");if(t){!0===t&&(t={});const n=function(e,t){t=Object.assign({},us,t);const n=[];let A=!1,r=!1;"\ufeff"===e[0]&&(e=e.substr(1));for(let i=0;i<e.length;i++)if("<"===e[i]&&"?"===e[i+1]){if(i+=2,i=hs(e,i),i.err)return i}else{if("<"!==e[i]){if(fs(e[i]))continue;return vs("InvalidChar","char '"+e[i]+"' is not expected.",Ms(e,i))}{let s=i;if(i++,"!"===e[i]){i=ds(e,i);continue}{let o=!1;"/"===e[i]&&(o=!0,i++);let a="";for(;i<e.length&&">"!==e[i]&&" "!==e[i]&&"\t"!==e[i]&&"\n"!==e[i]&&"\r"!==e[i];i++)a+=e[i];if(a=a.trim(),"/"===a[a.length-1]&&(a=a.substring(0,a.length-1),i--),!_s(a)){let t;return t=0===a.trim().length?"Invalid space after '<'.":"Tag '"+a+"' is an invalid name.",vs("InvalidTag",t,Ms(e,i))}const l=gs(e,i);if(!1===l)return vs("InvalidAttr","Attributes for '"+a+"' have open quote.",Ms(e,i));let c=l.value;if(i=l.index,"/"===c[c.length-1]){const n=i-c.length;c=c.substring(0,c.length-1);const r=ys(c,t);if(!0!==r)return vs(r.err.code,r.err.msg,Ms(e,n+r.err.line));A=!0}else if(o){if(!l.tagClosed)return vs("InvalidTag","Closing tag '"+a+"' doesn't have proper closing.",Ms(e,i));if(c.trim().length>0)return vs("InvalidTag","Closing tag '"+a+"' can't have attributes or invalid starting.",Ms(e,s));if(0===n.length)return vs("InvalidTag","Closing tag '"+a+"' has not been opened.",Ms(e,s));{const t=n.pop();if(a!==t.tagName){let n=Ms(e,t.tagStartPos);return vs("InvalidTag","Expected closing tag '"+t.tagName+"' (opened in line "+n.line+", col "+n.col+") instead of closing tag '"+a+"'.",Ms(e,s))}0==n.length&&(r=!0)}}else{const o=ys(c,t);if(!0!==o)return vs(o.err.code,o.err.msg,Ms(e,i-c.length+o.err.line));if(!0===r)return vs("InvalidXml","Multiple possible root nodes found.",Ms(e,i));-1!==t.unpairedTags.indexOf(a)||n.push({tagName:a,tagStartPos:s}),A=!0}for(i++;i<e.length;i++)if("<"===e[i]){if("!"===e[i+1]){i++,i=ds(e,i);continue}if("?"!==e[i+1])break;if(i=hs(e,++i),i.err)return i}else if("&"===e[i]){const t=Bs(e,i);if(-1==t)return vs("InvalidChar","char '&' is not expected.",Ms(e,i));i=t}else if(!0===r&&!fs(e[i]))return vs("InvalidXml","Extra text at the end",Ms(e,i));"<"===e[i]&&i--}}}return A?1==n.length?vs("InvalidTag","Unclosed tag '"+n[0].tagName+"'.",Ms(e,n[0].tagStartPos)):!(n.length>0)||vs("InvalidXml","Invalid '"+JSON.stringify(n.map(e=>e.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):vs("InvalidXml","Start tag expected.",1)}(e,t);if(!0!==n)throw Error(`${n.err.msg}:${n.err.line}:${n.err.col}`)}const n=new Do(this.options,this.externalEntities),A=n.parseXml(e);return this.options.preserveOrder||void 0===A?A:Zo(A,this.options,n.matcher,n.readonlyMatcher)}addEntity(e,t){if(-1!==t.indexOf("&"))throw new Error("Entity value can't have '&'");if(-1!==e.indexOf("&")||-1!==e.indexOf(";"))throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '
'");if("&"===t)throw new Error("An entity with value '&' is not permitted");this.externalEntities[e]=t}static getMetaDataSymbol(){return zs.getMetaDataSymbol()}}function ra(e,t){if(t?._parser&&"fast-xml-parser"!==t._parser)throw new Error(t?._parser);const n=function(e,t){const n=new Aa({ignoreAttributes:!1,attributeNamePrefix:"",...t}),A=n.parse(e);return A}(e,{allowBooleanAttributes:!0,ignoreDeclaration:!0,removeNSPrefix:t?.removeNSPrefix,textNodeName:t?.textNodeName,isArray:(e,n,A,r)=>Boolean(t?.arrayPaths?.some(e=>n===e)),...t?._fastXML});return t?.uncapitalizeKeys?rs(n):n}const ia={dataType:null,batchType:null,name:"XML",id:"xml",module:"xml",version:"4.4.3",worker:!1,extensions:["xml"],mimeTypes:["application/xml","text/xml"],testText:function(e){return e.startsWith("<?xml")},options:{xml:{_parser:"fast-xml-parser",uncapitalizeKeys:!1,removeNSPrefix:!1,textNodeName:"value",arrayPaths:[]}},parse:async(e,t)=>ra((new TextDecoder).decode(e),{...ia.options.xml,...t?.xml}),parseTextSync:(e,t)=>ra(e,{...ia.options.xml,...t?.xml})};const sa={dataType:null,batchType:null,id:"wms-error",name:"WMS Error",module:"wms",version:"4.4.3",worker:!1,extensions:["xml"],mimeTypes:["application/vnd.ogc.se_xml","application/xml","text/xml"],testText:function(e){return e.startsWith("<?xml")},options:{wms:{throwOnError:!1}},parse:async(e,t)=>oa((new TextDecoder).decode(e),t),parseSync:(e,t)=>oa((new TextDecoder).decode(e),t),parseTextSync:(e,t)=>oa(e,t)};function oa(e,t){const n={...sa.options.wms,...t?.wms},A=function(e,t){const n=ia.parseTextSync?.(e,t),A=n?.ServiceExceptionReport?.ServiceException||n?.["ogc:ServiceExceptionReport"]?.["ogc:ServiceException"];return"string"==typeof A?A:A.value||A.code||"Unknown error"}(e,n),r=n.minimalErrors?A:`WMS Service error: ${A}`;if(n.throwOnError)throw new Error(r);return r}function aa(e){return Array.isArray(e)?e:e?[e]:[]}function la(e){const t=aa(e);return t.length>0&&t.every(e=>"string"==typeof e)?t:[]}function ca(e,t=void 0){switch(typeof e){case"number":return e;case"string":return parseFloat(e);default:return}}function ua(e,t=void 0){switch(typeof e){case"number":return e;case"string":return parseInt(e,10);default:return}}function fa(e){switch(e){case"true":case"1":return!0;default:return!1}}function ha(e,t){const n=ia.parseTextSync?.(e,t),A=n.WMT_MS_Capabilities||n.WMS_Capabilities||n,r=function(e){const t={version:String(e.version||""),name:String(e.Service?.Name||"unnamed"),title:e.Service?.Title?String(e.Service?.Title):void 0,abstract:e.Service?.Abstract?String(e.Service?.Abstract):void 0,keywords:la(e.Service?.KeywordList?.Keyword),fees:e.Service?.Fees?JSON.stringify(e.Service?.Fees):void 0,accessConstraints:e.Service?.AccessConstraints?JSON.stringify(e.Service?.AccessConstraints):void 0,layerLimit:ua(e.Service?.LayerLimit),maxWidth:ua(e.Service?.maxWidth),maxHeight:ua(e.Service?.maxHeight),layers:[],requests:da(e.Capability?.Request),exceptions:pa(e.Exception)},n=aa(e.Capability?.Layer);for(const A of n)t.layers.push(ma(A));for(const[A,r]of Object.entries(t))void 0===r&&delete t[A];return t}(A);if(t?.inheritedLayerProps)for(const i of r.layers)ga(i,null);return t?.includeRawJSON&&(r.json=A),t?.includeXMLText&&(r.xml=e),r}function da(e){const t={};for(const[n,A]of Object.entries(e||{})){const e=la(A?.Format);t[n]={mimeTypes:e}}return t}function pa(e){if(aa(e?.Format).length>0)return{mimeTypes:la(e)}}function ma(e){const t={title:String(e?.Title||""),name:e?.Name&&String(e?.Name),abstract:e?.Name&&String(e?.Abstract),keywords:la(e.KeywordList?.Keyword)},n=e?.CRS||e?.SRS;n&&Array.isArray(n)&&n.every(e=>"string"==typeof e)&&(t.crs=n);let A=e?.EX_GeographicBoundingBox&&function(e){const{westBoundLongitude:t,northBoundLatitude:n,eastBoundLongitude:A,southBoundLatitude:r}=e;return[[t,r],[A,n]]}(e?.EX_GeographicBoundingBox);A&&(t.geographicBoundingBox=A),A=e?.LatLonBoundingBox&&function(e){const{minx:t,miny:n,maxx:A,maxy:r}=e;return[[t,n],[A,r]]}(e?.LatLonBoundingBox),A&&(t.geographicBoundingBox=A);const r=e?.BoundingBox&&(i=e?.BoundingBox,aa(i).map(e=>function(e){const{CRS:t,SRS:n,minx:A,miny:r,maxx:i,maxy:s,resx:o,resy:a}=e,l={crs:t||n,boundingBox:[[ca(A),ca(r)],[ca(i),ca(s)]]};return o&&(l.xResolution=o),a&&(l.yResolution=a),l}(e)));var i;r&&r.length>0&&(t.boundingBoxes=r);const s=aa(e?.Dimension).map(e=>function(e){const{name:t,units:n,value:A}=e,r={name:t,units:n,extent:A};e.unitSymbol&&(r.unitSymbol=e.unitSymbol);e.default&&(r.defaultValue=e.default);e.multipleValues&&(r.multipleValues=fa(e.multipleValues));e.nearestValue&&(r.nearestValue=fa(e.nearestValue));e.current&&(r.current=fa(e.current));return r}(e));s.length&&(t.dimensions=s),e?.opaque&&(t.opaque=fa(e?.opaque)),e?.cascaded&&(t.cascaded=fa(e?.cascaded)),e?.queryable&&(t.queryable=fa(e?.queryable));const o=aa(e?.Layer),a=[];for(const l of o)a.push(ma(l));a.length>0&&(t.layers=a);for(const[l,c]of Object.entries(t))void 0===c&&delete t[l];return t}function ga(e,t){t?.geographicBoundingBox&&!e.geographicBoundingBox&&(e.geographicBoundingBox=[...t.geographicBoundingBox]),t?.crs&&!e.crs&&(e.crs=[...t.crs]),t?.boundingBoxes&&!e.boundingBoxes&&(e.boundingBoxes=[...t.boundingBoxes]),t?.dimensions&&!e.dimensions&&(e.dimensions=[...t.dimensions]);for(const n of e.layers||[])ga(n,e)}const ba={dataType:null,batchType:null,id:"wms-capabilities",name:"WMS Capabilities",module:"wms",version:"4.4.3",worker:!1,extensions:["xml"],mimeTypes:["application/vnd.ogc.wms_xml","application/xml","text/xml"],testText:function(e){return e.startsWith("<?xml")},options:{wms:{}},parse:async(e,t)=>ha((new TextDecoder).decode(e),t?.wms),parseTextSync:(e,t)=>ha(e,t?.wms)};function ya(e,t){const n=ia.parseTextSync?.(e,t),A=n.FeatureInfoResponse?.FIELDS||[];return{features:(Array.isArray(A)?A:[A]).map(e=>function(e){const t=e||{};return{attributes:t,type:"",bounds:{bottom:0,top:0,left:0,right:0}}}(e))}}const Ba={...ba,dataType:null,id:"wms-feature-info",name:"WMS FeatureInfo",parse:async(e,t)=>ya((new TextDecoder).decode(e),t),parseTextSync:(e,t)=>ya(e,t)};function va(e,t){const n=ia.parseTextSync?.(e,t);return n}const Ca={...ba,dataType:null,id:"wms-layer-description",name:"WMS DescribeLayer",parse:async(e,t)=>va((new TextDecoder).decode(e),t),parseTextSync:(e,t)=>va(e,t)},_a={name:"Web Map Service (OGC WMS)",id:"wms",module:"wms",version:"0.0.0",extensions:[],mimeTypes:[],type:"wms",fromUrl:!0,fromBlob:!1,defaultOptions:{wms:{}},testURL:e=>e.toLowerCase().includes("wms"),createDataSource:(e,t)=>new Ma(e,t)};class Ma extends m{substituteCRS84;flipCRS;wmsParameters;vendorParameters;capabilities=null;constructor(e,t){super(e,t,_a.defaultOptions),this.substituteCRS84=t.wms?.substituteCRS84??!1,this.flipCRS=["EPSG:4326"],this.wmsParameters={layers:void 0,query_layers:void 0,styles:void 0,version:"1.3.0",crs:"EPSG:4326",format:"image/png",info_format:"text/plain",transparent:void 0,time:void 0,elevation:void 0,...t.wmsParameters,...t.wms?.wmsParameters},this.vendorParameters=t.wms?.vendorParameters||t.vendorParameters||{}}async getMetadata(){const e=await this.getCapabilities();return this.normalizeMetadata(e)}async getImage(e){const{boundingBox:t,bbox:n,...A}=e,r={bbox:t?[...t[0],...t[1]]:n,...A};return await this.getMap(r)}normalizeMetadata(e){return e}async getCapabilities(e,t){const n=this.getCapabilitiesURL(e,t),A=await this.fetch(n),r=await A.arrayBuffer();this._checkResponse(A,r);const i=await ba.parse(r,this.loadOptions);return this.capabilities=i,i}async getMap(e,t){const A=this.getMapURL(e,t),r=await this.fetch(A),i=await r.arrayBuffer();this._checkResponse(r,i);try{return await n.ImageLoader.parse(i,this.loadOptions)}catch{throw this._parseError(i)}}async getFeatureInfo(e,t){const n=this.getFeatureInfoURL(e,t),A=await this.fetch(n),r=await A.arrayBuffer();return this._checkResponse(A,r),await Ba.parse(r,this.loadOptions)}async getFeatureInfoText(e,t){const n=this.getFeatureInfoURL(e,t),A=await this.fetch(n),r=await A.arrayBuffer();return this._checkResponse(A,r),(new TextDecoder).decode(r)}async describeLayer(e,t){const n=this.describeLayerURL(e,t),A=await this.fetch(n),r=await A.arrayBuffer();return this._checkResponse(A,r),await Ca.parse(r,this.loadOptions)}async getLegendGraphic(e,t){const A=this.getLegendGraphicURL(e,t),r=await this.fetch(A),i=await r.arrayBuffer();this._checkResponse(r,i);try{return await n.ImageLoader.parse(i,this.loadOptions)}catch{throw this._parseError(i)}}getCapabilitiesURL(e,t){const n={version:this.wmsParameters.version,...e};return this._getWMSUrl("GetCapabilities",n,t)}getMapURL(e,t){e=this._getWMS130Parameters(e);const n={version:this.wmsParameters.version,format:this.wmsParameters.format,transparent:this.wmsParameters.transparent,time:this.wmsParameters.time,elevation:this.wmsParameters.elevation,layers:this.wmsParameters.layers,styles:this.wmsParameters.styles,crs:this.wmsParameters.crs,...e};return this._getWMSUrl("GetMap",n,t)}getFeatureInfoURL(e,t){e=this._getWMS130Parameters(e);const{boundingBox:n,bbox:A}=e;e.bbox=n?[...n[0],...n[1]]:A;const r={version:this.wmsParameters.version,info_format:this.wmsParameters.info_format,layers:this.wmsParameters.layers,query_layers:this.wmsParameters.query_layers,styles:this.wmsParameters.styles,crs:this.wmsParameters.crs,...e};return this._getWMSUrl("GetFeatureInfo",r,t)}describeLayerURL(e,t){const n={version:this.wmsParameters.version,...e};return this._getWMSUrl("DescribeLayer",n,t)}getLegendGraphicURL(e,t){const n={version:this.wmsParameters.version,...e};return this._getWMSUrl("GetLegendGraphic",n,t)}_parseWMSUrl(e){const[t,n]=e.split("?"),A=n.split("&"),r={};for(const i of A){const[e,t]=i.split("=");r[e]=t}return{url:t,parameters:r}}_getWMSUrl(e,t,n){let A=this.url,r=!0;const i={service:"WMS",version:t.version,request:e,...t,...this.vendorParameters,...n},s=["transparent","time","elevation"];for(const[o,a]of Object.entries(i))s.includes(o)&&!a||(A+=r?"?":"&",r=!1,A+=this._getURLParameter(o,a,t));return encodeURI(A)}_getWMS130Parameters(e){const t={...e};return t.srs&&(t.crs=t.crs||t.srs,delete t.srs),t}_getURLParameter(e,t,n){switch(e){case"crs":"1.3.0"!==n.version?e="srs":this.substituteCRS84&&"EPSG:4326"===t&&(t="CRS:84");break;case"srs":"1.3.0"===n.version&&(e="crs");break;case"bbox":const A=this._flipBoundingBox(t,n);A&&(t=A);break;case"x":"1.3.0"===n.version&&(e="i");break;case"y":"1.3.0"===n.version&&(e="j")}return e=e.toUpperCase(),Array.isArray(t)?`${e}=${t.join(",")}`:`${e}=${t?String(t):""}`}_flipBoundingBox(e,t){if(!Array.isArray(e)||4!==e.length)return null;const n=e;return"1.3.0"===t.version&&this.flipCRS.includes(t.crs||"")&&!(this.substituteCRS84&&"EPSG:4326"===t.crs)?[n[1],n[0],n[3],n[2]]:n}async _fetchArrayBuffer(e){const t=await this.fetch(e),n=await t.arrayBuffer();return this._checkResponse(t,n),n}_checkResponse(e,n){const A=e.headers["content-type"];if(!e.ok||sa.mimeTypes.includes(A)){const e=t.mergeOptions(this.loadOptions,{wms:{throwOnError:!0}}),A=sa.parseSync?.(n,e);throw new Error(A)}}_parseError(e){const t=sa.parseSync?.(e,this.options.core?.loadOptions);return new Error(t)}}const wa=6378137*Math.PI;function Ta(e){const n=t.lngLatToWorld(e);return n[0]=(n[0]/256-1)*wa,n[1]=(n[1]/256-1)*wa,n}const Ea={id:"imagery-layer",data:"",serviceType:"auto",srs:"auto",layers:{type:"array",compare:!0,value:[]},onMetadataLoad:{type:"function",value:()=>{}},onMetadataLoadError:{type:"function",value:console.error},onImageLoadStart:{type:"function",value:()=>{}},onImageLoad:{type:"function",value:()=>{}},onImageLoadError:{type:"function",compare:!1,value:(e,t)=>console.error(t,e)}};class xa extends e.CompositeLayer{get isLoaded(){return 0===this.state?.loadCounter&&super.isLoaded}shouldUpdateState(){return!0}initializeState(){this.state._nextRequestId=0,this.state.lastRequestId=-1,this.state.loadCounter=0}updateState({changeFlags:e,props:n,oldProps:A}){const{viewport:r}=this.context;e.dataChanged||n.serviceType!==A.serviceType?(this.state.imageSource=this._createImageSource(n),this._loadMetadata(),this.debounce(()=>this.loadImage(r,"image source changed"),0)):t.deepEqual(n.layers,A.layers,1)?e.viewportChanged&&this.debounce(()=>this.loadImage(r,"viewport changed")):this.debounce(()=>this.loadImage(r,"layers changed"),0)}finalizeState(){}renderLayers(){const{bounds:n,image:A,lastRequestParameters:r}=this.state;return A&&new e.BitmapLayer({...this.getSubLayerProps({id:"bitmap"}),_imageCoordinateSystem:"EPSG:4326"===r.srs?t.COORDINATE_SYSTEM.LNGLAT:t.COORDINATE_SYSTEM.CARTESIAN,bounds:n,image:A})}async getFeatureInfoText(e,t){const{lastRequestParameters:n}=this.state;if(n){return await(this.state.imageSource.getFeatureInfoText?.({...n,query_layers:n.layers,x:e,y:t,info_format:"application/vnd.ogc.gml"}))}return""}_createImageSource(e){if(e.data instanceof g)return e.data;if("string"==typeof e.data)return function(e,t,n){const A=n?.core?.type||n.type||"auto",r="auto"===A?function(e,t){for(const n of t)if(n.testURL&&n.testURL(e))return n;return null}(e,t):function(e,t){for(const n of t)if(n.type===e)return n;return null}(A,t);if(!r)throw new Error("Not a valid source type");return r.createDataSource(e,n)}(e.data,[_a],{core:{type:e.serviceType,loadOptions:e.loadOptions}});throw new Error("invalid image source in props.data")}async _loadMetadata(){const{imageSource:e}=this.state;try{this.state.loadCounter++;const t=await e.getMetadata();this.state.imageSource===e&&this.getCurrentLayer()?.props.onMetadataLoad(t)}catch(t){this.getCurrentLayer()?.props.onMetadataLoadError(t)}finally{this.state.loadCounter--}}async loadImage(e,t){const{layers:n,serviceType:A}=this.props;if("wms"===A&&0===n.length)return;const r=e.getBounds(),{width:i,height:s}=e,o=this.getRequestId();let{srs:a}=this.props;"auto"===a&&(a=e.resolution?"EPSG:4326":"EPSG:3857");const l={width:i,height:s,boundingBox:[[r[0],r[1]],[r[2],r[3]]],layers:n,crs:a};if("EPSG:3857"===a){const e=Ta([r[0],r[1]]),t=Ta([r[2],r[3]]);l.boundingBox=[e,t]}try{this.state.loadCounter++,this.props.onImageLoadStart(o);const e=await this.state.imageSource.getImage(l);this.state.lastRequestId<o&&(this.getCurrentLayer()?.props.onImageLoad(o),this.setState({image:e,bounds:r,lastRequestParameters:l,lastRequestId:o}))}catch(c){this.raiseError(c,"Load image"),this.getCurrentLayer()?.props.onImageLoadError(o,c)}finally{this.state.loadCounter--}}getRequestId(){return this.state._nextRequestId++}debounce(e,t=500){clearTimeout(this.state._timeoutId),this.state._timeoutId=setTimeout(()=>e(),t)}}xa.layerName="WMSLayer",xa.defaultProps=Ea;class Sa extends e.ArcLayer{}Sa.layerName="GreatCircleLayer",Sa.defaultProps={getHeight:{type:"accessor",value:0},greatCircle:!0};var Ia,Ra={exports:{}};var La,Da,Pa,Fa=(Ia||(Ia=1,
|
|
2
2
|
/**
|
|
3
3
|
* @license long.js (c) 2013 Daniel Wirtz <dcode@dcode.io>
|
|
4
4
|
* Released under the Apache License, Version 2.0
|
|
@@ -24,4 +24,4 @@ Da=Ra.exports,Pa=function(){function e(e,t,n){this.low=0|e,this.high=0|t,this.un
|
|
|
24
24
|
*
|
|
25
25
|
* SPDX-License-Identifier: Apache-2.0
|
|
26
26
|
*/var kg=null;try{kg=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch{}function Gg(e,t,n){this.low=0|e,this.high=0|t,this.unsigned=!!n}function Vg(e){return!0===(e&&e.__isLong__)}function Hg(e){var t=Math.clz32(e&-e);return e?31-t:t}Gg.prototype.__isLong__,Object.defineProperty(Gg.prototype,"__isLong__",{value:!0}),Gg.isLong=Vg;var Qg={},jg={};function zg(e,t){var n,A,r;return t?(r=0<=(e>>>=0)&&e<256)&&(A=jg[e])?A:(n=Kg(e,0,!0),r&&(jg[e]=n),n):(r=-128<=(e|=0)&&e<128)&&(A=Qg[e])?A:(n=Kg(e,e<0?-1:0,!1),r&&(Qg[e]=n),n)}function Jg(e,t){if(isNaN(e))return t?nb:tb;if(t){if(e<0)return nb;if(e>=Zg)return ob}else{if(e<=-$g)return ab;if(e+1>=$g)return sb}return e<0?Jg(-e,t).neg():Kg(e%Xg|0,e/Xg|0,t)}function Kg(e,t,n){return new Gg(e,t,n)}Gg.fromInt=zg,Gg.fromNumber=Jg,Gg.fromBits=Kg;var qg=Math.pow;function Yg(e,t,n){if(0===e.length)throw Error("empty string");if("number"==typeof t?(n=t,t=!1):t=!!t,"NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return t?nb:tb;if((n=n||10)<2||36<n)throw RangeError("radix");var A;if((A=e.indexOf("-"))>0)throw Error("interior hyphen");if(0===A)return Yg(e.substring(1),t,n).neg();for(var r=Jg(qg(n,8)),i=tb,s=0;s<e.length;s+=8){var o=Math.min(8,e.length-s),a=parseInt(e.substring(s,s+o),n);if(o<8){var l=Jg(qg(n,o));i=i.mul(l).add(Jg(a))}else i=(i=i.mul(r)).add(Jg(a))}return i.unsigned=t,i}function Wg(e,t){return"number"==typeof e?Jg(e,t):"string"==typeof e?Yg(e,t):Kg(e.low,e.high,"boolean"==typeof t?t:e.unsigned)}Gg.fromString=Yg,Gg.fromValue=Wg;var Xg=4294967296,Zg=Xg*Xg,$g=Zg/2,eb=zg(1<<24),tb=zg(0);Gg.ZERO=tb;var nb=zg(0,!0);Gg.UZERO=nb;var Ab=zg(1);Gg.ONE=Ab;var rb=zg(1,!0);Gg.UONE=rb;var ib=zg(-1);Gg.NEG_ONE=ib;var sb=Kg(-1,2147483647,!1);Gg.MAX_VALUE=sb;var ob=Kg(-1,-1,!0);Gg.MAX_UNSIGNED_VALUE=ob;var ab=Kg(0,-2147483648,!1);Gg.MIN_VALUE=ab;var lb=Gg.prototype;lb.toInt=function(){return this.unsigned?this.low>>>0:this.low},lb.toNumber=function(){return this.unsigned?(this.high>>>0)*Xg+(this.low>>>0):this.high*Xg+(this.low>>>0)},lb.toString=function(e){if((e=e||10)<2||36<e)throw RangeError("radix");if(this.isZero())return"0";if(this.isNegative()){if(this.eq(ab)){var t=Jg(e),n=this.div(t),A=n.mul(t).sub(this);return n.toString(e)+A.toInt().toString(e)}return"-"+this.neg().toString(e)}for(var r=Jg(qg(e,6),this.unsigned),i=this,s="";;){var o=i.div(r),a=(i.sub(o.mul(r)).toInt()>>>0).toString(e);if((i=o).isZero())return a+s;for(;a.length<6;)a="0"+a;s=""+a+s}},lb.getHighBits=function(){return this.high},lb.getHighBitsUnsigned=function(){return this.high>>>0},lb.getLowBits=function(){return this.low},lb.getLowBitsUnsigned=function(){return this.low>>>0},lb.getNumBitsAbs=function(){if(this.isNegative())return this.eq(ab)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&!(e&1<<t);t--);return 0!=this.high?t+33:t+1},lb.isSafeInteger=function(){var e=this.high>>21;return!e||!this.unsigned&&(-1===e&&!(0===this.low&&-2097152===this.high))},lb.isZero=function(){return 0===this.high&&0===this.low},lb.eqz=lb.isZero,lb.isNegative=function(){return!this.unsigned&&this.high<0},lb.isPositive=function(){return this.unsigned||this.high>=0},lb.isOdd=function(){return!(1&~this.low)},lb.isEven=function(){return!(1&this.low)},lb.equals=function(e){return Vg(e)||(e=Wg(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},lb.eq=lb.equals,lb.notEquals=function(e){return!this.eq(e)},lb.neq=lb.notEquals,lb.ne=lb.notEquals,lb.lessThan=function(e){return this.comp(e)<0},lb.lt=lb.lessThan,lb.lessThanOrEqual=function(e){return this.comp(e)<=0},lb.lte=lb.lessThanOrEqual,lb.le=lb.lessThanOrEqual,lb.greaterThan=function(e){return this.comp(e)>0},lb.gt=lb.greaterThan,lb.greaterThanOrEqual=function(e){return this.comp(e)>=0},lb.gte=lb.greaterThanOrEqual,lb.ge=lb.greaterThanOrEqual,lb.compare=function(e){if(Vg(e)||(e=Wg(e)),this.eq(e))return 0;var t=this.isNegative(),n=e.isNegative();return t&&!n?-1:!t&&n?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},lb.comp=lb.compare,lb.negate=function(){return!this.unsigned&&this.eq(ab)?ab:this.not().add(Ab)},lb.neg=lb.negate,lb.add=function(e){Vg(e)||(e=Wg(e));var t=this.high>>>16,n=65535&this.high,A=this.low>>>16,r=65535&this.low,i=e.high>>>16,s=65535&e.high,o=e.low>>>16,a=0,l=0,c=0,u=0;return c+=(u+=r+(65535&e.low))>>>16,l+=(c+=A+o)>>>16,a+=(l+=n+s)>>>16,a+=t+i,Kg((c&=65535)<<16|(u&=65535),(a&=65535)<<16|(l&=65535),this.unsigned)},lb.subtract=function(e){return Vg(e)||(e=Wg(e)),this.add(e.neg())},lb.sub=lb.subtract,lb.multiply=function(e){if(this.isZero())return this;if(Vg(e)||(e=Wg(e)),kg)return Kg(kg.mul(this.low,this.high,e.low,e.high),kg.get_high(),this.unsigned);if(e.isZero())return this.unsigned?nb:tb;if(this.eq(ab))return e.isOdd()?ab:tb;if(e.eq(ab))return this.isOdd()?ab:tb;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(eb)&&e.lt(eb))return Jg(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,n=65535&this.high,A=this.low>>>16,r=65535&this.low,i=e.high>>>16,s=65535&e.high,o=e.low>>>16,a=65535&e.low,l=0,c=0,u=0,f=0;return u+=(f+=r*a)>>>16,c+=(u+=A*a)>>>16,u&=65535,c+=(u+=r*o)>>>16,l+=(c+=n*a)>>>16,c&=65535,l+=(c+=A*o)>>>16,c&=65535,l+=(c+=r*s)>>>16,l+=t*a+n*o+A*s+r*i,Kg((u&=65535)<<16|(f&=65535),(l&=65535)<<16|(c&=65535),this.unsigned)},lb.mul=lb.multiply,lb.divide=function(e){if(Vg(e)||(e=Wg(e)),e.isZero())throw Error("division by zero");var t,n,A;if(kg)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?Kg((this.unsigned?kg.div_u:kg.div_s)(this.low,this.high,e.low,e.high),kg.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?nb:tb;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return nb;if(e.gt(this.shru(1)))return rb;A=nb}else{if(this.eq(ab))return e.eq(Ab)||e.eq(ib)?ab:e.eq(ab)?Ab:(t=this.shr(1).div(e).shl(1)).eq(tb)?e.isNegative()?Ab:ib:(n=this.sub(e.mul(t)),A=t.add(n.div(e)));if(e.eq(ab))return this.unsigned?nb:tb;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();A=tb}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var r=Math.ceil(Math.log(t)/Math.LN2),i=r<=48?1:qg(2,r-48),s=Jg(t),o=s.mul(e);o.isNegative()||o.gt(n);)o=(s=Jg(t-=i,this.unsigned)).mul(e);s.isZero()&&(s=Ab),A=A.add(s),n=n.sub(o)}return A},lb.div=lb.divide,lb.modulo=function(e){return Vg(e)||(e=Wg(e)),kg?Kg((this.unsigned?kg.rem_u:kg.rem_s)(this.low,this.high,e.low,e.high),kg.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},lb.mod=lb.modulo,lb.rem=lb.modulo,lb.not=function(){return Kg(~this.low,~this.high,this.unsigned)},lb.countLeadingZeros=function(){return this.high?Math.clz32(this.high):Math.clz32(this.low)+32},lb.clz=lb.countLeadingZeros,lb.countTrailingZeros=function(){return this.low?Hg(this.low):Hg(this.high)+32},lb.ctz=lb.countTrailingZeros,lb.and=function(e){return Vg(e)||(e=Wg(e)),Kg(this.low&e.low,this.high&e.high,this.unsigned)},lb.or=function(e){return Vg(e)||(e=Wg(e)),Kg(this.low|e.low,this.high|e.high,this.unsigned)},lb.xor=function(e){return Vg(e)||(e=Wg(e)),Kg(this.low^e.low,this.high^e.high,this.unsigned)},lb.shiftLeft=function(e){return Vg(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?Kg(this.low<<e,this.high<<e|this.low>>>32-e,this.unsigned):Kg(0,this.low<<e-32,this.unsigned)},lb.shl=lb.shiftLeft,lb.shiftRight=function(e){return Vg(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?Kg(this.low>>>e|this.high<<32-e,this.high>>e,this.unsigned):Kg(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},lb.shr=lb.shiftRight,lb.shiftRightUnsigned=function(e){return Vg(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?Kg(this.low>>>e|this.high<<32-e,this.high>>>e,this.unsigned):Kg(32===e?this.high:this.high>>>e-32,0,this.unsigned)},lb.shru=lb.shiftRightUnsigned,lb.shr_u=lb.shiftRightUnsigned,lb.rotateLeft=function(e){var t;return Vg(e)&&(e=e.toInt()),0==(e&=63)?this:32===e?Kg(this.high,this.low,this.unsigned):e<32?(t=32-e,Kg(this.low<<e|this.high>>>t,this.high<<e|this.low>>>t,this.unsigned)):(t=32-(e-=32),Kg(this.high<<e|this.low>>>t,this.low<<e|this.high>>>t,this.unsigned))},lb.rotl=lb.rotateLeft,lb.rotateRight=function(e){var t;return Vg(e)&&(e=e.toInt()),0==(e&=63)?this:32===e?Kg(this.high,this.low,this.unsigned):e<32?(t=32-e,Kg(this.high<<t|this.low>>>e,this.low<<t|this.high>>>e,this.unsigned)):(t=32-(e-=32),Kg(this.low<<t|this.high>>>e,this.high<<t|this.low>>>e,this.unsigned))},lb.rotr=lb.rotateRight,lb.toSigned=function(){return this.unsigned?Kg(this.low,this.high,!1):this},lb.toUnsigned=function(){return this.unsigned?this:Kg(this.low,this.high,!0)},lb.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},lb.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},lb.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},Gg.fromBytes=function(e,t,n){return n?Gg.fromBytesLE(e,t):Gg.fromBytesBE(e,t)},Gg.fromBytesLE=function(e,t){return new Gg(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},Gg.fromBytesBE=function(e,t){return new Gg(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)},"function"==typeof BigInt&&(Gg.fromBigInt=function(e,t){return Kg(Number(BigInt.asIntN(32,e)),Number(BigInt.asIntN(32,e>>BigInt(32))),t)},Gg.fromValue=function(e,t){return"bigint"==typeof e?Gg.fromBigInt(e,t):Wg(e,t)},lb.toBigInt=function(){var e=BigInt(this.low>>>0);return BigInt(this.unsigned?this.high>>>0:this.high)<<BigInt(32)|e});function cb(e){"X"===e&&(e="");const t=e.padEnd(16,"0");return Gg.fromString(t,!0,16)}const ub=180/Math.PI;function fb(e,t,n){const A=1<<t;return[(e[0]+n[0])/A,(e[1]+n[1])/A]}function hb(e){return e>=.5?1/3*(4*e*e-1):1/3*(1-4*(1-e)*(1-e))}function db(e){return[hb(e[0]),hb(e[1])]}function pb(e,[t,n]){switch(e){case 0:return[1,t,n];case 1:return[-t,1,n];case 2:return[-t,-n,1];case 3:return[-1,-n,-t];case 4:return[n,-1,-t];case 5:return[n,t,-1];default:throw new Error("Invalid face")}}function mb([e,t,n]){const A=Math.atan2(n,Math.sqrt(e*e+t*t));return[Math.atan2(t,e)*ub,A*ub]}function gb(e,t,n,A){if(0===A){1===n&&(t[0]=e-1-t[0],t[1]=e-1-t[1]);const A=t[0];t[0]=t[1],t[1]=A}}function bb(e){const{face:t,ij:n,level:A}=e,r=[[0,0],[0,1],[1,1],[1,0],[0,0]],i=Math.max(1,Math.ceil(100*Math.pow(2,-A))),s=new Float64Array(4*i*2+2);let o=0,a=0;for(let l=0;l<4;l++){const e=r[l].slice(0),c=r[l+1],u=(c[0]-e[0])/i,f=(c[1]-e[1])/i;for(let r=0;r<i;r++){e[0]+=u,e[1]+=f;const r=mb(pb(t,db(fb(n,A,e))));Math.abs(r[1])>89.999&&(r[0]=a);const i=r[0]-a;r[0]+=i>180?-360:i<-180?360:0,s[o++]=r[0],s[o++]=r[1],a=r[0]}}return s[o++]=s[0],s[o++]=s[1],s}function yb(e){const t=function(e){if(e.indexOf("/")>0)return e;const t=cb(e);return function(e){if(e.isZero())return"";let t=e.toString(2);for(;t.length<64;)t="0"+t;const n=t.lastIndexOf("1"),A=t.substring(0,3),r=t.substring(3,n),i=r.length/2,s=Gg.fromString(A,!0,2).toString(10);let o="";if(0!==i)for(o=Gg.fromString(r,!0,2).toString(4);o.length<i;)o="0"+o;return`${s}/${o}`}(t)}(e);return function(e){if(0===e.length)throw new Error(`Invalid Hilbert quad key ${e}`);const t=e.split("/"),n=parseInt(t[0],10),A=t[1],r=A.length;let i=0;const s=[0,0];for(let o=r-1;o>=0;o--){i=r-o;const e=A[o];let t=0,n=0;"1"===e?n=1:"2"===e?(t=1,n=1):"3"===e&&(t=1);const a=Math.pow(2,i-1);gb(a,s,t,n),s[0]+=a*t,s[1]+=a*n}if(n%2==1){const e=s[0];s[0]=s[1],s[1]=e}return{face:n,ij:s,level:i}}(t)}function Bb(e){return function(e){const t=db(fb(e.ij,e.level,[.5,.5]));return mb(pb(e.face,t))}(yb(e))}function vb(e){if(e.length%2!=0)throw new Error("Invalid corners");const t=[],n=[];for(let A=0;A<e.length;A+=2)t.push(e[A]),n.push(e[A+1]);return t.sort((e,t)=>e-t),n.sort((e,t)=>e-t),{west:t[0],east:t[t.length-1],north:n[n.length-1],south:n[0]}}function Cb(e,n){const A=n?.minimumHeight||0,r=n?.maximumHeight||0,i=function(e){let t;if(2===e.face||5===e.face){let n=null,A=0;for(let t=0;t<4;t++){const r=bb(yb(`${e.face}/${t}`));null==n&&(n=new Float64Array(4*r.length)),n.set(r,A),A+=r.length}t=vb(n)}else t=vb(bb(e));return t}(yb(e)),s=i.west,o=i.south,a=i.east,l=i.north,c=[];return c.push(new t.Vector3(s,l,A)),c.push(new t.Vector3(a,l,A)),c.push(new t.Vector3(a,o,A)),c.push(new t.Vector3(s,o,A)),c.push(new t.Vector3(s,l,r)),c.push(new t.Vector3(a,l,r)),c.push(new t.Vector3(a,o,r)),c.push(new t.Vector3(s,o,r)),c}function _b(e){const n=e.token,A={minimumHeight:e.minimumHeight,maximumHeight:e.maximumHeight},r=Cb(n,A),i=Bb(n),s=i[0],o=i[1],a=wp.WGS84.cartographicToCartesian([s,o,A.maximumHeight]),l=new t.Vector3(a[0],a[1],a[2]);r.push(l);const c=Jl(r);return[...c.center,...c.halfAxes]}const Mb={QUADTREE:4,OCTREE:8};function wb(e,t,n){if(e?.box){const A=function(e,t){const n=function(e){return e.and(e.not().add(1))}(e).shiftRightUnsigned(2);return e.add(Gg.fromNumber(2*t+1-4).multiply(n))}(cb(e.s2VolumeInfo.token),t),r=function(e){if(e.isZero())return"X";let t=e.countTrailingZeros();t=(t-t%4)/4;const n=t;t*=4;const A=e.shiftRightUnsigned(t).toString(16).replace(/0+$/,"");return Array(17-n-A.length).join("0")+A}(A),i={...e.s2VolumeInfo};if(i.token=r,"OCTREE"===n){const t=e.s2VolumeInfo,n=t.maximumHeight-t.minimumHeight,A=n/2,r=t.minimumHeight+n/2;t.minimumHeight=r-A,t.maximumHeight=r+A}return{box:_b(i),s2VolumeInfo:i}}}async function Tb(e){const{subtree:n,subtreeData:A={level:0,x:0,y:0,z:0},parentData:r={mortonIndex:0,localLevel:-1,localX:0,localY:0,localZ:0},childIndex:i=0,implicitOptions:o,loaderOptions:a,s2VolumeBox:l}=e,{subdivisionScheme:c,subtreeLevels:u,maximumLevel:f,contentUrlTemplate:h,subtreesUriTemplate:d,basePath:p}=o,m={children:[],lodMetricValue:0,contentUrl:""};if(!f)return s.once(`Missing 'maximumLevel' or 'availableLevels' property. The subtree ${h} won't be loaded...`),m;const g=r.localLevel+1,b=A.level+g;if(b>f)return m;const y=Mb[c],B=Math.log2(y),v=1&i,C=i>>1&1,_=i>>2&1,M=xb(r.localX,v,1),w=xb(r.localY,C,1),T=xb(r.localZ,_,1),E=xb(A.x,M,g),x=xb(A.y,w,g),S=xb(A.z,T,g),I=xb(r.mortonIndex,i,B);let R,L,D,P;if(g===u&&Eb(n.childSubtreeAvailability,I)){const e=Sb(`${p}/${d}`,b,E,x,S);R=await t.load(e,Ug,a),P=0,L={level:b,x:E,y:x,z:S},D={mortonIndex:0,localLevel:0,localX:0,localY:0,localZ:0}}else{R=n;P=(y**g-1)/(y-1)+I,L=A,D={mortonIndex:I,localLevel:g,localX:M,localY:w,localZ:T}}if(!Eb(R.tileAvailability,P))return m;Eb(R.contentAvailability,P)&&(m.contentUrl=Sb(h,b,E,x,S));for(let t=0;t<y;t++){const e=wb(l,t,c),n=await Tb({subtree:R,subtreeData:L,parentData:D,childIndex:t,implicitOptions:o,loaderOptions:a,s2VolumeBox:e});(n.contentUrl||n.children.length)&&m.children.push(n)}if(m.contentUrl||m.children.length){const e=function(e,t,n,A){const{basePath:r,refine:i,getRefine:s,lodMetricType:o,getTileType:a,rootLodMetricValue:l,rootBoundingVolume:c}=n,u=e.contentUrl&&e.contentUrl.replace(`${r}/`,""),f=l/2**t.level,h=A?.box?{box:A.box}:c,d=function(e,t,n){if(e.region){const{level:A,x:r,y:i,z:s}=t,[o,a,l,c,u,f]=e.region,h=2**A,d=(l-o)/h,[p,m]=[o+d*r,o+d*(r+1)],g=(c-a)/h,[b,y]=[a+g*i,a+g*(i+1)];let B,v;if("OCTREE"===n){const e=(f-u)/h;[B,v]=[u+e*s,u+e*(s+1)]}else[B,v]=[u,f];return{region:[p,b,m,y,B,v]}}if(e.box)return e;throw new Error(`Unsupported bounding volume type ${JSON.stringify(e)}`)}(h,t,n.subdivisionScheme);return{children:e.children,contentUrl:e.contentUrl,content:{uri:u},id:e.contentUrl,refine:s(i),type:a(e),lodMetricType:o,lodMetricValue:f,geometricError:f,transform:e.transform,boundingVolume:d}}(m,{level:b,x:E,y:x,z:S},o,l);return e}return m}function Eb(e,t){let n;return Array.isArray(e)?(n=e[0],e.length>1&&s.once('Not supported extension "3DTILES_multiple_contents" has been detected')):n=e,"constant"in n?Boolean(n.constant):!!n.explicitBitstream&&function(e,t){const n=Math.floor(e/8),A=e%8;return 1==(t[n]>>A&1)}(t,n.explicitBitstream)}function xb(e,t,n){return(e<<n)+t}function Sb(e,t,n,A,r){const i=function(e){const t={};for(const n in e)t[`{${n}}`]=e[n];return t}({level:t,x:n,y:A,z:r});return e.replace(/{level}|{x}|{y}|{z}/gi,e=>i[e])}function Ib(e,t=""){if(!t)return Kp.EMPTY;const n=t.split("?")[0].split(".").pop();switch(n){case"pnts":return Kp.POINTCLOUD;case"i3dm":case"b3dm":case"glb":case"gltf":return Kp.SCENEGRAPH;default:return n||Kp.EMPTY}}function Rb(e){switch(e){case"REPLACE":case"replace":return Jp.REPLACE;case"ADD":case"add":return Jp.ADD;default:return e}}function Lb(e,n){if(/^[a-z][0-9a-z+.-]*:/i.test(n)){const t=new URL(e,`${n}/`);return decodeURI(t.toString())}return e.startsWith("/")?e:t.resolve(n,e)}function Db(e,t){if(!e)return null;let n;if(e.content){const A=e.content.uri||e.content?.url;void 0!==A&&(n=Lb(A,t))}return{...e,id:n,contentUrl:n,lodMetricType:Yp.GEOMETRIC_ERROR,lodMetricValue:e.geometricError,transformMatrix:e.transform,type:Ib(0,n),refine:Rb(e.refine)}}async function Pb(e,n,A,r,i){const{subdivisionScheme:s,maximumLevel:o,availableLevels:a,subtreeLevels:l,subtrees:{uri:c}}=r,u=Lb(Sb(c,0,0,0,0),A),f=await t.load(u,Ug,i),h=e.content?.uri,d=h?Lb(h,A):"",p=n?.root?.refine,m=e.geometricError,g=e.boundingVolume.extensions?.["3DTILES_bounding_volume_S2"];if(g){const t={box:_b(g),s2VolumeInfo:g};e.boundingVolume=t}const b=e.boundingVolume,y={contentUrlTemplate:d,subtreesUriTemplate:c,subdivisionScheme:s,subtreeLevels:l,maximumLevel:Number.isFinite(a)?a-1:o,refine:p,basePath:A,lodMetricType:Yp.GEOMETRIC_ERROR,rootLodMetricValue:m,rootBoundingVolume:b,getTileType:Ib,getRefine:Rb};return await async function(e,t,n,A,r){if(!e)return null;const{children:i,contentUrl:s}=await Tb({subtree:n,implicitOptions:A,loaderOptions:r});let o,a=null;s&&(o=s,a={uri:s.replace(`${t}/`,"")});const l={...e,id:o,contentUrl:o,lodMetricType:Yp.GEOMETRIC_ERROR,lodMetricValue:e.geometricError,transformMatrix:e.transform,type:Ib(0,o),refine:Rb(e.refine),content:a||e.content,children:i};return l}(e,A,f,y,i)}function Fb(e){return e?.extensions?.["3DTILES_implicit_tiling"]||e?.implicitTiling}const Nb={dataType:null,batchType:null,id:"3d-tiles",name:"3D Tiles",module:"3d-tiles",version:zm,extensions:["cmpt","pnts","b3dm","i3dm"],mimeTypes:["application/octet-stream"],tests:["cmpt","pnts","b3dm","i3dm"],parse:async function(e,n={},A){const r=n["3d-tiles"]||{};let i;i="auto"===r.isTileset?A?.url&&-1!==A.url.indexOf(".json"):r.isTileset;return i?async function(e,n,A){const r=JSON.parse((new TextDecoder).decode(e)),i=A?.url||"",s=function(e){return t.dirname(e)}(i),o=await async function(e,t,n){let A=null;const r=Fb(e.root);A=r&&e.root?await Pb(e.root,e,t,r,n):Db(e.root,t);const i=[];for(i.push(A);i.length>0;){const A=i.pop()||{},r=A.children||[],s=[];for(const o of r){const A=Fb(o);let r;r=A?await Pb(o,e,t,A,n):Db(o,t),r&&(s.push(r),i.push(r))}A.children=s}return A}(r,s,n||{}),a={...r,shape:"tileset3d",loader:Nb,url:i,queryString:A?.queryString||"",basePath:s,root:o||r.root,type:qp.TILES3D,lodMetricType:Yp.GEOMETRIC_ERROR,lodMetricValue:r.root?.geometricError||0};return a}(e,n,A):async function(e,t,n){const A={content:{shape:"tile3d",featureIds:null}},r=0;return await Fg(e,r,t,n,A.content),A.content}(e,n,A)},options:{"3d-tiles":{loadGLTF:!0,decodeQuantizedPositions:!1,isTileset:"auto",assetGltfUpAxis:null}}};const Ob=[0],Ub={getPointColor:{type:"accessor",value:[0,0,0,255]},pointSize:1,data:"",loader:Nb,onTilesetLoad:{type:"function",value:e=>{}},onTileLoad:{type:"function",value:e=>{}},onTileUnload:{type:"function",value:e=>{}},onTileError:{type:"function",value:(e,t,n)=>{}},_getMeshColor:{type:"function",value:e=>[255,255,255]}};class kb extends e.CompositeLayer{initializeState(){"onTileLoadFail"in this.props&&t.defaultLogger.removed("onTileLoadFail","onTileError")(),this.state={layerMap:{},tileset3d:null,activeViewports:{},lastUpdatedViewports:null}}get isLoaded(){return Boolean(this.state?.tileset3d?.isLoaded()&&super.isLoaded)}shouldUpdateState({changeFlags:e}){return e.somethingChanged}updateState({props:e,oldProps:t,changeFlags:n}){if(e.data&&e.data!==t.data&&this._loadTileset(e.data),n.viewportChanged){const{activeViewports:e}=this.state;Object.keys(e).length&&(this._updateTileset(e),this.state.lastUpdatedViewports=e,this.state.activeViewports={})}if(n.propsChanged){const{layerMap:e}=this.state;for(const t in e)e[t].needsUpdate=!0}}finalizeState(e){this.state.tileset3d?.destroy(),this.state.tileset3d=null,this.state.layerMap={},this.state.activeViewports={},this.state.lastUpdatedViewports=null,super.finalizeState(e)}activateViewport(e){const{activeViewports:t,lastUpdatedViewports:n}=this.state;this.internalState.viewport=e,t[e.id]=e;const A=n?.[e.id];A&&e.equals(A)||(this.setChangeFlags({viewportChanged:!0}),this.setNeedsUpdate())}getPickingInfo({info:e,sourceLayer:t}){const n=t&&t.props.tile;return e.picked&&(e.object=n),e.sourceTile=n,e}filterSubLayer({layer:e,viewport:t,cullRect:n,isPicking:A}){const{tile:r}=e.props,{id:i}=t;if(!r.selected||!r.viewportIds.includes(i))return!1;if(A&&n&&r.content?.cartographicOrigin){const[e,A]=t.project(r.content.cartographicOrigin),i=n.x+n.width/2,s=n.y+n.height/2,o=Math.max(t.width,t.height)/4,a=e-i,l=A-s;if(a*a+l*l>o*o)return!1}return!0}_updateAutoHighlight(e){const t=e.sourceTile,n=this.state.layerMap[t?.id];n&&n.layer&&n.layer.updateAutoHighlight(e)}async _loadTileset(e){const n=this.props.loadOptions||{},A=this.props.loaders?.length?this.props.loaders:this.props.loader,r=Array.isArray(A)?A[0]:A,{tileset:i,...s}=n,o={loadOptions:{...s},...i};let a=e;if("preload"in r&&"function"==typeof r.preload){const t=await r.preload(e,n);t.url&&(a=t.url),t.headers&&(o.loadOptions.core={...o.loadOptions.core,fetch:{...o.loadOptions.core?.fetch,headers:t.headers}}),Object.assign(o,t)}const l=await t.load(a,r,o.loadOptions),c=new jm(l,{onTileLoad:this._onTileLoad.bind(this),onTileUnload:this._onTileUnload.bind(this),onTileError:this.props.onTileError,onUpdate:()=>this.setNeedsUpdate(),...o});this.setState({tileset3d:c,layerMap:{}}),this._updateTileset(this.state.activeViewports),this.props.onTilesetLoad(c)}_onTileLoad(e){const{lastUpdatedViewports:t}=this.state;e.tileDrawn=!1,this.props.onTileLoad(e),this._updateTileset(t),this.setNeedsUpdate()}_onTileUnload(e){delete this.state.layerMap[e.id],this.props.onTileUnload(e)}_updateTileset(e){if(!e)return;const{tileset3d:t}=this.state,{timeline:n}=this.context,A=Object.keys(e).length;n&&A&&t&&t.selectTiles(Object.values(e)).then(e=>{this.state.frameNumber!==e&&this.setState({frameNumber:e})})}_getSubLayer(e,t){if(!e.content)return null;switch(e.type){case Kp.POINTCLOUD:return this._makePointCloudLayer(e,t);case Kp.SCENEGRAPH:return this._make3DModelLayer(e);case Kp.MESH:return this._makeSimpleMeshLayer(e,t);default:throw new Error(`Tile3DLayer: Failed to render layer of type ${e.content.type}`)}}_makePointCloudLayer(n,A){const{attributes:r,pointCount:i,constantRGBA:s,cartographicOrigin:o,modelMatrix:a}=n.content,{positions:l,normals:c,colors:u}=r;if(!l)return null;const f=A&&A.props.data||{header:{vertexCount:i},attributes:{POSITION:l,NORMAL:c,COLOR_0:u}},{pointSize:h,getPointColor:d}=this.props;return new(this.getSubLayerClass("pointcloud",e.PointCloudLayer))({pointSize:h},this.getSubLayerProps({id:"pointcloud"}),{id:`${this.id}-pointcloud-${n.id}`,tile:n,data:f,coordinateSystem:t.COORDINATE_SYSTEM.METER_OFFSETS,coordinateOrigin:o,modelMatrix:a,getColor:s||d,_offset:0})}_make3DModelLayer(e){const{gltf:n,instances:A,cartographicOrigin:r,modelMatrix:i}=e.content;return new(this.getSubLayerClass("scenegraph",tp))({_lighting:"pbr"},this.getSubLayerProps({id:"scenegraph"}),{id:`${this.id}-scenegraph-${e.id}`,tile:e,data:A||Ob,scenegraph:n,coordinateSystem:t.COORDINATE_SYSTEM.METER_OFFSETS,coordinateOrigin:r,modelMatrix:i,getTransformMatrix:e=>e.modelMatrix,getPosition:[0,0,0],_offset:0,onFirstDraw:()=>{e.tileDrawn=!0}})}_makeSimpleMeshLayer(n,A){const r=n.content,{attributes:i,indices:s,modelMatrix:o,cartographicOrigin:a,coordinateSystem:l=t.COORDINATE_SYSTEM.METER_OFFSETS,material:c,featureIds:u}=r,{_getMeshColor:f}=this.props,h=A&&A.props.mesh||new e.Geometry({topology:"triangle-list",attributes:Gb(i),indices:s});return new(this.getSubLayerClass("mesh",rp))(this.getSubLayerProps({id:"mesh"}),{id:`${this.id}-mesh-${n.id}`,tile:n,mesh:h,data:Ob,getColor:f(n),pbrMaterial:c,modelMatrix:o,coordinateOrigin:a,coordinateSystem:l,featureIds:u,_offset:0})}renderLayers(){const{tileset3d:e,layerMap:t}=this.state;return e?e.tiles.map(e=>{const n=t[e.id]=t[e.id]||{tile:e};let{layer:A}=n;return e.selected&&(A?n.needsUpdate&&(A=this._getSubLayer(e,A),n.needsUpdate=!1):A=this._getSubLayer(e)),n.layer=A,A}).filter(Boolean):null}}function Gb(e){const t={};return t.positions={...e.positions,value:new Float32Array(e.positions.value)},e.normals&&(t.normals=e.normals),e.texCoords&&(t.texCoords=e.texCoords),e.colors&&(t.colors=e.colors),e.uvRegions&&(t.uvRegions=e.uvRegions),t}kb.defaultProps=Ub,kb.layerName="Tile3DLayer";const Vb={dataType:null,batchType:null,name:"Terrain",id:"terrain",module:"terrain",version:"4.4.3",worker:!0,extensions:["png","pngraw","jpg","jpeg","gif","webp","bmp"],mimeTypes:["image/png","image/jpeg","image/gif","image/webp","image/bmp"],options:{terrain:{tesselator:"auto",bounds:void 0,meshMaxError:10,elevationDecoder:{rScaler:1,gScaler:0,bScaler:0,offset:0},skirtHeight:void 0}}},Hb=[1],Qb={...vc.defaultProps,elevationData:ec,texture:{...ec,optional:!0},meshMaxError:{type:"number",value:4},bounds:{type:"array",value:null,optional:!0,compare:!0},color:{type:"color",value:[255,255,255]},elevationDecoder:{type:"object",value:{rScaler:1,gScaler:0,bScaler:0,offset:0}},workerUrl:"",wireframe:!1,material:!0,loaders:[Vb]};function jb(e){return Array.isArray(e)?e.join(";"):e||""}class zb extends e.CompositeLayer{updateState({props:e,oldProps:n}){const A=e.elevationData!==n.elevationData;if(A){const{elevationData:t}=e,n=t&&(Array.isArray(t)||Jb(t));this.setState({isTiled:n})}const r=A||e.meshMaxError!==n.meshMaxError||e.elevationDecoder!==n.elevationDecoder||e.bounds!==n.bounds;if(!this.state.isTiled&&r){const t=this.loadTerrain(e);this.setState({terrain:t})}e.workerUrl&&t.defaultLogger.removed("workerUrl","loadOptions.terrain.workerUrl")()}loadTerrain({elevationData:e,bounds:t,elevationDecoder:n,meshMaxError:A,signal:r}){if(!e)return null;let i=this.getLoadOptions();i={...i,terrain:{skirtHeight:this.state.isTiled?2*A:0,...i?.terrain,bounds:t,meshMaxError:A,elevationDecoder:n}};const{fetch:s}=this.props;return s(e,{propName:"elevationData",layer:this,loadOptions:i,signal:r})}getTiledTerrainData(e){const{elevationData:t,fetch:n,texture:A,elevationDecoder:r,meshMaxError:i}=this.props,{viewport:s}=this.context,o=nc(t,e),a=A&&nc(A,e),{signal:l}=e;let c=[0,0],u=[0,0];if(s.isGeospatial){const t=e.bbox;c=s.projectFlat([t.west,t.south]),u=s.projectFlat([t.east,t.north])}else{const t=e.bbox;c=[t.left,t.bottom],u=[t.right,t.top]}const f=[c[0],c[1],u[0],u[1]],h=this.loadTerrain({elevationData:o,bounds:f,elevationDecoder:r,meshMaxError:i,signal:l}),d=a?n(a,{propName:"texture",layer:this,loaders:[],signal:l}).catch(e=>null):Promise.resolve(null);return Promise.all([h,d])}renderSubLayers(e){const n=this.getSubLayerClass("mesh",Gc),{color:A,wireframe:r,material:i}=this.props,{data:s}=e;if(!s)return null;const[o,a]=s;return new n(e,{data:Hb,mesh:o,texture:a,_instanced:!1,coordinateSystem:t.COORDINATE_SYSTEM.CARTESIAN,getPosition:e=>[0,0,0],getColor:A,wireframe:r,material:i})}onViewportLoad(e){if(!e)return;const{zRange:t}=this.state,n=e.map(e=>e.content).filter(Boolean).map(e=>e[0].header.boundingBox.map(e=>e[2]));if(0===n.length)return;const A=Math.min(...n.map(e=>e[0])),r=Math.max(...n.map(e=>e[1]));(!t||A<t[0]||r>t[1])&&this.setState({zRange:[A,r]})}renderLayers(){const{color:e,material:t,elevationData:n,texture:A,wireframe:r,meshMaxError:i,elevationDecoder:s,tileSize:o,maxZoom:a,minZoom:l,extent:c,maxRequests:u,onTileLoad:f,onTileUnload:h,onTileError:d,maxCacheSize:p,maxCacheByteSize:m,refinementStrategy:g,zoomOffset:b}=this.props;if(this.state.isTiled)return new vc(this.getSubLayerProps({id:"tiles"}),{getTileData:this.getTiledTerrainData.bind(this),renderSubLayers:this.renderSubLayers.bind(this),updateTriggers:{getTileData:{elevationData:jb(n),texture:jb(A),meshMaxError:i,elevationDecoder:s,projectionMode:this.context.viewport.projectionMode,zoomOffset:b}},onViewportLoad:this.onViewportLoad.bind(this),zRange:this.state.zRange||null,tileSize:o,maxZoom:a,minZoom:l,extent:c,maxRequests:u,onTileLoad:f,onTileUnload:h,onTileError:d,maxCacheSize:p,maxCacheByteSize:m,refinementStrategy:g,zoomOffset:b});if(!n)return null;return new(this.getSubLayerClass("mesh",Gc))(this.getSubLayerProps({id:"mesh"}),{data:Hb,mesh:this.state.terrain,texture:A,_instanced:!1,getPosition:e=>[0,0,0],getColor:e,material:t,wireframe:r})}}zb.defaultProps=Qb,zb.layerName="TerrainLayer";const Jb=e=>e.includes("{x}")&&(e.includes("{y}")||e.includes("{-y}")),Kb={clipBounds:[0,0,1,1],clipByInstance:void 0},qb="\nlayout(std140) uniform clipUniforms {\n vec4 bounds;\n} clip;\n\nbool clip_isInBounds(vec2 position) {\n return position.x >= clip.bounds[0] && position.y >= clip.bounds[1] && position.x < clip.bounds[2] && position.y < clip.bounds[3];\n}\n",Yb={name:"clip",vs:qb,uniformTypes:{bounds:"vec4<f32>"}},Wb={"vs:#decl":"\nout float clip_isVisible;\n","vs:DECKGL_FILTER_GL_POSITION":"\n clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));\n","fs:#decl":"\nin float clip_isVisible;\n","fs:DECKGL_FILTER_COLOR":"\n if (clip_isVisible < 0.5) discard;\n"},Xb={name:"clip",fs:qb,uniformTypes:{bounds:"vec4<f32>"}},Zb={"vs:#decl":"\nout vec2 clip_commonPosition;\n","vs:DECKGL_FILTER_GL_POSITION":"\n clip_commonPosition = geometry.position.xy;\n","fs:#decl":"\nin vec2 clip_commonPosition;\n","fs:DECKGL_FILTER_COLOR":"\n if (!clip_isInBounds(clip_commonPosition)) discard;\n"};class $b extends se{getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return void 0!==this.props.clipByInstance&&(e=Boolean(this.props.clipByInstance)),this.state.clipByInstance=e,e?{modules:[Yb],inject:Wb}:{modules:[Xb],inject:Zb}}draw(){const{clipBounds:e}=this.props,t={};if(this.state.clipByInstance)t.bounds=e;else{const n=this.projectPosition([e[0],e[1],0]),A=this.projectPosition([e[2],e[3],0]);t.bounds=[Math.min(n[0],A[0]),Math.min(n[1],A[1]),Math.max(n[0],A[0]),Math.max(n[1],A[1])]}this.setShaderModuleProps({clip:t})}}function ey(e,t,n){switch(e.type){case"Point":return function(e,t,n){const{positions:A}=e,r=ny(A,t,n);if(r.length>1)return{type:"MultiPoint",coordinates:r};return{type:"Point",coordinates:r[0]}}(e,t,n);case"LineString":return function(e,t=-1/0,n=1/0){const{positions:A}=e,r=e.pathIndices.value.filter(e=>e>=t&&e<=n);if(!(r.length>2)){return{type:"LineString",coordinates:ny(A,r[0],r[1])}}const i=[];for(let s=0;s<r.length-1;s++){const e=ny(A,r[s],r[s+1]);i.push(e)}return{type:"MultiLineString",coordinates:i}}(e,t,n);case"Polygon":return ty(e,t,n);default:const A=e;throw new Error(`Unsupported geometry type: ${A?.type}`)}}function ty(e,t=-1/0,n=1/0){const{positions:A}=e,r=e.polygonIndices.value.filter(e=>e>=t&&e<=n),i=e.primitivePolygonIndices.value.filter(e=>e>=t&&e<=n);if(!(r.length>2)){const e=[];for(let t=0;t<i.length-1;t++){const n=ny(A,i[t],i[t+1]);e.push(n)}return{type:"Polygon",coordinates:e}}const s=[];for(let o=0;o<r.length-1;o++){const t=ty(e,r[o],r[o+1]).coordinates;s.push(t)}return{type:"MultiPolygon",coordinates:s}}function ny(e,t,n){t=t||0,n=n||e.value.length/e.size;const A=[];for(let r=t;r<n;r++){const t=Array();for(let n=r*e.size;n<(r+1)*e.size;n++)t.push(Number(e.value[n]));A.push(t)}return A}function Ay(e,t){const n=t?.globalFeatureId;return void 0!==n?function(e,t){const n=ry(e);for(const A of n){let e=0,n=A.featureIds.value[0];for(let r=0;r<A.featureIds.value.length;r++){const i=A.featureIds.value[r];if(i!==n){if(t===A.globalFeatureIds.value[e])return iy(A,e,r);e=r,n=i}}if(t===A.globalFeatureIds.value[e])return iy(A,e,A.featureIds.value.length)}throw new Error(`featureId:${t} not found`)}(e,n):function(e){const t=ry(e);return function(e){const t=[];for(const n of e){if(0===n.featureIds.value.length)continue;let e=0,A=n.featureIds.value[0];for(let r=0;r<n.featureIds.value.length;r++){const i=n.featureIds.value[r];i!==A&&(t.push(iy(n,e,r)),e=r,A=i)}t.push(iy(n,e,n.featureIds.value.length))}return t}(t)}(e)}function ry(e,t){const n=[];return e.points&&(e.points.type="Point",n.push(e.points)),e.lines&&(e.lines.type="LineString",n.push(e.lines)),e.polygons&&(e.polygons.type="Polygon",n.push(e.polygons)),n}function iy(e,t,n){const A=ey(e,t,n),r=function(e,t=0){const n=Object.assign({},e.properties[e.featureIds.value[t]]);for(const A in e.numericProps)n[A]=e.numericProps[A].value[t];return n}(e,t),i=function(e,t=0){return e.fields&&e.fields[e.featureIds.value[t]]}(e,t);return{type:"Feature",geometry:A,properties:r,...i}}$b.defaultProps=Kb,$b.extensionName="ClipExtension";const sy={name:"Mapbox Vector Tile",id:"mvt",module:"mvt",extensions:["mvt","pbf"],mimeTypes:["application/vnd.mapbox-vector-tile","application/x-protobuf"],category:"geometry",dataType:null,batchType:null,version:"4.4.3",worker:!0,options:{mvt:{shape:"geojson",coordinates:"local",layerProperty:"layerName",layers:void 0,tileIndex:void 0}}},oy={Point:ay,MultiPoint:function(e,t,n){return ly(e,t,n)},LineString:cy,MultiLineString:function(e,t,n){return e.map(e=>cy(e,t,n))},Polygon:uy,MultiPolygon:function(e,t,n){return e.map(e=>uy(e,t,n))}};function ay([e,n],[A,r],i){const s=t.lerp$1(A[0],r[0],e),o=t.lerp$1(A[1],r[1],n);return i.unprojectFlat([s,o])}function ly(e,t,n){return e.map(e=>ay(e,t,n))}function cy(e,t,n){return ly(e,t,n)}function uy(e,t,n){return e.map(e=>ly(e,t,n))}const fy=["points","lines","polygons"];function hy(e,t,n,A){const r=e.featureIds.value;if(!r.length)return-1;let i=0,s=r[r.length-1]+1;if(A){const t=function(e,t){if(!e.__layers){const t={},{properties:n}=e;for(let e=0;e<n.length;e++){const{layerName:A}=n[e];A&&(t[A]?t[A][1]=e:t[A]=[e,e])}e.__layers=t}return e.__layers[t]}(e,A);if(!t)return-1;i=t[0],s=t[1]+1}let o=-1;if(t in e.numericProps){const A=e.numericProps[t].value.findIndex((e,t)=>e===n&&r[t]>=i&&r[t]<s);return A>=0?e.globalFeatureIds.value[A]:-1}return t?o=dy(e.properties,e=>e[t]===n,i,s):e.fields&&(o=dy(e.fields,e=>e.id===n,i,s)),o>=0?function(e,t){if(!e.__ids){const t=[],n=e.featureIds.value,A=e.globalFeatureIds.value;for(let e=0;e<n.length;e++)t[n[e]]=A[e];e.__ids=t}return e.__ids[t]}(e,o):-1}function dy(e,t,n,A){for(let r=n;r<A;r++)if(t(e[r],r))return r;return-1}const py={...e.GeoJsonLayer.defaultProps,data:ec,onDataLoad:{type:"function",value:null,optional:!0,compare:!1},uniqueIdProperty:"",highlightedFeatureId:null,loaders:[sy],binary:!0};class my extends vc{initializeState(){super.initializeState();const e=void 0===this.context.viewport.resolution&&this.props.binary;this.setState({binary:e,data:null,tileJSON:null,hoveredFeatureId:null,hoveredFeatureLayerName:null})}get isLoaded(){return Boolean(this.state?.data&&super.isLoaded)}updateState({props:e,oldProps:t,context:n,changeFlags:A}){A.dataChanged&&this._updateTileData(),this.state?.data&&(super.updateState({props:e,oldProps:t,context:n,changeFlags:A}),this._setWGS84PropertyForTiles());const{highlightColor:r}=e;r!==t.highlightColor&&Array.isArray(r)&&this.setState({highlightColor:r})}async _updateTileData(){let e=this.props.data,t=null;if("string"!=typeof e||/(?=.*{z})(?=.*{x})(?=.*({y}|{-y}))/.test(e))e&&"object"==typeof e&&"tilejson"in e&&(t=e);else{const{onDataLoad:A,fetch:r}=this.props;this.setState({data:null,tileJSON:null});try{t=await r(e,{propName:"data",layer:this,loaders:[]})}catch(n){this.raiseError(n,"loading TileJSON"),e=null}A&&A(t,{propName:"data",layer:this})}t&&(e=t.tiles),this.setState({data:e,tileJSON:t})}_getTilesetOptions(){const e=super._getTilesetOptions(),t=this.state.tileJSON,{minZoom:n,maxZoom:A}=this.props;return t&&(Number.isFinite(t.minzoom)&&t.minzoom>n&&(e.minZoom=t.minzoom),Number.isFinite(t.maxzoom)&&(!Number.isFinite(A)||t.maxzoom<A)&&(e.maxZoom=t.maxzoom)),e}renderLayers(){return this.state?.data?super.renderLayers():null}getTileData(e){const{data:t,binary:n}=this.state,{index:A,signal:r}=e,i=nc(t,e);if(!i)return Promise.reject("Invalid URL");let s=this.getLoadOptions();const{fetch:o}=this.props;return s={...s,core:{...s?.core,mimeType:"application/x-protobuf"},mvt:{...s?.mvt,shape:n?"binary":"geojson",coordinates:this.context.viewport.resolution?"wgs84":"local",tileIndex:A}},o(i,{propName:"data",layer:this,loadOptions:s,signal:r})}renderSubLayers(n){const{x:A,y:r,z:i}=n.tile.index,s=Math.pow(2,i),o=512/s,a=-o,l=512*A/s,c=512*(1-r/s),u=(new t.Matrix4).scale([o,a,1]);n.autoHighlight=!1,this.context.viewport.resolution||(n.modelMatrix=u,n.coordinateOrigin=[l,c,0],n.coordinateSystem=t.COORDINATE_SYSTEM.CARTESIAN,n.extensions=[...n.extensions||[],new $b]);const f=super.renderSubLayers(n);return!this.state.binary||f instanceof e.GeoJsonLayer||t.defaultLogger.warn("renderSubLayers() must return GeoJsonLayer when using binary:true")(),f}_updateAutoHighlight(e){const{uniqueIdProperty:t}=this.props,{hoveredFeatureId:n,hoveredFeatureLayerName:A}=this.state,r=e.object;let i=null,s=null;r&&(i=gy(r,t),s=by(r));let{highlightColor:o}=this.props;"function"==typeof o&&(o=o(e)),n===i&&A===s||this.setState({highlightColor:o,hoveredFeatureId:i,hoveredFeatureLayerName:s})}_isWGS84(){return Boolean(this.context.viewport.resolution)}getPickingInfo(e){const t=super.getPickingInfo(e);if(this.state.binary&&-1!==t.index){const{data:n}=e.sourceLayer.props;t.object=Ay(n,{globalFeatureId:t.index})}return t.object&&!this._isWGS84()&&(t.object=By(t.object,t.tile.bbox,this.context.viewport)),t}getSubLayerPropsByTile(e){return{highlightedObjectIndex:this.getHighlightedObjectIndex(e),highlightColor:this.state.highlightColor}}getHighlightedObjectIndex(e){const{hoveredFeatureId:t,hoveredFeatureLayerName:n,binary:A}=this.state,{uniqueIdProperty:r,highlightedFeatureId:i}=this.props,s=e.content,o=yy(i);if(!(yy(t)||o))return-1;const a=o?i:t;return Array.isArray(s)?s.findIndex(e=>{const t=gy(e,r)===a,A=o||by(e)===n;return t&&A}):s&&A?function(e,t,n,A){for(const r of fy){const i=e[r]&&hy(e[r],t,n,A);if(i>=0)return i}return-1}(s,r,a,o?"":n):-1}_pickObjects(e){const{deck:t,viewport:n}=this.context,A=n.width,r=n.height,i=n.x,s=n.y,o=[this.id];return t.pickObjects({x:i,y:s,width:A,height:r,layerIds:o,maxObjects:e})}getRenderedFeatures(e=null){const t=this._pickObjects(e),n=new Set,A=[];for(const r of t){const e=gy(r.object,this.props.uniqueIdProperty);void 0===e?A.push(r.object):n.has(e)||(n.add(e),A.push(r.object))}return A}_setWGS84PropertyForTiles(){const e="dataInWGS84";this.state.tileset.selectedTiles.forEach(t=>{t.hasOwnProperty(e)||Object.defineProperty(t,e,{get:()=>{if(!t.content)return null;if(this.state.binary&&Array.isArray(t.content)&&!t.content.length)return[];const{bbox:e}=t;if(void 0===t._contentWGS84&&function(e){return Number.isFinite(e.west)&&Number.isFinite(e.north)&&Number.isFinite(e.east)&&Number.isFinite(e.south)}(e)){const n=this.state.binary?Ay(t.content):t.content;t._contentWGS84=n.map(t=>By(t,e,this.context.viewport))}return t._contentWGS84}})})}}function gy(e,t){return e.properties&&t?e.properties[t]:"id"in e?e.id:void 0}function by(e){return e.properties?.layerName||null}function yy(e){return null!=e&&""!==e}function By(e,t,n){const A={...e,geometry:{type:e.geometry.type}};return Object.defineProperty(A.geometry,"coordinates",{get:()=>{const A=function(e,t,n){const A=[n.projectFlat([t.west,t.north]),n.projectFlat([t.east,t.south])];return{...e,coordinates:oy[e.type](e.coordinates,A,n)}}(e.geometry,t,n);return A.coordinates}}),A}my.layerName="MVTLayer",my.defaultProps=py;const vy="0123456789bcdefghjkmnpqrstuvwxyz",Cy={};for(let wy=0;wy<32;wy++)Cy[vy.charAt(wy)]=wy;function _y(e){const[t,n,A,r]=function(e){let t,n=!0,A=90,r=-90,i=180,s=-180,o=0;for(let a=0,l=e.length;a<l;a++){const l=e[a].toLowerCase();o=Cy[l];for(let e=4;e>=0;e--){const a=o>>e&1;n?(t=(i+s)/2,1===a?s=t:i=t):(t=(A+r)/2,1===a?r=t:A=t),n=!n}}return[r,s,A,i]}(e);return[r,A,r,t,n,t,n,A,r,A]}class My extends ae{indexToBounds(){const{data:e,getGeohash:t}=this.props;return{data:e,_normalize:!1,positionFormat:"XY",getPolygon:(e,n)=>_y(t(e,n))}}}My.layerName="GeohashLayer",My.defaultProps={getGeohash:{type:"accessor",value:e=>e.geohash}},exports.A5Layer=ns,exports.GeohashLayer=My,exports.GreatCircleLayer=Sa,exports.H3ClusterLayer=Ec,exports.H3HexagonLayer=Tc,exports.MVTLayer=my,exports.QuadkeyLayer=qa,exports.S2Layer=Ja,exports.TerrainLayer=zb,exports.Tile3DLayer=kb,exports.TileLayer=vc,exports.TripsLayer=Mc,exports._GeoCellLayer=ae,exports._Tile2DHeader=Ya,exports._Tileset2D=gc,exports._WMSLayer=xa,exports._getURLFromTemplate=nc;
|
|
27
|
-
//# sourceMappingURL=index-
|
|
27
|
+
//# sourceMappingURL=index-DAac9HVL.cjs.map
|