From 2a1645a35cd28920550e7ef2f52e0b715cfea85b Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Wed, 12 Jul 2023 22:46:30 +0000 Subject: [PATCH] Setup 3D example. --- C++/scripts/web.sh | 6 +- C++ProjectTemplate.data | Bin 0 -> 35973 bytes C++ProjectTemplate.js | 2 +- C++ProjectTemplate.wasm | Bin 304153 -> 323359 bytes dirtblock.png => assets/dirtblock.png | Bin assets/unitcube.obj | 26 + main.cpp | 91 ++- olcPGEX_Graphics3D.h | 836 ++++++++++++++++++++++++++ pixelGameEngine.h | 27 +- pixelGameEngine_wasm.o | Bin 173270 -> 180897 bytes sig | 2 +- 11 files changed, 940 insertions(+), 50 deletions(-) create mode 100644 C++ProjectTemplate.data rename dirtblock.png => assets/dirtblock.png (100%) create mode 100644 assets/unitcube.obj create mode 100644 olcPGEX_Graphics3D.h diff --git a/C++/scripts/web.sh b/C++/scripts/web.sh index b575188..a09aa5f 100755 --- a/C++/scripts/web.sh +++ b/C++/scripts/web.sh @@ -12,12 +12,12 @@ source ../emsdk/emsdk_env.sh if [ ! -f "pixelGameEngine_wasm.o" ] then printf "Pixel Game Engine compile object missing. Compiling for the first time..." - em++ -std=c++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=4GB -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_SDL_MIXER=2 -s USE_LIBPNG=1 -c pixelGameEngine.cpp -o pixelGameEngine_wasm.o + em++ -std=c++17 -O2 -sASSERTIONS -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=4GB -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_SDL_MIXER=2 -s USE_LIBPNG=1 -c pixelGameEngine.cpp -o pixelGameEngine_wasm.o fi if [ -d "assets" ]; then - em++ -std=c++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=4GB -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_SDL_MIXER=2 -s USE_LIBPNG=1 $(find . -type f -name "*.cpp" -not -path "./test/*" -not -name "pixelGameEngine.cpp") pixelGameEngine_wasm.o -o ${PROJECT_NAME}.html --preload-file ./assets + em++ -std=c++17 -O2 -sASSERTIONS -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=4GB -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_SDL_MIXER=2 -s USE_LIBPNG=1 $(find . -type f -name "*.cpp" -not -path "./test/*" -not -name "pixelGameEngine.cpp") pixelGameEngine_wasm.o -o ${PROJECT_NAME}.html --preload-file ./assets else - em++ -std=c++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=4GB -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_SDL_MIXER=2 -s USE_LIBPNG=1 $(find . -type f -name "*.cpp" -not -path "./test/*" -not -name "pixelGameEngine.cpp") pixelGameEngine_wasm.o -o ${PROJECT_NAME}.html + em++ -std=c++17 -O2 -sASSERTIONS -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=4GB -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_SDL_MIXER=2 -s USE_LIBPNG=1 $(find . -type f -name "*.cpp" -not -path "./test/*" -not -name "pixelGameEngine.cpp") pixelGameEngine_wasm.o -o ${PROJECT_NAME}.html fi cp buildtemplate.html ${PROJECT_NAME}.html diff --git a/C++ProjectTemplate.data b/C++ProjectTemplate.data new file mode 100644 index 0000000000000000000000000000000000000000..93f8ae4045d88b9a70738beb036a92eebb741cc3 GIT binary patch literal 35973 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 z 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 literal 0 HcmV?d00001 diff --git a/C++ProjectTemplate.js b/C++ProjectTemplate.js index 0b4c5fa..7f8a20f 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)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(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",function(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",function(reason){throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=function(){return"[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.warn.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 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}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}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 stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}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(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(binaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(binaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(binaryFile)})}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(function(binary){return WebAssembly.instantiate(binary,imports)}).then(function(instance){return instance}).then(receiver,function(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(function(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={38668:()=>{window.onunload=Module._olc_OnPageUnload},38712:($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_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};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_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1};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 ptr}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 getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return()=>{crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return()=>crypto_module["randomBytes"](1)[0]}catch(e){}}return()=>abort("randomDevice")}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;i0?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 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 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},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},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:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{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);var fd=FS.nextfd(fd_start,fd_end);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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);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 mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}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},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(Browser.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)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload=(()=>{}),onerror=(()=>{}))=>{var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=()=>{ok++;if(ok+fail==total)finish()};putRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:(paths,onload=(()=>{}),onerror=(()=>{}))=>{var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};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.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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){_emscripten_get_now=()=>{var t=process.hrtime();return t[0]*1e3+t[1]/1e6}}else _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(function(){callUserCallback(func)},timeout)}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}}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;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=event=>{out("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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)}function fail(){if(done)return;done=true;preloadedAudios[name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.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(function(){finish(audio)},1e4)}else{return fail()}};Module["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)}}},handledByPreloadPlugin:function(byteArray,fullname,finish,onerror){Browser.init();var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled},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(function(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"]||function(){};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(function(){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(function(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(){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;try{wasmMemory.grow(size-b.byteLength+65535>>>16);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}let 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 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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);return 0}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){registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);return 0}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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread);return 0}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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread);return 0}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);return 0}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread);return 0}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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target=findEventTarget(target);if(typeof target.onwheel!="undefined"){registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread);return 0}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 writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)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;writeAsciiToMemory(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.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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])}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)}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.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,"glBindVertexArray":_glBindVertexArray,"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,"glGenVertexArrays":_glGenVertexArrays,"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 _memcpy=function(){return(_memcpy=Module["asm"]["memcpy"]).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 _saveSetjmp=function(){return(_saveSetjmp=Module["asm"]["saveSetjmp"]).apply(null,arguments)};var _free=function(){return(_free=Module["asm"]["free"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["__errno_location"]).apply(null,arguments)};var ___dl_seterr=function(){return(___dl_seterr=Module["asm"]["__dl_seterr"]).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:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){if(Module["ENVIRONMENT_IS_PTHREAD"]||Module["$ww"])return;var loadPackage=function(metadata){var PACKAGE_PATH="";if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof process==="undefined"&&typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}var PACKAGE_NAME="C++ProjectTemplate.data";var REMOTE_PACKAGE_BASE="C++ProjectTemplate.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];function fetchRemotePackage(packageName,packageSize,callback,errback){if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){require("fs").readFile(packageName,(function(err,contents){if(err){errback(err)}else{callback(contents.buffer)}}));return}var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"](`Downloading data... (${loaded}/${total})`)}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,(function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}}),handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","assets",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"](`fp ${this.name}`)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"](`fp ${that.name}`);this.requests[this.name]=null}};var files=metadata["files"];for(var i=0;i{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 ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(Module["ENVIRONMENT"]){throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)")}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){if(typeof process=="undefined"||!process.release||process.release.name!=="node")throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var nodeVersion=process.versions.node;var numericVersion=nodeVersion.split(".").slice(0,3);numericVersion=numericVersion[0]*1e4+numericVersion[1]*100+numericVersion[2].split("-")[0]*1;if(numericVersion<16e4){throw new Error("This emscripten-generated code requires node v16.0.0 (detected v"+nodeVersion+")")}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)}assert(ret.buffer);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}}));quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}else if(ENVIRONMENT_IS_SHELL){if(typeof process=="object"&&typeof require==="function"||typeof window=="object"||typeof importScripts=="function")throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");if(typeof read!="undefined"){read_=f=>read(f)}readBinary=f=>{let data;if(typeof readbuffer=="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data=="object");return data};readAsync=(f,onload,onerror)=>{setTimeout((()=>onload(readBinary(f))))};if(typeof clearTimeout=="undefined"){globalThis.clearTimeout=id=>{}}if(typeof setTimeout=="undefined"){globalThis.setTimeout=f=>typeof f=="function"?f():abort()}if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit=="function"){quit_=(status,toThrow)=>{setTimeout((()=>{if(!(toThrow instanceof ExitStatus)){let toLog=toThrow;if(toThrow&&typeof toThrow=="object"&&toThrow.stack){toLog=[toThrow,toThrow.stack]}err(`exiting due to exception: ${toLog}`)}quit(status)}));throw toThrow}}if(typeof print!="undefined"){if(typeof console=="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!="undefined"?printErr:print}}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=""}if(!(typeof window=="object"||typeof importScripts=="function"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");{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{throw new Error("environment detection error")}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;checkIncomingModuleAPI();if(Module["arguments"])arguments_=Module["arguments"];legacyModuleProp("arguments","arguments_");if(Module["thisProgram"])thisProgram=Module["thisProgram"];legacyModuleProp("thisProgram","thisProgram");if(Module["quit"])quit_=Module["quit"];legacyModuleProp("quit","quit_");assert(typeof Module["memoryInitializerPrefixURL"]=="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["pthreadMainPrefixURL"]=="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["cdInitializerPrefixURL"]=="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["filePackagePrefixURL"]=="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["read"]=="undefined","Module.read option was removed (modify read_ in JS)");assert(typeof Module["readAsync"]=="undefined","Module.readAsync option was removed (modify readAsync in JS)");assert(typeof Module["readBinary"]=="undefined","Module.readBinary option was removed (modify readBinary in JS)");assert(typeof Module["setWindowTitle"]=="undefined","Module.setWindowTitle option was removed (modify setWindowTitle in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");legacyModuleProp("read","read_");legacyModuleProp("readAsync","readAsync");legacyModuleProp("readBinary","readBinary");legacyModuleProp("setWindowTitle","setWindowTitle");assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add 'shell' to `-sENVIRONMENT` to enable.");var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];legacyModuleProp("wasmBinary","wasmBinary");var noExitRuntime=Module["noExitRuntime"]||true;legacyModuleProp("noExitRuntime","noExitRuntime");if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+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)}assert(!Module["STACK_SIZE"],"STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");assert(typeof Int32Array!="undefined"&&typeof Float64Array!=="undefined"&&Int32Array.prototype.subarray!=undefined&&Int32Array.prototype.set!=undefined,"JS engine does not provide full typed array support");assert(!Module["wasmMemory"],"Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally");assert(!Module["INITIAL_MEMORY"],"Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically");var wasmTable;function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}HEAPU32[max>>>2]=34821223;HEAPU32[max+4>>>2]=2310721022;HEAPU32[0>>>2]=1668509029}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=HEAPU32[max>>>2];var cookie2=HEAPU32[max+4>>>2];if(cookie1!=34821223||cookie2!=2310721022){abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`)}if(HEAPU32[0>>>2]!=1668509029){abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}}(function(){var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)throw"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)"})();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(){assert(!runtimeInitialized);runtimeInitialized=true;checkStackCookie();if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){checkStackCookie();callRuntimeCallbacks(__ATMAIN__)}function postRun(){checkStackCookie();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)}assert(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;var runDependencyTracking={};function getUniqueRunDependency(id){var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&typeof setInterval!="undefined"){runDependencyWatcher=setInterval((()=>{if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err("still waiting on run dependencies:")}err("dependency: "+dep)}if(shown){err("(end of list)")}}),1e4)}}else{err("warning: run dependency added without ID")}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id]}else{err("warning: run dependency removed without ID")}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;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://")}function createExportWrapper(name,fixedasm){return function(){var displayName=name;var asm=fixedasm;if(!fixedasm){asm=Module["asm"]}assert(runtimeInitialized,"native function `"+displayName+"` called before runtime initialization");if(!asm[name]){assert(asm[name],"exported native function `"+displayName+"` not found")}return asm[name].apply(null,arguments)}}var wasmBinaryFile;wasmBinaryFile="C++ProjectTemplate.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}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((()=>getBinarySync(binaryFile)))}else if(readAsync){return new Promise(((resolve,reject)=>{readAsync(binaryFile,(response=>resolve(new Uint8Array(response))),reject)}))}}return Promise.resolve().then((()=>getBinarySync(binaryFile)))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then((binary=>WebAssembly.instantiate(binary,imports))).then((instance=>instance)).then(receiver,(reason=>{err("failed to asynchronously prepare wasm: "+reason);if(isFileURI(wasmBinaryFile)){err("warning: Loading from a file URI ("+wasmBinaryFile+") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing")}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)}))}))}return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;exports=applySignatureConversions(exports);Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];assert(wasmMemory,"memory not found in wasm exports");updateMemoryViews();wasmTable=Module["asm"]["__indirect_function_table"];assert(wasmTable,"table not found in wasm exports");addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");trueModule=null;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;function legacyModuleProp(prop,newName){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,get(){abort("Module."+prop+" has been replaced with plain "+newName+" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}}function ignoredModuleProp(prop){if(Object.getOwnPropertyDescriptor(Module,prop)){abort("`Module."+prop+"` was supplied but `"+prop+"` not included in INCOMING_MODULE_JS_API")}}function isExportedByForceFilesystem(name){return name==="FS_createPath"||name==="FS_createDataFile"||name==="FS_createPreloadedFile"||name==="FS_unlink"||name==="addRunDependency"||name==="FS_createLazyFile"||name==="FS_createDevice"||name==="removeRunDependency"}function missingGlobal(sym,msg){if(typeof globalThis!=="undefined"){Object.defineProperty(globalThis,sym,{configurable:true,get(){warnOnce("`"+sym+"` is not longer defined by emscripten. "+msg);return undefined}})}}missingGlobal("buffer","Please use HEAP8.buffer or wasmMemory.buffer");function missingLibrarySymbol(sym){if(typeof globalThis!=="undefined"&&!Object.getOwnPropertyDescriptor(globalThis,sym)){Object.defineProperty(globalThis,sym,{configurable:true,get(){var msg="`"+sym+"` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line";var librarySymbol=sym;if(!librarySymbol.startsWith("_")){librarySymbol="$"+sym}msg+=" (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='"+librarySymbol+"')";if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}warnOnce(msg);return undefined}})}unexportedRuntimeSymbol(sym)}function unexportedRuntimeSymbol(sym){if(!Object.getOwnPropertyDescriptor(Module,sym)){Object.defineProperty(Module,sym,{configurable:true,get(){var msg="'"+sym+"' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)";if(isExportedByForceFilesystem(sym)){msg+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"}abort(msg)}})}}var ASM_CONSTS={42172:()=>{window.onunload=Module._olc_OnPageUnload},42216:($0,$1)=>{Module.olc_AspectRatio=$0/$1;Module.olc_AssumeDefaultShells=document.querySelectorAll(".emscripten").length>=3?true:false;var olc_ResizeHandler=function(){let isFullscreen=document.fullscreenElement!=null;let width=isFullscreen?window.innerWidth:Module.canvas.parentNode.clientWidth;let height=isFullscreen?window.innerHeight:Module.canvas.parentNode.clientHeight;let viewWidth=width;let viewHeight=width/Module.olc_AspectRatio;if(viewHeight>height){viewWidth=height*Module.olc_AspectRatio;viewHeight=height}viewWidth=parseInt(viewWidth);viewHeight=parseInt(viewHeight);setTimeout((function(){if(Module.olc_AssumeDefaultShells)Module.canvas.parentNode.setAttribute("style","width: 100%; height: 70vh; margin-left: auto; margin-right: auto;");Module.canvas.setAttribute("width",viewWidth);Module.canvas.setAttribute("height",viewHeight);Module.canvas.setAttribute("style",`width: ${viewWidth}px; height: ${viewHeight}px;`);Module._olc_PGE_UpdateWindowSize(viewWidth,viewHeight);Module.canvas.focus()}),200)};var olc_Init=function(){if(Module.olc_AspectRatio===undefined){setTimeout((function(){Module.olc_Init()}),50);return}let resizeObserver=new ResizeObserver((function(entries){Module.olc_ResizeHandler()})).observe(Module.canvas.parentNode);let mutationObserver=new MutationObserver((function(mutationsList,observer){setTimeout((function(){Module.olc_ResizeHandler()}),200)})).observe(Module.canvas.parentNode,{attributes:false,childList:true,subtree:false});window.addEventListener("fullscreenchange",(function(e){setTimeout((function(){Module.olc_ResizeHandler()}),200)}))};Module.olc_ResizeHandler=Module.olc_ResizeHandler!=undefined?Module.olc_ResizeHandler:olc_ResizeHandler;Module.olc_Init=Module.olc_Init!=undefined?Module.olc_Init:olc_Init;Module.olc_Init()}};function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var listenOnce=(object,event,func)=>{object.addEventListener(event,func,{"once":true})};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var dynCallLegacy=(sig,ptr,args)=>{assert("dynCall_"+sig in Module,`bad function pointer type - dynCall function not found for sig '${sig}'`);if(args&&args.length){assert(args.length===sig.substring(1).replace(/j/g,"--").length)}else{assert(sig.length==1)}var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)};var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,"JavaScript-side Wasm function table mirror is out of date!");return func};var ptrToString=ptr=>{assert(typeof ptr==="number");return"0x"+ptr.toString(16).padStart(8,"0")};var warnOnce=text=>{if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};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 convertI32PairToI53Checked(lo,hi){assert(lo==lo>>>0||lo==(lo|0));assert(hi===(hi|0));return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function ___cxa_throw(ptr,type,destructor){ptr>>>=0;type>>>=0;destructor>>>=0;var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;assert(false,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")}var 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)=>PATH.normalize(l+"/"+r)};var 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("no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: (array) => { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };")};var randomFill=view=>(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{idx>>>=0;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 FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{outIdx>>>=0;assert(typeof str==="string");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++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce("Invalid Unicode code point "+ptrToString(u)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).");heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}}heap[outIdx>>>0]=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 FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,-1)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){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}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};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){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets:function(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets:function(tty,optional_actions,data){return 0},ioctl_tiocgwinsz:function(tty){return[24,80]}},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=[]}}}};var mmapAlloc=size=>{abort("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(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(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.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(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(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(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(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length>>0)}return{ptr:ptr,allocated:allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var asyncLoad=(url,onload,onerror,noRunDep)=>{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url,(arrayBuffer=>{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 ERRNO_MESSAGES={0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"};var ERRNO_CODES={};function demangle(func){warnOnce("warning: build with -sDEMANGLE_SUPPORT to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"}))}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)=>{assert(typeof parent=="object");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>node===node.parent,isMountpoint:node=>!!node.mounted,isFile:mode=>(mode&61440)===32768,isDir:mode=>(mode&61440)===16384,isLink:mode=>(mode&61440)===40960,isChrdev:mode=>(mode&61440)===8192,isBlkdev:mode=>(mode&61440)===24576,isFIFO:mode=>(mode&61440)===4096,isSocket:mode=>(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)},getStreamChecked:fd=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream:(stream,fd=-1)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get(){return this.node},set(val){this.node=val}},isRead:{get(){return(this.flags&2097155)!==1}},isWrite:{get(){return(this.flags&2097155)!==0}},isAppend:{get(){return this.flags&1024}},flags:{get(){return this.shared.flags},set(val){this.shared.flags=val}},position:{get(){return this.shared.position},set(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){assert(FS.syncFSRequests>0);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)=>{if(typeof type=="string"){throw type}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);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>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=>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.getStreamChecked(fd);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.getStreamChecked(fd);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.getStreamChecked(fd);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=>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)=>{assert(offset>=0);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)=>{assert(offset>=0);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)=>{assert(offset>=0);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.getStreamChecked(fd);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);assert(stdin.fd===0,`invalid handle for stdin (${stdin.fd})`);assert(stdout.fd===1,`invalid handle for stdout (${stdout.fd})`);assert(stderr.fd===2,`invalid handle for stderr (${stderr.fd})`)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}};this.setErrno(errno);this.message=ERRNO_MESSAGES[errno];if(this.stack){Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true});this.stack=demangleAll(this.stack)}};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)=>{assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");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;_fflush(0);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);assert(size>=0);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},absolutePath:()=>{abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder:()=>{abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink:()=>{abort("FS.createLink has been removed; use FS.symlink instead")},joinPath:()=>{abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc:()=>{abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath:()=>{abort("FS.standardizePath has been removed; use PATH.normalize instead")}};var UTF8ToString=(ptr,maxBytesToRead)=>{assert(typeof ptr=="number");ptr>>>=0;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+4>>>2]=stat.mode;HEAPU32[buf+8>>>2]=stat.nlink;HEAP32[buf+12>>>2]=stat.uid;HEAP32[buf+16>>>2]=stat.gid;HEAP32[buf+20>>>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+24>>>2]=tempI64[0],HEAP32[buf+28>>>2]=tempI64[1];HEAP32[buf+32>>>2]=4096;HEAP32[buf+36>>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();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+40>>>2]=tempI64[0],HEAP32[buf+44>>>2]=tempI64[1];HEAPU32[buf+48>>>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+56>>>2]=tempI64[0],HEAP32[buf+60>>>2]=tempI64[1];HEAPU32[buf+64>>>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+72>>>2]=tempI64[0],HEAP32[buf+76>>>2]=tempI64[1];HEAPU32[buf+80>>>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+88>>>2]=tempI64[0],HEAP32[buf+92>>>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(){assert(SYSCALLS.varargs!=undefined);SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>>2];return ret},getStr(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStreamChecked(fd);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){varargs>>>=0;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){varargs>>>=0;SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=SYSCALLS.get();HEAP32[argp>>>2]=termios.c_iflag||0;HEAP32[argp+4>>>2]=termios.c_oflag||0;HEAP32[argp+8>>>2]=termios.c_cflag||0;HEAP32[argp+12>>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17>>>0]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=SYSCALLS.get();var c_iflag=HEAP32[argp>>>2];var c_oflag=HEAP32[argp+4>>>2];var c_cflag=HEAP32[argp+8>>>2];var c_lflag=HEAP32[argp+12>>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17>>>0])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag:c_iflag,c_oflag:c_oflag,c_cflag:c_cflag,c_lflag:c_lflag,c_cc:c_cc})}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;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=SYSCALLS.get();HEAP16[argp>>>1]=winsize[0];HEAP16[argp+2>>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){path>>>=0;varargs>>>=0;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;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var __emscripten_throw_longjmp=()=>{throw Infinity};var _abort=()=>{abort("native code called abort()")};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){err("emscripten_set_main_loop_timing: Cannot set timing mode for main loop since a main loop does not exist! Call emscripten_set_main_loop first to set one up.");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;_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()}if(Browser.mainLoop.method==="timeout"&&Module.ctx){warnOnce("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter(browserIterationFunc);checkStackCookie();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"}}var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}checkStackCookie();if(e instanceof WebAssembly.RuntimeError){if(_emscripten_stack_get_current()<=0){err("Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)")}}quit_(1,e)};var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;checkUnflushedContent();if(keepRuntimeAlive()&&!implicit){var msg=`program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`;err(msg)}_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){err("user callback triggered after runtime exited or application aborted. Ignoring.");return}try{func();maybeExit()}catch(e){handleException(e)}};var safeSetTimeout=(func,timeout)=>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);assert(typeof url=="string","createObjectURL must return a url as a string");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()},requestFullScreen:function(){abort("Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)")},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;assert(typeof scrollX!="undefined"&&typeof scrollY!="undefined","Unable to retrieve scroll position, mouse positions likely broken.");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){display>>>=0;attrib_list>>>=0;configs>>>=0;numConfigs>>>=0;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){display>>>=0;config>>>=0;hmm>>>=0;contextAttribs>>>=0;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){display>>>=0;config>>>=0;attrib_list>>>=0;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){display>>>=0;context>>>=0;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){display>>>=0;surface>>>=0;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){display>>>=0;majorVersion>>>=0;minorVersion>>>=0;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){display>>>=0;draw>>>=0;read>>>=0;context>>>=0;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){dpy>>>=0;surface>>>=0;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){display>>>=0;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){display>>>=0;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=[];var readEmAsmArgs=(sigPtr,buf)=>{assert(Array.isArray(readEmAsmArgsArray));assert(buf%16==0);readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++>>>0]){var chr=String.fromCharCode(ch);var validChars=["d","f","i"];assert(validChars.includes(chr),`Invalid character ${ch}("${chr}") in readEmAsmArgs! Use only [${validChars}], and do not specify "v" for void return argument.`);buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf>>>0]:HEAPF64[buf++>>>1]);++buf}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);if(!ASM_CONSTS.hasOwnProperty(code))abort(`No EM_ASM constant found at address ${code}`);return ASM_CONSTS[code].apply(null,args)};function _emscripten_asm_const_int(code,sigPtr,argbuf){code>>>=0;sigPtr>>>=0;argbuf>>>=0;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){dest>>>=0;src>>>=0;num>>>=0;return HEAPU8.copyWithin(dest>>>0,src>>>0,src+num>>>0)}var getHeapMax=()=>4294901760;var growMemory=size=>{var b=wasmMemory.buffer;var pages=size-b.byteLength+65535>>>16;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){err(`growMemory: Attempted to grow heap from ${b.byteLength} bytes to ${size} bytes, but got error: ${e}`)}};function _emscripten_resize_heap(requestedSize){requestedSize>>>=0;var oldSize=HEAPU8.length;assert(requestedSize>oldSize);var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, asked to go up to ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`);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=growMemory(newSize);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);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}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>{assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");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){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread)}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size(target,width,height){target>>>=0;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){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;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){assert(e);var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2>>>0]=e.location;HEAP32[idx+3>>>0]=e.ctrlKey;HEAP32[idx+4>>>0]=e.shiftKey;HEAP32[idx+5>>>0]=e.altKey;HEAP32[idx+6>>>0]=e.metaKey;HEAP32[idx+7>>>0]=e.repeat;HEAP32[idx+8>>>0]=e.charCode;HEAP32[idx+9>>>0]=e.keyCode;HEAP32[idx+10>>>0]=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){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread)}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread)}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){func>>>=0;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){assert(eventStruct%4==0);HEAPF64[eventStruct>>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2>>>0]=e.screenX;HEAP32[idx+3>>>0]=e.screenY;HEAP32[idx+4>>>0]=e.clientX;HEAP32[idx+5>>>0]=e.clientY;HEAP32[idx+6>>>0]=e.ctrlKey;HEAP32[idx+7>>>0]=e.shiftKey;HEAP32[idx+8>>>0]=e.altKey;HEAP32[idx+9>>>0]=e.metaKey;HEAP16[idx*2+20>>>0]=e.button;HEAP16[idx*2+21>>>0]=e.buttons;HEAP32[idx+11>>>0]=e["movementX"];HEAP32[idx+12>>>0]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13>>>0]=e.clientX-rect.left;HEAP32[idx+14>>>0]=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){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread)}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread)}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;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){assert(e);var t,touches={},et=e.touches;for(var i=0;i>>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3>>>0]=e.ctrlKey;HEAP32[idx+4>>>0]=e.shiftKey;HEAP32[idx+5>>>0]=e.altKey;HEAP32[idx+6>>>0]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0>>>0]=t.identifier;HEAP32[idx+1>>>0]=t.screenX;HEAP32[idx+2>>>0]=t.screenY;HEAP32[idx+3>>>0]=t.clientX;HEAP32[idx+4>>>0]=t.clientY;HEAP32[idx+5>>>0]=t.pageX;HEAP32[idx+6>>>0]=t.pageY;HEAP32[idx+7>>>0]=t.isChanged;HEAP32[idx+8>>>0]=t.onTarget;HEAP32[idx+9>>>0]=t.clientX-targetRect.left;HEAP32[idx+10>>>0]=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){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread)}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread)}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;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>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;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){title>>>=0;setWindowTitle(UTF8ToString(title))}var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var 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};var stringToAscii=(str,buffer)=>{for(var i=0;i>>0]=str.charCodeAt(i)}HEAP8[buffer>>>0]=0};function _environ_get(__environ,environ_buf){__environ>>>=0;environ_buf>>>=0;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){penviron_count>>>=0;penviron_buf_size>>>=0;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}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2];var len=HEAPU32[iov+4>>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>>=0;iovcnt>>>=0;pnum>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);newOffset>>>=0;try{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}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2];var len=HEAPU32[iov+4>>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){iov>>>=0;iovcnt>>>=0;pnum>>>=0;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){size>>>=0;data>>>=0;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>>>0,data+size>>>0):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){textures>>>=0;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){buffers>>>=0;__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){textures>>>=0;__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenVertexArrays(n,arrays){arrays>>>=0;__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _glGenVertexArraysOES=_glGenVertexArrays;function _glGetShaderInfoLog(shader,maxLength,length,infoLog){length>>>=0;infoLog>>>=0;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){pixels>>>=0;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){string>>>=0;length>>>=0;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){pixels>>>=0;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){ptr>>>=0;GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var 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];var 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};var writeArrayToMemory=(array,buffer)=>{assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer>>>0)};function _strftime(s,maxsize,format,tm){s>>>=0;maxsize>>>=0;format>>>=0;tm>>>=0;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":date=>WEEKDAYS[date.tm_wday].substring(0,3),"%A":date=>WEEKDAYS[date.tm_wday],"%b":date=>MONTHS[date.tm_mon].substring(0,3),"%B":date=>MONTHS[date.tm_mon],"%C":date=>{var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":date=>leadingNulls(date.tm_mday,2),"%e":date=>leadingSomething(date.tm_mday,2," "),"%g":date=>getWeekBasedYear(date).toString().substring(2),"%G":date=>getWeekBasedYear(date),"%H":date=>leadingNulls(date.tm_hour,2),"%I":date=>{var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":date=>leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3),"%m":date=>leadingNulls(date.tm_mon+1,2),"%M":date=>leadingNulls(date.tm_min,2),"%n":()=>"\n","%p":date=>{if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":date=>leadingNulls(date.tm_sec,2),"%t":()=>"\t","%u":date=>date.tm_wday||7,"%U":date=>{var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":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":date=>date.tm_wday,"%W":date=>{var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":date=>(date.tm_year+1900).toString().substring(2),"%Y":date=>date.tm_year+1900,"%z":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":date=>date.tm_zone,"%%":()=>"%"};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){s>>>=0;maxsize>>>=0;format>>>=0;tm>>>=0;loc>>>=0;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["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_unlink"]=FS.unlink;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;ERRNO_CODES={"EPERM":63,"ENOENT":44,"ESRCH":71,"EINTR":27,"EIO":29,"ENXIO":60,"E2BIG":1,"ENOEXEC":45,"EBADF":8,"ECHILD":12,"EAGAIN":6,"EWOULDBLOCK":6,"ENOMEM":48,"EACCES":2,"EFAULT":21,"ENOTBLK":105,"EBUSY":10,"EEXIST":20,"EXDEV":75,"ENODEV":43,"ENOTDIR":54,"EISDIR":31,"EINVAL":28,"ENFILE":41,"EMFILE":33,"ENOTTY":59,"ETXTBSY":74,"EFBIG":22,"ENOSPC":51,"ESPIPE":70,"EROFS":69,"EMLINK":34,"EPIPE":64,"EDOM":18,"ERANGE":68,"ENOMSG":49,"EIDRM":24,"ECHRNG":106,"EL2NSYNC":156,"EL3HLT":107,"EL3RST":108,"ELNRNG":109,"EUNATCH":110,"ENOCSI":111,"EL2HLT":112,"EDEADLK":16,"ENOLCK":46,"EBADE":113,"EBADR":114,"EXFULL":115,"ENOANO":104,"EBADRQC":103,"EBADSLT":102,"EDEADLOCK":16,"EBFONT":101,"ENOSTR":100,"ENODATA":116,"ETIME":117,"ENOSR":118,"ENONET":119,"ENOPKG":120,"EREMOTE":121,"ENOLINK":47,"EADV":122,"ESRMNT":123,"ECOMM":124,"EPROTO":65,"EMULTIHOP":36,"EDOTDOT":125,"EBADMSG":9,"ENOTUNIQ":126,"EBADFD":127,"EREMCHG":128,"ELIBACC":129,"ELIBBAD":130,"ELIBSCN":131,"ELIBMAX":132,"ELIBEXEC":133,"ENOSYS":52,"ENOTEMPTY":55,"ENAMETOOLONG":37,"ELOOP":32,"EOPNOTSUPP":138,"EPFNOSUPPORT":139,"ECONNRESET":15,"ENOBUFS":42,"EAFNOSUPPORT":5,"EPROTOTYPE":67,"ENOTSOCK":57,"ENOPROTOOPT":50,"ESHUTDOWN":140,"ECONNREFUSED":14,"EADDRINUSE":3,"ECONNABORTED":13,"ENETUNREACH":40,"ENETDOWN":38,"ETIMEDOUT":73,"EHOSTDOWN":142,"EHOSTUNREACH":23,"EINPROGRESS":26,"EALREADY":7,"EDESTADDRREQ":17,"EMSGSIZE":35,"EPROTONOSUPPORT":66,"ESOCKTNOSUPPORT":137,"EADDRNOTAVAIL":4,"ENETRESET":39,"EISCONN":30,"ENOTCONN":53,"ETOOMANYREFS":141,"EUSERS":136,"EDQUOT":19,"ESTALE":72,"ENOTSUP":138,"ENOMEDIUM":148,"EILSEQ":25,"EOVERFLOW":61,"ECANCELED":11,"ENOTRECOVERABLE":56,"EOWNERDEAD":62,"ESTRPIPE":135};Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestFullScreen"]=function Module_requestFullScreen(){Browser.requestFullScreen()};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;function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings")}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=createExportWrapper("__wasm_call_ctors");var _main=Module["_main"]=createExportWrapper("main");var _olc_OnPageUnload=Module["_olc_OnPageUnload"]=createExportWrapper("olc_OnPageUnload");var _olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=createExportWrapper("olc_PGE_UpdateWindowSize");var _malloc=createExportWrapper("malloc");var setTempRet0=createExportWrapper("setTempRet0");var _free=createExportWrapper("free");var ___errno_location=createExportWrapper("__errno_location");var _fflush=Module["_fflush"]=createExportWrapper("fflush");var _setThrew=createExportWrapper("setThrew");var _emscripten_stack_init=function(){return(_emscripten_stack_init=Module["asm"]["emscripten_stack_init"]).apply(null,arguments)};var _emscripten_stack_get_free=function(){return(_emscripten_stack_get_free=Module["asm"]["emscripten_stack_get_free"]).apply(null,arguments)};var _emscripten_stack_get_base=function(){return(_emscripten_stack_get_base=Module["asm"]["emscripten_stack_get_base"]).apply(null,arguments)};var _emscripten_stack_get_end=function(){return(_emscripten_stack_get_end=Module["asm"]["emscripten_stack_get_end"]).apply(null,arguments)};var stackSave=createExportWrapper("stackSave");var stackRestore=createExportWrapper("stackRestore");var stackAlloc=createExportWrapper("stackAlloc");var _emscripten_stack_get_current=function(){return(_emscripten_stack_get_current=Module["asm"]["emscripten_stack_get_current"]).apply(null,arguments)};var ___cxa_is_pointer_type=createExportWrapper("__cxa_is_pointer_type");var dynCall_viijii=Module["dynCall_viijii"]=createExportWrapper("dynCall_viijii");var dynCall_jiji=Module["dynCall_jiji"]=createExportWrapper("dynCall_jiji");var dynCall_iiiiij=Module["dynCall_iiiiij"]=createExportWrapper("dynCall_iiiiij");var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=createExportWrapper("dynCall_iiiiijj");var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=createExportWrapper("dynCall_iiiiiijj");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)}}function applySignatureConversions(exports){exports=Object.assign({},exports);var makeWrapper_pp=f=>a0=>f(a0)>>>0;var makeWrapper_p=f=>()=>f()>>>0;exports["malloc"]=makeWrapper_pp(exports["malloc"]);exports["__errno_location"]=makeWrapper_p(exports["__errno_location"]);exports["emscripten_stack_get_base"]=makeWrapper_p(exports["emscripten_stack_get_base"]);exports["emscripten_stack_get_end"]=makeWrapper_p(exports["emscripten_stack_get_end"]);exports["stackSave"]=makeWrapper_p(exports["stackSave"]);exports["stackAlloc"]=makeWrapper_pp(exports["stackAlloc"]);exports["emscripten_stack_get_current"]=makeWrapper_p(exports["emscripten_stack_get_current"]);return exports}function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE!="undefined"&&ENVIRONMENT_IS_NODE){var buf=Buffer.from(s,"base64");return new Uint8Array(buf["buffer"],buf["byteOffset"],buf["byteLength"])}try{var decoded=atob(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i0){return}stackCheckInit();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()}checkStackCookie()}function checkUnflushedContent(){var oldOut=out;var oldErr=err;var has=false;out=err=x=>{has=true};try{_fflush(0);["stdout","stderr"].forEach((function(name){var info=FS.analyzePath("/dev/"+name);if(!info)return;var stream=info.object;var rdev=stream.rdev;var tty=TTY.ttys[rdev];if(tty&&tty.output&&tty.output.length){has=true}}))}catch(e){}out=oldOut;err=oldErr;if(has){warnOnce("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.")}}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 2fa1fe3ffed38a86730d83dc1bb4c3e9db159753..c4a62c5a0cf77e72b634c2592ecdb4ad23778156 100755 GIT binary patch delta 138603 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 delta 119407 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 diff --git a/dirtblock.png b/assets/dirtblock.png similarity index 100% rename from dirtblock.png rename to assets/dirtblock.png diff --git a/assets/unitcube.obj b/assets/unitcube.obj new file mode 100644 index 0000000..9413c49 --- /dev/null +++ b/assets/unitcube.obj @@ -0,0 +1,26 @@ +v 0 0 0 +v 0 0 1 +v 0 1 0 +v 0 1 1 +v 1 0 0 +v 1 0 1 +v 1 1 0 +v 1 1 1 + +vt 0 0 #1 +vt 0 1 #2 +vt 1 0 #3 +vt 1 1 #4 + +f 1/2 3/1 7/3 #South/0 +f 1/2 7/3 5/4 #1 +f 5/2 7/1 8/3 #East/2 +f 5/2 8/3 6/4 #3 +f 6/2 8/1 4/3 #North/4 +f 6/2 4/3 2/4 #5 +f 2/2 4/1 3/3 #West/6 +f 2/2 3/3 1/4 #7 +f 3/2 4/1 8/3 #Top/8 +f 3/2 8/3 7/4 #9 +f 6/2 2/1 1/3 #Bottom/10 +f 6/2 1/3 5/4 #11 \ No newline at end of file diff --git a/main.cpp b/main.cpp index dbb67ae..00f644c 100644 --- a/main.cpp +++ b/main.cpp @@ -1,49 +1,92 @@ #include "pixelGameEngine.h" +#define OLC_PGEX_GRAPHICS3D +#include "olcPGEX_Graphics3D.h" using namespace olc; -#define WIDTH 640 -#define HEIGHT 480 - -class Example : public olc::PixelGameEngine +class Graphics3DPGEX_Example : public olc::PixelGameEngine { - + GFX3D::mesh cube; + GFX3D::PipeLine renderer; + + GFX3D::vec3d vUp = {0,1,0}; + GFX3D::vec3d vEye = {0,0,-4}; + GFX3D::vec3d vLookDir = {0,0,1}; + float fTheta=0; + + Sprite*cubeTex; + public: - Example() + Graphics3DPGEX_Example() { - sAppName = "Example"; + sAppName = "Graphics3D PGEX Example"; } public: - olc::Key last; bool OnUserCreate() override { - std::cout<<"Test"< +#include +#include +#undef min +#undef max + +namespace olc +{ + // Container class for Advanced 2D Drawing functions + class GFX3D : public olc::PGEX + { + + public: + + struct vec2d + { + float x = 0; + float y = 0; + float z = 0; + }; + + struct vec3d + { + float x = 0; + float y = 0; + float z = 0; + float w = 1; // Need a 4th term to perform sensible matrix vector multiplication + }; + + struct triangle + { + vec3d p[3]; + vec2d t[3]; + olc::Pixel col; + }; + + struct mat4x4 + { + float m[4][4] = { 0 }; + }; + + struct mesh + { + std::vector tris; + }; + + class Math + { + public: + inline Math(); + public: + inline static vec3d Mat_MultiplyVector(mat4x4 &m, vec3d &i); + inline static mat4x4 Mat_MultiplyMatrix(mat4x4 &m1, mat4x4 &m2); + inline static mat4x4 Mat_MakeIdentity(); + inline static mat4x4 Mat_MakeRotationX(float fAngleRad); + inline static mat4x4 Mat_MakeRotationY(float fAngleRad); + inline static mat4x4 Mat_MakeRotationZ(float fAngleRad); + inline static mat4x4 Mat_MakeScale(float x, float y, float z); + inline static mat4x4 Mat_MakeTranslation(float x, float y, float z); + inline static mat4x4 Mat_MakeProjection(float fFovDegrees, float fAspectRatio, float fNear, float fFar); + inline static mat4x4 Mat_PointAt(vec3d &pos, vec3d &target, vec3d &up); + inline static mat4x4 Mat_QuickInverse(mat4x4 &m); // Only for Rotation/Translation Matrices + inline static mat4x4 Mat_Inverse(olc::GFX3D::mat4x4 &m); + + inline static vec3d Vec_Add(vec3d &v1, vec3d &v2); + inline static vec3d Vec_Sub(vec3d &v1, vec3d &v2); + inline static vec3d Vec_Mul(vec3d &v1, float k); + inline static vec3d Vec_Div(vec3d &v1, float k); + inline static float Vec_DotProduct(vec3d &v1, vec3d &v2); + inline static float Vec_Length(vec3d &v); + inline static vec3d Vec_Normalise(vec3d &v); + inline static vec3d Vec_CrossProduct(vec3d &v1, vec3d &v2); + inline static vec3d Vec_IntersectPlane(vec3d &plane_p, vec3d &plane_n, vec3d &lineStart, vec3d &lineEnd, float &t); + + inline static int Triangle_ClipAgainstPlane(vec3d plane_p, vec3d plane_n, triangle &in_tri, triangle &out_tri1, triangle &out_tri2); + }; + + enum RENDERFLAGS + { + RENDER_WIRE = 0x01, + RENDER_FLAT = 0x02, + RENDER_TEXTURED = 0x04, + RENDER_CULL_CW = 0x08, + RENDER_CULL_CCW = 0x10, + RENDER_DEPTH = 0x20, + }; + + + class PipeLine + { + public: + PipeLine(); + + public: + void SetProjection(float fFovDegrees, float fAspectRatio, float fNear, float fFar, float fLeft, float fTop, float fWidth, float fHeight); + void SetCamera(olc::GFX3D::vec3d &pos, olc::GFX3D::vec3d &lookat, olc::GFX3D::vec3d &up); + void SetTransform(olc::GFX3D::mat4x4 &transform); + void SetTexture(olc::Sprite *texture); + void SetLightSource(olc::GFX3D::vec3d &pos, olc::GFX3D::vec3d &dir, olc::Pixel &col); + uint32_t Render(std::vector &triangles, uint32_t flags = RENDER_CULL_CW | RENDER_TEXTURED | RENDER_DEPTH); + + private: + olc::GFX3D::mat4x4 matProj; + olc::GFX3D::mat4x4 matView; + olc::GFX3D::mat4x4 matWorld; + olc::Sprite *sprTexture; + float fViewX; + float fViewY; + float fViewW; + float fViewH; + }; + + + + public: + //static const int RF_TEXTURE = 0x00000001; + //static const int RF_ = 0x00000002; + + inline static void ConfigureDisplay(); + inline static void ClearDepth(); + inline static void AddTriangleToScene(olc::GFX3D::triangle &tri); + inline static void RenderScene(); + + inline static void DrawTriangleFlat(olc::GFX3D::triangle &tri); + inline static void DrawTriangleWire(olc::GFX3D::triangle &tri, olc::Pixel col = olc::WHITE); + inline static void DrawTriangleTex(olc::GFX3D::triangle &tri, olc::Sprite* spr); + inline static void TexturedTriangle(int x1, int y1, float u1, float v1, float w1, + int x2, int y2, float u2, float v2, float w2, + int x3, int y3, float u3, float v3, float w3, olc::Sprite* spr); + + // Draws a sprite with the transform applied + //inline static void DrawSprite(olc::Sprite *sprite, olc::GFX2D::Transform2D &transform); + + private: + static float* m_DepthBuffer; + }; +} + + + + +namespace olc +{ + olc::GFX3D::Math::Math() + { + + } + + olc::GFX3D::vec3d olc::GFX3D::Math::Mat_MultiplyVector(olc::GFX3D::mat4x4 &m, olc::GFX3D::vec3d &i) + { + vec3d v; + v.x = i.x * m.m[0][0] + i.y * m.m[1][0] + i.z * m.m[2][0] + i.w * m.m[3][0]; + v.y = i.x * m.m[0][1] + i.y * m.m[1][1] + i.z * m.m[2][1] + i.w * m.m[3][1]; + v.z = i.x * m.m[0][2] + i.y * m.m[1][2] + i.z * m.m[2][2] + i.w * m.m[3][2]; + v.w = i.x * m.m[0][3] + i.y * m.m[1][3] + i.z * m.m[2][3] + i.w * m.m[3][3]; + return v; + } + + olc::GFX3D::mat4x4 olc::GFX3D::Math::Mat_MakeIdentity() + { + olc::GFX3D::mat4x4 matrix; + matrix.m[0][0] = 1.0f; + matrix.m[1][1] = 1.0f; + matrix.m[2][2] = 1.0f; + matrix.m[3][3] = 1.0f; + return matrix; + } + + olc::GFX3D::mat4x4 olc::GFX3D::Math::Mat_MakeRotationX(float fAngleRad) + { + olc::GFX3D::mat4x4 matrix; + matrix.m[0][0] = 1.0f; + matrix.m[1][1] = cosf(fAngleRad); + matrix.m[1][2] = sinf(fAngleRad); + matrix.m[2][1] = -sinf(fAngleRad); + matrix.m[2][2] = cosf(fAngleRad); + matrix.m[3][3] = 1.0f; + return matrix; + } + + olc::GFX3D::mat4x4 olc::GFX3D::Math::Mat_MakeRotationY(float fAngleRad) + { + olc::GFX3D::mat4x4 matrix; + matrix.m[0][0] = cosf(fAngleRad); + matrix.m[0][2] = sinf(fAngleRad); + matrix.m[2][0] = -sinf(fAngleRad); + matrix.m[1][1] = 1.0f; + matrix.m[2][2] = cosf(fAngleRad); + matrix.m[3][3] = 1.0f; + return matrix; + } + + olc::GFX3D::mat4x4 olc::GFX3D::Math::Mat_MakeRotationZ(float fAngleRad) + { + olc::GFX3D::mat4x4 matrix; + matrix.m[0][0] = cosf(fAngleRad); + matrix.m[0][1] = sinf(fAngleRad); + matrix.m[1][0] = -sinf(fAngleRad); + matrix.m[1][1] = cosf(fAngleRad); + matrix.m[2][2] = 1.0f; + matrix.m[3][3] = 1.0f; + return matrix; + } + + olc::GFX3D::mat4x4 olc::GFX3D::Math::Mat_MakeScale(float x, float y, float z) + { + olc::GFX3D::mat4x4 matrix; + matrix.m[0][0] = x; + matrix.m[1][1] = y; + matrix.m[2][2] = z; + matrix.m[3][3] = 1.0f; + return matrix; + } + + olc::GFX3D::mat4x4 olc::GFX3D::Math::Mat_MakeTranslation(float x, float y, float z) + { + olc::GFX3D::mat4x4 matrix; + matrix.m[0][0] = 1.0f; + matrix.m[1][1] = 1.0f; + matrix.m[2][2] = 1.0f; + matrix.m[3][3] = 1.0f; + matrix.m[3][0] = x; + matrix.m[3][1] = y; + matrix.m[3][2] = z; + return matrix; + } + + olc::GFX3D::mat4x4 olc::GFX3D::Math::Mat_MakeProjection(float fFovDegrees, float fAspectRatio, float fNear, float fFar) + { + float fFovRad = 1.0f / tanf(fFovDegrees * 0.5f / 180.0f * 3.14159f); + olc::GFX3D::mat4x4 matrix; + matrix.m[0][0] = fAspectRatio * fFovRad; + matrix.m[1][1] = fFovRad; + matrix.m[2][2] = fFar / (fFar - fNear); + matrix.m[3][2] = (-fFar * fNear) / (fFar - fNear); + matrix.m[2][3] = 1.0f; + matrix.m[3][3] = 0.0f; + return matrix; + } + + olc::GFX3D::mat4x4 olc::GFX3D::Math::Mat_MultiplyMatrix(olc::GFX3D::mat4x4 &m1, olc::GFX3D::mat4x4 &m2) + { + olc::GFX3D::mat4x4 matrix; + for (int c = 0; c < 4; c++) + for (int r = 0; r < 4; r++) + matrix.m[r][c] = m1.m[r][0] * m2.m[0][c] + m1.m[r][1] * m2.m[1][c] + m1.m[r][2] * m2.m[2][c] + m1.m[r][3] * m2.m[3][c]; + return matrix; + } + + olc::GFX3D::mat4x4 olc::GFX3D::Math::Mat_PointAt(olc::GFX3D::vec3d &pos, olc::GFX3D::vec3d &target, olc::GFX3D::vec3d &up) + { + // Calculate new forward direction + olc::GFX3D::vec3d newForward = Vec_Sub(target, pos); + newForward = Vec_Normalise(newForward); + + // Calculate new Up direction + olc::GFX3D::vec3d a = Vec_Mul(newForward, Vec_DotProduct(up, newForward)); + olc::GFX3D::vec3d newUp = Vec_Sub(up, a); + newUp = Vec_Normalise(newUp); + + // New Right direction is easy, its just cross product + olc::GFX3D::vec3d newRight = Vec_CrossProduct(newUp, newForward); + + // Construct Dimensioning and Translation Matrix + olc::GFX3D::mat4x4 matrix; + matrix.m[0][0] = newRight.x; matrix.m[0][1] = newRight.y; matrix.m[0][2] = newRight.z; matrix.m[0][3] = 0.0f; + matrix.m[1][0] = newUp.x; matrix.m[1][1] = newUp.y; matrix.m[1][2] = newUp.z; matrix.m[1][3] = 0.0f; + matrix.m[2][0] = newForward.x; matrix.m[2][1] = newForward.y; matrix.m[2][2] = newForward.z; matrix.m[2][3] = 0.0f; + matrix.m[3][0] = pos.x; matrix.m[3][1] = pos.y; matrix.m[3][2] = pos.z; matrix.m[3][3] = 1.0f; + return matrix; + + } + + olc::GFX3D::mat4x4 olc::GFX3D::Math::Mat_QuickInverse(olc::GFX3D::mat4x4 &m) // Only for Rotation/Translation Matrices + { + olc::GFX3D::mat4x4 matrix; + matrix.m[0][0] = m.m[0][0]; matrix.m[0][1] = m.m[1][0]; matrix.m[0][2] = m.m[2][0]; matrix.m[0][3] = 0.0f; + matrix.m[1][0] = m.m[0][1]; matrix.m[1][1] = m.m[1][1]; matrix.m[1][2] = m.m[2][1]; matrix.m[1][3] = 0.0f; + matrix.m[2][0] = m.m[0][2]; matrix.m[2][1] = m.m[1][2]; matrix.m[2][2] = m.m[2][2]; matrix.m[2][3] = 0.0f; + matrix.m[3][0] = -(m.m[3][0] * matrix.m[0][0] + m.m[3][1] * matrix.m[1][0] + m.m[3][2] * matrix.m[2][0]); + matrix.m[3][1] = -(m.m[3][0] * matrix.m[0][1] + m.m[3][1] * matrix.m[1][1] + m.m[3][2] * matrix.m[2][1]); + matrix.m[3][2] = -(m.m[3][0] * matrix.m[0][2] + m.m[3][1] * matrix.m[1][2] + m.m[3][2] * matrix.m[2][2]); + matrix.m[3][3] = 1.0f; + return matrix; + } + + olc::GFX3D::mat4x4 olc::GFX3D::Math::Mat_Inverse(olc::GFX3D::mat4x4 &m) + { + double det; + + + mat4x4 matInv; + + matInv.m[0][0] = m.m[1][1] * m.m[2][2] * m.m[3][3] - m.m[1][1] * m.m[2][3] * m.m[3][2] - m.m[2][1] * m.m[1][2] * m.m[3][3] + m.m[2][1] * m.m[1][3] * m.m[3][2] + m.m[3][1] * m.m[1][2] * m.m[2][3] - m.m[3][1] * m.m[1][3] * m.m[2][2]; + matInv.m[1][0] = -m.m[1][0] * m.m[2][2] * m.m[3][3] + m.m[1][0] * m.m[2][3] * m.m[3][2] + m.m[2][0] * m.m[1][2] * m.m[3][3] - m.m[2][0] * m.m[1][3] * m.m[3][2] - m.m[3][0] * m.m[1][2] * m.m[2][3] + m.m[3][0] * m.m[1][3] * m.m[2][2]; + matInv.m[2][0] = m.m[1][0] * m.m[2][1] * m.m[3][3] - m.m[1][0] * m.m[2][3] * m.m[3][1] - m.m[2][0] * m.m[1][1] * m.m[3][3] + m.m[2][0] * m.m[1][3] * m.m[3][1] + m.m[3][0] * m.m[1][1] * m.m[2][3] - m.m[3][0] * m.m[1][3] * m.m[2][1]; + matInv.m[3][0] = -m.m[1][0] * m.m[2][1] * m.m[3][2] + m.m[1][0] * m.m[2][2] * m.m[3][1] + m.m[2][0] * m.m[1][1] * m.m[3][2] - m.m[2][0] * m.m[1][2] * m.m[3][1] - m.m[3][0] * m.m[1][1] * m.m[2][2] + m.m[3][0] * m.m[1][2] * m.m[2][1]; + matInv.m[0][1] = -m.m[0][1] * m.m[2][2] * m.m[3][3] + m.m[0][1] * m.m[2][3] * m.m[3][2] + m.m[2][1] * m.m[0][2] * m.m[3][3] - m.m[2][1] * m.m[0][3] * m.m[3][2] - m.m[3][1] * m.m[0][2] * m.m[2][3] + m.m[3][1] * m.m[0][3] * m.m[2][2]; + matInv.m[1][1] = m.m[0][0] * m.m[2][2] * m.m[3][3] - m.m[0][0] * m.m[2][3] * m.m[3][2] - m.m[2][0] * m.m[0][2] * m.m[3][3] + m.m[2][0] * m.m[0][3] * m.m[3][2] + m.m[3][0] * m.m[0][2] * m.m[2][3] - m.m[3][0] * m.m[0][3] * m.m[2][2]; + matInv.m[2][1] = -m.m[0][0] * m.m[2][1] * m.m[3][3] + m.m[0][0] * m.m[2][3] * m.m[3][1] + m.m[2][0] * m.m[0][1] * m.m[3][3] - m.m[2][0] * m.m[0][3] * m.m[3][1] - m.m[3][0] * m.m[0][1] * m.m[2][3] + m.m[3][0] * m.m[0][3] * m.m[2][1]; + matInv.m[3][1] = m.m[0][0] * m.m[2][1] * m.m[3][2] - m.m[0][0] * m.m[2][2] * m.m[3][1] - m.m[2][0] * m.m[0][1] * m.m[3][2] + m.m[2][0] * m.m[0][2] * m.m[3][1] + m.m[3][0] * m.m[0][1] * m.m[2][2] - m.m[3][0] * m.m[0][2] * m.m[2][1]; + matInv.m[0][2] = m.m[0][1] * m.m[1][2] * m.m[3][3] - m.m[0][1] * m.m[1][3] * m.m[3][2] - m.m[1][1] * m.m[0][2] * m.m[3][3] + m.m[1][1] * m.m[0][3] * m.m[3][2] + m.m[3][1] * m.m[0][2] * m.m[1][3] - m.m[3][1] * m.m[0][3] * m.m[1][2]; + matInv.m[1][2] = -m.m[0][0] * m.m[1][2] * m.m[3][3] + m.m[0][0] * m.m[1][3] * m.m[3][2] + m.m[1][0] * m.m[0][2] * m.m[3][3] - m.m[1][0] * m.m[0][3] * m.m[3][2] - m.m[3][0] * m.m[0][2] * m.m[1][3] + m.m[3][0] * m.m[0][3] * m.m[1][2]; + matInv.m[2][2] = m.m[0][0] * m.m[1][1] * m.m[3][3] - m.m[0][0] * m.m[1][3] * m.m[3][1] - m.m[1][0] * m.m[0][1] * m.m[3][3] + m.m[1][0] * m.m[0][3] * m.m[3][1] + m.m[3][0] * m.m[0][1] * m.m[1][3] - m.m[3][0] * m.m[0][3] * m.m[1][1]; + matInv.m[3][2] = -m.m[0][0] * m.m[1][1] * m.m[3][2] + m.m[0][0] * m.m[1][2] * m.m[3][1] + m.m[1][0] * m.m[0][1] * m.m[3][2] - m.m[1][0] * m.m[0][2] * m.m[3][1] - m.m[3][0] * m.m[0][1] * m.m[1][2] + m.m[3][0] * m.m[0][2] * m.m[1][1]; + matInv.m[0][3] = -m.m[0][1] * m.m[1][2] * m.m[2][3] + m.m[0][1] * m.m[1][3] * m.m[2][2] + m.m[1][1] * m.m[0][2] * m.m[2][3] - m.m[1][1] * m.m[0][3] * m.m[2][2] - m.m[2][1] * m.m[0][2] * m.m[1][3] + m.m[2][1] * m.m[0][3] * m.m[1][2]; + matInv.m[1][3] = m.m[0][0] * m.m[1][2] * m.m[2][3] - m.m[0][0] * m.m[1][3] * m.m[2][2] - m.m[1][0] * m.m[0][2] * m.m[2][3] + m.m[1][0] * m.m[0][3] * m.m[2][2] + m.m[2][0] * m.m[0][2] * m.m[1][3] - m.m[2][0] * m.m[0][3] * m.m[1][2]; + matInv.m[2][3] = -m.m[0][0] * m.m[1][1] * m.m[2][3] + m.m[0][0] * m.m[1][3] * m.m[2][1] + m.m[1][0] * m.m[0][1] * m.m[2][3] - m.m[1][0] * m.m[0][3] * m.m[2][1] - m.m[2][0] * m.m[0][1] * m.m[1][3] + m.m[2][0] * m.m[0][3] * m.m[1][1]; + matInv.m[3][3] = m.m[0][0] * m.m[1][1] * m.m[2][2] - m.m[0][0] * m.m[1][2] * m.m[2][1] - m.m[1][0] * m.m[0][1] * m.m[2][2] + m.m[1][0] * m.m[0][2] * m.m[2][1] + m.m[2][0] * m.m[0][1] * m.m[1][2] - m.m[2][0] * m.m[0][2] * m.m[1][1]; + + det = m.m[0][0] * matInv.m[0][0] + m.m[0][1] * matInv.m[1][0] + m.m[0][2] * matInv.m[2][0] + m.m[0][3] * matInv.m[3][0]; + // if (det == 0) return false; + + det = 1.0 / det; + + for (int i = 0; i < 4; i++) + for (int j = 0; j < 4; j++) + matInv.m[i][j] *= (float)det; + + return matInv; + } + + olc::GFX3D::vec3d olc::GFX3D::Math::Vec_Add(olc::GFX3D::vec3d &v1, olc::GFX3D::vec3d &v2) + { + return { v1.x + v2.x, v1.y + v2.y, v1.z + v2.z }; + } + + olc::GFX3D::vec3d olc::GFX3D::Math::Vec_Sub(olc::GFX3D::vec3d &v1, olc::GFX3D::vec3d &v2) + { + return { v1.x - v2.x, v1.y - v2.y, v1.z - v2.z }; + } + + olc::GFX3D::vec3d olc::GFX3D::Math::Vec_Mul(olc::GFX3D::vec3d &v1, float k) + { + return { v1.x * k, v1.y * k, v1.z * k }; + } + + olc::GFX3D::vec3d olc::GFX3D::Math::Vec_Div(olc::GFX3D::vec3d &v1, float k) + { + return { v1.x / k, v1.y / k, v1.z / k }; + } + + float olc::GFX3D::Math::Vec_DotProduct(olc::GFX3D::vec3d &v1, olc::GFX3D::vec3d &v2) + { + return v1.x*v2.x + v1.y*v2.y + v1.z * v2.z; + } + + float olc::GFX3D::Math::Vec_Length(olc::GFX3D::vec3d &v) + { + return sqrtf(Vec_DotProduct(v, v)); + } + + olc::GFX3D::vec3d olc::GFX3D::Math::Vec_Normalise(olc::GFX3D::vec3d &v) + { + float l = Vec_Length(v); + return { v.x / l, v.y / l, v.z / l }; + } + + olc::GFX3D::vec3d olc::GFX3D::Math::Vec_CrossProduct(olc::GFX3D::vec3d &v1, olc::GFX3D::vec3d &v2) + { + vec3d v; + v.x = v1.y * v2.z - v1.z * v2.y; + v.y = v1.z * v2.x - v1.x * v2.z; + v.z = v1.x * v2.y - v1.y * v2.x; + return v; + } + + olc::GFX3D::vec3d olc::GFX3D::Math::Vec_IntersectPlane(olc::GFX3D::vec3d &plane_p, olc::GFX3D::vec3d &plane_n, olc::GFX3D::vec3d &lineStart, olc::GFX3D::vec3d &lineEnd, float &t) + { + plane_n = Vec_Normalise(plane_n); + float plane_d = -Vec_DotProduct(plane_n, plane_p); + float ad = Vec_DotProduct(lineStart, plane_n); + float bd = Vec_DotProduct(lineEnd, plane_n); + t = (-plane_d - ad) / (bd - ad); + olc::GFX3D::vec3d lineStartToEnd = Vec_Sub(lineEnd, lineStart); + olc::GFX3D::vec3d lineToIntersect = Vec_Mul(lineStartToEnd, t); + return Vec_Add(lineStart, lineToIntersect); + } + + + int olc::GFX3D::Math::Triangle_ClipAgainstPlane(vec3d plane_p, vec3d plane_n, triangle &in_tri, triangle &out_tri1, triangle &out_tri2) + { + // Make sure plane normal is indeed normal + plane_n = Math::Vec_Normalise(plane_n); + + out_tri1.t[0] = in_tri.t[0]; + out_tri2.t[0] = in_tri.t[0]; + out_tri1.t[1] = in_tri.t[1]; + out_tri2.t[1] = in_tri.t[1]; + out_tri1.t[2] = in_tri.t[2]; + out_tri2.t[2] = in_tri.t[2]; + + // Return signed shortest distance from point to plane, plane normal must be normalised + auto dist = [&](vec3d &p) + { + vec3d n = Math::Vec_Normalise(p); + return (plane_n.x * p.x + plane_n.y * p.y + plane_n.z * p.z - Math::Vec_DotProduct(plane_n, plane_p)); + }; + + // Create two temporary storage arrays to classify points either side of plane + // If distance sign is positive, point lies on "inside" of plane + vec3d* inside_points[3]; int nInsidePointCount = 0; + vec3d* outside_points[3]; int nOutsidePointCount = 0; + vec2d* inside_tex[3]; int nInsideTexCount = 0; + vec2d* outside_tex[3]; int nOutsideTexCount = 0; + + + // Get signed distance of each point in triangle to plane + float d0 = dist(in_tri.p[0]); + float d1 = dist(in_tri.p[1]); + float d2 = dist(in_tri.p[2]); + + if (d0 >= 0) { inside_points[nInsidePointCount++] = &in_tri.p[0]; inside_tex[nInsideTexCount++] = &in_tri.t[0]; } + else { + outside_points[nOutsidePointCount++] = &in_tri.p[0]; outside_tex[nOutsideTexCount++] = &in_tri.t[0]; + } + if (d1 >= 0) { + inside_points[nInsidePointCount++] = &in_tri.p[1]; inside_tex[nInsideTexCount++] = &in_tri.t[1]; + } + else { + outside_points[nOutsidePointCount++] = &in_tri.p[1]; outside_tex[nOutsideTexCount++] = &in_tri.t[1]; + } + if (d2 >= 0) { + inside_points[nInsidePointCount++] = &in_tri.p[2]; inside_tex[nInsideTexCount++] = &in_tri.t[2]; + } + else { + outside_points[nOutsidePointCount++] = &in_tri.p[2]; outside_tex[nOutsideTexCount++] = &in_tri.t[2]; + } + + // Now classify triangle points, and break the input triangle into + // smaller output triangles if required. There are four possible + // outcomes... + + if (nInsidePointCount == 0) + { + // All points lie on the outside of plane, so clip whole triangle + // It ceases to exist + + return 0; // No returned triangles are valid + } + + if (nInsidePointCount == 3) + { + // All points lie on the inside of plane, so do nothing + // and allow the triangle to simply pass through + out_tri1 = in_tri; + + return 1; // Just the one returned original triangle is valid + } + + if (nInsidePointCount == 1 && nOutsidePointCount == 2) + { + // Triangle should be clipped. As two points lie outside + // the plane, the triangle simply becomes a smaller triangle + + // Copy appearance info to new triangle + out_tri1.col = olc::MAGENTA;// in_tri.col; + + // The inside point is valid, so keep that... + out_tri1.p[0] = *inside_points[0]; + out_tri1.t[0] = *inside_tex[0]; + + // but the two new points are at the locations where the + // original sides of the triangle (lines) intersect with the plane + float t; + out_tri1.p[1] = Math::Vec_IntersectPlane(plane_p, plane_n, *inside_points[0], *outside_points[0], t); + out_tri1.t[1].x = t * (outside_tex[0]->x - inside_tex[0]->x) + inside_tex[0]->x; + out_tri1.t[1].y = t * (outside_tex[0]->y - inside_tex[0]->y) + inside_tex[0]->y; + out_tri1.t[1].z = t * (outside_tex[0]->z - inside_tex[0]->z) + inside_tex[0]->z; + + out_tri1.p[2] = Math::Vec_IntersectPlane(plane_p, plane_n, *inside_points[0], *outside_points[1], t); + out_tri1.t[2].x = t * (outside_tex[1]->x - inside_tex[0]->x) + inside_tex[0]->x; + out_tri1.t[2].y = t * (outside_tex[1]->y - inside_tex[0]->y) + inside_tex[0]->y; + out_tri1.t[2].z = t * (outside_tex[1]->z - inside_tex[0]->z) + inside_tex[0]->z; + + return 1; // Return the newly formed single triangle + } + + if (nInsidePointCount == 2 && nOutsidePointCount == 1) + { + // Triangle should be clipped. As two points lie inside the plane, + // the clipped triangle becomes a "quad". Fortunately, we can + // represent a quad with two new triangles + + // Copy appearance info to new triangles + out_tri1.col = olc::GREEN;// in_tri.col; + out_tri2.col = olc::RED;// in_tri.col; + + // The first triangle consists of the two inside points and a new + // point determined by the location where one side of the triangle + // intersects with the plane + out_tri1.p[0] = *inside_points[0]; + out_tri1.t[0] = *inside_tex[0]; + + out_tri1.p[1] = *inside_points[1]; + out_tri1.t[1] = *inside_tex[1]; + + float t; + out_tri1.p[2] = Math::Vec_IntersectPlane(plane_p, plane_n, *inside_points[0], *outside_points[0], t); + out_tri1.t[2].x = t * (outside_tex[0]->x - inside_tex[0]->x) + inside_tex[0]->x; + out_tri1.t[2].y = t * (outside_tex[0]->y - inside_tex[0]->y) + inside_tex[0]->y; + out_tri1.t[2].z = t * (outside_tex[0]->z - inside_tex[0]->z) + inside_tex[0]->z; + + // The second triangle is composed of one of he inside points, a + // new point determined by the intersection of the other side of the + // triangle and the plane, and the newly created point above + out_tri2.p[1] = *inside_points[1]; + out_tri2.t[1] = *inside_tex[1]; + out_tri2.p[0] = out_tri1.p[2]; + out_tri2.t[0] = out_tri1.t[2]; + out_tri2.p[2] = Math::Vec_IntersectPlane(plane_p, plane_n, *inside_points[1], *outside_points[0], t); + out_tri2.t[2].x = t * (outside_tex[0]->x - inside_tex[1]->x) + inside_tex[1]->x; + out_tri2.t[2].y = t * (outside_tex[0]->y - inside_tex[1]->y) + inside_tex[1]->y; + out_tri2.t[2].z = t * (outside_tex[0]->z - inside_tex[1]->z) + inside_tex[1]->z; + return 2; // Return two newly formed triangles which form a quad + } + + return 0; + } + + void GFX3D::DrawTriangleFlat(olc::GFX3D::triangle &tri) + { + pge->FillTriangle(tri.p[0].x, tri.p[0].y, tri.p[1].x, tri.p[1].y, tri.p[2].x, tri.p[2].y, tri.col); + } + + void GFX3D::DrawTriangleWire(olc::GFX3D::triangle &tri, olc::Pixel col) + { + pge->DrawTriangle(tri.p[0].x, tri.p[0].y, tri.p[1].x, tri.p[1].y, tri.p[2].x, tri.p[2].y, col); + } + + void GFX3D::TexturedTriangle(int x1, int y1, float u1, float v1, float w1, + int x2, int y2, float u2, float v2, float w2, + int x3, int y3, float u3, float v3, float w3, olc::Sprite* spr) + { + pge->FillTexturedTriangle({{float(x1),float(y1)},{float(x2),float(y2)},{float(x3),float(y3)}},{{u1,v1},{u2,v2},{u3,v3}},{WHITE,WHITE,WHITE},spr); + } + + float* GFX3D::m_DepthBuffer = nullptr; + + void GFX3D::ConfigureDisplay() + { + m_DepthBuffer = new float[pge->ScreenWidth() * pge->ScreenHeight()]{ 0 }; + } + + + void GFX3D::ClearDepth() + { + memset(m_DepthBuffer, 0, pge->ScreenWidth() * pge->ScreenHeight() * sizeof(float)); + } + + + + + GFX3D::PipeLine::PipeLine() + { + + } + + void GFX3D::PipeLine::SetProjection(float fFovDegrees, float fAspectRatio, float fNear, float fFar, float fLeft, float fTop, float fWidth, float fHeight) + { + matProj = GFX3D::Math::Mat_MakeProjection(fFovDegrees, fAspectRatio, fNear, fFar); + fViewX = fLeft; + fViewY = fTop; + fViewW = fWidth; + fViewH = fHeight; + } + + void GFX3D::PipeLine::SetCamera(olc::GFX3D::vec3d &pos, olc::GFX3D::vec3d &lookat, olc::GFX3D::vec3d &up) + { + matView = GFX3D::Math::Mat_PointAt(pos, lookat, up); + matView = GFX3D::Math::Mat_QuickInverse(matView); + } + + void GFX3D::PipeLine::SetTransform(olc::GFX3D::mat4x4 &transform) + { + matWorld = transform; + } + + void GFX3D::PipeLine::SetTexture(olc::Sprite *texture) + { + sprTexture = texture; + } + + void GFX3D::PipeLine::SetLightSource(olc::GFX3D::vec3d &pos, olc::GFX3D::vec3d &dir, olc::Pixel &col) + { + + } + + uint32_t GFX3D::PipeLine::Render(std::vector &triangles, uint32_t flags) + { + // Calculate Transformation Matrix + mat4x4 matWorldView = Math::Mat_MultiplyMatrix(matWorld, matView); + //matWorldViewProj = Math::Mat_MultiplyMatrix(matWorldView, matProj); + + // Store triangles for rastering later + std::vector vecTrianglesToRaster; + + int nTriangleDrawnCount = 0; + + // Process Triangles + for (auto &tri : triangles) + { + GFX3D::triangle triTransformed; + + // Just copy through texture coordinates + triTransformed.t[0] = { tri.t[0].x, tri.t[0].y, tri.t[0].z }; + triTransformed.t[1] = { tri.t[1].x, tri.t[1].y, tri.t[1].z }; + triTransformed.t[2] = { tri.t[2].x, tri.t[2].y, tri.t[2].z }; // Think! + + // Transform Triangle from object into projected space + triTransformed.p[0] = GFX3D::Math::Mat_MultiplyVector(matWorldView, tri.p[0]); + triTransformed.p[1] = GFX3D::Math::Mat_MultiplyVector(matWorldView, tri.p[1]); + triTransformed.p[2] = GFX3D::Math::Mat_MultiplyVector(matWorldView, tri.p[2]); + + // Calculate Triangle Normal in WorldView Space + GFX3D::vec3d normal, line1, line2; + line1 = GFX3D::Math::Vec_Sub(triTransformed.p[1], triTransformed.p[0]); + line2 = GFX3D::Math::Vec_Sub(triTransformed.p[2], triTransformed.p[0]); + normal = GFX3D::Math::Vec_CrossProduct(line1, line2); + normal = GFX3D::Math::Vec_Normalise(normal); + + // Cull triangles that face away from viewer + if (flags & RENDER_CULL_CW && GFX3D::Math::Vec_DotProduct(normal, triTransformed.p[0]) > 0.0f) continue; + if (flags & RENDER_CULL_CCW && GFX3D::Math::Vec_DotProduct(normal, triTransformed.p[0]) < 0.0f) continue; + + // If Lighting, calculate shading + triTransformed.col = olc::WHITE; + + // Clip triangle against near plane + int nClippedTriangles = 0; + triangle clipped[2]; + nClippedTriangles = GFX3D::Math::Triangle_ClipAgainstPlane({ 0.0f, 0.0f, 0.1f }, { 0.0f, 0.0f, 1.0f }, triTransformed, clipped[0], clipped[1]); + + // This may yield two new triangles + for (int n = 0; n < nClippedTriangles; n++) + { + triangle triProjected = clipped[n]; + + // Project new triangle + triProjected.p[0] = GFX3D::Math::Mat_MultiplyVector(matProj, clipped[n].p[0]); + triProjected.p[1] = GFX3D::Math::Mat_MultiplyVector(matProj, clipped[n].p[1]); + triProjected.p[2] = GFX3D::Math::Mat_MultiplyVector(matProj, clipped[n].p[2]); + + // Apply Projection to Verts + triProjected.p[0].x = triProjected.p[0].x / triProjected.p[0].w; + triProjected.p[1].x = triProjected.p[1].x / triProjected.p[1].w; + triProjected.p[2].x = triProjected.p[2].x / triProjected.p[2].w; + + triProjected.p[0].y = triProjected.p[0].y / triProjected.p[0].w; + triProjected.p[1].y = triProjected.p[1].y / triProjected.p[1].w; + triProjected.p[2].y = triProjected.p[2].y / triProjected.p[2].w; + + triProjected.p[0].z = triProjected.p[0].z / triProjected.p[0].w; + triProjected.p[1].z = triProjected.p[1].z / triProjected.p[1].w; + triProjected.p[2].z = triProjected.p[2].z / triProjected.p[2].w; + + // Apply Projection to Tex coords + triProjected.t[0].x = triProjected.t[0].x / triProjected.p[0].w; + triProjected.t[1].x = triProjected.t[1].x / triProjected.p[1].w; + triProjected.t[2].x = triProjected.t[2].x / triProjected.p[2].w; + + triProjected.t[0].y = triProjected.t[0].y / triProjected.p[0].w; + triProjected.t[1].y = triProjected.t[1].y / triProjected.p[1].w; + triProjected.t[2].y = triProjected.t[2].y / triProjected.p[2].w; + + triProjected.t[0].z = 1.0f / triProjected.p[0].w; + triProjected.t[1].z = 1.0f / triProjected.p[1].w; + triProjected.t[2].z = 1.0f / triProjected.p[2].w; + + // Clip against viewport in screen space + // Clip triangles against all four screen edges, this could yield + // a bunch of triangles, so create a queue that we traverse to + // ensure we only test new triangles generated against planes + triangle sclipped[2]; + std::list listTriangles; + + + // Add initial triangle + listTriangles.push_back(triProjected); + int nNewTriangles = 1; + + for (int p = 0; p < 4; p++) + { + int nTrisToAdd = 0; + while (nNewTriangles > 0) + { + // Take triangle from front of queue + triangle test = listTriangles.front(); + listTriangles.pop_front(); + nNewTriangles--; + + // Clip it against a plane. We only need to test each + // subsequent plane, against subsequent new triangles + // as all triangles after a plane clip are guaranteed + // to lie on the inside of the plane. I like how this + // comment is almost completely and utterly justified + switch (p) + { + case 0: nTrisToAdd = GFX3D::Math::Triangle_ClipAgainstPlane({ 0.0f, -1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, test, sclipped[0], sclipped[1]); break; + case 1: nTrisToAdd = GFX3D::Math::Triangle_ClipAgainstPlane({ 0.0f, +1.0f, 0.0f }, { 0.0f, -1.0f, 0.0f }, test, sclipped[0], sclipped[1]); break; + case 2: nTrisToAdd = GFX3D::Math::Triangle_ClipAgainstPlane({ -1.0f, 0.0f, 0.0f }, { 1.0f, 0.0f, 0.0f }, test, sclipped[0], sclipped[1]); break; + case 3: nTrisToAdd = GFX3D::Math::Triangle_ClipAgainstPlane({ +1.0f, 0.0f, 0.0f }, { -1.0f, 0.0f, 0.0f }, test, sclipped[0], sclipped[1]); break; + } + + + // Clipping may yield a variable number of triangles, so + // add these new ones to the back of the queue for subsequent + // clipping against next planes + for (int w = 0; w < nTrisToAdd; w++) + listTriangles.push_back(sclipped[w]); + } + nNewTriangles = listTriangles.size(); + } + + for (auto &triRaster : listTriangles) + { + // Scale to viewport + /*triRaster.p[0].x *= -1.0f; + triRaster.p[1].x *= -1.0f; + triRaster.p[2].x *= -1.0f; + triRaster.p[0].y *= -1.0f; + triRaster.p[1].y *= -1.0f; + triRaster.p[2].y *= -1.0f;*/ + vec3d vOffsetView = { 1,1,0 }; + triRaster.p[0] = Math::Vec_Add(triRaster.p[0], vOffsetView); + triRaster.p[1] = Math::Vec_Add(triRaster.p[1], vOffsetView); + triRaster.p[2] = Math::Vec_Add(triRaster.p[2], vOffsetView); + triRaster.p[0].x *= 0.5f * fViewW; + triRaster.p[0].y *= 0.5f * fViewH; + triRaster.p[1].x *= 0.5f * fViewW; + triRaster.p[1].y *= 0.5f * fViewH; + triRaster.p[2].x *= 0.5f * fViewW; + triRaster.p[2].y *= 0.5f * fViewH; + vOffsetView = { fViewX,fViewY,0 }; + triRaster.p[0] = Math::Vec_Add(triRaster.p[0], vOffsetView); + triRaster.p[1] = Math::Vec_Add(triRaster.p[1], vOffsetView); + triRaster.p[2] = Math::Vec_Add(triRaster.p[2], vOffsetView); + + // For now, just draw triangle + + if (flags & RENDER_TEXTURED) + { + TexturedTriangle( + triRaster.p[0].x, triRaster.p[0].y, triRaster.t[0].x, triRaster.t[0].y, triRaster.t[0].z, + triRaster.p[1].x, triRaster.p[1].y, triRaster.t[1].x, triRaster.t[1].y, triRaster.t[1].z, + triRaster.p[2].x, triRaster.p[2].y, triRaster.t[2].x, triRaster.t[2].y, triRaster.t[2].z, + sprTexture); + } + + if (flags & RENDER_WIRE) + { + DrawTriangleWire(triRaster, olc::RED); + } + + if (flags & RENDER_FLAT) + { + DrawTriangleFlat(triRaster); + } + + nTriangleDrawnCount++; + } + } + } + + return nTriangleDrawnCount; + } +} + +#endif \ No newline at end of file diff --git a/pixelGameEngine.h b/pixelGameEngine.h index 87f8813..a74dd7e 100644 --- a/pixelGameEngine.h +++ b/pixelGameEngine.h @@ -315,11 +315,9 @@ +FillTexturedTriangle() - Software rasterizes a textured, coloured, triangle +FillTexturedPolygon() - Hijacks DecalStructure for configuration +olc::vf2d arguments for Sprite::Sample() functions - - SIG Updates: - The following additions are included in Sig's version of the PGE header (this is a sig version) - +GetAnyKey() - Returns when a key is activated - +GetAnyKeyPress() - Returns when a key is pressed down (and if a keyboard key, which key it was) + 2.22: = Fix typo on dragged file buffers for unicode builds + 2.23: Fixed Emscripten host sizing errors - Thanks Moros + Fixed v2d_generic.clamp() function !! Apple Platforms will not see these updates immediately - Sorry, I dont have a mac to test... !! !! Volunteers willing to help appreciated, though PRs are manually integrated with credit !! @@ -976,8 +974,6 @@ namespace olc virtual bool OnUserUpdate(float fElapsedTime); // Called once on application termination, so you can be one clean coder virtual bool OnUserDestroy(); - virtual void GetAnyKey(); - virtual void GetAnyKeyPress(olc::Key pressedKey); // Called when a text entry is confirmed with "enter" key virtual void OnTextEntryComplete(const std::string& sText); @@ -3682,9 +3678,6 @@ namespace olc bool PixelGameEngine::OnUserDestroy() { return true; } - void PixelGameEngine::GetAnyKey(){}; - void PixelGameEngine::GetAnyKeyPress(olc::Key pressedKey){}; - void PixelGameEngine::OnTextEntryComplete(const std::string& sText) { UNUSED(sText); } bool PixelGameEngine::OnConsoleCommand(const std::string& sCommand) { UNUSED(sCommand); return false; } @@ -3842,10 +3835,8 @@ namespace olc platform->HandleSystemEvent(); // Compare hardware input states from previous frame - auto ScanHardware = [&](HWButton* pKeys, bool* pStateOld, bool* pStateNew, uint32_t nKeyCount,bool keyboard=true) + auto ScanHardware = [&](HWButton* pKeys, bool* pStateOld, bool* pStateNew, uint32_t nKeyCount) { - bool pressed=false; - int key; for (uint32_t i = 0; i < nKeyCount; i++) { pKeys[i].bPressed = false; @@ -3854,8 +3845,6 @@ namespace olc { if (pStateNew[i]) { - pressed=true; - key=i; pKeys[i].bPressed = !pKeys[i].bHeld; pKeys[i].bHeld = true; } @@ -3864,18 +3853,13 @@ namespace olc pKeys[i].bReleased = true; pKeys[i].bHeld = false; } - GetAnyKey(); } pStateOld[i] = pStateNew[i]; } - if (pressed) { - if (keyboard) {GetAnyKeyPress((olc::Key)key);} - else {GetAnyKeyPress(olc::Key::NONE);} - } }; ScanHardware(pKeyboardState, pKeyOldState, pKeyNewState, 256); - ScanHardware(pMouseState, pMouseOldState, pMouseNewState, nMouseButtons, false); + ScanHardware(pMouseState, pMouseOldState, pMouseNewState, nMouseButtons); // Cache mouse coordinates so they remain consistent during frame vMousePos = vMousePosCache; @@ -6709,3 +6693,4 @@ namespace olc // O------------------------------------------------------------------------------O // | END OF OLC_PGE_APPLICATION | // O------------------------------------------------------------------------------O + diff --git a/pixelGameEngine_wasm.o b/pixelGameEngine_wasm.o index 5c80e820d9e94910d2f8abb5bc3bbc56a756bd8b..7c89fe7b01bef16643227e4bcf194a1572c5ea88 100644 GIT binary patch delta 51172 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 TyFdNrZ-4#MZ&OqAoj?3PS!5wO delta 44350 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Ν#C?$IIwqA4Tg> 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 g?eG8c%OC&p$6tT