From 8322abb22dc6546d260ab0f2e5f86ad9fab33be1 Mon Sep 17 00:00:00 2001 From: Brian Whitman Date: Thu, 21 Nov 2024 21:43:41 -0500 Subject: [PATCH] backporting changes for tulip web into amy --- Makefile | 15 ++++++--------- docs/amy.js | 2 +- docs/amy.wasm | Bin 1302462 -> 1307169 bytes src/CMakeLists.txt | 1 + src/amy.c | 4 ++-- src/libminiaudio-audio.c | 9 ++++----- src/sequencer.c | 16 ++++++++++++++-- src/sequencer.h | 2 +- 8 files changed, 29 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index 5b3bf17..5a0140b 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,7 @@ EMSCRIPTEN_OPTIONS = -s WASM=1 \ -s ALLOW_MEMORY_GROWTH=1 \ -sMODULARIZE -s 'EXPORT_NAME="amyModule"' \ -s EXPORTED_RUNTIME_METHODS="['cwrap','ccall']" \ --s EXPORTED_FUNCTIONS="['_amy_play_message', '_amy_reset_sysclock', '_amy_live_start', '_amy_start', '_malloc', '_free']" +-s EXPORTED_FUNCTIONS="['_amy_play_message', '_amy_reset_sysclock', '_amy_live_start', '_amy_start', '_sequencer_ticks', '_malloc', '_free']" PYTHON = python3 @@ -43,12 +43,10 @@ all: default SOURCES = src/algorithms.c src/amy.c src/envelope.c src/examples.c \ src/filters.c src/oscillators.c src/pcm.c src/partials.c src/custom.c \ - src/delay.c src/log2_exp2.c src/patches.c src/transfer.c src/sequencer.c + src/delay.c src/log2_exp2.c src/patches.c src/transfer.c src/sequencer.c \ + src/libminiaudio-audio.c -OBJECTS = $(patsubst %.c, %.o, src/algorithms.c src/amy.c src/envelope.c \ - src/delay.c src/partials.c src/custom.c src/patches.c \ - src/examples.c src/filters.c src/oscillators.c src/pcm.c src/log2_exp2.c \ - src/libminiaudio-audio.c src/transfer.c src/sequencer.c) +OBJECTS = $(patsubst %.c, %.o, $(SOURCES)) HEADERS = $(wildcard src/*.h) src/amy_config.h HEADERS_BUILD := $(filter-out src/patches.h,$(HEADERS)) @@ -85,9 +83,8 @@ timing: amy-module cat /tmp/timings.txt | grep FILTER_PROCESS: | sed -e 's/us//' | sort -n | awk ' { a[i++]=$$4; } END { print a[int(i/2)]; }' cat /tmp/timings.txt | grep PARAMETRIC_EQ_PROCESS: | sed -e 's/us//' | sort -n | awk ' { a[i++]=$$4; } END { print a[int(i/2)]; }' - -web: $(TARGET) - emcc $(SOURCES) src/libminiaudio-audio.c $(EMSCRIPTEN_OPTIONS) -O3 -o docs/amy.js +docs/amy.js: $(TARGET) + emcc $(SOURCES) $(EMSCRIPTEN_OPTIONS) -O3 -o $@ clean: -rm -f src/*.o diff --git a/docs/amy.js b/docs/amy.js index 3dbdfc5..28029f9 100644 --- a/docs/amy.js +++ b/docs/amy.js @@ -6,7 +6,7 @@ var amyModule = (() => { function(moduleArg = {}) { var moduleRtn; -function GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPU8}function GROWABLE_HEAP_I16(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP16}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPU32}function GROWABLE_HEAP_F32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPF32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPF64}var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});["_amy_play_message","_amy_reset_sysclock","_amy_live_start","_amy_start","_malloc","_free","___indirect_function_table","_ma_device__on_notification_unlocked","_ma_malloc_emscripten","_ma_free_emscripten","_ma_device_process_pcm_frames_capture__webaudio","_ma_device_process_pcm_frames_playback__webaudio","onRuntimeInitialized"].forEach(prop=>{if(!Object.getOwnPropertyDescriptor(readyPromise,prop)){Object.defineProperty(readyPromise,prop,{get:()=>abort("You are getting "+prop+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js"),set:()=>abort("You are setting "+prop+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")})}});var ENVIRONMENT_IS_AUDIO_WORKLET=typeof AudioWorkletGlobalScope!=="undefined";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&&!ENVIRONMENT_IS_AUDIO_WORKLET;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)")}if(ENVIRONMENT_IS_NODE){var worker_threads=require("worker_threads");global.Worker=worker_threads.Worker;ENVIRONMENT_IS_WORKER=!worker_threads.isMainThread}var ENVIRONMENT_IS_WASM_WORKER=Module["$ww"];var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;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");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);var ret=fs.readFileSync(filename);assert(ret.buffer);return ret};readAsync=(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return new Promise((resolve,reject)=>{fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)reject(err);else resolve(binary?data.buffer:data)})})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}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?)")}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(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}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?)");{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=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}return fetch(url,{credentials:"same-origin"}).then(response=>{if(response.ok){return response.arrayBuffer()}return Promise.reject(new Error(response.status+" : "+response.url))})}}}else if(!ENVIRONMENT_IS_AUDIO_WORKLET){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");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");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 emscripten_set_window_title in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");legacyModuleProp("asm","wasmExports");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=Module["wasmBinary"];legacyModuleProp("wasmBinary","wasmBinary");if(typeof WebAssembly!="object"){err("no native wasm support detected")}var wasmMemory;var wasmModule;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["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)}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");if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||134217728;legacyModuleProp("INITIAL_MEMORY","INITIAL_MEMORY");assert(INITIAL_MEMORY>=67108864,"INITIAL_MEMORY should be larger than STACK_SIZE, was "+INITIAL_MEMORY+"! (STACK_SIZE="+67108864+")");wasmMemory=new WebAssembly.Memory({initial:INITIAL_MEMORY/65536,maximum:32768,shared:true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){err("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)")}throw Error("bad memory")}}updateMemoryViews();function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}GROWABLE_HEAP_U32()[max>>2]=34821223;GROWABLE_HEAP_U32()[max+4>>2]=2310721022;GROWABLE_HEAP_U32()[0>>2]=1668509029}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=GROWABLE_HEAP_U32()[max>>2];var cookie2=GROWABLE_HEAP_U32()[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(GROWABLE_HEAP_U32()[0>>2]!=1668509029){abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}}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(){assert(!runtimeInitialized);runtimeInitialized=true;if(ENVIRONMENT_IS_WASM_WORKER)return _wasmWorkerInitializeRuntime();checkStackCookie();callRuntimeCallbacks(__ATINIT__)}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 addRunDependency(id){runDependencies++;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--;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){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;if(what.indexOf("RuntimeError: unreachable")>=0){what+='. "unreachable" may be due to ASYNCIFY_STACK_SIZE not being large enough (try increasing it)'}var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var FS={error(){abort("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")},init(){FS.error()},createDataFile(){FS.error()},createPreloadedFile(){FS.error()},createLazyFile(){FS.error()},open(){FS.error()},mkdev(){FS.error()},registerDevice(){FS.error()},analyzePath(){FS.error()},ErrnoError(){FS.error()}};Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function createExportWrapper(name,nargs){return(...args)=>{assert(runtimeInitialized,`native function \`${name}\` called before runtime initialization`);var f=wasmExports[name];assert(f,`exported native function \`${name}\` not found`);assert(args.length<=nargs,`native function \`${name}\` called with ${args.length} args but expects ${nargs}`);return f(...args)}}function findWasmBinary(){var f="amy.wasm";if(!isDataURI(f)){return locateFile(f)}return f}var 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){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).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 getWasmImports(){Asyncify.instrumentWasmImports(wasmImports);return{env:wasmImports,wasi_snapshot_preview1:wasmImports}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=Asyncify.instrumentWasmExports(wasmExports);wasmTable=wasmExports["__indirect_function_table"];Module["wasmTable"]=wasmTable;assert(wasmTable,"table not found in wasm exports");addOnInit(wasmExports["__wasm_call_ctors"]);wasmModule=module;removeRunDependency("wasm-instantiate");return wasmExports}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"],result["module"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}if(!wasmBinaryFile)wasmBinaryFile=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}(()=>{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)"})();function legacyModuleProp(prop,newName,incoming=true){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,get(){let extra=incoming?" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)":"";abort(`\`Module.${prop}\` has been replaced by \`${newName}\``+extra)}})}}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");missingGlobal("asm","Please use wasmExports instead");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={1109824:($0,$1,$2,$3,$4)=>{if(typeof window==="undefined"||(window.AudioContext||window.webkitAudioContext)===undefined){return 0}if(typeof window.miniaudio==="undefined"){window.miniaudio={referenceCount:0};window.miniaudio.device_type={};window.miniaudio.device_type.playback=$0;window.miniaudio.device_type.capture=$1;window.miniaudio.device_type.duplex=$2;window.miniaudio.device_state={};window.miniaudio.device_state.stopped=$3;window.miniaudio.device_state.started=$4;miniaudio.devices=[];miniaudio.track_device=function(device){for(var iDevice=0;iDevice0){if(miniaudio.devices[miniaudio.devices.length-1]==null){miniaudio.devices.pop()}else{break}}};miniaudio.untrack_device=function(device){for(var iDevice=0;iDevice{Module._ma_device__on_notification_unlocked(device.pDevice)},error=>{console.error("Failed to resume audiocontext",error)})}}miniaudio.unlock_event_types.map(function(event_type){document.removeEventListener(event_type,miniaudio.unlock,true)})};miniaudio.unlock_event_types.map(function(event_type){document.addEventListener(event_type,miniaudio.unlock,true)})}window.miniaudio.referenceCount+=1;return 1},1111982:()=>{if(typeof window.miniaudio!=="undefined"){window.miniaudio.referenceCount-=1;if(window.miniaudio.referenceCount===0){delete window.miniaudio}}},1112146:()=>navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined,1112250:()=>{try{var temp=new(window.AudioContext||window.webkitAudioContext);var sampleRate=temp.sampleRate;temp.close();return sampleRate}catch(e){return 0}},1112421:$0=>miniaudio.track_device({webaudio:emscriptenGetAudioObject($0),state:1}),1112510:($0,$1)=>{var getUserMediaResult=0;var audioWorklet=emscriptenGetAudioObject($0);var audioContext=emscriptenGetAudioObject($1);navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(function(stream){audioContext.streamNode=audioContext.createMediaStreamSource(stream);audioContext.streamNode.connect(audioWorklet);audioWorklet.connect(audioContext.destination);getUserMediaResult=0}).catch(function(error){console.log("navigator.mediaDevices.getUserMedia Failed: "+error);getUserMediaResult=-1});return getUserMediaResult},1113072:($0,$1)=>{var audioWorklet=emscriptenGetAudioObject($0);var audioContext=emscriptenGetAudioObject($1);audioWorklet.connect(audioContext.destination);return 0},1113232:$0=>emscriptenGetAudioObject($0).sampleRate,1113284:$0=>{var device=miniaudio.get_device_by_index($0);if(device.streamNode!==undefined){device.streamNode.disconnect();device.streamNode=undefined}},1113440:$0=>{miniaudio.untrack_device_by_index($0)},1113483:$0=>{var device=miniaudio.get_device_by_index($0);device.webaudio.resume();device.state=miniaudio.device_state.started},1113608:$0=>{var device=miniaudio.get_device_by_index($0);device.webaudio.suspend();device.state=miniaudio.device_state.stopped}};function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var _wasmWorkerDelayedMessageQueue=[];var wasmTableMirror=[];var wasmTable;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 _wasmWorkerRunPostMessage=e=>{let data=ENVIRONMENT_IS_NODE?e:e.data;let wasmCall=data["_wsc"];wasmCall&&getWasmTableEntry(wasmCall)(...data["x"])};var _wasmWorkerAppendToQueue=e=>{_wasmWorkerDelayedMessageQueue.push(e)};var _wasmWorkerInitializeRuntime=()=>{let m=Module;assert(m["sb"]%16==0);assert(m["sz"]%16==0);__emscripten_wasm_worker_initialize(m["sb"],m["sz"]);if(typeof AudioWorkletGlobalScope==="undefined"){removeEventListener("message",_wasmWorkerAppendToQueue);_wasmWorkerDelayedMessageQueue=_wasmWorkerDelayedMessageQueue.forEach(_wasmWorkerRunPostMessage);addEventListener("message",_wasmWorkerRunPostMessage)}};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var noExitRuntime=Module["noExitRuntime"]||true;var ptrToString=ptr=>{assert(typeof ptr==="number");ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder: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.buffer instanceof SharedArrayBuffer?heapOrArray.slice(idx,endPtr):heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>{assert(typeof ptr=="number",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):""};var ___assert_fail=(condition,filename,line,func)=>{abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])};var __abort_js=()=>{abort("native code called abort()")};var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{assert(Array.isArray(readEmAsmArgsArray));assert(buf%16==0);readEmAsmArgsArray.length=0;var ch;while(ch=GROWABLE_HEAP_U8()[sigPtr++]){var chr=String.fromCharCode(ch);var validChars=["d","f","i","p"];assert(validChars.includes(chr),`Invalid character ${ch}("${chr}") in readEmAsmArgs! Use only [${validChars}], and do not specify "v" for void return argument.`);var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?GROWABLE_HEAP_U32()[buf>>2]:ch==105?GROWABLE_HEAP_I32()[buf>>2]:GROWABLE_HEAP_F64()[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(code),`No EM_ASM constant found at address ${code}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var EmAudio={};var EmAudioCounter=0;var emscriptenRegisterAudioObject=object=>{assert(object,"Called emscriptenRegisterAudioObject() with a null object handle!");EmAudio[++EmAudioCounter]=object;return EmAudioCounter};var emscriptenGetAudioObject=objectHandle=>EmAudio[objectHandle];var _emscripten_create_audio_context=options=>{let ctx=window.AudioContext||window.webkitAudioContext;if(!ctx)console.error("emscripten_create_audio_context failed! Web Audio is not supported.");options>>=2;let opts=options?{latencyHint:GROWABLE_HEAP_U32()[options]?UTF8ToString(GROWABLE_HEAP_U32()[options]):void 0,sampleRate:GROWABLE_HEAP_I32()[options+1]||void 0}:void 0;return ctx&&emscriptenRegisterAudioObject(new ctx(opts))};var _emscripten_create_wasm_audio_worklet_node=(contextHandle,name,options,callback,userData)=>{assert(contextHandle,`Called emscripten_create_wasm_audio_worklet_node() with a null Web Audio Context handle!`);assert(EmAudio[contextHandle],`Called emscripten_create_wasm_audio_worklet_node() with a nonexisting/already freed Web Audio Context handle ${contextHandle}!`);assert(EmAudio[contextHandle]instanceof(window.AudioContext||window.webkitAudioContext),`Called emscripten_create_wasm_audio_worklet_node() on a context handle ${contextHandle} that is not an AudioContext, but of type ${typeof EmAudio[contextHandle]}`);options>>=2;function readChannelCountArray(heapIndex,numOutputs){let channelCounts=[];while(numOutputs--)channelCounts.push(GROWABLE_HEAP_U32()[heapIndex++]);return channelCounts}let opts=options?{numberOfInputs:GROWABLE_HEAP_I32()[options],numberOfOutputs:GROWABLE_HEAP_I32()[options+1],outputChannelCount:GROWABLE_HEAP_U32()[options+2]?readChannelCountArray(GROWABLE_HEAP_U32()[options+2]>>2,GROWABLE_HEAP_I32()[options+1]):void 0,processorOptions:{cb:callback,ud:userData}}:void 0;return emscriptenRegisterAudioObject(new AudioWorkletNode(EmAudio[contextHandle],UTF8ToString(name),opts))};var _emscripten_create_wasm_audio_worklet_processor_async=(contextHandle,options,callback,userData)=>{assert(contextHandle,`Called emscripten_create_wasm_audio_worklet_processor_async() with a null Web Audio Context handle!`);assert(EmAudio[contextHandle],`Called emscripten_create_wasm_audio_worklet_processor_async() with a nonexisting/already freed Web Audio Context handle ${contextHandle}!`);assert(EmAudio[contextHandle]instanceof(window.AudioContext||window.webkitAudioContext),`Called emscripten_create_wasm_audio_worklet_processor_async() on a context handle ${contextHandle} that is not an AudioContext, but of type ${typeof EmAudio[contextHandle]}`);options>>=2;let audioParams=[],numAudioParams=GROWABLE_HEAP_U32()[options+1],audioParamDescriptors=GROWABLE_HEAP_U32()[options+2]>>2,i=0;while(numAudioParams--){audioParams.push({name:i++,defaultValue:GROWABLE_HEAP_F32()[audioParamDescriptors++],minValue:GROWABLE_HEAP_F32()[audioParamDescriptors++],maxValue:GROWABLE_HEAP_F32()[audioParamDescriptors++],automationRate:["a","k"][GROWABLE_HEAP_U32()[audioParamDescriptors++]]+"-rate"})}EmAudio[contextHandle].audioWorklet.bootstrapMessage.port.postMessage({_wpn:UTF8ToString(GROWABLE_HEAP_U32()[options]),audioParams,contextHandle,callback,userData})};var _emscripten_destroy_audio_context=contextHandle=>{assert(EmAudio[contextHandle],`Called emscripten_destroy_audio_context() on an already freed context handle ${contextHandle}`);assert(EmAudio[contextHandle]instanceof(window.AudioContext||window.webkitAudioContext),`Called emscripten_destroy_audio_context() on a context handle ${contextHandle} that is not an AudioContext, but of type ${typeof EmAudio[contextHandle]}`);EmAudio[contextHandle].suspend();delete EmAudio[contextHandle]};var _emscripten_destroy_web_audio_node=objectHandle=>{assert(EmAudio[objectHandle],`Called emscripten_destroy_web_audio_node() on a nonexisting/already freed object handle ${objectHandle}`);assert(EmAudio[objectHandle].disconnect,`Called emscripten_destroy_web_audio_node() on a handle ${objectHandle} that is not an Web Audio Node, but of type ${typeof EmAudio[objectHandle]}`);EmAudio[objectHandle].disconnect();delete EmAudio[objectHandle]};var _emscripten_get_now;if(typeof performance!="undefined"&&performance.now){_emscripten_get_now=()=>performance.now()}else{_emscripten_get_now=Date.now}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>{assert(alignment,"alignment argument is required");return Math.ceil(size/alignment)*alignment};var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;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}`)}};var _emscripten_resize_heap=requestedSize=>{var oldSize=GROWABLE_HEAP_U8().length;requestedSize>>>=0;if(requestedSize<=oldSize){return false}var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`);return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);return false};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 67108864)")}}quit_(1,e)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;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)`;readyPromiseReject(msg);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 preloadPlugins=Module["preloadPlugins"]||[];var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume(){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(){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);onload?.(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);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;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(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:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){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);Browser.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=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)}}Module["onFullScreen"]?.(Browser.isFullscreen);Module["onFullscreen"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},requestFullScreen(){abort("Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)")},exitFullscreen(){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(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(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype(name){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia(func){window.getUserMedia||=navigator["getUserMedia"]||navigator["mozGetUserMedia"];window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default: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:{},calculateMouseCoords(pageX,pageY){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.");var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x,y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}else{if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=GROWABLE_HEAP_U32()[SDL.screen>>2];flags=flags|8388608;GROWABLE_HEAP_I32()[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=GROWABLE_HEAP_U32()[SDL.screen>>2];flags=flags&~8388608;GROWABLE_HEAP_I32()[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h{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 Browser.setImmediate=="undefined"){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);Browser.setImmediate=func=>{setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){Module["setImmediates"]??=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}else{Browser.setImmediate=setImmediate}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){Browser.setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0};var 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}}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?.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 _emscripten_set_main_loop=(func,fps,simulateInfiniteLoop)=>{var browserIterationFunc=()=>dynCall_v(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)};var _emscripten_sleep=ms=>Asyncify.handleSleep(wakeUp=>safeSetTimeout(wakeUp,ms));_emscripten_sleep.isAsync=true;var _wasmWorkersID=1;var _EmAudioDispatchProcessorCallback=e=>{let data=e.data;let wasmCall=data["_wsc"];wasmCall&&getWasmTableEntry(wasmCall)(...data["x"])};var _emscripten_start_wasm_audio_worklet_thread_async=(contextHandle,stackLowestAddress,stackSize,callback,userData)=>{assert(contextHandle,`Called emscripten_start_wasm_audio_worklet_thread_async() with a null Web Audio Context handle!`);assert(EmAudio[contextHandle],`Called emscripten_start_wasm_audio_worklet_thread_async() with a nonexisting/already freed Web Audio Context handle ${contextHandle}!`);assert(EmAudio[contextHandle]instanceof(window.AudioContext||window.webkitAudioContext),`Called emscripten_start_wasm_audio_worklet_thread_async() on a context handle ${contextHandle} that is not an AudioContext, but of type ${typeof EmAudio[contextHandle]}`);let audioContext=EmAudio[contextHandle],audioWorklet=audioContext.audioWorklet;assert(stackLowestAddress!=0,"AudioWorklets require a dedicated stack space for audio data marshalling between Wasm and JS!");assert(stackLowestAddress%16==0,`AudioWorklet stack should be aligned to 16 bytes! (was ${stackLowestAddress} == ${stackLowestAddress%16} mod 16) Use e.g. memalign(16, stackSize) to align the stack!`);assert(stackSize!=0,"AudioWorklets require a dedicated stack space for audio data marshalling between Wasm and JS!");assert(stackSize%16==0,`AudioWorklet stack size should be a multiple of 16 bytes! (was ${stackSize} == ${stackSize%16} mod 16)`);assert(!audioContext.audioWorkletInitialized,"emscripten_create_wasm_audio_worklet() was already called for AudioContext "+contextHandle+"! Only call this function once per AudioContext!");audioContext.audioWorkletInitialized=1;let audioWorkletCreationFailed=()=>{((a1,a2,a3)=>dynCall_viii(callback,a1,a2,a3))(contextHandle,0,userData)};if(!audioWorklet){return audioWorkletCreationFailed()}audioWorklet.addModule("amy.aw.js").then(()=>{audioWorklet.bootstrapMessage=new AudioWorkletNode(audioContext,"message",{processorOptions:{$ww:_wasmWorkersID++,wasm:wasmModule,wasmMemory,sb:stackLowestAddress,sz:stackSize}});audioWorklet.bootstrapMessage.port.onmessage=_EmAudioDispatchProcessorCallback;return audioWorklet.addModule(Module["mainScriptUrlOrBlob"]||_scriptName)}).then(()=>{((a1,a2,a3)=>dynCall_viii(callback,a1,a2,a3))(contextHandle,1,userData)}).catch(audioWorkletCreationFailed)};var _fd_close=fd=>{abort("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")};var 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 _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);return 70}var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}};var flush_NO_FILESYSTEM=()=>{_fflush(0);if(printCharBuffers[1].length)printChar(1,10);if(printCharBuffers[2].length)printChar(2,10)};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i>2];var len=GROWABLE_HEAP_U32()[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0};var runAndAbortIfError=func=>{try{return func()}catch(e){abort(e)}};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var runtimeKeepalivePop=()=>{assert(runtimeKeepaliveCounter>0);runtimeKeepaliveCounter-=1};var Asyncify={instrumentWasmImports(imports){var importPattern=/^(invoke_.*|__asyncjs__.*)$/;for(let[x,original]of Object.entries(imports)){if(typeof original=="function"){let isAsyncifyImport=original.isAsync||importPattern.test(x);imports[x]=(...args)=>{var originalAsyncifyState=Asyncify.state;try{return original(...args)}finally{var changedToDisabled=originalAsyncifyState===Asyncify.State.Normal&&Asyncify.state===Asyncify.State.Disabled;var ignoredInvoke=x.startsWith("invoke_")&&true;if(Asyncify.state!==originalAsyncifyState&&!isAsyncifyImport&&!changedToDisabled&&!ignoredInvoke){throw new Error(`import ${x} was not in ASYNCIFY_IMPORTS, but changed the state`)}}}}}},instrumentWasmExports(exports){var ret={};for(let[x,original]of Object.entries(exports)){if(typeof original=="function"){ret[x]=(...args)=>{Asyncify.exportCallStack.push(x);try{return original(...args)}finally{if(!ABORT){var y=Asyncify.exportCallStack.pop();assert(y===x);Asyncify.maybeStopUnwind()}}}}else{ret[x]=original}}return ret},State:{Normal:0,Unwinding:1,Rewinding:2,Disabled:3},state:0,StackSize:4096,currData:null,handleSleepReturnValue:0,exportCallStack:[],callStackNameToId:{},callStackIdToName:{},callStackId:0,asyncPromiseHandlers:null,sleepCallbacks:[],getCallStackId(funcName){var id=Asyncify.callStackNameToId[funcName];if(id===undefined){id=Asyncify.callStackId++;Asyncify.callStackNameToId[funcName]=id;Asyncify.callStackIdToName[id]=funcName}return id},maybeStopUnwind(){if(Asyncify.currData&&Asyncify.state===Asyncify.State.Unwinding&&Asyncify.exportCallStack.length===0){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_unwind);if(typeof Fibers!="undefined"){Fibers.trampoline()}}},whenDone(){assert(Asyncify.currData,"Tried to wait for an async operation when none is in progress.");assert(!Asyncify.asyncPromiseHandlers,"Cannot have multiple async operations in flight at once");return new Promise((resolve,reject)=>{Asyncify.asyncPromiseHandlers={resolve,reject}})},allocateData(){var ptr=_malloc(12+Asyncify.StackSize);Asyncify.setDataHeader(ptr,ptr+12,Asyncify.StackSize);Asyncify.setDataRewindFunc(ptr);return ptr},setDataHeader(ptr,stack,stackSize){GROWABLE_HEAP_U32()[ptr>>2]=stack;GROWABLE_HEAP_U32()[ptr+4>>2]=stack+stackSize},setDataRewindFunc(ptr){var bottomOfCallStack=Asyncify.exportCallStack[0];var rewindId=Asyncify.getCallStackId(bottomOfCallStack);GROWABLE_HEAP_I32()[ptr+8>>2]=rewindId},getDataRewindFuncName(ptr){var id=GROWABLE_HEAP_I32()[ptr+8>>2];var name=Asyncify.callStackIdToName[id];return name},getDataRewindFunc(name){var func=wasmExports[name];return func},doRewind(ptr){var name=Asyncify.getDataRewindFuncName(ptr);var func=Asyncify.getDataRewindFunc(name);return func()},handleSleep(startAsync){assert(Asyncify.state!==Asyncify.State.Disabled,"Asyncify cannot be done during or after the runtime exits");if(ABORT)return;if(Asyncify.state===Asyncify.State.Normal){var reachedCallback=false;var reachedAfterCallback=false;startAsync((handleSleepReturnValue=0)=>{assert(!handleSleepReturnValue||typeof handleSleepReturnValue=="number"||typeof handleSleepReturnValue=="boolean");if(ABORT)return;Asyncify.handleSleepReturnValue=handleSleepReturnValue;reachedCallback=true;if(!reachedAfterCallback){return}assert(!Asyncify.exportCallStack.length,"Waking up (starting to rewind) must be done from JS, without compiled code on the stack.");Asyncify.state=Asyncify.State.Rewinding;runAndAbortIfError(()=>_asyncify_start_rewind(Asyncify.currData));if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.resume()}var asyncWasmReturnValue,isError=false;try{asyncWasmReturnValue=Asyncify.doRewind(Asyncify.currData)}catch(err){asyncWasmReturnValue=err;isError=true}var handled=false;if(!Asyncify.currData){var asyncPromiseHandlers=Asyncify.asyncPromiseHandlers;if(asyncPromiseHandlers){Asyncify.asyncPromiseHandlers=null;(isError?asyncPromiseHandlers.reject:asyncPromiseHandlers.resolve)(asyncWasmReturnValue);handled=true}}if(isError&&!handled){throw asyncWasmReturnValue}});reachedAfterCallback=true;if(!reachedCallback){Asyncify.state=Asyncify.State.Unwinding;Asyncify.currData=Asyncify.allocateData();if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.pause()}runAndAbortIfError(()=>_asyncify_start_unwind(Asyncify.currData))}}else if(Asyncify.state===Asyncify.State.Rewinding){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_rewind);_free(Asyncify.currData);Asyncify.currData=null;Asyncify.sleepCallbacks.forEach(callUserCallback)}else{abort(`invalid state: ${Asyncify.state}`)}return Asyncify.handleSleepReturnValue},handleAsync(startAsync){return Asyncify.handleSleep(wakeUp=>{startAsync().then(wakeUp)})}};var getCFunc=ident=>{var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func};var writeArrayToMemory=(array,buffer)=>{assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");GROWABLE_HEAP_I8().set(array,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)=>{assert(typeof str==="string",`stringToUTF8Array expects a string (got ${typeof str})`);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;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++]=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)=>{assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};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;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i(...args)=>ccall(ident,returnType,argTypes,args,opts);Module["requestFullscreen"]=Browser.requestFullscreen;Module["requestFullScreen"]=Browser.requestFullScreen;Module["requestAnimationFrame"]=Browser.requestAnimationFrame;Module["setCanvasSize"]=Browser.setCanvasSize;Module["pauseMainLoop"]=Browser.mainLoop.pause;Module["resumeMainLoop"]=Browser.mainLoop.resume;Module["getUserMedia"]=Browser.getUserMedia;Module["createContext"]=Browser.createContext;var preloadedImages={};var preloadedAudios={};function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings")}var wasmImports={__assert_fail:___assert_fail,_abort_js:__abort_js,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_create_audio_context:_emscripten_create_audio_context,emscripten_create_wasm_audio_worklet_node:_emscripten_create_wasm_audio_worklet_node,emscripten_create_wasm_audio_worklet_processor_async:_emscripten_create_wasm_audio_worklet_processor_async,emscripten_destroy_audio_context:_emscripten_destroy_audio_context,emscripten_destroy_web_audio_node:_emscripten_destroy_web_audio_node,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,emscripten_set_main_loop:_emscripten_set_main_loop,emscripten_sleep:_emscripten_sleep,emscripten_start_wasm_audio_worklet_thread_async:_emscripten_start_wasm_audio_worklet_thread_async,exit:_exit,fd_close:_fd_close,fd_seek:_fd_seek,fd_write:_fd_write,memory:wasmMemory};var wasmExports=createWasm();var ___wasm_call_ctors=createExportWrapper("__wasm_call_ctors",0);var _free=Module["_free"]=createExportWrapper("free",1);var _malloc=Module["_malloc"]=createExportWrapper("malloc",1);var _amy_start=Module["_amy_start"]=createExportWrapper("amy_start",4);var _amy_reset_sysclock=Module["_amy_reset_sysclock"]=createExportWrapper("amy_reset_sysclock",0);var _amy_play_message=Module["_amy_play_message"]=createExportWrapper("amy_play_message",1);var _ma_device__on_notification_unlocked=Module["_ma_device__on_notification_unlocked"]=createExportWrapper("ma_device__on_notification_unlocked",1);var _ma_malloc_emscripten=Module["_ma_malloc_emscripten"]=createExportWrapper("ma_malloc_emscripten",2);var _ma_free_emscripten=Module["_ma_free_emscripten"]=createExportWrapper("ma_free_emscripten",2);var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=createExportWrapper("ma_device_process_pcm_frames_capture__webaudio",3);var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=createExportWrapper("ma_device_process_pcm_frames_playback__webaudio",3);var _amy_live_start=Module["_amy_live_start"]=createExportWrapper("amy_live_start",0);var _fflush=createExportWrapper("fflush",1);var _strerror=createExportWrapper("strerror",1);var _emscripten_stack_init=()=>(_emscripten_stack_init=wasmExports["emscripten_stack_init"])();var _emscripten_stack_get_free=()=>(_emscripten_stack_get_free=wasmExports["emscripten_stack_get_free"])();var _emscripten_stack_get_base=()=>(_emscripten_stack_get_base=wasmExports["emscripten_stack_get_base"])();var _emscripten_stack_get_end=()=>(_emscripten_stack_get_end=wasmExports["emscripten_stack_get_end"])();var __emscripten_wasm_worker_initialize=createExportWrapper("_emscripten_wasm_worker_initialize",2);var __emscripten_stack_restore=a0=>(__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"])(a0);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"])(a0);var _emscripten_stack_get_current=()=>(_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"])();var dynCall_vii=Module["dynCall_vii"]=createExportWrapper("dynCall_vii",3);var dynCall_iiii=Module["dynCall_iiii"]=createExportWrapper("dynCall_iiii",4);var dynCall_iii=Module["dynCall_iii"]=createExportWrapper("dynCall_iii",3);var dynCall_ii=Module["dynCall_ii"]=createExportWrapper("dynCall_ii",2);var dynCall_iiiii=Module["dynCall_iiiii"]=createExportWrapper("dynCall_iiiii",5);var dynCall_viii=Module["dynCall_viii"]=createExportWrapper("dynCall_viii",4);var dynCall_viiii=Module["dynCall_viiii"]=createExportWrapper("dynCall_viiii",5);var dynCall_v=Module["dynCall_v"]=createExportWrapper("dynCall_v",1);var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=createExportWrapper("dynCall_iiiiiiii",8);var dynCall_iiiji=Module["dynCall_iiiji"]=createExportWrapper("dynCall_iiiji",6);var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=createExportWrapper("dynCall_iiiiiii",7);var dynCall_jii=Module["dynCall_jii"]=createExportWrapper("dynCall_jii",3);var dynCall_jiji=Module["dynCall_jiji"]=createExportWrapper("dynCall_jiji",5);var dynCall_iidiiii=Module["dynCall_iidiiii"]=createExportWrapper("dynCall_iidiiii",7);var _asyncify_start_unwind=createExportWrapper("asyncify_start_unwind",1);var _asyncify_stop_unwind=createExportWrapper("asyncify_stop_unwind",0);var _asyncify_start_rewind=createExportWrapper("asyncify_start_rewind",1);var _asyncify_stop_rewind=createExportWrapper("asyncify_stop_rewind",0);Module["stackSave"]=stackSave;Module["stackRestore"]=stackRestore;Module["stackAlloc"]=stackAlloc;Module["wasmTable"]=wasmTable;Module["ccall"]=ccall;Module["cwrap"]=cwrap;var missingLibrarySymbols=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertU32PairToI53","getTempRet0","setTempRet0","zeroMemory","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","initRandomFill","randomFill","emscriptenLog","runMainThreadEmAsm","jstoi_q","getExecutableName","listenOnce","autoResumeAudioContext","dynCallLegacy","getDynCaller","dynCall","asmjsMangle","asyncLoad","mmapAlloc","HandleAllocator","getNativeTypeSize","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","uleb128Encode","generateFuncType","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","getFunctionAddress","addFunction","removeFunction","reallyNegative","unSign","strLen","reSign","formatString","intArrayFromString","intArrayToString","AsciiToString","stringToAscii","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","stringToNewUTF8","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","battery","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","createDyncallWrapper","setImmediateWrapped","clearImmediateWrapped","polyfillSetImmediate","getPromise","makePromise","idsToPromises","makePromiseCallback","ExceptionInfo","findMatchingCatch","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar","FS_unlink","FS_createDataFile","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","setErrNo","demangle","stackTrace","_wasmWorkerPostFunction1","_wasmWorkerPostFunction2","_wasmWorkerPostFunction3","emscripten_audio_worklet_post_function_1","emscripten_audio_worklet_post_function_2","emscripten_audio_worklet_post_function_3"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=["run","addOnPreRun","addOnInit","addOnPreMain","addOnExit","addOnPostRun","addRunDependency","removeRunDependency","out","err","callMain","abort","wasmMemory","wasmExports","writeStackCookie","checkStackCookie","convertI32PairToI53Checked","ptrToString","exitJS","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","readEmAsmArgs","runEmAsmFunction","jstoi_s","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","alignMemory","noExitRuntime","getCFunc","sigToWasmTypes","freeTableIndexes","functionsInTableMap","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","UTF16Decoder","stringToUTF8OnStack","writeArrayToMemory","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","safeSetTimeout","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","Browser","setMainLoop","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_createPath","FS_createDevice","FS_readFile","FS","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","runAndAbortIfError","Asyncify","Fibers","SDL","SDL_gfx","allocateUTF8","allocateUTF8OnStack","print","printErr","_wasmWorkers","_wasmWorkersID","_wasmWorkerDelayedMessageQueue","_wasmWorkerAppendToQueue","_wasmWorkerRunPostMessage","_wasmWorkerInitializeRuntime","EmAudio","EmAudioCounter","emscriptenRegisterAudioObject","emscriptenDestroyAudioContext","emscriptenGetAudioObject","_EmAudioDispatchProcessorCallback"];unexportedSymbols.forEach(unexportedRuntimeSymbol);var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(){if(runDependencies>0){return}stackCheckInit();if(ENVIRONMENT_IS_WASM_WORKER){readyPromiseResolve(Module);return initRuntime()}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>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{flush_NO_FILESYSTEM()}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.");warnOnce("(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)")}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise;for(const prop of Object.keys(Module)){if(!(prop in moduleArg)){Object.defineProperty(moduleArg,prop,{configurable:true,get(){abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}})}} +function GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPU8}function GROWABLE_HEAP_I16(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP16}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPU32}function GROWABLE_HEAP_F32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPF32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPF64}var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});["_amy_play_message","_amy_reset_sysclock","_amy_live_start","_amy_start","_sequencer_ticks","_malloc","_free","___indirect_function_table","_ma_device__on_notification_unlocked","_ma_malloc_emscripten","_ma_free_emscripten","_ma_device_process_pcm_frames_capture__webaudio","_ma_device_process_pcm_frames_playback__webaudio","onRuntimeInitialized"].forEach(prop=>{if(!Object.getOwnPropertyDescriptor(readyPromise,prop)){Object.defineProperty(readyPromise,prop,{get:()=>abort("You are getting "+prop+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js"),set:()=>abort("You are setting "+prop+" on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")})}});var ENVIRONMENT_IS_AUDIO_WORKLET=typeof AudioWorkletGlobalScope!=="undefined";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&&!ENVIRONMENT_IS_AUDIO_WORKLET;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)")}if(ENVIRONMENT_IS_NODE){var worker_threads=require("worker_threads");global.Worker=worker_threads.Worker;ENVIRONMENT_IS_WORKER=!worker_threads.isMainThread}var ENVIRONMENT_IS_WASM_WORKER=Module["$ww"];var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;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");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);var ret=fs.readFileSync(filename);assert(ret.buffer);return ret};readAsync=(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return new Promise((resolve,reject)=>{fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)reject(err);else resolve(binary?data.buffer:data)})})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}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?)")}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(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}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?)");{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=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}return fetch(url,{credentials:"same-origin"}).then(response=>{if(response.ok){return response.arrayBuffer()}return Promise.reject(new Error(response.status+" : "+response.url))})}}}else if(!ENVIRONMENT_IS_AUDIO_WORKLET){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");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");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 emscripten_set_window_title in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");legacyModuleProp("asm","wasmExports");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=Module["wasmBinary"];legacyModuleProp("wasmBinary","wasmBinary");if(typeof WebAssembly!="object"){err("no native wasm support detected")}var wasmMemory;var wasmModule;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["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)}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");if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||134217728;legacyModuleProp("INITIAL_MEMORY","INITIAL_MEMORY");assert(INITIAL_MEMORY>=67108864,"INITIAL_MEMORY should be larger than STACK_SIZE, was "+INITIAL_MEMORY+"! (STACK_SIZE="+67108864+")");wasmMemory=new WebAssembly.Memory({initial:INITIAL_MEMORY/65536,maximum:32768,shared:true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){err("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)")}throw Error("bad memory")}}updateMemoryViews();function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);if(max==0){max+=4}GROWABLE_HEAP_U32()[max>>2]=34821223;GROWABLE_HEAP_U32()[max+4>>2]=2310721022;GROWABLE_HEAP_U32()[0>>2]=1668509029}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();if(max==0){max+=4}var cookie1=GROWABLE_HEAP_U32()[max>>2];var cookie2=GROWABLE_HEAP_U32()[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(GROWABLE_HEAP_U32()[0>>2]!=1668509029){abort("Runtime error: The application has corrupted its heap memory area (address zero)!")}}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(){assert(!runtimeInitialized);runtimeInitialized=true;if(ENVIRONMENT_IS_WASM_WORKER)return _wasmWorkerInitializeRuntime();checkStackCookie();callRuntimeCallbacks(__ATINIT__)}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 addRunDependency(id){runDependencies++;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--;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){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;if(what.indexOf("RuntimeError: unreachable")>=0){what+='. "unreachable" may be due to ASYNCIFY_STACK_SIZE not being large enough (try increasing it)'}var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var FS={error(){abort("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")},init(){FS.error()},createDataFile(){FS.error()},createPreloadedFile(){FS.error()},createLazyFile(){FS.error()},open(){FS.error()},mkdev(){FS.error()},registerDevice(){FS.error()},analyzePath(){FS.error()},ErrnoError(){FS.error()}};Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function createExportWrapper(name,nargs){return(...args)=>{assert(runtimeInitialized,`native function \`${name}\` called before runtime initialization`);var f=wasmExports[name];assert(f,`exported native function \`${name}\` not found`);assert(args.length<=nargs,`native function \`${name}\` called with ${args.length} args but expects ${nargs}`);return f(...args)}}function findWasmBinary(){var f="amy.wasm";if(!isDataURI(f)){return locateFile(f)}return f}var 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){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).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 getWasmImports(){Asyncify.instrumentWasmImports(wasmImports);return{env:wasmImports,wasi_snapshot_preview1:wasmImports}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=Asyncify.instrumentWasmExports(wasmExports);wasmTable=wasmExports["__indirect_function_table"];Module["wasmTable"]=wasmTable;assert(wasmTable,"table not found in wasm exports");addOnInit(wasmExports["__wasm_call_ctors"]);wasmModule=module;removeRunDependency("wasm-instantiate");return wasmExports}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"],result["module"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}if(!wasmBinaryFile)wasmBinaryFile=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}(()=>{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)"})();function legacyModuleProp(prop,newName,incoming=true){if(!Object.getOwnPropertyDescriptor(Module,prop)){Object.defineProperty(Module,prop,{configurable:true,get(){let extra=incoming?" (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)":"";abort(`\`Module.${prop}\` has been replaced by \`${newName}\``+extra)}})}}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");missingGlobal("asm","Please use wasmExports instead");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={1109840:$0=>{amy_sequencer_js_hook($0)},1109871:($0,$1,$2,$3,$4)=>{if(typeof window==="undefined"||(window.AudioContext||window.webkitAudioContext)===undefined){return 0}if(typeof window.miniaudio==="undefined"){window.miniaudio={referenceCount:0};window.miniaudio.device_type={};window.miniaudio.device_type.playback=$0;window.miniaudio.device_type.capture=$1;window.miniaudio.device_type.duplex=$2;window.miniaudio.device_state={};window.miniaudio.device_state.stopped=$3;window.miniaudio.device_state.started=$4;miniaudio.devices=[];miniaudio.track_device=function(device){for(var iDevice=0;iDevice0){if(miniaudio.devices[miniaudio.devices.length-1]==null){miniaudio.devices.pop()}else{break}}};miniaudio.untrack_device=function(device){for(var iDevice=0;iDevice{Module._ma_device__on_notification_unlocked(device.pDevice)},error=>{console.error("Failed to resume audiocontext",error)})}}miniaudio.unlock_event_types.map(function(event_type){document.removeEventListener(event_type,miniaudio.unlock,true)})};miniaudio.unlock_event_types.map(function(event_type){document.addEventListener(event_type,miniaudio.unlock,true)})}window.miniaudio.referenceCount+=1;return 1},1112029:()=>{if(typeof window.miniaudio!=="undefined"){window.miniaudio.referenceCount-=1;if(window.miniaudio.referenceCount===0){delete window.miniaudio}}},1112193:()=>navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined,1112297:()=>{try{var temp=new(window.AudioContext||window.webkitAudioContext);var sampleRate=temp.sampleRate;temp.close();return sampleRate}catch(e){return 0}},1112468:$0=>miniaudio.track_device({webaudio:emscriptenGetAudioObject($0),state:1}),1112557:($0,$1)=>{var getUserMediaResult=0;var audioWorklet=emscriptenGetAudioObject($0);var audioContext=emscriptenGetAudioObject($1);navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(function(stream){audioContext.streamNode=audioContext.createMediaStreamSource(stream);audioContext.streamNode.connect(audioWorklet);audioWorklet.connect(audioContext.destination);getUserMediaResult=0}).catch(function(error){console.log("navigator.mediaDevices.getUserMedia Failed: "+error);getUserMediaResult=-1});return getUserMediaResult},1113119:($0,$1)=>{var audioWorklet=emscriptenGetAudioObject($0);var audioContext=emscriptenGetAudioObject($1);audioWorklet.connect(audioContext.destination);return 0},1113279:$0=>emscriptenGetAudioObject($0).sampleRate,1113331:$0=>{var device=miniaudio.get_device_by_index($0);if(device.streamNode!==undefined){device.streamNode.disconnect();device.streamNode=undefined}},1113487:$0=>{miniaudio.untrack_device_by_index($0)},1113530:$0=>{var device=miniaudio.get_device_by_index($0);device.webaudio.resume();device.state=miniaudio.device_state.started},1113655:$0=>{var device=miniaudio.get_device_by_index($0);device.webaudio.suspend();device.state=miniaudio.device_state.stopped}};function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var _wasmWorkerDelayedMessageQueue=[];var wasmTableMirror=[];var wasmTable;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 _wasmWorkerRunPostMessage=e=>{let data=ENVIRONMENT_IS_NODE?e:e.data;let wasmCall=data["_wsc"];wasmCall&&getWasmTableEntry(wasmCall)(...data["x"])};var _wasmWorkerAppendToQueue=e=>{_wasmWorkerDelayedMessageQueue.push(e)};var _wasmWorkerInitializeRuntime=()=>{let m=Module;assert(m["sb"]%16==0);assert(m["sz"]%16==0);__emscripten_wasm_worker_initialize(m["sb"],m["sz"]);if(typeof AudioWorkletGlobalScope==="undefined"){removeEventListener("message",_wasmWorkerAppendToQueue);_wasmWorkerDelayedMessageQueue=_wasmWorkerDelayedMessageQueue.forEach(_wasmWorkerRunPostMessage);addEventListener("message",_wasmWorkerRunPostMessage)}};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var noExitRuntime=Module["noExitRuntime"]||true;var ptrToString=ptr=>{assert(typeof ptr==="number");ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")};var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder: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.buffer instanceof SharedArrayBuffer?heapOrArray.slice(idx,endPtr):heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>{assert(typeof ptr=="number",`UTF8ToString expects a number (got ${typeof ptr})`);return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):""};var ___assert_fail=(condition,filename,line,func)=>{abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])};var __abort_js=()=>{abort("native code called abort()")};var nowIsMonotonic=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{assert(Array.isArray(readEmAsmArgsArray));assert(buf%16==0);readEmAsmArgsArray.length=0;var ch;while(ch=GROWABLE_HEAP_U8()[sigPtr++]){var chr=String.fromCharCode(ch);var validChars=["d","f","i","p"];assert(validChars.includes(chr),`Invalid character ${ch}("${chr}") in readEmAsmArgs! Use only [${validChars}], and do not specify "v" for void return argument.`);var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?GROWABLE_HEAP_U32()[buf>>2]:ch==105?GROWABLE_HEAP_I32()[buf>>2]:GROWABLE_HEAP_F64()[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);assert(ASM_CONSTS.hasOwnProperty(code),`No EM_ASM constant found at address ${code}. The loaded WebAssembly file is likely out of sync with the generated JavaScript.`);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var EmAudio={};var EmAudioCounter=0;var emscriptenRegisterAudioObject=object=>{assert(object,"Called emscriptenRegisterAudioObject() with a null object handle!");EmAudio[++EmAudioCounter]=object;return EmAudioCounter};var emscriptenGetAudioObject=objectHandle=>EmAudio[objectHandle];var _emscripten_create_audio_context=options=>{let ctx=window.AudioContext||window.webkitAudioContext;if(!ctx)console.error("emscripten_create_audio_context failed! Web Audio is not supported.");options>>=2;let opts=options?{latencyHint:GROWABLE_HEAP_U32()[options]?UTF8ToString(GROWABLE_HEAP_U32()[options]):void 0,sampleRate:GROWABLE_HEAP_I32()[options+1]||void 0}:void 0;return ctx&&emscriptenRegisterAudioObject(new ctx(opts))};var _emscripten_create_wasm_audio_worklet_node=(contextHandle,name,options,callback,userData)=>{assert(contextHandle,`Called emscripten_create_wasm_audio_worklet_node() with a null Web Audio Context handle!`);assert(EmAudio[contextHandle],`Called emscripten_create_wasm_audio_worklet_node() with a nonexisting/already freed Web Audio Context handle ${contextHandle}!`);assert(EmAudio[contextHandle]instanceof(window.AudioContext||window.webkitAudioContext),`Called emscripten_create_wasm_audio_worklet_node() on a context handle ${contextHandle} that is not an AudioContext, but of type ${typeof EmAudio[contextHandle]}`);options>>=2;function readChannelCountArray(heapIndex,numOutputs){let channelCounts=[];while(numOutputs--)channelCounts.push(GROWABLE_HEAP_U32()[heapIndex++]);return channelCounts}let opts=options?{numberOfInputs:GROWABLE_HEAP_I32()[options],numberOfOutputs:GROWABLE_HEAP_I32()[options+1],outputChannelCount:GROWABLE_HEAP_U32()[options+2]?readChannelCountArray(GROWABLE_HEAP_U32()[options+2]>>2,GROWABLE_HEAP_I32()[options+1]):void 0,processorOptions:{cb:callback,ud:userData}}:void 0;return emscriptenRegisterAudioObject(new AudioWorkletNode(EmAudio[contextHandle],UTF8ToString(name),opts))};var _emscripten_create_wasm_audio_worklet_processor_async=(contextHandle,options,callback,userData)=>{assert(contextHandle,`Called emscripten_create_wasm_audio_worklet_processor_async() with a null Web Audio Context handle!`);assert(EmAudio[contextHandle],`Called emscripten_create_wasm_audio_worklet_processor_async() with a nonexisting/already freed Web Audio Context handle ${contextHandle}!`);assert(EmAudio[contextHandle]instanceof(window.AudioContext||window.webkitAudioContext),`Called emscripten_create_wasm_audio_worklet_processor_async() on a context handle ${contextHandle} that is not an AudioContext, but of type ${typeof EmAudio[contextHandle]}`);options>>=2;let audioParams=[],numAudioParams=GROWABLE_HEAP_U32()[options+1],audioParamDescriptors=GROWABLE_HEAP_U32()[options+2]>>2,i=0;while(numAudioParams--){audioParams.push({name:i++,defaultValue:GROWABLE_HEAP_F32()[audioParamDescriptors++],minValue:GROWABLE_HEAP_F32()[audioParamDescriptors++],maxValue:GROWABLE_HEAP_F32()[audioParamDescriptors++],automationRate:["a","k"][GROWABLE_HEAP_U32()[audioParamDescriptors++]]+"-rate"})}EmAudio[contextHandle].audioWorklet.bootstrapMessage.port.postMessage({_wpn:UTF8ToString(GROWABLE_HEAP_U32()[options]),audioParams,contextHandle,callback,userData})};var _emscripten_date_now=()=>Date.now();var _emscripten_destroy_audio_context=contextHandle=>{assert(EmAudio[contextHandle],`Called emscripten_destroy_audio_context() on an already freed context handle ${contextHandle}`);assert(EmAudio[contextHandle]instanceof(window.AudioContext||window.webkitAudioContext),`Called emscripten_destroy_audio_context() on a context handle ${contextHandle} that is not an AudioContext, but of type ${typeof EmAudio[contextHandle]}`);EmAudio[contextHandle].suspend();delete EmAudio[contextHandle]};var _emscripten_destroy_web_audio_node=objectHandle=>{assert(EmAudio[objectHandle],`Called emscripten_destroy_web_audio_node() on a nonexisting/already freed object handle ${objectHandle}`);assert(EmAudio[objectHandle].disconnect,`Called emscripten_destroy_web_audio_node() on a handle ${objectHandle} that is not an Web Audio Node, but of type ${typeof EmAudio[objectHandle]}`);EmAudio[objectHandle].disconnect();delete EmAudio[objectHandle]};var _emscripten_get_now;if(typeof performance!="undefined"&&performance.now){_emscripten_get_now=()=>performance.now()}else{_emscripten_get_now=Date.now}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>{assert(alignment,"alignment argument is required");return Math.ceil(size/alignment)*alignment};var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;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}`)}};var _emscripten_resize_heap=requestedSize=>{var oldSize=GROWABLE_HEAP_U8().length;requestedSize>>>=0;if(requestedSize<=oldSize){return false}var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`);return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);return false};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 67108864)")}}quit_(1,e)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;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)`;readyPromiseReject(msg);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 preloadPlugins=Module["preloadPlugins"]||[];var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume(){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(){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);onload?.(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);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;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(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:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){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);Browser.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=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)}}Module["onFullScreen"]?.(Browser.isFullscreen);Module["onFullscreen"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},requestFullScreen(){abort("Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)")},exitFullscreen(){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(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(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype(name){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia(func){window.getUserMedia||=navigator["getUserMedia"]||navigator["mozGetUserMedia"];window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default: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:{},calculateMouseCoords(pageX,pageY){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.");var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x,y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}else{if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=GROWABLE_HEAP_U32()[SDL.screen>>2];flags=flags|8388608;GROWABLE_HEAP_I32()[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=GROWABLE_HEAP_U32()[SDL.screen>>2];flags=flags&~8388608;GROWABLE_HEAP_I32()[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h{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 Browser.setImmediate=="undefined"){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);Browser.setImmediate=func=>{setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){Module["setImmediates"]??=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}else{Browser.setImmediate=setImmediate}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){Browser.setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0};var 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}}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?.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 _emscripten_set_main_loop=(func,fps,simulateInfiniteLoop)=>{var browserIterationFunc=()=>dynCall_v(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)};var _emscripten_sleep=ms=>Asyncify.handleSleep(wakeUp=>safeSetTimeout(wakeUp,ms));_emscripten_sleep.isAsync=true;var _wasmWorkersID=1;var _EmAudioDispatchProcessorCallback=e=>{let data=e.data;let wasmCall=data["_wsc"];wasmCall&&getWasmTableEntry(wasmCall)(...data["x"])};var _emscripten_start_wasm_audio_worklet_thread_async=(contextHandle,stackLowestAddress,stackSize,callback,userData)=>{assert(contextHandle,`Called emscripten_start_wasm_audio_worklet_thread_async() with a null Web Audio Context handle!`);assert(EmAudio[contextHandle],`Called emscripten_start_wasm_audio_worklet_thread_async() with a nonexisting/already freed Web Audio Context handle ${contextHandle}!`);assert(EmAudio[contextHandle]instanceof(window.AudioContext||window.webkitAudioContext),`Called emscripten_start_wasm_audio_worklet_thread_async() on a context handle ${contextHandle} that is not an AudioContext, but of type ${typeof EmAudio[contextHandle]}`);let audioContext=EmAudio[contextHandle],audioWorklet=audioContext.audioWorklet;assert(stackLowestAddress!=0,"AudioWorklets require a dedicated stack space for audio data marshalling between Wasm and JS!");assert(stackLowestAddress%16==0,`AudioWorklet stack should be aligned to 16 bytes! (was ${stackLowestAddress} == ${stackLowestAddress%16} mod 16) Use e.g. memalign(16, stackSize) to align the stack!`);assert(stackSize!=0,"AudioWorklets require a dedicated stack space for audio data marshalling between Wasm and JS!");assert(stackSize%16==0,`AudioWorklet stack size should be a multiple of 16 bytes! (was ${stackSize} == ${stackSize%16} mod 16)`);assert(!audioContext.audioWorkletInitialized,"emscripten_create_wasm_audio_worklet() was already called for AudioContext "+contextHandle+"! Only call this function once per AudioContext!");audioContext.audioWorkletInitialized=1;let audioWorkletCreationFailed=()=>{((a1,a2,a3)=>dynCall_viii(callback,a1,a2,a3))(contextHandle,0,userData)};if(!audioWorklet){return audioWorkletCreationFailed()}audioWorklet.addModule("amy.aw.js").then(()=>{audioWorklet.bootstrapMessage=new AudioWorkletNode(audioContext,"message",{processorOptions:{$ww:_wasmWorkersID++,wasm:wasmModule,wasmMemory,sb:stackLowestAddress,sz:stackSize}});audioWorklet.bootstrapMessage.port.onmessage=_EmAudioDispatchProcessorCallback;return audioWorklet.addModule(Module["mainScriptUrlOrBlob"]||_scriptName)}).then(()=>{((a1,a2,a3)=>dynCall_viii(callback,a1,a2,a3))(contextHandle,1,userData)}).catch(audioWorkletCreationFailed)};var _fd_close=fd=>{abort("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")};var 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 _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);return 70}var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}};var flush_NO_FILESYSTEM=()=>{_fflush(0);if(printCharBuffers[1].length)printChar(1,10);if(printCharBuffers[2].length)printChar(2,10)};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i>2];var len=GROWABLE_HEAP_U32()[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0};var runAndAbortIfError=func=>{try{return func()}catch(e){abort(e)}};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var runtimeKeepalivePop=()=>{assert(runtimeKeepaliveCounter>0);runtimeKeepaliveCounter-=1};var Asyncify={instrumentWasmImports(imports){var importPattern=/^(invoke_.*|__asyncjs__.*)$/;for(let[x,original]of Object.entries(imports)){if(typeof original=="function"){let isAsyncifyImport=original.isAsync||importPattern.test(x);imports[x]=(...args)=>{var originalAsyncifyState=Asyncify.state;try{return original(...args)}finally{var changedToDisabled=originalAsyncifyState===Asyncify.State.Normal&&Asyncify.state===Asyncify.State.Disabled;var ignoredInvoke=x.startsWith("invoke_")&&true;if(Asyncify.state!==originalAsyncifyState&&!isAsyncifyImport&&!changedToDisabled&&!ignoredInvoke){throw new Error(`import ${x} was not in ASYNCIFY_IMPORTS, but changed the state`)}}}}}},instrumentWasmExports(exports){var ret={};for(let[x,original]of Object.entries(exports)){if(typeof original=="function"){ret[x]=(...args)=>{Asyncify.exportCallStack.push(x);try{return original(...args)}finally{if(!ABORT){var y=Asyncify.exportCallStack.pop();assert(y===x);Asyncify.maybeStopUnwind()}}}}else{ret[x]=original}}return ret},State:{Normal:0,Unwinding:1,Rewinding:2,Disabled:3},state:0,StackSize:4096,currData:null,handleSleepReturnValue:0,exportCallStack:[],callStackNameToId:{},callStackIdToName:{},callStackId:0,asyncPromiseHandlers:null,sleepCallbacks:[],getCallStackId(funcName){var id=Asyncify.callStackNameToId[funcName];if(id===undefined){id=Asyncify.callStackId++;Asyncify.callStackNameToId[funcName]=id;Asyncify.callStackIdToName[id]=funcName}return id},maybeStopUnwind(){if(Asyncify.currData&&Asyncify.state===Asyncify.State.Unwinding&&Asyncify.exportCallStack.length===0){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_unwind);if(typeof Fibers!="undefined"){Fibers.trampoline()}}},whenDone(){assert(Asyncify.currData,"Tried to wait for an async operation when none is in progress.");assert(!Asyncify.asyncPromiseHandlers,"Cannot have multiple async operations in flight at once");return new Promise((resolve,reject)=>{Asyncify.asyncPromiseHandlers={resolve,reject}})},allocateData(){var ptr=_malloc(12+Asyncify.StackSize);Asyncify.setDataHeader(ptr,ptr+12,Asyncify.StackSize);Asyncify.setDataRewindFunc(ptr);return ptr},setDataHeader(ptr,stack,stackSize){GROWABLE_HEAP_U32()[ptr>>2]=stack;GROWABLE_HEAP_U32()[ptr+4>>2]=stack+stackSize},setDataRewindFunc(ptr){var bottomOfCallStack=Asyncify.exportCallStack[0];var rewindId=Asyncify.getCallStackId(bottomOfCallStack);GROWABLE_HEAP_I32()[ptr+8>>2]=rewindId},getDataRewindFuncName(ptr){var id=GROWABLE_HEAP_I32()[ptr+8>>2];var name=Asyncify.callStackIdToName[id];return name},getDataRewindFunc(name){var func=wasmExports[name];return func},doRewind(ptr){var name=Asyncify.getDataRewindFuncName(ptr);var func=Asyncify.getDataRewindFunc(name);return func()},handleSleep(startAsync){assert(Asyncify.state!==Asyncify.State.Disabled,"Asyncify cannot be done during or after the runtime exits");if(ABORT)return;if(Asyncify.state===Asyncify.State.Normal){var reachedCallback=false;var reachedAfterCallback=false;startAsync((handleSleepReturnValue=0)=>{assert(!handleSleepReturnValue||typeof handleSleepReturnValue=="number"||typeof handleSleepReturnValue=="boolean");if(ABORT)return;Asyncify.handleSleepReturnValue=handleSleepReturnValue;reachedCallback=true;if(!reachedAfterCallback){return}assert(!Asyncify.exportCallStack.length,"Waking up (starting to rewind) must be done from JS, without compiled code on the stack.");Asyncify.state=Asyncify.State.Rewinding;runAndAbortIfError(()=>_asyncify_start_rewind(Asyncify.currData));if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.resume()}var asyncWasmReturnValue,isError=false;try{asyncWasmReturnValue=Asyncify.doRewind(Asyncify.currData)}catch(err){asyncWasmReturnValue=err;isError=true}var handled=false;if(!Asyncify.currData){var asyncPromiseHandlers=Asyncify.asyncPromiseHandlers;if(asyncPromiseHandlers){Asyncify.asyncPromiseHandlers=null;(isError?asyncPromiseHandlers.reject:asyncPromiseHandlers.resolve)(asyncWasmReturnValue);handled=true}}if(isError&&!handled){throw asyncWasmReturnValue}});reachedAfterCallback=true;if(!reachedCallback){Asyncify.state=Asyncify.State.Unwinding;Asyncify.currData=Asyncify.allocateData();if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.pause()}runAndAbortIfError(()=>_asyncify_start_unwind(Asyncify.currData))}}else if(Asyncify.state===Asyncify.State.Rewinding){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_rewind);_free(Asyncify.currData);Asyncify.currData=null;Asyncify.sleepCallbacks.forEach(callUserCallback)}else{abort(`invalid state: ${Asyncify.state}`)}return Asyncify.handleSleepReturnValue},handleAsync(startAsync){return Asyncify.handleSleep(wakeUp=>{startAsync().then(wakeUp)})}};var getCFunc=ident=>{var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func};var writeArrayToMemory=(array,buffer)=>{assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");GROWABLE_HEAP_I8().set(array,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)=>{assert(typeof str==="string",`stringToUTF8Array expects a string (got ${typeof str})`);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;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++]=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)=>{assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};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;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i(...args)=>ccall(ident,returnType,argTypes,args,opts);Module["requestFullscreen"]=Browser.requestFullscreen;Module["requestFullScreen"]=Browser.requestFullScreen;Module["requestAnimationFrame"]=Browser.requestAnimationFrame;Module["setCanvasSize"]=Browser.setCanvasSize;Module["pauseMainLoop"]=Browser.mainLoop.pause;Module["resumeMainLoop"]=Browser.mainLoop.resume;Module["getUserMedia"]=Browser.getUserMedia;Module["createContext"]=Browser.createContext;var preloadedImages={};var preloadedAudios={};function checkIncomingModuleAPI(){ignoredModuleProp("fetchSettings")}var wasmImports={__assert_fail:___assert_fail,_abort_js:__abort_js,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_create_audio_context:_emscripten_create_audio_context,emscripten_create_wasm_audio_worklet_node:_emscripten_create_wasm_audio_worklet_node,emscripten_create_wasm_audio_worklet_processor_async:_emscripten_create_wasm_audio_worklet_processor_async,emscripten_date_now:_emscripten_date_now,emscripten_destroy_audio_context:_emscripten_destroy_audio_context,emscripten_destroy_web_audio_node:_emscripten_destroy_web_audio_node,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,emscripten_set_main_loop:_emscripten_set_main_loop,emscripten_sleep:_emscripten_sleep,emscripten_start_wasm_audio_worklet_thread_async:_emscripten_start_wasm_audio_worklet_thread_async,exit:_exit,fd_close:_fd_close,fd_seek:_fd_seek,fd_write:_fd_write,memory:wasmMemory};var wasmExports=createWasm();var ___wasm_call_ctors=createExportWrapper("__wasm_call_ctors",0);var _free=Module["_free"]=createExportWrapper("free",1);var _malloc=Module["_malloc"]=createExportWrapper("malloc",1);var _amy_start=Module["_amy_start"]=createExportWrapper("amy_start",4);var _amy_reset_sysclock=Module["_amy_reset_sysclock"]=createExportWrapper("amy_reset_sysclock",0);var _amy_play_message=Module["_amy_play_message"]=createExportWrapper("amy_play_message",1);var _sequencer_ticks=Module["_sequencer_ticks"]=createExportWrapper("sequencer_ticks",0);var _ma_device__on_notification_unlocked=Module["_ma_device__on_notification_unlocked"]=createExportWrapper("ma_device__on_notification_unlocked",1);var _ma_malloc_emscripten=Module["_ma_malloc_emscripten"]=createExportWrapper("ma_malloc_emscripten",2);var _ma_free_emscripten=Module["_ma_free_emscripten"]=createExportWrapper("ma_free_emscripten",2);var _ma_device_process_pcm_frames_capture__webaudio=Module["_ma_device_process_pcm_frames_capture__webaudio"]=createExportWrapper("ma_device_process_pcm_frames_capture__webaudio",3);var _ma_device_process_pcm_frames_playback__webaudio=Module["_ma_device_process_pcm_frames_playback__webaudio"]=createExportWrapper("ma_device_process_pcm_frames_playback__webaudio",3);var _amy_live_start=Module["_amy_live_start"]=createExportWrapper("amy_live_start",0);var _fflush=createExportWrapper("fflush",1);var _strerror=createExportWrapper("strerror",1);var _emscripten_stack_init=()=>(_emscripten_stack_init=wasmExports["emscripten_stack_init"])();var _emscripten_stack_get_free=()=>(_emscripten_stack_get_free=wasmExports["emscripten_stack_get_free"])();var _emscripten_stack_get_base=()=>(_emscripten_stack_get_base=wasmExports["emscripten_stack_get_base"])();var _emscripten_stack_get_end=()=>(_emscripten_stack_get_end=wasmExports["emscripten_stack_get_end"])();var __emscripten_wasm_worker_initialize=createExportWrapper("_emscripten_wasm_worker_initialize",2);var __emscripten_stack_restore=a0=>(__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"])(a0);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"])(a0);var _emscripten_stack_get_current=()=>(_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"])();var dynCall_ii=Module["dynCall_ii"]=createExportWrapper("dynCall_ii",2);var dynCall_vii=Module["dynCall_vii"]=createExportWrapper("dynCall_vii",3);var dynCall_iiii=Module["dynCall_iiii"]=createExportWrapper("dynCall_iiii",4);var dynCall_iii=Module["dynCall_iii"]=createExportWrapper("dynCall_iii",3);var dynCall_iiiii=Module["dynCall_iiiii"]=createExportWrapper("dynCall_iiiii",5);var dynCall_viii=Module["dynCall_viii"]=createExportWrapper("dynCall_viii",4);var dynCall_viiii=Module["dynCall_viiii"]=createExportWrapper("dynCall_viiii",5);var dynCall_v=Module["dynCall_v"]=createExportWrapper("dynCall_v",1);var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=createExportWrapper("dynCall_iiiiiiii",8);var dynCall_iiiji=Module["dynCall_iiiji"]=createExportWrapper("dynCall_iiiji",6);var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=createExportWrapper("dynCall_iiiiiii",7);var dynCall_jii=Module["dynCall_jii"]=createExportWrapper("dynCall_jii",3);var dynCall_jiji=Module["dynCall_jiji"]=createExportWrapper("dynCall_jiji",5);var dynCall_iidiiii=Module["dynCall_iidiiii"]=createExportWrapper("dynCall_iidiiii",7);var _asyncify_start_unwind=createExportWrapper("asyncify_start_unwind",1);var _asyncify_stop_unwind=createExportWrapper("asyncify_stop_unwind",0);var _asyncify_start_rewind=createExportWrapper("asyncify_start_rewind",1);var _asyncify_stop_rewind=createExportWrapper("asyncify_stop_rewind",0);Module["stackSave"]=stackSave;Module["stackRestore"]=stackRestore;Module["stackAlloc"]=stackAlloc;Module["wasmTable"]=wasmTable;Module["ccall"]=ccall;Module["cwrap"]=cwrap;var missingLibrarySymbols=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertU32PairToI53","getTempRet0","setTempRet0","zeroMemory","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","initRandomFill","randomFill","emscriptenLog","runMainThreadEmAsm","jstoi_q","getExecutableName","listenOnce","autoResumeAudioContext","dynCallLegacy","getDynCaller","dynCall","asmjsMangle","asyncLoad","mmapAlloc","HandleAllocator","getNativeTypeSize","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","uleb128Encode","generateFuncType","convertJsFunctionToWasm","getEmptyTableSlot","updateTableMap","getFunctionAddress","addFunction","removeFunction","reallyNegative","unSign","strLen","reSign","formatString","intArrayFromString","intArrayToString","AsciiToString","stringToAscii","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","stringToNewUTF8","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","battery","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","createDyncallWrapper","setImmediateWrapped","clearImmediateWrapped","polyfillSetImmediate","getPromise","makePromise","idsToPromises","makePromiseCallback","ExceptionInfo","findMatchingCatch","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_modeStringToFlags","FS_getMode","FS_stdin_getChar","FS_unlink","FS_createDataFile","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","setErrNo","demangle","stackTrace","_wasmWorkerPostFunction1","_wasmWorkerPostFunction2","_wasmWorkerPostFunction3","emscripten_audio_worklet_post_function_1","emscripten_audio_worklet_post_function_2","emscripten_audio_worklet_post_function_3"];missingLibrarySymbols.forEach(missingLibrarySymbol);var unexportedSymbols=["run","addOnPreRun","addOnInit","addOnPreMain","addOnExit","addOnPostRun","addRunDependency","removeRunDependency","out","err","callMain","abort","wasmMemory","wasmExports","writeStackCookie","checkStackCookie","convertI32PairToI53Checked","ptrToString","exitJS","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","readEmAsmArgs","runEmAsmFunction","jstoi_s","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","alignMemory","noExitRuntime","getCFunc","sigToWasmTypes","freeTableIndexes","functionsInTableMap","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","UTF16Decoder","stringToUTF8OnStack","writeArrayToMemory","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","safeSetTimeout","promiseMap","uncaughtExceptionCount","exceptionLast","exceptionCaught","Browser","setMainLoop","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_createPath","FS_createDevice","FS_readFile","FS","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","runAndAbortIfError","Asyncify","Fibers","SDL","SDL_gfx","allocateUTF8","allocateUTF8OnStack","print","printErr","_wasmWorkers","_wasmWorkersID","_wasmWorkerDelayedMessageQueue","_wasmWorkerAppendToQueue","_wasmWorkerRunPostMessage","_wasmWorkerInitializeRuntime","EmAudio","EmAudioCounter","emscriptenRegisterAudioObject","emscriptenDestroyAudioContext","emscriptenGetAudioObject","_EmAudioDispatchProcessorCallback"];unexportedSymbols.forEach(unexportedRuntimeSymbol);var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(){if(runDependencies>0){return}stackCheckInit();if(ENVIRONMENT_IS_WASM_WORKER){readyPromiseResolve(Module);return initRuntime()}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>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{flush_NO_FILESYSTEM()}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.");warnOnce("(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)")}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise;for(const prop of Object.keys(Module)){if(!(prop in moduleArg)){Object.defineProperty(moduleArg,prop,{configurable:true,get(){abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}})}} return moduleRtn; diff --git a/docs/amy.wasm b/docs/amy.wasm index c42634c5080422ee63da9666e66cf6e1fe2c89a9..69f0da8545008e15004d367f6b1e49542ffef3f5 100755 GIT binary patch delta 110847 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 KXF;EY$o~Q&4|uWw delta 106575 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

mL@y99w)EH^Viv?I7+X@o*wPB_>#c$w@V62! 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 A#{d8T diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 802365a..64e53ed 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -22,6 +22,7 @@ if (TARGET tinyusb_device) algorithms.c amy.c transfer.c + sequencer.c delay.c envelope.c custom.c diff --git a/src/amy.c b/src/amy.c index 914ef05..3757e91 100644 --- a/src/amy.c +++ b/src/amy.c @@ -126,7 +126,8 @@ int16_t amy_in_block[AMY_BLOCK_SIZE*AMY_NCHANS]; // Optional render hook that's called per oscillator during rendering uint8_t (*amy_external_render_hook)(uint16_t, SAMPLE*, uint16_t len ) = NULL; -#ifndef malloc_caps +#ifndef MALLOC_CAPS_DEFINED +#define MALLOC_CAPS_DEFINED void * malloc_caps(uint32_t size, uint32_t flags) { #ifdef ESP_PLATFORM //fprintf(stderr, "allocing size %ld flags %ld\n", size, flags); @@ -139,7 +140,6 @@ void * malloc_caps(uint32_t size, uint32_t flags) { #endif - // block -- what gets sent to the dac -- -32768...32767 (int16 le) output_sample_type * block; uint32_t total_samples; diff --git a/src/libminiaudio-audio.c b/src/libminiaudio-audio.c index 8cd15b1..bf26041 100644 --- a/src/libminiaudio-audio.c +++ b/src/libminiaudio-audio.c @@ -37,13 +37,14 @@ pthread_t amy_live_thread; #ifdef __EMSCRIPTEN__ #include - +extern void sequencer_check_and_fill(); void main_loop__em() { + // We call repeatedly here to fill the sequencer, for webassembly (no threads) + sequencer_check_and_fill(); } #endif - void amy_print_devices() { ma_context context; if (ma_context_init(NULL, 0, NULL, &context) != MA_SUCCESS) { @@ -71,9 +72,7 @@ void amy_print_devices() { ma_context_uninit(&context); } -#ifdef __EMSCRIPTEN__ -//#include "console.h" -#endif + // I've seen frame counts as big as 1440, I think *8 is enough room (2048) #define OUTPUT_RING_FRAMES (AMY_BLOCK_SIZE*8) diff --git a/src/sequencer.c b/src/sequencer.c index 959b121..3f3df0b 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -30,6 +30,13 @@ esp_timer_handle_t periodic_timer; #include #endif + +#ifdef __EMSCRIPTEN__ +#include +#endif + +uint32_t sequencer_ticks() { return sequencer_tick_count; } + void sequencer_reset() { // Remove all events sequence_entry_ll_t **entry_ll_ptr = &sequence_entry_ll_start; // Start pointing to the root node. @@ -83,7 +90,7 @@ uint8_t sequencer_add_event(struct event e, uint32_t tick, uint32_t period, uint } -static void sequencer_check_and_fill() { +void sequencer_check_and_fill() { // The while is in case the timer fires later than a tick; (on esp this would be due to SPI or wifi ops) while(amy_sysclock() >= (next_amy_tick_us/1000)) { sequencer_tick_count++; @@ -119,7 +126,12 @@ static void sequencer_check_and_fill() { entry_ll_ptr = &((*entry_ll_ptr)->next); // Update to point to the next field in the preceding list node. } } - + // call the right hook: +#ifdef __EMSCRIPTEN__ + EM_ASM({ + amy_sequencer_js_hook($0); + }, sequencer_tick_count); +#endif if(amy_external_sequencer_hook!=NULL) { amy_external_sequencer_hook(sequencer_tick_count); } diff --git a/src/sequencer.h b/src/sequencer.h index ebf48af..d00be2d 100644 --- a/src/sequencer.h +++ b/src/sequencer.h @@ -9,7 +9,7 @@ extern uint32_t sequencer_tick_count ; extern uint64_t next_amy_tick_us ; extern uint32_t us_per_tick ; - +uint32_t sequencer_ticks(); void sequencer_init(); void sequencer_recompute(); uint8_t sequencer_add_event(struct event e, uint32_t tick, uint32_t period, uint32_t tag);