From 9b7f3e5d9a3267612ff1a6f7caac5aad57ef4aca Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Tue, 6 Jun 2023 20:41:18 +0000 Subject: [PATCH] Add bumper colors and playfield Co-authored-by: sigonasr2 --- C++ProjectTemplate.js | 2 +- C++ProjectTemplate.wasm | Bin 314406 -> 315667 bytes main.cpp | 47 ++++++++++++++++++++++++++++++---------- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/C++ProjectTemplate.js b/C++ProjectTemplate.js index f005663..eb16021 100644 --- a/C++ProjectTemplate.js +++ b/C++ProjectTemplate.js @@ -1 +1 @@ -var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});var nodeMajor=process.versions.node.split(".")[0];if(nodeMajor<15){process.on("unhandledRejection",reason=>{throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};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=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="C++ProjectTemplate.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(()=>getBinary(binaryFile))}else{if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}}return Promise.resolve().then(()=>getBinary(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>{return WebAssembly.instantiate(binary,imports)}).then(instance=>{return instance}).then(receiver,reason=>{err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];updateMemoryViews();wasmTable=Module["asm"]["__indirect_function_table"];addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;var ASM_CONSTS={40156:()=>{window.onunload=Module._olc_OnPageUnload},40200:($0,$1)=>{Module._olc_EmscriptenShellCss="width: 100%; height: 70vh; margin-left: auto; margin-right: auto;";Module._olc_WindowAspectRatio=$0/$1;Module.canvas.parentNode.addEventListener("resize",function(e){if(e.defaultPrevented){e.stopPropagation();return}var viewWidth=e.detail.width;var viewHeight=e.detail.width/Module._olc_WindowAspectRatio;if(viewHeight>e.detail.height){viewHeight=e.detail.height;viewWidth=e.detail.height*Module._olc_WindowAspectRatio}if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss+" width: "+viewWidth.toString()+"px; height: "+viewHeight.toString()+"px;";Module.canvas.setAttribute("width",viewWidth);Module.canvas.setAttribute("height",viewHeight);if(document.fullscreenElement!=null){var top=(e.detail.height-viewHeight)/2;var left=(e.detail.width-viewWidth)/2;Module.canvas.style.position="fixed";Module.canvas.style.top=top.toString()+"px";Module.canvas.style.left=left.toString()+"px";Module.canvas.style.width="";Module.canvas.style.height=""}Module._olc_PGE_UpdateWindowSize(viewWidth,viewHeight);Module.canvas.focus();e.stopPropagation()});Module._olc_ResizeCanvas=function(){setTimeout(function(){if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss;Module.canvas.style.cssText="width: 100%; height: 100%; outline: none;";var resizeEvent=new CustomEvent("resize",{detail:{width:Module.canvas.clientWidth,height:Module.canvas.clientHeight},bubbles:true,cancelable:true});Module.canvas.dispatchEvent(resizeEvent)},50)};document.body.style.cssText+=" overscroll-behavior-y: contain;";if(Module.canvas.parentNode.className=="emscripten_border"){document.body.style.margin="0";Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss}Module._olc_ResizeCanvas();var resizeObserver=new ResizeObserver(function(entries){Module._olc_ResizeCanvas()}).observe(Module.canvas.parentNode);var mutationObserver=new MutationObserver(function(mutationsList,observer){for(var i=0;i0){callbacks.shift()(Module)}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}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.substr(-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.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function initRandomFill(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")}function randomFill(view){return(randomFill=initRandomFill())(view)}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[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).substr(1);to=PATH_FS.resolve(to).substr(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=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=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}}heap[outIdx]=0;return outIdx-startIdx}function 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 UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;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 TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(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){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){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,allocate:MEMFS.stream_ops.allocate,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.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(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:function(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:function(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:function(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.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(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{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)}var preloadPlugins=Module["preloadPlugins"]||[];function FS_handledByPreloadPlugin(byteArray,fullname,finish,onerror){if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled}function FS_createPreloadedFile(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}}function FS_modeStringToFlags(str){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}function FS_getMode(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;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,parent)}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=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{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){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},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)},getStream:fd=>FS.streams[fd],createStream:(stream,fd=-1)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}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},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){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.apply(check,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)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},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:type,opts:opts,mountpoint: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);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];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||name==="."||name===".."){throw new FS.ErrnoError(28)}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)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{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)}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;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.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 PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},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}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}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)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,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:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};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},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},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)}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)},munmap:stream=>0,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"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;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"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("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});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){randomLeft=randomFill(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",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}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)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{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){}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;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("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)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("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))throw new Error("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")throw new Error("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};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url: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={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});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:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(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 PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(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)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{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?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emscripten_throw_longjmp(){throw Infinity}function _abort(){abort("")}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){global.performance=require("perf_hooks").performance}_emscripten_get_now=()=>performance.now();function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}out('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL=="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function maybeExit(){if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}}function callUserCallback(func){if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}}function safeSetTimeout(func,timeout){return setTimeout(()=>{callUserCallback(func)},timeout)}var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=event=>{out("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;if(onload)onload(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.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:2};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){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(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=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===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)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])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:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout:function(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(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:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(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)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};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];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(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"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}function webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(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("webgl2",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=GL.getNewId(GL.contexts);var context={handle: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:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(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]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _eglCreateContext(display,config,hmm,contextAttribs){if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion<2||glesContextVersion>3){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}}function _eglCreateWindowSurface(display,config,win,attrib_list){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006}function _eglDestroyContext(display,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1}function _eglDestroySurface(display,surface){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1}function _eglGetDisplay(nativeDisplayType){EGL.setErrorCode(12288);return 62e3}function _eglInitialize(display,majorVersion,minorVersion){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1}function _eglMakeCurrent(display,draw,read,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1}function _eglSwapBuffers(dpy,surface){if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0}function _eglSwapInterval(display,interval){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1}function _eglTerminate(display){if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1}var readEmAsmArgsArray=[];function readEmAsmArgs(sigPtr,buf){readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readEmAsmArgsArray}function runEmAsmFunction(code,sigPtr,argbuf){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int(code,sigPtr,argbuf){return runEmAsmFunction(code,sigPtr,argbuf)}function _emscripten_cancel_main_loop(){Browser.mainLoop.pause();Browser.mainLoop.func=null}function _emscripten_date_now(){return Date.now()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){var b=wasmMemory.buffer;var pages=size-b.byteLength+65535>>>16;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;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,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(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 i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function registerFocusEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=function(e=event){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:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread)}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread)}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread)}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread)}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function 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;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-rect.left;HEAP32[idx+14]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=function(e=event){fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread)}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread)}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var t,touches={},et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-targetRect.left;HEAP32[idx+10]=t.clientY-targetRect.top;idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread)}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread)}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread)}function registerWheelEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=function(e=event){var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}}function _emscripten_set_window_title(title){setWindowTitle(UTF8ToString(title))}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings}function stringToAscii(str,buffer){for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}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}}function 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 convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];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}}function 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(typeof offset!=="undefined"){offset+=curr}}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindBuffer(target,buffer){if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBindVertexArray(vao){GLctx.bindVertexArray(GL.vaos[vao])}var _glBindVertexArrayOES=_glBindVertexArray;function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}function _glBufferData(target,size,data,usage){if(true){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}}else{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}}function _glClear(x0){GLctx.clear(x0)}function _glClearColor(x0,x1,x2,x3){GLctx.clearColor(x0,x1,x2,x3)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _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}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _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}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _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}}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glEnable(x0){GLctx.enable(x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _glGenVertexArraysOES=_glGenVertexArrays;function _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}function _glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)}function _glReadPixels(x,y,width,height,format,type,pixels){if(true){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels)}else{var heap=heapObjectForWebGLType(type);GLctx.readPixels(x,y,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){if(true){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,null)}return}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}function _glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var preloadedImages={};var preloadedAudios={};var GLctx;var wasmImports={"__cxa_throw":___cxa_throw,"__syscall_fcntl64":___syscall_fcntl64,"__syscall_ioctl":___syscall_ioctl,"__syscall_openat":___syscall_openat,"_emscripten_get_now_is_monotonic":__emscripten_get_now_is_monotonic,"_emscripten_throw_longjmp":__emscripten_throw_longjmp,"abort":_abort,"eglChooseConfig":_eglChooseConfig,"eglCreateContext":_eglCreateContext,"eglCreateWindowSurface":_eglCreateWindowSurface,"eglDestroyContext":_eglDestroyContext,"eglDestroySurface":_eglDestroySurface,"eglGetDisplay":_eglGetDisplay,"eglInitialize":_eglInitialize,"eglMakeCurrent":_eglMakeCurrent,"eglSwapBuffers":_eglSwapBuffers,"eglSwapInterval":_eglSwapInterval,"eglTerminate":_eglTerminate,"emscripten_asm_const_int":_emscripten_asm_const_int,"emscripten_cancel_main_loop":_emscripten_cancel_main_loop,"emscripten_date_now":_emscripten_date_now,"emscripten_get_now":_emscripten_get_now,"emscripten_memcpy_big":_emscripten_memcpy_big,"emscripten_resize_heap":_emscripten_resize_heap,"emscripten_set_blur_callback_on_thread":_emscripten_set_blur_callback_on_thread,"emscripten_set_canvas_element_size":_emscripten_set_canvas_element_size,"emscripten_set_focus_callback_on_thread":_emscripten_set_focus_callback_on_thread,"emscripten_set_keydown_callback_on_thread":_emscripten_set_keydown_callback_on_thread,"emscripten_set_keyup_callback_on_thread":_emscripten_set_keyup_callback_on_thread,"emscripten_set_main_loop":_emscripten_set_main_loop,"emscripten_set_mousedown_callback_on_thread":_emscripten_set_mousedown_callback_on_thread,"emscripten_set_mousemove_callback_on_thread":_emscripten_set_mousemove_callback_on_thread,"emscripten_set_mouseup_callback_on_thread":_emscripten_set_mouseup_callback_on_thread,"emscripten_set_touchend_callback_on_thread":_emscripten_set_touchend_callback_on_thread,"emscripten_set_touchmove_callback_on_thread":_emscripten_set_touchmove_callback_on_thread,"emscripten_set_touchstart_callback_on_thread":_emscripten_set_touchstart_callback_on_thread,"emscripten_set_wheel_callback_on_thread":_emscripten_set_wheel_callback_on_thread,"emscripten_set_window_title":_emscripten_set_window_title,"environ_get":_environ_get,"environ_sizes_get":_environ_sizes_get,"fd_close":_fd_close,"fd_read":_fd_read,"fd_seek":_fd_seek,"fd_write":_fd_write,"glAttachShader":_glAttachShader,"glBindBuffer":_glBindBuffer,"glBindTexture":_glBindTexture,"glBindVertexArrayOES":_glBindVertexArrayOES,"glBlendFunc":_glBlendFunc,"glBufferData":_glBufferData,"glClear":_glClear,"glClearColor":_glClearColor,"glCompileShader":_glCompileShader,"glCreateProgram":_glCreateProgram,"glCreateShader":_glCreateShader,"glDeleteProgram":_glDeleteProgram,"glDeleteShader":_glDeleteShader,"glDeleteTextures":_glDeleteTextures,"glDrawArrays":_glDrawArrays,"glEnable":_glEnable,"glEnableVertexAttribArray":_glEnableVertexAttribArray,"glGenBuffers":_glGenBuffers,"glGenTextures":_glGenTextures,"glGenVertexArraysOES":_glGenVertexArraysOES,"glGetShaderInfoLog":_glGetShaderInfoLog,"glLinkProgram":_glLinkProgram,"glReadPixels":_glReadPixels,"glShaderSource":_glShaderSource,"glTexImage2D":_glTexImage2D,"glTexParameteri":_glTexParameteri,"glUseProgram":_glUseProgram,"glVertexAttribPointer":_glVertexAttribPointer,"glViewport":_glViewport,"invoke_ii":invoke_ii,"invoke_iii":invoke_iii,"invoke_iiii":invoke_iiii,"invoke_iiiii":invoke_iiiii,"invoke_vi":invoke_vi,"invoke_vii":invoke_vii,"invoke_viii":invoke_viii,"invoke_viiii":invoke_viiii,"invoke_viiiiii":invoke_viiiiii,"strftime_l":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["__wasm_call_ctors"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["main"]).apply(null,arguments)};var _olc_OnPageUnload=Module["_olc_OnPageUnload"]=function(){return(_olc_OnPageUnload=Module["_olc_OnPageUnload"]=Module["asm"]["olc_OnPageUnload"]).apply(null,arguments)};var _olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=function(){return(_olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=Module["asm"]["olc_PGE_UpdateWindowSize"]).apply(null,arguments)};var _malloc=function(){return(_malloc=Module["asm"]["malloc"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["__errno_location"]).apply(null,arguments)};var _setThrew=function(){return(_setThrew=Module["asm"]["setThrew"]).apply(null,arguments)};var stackSave=function(){return(stackSave=Module["asm"]["stackSave"]).apply(null,arguments)};var stackRestore=function(){return(stackRestore=Module["asm"]["stackRestore"]).apply(null,arguments)};var stackAlloc=function(){return(stackAlloc=Module["asm"]["stackAlloc"]).apply(null,arguments)};var ___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module["asm"]["__cxa_is_pointer_type"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["dynCall_viijii"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["dynCall_jiji"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["dynCall_iiiiij"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["dynCall_iiiiijj"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["dynCall_iiiiiijj"]).apply(null,arguments)};function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};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){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); +var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});var nodeMajor=process.versions.node.split(".")[0];if(nodeMajor<15){process.on("unhandledRejection",reason=>{throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};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=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="C++ProjectTemplate.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(()=>getBinary(binaryFile))}else{if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}}return Promise.resolve().then(()=>getBinary(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>{return WebAssembly.instantiate(binary,imports)}).then(instance=>{return instance}).then(receiver,reason=>{err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];updateMemoryViews();wasmTable=Module["asm"]["__indirect_function_table"];addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;var ASM_CONSTS={40780:()=>{window.onunload=Module._olc_OnPageUnload},40824:($0,$1)=>{Module._olc_EmscriptenShellCss="width: 100%; height: 70vh; margin-left: auto; margin-right: auto;";Module._olc_WindowAspectRatio=$0/$1;Module.canvas.parentNode.addEventListener("resize",function(e){if(e.defaultPrevented){e.stopPropagation();return}var viewWidth=e.detail.width;var viewHeight=e.detail.width/Module._olc_WindowAspectRatio;if(viewHeight>e.detail.height){viewHeight=e.detail.height;viewWidth=e.detail.height*Module._olc_WindowAspectRatio}if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss+" width: "+viewWidth.toString()+"px; height: "+viewHeight.toString()+"px;";Module.canvas.setAttribute("width",viewWidth);Module.canvas.setAttribute("height",viewHeight);if(document.fullscreenElement!=null){var top=(e.detail.height-viewHeight)/2;var left=(e.detail.width-viewWidth)/2;Module.canvas.style.position="fixed";Module.canvas.style.top=top.toString()+"px";Module.canvas.style.left=left.toString()+"px";Module.canvas.style.width="";Module.canvas.style.height=""}Module._olc_PGE_UpdateWindowSize(viewWidth,viewHeight);Module.canvas.focus();e.stopPropagation()});Module._olc_ResizeCanvas=function(){setTimeout(function(){if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss;Module.canvas.style.cssText="width: 100%; height: 100%; outline: none;";var resizeEvent=new CustomEvent("resize",{detail:{width:Module.canvas.clientWidth,height:Module.canvas.clientHeight},bubbles:true,cancelable:true});Module.canvas.dispatchEvent(resizeEvent)},50)};document.body.style.cssText+=" overscroll-behavior-y: contain;";if(Module.canvas.parentNode.className=="emscripten_border"){document.body.style.margin="0";Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss}Module._olc_ResizeCanvas();var resizeObserver=new ResizeObserver(function(entries){Module._olc_ResizeCanvas()}).observe(Module.canvas.parentNode);var mutationObserver=new MutationObserver(function(mutationsList,observer){for(var i=0;i0){callbacks.shift()(Module)}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}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.substr(-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.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function initRandomFill(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")}function randomFill(view){return(randomFill=initRandomFill())(view)}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[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).substr(1);to=PATH_FS.resolve(to).substr(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=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=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}}heap[outIdx]=0;return outIdx-startIdx}function 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 UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;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 TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(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){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){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,allocate:MEMFS.stream_ops.allocate,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.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(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:function(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:function(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:function(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.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(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{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)}var preloadPlugins=Module["preloadPlugins"]||[];function FS_handledByPreloadPlugin(byteArray,fullname,finish,onerror){if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled}function FS_createPreloadedFile(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}}function FS_modeStringToFlags(str){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}function FS_getMode(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;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,parent)}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=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{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){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},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)},getStream:fd=>FS.streams[fd],createStream:(stream,fd=-1)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}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},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){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.apply(check,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)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},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:type,opts:opts,mountpoint: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);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];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||name==="."||name===".."){throw new FS.ErrnoError(28)}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)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{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)}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;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.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 PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},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}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}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)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,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:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};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},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},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)}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)},munmap:stream=>0,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"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;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"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("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});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){randomLeft=randomFill(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",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}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)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{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){}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;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("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)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("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))throw new Error("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")throw new Error("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};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url: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={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});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:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(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 PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(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)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{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?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emscripten_throw_longjmp(){throw Infinity}function _abort(){abort("")}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){global.performance=require("perf_hooks").performance}_emscripten_get_now=()=>performance.now();function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}out('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL=="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function maybeExit(){if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}}function callUserCallback(func){if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}}function safeSetTimeout(func,timeout){return setTimeout(()=>{callUserCallback(func)},timeout)}var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=event=>{out("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;if(onload)onload(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.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:2};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){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(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=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===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)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])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:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout:function(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(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:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(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)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};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];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(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"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}function webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"))}function webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(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("webgl2",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=GL.getNewId(GL.contexts);var context={handle: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:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(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]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _eglCreateContext(display,config,hmm,contextAttribs){if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion<2||glesContextVersion>3){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}}function _eglCreateWindowSurface(display,config,win,attrib_list){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006}function _eglDestroyContext(display,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1}function _eglDestroySurface(display,surface){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1}function _eglGetDisplay(nativeDisplayType){EGL.setErrorCode(12288);return 62e3}function _eglInitialize(display,majorVersion,minorVersion){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1}function _eglMakeCurrent(display,draw,read,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1}function _eglSwapBuffers(dpy,surface){if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0}function _eglSwapInterval(display,interval){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1}function _eglTerminate(display){if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1}var readEmAsmArgsArray=[];function readEmAsmArgs(sigPtr,buf){readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readEmAsmArgsArray}function runEmAsmFunction(code,sigPtr,argbuf){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int(code,sigPtr,argbuf){return runEmAsmFunction(code,sigPtr,argbuf)}function _emscripten_cancel_main_loop(){Browser.mainLoop.pause();Browser.mainLoop.func=null}function _emscripten_date_now(){return Date.now()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){var b=wasmMemory.buffer;var pages=size-b.byteLength+65535>>>16;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;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,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(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 i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function registerFocusEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=function(e=event){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:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread)}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread)}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread)}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread)}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function 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;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-rect.left;HEAP32[idx+14]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=function(e=event){fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread)}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread)}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var t,touches={},et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-targetRect.left;HEAP32[idx+10]=t.clientY-targetRect.top;idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread)}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread)}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){return registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread)}function registerWheelEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=function(e=event){var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}}function _emscripten_set_window_title(title){setWindowTitle(UTF8ToString(title))}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings}function stringToAscii(str,buffer){for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=bufSize;return 0}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}}function 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 convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];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}}function 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(typeof offset!=="undefined"){offset+=curr}}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindBuffer(target,buffer){if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBindVertexArray(vao){GLctx.bindVertexArray(GL.vaos[vao])}var _glBindVertexArrayOES=_glBindVertexArray;function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}function _glBufferData(target,size,data,usage){if(true){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}}else{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}}function _glClear(x0){GLctx.clear(x0)}function _glClearColor(x0,x1,x2,x3){GLctx.clearColor(x0,x1,x2,x3)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _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}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _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}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _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}}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glEnable(x0){GLctx.enable(x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _glGenVertexArraysOES=_glGenVertexArrays;function _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}function _glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)}function _glReadPixels(x,y,width,height,format,type,pixels){if(true){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels)}else{var heap=heapObjectForWebGLType(type);GLctx.readPixels(x,y,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){if(true){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,null)}return}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}function _glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var preloadedImages={};var preloadedAudios={};var GLctx;var wasmImports={"__cxa_throw":___cxa_throw,"__syscall_fcntl64":___syscall_fcntl64,"__syscall_ioctl":___syscall_ioctl,"__syscall_openat":___syscall_openat,"_emscripten_get_now_is_monotonic":__emscripten_get_now_is_monotonic,"_emscripten_throw_longjmp":__emscripten_throw_longjmp,"abort":_abort,"eglChooseConfig":_eglChooseConfig,"eglCreateContext":_eglCreateContext,"eglCreateWindowSurface":_eglCreateWindowSurface,"eglDestroyContext":_eglDestroyContext,"eglDestroySurface":_eglDestroySurface,"eglGetDisplay":_eglGetDisplay,"eglInitialize":_eglInitialize,"eglMakeCurrent":_eglMakeCurrent,"eglSwapBuffers":_eglSwapBuffers,"eglSwapInterval":_eglSwapInterval,"eglTerminate":_eglTerminate,"emscripten_asm_const_int":_emscripten_asm_const_int,"emscripten_cancel_main_loop":_emscripten_cancel_main_loop,"emscripten_date_now":_emscripten_date_now,"emscripten_get_now":_emscripten_get_now,"emscripten_memcpy_big":_emscripten_memcpy_big,"emscripten_resize_heap":_emscripten_resize_heap,"emscripten_set_blur_callback_on_thread":_emscripten_set_blur_callback_on_thread,"emscripten_set_canvas_element_size":_emscripten_set_canvas_element_size,"emscripten_set_focus_callback_on_thread":_emscripten_set_focus_callback_on_thread,"emscripten_set_keydown_callback_on_thread":_emscripten_set_keydown_callback_on_thread,"emscripten_set_keyup_callback_on_thread":_emscripten_set_keyup_callback_on_thread,"emscripten_set_main_loop":_emscripten_set_main_loop,"emscripten_set_mousedown_callback_on_thread":_emscripten_set_mousedown_callback_on_thread,"emscripten_set_mousemove_callback_on_thread":_emscripten_set_mousemove_callback_on_thread,"emscripten_set_mouseup_callback_on_thread":_emscripten_set_mouseup_callback_on_thread,"emscripten_set_touchend_callback_on_thread":_emscripten_set_touchend_callback_on_thread,"emscripten_set_touchmove_callback_on_thread":_emscripten_set_touchmove_callback_on_thread,"emscripten_set_touchstart_callback_on_thread":_emscripten_set_touchstart_callback_on_thread,"emscripten_set_wheel_callback_on_thread":_emscripten_set_wheel_callback_on_thread,"emscripten_set_window_title":_emscripten_set_window_title,"environ_get":_environ_get,"environ_sizes_get":_environ_sizes_get,"fd_close":_fd_close,"fd_read":_fd_read,"fd_seek":_fd_seek,"fd_write":_fd_write,"glAttachShader":_glAttachShader,"glBindBuffer":_glBindBuffer,"glBindTexture":_glBindTexture,"glBindVertexArrayOES":_glBindVertexArrayOES,"glBlendFunc":_glBlendFunc,"glBufferData":_glBufferData,"glClear":_glClear,"glClearColor":_glClearColor,"glCompileShader":_glCompileShader,"glCreateProgram":_glCreateProgram,"glCreateShader":_glCreateShader,"glDeleteProgram":_glDeleteProgram,"glDeleteShader":_glDeleteShader,"glDeleteTextures":_glDeleteTextures,"glDrawArrays":_glDrawArrays,"glEnable":_glEnable,"glEnableVertexAttribArray":_glEnableVertexAttribArray,"glGenBuffers":_glGenBuffers,"glGenTextures":_glGenTextures,"glGenVertexArraysOES":_glGenVertexArraysOES,"glGetShaderInfoLog":_glGetShaderInfoLog,"glLinkProgram":_glLinkProgram,"glReadPixels":_glReadPixels,"glShaderSource":_glShaderSource,"glTexImage2D":_glTexImage2D,"glTexParameteri":_glTexParameteri,"glUseProgram":_glUseProgram,"glVertexAttribPointer":_glVertexAttribPointer,"glViewport":_glViewport,"invoke_ii":invoke_ii,"invoke_iii":invoke_iii,"invoke_iiii":invoke_iiii,"invoke_iiiii":invoke_iiiii,"invoke_vi":invoke_vi,"invoke_vii":invoke_vii,"invoke_viii":invoke_viii,"invoke_viiii":invoke_viiii,"invoke_viiiiii":invoke_viiiiii,"strftime_l":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["__wasm_call_ctors"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["main"]).apply(null,arguments)};var _olc_OnPageUnload=Module["_olc_OnPageUnload"]=function(){return(_olc_OnPageUnload=Module["_olc_OnPageUnload"]=Module["asm"]["olc_OnPageUnload"]).apply(null,arguments)};var _olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=function(){return(_olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=Module["asm"]["olc_PGE_UpdateWindowSize"]).apply(null,arguments)};var _malloc=function(){return(_malloc=Module["asm"]["malloc"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["__errno_location"]).apply(null,arguments)};var _setThrew=function(){return(_setThrew=Module["asm"]["setThrew"]).apply(null,arguments)};var stackSave=function(){return(stackSave=Module["asm"]["stackSave"]).apply(null,arguments)};var stackRestore=function(){return(stackRestore=Module["asm"]["stackRestore"]).apply(null,arguments)};var stackAlloc=function(){return(stackAlloc=Module["asm"]["stackAlloc"]).apply(null,arguments)};var ___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module["asm"]["__cxa_is_pointer_type"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["dynCall_viijii"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["dynCall_jiji"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["dynCall_iiiiij"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["dynCall_iiiiijj"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["dynCall_iiiiiijj"]).apply(null,arguments)};function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};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){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/C++ProjectTemplate.wasm b/C++ProjectTemplate.wasm index 74fe153e51e9de57ef6821cc20ee06bc52513f15..32fa038a03cb9e76dfabb6494184f00b7f902739 100755 GIT binary patch delta 71186 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 Tm%#Pobg=m1qk2xY|Em83H=oX$ diff --git a/main.cpp b/main.cpp index cc1ab57..e654d21 100644 --- a/main.cpp +++ b/main.cpp @@ -19,6 +19,9 @@ struct Line{ vf2d startPos={}; vf2d endPos={}; float radius=0; + float bounceFactor=0.8; + float bumperLeft=0; + float bumperRight=0; }; class MiniGolfPro : public olc::PixelGameEngine @@ -46,27 +49,42 @@ public: balls.emplace_back(b); } - void AddLine(vf2d pos1,vf2d pos2,float r){ + void AddLine(vf2d pos1,vf2d pos2,float r,float bounceFactor){ Line l; l.startPos=pos1; l.endPos=pos2; l.radius=r; + l.bounceFactor=bounceFactor; lines.push_back(l); } + bool isLeft(Line line, vf2d point) { + return (line.endPos.x - line.startPos.x)*(point.y - line.startPos.y) - (line.endPos.y - line.startPos.y)*(point.x - line.startPos.x) > 0; + } + public: bool OnUserCreate() override { for (int i=0;i<20;i++){ AddBall({float(rand()%ScreenWidth()),float(rand()%ScreenHeight())},rand()%16+2); } - AddLine({12,4},{64,4},5); - AddLine({76,4},{132,4},5); - AddLine({12,68},{64,68},5); - AddLine({76,68},{132,68},5); - AddLine({4,12},{4,60},5); - AddLine({140,12},{140,60},5); + AddLine({0,450},{640,450},10,0.8); ConsoleCaptureStdOut(true); + for(int x=0;x<320;x+=20){ + AddLine({float(x+320),(1.f/18000)*std::abs(powf(float(x),2.6f))},{x+20+320.f,(1.f/18000)*std::abs(powf(float(x+20),2.6f))},10,0.4); + if(x<260){ + AddLine({float(-x+320),(1.f/18000)*std::abs(powf(float(x),2.6f))},{float(-x-20+320),(1.f/18000)*std::abs(powf(float(x+20),2.6f))},10,0.4); + } + } + for(int x=0;x<260;x+=20){ + AddLine({float(x+320),(1.f/12000)*std::abs(powf(float(x),2.6f))+60},{x+20+320.f,(1.f/12000)*std::abs(powf(float(x+20),2.6f))+60},10,0.4); + if(x<150){ + AddLine({float(-x+320),(1.f/12000)*std::abs(powf(float(x),2.6f))+60},{float(-x-20+320),(1.f/12000)*std::abs(powf(float(x+20),2.6f))+60},10,0.4); + } + } + AddLine({640,190},{640,480},10,0.4); + AddLine({580,220},{580,480},10,0.4); + AddLine({60,100},{90,290},15,1.5); return true; } @@ -149,7 +167,7 @@ public: b.originalPos.x=b.pos.x; b.originalPos.y=b.pos.y; b.acc.x=-b.vel.x*0.8f; - b.acc.y=-b.vel.y*0.8f/*+100.f //Gravity constant*/; + b.acc.y=-b.vel.y*0.8f+100.f; //Gravity constant; b.vel.x+=b.acc.x*b.simTimeRemaining; b.vel.y+=b.acc.y*b.simTimeRemaining; b.pos.x+=b.vel.x*b.simTimeRemaining; @@ -187,7 +205,7 @@ public: if(dist<=b.radius+l.radius){ Ball*fakeBall=new Ball(); fakeBall->radius=l.radius; - fakeBall->mass=b.mass*0.8f; + fakeBall->mass=b.mass*l.bounceFactor; fakeBall->pos={closestPoint.x,closestPoint.y}; fakeBall->vel={-b.vel.x,-b.vel.y}; fakeBalls.push_back(fakeBall); @@ -195,6 +213,11 @@ public: float overlap=1.1f*(dist-b.radius-fakeBall->radius); b.pos.x-=overlap*(b.pos.x-fakeBall->pos.x)/dist; b.pos.y-=overlap*(b.pos.y-fakeBall->pos.y)/dist; + if(isLeft(l,b.pos)){ + l.bumperLeft=1; + } else { + l.bumperRight=1; + } } } for(Ball&b2:balls){ @@ -253,8 +276,10 @@ public: vf2d normal={-(l.endPos.y-l.startPos.y),l.endPos.x-l.startPos.x}; float dist=sqrt(normal.x*normal.x+normal.y*normal.y); normal/=dist; - DrawLine(l.startPos.x+normal.x*l.radius,l.startPos.y+normal.y*l.radius,l.endPos.x+normal.x*l.radius,l.endPos.y+normal.y*l.radius); - DrawLine(l.startPos.x-normal.x*l.radius,l.startPos.y-normal.y*l.radius,l.endPos.x-normal.x*l.radius,l.endPos.y-normal.y*l.radius); + l.bumperLeft=std::max(0.f,l.bumperLeft-fElapsedTime); + l.bumperRight=std::max(0.f,l.bumperRight-fElapsedTime); + DrawLine(l.startPos.x+normal.x*l.radius,l.startPos.y+normal.y*l.radius,l.endPos.x+normal.x*l.radius,l.endPos.y+normal.y*l.radius,l.bumperLeft?RED:WHITE); + DrawLine(l.startPos.x-normal.x*l.radius,l.startPos.y-normal.y*l.radius,l.endPos.x-normal.x*l.radius,l.endPos.y-normal.y*l.radius,l.bumperRight?BLUE:WHITE); } return true; }