From d82f188da0ec039f2a7debdd063570c2b89b3c86 Mon Sep 17 00:00:00 2001
From: neurolabusc
Date: Sat, 20 Jul 2024 17:46:44 -0700
Subject: [PATCH] Initial WASM build
---
README.md | 1 +
index.html | 15 +++++--
main.js | 93 ++++++++++++++++++++++++++++++++++---------
nii2mesh.js | 1 +
nii2mesh.wasm | Bin 0 -> 143718 bytes
nii2meshWorker.js | 55 +++++++++++++++++++++++++
public/tinyT1.nii.gz | Bin 0 -> 213261 bytes
simplify.js | 15 ++++---
8 files changed, 154 insertions(+), 26 deletions(-)
create mode 100644 nii2mesh.js
create mode 100755 nii2mesh.wasm
create mode 100644 nii2meshWorker.js
create mode 100644 public/tinyT1.nii.gz
diff --git a/README.md b/README.md
index 258c153..d437fea 100644
--- a/README.md
+++ b/README.md
@@ -22,3 +22,4 @@ npm run dev
- [Will Usher](https://github.com/Twinklebear/webgl-marching-cubes) ported [Marching Cubes](https://paulbourke.net/geometry/polygonise/) to JavaScript.
- This project includes a pure JavaScript port of Sven Forstmann's [Fast Quadric Mesh Simplification](https://github.com/sp4cerat/Fast-Quadric-Mesh-Simplification)
+ - [Tim Knip](https://github.com/timknip/mesh-decimate/tree/master) provides a ThreeJS project that provides both WASM and native JavaScript mesh decimation. Try the [live demo](https://neurolabusc.github.io/simplifyjs/).
\ No newline at end of file
diff --git a/index.html b/index.html
index 69cb379..0af549e 100644
--- a/index.html
+++ b/index.html
@@ -12,7 +12,8 @@
+
+
+
+
diff --git a/main.js b/main.js
index 5ad8808..a282ae8 100644
--- a/main.js
+++ b/main.js
@@ -28,24 +28,31 @@ function formatNumber(value) {
async function main() {
const MeshWorker = await createMeshWorker()
const VoxelWorker = await createVoxelWorker()
+ const Nii2meshWorker = new Worker('./nii2meshWorker.js?rnd=' + Math.random())
const loadingCircle = document.getElementById('loadingCircle')
- function meshStatus() {
- const str = `Mesh has ${nv1.meshes[0].pts.length / 3} vertices and ${nv1.meshes[0].tris.length / 3} triangles`
+ let startTime = Date.now()
+ function meshStatus(isTimed = true) {
+ let str = `Mesh has ${nv1.meshes[0].pts.length / 3} vertices and ${nv1.meshes[0].tris.length / 3} triangles`
+ if (isTimed)
+ str += ` ${Date.now() - startTime}ms`
document.getElementById('location').innerHTML = str
+ console.log(str)
shaderSelect.onchange()
- nv1.setMeshProperty(nv1.meshes[0].id, 'visible', visibleCheck.checked)
}
- async function loadMesh(vertices, triangles) {
+ async function loadMz3(meshBuffer) {
if (nv1.meshes.length > 0) {
nv1.removeMesh(nv1.meshes[0])
}
- const verticesArray = new Float32Array(vertices)
- const trianglesArray = new Uint32Array(triangles)
- const meshBuffer = NVMeshUtilities.createMZ3(verticesArray, trianglesArray, false)
await nv1.loadFromArrayBuffer(meshBuffer, 'test.mz3')
loadingCircle.classList.add('hidden')
meshStatus()
}
+ async function loadMesh(vertices, triangles) {
+ const verticesArray = new Float32Array(vertices)
+ const trianglesArray = new Uint32Array(triangles)
+ const meshBuffer = NVMeshUtilities.createMZ3(verticesArray, trianglesArray, false)
+ await loadMz3(meshBuffer)
+ }
MeshWorker.onmessage = async function (e) {
const { vertices, triangles } = e.data
await loadMesh(vertices, triangles)
@@ -54,6 +61,15 @@ async function main() {
const { vertices, triangles } = e.data
await loadMesh(vertices, triangles)
}
+ Nii2meshWorker.onmessage = async function (e) {
+ if (e.data.blob instanceof Blob) {
+ var reader = new FileReader()
+ reader.onload = () => {
+ loadMz3(reader.result)
+ }
+ reader.readAsArrayBuffer(e.data.blob)
+ }
+ }
saveBtn.onclick = function () {
if (nv1.meshes.length < 1) {
window.alert("No mesh open for saving. Use 'Create Mesh'.")
@@ -65,9 +81,9 @@ async function main() {
const selectedOption = volumeSelect.options[volumeSelect.selectedIndex]
const txt = selectedOption.text
let fnm = './' + txt
- if (volumeSelect.selectedIndex > 3) {
+ if (volumeSelect.selectedIndex > 4) {
fnm = 'https://niivue.github.io/niivue/images/' + txt
- } else if (volumeSelect.selectedIndex > 0) {
+ } else if (volumeSelect.selectedIndex > 1) {
fnm = 'https://niivue.github.io/niivue-demo-images/' + txt
}
if (nv1.meshes.length > 0) {
@@ -76,7 +92,7 @@ async function main() {
if (nv1.volumes.length > 0) {
nv1.removeVolumeByIndex(0)
}
- if (volumeSelect.selectedIndex > 4) {
+ if (volumeSelect.selectedIndex > 5) {
nv1.loadMeshes([{ url: fnm }])
} else {
if (!fnm.endsWith('.mgz')) {
@@ -117,22 +133,67 @@ async function main() {
console.log('No mesh open to simplify.')
return
}
+ startTime = Date.now()
+ const shrinkValue = Math.min(Math.max(Number(shrinkSimplePct.value) / 100, 0.01), 1)
+ if (shrinkValue >= 1)
+ return
const verts = nv1.meshes[0].pts.slice()
const tris = nv1.meshes[0].tris.slice()
- const shrinkValue = Math.min(Math.max(Number(shrinkSimplePct.value) / 100, 0.01), 1)
loadingCircle.classList.remove('hidden')
+ if (simpleWasmCheck.checked) {
+ const meshBuffer = NVMeshUtilities.createMZ3(verts, tris, false)
+ let mz3 = new Blob([meshBuffer], {
+ type: 'application/octet-stream'
+ })
+ let inName = `em${Math.round(Math.random() * 0xffffff)}.mz3`
+ let fileMZ3 = new File([mz3], inName)
+ let outName = `em${Math.round(Math.random() * 0xffffff)}.mz3`
+ Nii2meshWorker.postMessage({
+ blob: fileMZ3,
+ percentage: shrinkValue,
+ simplify_name: outName,
+ })
+ } else {
MeshWorker.postMessage({
verts,
tris,
shrinkValue
})
+ }
}
applyBtn.onclick = async function () {
if (nv1.volumes.length < 1) {
console.log('No volume open to meshify.')
return
}
+ startTime = Date.now()
const isoValue = Number(isoNumber.value)
+ const largestCheckValue = largestCheck.checked
+ const bubbleCheckValue = bubbleCheck.checked
+ const shrinkValue = Math.min(Math.max(Number(shrinkPct.value) / 100, 0.01), 1)
+ const smoothValue = smoothSlide.value
+ loadingCircle.classList.remove('hidden')
+ if (wasmCheck.checked) {
+ //const meshBuffer = NVMeshUtilities.createMZ3(verts, tris, false)
+ const niiBuffer = await nv1.saveImage().buffer
+ console.log('WASM nii2mesh', niiBuffer)
+ let nii = new Blob([niiBuffer], {
+ type: 'application/octet-stream'
+ })
+ let inName = `em${Math.round(Math.random() * 0xffffff)}.nii`
+ let fileNii = new File([nii], inName)
+ let outName = `em${Math.round(Math.random() * 0xffffff)}.mz3`
+ Nii2meshWorker.postMessage({
+ blob: fileNii,
+ percentage: shrinkValue,
+ simplify_name: outName,
+ isoValue: isoValue,
+ onlyLargest: largestCheckValue,
+ fillBubbles: bubbleCheckValue,
+ postSmooth: smoothValue
+ })
+ return
+ }
let img = new Float32Array(nv1.volumes[0].img)
const scl_slope = nv1.volumes[0].hdr.scl_slope
const scl_inter = nv1.volumes[0].hdr.scl_inter
@@ -143,12 +204,7 @@ async function main() {
}
}
const dims = [nv1.volumes[0].hdr.dims[1], nv1.volumes[0].hdr.dims[2], nv1.volumes[0].hdr.dims[3]]
- const largestCheckValue = largestCheck.checked
- const bubbleCheckValue = bubbleCheck.checked
const affine = nv1.volumes[0].hdr.affine
- const shrinkValue = Math.min(Math.max(Number(shrinkPct.value) / 100, 0.01), 1)
- const smoothValue = smoothSlide.value
- loadingCircle.classList.remove('hidden')
VoxelWorker.postMessage(
{
img,
@@ -173,7 +229,7 @@ async function main() {
nv1.setMeshShader(nv1.meshes[0].id, this.value)
}
function handleMeshLoaded() {
- meshStatus()
+ meshStatus(false)
}
const defaults = {
onMeshLoaded: handleMeshLoaded,
@@ -206,7 +262,8 @@ async function main() {
nv1.opts.multiplanarForceRender = true
nv1.opts.yoke3Dto2DZoom = true
nv1.setInterpolation(true)
- await nv1.loadVolumes([{ url: './bet.nii.gz' }])
+ //await nv1.loadVolumes([{ url: './bet.nii.gz' }])
+ await nv1.loadVolumes([{ url: './tinyT1.nii.gz' }])
imageStatus()
applyBtn.onclick()
}
diff --git a/nii2mesh.js b/nii2mesh.js
new file mode 100644
index 0000000..0c28b0b
--- /dev/null
+++ b/nii2mesh.js
@@ -0,0 +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;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;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 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,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");var wasmBinaryFile;wasmBinaryFile="nii2mesh.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}`);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={"a":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["s"];updateMemoryViews();addOnInit(wasmExports["t"]);removeRunDependency("wasm-instantiate");return wasmExports}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;function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var withStackSave=f=>{var stack=stackSave();var ret=f();stackRestore(stack);return ret};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)=>{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};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;var UTF8ArrayToString=(heapOrArray,idx,maxBytesToRead)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var demangle=func=>{demangle.recursionGuard=(demangle.recursionGuard|0)+1;if(demangle.recursionGuard>1)return func;return withStackSave(()=>{try{var s=func;if(s.startsWith("__Z"))s=s.substr(1);var buf=stringToUTF8OnStack(s);var status=stackAlloc(4);var ret=___cxa_demangle(buf,0,0,status);if(HEAP32[status>>2]===0&&ret){return UTF8ToString(ret)}}catch(e){}finally{_free(ret);if(demangle.recursionGuard<2)--demangle.recursionGuard}return func})};var noExitRuntime=Module["noExitRuntime"]||true;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("initRandomDevice")};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;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 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)}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(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var mmapAlloc=size=>{abort()};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);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{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 FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var 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)}};var 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};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},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){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;i0,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)},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;ithis.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}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(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(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(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream}};function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var setErrNo=value=>{HEAP32[___errno_location()>>2]=value;return value};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}while(FS.streams[arg]){arg++}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.getp();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:{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.getp();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.getp();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.getp();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.getp();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.getp();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?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=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function __localtime_js(time_low,time_high,tmPtr){var time=convertI32PairToI53Checked(time_low,time_high);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var __tzset_js=(timezone,daylight,tzname)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=stringToNewUTF8(winterName);var summerNamePtr=stringToNewUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAPU32[tzname+4>>2]=summerNamePtr}else{HEAPU32[tzname>>2]=summerNamePtr;HEAPU32[tzname+4>>2]=winterNamePtr}};var _abort=()=>{abort("")};var _emscripten_date_now=()=>Date.now();var _emscripten_get_now;_emscripten_get_now=()=>performance.now();var _emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var getHeapMax=()=>2147483648;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}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}}return false};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;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;_proc_exit(status)};var _exit=exitJS;function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);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){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}}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)=>{HEAP8.set(array,buffer)};var _strftime=(s,maxsize,format,tm)=>{var tm_zone=HEAPU32[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};var getCFunc=ident=>{var func=Module["_"+ident];return func};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={"string":str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},"array":arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}};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_createDataFile"]=FS.createDataFile;Module["FS_readFile"]=FS.readFile;Module["FS_unlink"]=FS.unlink;var wasmImports={k:___syscall_faccessat,a:___syscall_fcntl64,e:___syscall_ioctl,f:___syscall_openat,h:__emscripten_get_now_is_monotonic,l:__localtime_js,p:__tzset_js,n:_abort,i:_emscripten_date_now,g:_emscripten_get_now,j:_emscripten_memcpy_js,o:_emscripten_resize_heap,d:_exit,b:_fd_close,q:_fd_read,m:_fd_seek,c:_fd_write,r:_strftime};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["t"])();var _free=a0=>(_free=wasmExports["u"])(a0);var _malloc=a0=>(_malloc=wasmExports["v"])(a0);var _simplify=Module["_simplify"]=(a0,a1,a2,a3,a4,a5,a6,a7)=>(_simplify=Module["_simplify"]=wasmExports["w"])(a0,a1,a2,a3,a4,a5,a6,a7);var ___errno_location=()=>(___errno_location=wasmExports["x"])();var stackSave=()=>(stackSave=wasmExports["z"])();var stackRestore=a0=>(stackRestore=wasmExports["A"])(a0);var stackAlloc=a0=>(stackAlloc=wasmExports["B"])(a0);var ___cxa_demangle=(a0,a1,a2,a3)=>(___cxa_demangle=wasmExports["C"])(a0,a1,a2,a3);Module["FS_readFile"]=FS.readFile;Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_unlink"]=FS.unlink;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};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();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();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()()}}run();
diff --git a/nii2mesh.wasm b/nii2mesh.wasm
new file mode 100755
index 0000000000000000000000000000000000000000..e533612eb395f04c24ac086adbcfa06768b25846
GIT binary patch
literal 143718
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∋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