From a3d4ad3922d11712d9e5ff87cb824e1bd8fcebc2 Mon Sep 17 00:00:00 2001 From: zeefaad Date: Mon, 29 Dec 2025 13:49:27 +0100 Subject: [PATCH] glsl folder --- Makefile | 2 +- michelson.frag => glsl/michelson.frag | 0 michelson_web.frag => glsl/michelson_web.frag | 0 main.c | 5 +- web/index.data | 71 ++++++++++++++++++ web/index.html | 1 + web/index.js | 1 + web/index.wasm | Bin 0 -> 129811 bytes 8 files changed, 77 insertions(+), 3 deletions(-) rename michelson.frag => glsl/michelson.frag (100%) rename michelson_web.frag => glsl/michelson_web.frag (100%) create mode 100644 web/index.data create mode 100644 web/index.html create mode 100644 web/index.js create mode 100755 web/index.wasm diff --git a/Makefile b/Makefile index d913364..6602f3f 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ run: ./michelson web: main.c - mkdir -p web && emcc -o web/index.html main.c -Os -Wall -std=c99 -DPLATFORM_WEB -s USE_GLFW=3 -s ALLOW_MEMORY_GROWTH=1 -I. --shell-file minshell.html --preload-file michelson_web.frag libraylib.web.a + mkdir -p web && emcc -o web/index.html main.c -Os -Wall -std=c99 -DPLATFORM_WEB -s USE_GLFW=3 -s ALLOW_MEMORY_GROWTH=1 -I. --shell-file minshell.html --preload-file glsl/michelson_web.frag libraylib.web.a webrun: cd web && python -m http.server 8000 && cd .. diff --git a/michelson.frag b/glsl/michelson.frag similarity index 100% rename from michelson.frag rename to glsl/michelson.frag diff --git a/michelson_web.frag b/glsl/michelson_web.frag similarity index 100% rename from michelson_web.frag rename to glsl/michelson_web.frag diff --git a/main.c b/main.c index a89af25..8110441 100644 --- a/main.c +++ b/main.c @@ -487,9 +487,9 @@ int main () { SetTargetFPS(144); #if defined(PLATFORM_WEB) - shader = LoadShader(0, "michelson_web.frag"); + shader = LoadShader(0, "glsl/michelson_web.frag"); #else - shader = LoadShader(0, "michelson.frag"); + shader = LoadShader(0, "glsl/michelson.frag"); #endif mic.center = (Vector2){ UI_WIDTH + (1920 - UI_WIDTH) / 2.0f - 100, 1080 / 2.0f }; @@ -517,3 +517,4 @@ int main () { CloseWindow(); return 0; } + diff --git a/web/index.data b/web/index.data new file mode 100644 index 0000000..f171a89 --- /dev/null +++ b/web/index.data @@ -0,0 +1,71 @@ +#version 100 + +precision highp float; + +varying vec2 fragTexCoord; +varying vec4 fragColor; + +uniform vec2 center; +uniform float screenHeight; +uniform float d1; +uniform float d2; +uniform float angleM1; +uniform float angleM1_Y; +uniform float zoom; + +uniform float lambdas[10]; +uniform int lambdasCount; + +const float PI = 3.14159265359; + +vec3 WavelengthToRGB(float l) { + float r = 0.0; float g = 0.0; float b = 0.0; + if (l >= 380.0 && l < 440.0) { r = -(l - 440.0) / (440.0 - 380.0); b = 1.0; } + else if (l >= 440.0 && l < 490.0) { g = (l - 440.0) / (490.0 - 440.0); b = 1.0; } + else if (l >= 490.0 && l < 510.0) { g = 1.0; b = -(l - 510.0) / (510.0 - 490.0); } + else if (l >= 510.0 && l < 580.0) { r = (l - 510.0) / (580.0 - 510.0); g = 1.0; } + else if (l >= 580.0 && l < 645.0) { r = 1.0; g = -(l - 645.0) / (645.0 - 580.0); } + else if (l >= 645.0 && l <= 780.0) { r = 1.0; } + + float factor = 1.0; + if (l >= 380.0 && l < 420.0) factor = 0.3 + 0.7 * (l - 380.0) / (420.0 - 380.0); + else if (l >= 380.0 && l <= 645.0) factor = 1.0; + else if (l > 700.0 && l <= 780.0) factor = 0.3 + 0.7 * (780.0 - l) / (780.0 - 700.0); + + return vec3(r * factor, g * factor, b * factor); +} + +void main() { + float pixelX = gl_FragCoord.x; + float pixelY = screenHeight - gl_FragCoord.y; + + float deltaLnm = 2.0 * (d1 - d2) * 1000.0; + + float relX = (pixelX - center.x) * zoom; + float relY = (pixelY - center.y) * zoom; + + float radiusSq = relX * relX + relY * relY; + float ringFactorBase = radiusSq * 0.065; + float wDelta = (relX * angleM1 + relY * angleM1_Y) * 200.0; + float currDeltaBase = deltaLnm + wDelta; + + vec3 accumColor = vec3(0.0); + + for(int i = 0; i < 10; i++) { + if (i >= lambdasCount) break; + + float l = lambdas[i]; + + if (l < 1.0) l = 550.0; + + vec3 baseColorVec = WavelengthToRGB(l); + float currDelta = currDeltaBase - ringFactorBase; + float K = PI / l; + float phase = currDelta * K; + float intensity = cos(phase); + intensity = intensity * intensity; + accumColor += baseColorVec * intensity; + } + + gl_FragColor = vec4(accumColor, 1.0); +} diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..4fc865f --- /dev/null +++ b/web/index.html @@ -0,0 +1 @@ +Interferometre Michelson - Web \ No newline at end of file diff --git a/web/index.js b/web/index.js new file mode 100644 index 0000000..9ae1dc6 --- /dev/null +++ b/web/index.js @@ -0,0 +1 @@ +var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";if(!Module["expectedDataFileDownloads"])Module["expectedDataFileDownloads"]=0;Module["expectedDataFileDownloads"]++;(()=>{var isPthread=typeof ENVIRONMENT_IS_PTHREAD!="undefined"&&ENVIRONMENT_IS_PTHREAD;var isWasmWorker=typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER;if(isPthread||isWasmWorker)return;var isNode=globalThis.process&&globalThis.process.versions&&globalThis.process.versions.node&&globalThis.process.type!="renderer";async function loadPackage(metadata){var PACKAGE_PATH="";if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/")}else if(typeof process==="undefined"&&typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/")}var PACKAGE_NAME="web/index.data";var REMOTE_PACKAGE_BASE="index.data";var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];async function fetchRemotePackage(packageName,packageSize){if(isNode){var contents=require("fs").readFileSync(packageName);return new Uint8Array(contents).buffer}if(!Module["dataFileDownloads"])Module["dataFileDownloads"]={};try{var response=await fetch(packageName)}catch(e){throw new Error(`Network Error: ${packageName}`,{e})}if(!response.ok){throw new Error(`${response.status}: ${response.url}`)}const chunks=[];const headers=response.headers;const total=Number(headers.get("Content-Length")||packageSize);let loaded=0;Module["setStatus"]&&Module["setStatus"]("Downloading data...");const reader=response.body.getReader();while(1){var{done,value}=await reader.read();if(done)break;chunks.push(value);loaded+=value.length;Module["dataFileDownloads"][packageName]={loaded,total};let totalLoaded=0;let totalSize=0;for(const download of Object.values(Module["dataFileDownloads"])){totalLoaded+=download.loaded;totalSize+=download.total}Module["setStatus"]&&Module["setStatus"](`Downloading data... (${totalLoaded}/${totalSize})`)}const packageData=new Uint8Array(chunks.map(c=>c.length).reduce((a,b)=>a+b,0));let offset=0;for(const chunk of chunks){packageData.set(chunk,offset);offset+=chunk.length}return packageData.buffer}var fetchPromise;var fetched=Module["getPreloadedPackage"]&&Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE);if(!fetched){fetchPromise=fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE)}async function runWithFS(Module){function assert(check,msg){if(!check)throw new Error(msg)}Module["FS_createPath"]("/","glsl",true,true);for(var file of metadata["files"]){var name=file["filename"];Module["addRunDependency"](`fp ${name}`)}async function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer.constructor.name===ArrayBuffer.name,"bad input to processPackageData "+arrayBuffer.constructor.name);var byteArray=new Uint8Array(arrayBuffer);for(var file of metadata["files"]){var name=file["filename"];var data=byteArray.subarray(file["start"],file["end"]);Module["FS_createDataFile"](name,null,data,true,true,true);Module["removeRunDependency"](`fp ${name}`)}Module["removeRunDependency"]("datafile_web/index.data")}Module["addRunDependency"]("datafile_web/index.data");if(!Module["preloadResults"])Module["preloadResults"]={};Module["preloadResults"][PACKAGE_NAME]={fromCache:false};if(!fetched){fetched=await fetchPromise}processPackageData(fetched)}if(Module["calledRun"]){runWithFS(Module)}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}}loadPackage({files:[{filename:"/glsl/michelson_web.frag",start:0,end:2186}],remote_package_size:2186})})();var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=globalThis.document?.currentScript?.src;if(typeof __filename!="undefined"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["ve"]();FS.ignorePermissions=false}function preMain(){}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile("index.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={a:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var noExitRuntime=true;var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(globalThis.window?.prompt){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var preloadPlugins=[];var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);for(var[hash,current]of Object.entries(FS.nameTable)){while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}}node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){abort(`Invalid encoding type "${opts.encoding}"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){data=new Uint8Array(intArrayFromString(data,true))}if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{abort("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)abort("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)abort("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))abort("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")abort("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};for(const[key,fn]of Object.entries(node.stream_ops)){stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}}function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAPU32[buf>>2]=stat.dev;HEAPU32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAPU32[buf+12>>2]=stat.uid;HEAPU32[buf+16>>2]=stat.gid;HEAPU32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAPU32[buf+4>>2]=stats.bsize;HEAPU32[buf+60>>2]=stats.bsize;HEAP64[buf+8>>3]=BigInt(stats.blocks);HEAP64[buf+16>>3]=BigInt(stats.bfree);HEAP64[buf+24>>3]=BigInt(stats.bavail);HEAP64[buf+32>>3]=BigInt(stats.files);HEAP64[buf+40>>3]=BigInt(stats.ffree);HEAPU32[buf+48>>2]=stats.fsid;HEAPU32[buf+64>>2]=stats.flags;HEAPU32[buf+56>>2]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var syscallGetVarargI=()=>{var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21537:case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==106?HEAP64[buf>>3]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_double=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var maybeCStringToJsString=cString=>cString>2?UTF8ToString(cString):cString;var specialHTMLTargets=[0,globalThis.document??0,globalThis.window??0];var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||globalThis.document?.querySelector(target);return domElement};var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{left:0,top:0};var _emscripten_get_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0};var JSEvents={removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},inEventHandler:0,deferredCalls:[],deferCall(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var call of JSEvents.deferredCalls){if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction,precedence,argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedencecall.targetFunction!=targetFunction)},canPerformEventHandlerRequests(){if(navigator.userActivation){return navigator.userActivation.isActive}return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls(){if(!JSEvents.canPerformEventHandlerRequests()){return}var deferredCalls=JSEvents.deferredCalls;JSEvents.deferredCalls=[];for(var call of deferredCalls){call.targetFunction(...call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:(target,eventTypeString)=>{for(var i=0;i{HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1112,64);stringToUTF8(e.mapping,eventStruct+1176,64)};var _emscripten_get_gamepad_status=(index,gamepadState)=>{if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0};var _emscripten_get_num_gamepads=()=>JSEvents.lastGamepadState.length;var GLctx;var webgl_enable_ANGLE_instanced_arrays=ctx=>{var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=(index,divisor)=>ext["vertexAttribDivisorANGLE"](index,divisor);ctx["drawArraysInstanced"]=(mode,first,count,primcount)=>ext["drawArraysInstancedANGLE"](mode,first,count,primcount);ctx["drawElementsInstanced"]=(mode,count,type,indices,primcount)=>ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount);return 1}};var webgl_enable_OES_vertex_array_object=ctx=>{var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=()=>ext["createVertexArrayOES"]();ctx["deleteVertexArray"]=vao=>ext["deleteVertexArrayOES"](vao);ctx["bindVertexArray"]=vao=>ext["bindVertexArrayOES"](vao);ctx["isVertexArray"]=vao=>ext["isVertexArrayOES"](vao);return 1}};var webgl_enable_WEBGL_draw_buffers=ctx=>{var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=(n,bufs)=>ext["drawBuffersWEBGL"](n,bufs);return 1}};var webgl_enable_EXT_polygon_offset_clamp=ctx=>!!(ctx.extPolygonOffsetClamp=ctx.getExtension("EXT_polygon_offset_clamp"));var webgl_enable_EXT_clip_control=ctx=>!!(ctx.extClipControl=ctx.getExtension("EXT_clip_control"));var webgl_enable_WEBGL_polygon_mode=ctx=>!!(ctx.webglPolygonMode=ctx.getExtension("WEBGL_polygon_mode"));var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"));var getEmscriptenSupportedExtensions=ctx=>{var supportedExtensions=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_disjoint_timer_query","EXT_frag_depth","EXT_shader_texture_lod","EXT_sRGB","OES_element_index_uint","OES_fbo_render_mipmap","OES_standard_derivatives","OES_texture_float","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_depth_texture","WEBGL_draw_buffers","EXT_clip_control","EXT_color_buffer_half_float","EXT_depth_clamp","EXT_float_blend","EXT_polygon_offset_clamp","EXT_texture_compression_bptc","EXT_texture_compression_rgtc","EXT_texture_filter_anisotropic","KHR_parallel_shader_compile","OES_texture_float_linear","WEBGL_blend_func_extended","WEBGL_compressed_texture_astc","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_debug_renderer_info","WEBGL_debug_shaders","WEBGL_lose_context","WEBGL_multi_draw","WEBGL_polygon_mode"];return(ctx.getSupportedExtensions()||[]).filter(ext=>supportedExtensions.includes(ext))};var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,unpackRowLength:0,recordError:errorCode=>{if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i{for(var i=0;i>2]=id}},getSource:(shader,count,string,length)=>{var source="";for(var i=0;i>2]:undefined;source+=UTF8ToString(HEAPU32[string+i*4>>2],len)}return source},createContext:(canvas,webGLContextAttributes)=>{if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=GL.getNewId(GL.contexts);var context={handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:contextHandle=>{GL.currentContext=GL.contexts[contextHandle];Module["ctx"]=GLctx=GL.currentContext?.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext:contextHandle=>{if(GL.currentContext===GL.contexts[contextHandle]){GL.currentContext=null}if(typeof JSEvents=="object"){JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas)}if(GL.contexts[contextHandle]?.GLctx.canvas){GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined}GL.contexts[contextHandle]=null},initExtensions:context=>{context||=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_multi_draw(GLctx);webgl_enable_EXT_polygon_offset_clamp(GLctx);webgl_enable_EXT_clip_control(GLctx);webgl_enable_WEBGL_polygon_mode(GLctx);webgl_enable_ANGLE_instanced_arrays(GLctx);webgl_enable_OES_vertex_array_object(GLctx);webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}for(var ext of getEmscriptenSupportedExtensions(GLctx)){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}}}};var _emscripten_glActiveTexture=x0=>GLctx.activeTexture(x0);var _emscripten_glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glBeginQueryEXT=(target,id)=>{GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])};var _emscripten_glBindAttribLocation=(program,index,name)=>{GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))};var _emscripten_glBindBuffer=(target,buffer)=>{GLctx.bindBuffer(target,GL.buffers[buffer])};var _emscripten_glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};var _emscripten_glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};var _emscripten_glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};var _emscripten_glBindVertexArray=vao=>{GLctx.bindVertexArray(GL.vaos[vao])};var _glBindVertexArray=_emscripten_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBlendColor=(x0,x1,x2,x3)=>GLctx.blendColor(x0,x1,x2,x3);var _emscripten_glBlendEquation=x0=>GLctx.blendEquation(x0);var _emscripten_glBlendEquationSeparate=(x0,x1)=>GLctx.blendEquationSeparate(x0,x1);var _emscripten_glBlendFunc=(x0,x1)=>GLctx.blendFunc(x0,x1);var _emscripten_glBlendFuncSeparate=(x0,x1,x2,x3)=>GLctx.blendFuncSeparate(x0,x1,x2,x3);var _emscripten_glBufferData=(target,size,data,usage)=>{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)};var _emscripten_glBufferSubData=(target,offset,size,data)=>{GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))};var _emscripten_glCheckFramebufferStatus=x0=>GLctx.checkFramebufferStatus(x0);var _emscripten_glClear=x0=>GLctx.clear(x0);var _emscripten_glClearColor=(x0,x1,x2,x3)=>GLctx.clearColor(x0,x1,x2,x3);var _emscripten_glClearDepthf=x0=>GLctx.clearDepth(x0);var _emscripten_glClearStencil=x0=>GLctx.clearStencil(x0);var _emscripten_glClipControlEXT=(origin,depth)=>{GLctx.extClipControl["clipControlEXT"](origin,depth)};var _emscripten_glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};var _emscripten_glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};var _emscripten_glCompressedTexImage2D=(target,level,internalFormat,width,height,border,imageSize,data)=>{GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,HEAPU8.subarray(data,data+imageSize))};var _emscripten_glCompressedTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,imageSize,data)=>{GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,HEAPU8.subarray(data,data+imageSize))};var _emscripten_glCopyTexImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexSubImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};var _emscripten_glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};var _emscripten_glCullFace=x0=>GLctx.cullFace(x0);var _emscripten_glDeleteBuffers=(n,buffers)=>{for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}};var _emscripten_glDeleteFramebuffers=(n,framebuffers)=>{for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}};var _emscripten_glDeleteProgram=id=>{if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null};var _emscripten_glDeleteQueriesEXT=(n,ids)=>{for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}};var _emscripten_glDeleteRenderbuffers=(n,renderbuffers)=>{for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}};var _emscripten_glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};var _emscripten_glDeleteTextures=(n,textures)=>{for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}};var _emscripten_glDeleteVertexArrays=(n,vaos)=>{for(var i=0;i>2];GLctx.deleteVertexArray(GL.vaos[id]);GL.vaos[id]=null}};var _glDeleteVertexArrays=_emscripten_glDeleteVertexArrays;var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArrays;var _emscripten_glDepthFunc=x0=>GLctx.depthFunc(x0);var _emscripten_glDepthMask=flag=>{GLctx.depthMask(!!flag)};var _emscripten_glDepthRangef=(x0,x1)=>GLctx.depthRange(x0,x1);var _emscripten_glDetachShader=(program,shader)=>{GLctx.detachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glDisable=x0=>GLctx.disable(x0);var _emscripten_glDisableVertexAttribArray=index=>{GLctx.disableVertexAttribArray(index)};var _emscripten_glDrawArrays=(mode,first,count)=>{GLctx.drawArrays(mode,first,count)};var _emscripten_glDrawArraysInstanced=(mode,first,count,primcount)=>{GLctx.drawArraysInstanced(mode,first,count,primcount)};var _glDrawArraysInstanced=_emscripten_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var tempFixedLengthArray=[];var _emscripten_glDrawBuffers=(n,bufs)=>{var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx.drawBuffers(bufArray)};var _glDrawBuffers=_emscripten_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffers;var _emscripten_glDrawElements=(mode,count,type,indices)=>{GLctx.drawElements(mode,count,type,indices)};var _emscripten_glDrawElementsInstanced=(mode,count,type,indices,primcount)=>{GLctx.drawElementsInstanced(mode,count,type,indices,primcount)};var _glDrawElementsInstanced=_emscripten_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _emscripten_glEnable=x0=>GLctx.enable(x0);var _emscripten_glEnableVertexAttribArray=index=>{GLctx.enableVertexAttribArray(index)};var _emscripten_glEndQueryEXT=target=>{GLctx.disjointTimerQueryExt["endQueryEXT"](target)};var _emscripten_glFinish=()=>GLctx.finish();var _emscripten_glFlush=()=>GLctx.flush();var _emscripten_glFramebufferRenderbuffer=(target,attachment,renderbuffertarget,renderbuffer)=>{GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])};var _emscripten_glFramebufferTexture2D=(target,attachment,textarget,texture,level)=>{GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)};var _emscripten_glFrontFace=x0=>GLctx.frontFace(x0);var _emscripten_glGenBuffers=(n,buffers)=>{GL.genObject(n,buffers,"createBuffer",GL.buffers)};var _emscripten_glGenFramebuffers=(n,ids)=>{GL.genObject(n,ids,"createFramebuffer",GL.framebuffers)};var _emscripten_glGenQueriesEXT=(n,ids)=>{for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}};var _emscripten_glGenRenderbuffers=(n,renderbuffers)=>{GL.genObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)};var _emscripten_glGenTextures=(n,textures)=>{GL.genObject(n,textures,"createTexture",GL.textures)};var _emscripten_glGenVertexArrays=(n,arrays)=>{GL.genObject(n,arrays,"createVertexArray",GL.vaos)};var _glGenVertexArrays=_emscripten_glGenVertexArrays;var _emscripten_glGenVertexArraysOES=_glGenVertexArrays;var _emscripten_glGenerateMipmap=x0=>GLctx.generateMipmap(x0);var __glGetActiveAttribOrUniform=(funcName,program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}};var _emscripten_glGetActiveAttrib=(program,index,bufSize,length,size,type,name)=>__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name);var _emscripten_glGetActiveUniform=(program,index,bufSize,length,size,type,name)=>__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name);var _emscripten_glGetAttachedShaders=(program,maxCount,count,shaders)=>{var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}};var _emscripten_glGetAttribLocation=(program,name)=>GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>2]=num;var lower=HEAPU32[ptr>>2];HEAPU32[ptr+4>>2]=(num-lower)/4294967296};var emscriptenWebGLGet=(name_,p,type)=>{if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Unknown object returned from WebGL getParameter(${name_})! (error: ${e})`);return}}break;default:GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Native code calling glGet${type}v(${name_}) and it returns ${result} of type ${typeof result}!`);return}}switch(type){case 1:writeI53ToI64(p,ret);break;case 0:HEAP32[p>>2]=ret;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p]=ret?1:0;break}};var _emscripten_glGetBooleanv=(name_,p)=>emscriptenWebGLGet(name_,p,4);var _emscripten_glGetBufferParameteriv=(target,value,data)=>{if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)};var _emscripten_glGetError=()=>{var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error};var _emscripten_glGetFloatv=(name_,p)=>emscriptenWebGLGet(name_,p,2);var _emscripten_glGetFramebufferAttachmentParameteriv=(target,attachment,pname,params)=>{var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result};var _emscripten_glGetIntegerv=(name_,p)=>emscriptenWebGLGet(name_,p,0);var _emscripten_glGetProgramInfoLog=(program,maxLength,length,infoLog)=>{var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetProgramiv=(program,pname,p)=>{if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(var i=0;i>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){var numActiveAttributes=GLctx.getProgramParameter(program,35721);for(var i=0;i>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){var numActiveUniformBlocks=GLctx.getProgramParameter(program,35382);for(var i=0;i>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}};var _emscripten_glGetQueryObjecti64vEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)};var _emscripten_glGetQueryObjectivEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret};var _glGetQueryObjecti64vEXT=_emscripten_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;var _glGetQueryObjectivEXT=_emscripten_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;var _emscripten_glGetQueryivEXT=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)};var _emscripten_glGetRenderbufferParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)};var _emscripten_glGetShaderInfoLog=(shader,maxLength,length,infoLog)=>{var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderPrecisionFormat=(shaderType,precisionType,range,precision)=>{var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision};var _emscripten_glGetShaderSource=(shader,bufSize,length,source)=>{var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderiv=(shader,pname,p)=>{if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}};var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var webglGetExtensions=()=>{var exts=getEmscriptenSupportedExtensions(GLctx);exts=exts.concat(exts.map(e=>"GL_"+e));return exts};var _emscripten_glGetString=name_=>{var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:ret=stringToNewUTF8(webglGetExtensions().join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s?stringToNewUTF8(s):0;break;case 7938:var webGLVersion=GLctx.getParameter(7938);var glVersion=`OpenGL ES 2.0 (${webGLVersion})`;ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion=`OpenGL ES GLSL ES ${ver_num[1]} (${glslVersion})`}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret};var _emscripten_glGetTexParameterfv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)};var jstoi_q=str=>parseInt(str);var webglGetLeftBracePos=name=>name.slice(-1)=="]"&&name.lastIndexOf("[");var webglPrepareUniformLocationsBeforeFirstUse=program=>{var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j{name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex{var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?`[${webglLoc}]`:""))}return webglLoc}else{GL.recordError(1282)}};var emscriptenWebGLGetUniform=(program,location,params,type)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}};var _emscripten_glGetUniformfv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,2)};var _emscripten_glGetUniformiv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,0)};var _emscripten_glGetVertexAttribPointerv=(index,pname,pointer)=>{if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)};var emscriptenWebGLGetVertexAttrib=(index,pname,params,type)=>{if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}};var _emscripten_glGetVertexAttribfv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,2)};var _emscripten_glGetVertexAttribiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,5)};var _emscripten_glHint=(x0,x1)=>GLctx.hint(x0,x1);var _emscripten_glIsBuffer=buffer=>{var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)};var _emscripten_glIsEnabled=x0=>GLctx.isEnabled(x0);var _emscripten_glIsFramebuffer=framebuffer=>{var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)};var _emscripten_glIsProgram=program=>{program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)};var _emscripten_glIsQueryEXT=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)};var _emscripten_glIsRenderbuffer=renderbuffer=>{var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)};var _emscripten_glIsShader=shader=>{var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)};var _emscripten_glIsTexture=id=>{var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)};var _emscripten_glIsVertexArray=array=>{var vao=GL.vaos[array];if(!vao)return 0;return GLctx.isVertexArray(vao)};var _glIsVertexArray=_emscripten_glIsVertexArray;var _emscripten_glIsVertexArrayOES=_glIsVertexArray;var _emscripten_glLineWidth=x0=>GLctx.lineWidth(x0);var _emscripten_glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};var _emscripten_glPixelStorei=(pname,param)=>{if(pname==3317){GL.unpackAlignment=param}else if(pname==3314){GL.unpackRowLength=param}GLctx.pixelStorei(pname,param)};var _emscripten_glPolygonModeWEBGL=(face,mode)=>{GLctx.webglPolygonMode["polygonModeWEBGL"](face,mode)};var _emscripten_glPolygonOffset=(x0,x1)=>GLctx.polygonOffset(x0,x1);var _emscripten_glPolygonOffsetClampEXT=(factor,units,clamp)=>{GLctx.extPolygonOffsetClamp["polygonOffsetClampEXT"](factor,units,clamp)};var _emscripten_glQueryCounterEXT=(id,target)=>{GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)};var computeUnpackAlignedImageSize=(width,height,sizePerPixel)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=(GL.unpackRowLength||width)*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,GL.unpackAlignment);return height*alignedRowSize};var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1};var heapObjectForWebGLType=type=>{type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16};var toTypedArrayIndex=(pointer,heap)=>pointer>>>31-Math.clz32(heap.BYTES_PER_ELEMENT);var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels,internalFormat)=>{var heap=heapObjectForWebGLType(type);var sizePerPixel=colorChannelsInGlTextureFormat(format)*heap.BYTES_PER_ELEMENT;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel);return heap.subarray(toTypedArrayIndex(pixels,heap),toTypedArrayIndex(pixels+bytes,heap))};var _emscripten_glReadPixels=(x,y,width,height,format,type,pixels)=>{var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)};var _emscripten_glReleaseShaderCompiler=()=>{};var _emscripten_glRenderbufferStorage=(x0,x1,x2,x3)=>GLctx.renderbufferStorage(x0,x1,x2,x3);var _emscripten_glSampleCoverage=(value,invert)=>{GLctx.sampleCoverage(value,!!invert)};var _emscripten_glScissor=(x0,x1,x2,x3)=>GLctx.scissor(x0,x1,x2,x3);var _emscripten_glShaderBinary=(count,shaders,binaryformat,binary,length)=>{GL.recordError(1280)};var _emscripten_glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)};var _emscripten_glStencilFunc=(x0,x1,x2)=>GLctx.stencilFunc(x0,x1,x2);var _emscripten_glStencilFuncSeparate=(x0,x1,x2,x3)=>GLctx.stencilFuncSeparate(x0,x1,x2,x3);var _emscripten_glStencilMask=x0=>GLctx.stencilMask(x0);var _emscripten_glStencilMaskSeparate=(x0,x1)=>GLctx.stencilMaskSeparate(x0,x1);var _emscripten_glStencilOp=(x0,x1,x2)=>GLctx.stencilOp(x0,x1,x2);var _emscripten_glStencilOpSeparate=(x0,x1,x2,x3)=>GLctx.stencilOpSeparate(x0,x1,x2,x3);var _emscripten_glTexImage2D=(target,level,internalFormat,width,height,border,format,type,pixels)=>{var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null;GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixelData)};var _emscripten_glTexParameterf=(x0,x1,x2)=>GLctx.texParameterf(x0,x1,x2);var _emscripten_glTexParameterfv=(target,pname,params)=>{var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)};var _emscripten_glTexParameteri=(x0,x1,x2)=>GLctx.texParameteri(x0,x1,x2);var _emscripten_glTexParameteriv=(target,pname,params)=>{var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)};var _emscripten_glTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,type,pixels)=>{var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0):null;GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)};var _emscripten_glUniform1f=(location,v0)=>{GLctx.uniform1f(webglGetUniformLocation(location),v0)};var miniTempWebGLFloatBuffers=[];var _emscripten_glUniform1fv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1i=(location,v0)=>{GLctx.uniform1i(webglGetUniformLocation(location),v0)};var miniTempWebGLIntBuffers=[];var _emscripten_glUniform1iv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2f=(location,v0,v1)=>{GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2fv=(location,count,value)=>{if(count<=144){count*=2;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2i=(location,v0,v1)=>{GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2iv=(location,count,value)=>{if(count<=144){count*=2;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3f=(location,v0,v1,v2)=>{GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3fv=(location,count,value)=>{if(count<=96){count*=3;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3i=(location,v0,v1,v2)=>{GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3iv=(location,count,value)=>{if(count<=96){count*=3;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4f=(location,v0,v1,v2,v3)=>{GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4fv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count];var heap=HEAPF32;value=value>>2;count*=4;for(var i=0;i>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4i=(location,v0,v1,v2,v3)=>{GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4iv=(location,count,value)=>{if(count<=72){count*=4;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(webglGetUniformLocation(location),view)};var _emscripten_glUniformMatrix2fv=(location,count,transpose,value)=>{if(count<=72){count*=4;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix3fv=(location,count,transpose,value)=>{if(count<=32){count*=9;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix4fv=(location,count,transpose,value)=>{if(count<=18){var view=miniTempWebGLFloatBuffers[16*count];var heap=HEAPF32;value=value>>2;count*=16;for(var i=0;i>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};var _emscripten_glValidateProgram=program=>{GLctx.validateProgram(GL.programs[program])};var _emscripten_glVertexAttrib1f=(x0,x1)=>GLctx.vertexAttrib1f(x0,x1);var _emscripten_glVertexAttrib1fv=(index,v)=>{GLctx.vertexAttrib1f(index,HEAPF32[v>>2])};var _emscripten_glVertexAttrib2f=(x0,x1,x2)=>GLctx.vertexAttrib2f(x0,x1,x2);var _emscripten_glVertexAttrib2fv=(index,v)=>{GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])};var _emscripten_glVertexAttrib3f=(x0,x1,x2,x3)=>GLctx.vertexAttrib3f(x0,x1,x2,x3);var _emscripten_glVertexAttrib3fv=(index,v)=>{GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])};var _emscripten_glVertexAttrib4f=(x0,x1,x2,x3,x4)=>GLctx.vertexAttrib4f(x0,x1,x2,x3,x4);var _emscripten_glVertexAttrib4fv=(index,v)=>{GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])};var _emscripten_glVertexAttribDivisor=(index,divisor)=>{GLctx.vertexAttribDivisor(index,divisor)};var _glVertexAttribDivisor=_emscripten_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexAttribPointer=(index,size,type,normalized,stride,ptr)=>{GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)};var _emscripten_glViewport=(x0,x1,x2,x3)=>GLctx.viewport(x0,x1,x2,x3);var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var _emscripten_sample_gamepad_data=()=>{try{if(navigator.getGamepads)return(JSEvents.lastGamepadState=navigator.getGamepads())?0:-1}catch(e){navigator.getGamepads=null}return-1};var getWasmTableEntry=funcPtr=>wasmTable.get(funcPtr);var registerFocusEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=256;JSEvents.focusEvent||=_malloc(eventSize);var focusEventHandlerFunc=e=>{var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_blur_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);var findCanvasEventTarget=findEventTarget;var _emscripten_set_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0};var fillMouseEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP8[eventStruct+24]=e.ctrlKey;HEAP8[eventStruct+25]=e.shiftKey;HEAP8[eventStruct+26]=e.altKey;HEAP8[eventStruct+27]=e.metaKey;HEAP16[idx*2+14]=e.button;HEAP16[idx*2+15]=e.buttons;HEAP32[idx+8]=e["movementX"];HEAP32[idx+9]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+10]=e.clientX-(rect.left|0);HEAP32[idx+11]=e.clientY-(rect.top|0)};var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=64;JSEvents.mouseEvent||=_malloc(eventSize);target=findEventTarget(target);var mouseEventHandlerFunc=e=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_click_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);var _emscripten_set_focus_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);function getFullscreenElement(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement||document.msFullscreenElement}var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=getFullscreenElement();var isFullscreen=!!fullscreenElement;HEAP8[eventStruct]=isFullscreen;HEAP8[eventStruct+1]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement?.id||"";stringToUTF8(nodeName,eventStruct+2,128);stringToUTF8(id,eventStruct+130,128);HEAP32[eventStruct+260>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+268>>2]=screen.width;HEAP32[eventStruct+272>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=276;JSEvents.fullscreenChangeEvent||=_malloc(eventSize);var fullscreenChangeEventhandlerFunc=e=>{var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_fullscreenchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread)};var registerGamepadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=1240;JSEvents.gamepadEvent||=_malloc(eventSize);var gamepadEventHandlerFunc=e=>{var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_gamepadconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread)};var _emscripten_set_gamepaddisconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread)};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var _emscripten_set_main_loop_timing=(mode,value)=>{MainLoop.timingMode=mode;MainLoop.timingValue=value;if(!MainLoop.func){return 1}if(!MainLoop.running){MainLoop.running=true}if(mode==0){MainLoop.scheduler=function MainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,MainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(MainLoop.runner,timeUntilNextTick)};MainLoop.method="timeout"}else if(mode==1){MainLoop.scheduler=function MainLoop_scheduler_rAF(){MainLoop.requestAnimationFrame(MainLoop.runner)};MainLoop.method="rAF"}else if(mode==2){if(!MainLoop.setImmediate){if(globalThis.setImmediate){MainLoop.setImmediate=setImmediate}else{var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var MainLoop_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",MainLoop_setImmediate_messageHandler,true);MainLoop.setImmediate=func=>{setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){Module["setImmediates"]??=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}}MainLoop.scheduler=function MainLoop_scheduler_setImmediate(){MainLoop.setImmediate(MainLoop.runner)};MainLoop.method="immediate"}return 0};var MainLoop={running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],preMainLoop:[],postMainLoop:[],pause(){MainLoop.scheduler=null;MainLoop.currentlyRunningMainloop++},resume(){MainLoop.currentlyRunningMainloop++;var timingMode=MainLoop.timingMode;var timingValue=MainLoop.timingValue;var func=MainLoop.func;MainLoop.func=null;setMainLoop(func,0,false,MainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);MainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=MainLoop.remainingBlockers??0;var expected=MainLoop.expectedBlockers??0;if(remaining){if(remaining=MainLoop.nextRAF){MainLoop.nextRAF+=1e3/60}}var delay=Math.max(MainLoop.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(globalThis.requestAnimationFrame){requestAnimationFrame(func)}else{MainLoop.fakeRequestAnimationFrame(func)}}};var setMainLoop=(iterFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{MainLoop.func=iterFunc;MainLoop.arg=arg;var thisMainLoopId=MainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=MainLoop.queue.shift();blocker.func(blocker.arg);if(MainLoop.remainingBlockers){var remaining=MainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){MainLoop.remainingBlockers=next}else{next=next+.5;MainLoop.remainingBlockers=(8*remaining+next)/9}}MainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(MainLoop.runner,0);return}if(!checkIsRunning())return;MainLoop.currentFrameNumber=MainLoop.currentFrameNumber+1|0;if(MainLoop.timingMode==1&&MainLoop.timingValue>1&&MainLoop.currentFrameNumber%MainLoop.timingValue!=0){MainLoop.scheduler();return}else if(MainLoop.timingMode==0){MainLoop.tickStartTime=_emscripten_get_now()}MainLoop.runIter(iterFunc);if(!checkIsRunning())return;MainLoop.scheduler()};if(!noSetTiming){if(fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}MainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}};var _emscripten_set_main_loop=(func,fps,simulateInfiniteLoop)=>{var iterFunc=getWasmTableEntry(func);setMainLoop(iterFunc,fps,simulateInfiniteLoop)};var _emscripten_set_mousemove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);var fillPointerlockChangeEventData=eventStruct=>{var pointerLockElement=document.pointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP8[eventStruct]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement?.id||"";stringToUTF8(nodeName,eventStruct+1,128);stringToUTF8(id,eventStruct+129,128)};var registerPointerlockChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=257;JSEvents.pointerlockChangeEvent||=_malloc(eventSize);var pointerlockChangeEventHandlerFunc=e=>{var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_pointerlockchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!document.body?.requestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;return registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread)};var registerUiEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=36;JSEvents.uiEvent||=_malloc(eventSize);target=findEventTarget(target);var uiEventHandlerFunc=e=>{if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>2]=0;HEAP32[uiEvent+4>>2]=b.clientWidth;HEAP32[uiEvent+8>>2]=b.clientHeight;HEAP32[uiEvent+12>>2]=innerWidth;HEAP32[uiEvent+16>>2]=innerHeight;HEAP32[uiEvent+20>>2]=outerWidth;HEAP32[uiEvent+24>>2]=outerHeight;HEAP32[uiEvent+28>>2]=pageXOffset|0;HEAP32[uiEvent+32>>2]=pageYOffset|0;if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_resize_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread);var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=1552;JSEvents.touchEvent||=_malloc(eventSize);target=findEventTarget(target);var touchEventHandlerFunc=e=>{var t,touches={},et=e.touches;for(let t of et){t.isChanged=t.onTarget=0;touches[t.identifier]=t}for(let t of e.changedTouches){t.isChanged=1;touches[t.identifier]=t}for(let t of e.targetTouches){touches[t.identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;HEAPF64[touchEvent>>3]=e.timeStamp;HEAP8[touchEvent+12]=e.ctrlKey;HEAP8[touchEvent+13]=e.shiftKey;HEAP8[touchEvent+14]=e.altKey;HEAP8[touchEvent+15]=e.metaKey;var idx=touchEvent+16;var targetRect=getBoundingClientRect(target);var numTouches=0;for(let t of Object.values(touches)){var idx32=idx>>2;HEAP32[idx32+0]=t.identifier;HEAP32[idx32+1]=t.screenX;HEAP32[idx32+2]=t.screenY;HEAP32[idx32+3]=t.clientX;HEAP32[idx32+4]=t.clientY;HEAP32[idx32+5]=t.pageX;HEAP32[idx32+6]=t.pageY;HEAP8[idx+28]=t.isChanged;HEAP8[idx+29]=t.onTarget;HEAP32[idx32+8]=t.clientX-(targetRect.left|0);HEAP32[idx32+9]=t.clientY-(targetRect.top|0);idx+=48;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_touchcancel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);var _emscripten_set_touchend_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);var _emscripten_set_touchmove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);var _emscripten_set_touchstart_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);var fillVisibilityChangeEventData=eventStruct=>{var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP8[eventStruct]=document.hidden;HEAP32[eventStruct+4>>2]=visibilityState};var registerVisibilityChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=8;JSEvents.visibilityChangeEvent||=_malloc(eventSize);var visibilityChangeEventHandlerFunc=e=>{var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_visibilitychange_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(!specialHTMLTargets[1]){return-4}return registerVisibilityChangeEventCallback(specialHTMLTargets[1],userData,useCapture,callbackfunc,21,"visibilitychange",targetThread)};var safeSetTimeout=(func,timeout)=>setTimeout(()=>{callUserCallback(func)},timeout);var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var Browser={useWebGL:false,isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],preloadedImages:{},preloadedAudios:{},getCanvas:()=>Module["canvas"],init(){if(Browser.initted)return;Browser.initted=true;var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module["noImageDecoding"]&&/\.(jpg|jpeg|png|bmp|webp)$/i.test(name)};imagePlugin["handle"]=async function imagePlugin_handle(byteArray,name){var b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}var url=URL.createObjectURL(b);return new Promise((resolve,reject)=>{var img=new Image;img.onload=()=>{var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Browser.preloadedImages[name]=canvas;URL.revokeObjectURL(url);resolve(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);reject()};img.src=url})};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module["noAudioDecoding"]&&name.slice(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=async function audioPlugin_handle(byteArray,name){return new Promise((resolve,reject)=>{var done=false;function finish(audio){if(done)return;done=true;Browser.preloadedAudios[name]=audio;resolve(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.slice(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)})};preloadPlugins.push(audioPlugin);function pointerLockChange(){var canvas=Browser.getCanvas();Browser.pointerLock=document.pointerLockElement===canvas}var canvas=Browser.getCanvas();if(canvas){document.addEventListener("pointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Browser.getCanvas().requestPointerLock){Browser.getCanvas().requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module["ctx"]&&canvas==Browser.getCanvas())return Module["ctx"];var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){Module["ctx"]=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Browser.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Browser.getCanvas();function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if(getFullscreenElement()===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}Module["onFullScreen"]?.(Browser.isFullscreen);Module["onFullscreen"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},getMimetype(name){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[name.slice(name.lastIndexOf(".")+1)]},getUserMedia(func){window.getUserMedia||=navigator["getUserMedia"]||navigator["mozGetUserMedia"];window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:abort("unrecognized mouse wheel delta mode: "+event.deltaMode)}break;default:abort("unrecognized mouse wheel event: "+event.type)}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseCoords(pageX,pageY){var canvas=Browser.getCanvas();var rect=canvas.getBoundingClientRect();var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(canvas.width/rect.width);adjustedY=adjustedY*(canvas.height/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x,y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}else{if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Browser.getCanvas();Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Browser.getCanvas();Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Browser.getCanvas());Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Browser.getCanvas());Browser.updateResizeListeners()},updateCanvasDimensions(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]>0){if(w/hdocument.title=UTF8ToString(title);function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var _glActiveTexture=_emscripten_glActiveTexture;var _glAttachShader=_emscripten_glAttachShader;var _glBindAttribLocation=_emscripten_glBindAttribLocation;var _glBindBuffer=_emscripten_glBindBuffer;var _glBindTexture=_emscripten_glBindTexture;var _glBlendEquation=_emscripten_glBlendEquation;var _glBlendEquationSeparate=_emscripten_glBlendEquationSeparate;var _glBlendFunc=_emscripten_glBlendFunc;var _glBlendFuncSeparate=_emscripten_glBlendFuncSeparate;var _glBufferData=_emscripten_glBufferData;var _glBufferSubData=_emscripten_glBufferSubData;var _glClear=_emscripten_glClear;var _glClearColor=_emscripten_glClearColor;var _glClearDepthf=_emscripten_glClearDepthf;var _glCompileShader=_emscripten_glCompileShader;var _glCompressedTexImage2D=_emscripten_glCompressedTexImage2D;var _glCreateProgram=_emscripten_glCreateProgram;var _glCreateShader=_emscripten_glCreateShader;var _glCullFace=_emscripten_glCullFace;var _glDeleteBuffers=_emscripten_glDeleteBuffers;var _glDeleteProgram=_emscripten_glDeleteProgram;var _glDeleteShader=_emscripten_glDeleteShader;var _glDeleteTextures=_emscripten_glDeleteTextures;var _glDepthFunc=_emscripten_glDepthFunc;var _glDetachShader=_emscripten_glDetachShader;var _glDisable=_emscripten_glDisable;var _glDisableVertexAttribArray=_emscripten_glDisableVertexAttribArray;var _glDrawArrays=_emscripten_glDrawArrays;var _glDrawElements=_emscripten_glDrawElements;var _glEnable=_emscripten_glEnable;var _glEnableVertexAttribArray=_emscripten_glEnableVertexAttribArray;var _glFrontFace=_emscripten_glFrontFace;var _glGenBuffers=_emscripten_glGenBuffers;var _glGenTextures=_emscripten_glGenTextures;var _glGetAttribLocation=_emscripten_glGetAttribLocation;var _glGetFloatv=_emscripten_glGetFloatv;var _glGetProgramInfoLog=_emscripten_glGetProgramInfoLog;var _glGetProgramiv=_emscripten_glGetProgramiv;var _glGetShaderInfoLog=_emscripten_glGetShaderInfoLog;var _glGetShaderiv=_emscripten_glGetShaderiv;var _glGetString=_emscripten_glGetString;var _glGetUniformLocation=_emscripten_glGetUniformLocation;var _glLinkProgram=_emscripten_glLinkProgram;var _glPixelStorei=_emscripten_glPixelStorei;var _glReadPixels=_emscripten_glReadPixels;var _glShaderSource=_emscripten_glShaderSource;var _glTexImage2D=_emscripten_glTexImage2D;var _glTexParameteri=_emscripten_glTexParameteri;var _glUniform1fv=_emscripten_glUniform1fv;var _glUniform1i=_emscripten_glUniform1i;var _glUniform1iv=_emscripten_glUniform1iv;var _glUniform2fv=_emscripten_glUniform2fv;var _glUniform2iv=_emscripten_glUniform2iv;var _glUniform3fv=_emscripten_glUniform3fv;var _glUniform3iv=_emscripten_glUniform3iv;var _glUniform4f=_emscripten_glUniform4f;var _glUniform4fv=_emscripten_glUniform4fv;var _glUniform4iv=_emscripten_glUniform4iv;var _glUniformMatrix4fv=_emscripten_glUniformMatrix4fv;var _glUseProgram=_emscripten_glUseProgram;var _glVertexAttribPointer=_emscripten_glVertexAttribPointer;var _glViewport=_emscripten_glViewport;function GLFW_Window(id,width,height,framebufferWidth,framebufferHeight,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.framebufferWidth=framebufferWidth;this.framebufferHeight=framebufferHeight;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes={...GLFW.hints};this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=0;this.windowSizeFunc=0;this.windowCloseFunc=0;this.windowRefreshFunc=0;this.windowFocusFunc=0;this.windowIconifyFunc=0;this.windowMaximizeFunc=0;this.framebufferSizeFunc=0;this.windowContentScaleFunc=0;this.mouseButtonFunc=0;this.cursorPosFunc=0;this.cursorEnterFunc=0;this.scrollFunc=0;this.dropFunc=0;this.keyFunc=0;this.charFunc=0;this.userptr=0}var GLFW={WindowFromId:id=>{if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:0,errorFunc:0,monitorFunc:0,active:null,scale:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,devicePixelRatioMQL:null,hints:null,primaryTouchId:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,131082:0,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0,139276:0},DOMToGLFWKeyCode:keycode=>{switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 96;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 224:return 343;case 93:return 348;default:return-1}},getModBits:win=>{var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343]||win.keys[348])mod|=8;return mod},onKeyPress:event=>{if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;getWasmTableEntry(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:(keyCode,status)=>{if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(GLFW.active.keyFunc){if(repeat)status=2;getWasmTableEntry(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))}},onGamepadConnected:event=>{GLFW.refreshJoysticks()},onGamepadDisconnected:event=>{GLFW.refreshJoysticks()},onKeydown:event=>{GLFW.onKeyChanged(event.keyCode,1);if(event.key=="Backspace"||event.key=="Tab"){event.preventDefault()}},onKeyup:event=>{GLFW.onKeyChanged(event.keyCode,0)},onBlur:event=>{if(!GLFW.active)return;for(var i=0;i{if(!GLFW.active)return;if(event.type==="touchmove"){event.preventDefault();let primaryChanged=false;for(let i of event.changedTouches){if(GLFW.primaryTouchId===i.identifier){Browser.setMouseCoords(i.pageX,i.pageY);primaryChanged=true;break}}if(!primaryChanged){return}}else{Browser.calculateMouseEvent(event)}if(event.target!=Browser.getCanvas()||!GLFW.active.cursorPosFunc)return;if(GLFW.active.cursorPosFunc){getWasmTableEntry(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)}},DOMToGLFWMouseButton:event=>{var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:event=>{if(!GLFW.active)return;if(event.target!=Browser.getCanvas())return;if(GLFW.active.cursorEnterFunc){getWasmTableEntry(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)}},onMouseleave:event=>{if(!GLFW.active)return;if(event.target!=Browser.getCanvas())return;if(GLFW.active.cursorEnterFunc){getWasmTableEntry(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)}},onMouseButtonChanged:(event,status)=>{if(!GLFW.active)return;if(event.target!=Browser.getCanvas())return;const isTouchType=event.type==="touchstart"||event.type==="touchend"||event.type==="touchcancel";let eventButton=0;if(isTouchType){event.preventDefault();let primaryChanged=false;if(GLFW.primaryTouchId===null&&event.type==="touchstart"&&event.targetTouches.length>0){const chosenTouch=event.targetTouches[0];GLFW.primaryTouchId=chosenTouch.identifier;Browser.setMouseCoords(chosenTouch.pageX,chosenTouch.pageY);primaryChanged=true}else if(event.type==="touchend"||event.type==="touchcancel"){for(let i of event.changedTouches){if(GLFW.primaryTouchId===i.identifier){GLFW.primaryTouchId=null;primaryChanged=true;break}}}if(!primaryChanged){return}}else{Browser.calculateMouseEvent(event);eventButton=GLFW.DOMToGLFWMouseButton(event)}if(status==1){GLFW.active.buttons|=1<{if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:event=>{if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:event=>{var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Browser.getCanvas())return;var sx=0;var sy=delta;if(event.type=="mousewheel"){sx=event.wheelDeltaX}else{sx=event.deltaX}getWasmTableEntry(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:(width,height,framebufferWidth,framebufferHeight)=>{if(!GLFW.active)return;var resizeNeeded=false;if(getFullscreenElement()){if(!GLFW.active.fullscreen){resizeNeeded=width!=screen.width||height!=screen.height;GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}}else if(GLFW.active.fullscreen==true){resizeNeeded=width!=GLFW.active.storedWidth||height!=GLFW.active.storedHeight;GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height)}else if(GLFW.active.width!=width||GLFW.active.height!=height||GLFW.active.framebufferWidth!=framebufferWidth||GLFW.active.framebufferHeight!=framebufferHeight){GLFW.active.width=width;GLFW.active.height=height;GLFW.active.framebufferWidth=framebufferWidth;GLFW.active.framebufferHeight=framebufferHeight;GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:()=>{if(!GLFW.active)return;if(GLFW.active.windowSizeFunc){getWasmTableEntry(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)}},onFramebufferSizeChanged:()=>{if(!GLFW.active)return;if(GLFW.active.framebufferSizeFunc){getWasmTableEntry(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.framebufferWidth,GLFW.active.framebufferHeight)}},onWindowContentScaleChanged:scale=>{GLFW.scale=scale;if(!GLFW.active)return;if(GLFW.active.windowContentScaleFunc){getWasmTableEntry(GLFW.active.windowContentScaleFunc)(GLFW.active.id,GLFW.scale,GLFW.scale)}},getTime:()=>_emscripten_get_now()/1e3,setWindowTitle:(winid,title)=>{var win=GLFW.WindowFromId(winid);if(!win)return;win.title=title;if(GLFW.active.id==win.id){_emscripten_set_window_title(title)}},setJoystickCallback:cbfun=>{var prevcbfun=GLFW.joystickFunc;GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks();return prevcbfun},joys:{},lastGamepadState:[],lastGamepadStateFrame:null,refreshJoysticks:()=>{if(MainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!MainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads||[];GLFW.lastGamepadStateFrame=MainLoop.currentFrameNumber;for(var joy=0;joy>2]=gamepad.axes[i]}}else{if(GLFW.joys[joy]){out("glfw joystick disconnected",joy);if(GLFW.joystickFunc){getWasmTableEntry(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:event=>{if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=_malloc(event.dataTransfer.files.length*4);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=e=>{if(reader.readyState!=2){++written;out("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){getWasmTableEntry(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i>2]=filename}for(var i=0;i{if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:e=>{var canvas=Browser.getCanvas();if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();e.preventDefault()}},setInputMode:(winid,mode,value)=>{var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{var canvas=Browser.getCanvas();switch(value){case 212993:{win.inputModes[mode]=value;canvas.removeEventListener("click",GLFW.onClickRequestPointerLock,true);document.exitPointerLock();break}case 212994:{err("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented");break}case 212995:{win.inputModes[mode]=value;canvas.addEventListener("click",GLFW.onClickRequestPointerLock,true);canvas.requestPointerLock();break}default:{err(`glfwSetInputMode called with unknown value parameter value: ${value}`);break}}break}case 208898:{err("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented");break}case 208899:{err("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented");break}case 208900:{err("glfwSetInputMode called with GLFW_LOCK_KEY_MODS mode not implemented");break}case 3342341:{err("glfwSetInputMode called with GLFW_RAW_MOUSE_MOTION mode not implemented");break}default:{err(`glfwSetInputMode called with unknown mode parameter value: ${mode}`);break}}},getKey:(winid,key)=>{var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:(winid,button)=>{var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<0},getCursorPos:(winid,x,y)=>{HEAPF64[x>>3]=Browser.mouseX;HEAPF64[y>>3]=Browser.mouseY},getMousePos:(winid,x,y)=>{HEAP32[x>>2]=Browser.mouseX;HEAP32[y>>2]=Browser.mouseY},setCursorPos:(winid,x,y)=>{},getWindowPos:(winid,x,y)=>{var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){HEAP32[x>>2]=wx}if(y){HEAP32[y>>2]=wy}},setWindowPos:(winid,x,y)=>{var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:(winid,width,height)=>{var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){HEAP32[width>>2]=ww}if(height){HEAP32[height>>2]=wh}},setWindowSize:(winid,width,height)=>{var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){Browser.setCanvasSize(width,height)}},defaultWindowHints:()=>{GLFW.hints={...GLFW.defaultHints}},createWindow:(width,height,title,monitor,share)=>{var i,id;for(i=0;i0)abort("glfwCreateWindow only supports one window at time currently");id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Browser.createContext(canvas,true,true,contextAttributes)}else{Browser.init()}}if(!Module["ctx"]&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,canvas.width,canvas.height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;GLFW.adjustCanvasDimensions();return win.id},destroyWindow:winid=>{var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc){getWasmTableEntry(win.windowCloseFunc)(win.id)}GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id){GLFW.active=null}for(win of GLFW.windows){if(win!==null)return}delete Module["ctx"]},swapBuffers:winid=>{},requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Browser.getCanvas();function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if(getFullscreenElement()===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas);Browser.updateResizeListeners()}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas);Browser.updateResizeListeners()}}Module["onFullScreen"]?.(Browser.isFullscreen);Module["onFullscreen"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},updateCanvasDimensions(canvas,wNative,hNative){const scale=GLFW.getHiDPIScale();if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h{var win=GLFW.WindowFromId(winid);if(!win)return;const isHiDPIAware=GLFW.isHiDPIAware();win.attributes[attrib]=value;if(isHiDPIAware!==GLFW.isHiDPIAware())GLFW.adjustCanvasDimensions()},getDevicePixelRatio(){return typeof devicePixelRatio=="number"&&devicePixelRatio||1},isHiDPIAware(){if(GLFW.active)return GLFW.active.attributes[139276]>0;else return false},isCSSScalingEnabled(){return!GLFW.isHiDPIAware()},adjustCanvasDimensions(){if(GLFW.active){Browser.updateCanvasDimensions(Browser.getCanvas(),GLFW.active.width,GLFW.active.height);Browser.updateResizeListeners()}},getHiDPIScale(){return GLFW.isHiDPIAware()?GLFW.scale:1},onDevicePixelRatioChange(){GLFW.onWindowContentScaleChanged(GLFW.getDevicePixelRatio());GLFW.adjustCanvasDimensions()},GLFW2ParamToGLFW3Param:param=>{var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};var _glfwCreateWindow=(width,height,title,monitor,share)=>GLFW.createWindow(width,height,title,monitor,share);var _glfwDefaultWindowHints=()=>GLFW.defaultWindowHints();var _glfwDestroyWindow=winid=>GLFW.destroyWindow(winid);var _glfwGetPrimaryMonitor=()=>1;var _glfwGetTime=()=>GLFW.getTime()-GLFW.initialTime;var _glfwGetVideoModes=(monitor,count)=>{HEAP32[count>>2]=0;return 0};var _glfwInit=()=>{if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.defaultWindowHints();GLFW.windows=new Array;GLFW.active=null;GLFW.scale=GLFW.getDevicePixelRatio();window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);GLFW.devicePixelRatioMQL=window.matchMedia("(resolution: "+GLFW.getDevicePixelRatio()+"dppx)");GLFW.devicePixelRatioMQL.addEventListener("change",GLFW.onDevicePixelRatioChange);var canvas=Browser.getCanvas();canvas.addEventListener("touchmove",GLFW.onMousemove,true);canvas.addEventListener("touchstart",GLFW.onMouseButtonDown,true);canvas.addEventListener("touchcancel",GLFW.onMouseButtonUp,true);canvas.addEventListener("touchend",GLFW.onMouseButtonUp,true);canvas.addEventListener("mousemove",GLFW.onMousemove,true);canvas.addEventListener("mousedown",GLFW.onMouseButtonDown,true);canvas.addEventListener("mouseup",GLFW.onMouseButtonUp,true);canvas.addEventListener("wheel",GLFW.onMouseWheel,true);canvas.addEventListener("mousewheel",GLFW.onMouseWheel,true);canvas.addEventListener("mouseenter",GLFW.onMouseenter,true);canvas.addEventListener("mouseleave",GLFW.onMouseleave,true);canvas.addEventListener("drop",GLFW.onDrop,true);canvas.addEventListener("dragover",GLFW.onDragover,true);Browser.requestFullscreen=GLFW.requestFullscreen;Browser.calculateMouseCoords=GLFW.calculateMouseCoords;Browser.updateCanvasDimensions=GLFW.updateCanvasDimensions;Browser.resizeListeners.push((width,height)=>{if(GLFW.isHiDPIAware()){var canvas=Browser.getCanvas();GLFW.onCanvasResize(canvas.clientWidth,canvas.clientHeight,width,height)}else{GLFW.onCanvasResize(width,height,width,height)}});return 1};var _glfwMakeContextCurrent=winid=>0;var _glfwSetCharCallback=(winid,cbfun)=>GLFW.setCharCallback(winid,cbfun);var _glfwSetCursorEnterCallback=(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun};var _glfwSetCursorPosCallback=(winid,cbfun)=>GLFW.setCursorPosCallback(winid,cbfun);var _glfwSetDropCallback=(winid,cbfun)=>GLFW.setDropCallback(winid,cbfun);var _glfwSetErrorCallback=cbfun=>{var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun};var _glfwSetKeyCallback=(winid,cbfun)=>GLFW.setKeyCallback(winid,cbfun);var _glfwSetMouseButtonCallback=(winid,cbfun)=>GLFW.setMouseButtonCallback(winid,cbfun);var _glfwSetScrollCallback=(winid,cbfun)=>GLFW.setScrollCallback(winid,cbfun);var _glfwSetWindowContentScaleCallback=(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowContentScaleFunc;win.windowContentScaleFunc=cbfun;return prevcbfun};var _glfwSetWindowFocusCallback=(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun};var _glfwSetWindowIconifyCallback=(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun};var _glfwSetWindowShouldClose=(winid,value)=>{var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value};var _glfwSetWindowSize=(winid,width,height)=>GLFW.setWindowSize(winid,width,height);var _glfwSetWindowSizeCallback=(winid,cbfun)=>GLFW.setWindowSizeCallback(winid,cbfun);var _glfwSwapBuffers=winid=>GLFW.swapBuffers(winid);var _glfwTerminate=()=>{window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);var canvas=Browser.getCanvas();canvas.removeEventListener("touchmove",GLFW.onMousemove,true);canvas.removeEventListener("touchstart",GLFW.onMouseButtonDown,true);canvas.removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);canvas.removeEventListener("touchend",GLFW.onMouseButtonUp,true);canvas.removeEventListener("mousemove",GLFW.onMousemove,true);canvas.removeEventListener("mousedown",GLFW.onMouseButtonDown,true);canvas.removeEventListener("mouseup",GLFW.onMouseButtonUp,true);canvas.removeEventListener("wheel",GLFW.onMouseWheel,true);canvas.removeEventListener("mousewheel",GLFW.onMouseWheel,true);canvas.removeEventListener("mouseenter",GLFW.onMouseenter,true);canvas.removeEventListener("mouseleave",GLFW.onMouseleave,true);canvas.removeEventListener("drop",GLFW.onDrop,true);canvas.removeEventListener("dragover",GLFW.onDragover,true);if(GLFW.devicePixelRatioMQL)GLFW.devicePixelRatioMQL.removeEventListener("change",GLFW.onDevicePixelRatioChange);canvas.width=canvas.height=1;GLFW.windows=null;GLFW.active=null};var _glfwWindowHint=(target,hint)=>{GLFW.hints[target]=hint};var FS_createPath=(...args)=>FS.createPath(...args);var FS_unlink=(...args)=>FS.unlink(...args);var FS_createLazyFile=(...args)=>FS.createLazyFile(...args);var FS_createDevice=(...args)=>FS.createDevice(...args);FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();for(let i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<=288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i)}var miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<=288;++i){miniTempWebGLIntBuffers[i]=miniTempWebGLIntBuffersStorage.subarray(0,i)}Module["requestAnimationFrame"]=MainLoop.requestAnimationFrame;Module["pauseMainLoop"]=MainLoop.pause;Module["resumeMainLoop"]=MainLoop.resume;MainLoop.init();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_preloadFile"]=FS_preloadFile;Module["FS_unlink"]=FS_unlink;Module["FS_createPath"]=FS_createPath;Module["FS_createDevice"]=FS_createDevice;Module["FS_createDataFile"]=FS_createDataFile;Module["FS_createLazyFile"]=FS_createLazyFile;var ASM_CONSTS={34397:()=>{if(document.fullscreenElement)return 1},34443:()=>Module.canvas.width,34475:()=>parseInt(Module.canvas.style.width),34523:()=>{document.exitFullscreen()},34550:()=>{setTimeout(function(){Module.requestFullscreen(false,false)},100)},34622:()=>{if(document.fullscreenElement)return 1},34668:()=>Module.canvas.width,34700:()=>screen.width,34725:()=>{document.exitFullscreen()},34752:()=>{setTimeout(function(){Module.requestFullscreen(false,true);setTimeout(function(){canvas.style.width="unset"},100)},100)},34885:()=>window.innerWidth,34911:()=>window.innerHeight,34938:()=>{if(document.fullscreenElement)return 1},34984:()=>Module.canvas.width,35016:()=>parseInt(Module.canvas.style.width),35064:()=>{if(document.fullscreenElement)return 1},35110:()=>Module.canvas.width,35142:()=>screen.width,35167:()=>window.innerWidth,35193:()=>window.innerHeight,35220:()=>{if(document.fullscreenElement)return 1},35266:()=>Module.canvas.width,35298:()=>screen.width,35323:()=>{document.exitFullscreen()},35350:()=>{if(document.fullscreenElement)return 1},35396:()=>Module.canvas.width,35428:()=>parseInt(Module.canvas.style.width),35476:()=>{document.exitFullscreen()},35503:$0=>{Module.canvas.style.opacity=$0},35541:()=>screen.width,35566:()=>screen.height,35592:()=>window.screenX,35619:()=>window.screenY,35646:()=>window.devicePixelRatio,35682:$0=>{navigator.clipboard.writeText(UTF8ToString($0))},35735:$0=>{Module.canvas.style.cursor=UTF8ToString($0)},35786:()=>{Module.canvas.style.cursor="none"},35823:($0,$1,$2,$3)=>{try{navigator.getGamepads()[$0].vibrationActuator.playEffect("dual-rumble",{startDelay:0,duration:$3,weakMagnitude:$1,strongMagnitude:$2})}catch(e){try{navigator.getGamepads()[$0].hapticActuators[0].pulse($2,$3)}catch(e){}}},36079:$0=>{Module.canvas.style.cursor=UTF8ToString($0)},36130:()=>{if(document.pointerLockElement)return 1},36177:()=>{if(document.fullscreenElement)return 1},36223:()=>window.innerWidth,36249:()=>window.innerHeight};function SetCanvasIdJs(out,outSize){var canvasId="#"+Module.canvas.id;stringToUTF8(canvasId,out,outSize)}var _free,_main,_malloc,memory,__indirect_function_table,wasmMemory,wasmTable;function assignWasmExports(wasmExports){_free=wasmExports["we"];_main=Module["_main"]=wasmExports["xe"];_malloc=wasmExports["ze"];memory=wasmMemory=wasmExports["ue"];__indirect_function_table=wasmTable=wasmExports["ye"]}var wasmImports={la:SetCanvasIdJs,t:___assert_fail,Xa:___syscall_faccessat,K:___syscall_fcntl64,Qa:___syscall_getcwd,Sa:___syscall_ioctl,Ta:___syscall_openat,Wa:_clock_time_get,C:_emscripten_asm_const_double,s:_emscripten_asm_const_int,Ua:_emscripten_date_now,ie:_emscripten_get_element_css_size,ma:_emscripten_get_gamepad_status,I:_emscripten_get_now,na:_emscripten_get_num_gamepads,Md:_emscripten_glActiveTexture,Ld:_emscripten_glAttachShader,ce:_emscripten_glBeginQueryEXT,Kd:_emscripten_glBindAttribLocation,Jd:_emscripten_glBindBuffer,Id:_emscripten_glBindFramebuffer,Hd:_emscripten_glBindRenderbuffer,Gd:_emscripten_glBindTexture,Vd:_emscripten_glBindVertexArrayOES,Fd:_emscripten_glBlendColor,Ed:_emscripten_glBlendEquation,Dd:_emscripten_glBlendEquationSeparate,Cd:_emscripten_glBlendFunc,Bd:_emscripten_glBlendFuncSeparate,Ad:_emscripten_glBufferData,zd:_emscripten_glBufferSubData,yd:_emscripten_glCheckFramebufferStatus,xd:_emscripten_glClear,wd:_emscripten_glClearColor,vd:_emscripten_glClearDepthf,ud:_emscripten_glClearStencil,Za:_emscripten_glClipControlEXT,td:_emscripten_glColorMask,sd:_emscripten_glCompileShader,rd:_emscripten_glCompressedTexImage2D,qd:_emscripten_glCompressedTexSubImage2D,pd:_emscripten_glCopyTexImage2D,od:_emscripten_glCopyTexSubImage2D,nd:_emscripten_glCreateProgram,md:_emscripten_glCreateShader,ld:_emscripten_glCullFace,jd:_emscripten_glDeleteBuffers,id:_emscripten_glDeleteFramebuffers,hd:_emscripten_glDeleteProgram,ee:_emscripten_glDeleteQueriesEXT,gd:_emscripten_glDeleteRenderbuffers,fd:_emscripten_glDeleteShader,ed:_emscripten_glDeleteTextures,Ud:_emscripten_glDeleteVertexArraysOES,dd:_emscripten_glDepthFunc,cd:_emscripten_glDepthMask,bd:_emscripten_glDepthRangef,ad:_emscripten_glDetachShader,_c:_emscripten_glDisable,Zc:_emscripten_glDisableVertexAttribArray,Yc:_emscripten_glDrawArrays,Qd:_emscripten_glDrawArraysInstancedANGLE,Rd:_emscripten_glDrawBuffersWEBGL,Xc:_emscripten_glDrawElements,Od:_emscripten_glDrawElementsInstancedANGLE,Wc:_emscripten_glEnable,Vc:_emscripten_glEnableVertexAttribArray,be:_emscripten_glEndQueryEXT,Uc:_emscripten_glFinish,Tc:_emscripten_glFlush,Sc:_emscripten_glFramebufferRenderbuffer,Rc:_emscripten_glFramebufferTexture2D,Pc:_emscripten_glFrontFace,Oc:_emscripten_glGenBuffers,Mc:_emscripten_glGenFramebuffers,fe:_emscripten_glGenQueriesEXT,Lc:_emscripten_glGenRenderbuffers,Kc:_emscripten_glGenTextures,Td:_emscripten_glGenVertexArraysOES,Nc:_emscripten_glGenerateMipmap,Jc:_emscripten_glGetActiveAttrib,Ic:_emscripten_glGetActiveUniform,Hc:_emscripten_glGetAttachedShaders,Gc:_emscripten_glGetAttribLocation,Fc:_emscripten_glGetBooleanv,Ec:_emscripten_glGetBufferParameteriv,Dc:_emscripten_glGetError,Cc:_emscripten_glGetFloatv,Bc:_emscripten_glGetFramebufferAttachmentParameteriv,Ac:_emscripten_glGetIntegerv,yc:_emscripten_glGetProgramInfoLog,zc:_emscripten_glGetProgramiv,Xd:_emscripten_glGetQueryObjecti64vEXT,Zd:_emscripten_glGetQueryObjectivEXT,Wd:_emscripten_glGetQueryObjectui64vEXT,Yd:_emscripten_glGetQueryObjectuivEXT,$d:_emscripten_glGetQueryivEXT,xc:_emscripten_glGetRenderbufferParameteriv,vc:_emscripten_glGetShaderInfoLog,uc:_emscripten_glGetShaderPrecisionFormat,tc:_emscripten_glGetShaderSource,wc:_emscripten_glGetShaderiv,sc:_emscripten_glGetString,rc:_emscripten_glGetTexParameterfv,qc:_emscripten_glGetTexParameteriv,nc:_emscripten_glGetUniformLocation,pc:_emscripten_glGetUniformfv,oc:_emscripten_glGetUniformiv,kc:_emscripten_glGetVertexAttribPointerv,mc:_emscripten_glGetVertexAttribfv,lc:_emscripten_glGetVertexAttribiv,jc:_emscripten_glHint,ic:_emscripten_glIsBuffer,hc:_emscripten_glIsEnabled,gc:_emscripten_glIsFramebuffer,fc:_emscripten_glIsProgram,de:_emscripten_glIsQueryEXT,ec:_emscripten_glIsRenderbuffer,dc:_emscripten_glIsShader,cc:_emscripten_glIsTexture,Sd:_emscripten_glIsVertexArrayOES,bc:_emscripten_glLineWidth,ac:_emscripten_glLinkProgram,$b:_emscripten_glPixelStorei,Ya:_emscripten_glPolygonModeWEBGL,_b:_emscripten_glPolygonOffset,_a:_emscripten_glPolygonOffsetClampEXT,ae:_emscripten_glQueryCounterEXT,Zb:_emscripten_glReadPixels,Yb:_emscripten_glReleaseShaderCompiler,Xb:_emscripten_glRenderbufferStorage,Wb:_emscripten_glSampleCoverage,Vb:_emscripten_glScissor,Ub:_emscripten_glShaderBinary,Sb:_emscripten_glShaderSource,Rb:_emscripten_glStencilFunc,Qb:_emscripten_glStencilFuncSeparate,Pb:_emscripten_glStencilMask,Ob:_emscripten_glStencilMaskSeparate,Nb:_emscripten_glStencilOp,Mb:_emscripten_glStencilOpSeparate,Lb:_emscripten_glTexImage2D,Kb:_emscripten_glTexParameterf,Jb:_emscripten_glTexParameterfv,Hb:_emscripten_glTexParameteri,Gb:_emscripten_glTexParameteriv,Fb:_emscripten_glTexSubImage2D,Eb:_emscripten_glUniform1f,Db:_emscripten_glUniform1fv,Cb:_emscripten_glUniform1i,Bb:_emscripten_glUniform1iv,Ab:_emscripten_glUniform2f,zb:_emscripten_glUniform2fv,yb:_emscripten_glUniform2i,xb:_emscripten_glUniform2iv,wb:_emscripten_glUniform3f,vb:_emscripten_glUniform3fv,ub:_emscripten_glUniform3i,tb:_emscripten_glUniform3iv,sb:_emscripten_glUniform4f,rb:_emscripten_glUniform4fv,qb:_emscripten_glUniform4i,pb:_emscripten_glUniform4iv,ob:_emscripten_glUniformMatrix2fv,nb:_emscripten_glUniformMatrix3fv,mb:_emscripten_glUniformMatrix4fv,lb:_emscripten_glUseProgram,kb:_emscripten_glValidateProgram,jb:_emscripten_glVertexAttrib1f,ib:_emscripten_glVertexAttrib1fv,hb:_emscripten_glVertexAttrib2f,gb:_emscripten_glVertexAttrib2fv,fb:_emscripten_glVertexAttrib3f,eb:_emscripten_glVertexAttrib3fv,cb:_emscripten_glVertexAttrib4f,bb:_emscripten_glVertexAttrib4fv,Nd:_emscripten_glVertexAttribDivisorANGLE,ab:_emscripten_glVertexAttribPointer,$a:_emscripten_glViewport,Oa:_emscripten_resize_heap,oa:_emscripten_sample_gamepad_data,T:_emscripten_set_blur_callback_on_thread,qa:_emscripten_set_canvas_element_size,se:_emscripten_set_click_callback_on_thread,S:_emscripten_set_focus_callback_on_thread,U:_emscripten_set_fullscreenchange_callback_on_thread,le:_emscripten_set_gamepadconnected_callback_on_thread,ke:_emscripten_set_gamepaddisconnected_callback_on_thread,te:_emscripten_set_main_loop,qe:_emscripten_set_mousemove_callback_on_thread,re:_emscripten_set_pointerlockchange_callback_on_thread,Q:_emscripten_set_resize_callback_on_thread,me:_emscripten_set_touchcancel_callback_on_thread,oe:_emscripten_set_touchend_callback_on_thread,ne:_emscripten_set_touchmove_callback_on_thread,pe:_emscripten_set_touchstart_callback_on_thread,R:_emscripten_set_visibilitychange_callback_on_thread,ra:_emscripten_set_window_title,ge:_exit,L:_fd_close,Ra:_fd_read,Pa:_fd_seek,J:_fd_write,P:_glActiveTexture,E:_glAttachShader,f:_glBindAttribLocation,a:_glBindBuffer,k:_glBindTexture,j:_glBlendEquation,Ib:_glBlendEquationSeparate,i:_glBlendFunc,Tb:_glBlendFuncSeparate,q:_glBufferData,w:_glBufferSubData,M:_glClear,N:_glClearColor,Na:_glClearDepthf,Fa:_glCompileShader,Ja:_glCompressedTexImage2D,Da:_glCreateProgram,Ha:_glCreateShader,$c:_glCullFace,n:_glDeleteBuffers,H:_glDeleteProgram,p:_glDeleteShader,G:_glDeleteTextures,db:_glDepthFunc,v:_glDetachShader,kd:_glDisable,u:_glDisableVertexAttribArray,_d:_glDrawArrays,Pd:_glDrawElements,O:_glEnable,g:_glEnableVertexAttribArray,Va:_glFrontFace,r:_glGenBuffers,La:_glGenTextures,d:_glGetAttribLocation,Qc:_glGetFloatv,Ba:_glGetProgramInfoLog,D:_glGetProgramiv,Ea:_glGetShaderInfoLog,F:_glGetShaderiv,m:_glGetString,c:_glGetUniformLocation,Ca:_glLinkProgram,Ma:_glPixelStorei,Ia:_glReadPixels,Ga:_glShaderSource,Ka:_glTexImage2D,x:_glTexParameteri,Aa:_glUniform1fv,Z:_glUniform1i,ta:_glUniform1iv,za:_glUniform2fv,wa:_glUniform2iv,ya:_glUniform3fv,va:_glUniform3iv,ha:_glUniform4f,xa:_glUniform4fv,ua:_glUniform4iv,l:_glUniformMatrix4fv,o:_glUseProgram,h:_glVertexAttribPointer,y:_glViewport,A:_glfwCreateWindow,ia:_glfwDefaultWindowHints,he:_glfwDestroyWindow,B:_glfwGetPrimaryMonitor,b:_glfwGetTime,ga:_glfwGetVideoModes,ja:_glfwInit,V:_glfwMakeContextCurrent,$:_glfwSetCharCallback,W:_glfwSetCursorEnterCallback,Y:_glfwSetCursorPosCallback,ca:_glfwSetDropCallback,ka:_glfwSetErrorCallback,aa:_glfwSetKeyCallback,_:_glfwSetMouseButtonCallback,X:_glfwSetScrollCallback,ba:_glfwSetWindowContentScaleCallback,da:_glfwSetWindowFocusCallback,ea:_glfwSetWindowIconifyCallback,je:_glfwSetWindowShouldClose,sa:_glfwSetWindowSize,fa:_glfwSetWindowSizeCallback,pa:_glfwSwapBuffers,z:_glfwTerminate,e:_glfwWindowHint};function callMain(){var entryFunction=_main;var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();Module["onRuntimeInitialized"]?.();var noInitialRun=Module["noInitialRun"]||false;if(!noInitialRun)callMain();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;createWasm();run(); diff --git a/web/index.wasm b/web/index.wasm new file mode 100755 index 0000000000000000000000000000000000000000..39c25fcf0c46c1142625ed8af542af4f60c72d49 GIT binary patch literal 129811 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

_vVU8OM8=3~z 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