diff --git a/Examples/README.md b/Examples/README.md index b64f2a0..2101f9c 100644 --- a/Examples/README.md +++ b/Examples/README.md @@ -1,3 +1,3 @@ -#### The file Vosklet.js in this folder, used by the examples and the outer [README.md](../README.md), has been set to decompress manually using ```DecompressionStream``` because I can't set a third-party (Github's) server response header. You can utilize this if you run into the same situation. Otherwise, please use the outer Vosklet.js instead. +#### The file Vosklet.js in this folder, used by the examples and the outer [README.md](../README.md), has been set to decompress explicitly using ```DecompressionStream``` (instead of implicit browser decompression) because I can't set a third-party (Github's) server response header. You can utilize this if you run into the same situation. Otherwise, please use the outer Vosklet.js instead. #### The motivation is that it will work right away when put into a HTML file. You can just make a local copy and try everything out quickly \ No newline at end of file diff --git a/Examples/Vosklet.js b/Examples/Vosklet.js index 16ef361..c4dc45e 100644 --- a/Examples/Vosklet.js +++ b/Examples/Vosklet.js @@ -1 +1 @@ -var loadVosklet = (() => { var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined; return (function(moduleArg = {}) { var moduleRtn;function n(){q.buffer!=t.buffer&&v();return t}function x(){q.buffer!=t.buffer&&v();return aa}function ba(){q.buffer!=t.buffer&&v();return ca}function da(){q.buffer!=t.buffer&&v();return ha}function y(){q.buffer!=t.buffer&&v();return ia}function z(){q.buffer!=t.buffer&&v();return ja}function ka(){q.buffer!=t.buffer&&v();return la}var A=moduleArg,ma,na,oa=new Promise((a,b)=>{ma=a;na=b}),pa="object"==typeof window,qa="function"==typeof importScripts,ra="object"==typeof process&&"object"==typeof process.Qa&&"string"==typeof process.Qa.node&&"renderer"!=process.type,sa=A.$ww;if(pa){var B=[],ta=["status","partialResult","result"];let a=URL.createObjectURL(new Blob(["(",(async()=>{let f=new TextDecoder,g=new TextEncoder,h=await navigator.storage.getDirectory();onmessage=async k=>{k=k.data;var l=k.Pa.split("/"),m=h;for(var p of l)m=await m.getDirectoryHandle(p,{create:!0});l=await m.getFileHandle("id",{create:!0});p=await m.getFileHandle("model.tgz",{create:!0});m=await l.createSyncAccessHandle();l=await p.createSyncAccessHandle();p=new ArrayBuffer(m.getSize());m.read(p);let r;if(f.decode(p)==k.id)r=new ArrayBuffer(l.getSize()),l.read(r),k=await (new Response((new Response(r)).body.pipeThrough(new DecompressionStream("gzip")))).arrayBuffer();else{p=await fetch(k.url);if(!p.ok)throw"Unable to download model";p=p.body.tee();r=await (new Response(p[0])).arrayBuffer();l.write(r,{at:0});l.truncate(r.byteLength);k=g.encode(k.id);m.write(k,{at:0});m.truncate(k.length);k=await (new Response(p[1].pipeThrough(new DecompressionStream("gzip")))).arrayBuffer()}m.close();l.close();self.postMessage(k,[k])}}).toString(),")()"],{type:"text/javascript"})),b=new Worker(a),c=URL.createObjectURL(new Blob(["(",(()=>{registerProcessor("VoskletTransferer",class extends AudioWorkletProcessor{constructor(f){super();this.sa=0;this.za=f.processorOptions[0];this.wa=new Float32Array(this.za)}process(f){f[0][0]&&(this.wa.set(f[0][0],this.sa),this.sa+=128,this.sa>=this.za&&(this.sa=0,this.port.postMessage(this.wa,[this.wa.buffer]),this.wa=new Float32Array(this.za)));return!0}})}).toString(),")()"],{type:"text/javascript"}));class d extends EventTarget{constructor(){super();B.push(this)}delete(){this.ga.delete()}static async ra(f,g,h,k){let l=new d,m=new Promise((p,r)=>{l.addEventListener("status",w=>{w.detail?r(w.detail):(k&&(l.findWord=u=>l.ga.findWord(u)),p(l))},{once:!0})});b.addEventListener("message",p=>{p=p.data;let r=C(p.byteLength);x().set(new Uint8Array(p),r);l.ga=new A.CommonModel(B.length-1,k,r,p.byteLength)},{once:!0});b.postMessage({url:f,Pa:g,id:h});return m}}class e extends EventTarget{constructor(){super();this.acceptWaveform=f=>{let g=C(4*f.length);ka().set(f,g/4);this.ga.acceptWaveform(g,f.length)};B.push(this);return new Proxy(this,{get(f,g){if(void 0!=f[g]||void 0!=f.ga[g]){var h=f[g];if(h)return h.bind?h.bind(f):h;h=f.ga[g];return h.bind?h.bind(f.ga):h}}})}async delete(f=!1){let g=new Promise(h=>this.addEventListener("status",()=>{this.ga.delete();h()},{once:!0}));this.ga.safeDelete(f);return g}static async ra(f,g,h,k,l){let m=new e,p=new Promise((r,w)=>{m.addEventListener("status",u=>{u.detail?w(u.detail):r(m)},{once:!0})});switch(h){case 1:m.ga=new A.Recognizer(B.length-1,g,f);break;case 2:m.ga=new A.Recognizer(B.length-1,g,f,l);break;default:m.ga=new A.Recognizer(B.length-1,g,f,k,0)}return p}}A={cleanUp:async()=>{for(let f of B)await f.delete();URL.revokeObjectURL(c);URL.revokeObjectURL(a);b.terminate()},createTransferer:async(f,g)=>{await f.audioWorklet.addModule(c);return new AudioWorkletNode(f,"VoskletTransferer",{channelCountMode:"explicit",numberOfInputs:1,numberOfOutputs:0,channelCount:1,processorOptions:[g]})},createModel:(f,g,h)=>d.ra(f,g,h,!0),createSpkModel:(f,g,h)=>d.ra(f,g,h,!1),createRecognizer:(f,g)=>e.ra(f.ga,g,1),createRecognizerWithGrm:(f,g,h)=>e.ra(f.ga,g,3,h,null),createRecognizerWithSpkModel:(f,g,h)=>e.ra(f.ga,g,2,null,h.ga)}}var ua=Object.assign({},A),F="",va,wa;if(pa||qa)qa?F=self.location.href:"undefined"!=typeof document&&document.currentScript&&(F=document.currentScript.src),_scriptName&&(F=_scriptName),F.startsWith("blob:")?F="":F=F.substr(0,F.replace(/[?#].*/,"").lastIndexOf("/")+1),qa&&(wa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),va=a=>fetch(a,{credentials:"same-origin"}).then(b=>b.ok?b.arrayBuffer():Promise.reject(Error(b.status+" : "+b.url)));var xa=console.log.bind(console),G=console.error.bind(console);Object.assign(A,ua);ua=null;var q,ya,za=!1,Aa,t,aa,ca,ha,ia,ja,la,Ba,Ca,Da;function v(){var a=q.buffer;A.HEAP8=t=new Int8Array(a);A.HEAP16=ca=new Int16Array(a);A.HEAPU8=aa=new Uint8Array(a);A.HEAPU16=ha=new Uint16Array(a);A.HEAP32=ia=new Int32Array(a);A.HEAPU32=ja=new Uint32Array(a);A.HEAPF32=la=new Float32Array(a);A.HEAPF64=Da=new Float64Array(a);A.HEAP64=Ba=new BigInt64Array(a);A.HEAPU64=Ca=new BigUint64Array(a)}if(A.wasmMemory)q=A.wasmMemory;else if(q=new WebAssembly.Memory({initial:5040,maximum:32768,shared:!0}),!(q.buffer instanceof SharedArrayBuffer))throw G("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"),ra&&G("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");v();var Ea=[],Fa=[],Ga=[];function Ha(){if(sa){let a=A;Ia(a.sb,a.sz);removeEventListener("message",Ja);Ka=Ka.forEach(La);addEventListener("message",La)}else for(;0a.startsWith("data:application/octet-stream;base64,"),Pa;function Qa(a){return va(a).then(b=>new Uint8Array(b),()=>{if(wa)var b=wa(a);else throw"both async and sync fetching of the wasm failed";return b})}function Ra(a,b,c){return Qa(a).then(d=>WebAssembly.instantiate(d,b)).then(c,d=>{G(`failed to asynchronously prepare wasm: ${d}`);Na(d)})}function Sa(a,b){var c=Pa;return"function"!=typeof WebAssembly.instantiateStreaming||Oa(c)||"function"!=typeof fetch?Ra(c,a,b):fetch(c,{credentials:"same-origin"}).then(d=>WebAssembly.instantiateStreaming(d,a).then(b,function(e){G(`wasm streaming compile failed: ${e}`);G("falling back to ArrayBuffer instantiation");return Ra(c,a,b)}))}function Ta(a,b,c){pa?B[a].dispatchEvent(new CustomEvent(ta[b],{detail:0==c?null:J(c)})):self.postMessage([a,b,c])}function Ua(a){this.name="ExitStatus";this.message=`Program terminated with exit(${a})`;this.status=a}var Ka=[],Va=[],Wa,Xa=a=>{var b=Va[a];b||(a>=Va.length&&(Va.length=a+1),Va[a]=b=Wa.get(a));return b},La=a=>{a=a.data;let b=a._wsc;b&&Xa(b)(...a.x)},Ja=a=>{Ka.push(a)},$a=new TextDecoder,J=(a,b)=>{if(!a)return"";b=a+b;for(var c=a;!(c>=b)&&x()[c];)++c;return $a.decode(x().slice(a,c))};class ab{constructor(a){this.ea=a-24}}var bb=0,cb=0,db=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a},eb,K=a=>{for(var b="";x()[a];)b+=eb[x()[a++]];return b},L={},M={},fb={},N,gb=a=>{throw new N(a);},O,Q=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new O("Mismatched type converter count");for(var k=0;kfb[h]=b);var e=Array(b.length),f=[],g=0;b.forEach((h,k)=>{M.hasOwnProperty(h)?e[k]=M[h]:(f.push(h),L.hasOwnProperty(h)||(L[h]=[]),L[h].push(()=>{e[k]=M[h];++g;g===f.length&&d(e)}))});0===f.length&&d(e)};function hb(a,b,c={}){var d=b.name;if(!a)throw new N(`type "${d}" must have a positive integer typeid pointer`);if(M.hasOwnProperty(a)){if(c.Ja)return;throw new N(`Cannot register type '${d}' twice`);}M[a]=b;delete fb[a];L.hasOwnProperty(a)&&(b=L[a],delete L[a],b.forEach(e=>e()))}function P(a,b,c={}){return hb(a,b,c)}var ib=(a,b,c)=>{switch(b){case 1:return c?d=>n()[d]:d=>x()[d];case 2:return c?d=>ba()[d>>1]:d=>da()[d>>1];case 4:return c?d=>y()[d>>2]:d=>z()[d>>2];case 8:return c?d=>Ba[d>>3]:d=>Ca[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},jb=a=>{throw new N(a.ca.fa.da.name+" instance already deleted");},kb=!1,lb=()=>{},mb=(a,b,c)=>{if(b===c)return a;if(void 0===c.ja)return null;a=mb(a,b,c.ja);return null===a?null:c.Fa(a)},nb={},R=[],ob=()=>{for(;R.length;){var a=R.pop();a.ca.pa=!1;a["delete"]()}},S,T={},pb=(a,b)=>{if(void 0===b)throw new N("ptr should not be undefined");for(;a.ja;)b=a.ua(b),a=a.ja;return T[b]},qb=(a,b)=>{if(!b.fa||!b.ea)throw new O("makeClassHandle requires ptr and ptrType");if(!!b.la!==!!b.ha)throw new O("Both smartPtrType and smartPtr must be specified");b.count={value:1};return U(Object.create(a,{ca:{value:b,writable:!0}}))},U=a=>{if("undefined"===typeof FinalizationRegistry)return U=b=>b,a;kb=new FinalizationRegistry(b=>{b=b.ca;--b.count.value;0===b.count.value&&(b.ha?b.la.na(b.ha):b.fa.da.na(b.ea))});U=b=>{var c=b.ca;c.ha&&kb.register(b,{ca:c},b);return b};lb=b=>{kb.unregister(b)};return U(a)};function rb(){}var sb=(a,b)=>Object.defineProperty(b,"name",{value:a}),tb=(a,b,c)=>{if(void 0===a[b].ia){var d=a[b];a[b]=function(...e){if(!a[b].ia.hasOwnProperty(e.length))throw new N(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].ia})!`);return a[b].ia[e.length].apply(this,e)};a[b].ia=[];a[b].ia[d.va]=d}},ub=(a,b,c)=>{if(A.hasOwnProperty(a)){if(void 0===c||void 0!==A[a].ia&&void 0!==A[a].ia[c])throw new N(`Cannot register public name '${a}' twice`);tb(A,a,a);if(A.hasOwnProperty(c))throw new N(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);A[a].ia[c]=b}else A[a]=b,void 0!==c&&(A[a].Ta=c)},vb=a=>{if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function wb(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.qa=c;this.na=d;this.ja=e;this.Ha=f;this.ua=g;this.Fa=h;this.La=[]}var xb=(a,b,c)=>{for(;b!==c;){if(!b.ua)throw new N(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.ua(a);b=b.ja}return a};function yb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);return 0}if(!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);return xb(b.ca.ea,b.ca.fa.da,this.da)}function zb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);if(this.ya){var c=this.Ma();null!==a&&a.push(this.na,c);return c}return 0}if(!b||!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.xa&&b.ca.fa.xa)throw new N(`Cannot convert argument of type ${b.ca.la?b.ca.la.name:b.ca.fa.name} to parameter type ${this.name}`);c=xb(b.ca.ea,b.ca.fa.da,this.da);if(this.ya){if(void 0===b.ca.ha)throw new N("Passing raw pointer to smart pointer is illegal");switch(this.Oa){case 0:if(b.ca.la===this)c=b.ca.ha;else throw new N(`Cannot convert argument of type ${b.ca.la?b.ca.la.name:b.ca.fa.name} to parameter type ${this.name}`);break;case 1:c=b.ca.ha;break;case 2:if(b.ca.la===this)c=b.ca.ha;else{var d=b.clone();c=this.Na(c,Ab(()=>d["delete"]()));null!==a&&a.push(this.na,c)}break;default:throw new N("Unsupporting sharing policy");}}return c}function Bb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);return 0}if(!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.ca.fa.xa)throw new N(`Cannot convert argument of type ${b.ca.fa.name} to parameter type ${this.name}`);return xb(b.ca.ea,b.ca.fa.da,this.da)}function Cb(a){return this.fromWireType(z()[a>>2])}function Db(a,b,c,d,e,f,g,h,k,l,m){this.name=a;this.da=b;this.Aa=c;this.xa=d;this.ya=e;this.Ka=f;this.Oa=g;this.Da=h;this.Ma=k;this.Na=l;this.na=m;e||void 0!==b.ja?this.toWireType=zb:(this.toWireType=d?yb:Bb,this.ka=null)}var Eb=(a,b,c)=>{if(!A.hasOwnProperty(a))throw new O("Replacing nonexistent public symbol");void 0!==A[a].ia&&void 0!==c?A[a].ia[c]=b:(A[a]=b,A[a].va=c)},V=(a,b)=>{a=K(a);var c=Xa(b);if("function"!=typeof c)throw new N(`unknown function pointer with signature ${a}: ${b}`);return c},Fb,Hb=a=>{a=Gb(a);var b=K(a);W(a);return b},Ib=(a,b)=>{function c(f){e[f]||M[f]||(fb[f]?fb[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Fb(`${a}: `+d.map(Hb).join([", "]));},Jb=(a,b)=>{for(var c=[],d=0;d>2]);return c},Kb=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function Lb(a){for(var b=1;bg)throw new N("argTypes array size mismatch! Must at least get return value and 'this' types!");var h=null!==b[1]&&null!==c,k=Lb(b);c="void"!==b[0].name;d=[a,gb,d,e,Kb,b[0],b[1]];for(e=0;e{a=a.trim();const b=a.indexOf("(");return-1!==b?a.substr(0,b):a},Qb=[],X=[],Ab=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Qb.pop()||X.length;X[b]=a;X[b+1]=1;return b}},Rb={name:"emscripten::val",fromWireType:a=>{if(!a)throw new N("Cannot use deleted val. handle = "+a);var b=X[a];9Ab(b),ma:8,readValueFromPointer:Cb,ka:null},Sb=(a,b,c)=>{switch(b){case 1:return c?function(d){return this.fromWireType(n()[d])}:function(d){return this.fromWireType(x()[d])};case 2:return c?function(d){return this.fromWireType(ba()[d>>1])}:function(d){return this.fromWireType(da()[d>>1])};case 4:return c?function(d){return this.fromWireType(y()[d>>2])}:function(d){return this.fromWireType(z()[d>>2])};default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},Tb=a=>{var b=M[a];if(void 0===b)throw a=`${"enum"} has unknown type ${Hb(a)}`,new N(a);return b},Ub=(a,b)=>{switch(b){case 4:return function(c){return this.fromWireType(ka()[c>>2])};case 8:return function(c){var d=this.fromWireType;q.buffer!=t.buffer&&v();return d.call(this,Da[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},Y=(a,b,c,d)=>{if(!(0=g){var h=a.charCodeAt(++f);g=65536+((g&1023)<<10)|h&1023}if(127>=g){if(c>=d)break;b[c++]=g}else{if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6}else{if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63}b[c++]=128|g>>6&63}b[c++]=128|g&63}}b[c]=0;return c-e},Vb=(a,b)=>{var c=17;Y(a,x(),b,c)},Wb=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},Xb=new TextDecoder("utf-16le"),Yb=(a,b)=>{var c=a>>1;for(b=c+b/2;!(c>=b)&&da()[c];)++c;c<<=1;return Xb.decode(x().slice(a,c))},Zb=(a,b,c)=>{c??=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=f;b+=2}ba()[b>>1]=0;return b-d},$b=a=>2*a.length,ac=(a,b)=>{for(var c=0,d="";!(c>=b/4);){var e=y()[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d},bc=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}y()[b>>2]=f;b+=4;if(b+4>c)break}y()[b>>2]=0;return b-d},cc=a=>{for(var b=0,c=0;c=d&&++c;b+=4}return b},dc={},ec=1,fc=URL.createObjectURL(new Blob(["onmessage=function(d){onmessage=null;d=d.data;d[`instantiateWasm`]=(i,r)=>{var n=new WebAssembly.Instance(d[`wasm`],i);return r(n,d[`wasm`]);};importScripts(d.js);loadVosklet(d);d.wasm=d.mem=d.js=0;}"],{type:"application/javascript"})),gc={},hc=a=>{if(!(a instanceof Ua||"unwind"==a))throw a;},ic=0,jc=a=>{Aa=a;0{if(!za)try{if(a(),!(0{if(!pc){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:"./this.program"},b;for(b in oc)void 0===oc[b]?delete a[b]:a[b]=oc[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);pc=c}return pc},pc,rc=()=>{if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues)return a=>(a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),a);Na("initRandomDevice")},sc=a=>(sc=rc())(a),tc=Array(256),uc=0;256>uc;++uc)tc[uc]=String.fromCharCode(uc);eb=tc;N=A.BindingError=class extends Error{constructor(a){super(a);this.name="BindingError"}};O=A.InternalError=class extends Error{constructor(a){super(a);this.name="InternalError"}};Object.assign(rb.prototype,{isAliasOf:function(a){if(!(this instanceof rb&&a instanceof rb))return!1;var b=this.ca.fa.da,c=this.ca.ea;a.ca=a.ca;var d=a.ca.fa.da;for(a=a.ca.ea;b.ja;)c=b.ua(c),b=b.ja;for(;d.ja;)a=d.ua(a),d=d.ja;return b===d&&c===a},clone:function(){this.ca.ea||jb(this);if(this.ca.ta)return this.ca.count.value+=1,this;var a=U,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.ca;a=a(c.call(b,d,{ca:{value:{count:e.count,pa:e.pa,ta:e.ta,ea:e.ea,fa:e.fa,ha:e.ha,la:e.la}}}));a.ca.count.value+=1;a.ca.pa=!1;return a},["delete"](){this.ca.ea||jb(this);if(this.ca.pa&&!this.ca.ta)throw new N("Object already scheduled for deletion");lb(this);var a=this.ca;--a.count.value;0===a.count.value&&(a.ha?a.la.na(a.ha):a.fa.da.na(a.ea));this.ca.ta||(this.ca.ha=void 0,this.ca.ea=void 0)},isDeleted:function(){return!this.ca.ea},deleteLater:function(){this.ca.ea||jb(this);if(this.ca.pa&&!this.ca.ta)throw new N("Object already scheduled for deletion");R.push(this);1===R.length&&S&&S(ob);this.ca.pa=!0;return this}});A.getInheritedInstanceCount=()=>Object.keys(T).length;A.getLiveInheritedInstances=()=>{var a=[],b;for(b in T)T.hasOwnProperty(b)&&a.push(T[b]);return a};A.flushPendingDeletes=ob;A.setDelayFunction=a=>{S=a;R.length&&S&&S(ob)};Object.assign(Db.prototype,{Ia(a){this.Da&&(a=this.Da(a));return a},Ca(a){this.na?.(a)},ma:8,readValueFromPointer:Cb,fromWireType:function(a){function b(){return this.ya?qb(this.da.qa,{fa:this.Ka,ea:c,la:this,ha:a}):qb(this.da.qa,{fa:this,ea:a})}var c=this.Ia(a);if(!c)return this.Ca(a),null;var d=pb(this.da,c);if(void 0!==d){if(0===d.ca.count.value)return d.ca.ea=c,d.ca.ha=a,d.clone();d=d.clone();this.Ca(a);return d}d=this.da.Ha(c);d=nb[d];if(!d)return b.call(this);d=this.xa?d.Ea:d.pointerType;var e=mb(c,this.da,d.da);return null===e?b.call(this):this.ya?qb(d.da.qa,{fa:d,ea:e,la:this,ha:a}):qb(d.da.qa,{fa:d,ea:e})}});Fb=A.UnboundTypeError=((a,b)=>{var c=sb(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c})(Error,"UnboundTypeError");X.push(0,1,void 0,1,null,1,!0,1,!1,1);A.count_emval_handles=()=>X.length/2-5-Qb.length;sa&&(dc[0]=this,addEventListener("message",Ja));var wc={c:(a,b,c,d)=>{Na(`Assertion failed: ${J(a)}, at: `+[b?J(b):"unknown filename",c,d?J(d):"unknown function"])},s:(a,b)=>Xa(a)(b),d:(a,b,c)=>{var d=new ab(a);z()[d.ea+16>>2]=0;z()[d.ea+4>>2]=b;z()[d.ea+8>>2]=c;bb=a;cb++;throw bb;},P:()=>{Na("")},q:(a,b,c)=>{b=K(b);P(a,{name:b,fromWireType:d=>d,toWireType:function(d,e){if("bigint"!=typeof e&&"number"!=typeof e)throw new TypeError(`Cannot convert "${db(e)}" to ${this.name}`);"number"==typeof e&&(e=BigInt(e));return e},ma:8,readValueFromPointer:ib(b,c,-1==b.indexOf("u")),ka:null})},R:(a,b,c,d)=>{b=K(b);P(a,{name:b,fromWireType:function(e){return!!e},toWireType:function(e,f){return f?c:d},ma:8,readValueFromPointer:function(e){return this.fromWireType(x()[e])},ka:null})},o:(a,b,c,d,e,f,g,h,k,l,m,p,r)=>{m=K(m);f=V(e,f);h&&=V(g,h);l&&=V(k,l);r=V(p,r);var w=vb(m);ub(w,function(){Ib(`Cannot construct ${m} due to unbound types`,[d])});Q([a,b,c],d?[d]:[],u=>{u=u[0];if(d){var D=u.da;var ea=D.qa}else ea=rb.prototype;u=sb(m,function(...Ya){if(Object.getPrototypeOf(this)!==Za)throw new N("Use 'new' to construct "+m);if(void 0===E.oa)throw new N(m+" has no accessible constructor");var Pb=E.oa[Ya.length];if(void 0===Pb)throw new N(`Tried to invoke ctor of ${m} with invalid number of parameters (${Ya.length}) - expected (${Object.keys(E.oa).toString()}) parameters instead!`);return Pb.apply(this,Ya)});var Za=Object.create(ea,{constructor:{value:u}});u.prototype=Za;var E=new wb(m,u,Za,r,D,f,h,l);if(E.ja){var fa;(fa=E.ja).Ba??(fa.Ba=[]);E.ja.Ba.push(E)}D=new Db(m,E,!0,!1,!1);fa=new Db(m+"*",E,!1,!1,!1);ea=new Db(m+" const*",E,!1,!0,!1);nb[a]={pointerType:fa,Ea:ea};Eb(w,u);return[D,fa,ea]})},j:(a,b,c,d,e,f)=>{var g=Jb(b,c);e=V(d,e);Q([],[a],h=>{h=h[0];var k=`constructor ${h.name}`;void 0===h.da.oa&&(h.da.oa=[]);if(void 0!==h.da.oa[b-1])throw new N(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${h.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);h.da.oa[b-1]=()=>{Ib(`Cannot construct ${h.name} due to unbound types`,g)};Q([],g,l=>{l.splice(1,0,null);h.da.oa[b-1]=Nb(k,l,null,e,f);return[]});return[]})},h:(a,b,c,d,e,f,g,h,k)=>{var l=Jb(c,d);b=K(b);b=Ob(b);f=V(e,f);Q([],[a],m=>{function p(){Ib(`Cannot call ${r} due to unbound types`,l)}m=m[0];var r=`${m.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);h&&m.da.La.push(b);var w=m.da.qa,u=w[b];void 0===u||void 0===u.ia&&u.className!==m.name&&u.va===c-2?(p.va=c-2,p.className=m.name,w[b]=p):(tb(w,b,r),w[b].ia[c-2]=p);Q([],l,D=>{D=Nb(r,D,m,f,g,k);void 0===w[b].ia?(D.va=c-2,w[b]=D):w[b].ia[c-2]=D;return[]});return[]})},Q:a=>P(a,Rb),A:(a,b,c,d)=>{function e(){}b=K(b);e.values={};P(a,{name:b,constructor:e,fromWireType:function(f){return this.constructor.values[f]},toWireType:(f,g)=>g.value,ma:8,readValueFromPointer:Sb(b,c,d),ka:null});ub(b,e)},k:(a,b,c)=>{var d=Tb(a);b=K(b);a=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},constructor:{value:sb(`${d.name}_${b}`,function(){})}});a.values[c]=d;a[b]=d},p:(a,b,c)=>{b=K(b);P(a,{name:b,fromWireType:d=>d,toWireType:(d,e)=>e,ma:8,readValueFromPointer:Ub(b,c),ka:null})},K:(a,b,c,d,e,f,g)=>{var h=Jb(b,c);a=K(a);a=Ob(a);e=V(d,e);ub(a,function(){Ib(`Cannot call ${a} due to unbound types`,h)},b-1);Q([],h,k=>{Eb(a,Nb(a,[k[0],null].concat(k.slice(1)),null,e,f,g),b-1);return[]})},i:(a,b,c,d,e)=>{b=K(b);-1===e&&(e=4294967295);e=h=>h;if(0===d){var f=32-8*c;e=h=>h<>>f}var g=b.includes("unsigned")?function(h,k){return k>>>0}:function(h,k){return k};P(a,{name:b,fromWireType:e,toWireType:g,ma:8,readValueFromPointer:ib(b,c,0!==d),ka:null})},e:(a,b,c)=>{function d(f){var g=z()[f>>2];f=z()[f+4>>2];return new e(n().buffer,f,g)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=K(c);P(a,{name:c,fromWireType:d,ma:8,readValueFromPointer:d},{Ja:!0})},r:(a,b)=>{b=K(b);var c="std::string"===b;P(a,{name:b,fromWireType:function(d){var e=z()[d>>2],f=d+4;if(c)for(var g=f,h=0;h<=e;++h){var k=f+h;if(h==e||0==x()[k]){g=J(g,k-g);if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=k+1}}else{l=Array(e);for(h=0;h>2]=g;if(c&&f)g+=1,Y(e,x(),k,g);else if(f)for(f=0;f{c=K(c);if(2===b){var d=Yb;var e=Zb;var f=$b;var g=h=>da()[h>>1]}else 4===b&&(d=ac,e=bc,f=cc,g=h=>z()[h>>2]);P(a,{name:c,fromWireType:h=>{for(var k=z()[h>>2],l,m=h+4,p=0;p<=k;++p){var r=h+4+p*b;if(p==k||0==g(r))m=d(m,r-m),void 0===l?l=m:(l+=String.fromCharCode(0),l+=m),m=r+b}W(h);return l},toWireType:(h,k)=>{if("string"!=typeof k)throw new N(`Cannot pass non-string to C++ string type ${c}`);var l=f(k),m=C(4+l+b);z()[m>>2]=l/b;e(k,m+4,l+b);null!==h&&h.push(W,m);return m},ma:8,readValueFromPointer:Cb,ka(h){W(h)}})},S:(a,b)=>{b=K(b);P(a,{Sa:!0,name:b,ma:0,fromWireType:()=>{},toWireType:()=>{}})},H:(a,b)=>{let c=dc[ec]=new Worker(fc);c.postMessage({$ww:ec,wasm:ya,js:A.mainScriptUrlOrBlob||_scriptName,wasmMemory:q,sb:a,sz:b});c.onmessage=La;return ec++},O:()=>1,u:()=>{ic=0},v:(a,b)=>{gc[a]&&(clearTimeout(gc[a].id),delete gc[a]);if(!b)return 0;var c=setTimeout(()=>{delete gc[a];kc(()=>vc(a,performance.now()))},b);gc[a]={id:c,Wa:b};return 0},J:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var g=Math.max(f,e);z()[a>>2]=60*g;y()[b>>2]=Number(f!=e);b=h=>{var k=Math.abs(h);return`UTC${0<=h?"-":"+"}${String(Math.floor(k/60)).padStart(2,"0")}${String(k%60).padStart(2,"0")}`};a=b(f);b=b(e);ex().set(mc[a].Ga,b),B:()=>lc.length,C:()=>mc.length,y:(a,b)=>{a=lc[a].Ra;var c=Wb(a)+1;Y(a,x(),b,c)},w:a=>mc[a].mode,E:a=>mc[a].Ga.length,z:(a,b)=>{a=lc[a].Ua;var c=Wb(a)+1;Y(a,x(),b,c)},x:(a,b)=>{a=mc[a].Va;var c=Wb(a)+1;Y(a,x(),b,c)},G:()=>{a:{if(!nc.length){var a=null;"undefined"!=typeof window&&"function"==typeof window.prompt&&(a=window.prompt("Input: "),null!==a&&(a+="\n"));if(!a){var b=null;break a}b=Array(Wb(a)+1);a=Y(a,b,0,b.length);b.length=a;nc=b}b=nc.shift()}return"number"===typeof b?b:-1},T:a=>{console.error(J(a))},V:a=>{console.log(J(a))},U:a=>{console.warn(J(a))},f:()=>Date.now(),l:a=>G(J(a)),m:()=>performance.now(),F:a=>xa(J(a)),L:a=>{var b=x().length;a>>>=0;if(a<=b||2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);a:{d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,d)/65536))-q.buffer.byteLength+65535)/65536;try{q.grow(d);v();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},M:(a,b)=>{var c=0;qc().forEach((d,e)=>{var f=b+c;e=z()[a+4*e>>2]=f;for(f=0;f{var c=qc();z()[a>>2]=c.length;var d=0;c.forEach(e=>d+=e.length+1);z()[b>>2]=d;return 0},b:a=>{Aa=a;jc(a)},g:Ta,I:(a,b)=>{sc(x().subarray(a,a+b));return 0},a:q,t:jc,W:function(a,b){for(let c of Object.values(dc))c.postMessage({_wsc:a,x:[b]}),c.onmessage=d=>Ta(...d.data)}},Z=function(){function a(c,d){Z=c.exports;Wa=Z._;Fa.unshift(Z.X);ya=d;H--;0==H&&(null!==Ma&&(clearInterval(Ma),Ma=null),I&&(c=I,I=null,c()));return Z}var b={a:wc};H++;if(A.instantiateWasm)try{return A.instantiateWasm(b,a)}catch(c){G(`Module.instantiateWasm callback failed with error: ${c}`),na(c)}Pa??=Oa("Vosklet.wasm")?"Vosklet.wasm":F+"Vosklet.wasm";Sa(b,function(c){a(c.instance,c.module)}).catch(na);return{}}(),W=a=>(W=Z.Y)(a),C=a=>(C=Z.Z)(a),Gb=a=>(Gb=Z.$)(a),vc=(a,b)=>(vc=Z.aa)(a,b),Ia=(a,b)=>(Ia=Z.ba)(a,b),xc;I=function yc(){xc||zc();xc||(I=yc)};function zc(){if(!(0 loadVosklet); \ No newline at end of file +var loadVosklet = (() => { var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined; return (function(moduleArg = {}) { var moduleRtn;function m(){p.buffer!=q.buffer&&t();return q}function w(){p.buffer!=q.buffer&&t();return aa}function ba(){p.buffer!=q.buffer&&t();return ca}function da(){p.buffer!=q.buffer&&t();return ha}function y(){p.buffer!=q.buffer&&t();return ia}function z(){p.buffer!=q.buffer&&t();return ja}function ka(){p.buffer!=q.buffer&&t();return la}var A=moduleArg,ma,na,oa=new Promise((a,b)=>{ma=a;na=b}),pa="object"==typeof window,qa="function"==typeof importScripts,ra="object"==typeof process&&"object"==typeof process.Pa&&"string"==typeof process.Pa.node&&"renderer"!=process.type,sa=A.$ww;if(pa){var B=[],ta=["status","partialResult","result"];let a=URL.createObjectURL(new Blob(["(",(()=>{registerProcessor("VoskletTransferer",class extends AudioWorkletProcessor{constructor(d){super();this.sa=0;this.za=d.processorOptions[0];this.wa=new Float32Array(this.za)}process(d){d[0][0]&&(this.wa.set(d[0][0],this.sa),this.sa+=128,this.sa>=this.za&&(this.sa=0,this.port.postMessage(this.wa,[this.wa.buffer]),this.wa=new Float32Array(this.za)));return!0}})}).toString(),")()"],{type:"text/javascript"}));class b extends EventTarget{constructor(){super();B.push(this)}delete(){this.ga.delete()}static async ra(d,e,f,h){let g=new b,k=new Promise((u,r)=>{g.addEventListener("status",x=>{x.detail?r(x.detail):(h&&(g.findWord=v=>g.ga.findWord(v)),u(g))},{once:!0})}),l=await caches.open("Vosklet"),n=await l.match(e);if("undefined"==typeof n||n.headers.get("id")!=f){n=await fetch(d,{cache:"no-store"});if(!n.ok)throw"Unable to fetch model, status: "+n.status;await l.put(e,new Response(n.clone().body,{headers:{id:f}}))}d=await (new Response(n.body.pipeThrough(new DecompressionStream("gzip")))).arrayBuffer();e=C(d.byteLength);w().set(new Uint8Array(d),e);g.ga=new A.CommonModel(B.length-1,h,e,d.byteLength);return k}}class c extends EventTarget{constructor(){super();this.acceptWaveform=d=>{let e=C(4*d.length);ka().set(d,e/4);this.ga.acceptWaveform(e,d.length)};B.push(this);return new Proxy(this,{get(d,e){if(void 0!=d[e]||void 0!=d.ga[e]){var f=d[e];if(f)return f.bind?f.bind(d):f;f=d.ga[e];return f.bind?f.bind(d.ga):f}}})}async delete(d=!1){let e=new Promise(f=>this.addEventListener("status",()=>{this.ga.delete();f()},{once:!0}));this.ga.safeDelete(d);return e}static async ra(d,e,f,h,g){let k=new c,l=new Promise((n,u)=>{k.addEventListener("status",r=>{r.detail?u(r.detail):n(k)},{once:!0})});switch(f){case 1:k.ga=new A.Recognizer(B.length-1,e,d);break;case 2:k.ga=new A.Recognizer(B.length-1,e,d,g);break;default:k.ga=new A.Recognizer(B.length-1,e,d,h,0)}return l}}A={cleanUp:async()=>{for(let d of B)await d.delete();URL.revokeObjectURL(a)},createTransferer:async(d,e)=>{await d.audioWorklet.addModule(a);return new AudioWorkletNode(d,"VoskletTransferer",{channelCountMode:"explicit",numberOfInputs:1,numberOfOutputs:0,channelCount:1,processorOptions:[e]})},createModel:(d,e,f)=>b.ra(d,e,f,!0),createSpkModel:(d,e,f)=>b.ra(d,e,f,!1),createRecognizer:(d,e)=>c.ra(d.ga,e,1),createRecognizerWithGrm:(d,e,f)=>c.ra(d.ga,e,3,f,null),createRecognizerWithSpkModel:(d,e,f)=>c.ra(d.ga,e,2,null,f.ga)}}var ua=Object.assign({},A),F="",va,wa;if(pa||qa)qa?F=self.location.href:"undefined"!=typeof document&&document.currentScript&&(F=document.currentScript.src),_scriptName&&(F=_scriptName),F.startsWith("blob:")?F="":F=F.substr(0,F.replace(/[?#].*/,"").lastIndexOf("/")+1),qa&&(wa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),va=a=>fetch(a,{credentials:"same-origin"}).then(b=>b.ok?b.arrayBuffer():Promise.reject(Error(b.status+" : "+b.url)));var xa=console.log.bind(console),G=console.error.bind(console);Object.assign(A,ua);ua=null;var p,ya,za=!1,Aa,q,aa,ca,ha,ia,ja,la,Ba,Ca,Da;function t(){var a=p.buffer;A.HEAP8=q=new Int8Array(a);A.HEAP16=ca=new Int16Array(a);A.HEAPU8=aa=new Uint8Array(a);A.HEAPU16=ha=new Uint16Array(a);A.HEAP32=ia=new Int32Array(a);A.HEAPU32=ja=new Uint32Array(a);A.HEAPF32=la=new Float32Array(a);A.HEAPF64=Da=new Float64Array(a);A.HEAP64=Ba=new BigInt64Array(a);A.HEAPU64=Ca=new BigUint64Array(a)}if(A.wasmMemory)p=A.wasmMemory;else if(p=new WebAssembly.Memory({initial:5040,maximum:32768,shared:!0}),!(p.buffer instanceof SharedArrayBuffer))throw G("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"),ra&&G("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");t();var Ea=[],Fa=[],Ga=[];function Ha(){if(sa){let a=A;Ia(a.sb,a.sz);removeEventListener("message",Ja);Ka=Ka.forEach(La);addEventListener("message",La)}else for(;0a.startsWith("data:application/octet-stream;base64,"),Pa;function Qa(a){return va(a).then(b=>new Uint8Array(b),()=>{if(wa)var b=wa(a);else throw"both async and sync fetching of the wasm failed";return b})}function Ra(a,b,c){return Qa(a).then(d=>WebAssembly.instantiate(d,b)).then(c,d=>{G(`failed to asynchronously prepare wasm: ${d}`);Na(d)})}function Sa(a,b){var c=Pa;return"function"!=typeof WebAssembly.instantiateStreaming||Oa(c)||"function"!=typeof fetch?Ra(c,a,b):fetch(c,{credentials:"same-origin"}).then(d=>WebAssembly.instantiateStreaming(d,a).then(b,function(e){G(`wasm streaming compile failed: ${e}`);G("falling back to ArrayBuffer instantiation");return Ra(c,a,b)}))}function Ta(a,b,c){pa?B[a].dispatchEvent(new CustomEvent(ta[b],{detail:0==c?null:J(c)})):self.postMessage([a,b,c])}function Ua(a){this.name="ExitStatus";this.message=`Program terminated with exit(${a})`;this.status=a}var Ka=[],Va=[],Wa,Xa=a=>{var b=Va[a];b||(a>=Va.length&&(Va.length=a+1),Va[a]=b=Wa.get(a));return b},La=a=>{a=a.data;let b=a._wsc;b&&Xa(b)(...a.x)},Ja=a=>{Ka.push(a)},$a=new TextDecoder,J=(a,b)=>{if(!a)return"";b=a+b;for(var c=a;!(c>=b)&&w()[c];)++c;return $a.decode(w().slice(a,c))};class ab{constructor(a){this.ea=a-24}}var bb=0,cb=0,db=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a},eb,K=a=>{for(var b="";w()[a];)b+=eb[w()[a++]];return b},L={},M={},fb={},N,gb=a=>{throw new N(a);},O,Q=(a,b,c)=>{function d(g){g=c(g);if(g.length!==a.length)throw new O("Mismatched type converter count");for(var k=0;kfb[g]=b);var e=Array(b.length),f=[],h=0;b.forEach((g,k)=>{M.hasOwnProperty(g)?e[k]=M[g]:(f.push(g),L.hasOwnProperty(g)||(L[g]=[]),L[g].push(()=>{e[k]=M[g];++h;h===f.length&&d(e)}))});0===f.length&&d(e)};function hb(a,b,c={}){var d=b.name;if(!a)throw new N(`type "${d}" must have a positive integer typeid pointer`);if(M.hasOwnProperty(a)){if(c.Ja)return;throw new N(`Cannot register type '${d}' twice`);}M[a]=b;delete fb[a];L.hasOwnProperty(a)&&(b=L[a],delete L[a],b.forEach(e=>e()))}function P(a,b,c={}){return hb(a,b,c)}var ib=(a,b,c)=>{switch(b){case 1:return c?d=>m()[d]:d=>w()[d];case 2:return c?d=>ba()[d>>1]:d=>da()[d>>1];case 4:return c?d=>y()[d>>2]:d=>z()[d>>2];case 8:return c?d=>Ba[d>>3]:d=>Ca[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},jb=a=>{throw new N(a.ca.fa.da.name+" instance already deleted");},kb=!1,lb=()=>{},mb=(a,b,c)=>{if(b===c)return a;if(void 0===c.ja)return null;a=mb(a,b,c.ja);return null===a?null:c.Fa(a)},nb={},R=[],ob=()=>{for(;R.length;){var a=R.pop();a.ca.pa=!1;a["delete"]()}},S,T={},pb=(a,b)=>{if(void 0===b)throw new N("ptr should not be undefined");for(;a.ja;)b=a.ua(b),a=a.ja;return T[b]},qb=(a,b)=>{if(!b.fa||!b.ea)throw new O("makeClassHandle requires ptr and ptrType");if(!!b.la!==!!b.ha)throw new O("Both smartPtrType and smartPtr must be specified");b.count={value:1};return U(Object.create(a,{ca:{value:b,writable:!0}}))},U=a=>{if("undefined"===typeof FinalizationRegistry)return U=b=>b,a;kb=new FinalizationRegistry(b=>{b=b.ca;--b.count.value;0===b.count.value&&(b.ha?b.la.na(b.ha):b.fa.da.na(b.ea))});U=b=>{var c=b.ca;c.ha&&kb.register(b,{ca:c},b);return b};lb=b=>{kb.unregister(b)};return U(a)};function rb(){}var sb=(a,b)=>Object.defineProperty(b,"name",{value:a}),tb=(a,b,c)=>{if(void 0===a[b].ia){var d=a[b];a[b]=function(...e){if(!a[b].ia.hasOwnProperty(e.length))throw new N(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].ia})!`);return a[b].ia[e.length].apply(this,e)};a[b].ia=[];a[b].ia[d.va]=d}},ub=(a,b,c)=>{if(A.hasOwnProperty(a)){if(void 0===c||void 0!==A[a].ia&&void 0!==A[a].ia[c])throw new N(`Cannot register public name '${a}' twice`);tb(A,a,a);if(A.hasOwnProperty(c))throw new N(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);A[a].ia[c]=b}else A[a]=b,void 0!==c&&(A[a].Sa=c)},vb=a=>{if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function wb(a,b,c,d,e,f,h,g){this.name=a;this.constructor=b;this.qa=c;this.na=d;this.ja=e;this.Ha=f;this.ua=h;this.Fa=g;this.La=[]}var xb=(a,b,c)=>{for(;b!==c;){if(!b.ua)throw new N(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.ua(a);b=b.ja}return a};function yb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);return 0}if(!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);return xb(b.ca.ea,b.ca.fa.da,this.da)}function zb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);if(this.ya){var c=this.Ma();null!==a&&a.push(this.na,c);return c}return 0}if(!b||!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.xa&&b.ca.fa.xa)throw new N(`Cannot convert argument of type ${b.ca.la?b.ca.la.name:b.ca.fa.name} to parameter type ${this.name}`);c=xb(b.ca.ea,b.ca.fa.da,this.da);if(this.ya){if(void 0===b.ca.ha)throw new N("Passing raw pointer to smart pointer is illegal");switch(this.Oa){case 0:if(b.ca.la===this)c=b.ca.ha;else throw new N(`Cannot convert argument of type ${b.ca.la?b.ca.la.name:b.ca.fa.name} to parameter type ${this.name}`);break;case 1:c=b.ca.ha;break;case 2:if(b.ca.la===this)c=b.ca.ha;else{var d=b.clone();c=this.Na(c,Ab(()=>d["delete"]()));null!==a&&a.push(this.na,c)}break;default:throw new N("Unsupporting sharing policy");}}return c}function Bb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);return 0}if(!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.ca.fa.xa)throw new N(`Cannot convert argument of type ${b.ca.fa.name} to parameter type ${this.name}`);return xb(b.ca.ea,b.ca.fa.da,this.da)}function Cb(a){return this.fromWireType(z()[a>>2])}function Db(a,b,c,d,e,f,h,g,k,l,n){this.name=a;this.da=b;this.Aa=c;this.xa=d;this.ya=e;this.Ka=f;this.Oa=h;this.Da=g;this.Ma=k;this.Na=l;this.na=n;e||void 0!==b.ja?this.toWireType=zb:(this.toWireType=d?yb:Bb,this.ka=null)}var Eb=(a,b,c)=>{if(!A.hasOwnProperty(a))throw new O("Replacing nonexistent public symbol");void 0!==A[a].ia&&void 0!==c?A[a].ia[c]=b:(A[a]=b,A[a].va=c)},V=(a,b)=>{a=K(a);var c=Xa(b);if("function"!=typeof c)throw new N(`unknown function pointer with signature ${a}: ${b}`);return c},Fb,Hb=a=>{a=Gb(a);var b=K(a);W(a);return b},Ib=(a,b)=>{function c(f){e[f]||M[f]||(fb[f]?fb[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Fb(`${a}: `+d.map(Hb).join([", "]));},Jb=(a,b)=>{for(var c=[],d=0;d>2]);return c},Kb=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function Lb(a){for(var b=1;bh)throw new N("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,k=Lb(b);c="void"!==b[0].name;d=[a,gb,d,e,Kb,b[0],b[1]];for(e=0;e{a=a.trim();const b=a.indexOf("(");return-1!==b?a.substr(0,b):a},Qb=[],X=[],Ab=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Qb.pop()||X.length;X[b]=a;X[b+1]=1;return b}},Rb={name:"emscripten::val",fromWireType:a=>{if(!a)throw new N("Cannot use deleted val. handle = "+a);var b=X[a];9Ab(b),ma:8,readValueFromPointer:Cb,ka:null},Sb=(a,b,c)=>{switch(b){case 1:return c?function(d){return this.fromWireType(m()[d])}:function(d){return this.fromWireType(w()[d])};case 2:return c?function(d){return this.fromWireType(ba()[d>>1])}:function(d){return this.fromWireType(da()[d>>1])};case 4:return c?function(d){return this.fromWireType(y()[d>>2])}:function(d){return this.fromWireType(z()[d>>2])};default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},Tb=a=>{var b=M[a];if(void 0===b)throw a=`${"enum"} has unknown type ${Hb(a)}`,new N(a);return b},Ub=(a,b)=>{switch(b){case 4:return function(c){return this.fromWireType(ka()[c>>2])};case 8:return function(c){var d=this.fromWireType;p.buffer!=q.buffer&&t();return d.call(this,Da[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},Y=(a,b,c,d)=>{if(!(0=h){var g=a.charCodeAt(++f);h=65536+((h&1023)<<10)|g&1023}if(127>=h){if(c>=d)break;b[c++]=h}else{if(2047>=h){if(c+1>=d)break;b[c++]=192|h>>6}else{if(65535>=h){if(c+2>=d)break;b[c++]=224|h>>12}else{if(c+3>=d)break;b[c++]=240|h>>18;b[c++]=128|h>>12&63}b[c++]=128|h>>6&63}b[c++]=128|h&63}}b[c]=0;return c-e},Vb=(a,b)=>{Y(a,w(),b,17)},Wb=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},Xb=new TextDecoder("utf-16le"),Yb=(a,b)=>{var c=a>>1;for(b=c+b/2;!(c>=b)&&da()[c];)++c;c<<=1;return Xb.decode(w().slice(a,c))},Zb=(a,b,c)=>{c??=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=f;b+=2}ba()[b>>1]=0;return b-d},$b=a=>2*a.length,ac=(a,b)=>{for(var c=0,d="";!(c>=b/4);){var e=y()[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d},bc=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e=f){var h=a.charCodeAt(++e);f=65536+((f&1023)<<10)|h&1023}y()[b>>2]=f;b+=4;if(b+4>c)break}y()[b>>2]=0;return b-d},cc=a=>{for(var b=0,c=0;c=d&&++c;b+=4}return b},dc={},ec=1,fc=URL.createObjectURL(new Blob(["onmessage=function(d){onmessage=null;d=d.data;d[`instantiateWasm`]=(i,r)=>{var n=new WebAssembly.Instance(d[`wasm`],i);return r(n,d[`wasm`]);};importScripts(d.js);loadVosklet(d);d.wasm=d.mem=d.js=0;}"],{type:"application/javascript"})),gc={},hc=a=>{if(!(a instanceof Ua||"unwind"==a))throw a;},ic=0,jc=a=>{Aa=a;0{if(!za)try{if(a(),!(0{if(!pc){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:"./this.program"},b;for(b in oc)void 0===oc[b]?delete a[b]:a[b]=oc[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);pc=c}return pc},pc,rc=()=>{if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues)return a=>(a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),a);Na("initRandomDevice")},sc=a=>(sc=rc())(a),tc=Array(256),uc=0;256>uc;++uc)tc[uc]=String.fromCharCode(uc);eb=tc;N=A.BindingError=class extends Error{constructor(a){super(a);this.name="BindingError"}};O=A.InternalError=class extends Error{constructor(a){super(a);this.name="InternalError"}};Object.assign(rb.prototype,{isAliasOf:function(a){if(!(this instanceof rb&&a instanceof rb))return!1;var b=this.ca.fa.da,c=this.ca.ea;a.ca=a.ca;var d=a.ca.fa.da;for(a=a.ca.ea;b.ja;)c=b.ua(c),b=b.ja;for(;d.ja;)a=d.ua(a),d=d.ja;return b===d&&c===a},clone:function(){this.ca.ea||jb(this);if(this.ca.ta)return this.ca.count.value+=1,this;var a=U,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.ca;a=a(c.call(b,d,{ca:{value:{count:e.count,pa:e.pa,ta:e.ta,ea:e.ea,fa:e.fa,ha:e.ha,la:e.la}}}));a.ca.count.value+=1;a.ca.pa=!1;return a},["delete"](){this.ca.ea||jb(this);if(this.ca.pa&&!this.ca.ta)throw new N("Object already scheduled for deletion");lb(this);var a=this.ca;--a.count.value;0===a.count.value&&(a.ha?a.la.na(a.ha):a.fa.da.na(a.ea));this.ca.ta||(this.ca.ha=void 0,this.ca.ea=void 0)},isDeleted:function(){return!this.ca.ea},deleteLater:function(){this.ca.ea||jb(this);if(this.ca.pa&&!this.ca.ta)throw new N("Object already scheduled for deletion");R.push(this);1===R.length&&S&&S(ob);this.ca.pa=!0;return this}});A.getInheritedInstanceCount=()=>Object.keys(T).length;A.getLiveInheritedInstances=()=>{var a=[],b;for(b in T)T.hasOwnProperty(b)&&a.push(T[b]);return a};A.flushPendingDeletes=ob;A.setDelayFunction=a=>{S=a;R.length&&S&&S(ob)};Object.assign(Db.prototype,{Ia(a){this.Da&&(a=this.Da(a));return a},Ca(a){this.na?.(a)},ma:8,readValueFromPointer:Cb,fromWireType:function(a){function b(){return this.ya?qb(this.da.qa,{fa:this.Ka,ea:c,la:this,ha:a}):qb(this.da.qa,{fa:this,ea:a})}var c=this.Ia(a);if(!c)return this.Ca(a),null;var d=pb(this.da,c);if(void 0!==d){if(0===d.ca.count.value)return d.ca.ea=c,d.ca.ha=a,d.clone();d=d.clone();this.Ca(a);return d}d=this.da.Ha(c);d=nb[d];if(!d)return b.call(this);d=this.xa?d.Ea:d.pointerType;var e=mb(c,this.da,d.da);return null===e?b.call(this):this.ya?qb(d.da.qa,{fa:d,ea:e,la:this,ha:a}):qb(d.da.qa,{fa:d,ea:e})}});Fb=A.UnboundTypeError=((a,b)=>{var c=sb(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c})(Error,"UnboundTypeError");X.push(0,1,void 0,1,null,1,!0,1,!1,1);A.count_emval_handles=()=>X.length/2-5-Qb.length;sa&&(dc[0]=this,addEventListener("message",Ja));var wc={c:(a,b,c,d)=>{Na(`Assertion failed: ${J(a)}, at: `+[b?J(b):"unknown filename",c,d?J(d):"unknown function"])},s:(a,b)=>Xa(a)(b),d:(a,b,c)=>{var d=new ab(a);z()[d.ea+16>>2]=0;z()[d.ea+4>>2]=b;z()[d.ea+8>>2]=c;bb=a;cb++;throw bb;},P:()=>{Na("")},q:(a,b,c)=>{b=K(b);P(a,{name:b,fromWireType:d=>d,toWireType:function(d,e){if("bigint"!=typeof e&&"number"!=typeof e)throw new TypeError(`Cannot convert "${db(e)}" to ${this.name}`);"number"==typeof e&&(e=BigInt(e));return e},ma:8,readValueFromPointer:ib(b,c,-1==b.indexOf("u")),ka:null})},R:(a,b,c,d)=>{b=K(b);P(a,{name:b,fromWireType:function(e){return!!e},toWireType:function(e,f){return f?c:d},ma:8,readValueFromPointer:function(e){return this.fromWireType(w()[e])},ka:null})},o:(a,b,c,d,e,f,h,g,k,l,n,u,r)=>{n=K(n);f=V(e,f);g&&=V(h,g);l&&=V(k,l);r=V(u,r);var x=vb(n);ub(x,function(){Ib(`Cannot construct ${n} due to unbound types`,[d])});Q([a,b,c],d?[d]:[],v=>{v=v[0];if(d){var D=v.da;var ea=D.qa}else ea=rb.prototype;v=sb(n,function(...Ya){if(Object.getPrototypeOf(this)!==Za)throw new N("Use 'new' to construct "+n);if(void 0===E.oa)throw new N(n+" has no accessible constructor");var Pb=E.oa[Ya.length];if(void 0===Pb)throw new N(`Tried to invoke ctor of ${n} with invalid number of parameters (${Ya.length}) - expected (${Object.keys(E.oa).toString()}) parameters instead!`);return Pb.apply(this,Ya)});var Za=Object.create(ea,{constructor:{value:v}});v.prototype=Za;var E=new wb(n,v,Za,r,D,f,g,l);if(E.ja){var fa;(fa=E.ja).Ba??(fa.Ba=[]);E.ja.Ba.push(E)}D=new Db(n,E,!0,!1,!1);fa=new Db(n+"*",E,!1,!1,!1);ea=new Db(n+" const*",E,!1,!0,!1);nb[a]={pointerType:fa,Ea:ea};Eb(x,v);return[D,fa,ea]})},j:(a,b,c,d,e,f)=>{var h=Jb(b,c);e=V(d,e);Q([],[a],g=>{g=g[0];var k=`constructor ${g.name}`;void 0===g.da.oa&&(g.da.oa=[]);if(void 0!==g.da.oa[b-1])throw new N(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${g.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);g.da.oa[b-1]=()=>{Ib(`Cannot construct ${g.name} due to unbound types`,h)};Q([],h,l=>{l.splice(1,0,null);g.da.oa[b-1]=Nb(k,l,null,e,f);return[]});return[]})},g:(a,b,c,d,e,f,h,g,k)=>{var l=Jb(c,d);b=K(b);b=Ob(b);f=V(e,f);Q([],[a],n=>{function u(){Ib(`Cannot call ${r} due to unbound types`,l)}n=n[0];var r=`${n.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);g&&n.da.La.push(b);var x=n.da.qa,v=x[b];void 0===v||void 0===v.ia&&v.className!==n.name&&v.va===c-2?(u.va=c-2,u.className=n.name,x[b]=u):(tb(x,b,r),x[b].ia[c-2]=u);Q([],l,D=>{D=Nb(r,D,n,f,h,k);void 0===x[b].ia?(D.va=c-2,x[b]=D):x[b].ia[c-2]=D;return[]});return[]})},Q:a=>P(a,Rb),A:(a,b,c,d)=>{function e(){}b=K(b);e.values={};P(a,{name:b,constructor:e,fromWireType:function(f){return this.constructor.values[f]},toWireType:(f,h)=>h.value,ma:8,readValueFromPointer:Sb(b,c,d),ka:null});ub(b,e)},k:(a,b,c)=>{var d=Tb(a);b=K(b);a=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},constructor:{value:sb(`${d.name}_${b}`,function(){})}});a.values[c]=d;a[b]=d},p:(a,b,c)=>{b=K(b);P(a,{name:b,fromWireType:d=>d,toWireType:(d,e)=>e,ma:8,readValueFromPointer:Ub(b,c),ka:null})},K:(a,b,c,d,e,f,h)=>{var g=Jb(b,c);a=K(a);a=Ob(a);e=V(d,e);ub(a,function(){Ib(`Cannot call ${a} due to unbound types`,g)},b-1);Q([],g,k=>{Eb(a,Nb(a,[k[0],null].concat(k.slice(1)),null,e,f,h),b-1);return[]})},h:(a,b,c,d,e)=>{b=K(b);-1===e&&(e=4294967295);e=g=>g;if(0===d){var f=32-8*c;e=g=>g<>>f}var h=b.includes("unsigned")?function(g,k){return k>>>0}:function(g,k){return k};P(a,{name:b,fromWireType:e,toWireType:h,ma:8,readValueFromPointer:ib(b,c,0!==d),ka:null})},e:(a,b,c)=>{function d(f){var h=z()[f>>2];f=z()[f+4>>2];return new e(m().buffer,f,h)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=K(c);P(a,{name:c,fromWireType:d,ma:8,readValueFromPointer:d},{Ja:!0})},r:(a,b)=>{b=K(b);var c="std::string"===b;P(a,{name:b,fromWireType:function(d){var e=z()[d>>2],f=d+4;if(c)for(var h=f,g=0;g<=e;++g){var k=f+g;if(g==e||0==w()[k]){h=J(h,k-h);if(void 0===l)var l=h;else l+=String.fromCharCode(0),l+=h;h=k+1}}else{l=Array(e);for(g=0;g>2]=h;if(c&&f)h+=1,Y(e,w(),k,h);else if(f)for(f=0;f{c=K(c);if(2===b){var d=Yb;var e=Zb;var f=$b;var h=g=>da()[g>>1]}else 4===b&&(d=ac,e=bc,f=cc,h=g=>z()[g>>2]);P(a,{name:c,fromWireType:g=>{for(var k=z()[g>>2],l,n=g+4,u=0;u<=k;++u){var r=g+4+u*b;if(u==k||0==h(r))n=d(n,r-n),void 0===l?l=n:(l+=String.fromCharCode(0),l+=n),n=r+b}W(g);return l},toWireType:(g,k)=>{if("string"!=typeof k)throw new N(`Cannot pass non-string to C++ string type ${c}`);var l=f(k),n=C(4+l+b);z()[n>>2]=l/b;e(k,n+4,l+b);null!==g&&g.push(W,n);return n},ma:8,readValueFromPointer:Cb,ka(g){W(g)}})},S:(a,b)=>{b=K(b);P(a,{Ra:!0,name:b,ma:0,fromWireType:()=>{},toWireType:()=>{}})},H:(a,b)=>{let c=dc[ec]=new Worker(fc);c.postMessage({$ww:ec,wasm:ya,js:A.mainScriptUrlOrBlob||_scriptName,wasmMemory:p,sb:a,sz:b});c.onmessage=La;return ec++},O:()=>1,u:()=>{ic=0},v:(a,b)=>{gc[a]&&(clearTimeout(gc[a].id),delete gc[a]);if(!b)return 0;var c=setTimeout(()=>{delete gc[a];kc(()=>vc(a,performance.now()))},b);gc[a]={id:c,Va:b};return 0},J:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var h=Math.max(f,e);z()[a>>2]=60*h;y()[b>>2]=Number(f!=e);b=g=>{var k=Math.abs(g);return`UTC${0<=g?"-":"+"}${String(Math.floor(k/60)).padStart(2,"0")}${String(k%60).padStart(2,"0")}`};a=b(f);b=b(e);ew().set(mc[a].Ga,b),B:()=>lc.length,C:()=>mc.length,y:(a,b)=>{a=lc[a].Qa;var c=Wb(a)+1;Y(a,w(),b,c)},w:a=>mc[a].mode,E:a=>mc[a].Ga.length,z:(a,b)=>{a=lc[a].Ta;var c=Wb(a)+1;Y(a,w(),b,c)},x:(a,b)=>{a=mc[a].Ua;var c=Wb(a)+1;Y(a,w(),b,c)},G:()=>{a:{if(!nc.length){var a=null;"undefined"!=typeof window&&"function"==typeof window.prompt&&(a=window.prompt("Input: "),null!==a&&(a+="\n"));if(!a){var b=null;break a}b=Array(Wb(a)+1);a=Y(a,b,0,b.length);b.length=a;nc=b}b=nc.shift()}return"number"===typeof b?b:-1},T:a=>{console.error(J(a))},V:a=>{console.log(J(a))},U:a=>{console.warn(J(a))},f:()=>Date.now(),l:a=>G(J(a)),m:()=>performance.now(),F:a=>xa(J(a)),L:a=>{var b=w().length;a>>>=0;if(a<=b||2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);a:{d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,d)/65536))-p.buffer.byteLength+65535)/65536;try{p.grow(d);t();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},M:(a,b)=>{var c=0;qc().forEach((d,e)=>{var f=b+c;e=z()[a+4*e>>2]=f;for(f=0;f{var c=qc();z()[a>>2]=c.length;var d=0;c.forEach(e=>d+=e.length+1);z()[b>>2]=d;return 0},b:a=>{Aa=a;jc(a)},i:Ta,I:(a,b)=>{sc(w().subarray(a,a+b));return 0},a:p,t:jc,W:function(a,b){for(let c of Object.values(dc))c.postMessage({_wsc:a,x:[b]}),c.onmessage=d=>Ta(...d.data)}},Z=function(){function a(c,d){Z=c.exports;Wa=Z._;Fa.unshift(Z.X);ya=d;H--;0==H&&(null!==Ma&&(clearInterval(Ma),Ma=null),I&&(c=I,I=null,c()));return Z}var b={a:wc};H++;if(A.instantiateWasm)try{return A.instantiateWasm(b,a)}catch(c){G(`Module.instantiateWasm callback failed with error: ${c}`),na(c)}Pa??=Oa("Vosklet.wasm")?"Vosklet.wasm":F+"Vosklet.wasm";Sa(b,function(c){a(c.instance,c.module)}).catch(na);return{}}(),W=a=>(W=Z.Y)(a),C=a=>(C=Z.Z)(a),Gb=a=>(Gb=Z.$)(a),vc=(a,b)=>(vc=Z.aa)(a,b),Ia=(a,b)=>(Ia=Z.ba)(a,b),xc;I=function yc(){xc||zc();xc||(I=yc)};function zc(){if(!(0 loadVosklet); \ No newline at end of file diff --git a/Examples/Vosklet.wasm b/Examples/Vosklet.wasm index ff2e377..0b3310a 100755 Binary files a/Examples/Vosklet.wasm and b/Examples/Vosklet.wasm differ diff --git a/Examples/Wrapper.js b/Examples/Wrapper.js new file mode 100644 index 0000000..96aa534 --- /dev/null +++ b/Examples/Wrapper.js @@ -0,0 +1,152 @@ +/** + * @fileoverview + * @suppress {undefinedVars|checkTypes} + */ + +if(ENVIRONMENT_IS_WEB) { + +// 'var' to expose this outside the if +var objs = []; +var events = ['status', 'partialResult', 'result']; +let processorURL = URL.createObjectURL(new Blob(['(', (() => { + registerProcessor('VoskletTransferer', class extends AudioWorkletProcessor { + constructor(opts) { + super(); + this.filled = 0; + this.bufSize = opts.processorOptions[0]; + this.buf = new Float32Array(this.bufSize); + } + process(inputs) { + if(inputs[0][0]) { + this.buf.set(inputs[0][0], this.filled); + this.filled += 128; + if(this.filled >= this.bufSize) { + this.filled = 0; + this.port.postMessage(this.buf, [this.buf.buffer]); + this.buf = new Float32Array(this.bufSize); + } + } + return true; + } + }) +}).toString(), ')()'], { type: 'text/javascript' })); +class CommonModel extends EventTarget { + constructor() { + super(); + objs.push(this); + } + delete() { + this.obj.delete(); + } + static async mk(url, storepath, id, normalMdl) { + let mdl = new CommonModel(); + let result = new Promise((resolve, reject) => { + mdl.addEventListener('status', ev => { + if(!ev.detail) { + if(normalMdl) mdl['findWord'] = word => mdl.obj['findWord'](word) + resolve(mdl) + } + else reject(ev.detail) + }, { once: true }) + }); + let cache = await caches.open('Vosklet'); + let res = await cache.match(storepath); + let tar; + if(typeof res == 'undefined' || res.headers.get('id') != id) { + // Caching already handled explicitly + res = await fetch(url, { cache: 'no-store' }); + if (!res.ok) throw 'Unable to fetch model, status: ' + res.status; + await cache.put(storepath, new Response( + res.clone().body, { headers: { 'id': id } } + )); + } + tar = await new Response(res.body.pipeThrough(new DecompressionStream('gzip'))).arrayBuffer(); + let tarStart = _malloc(tar.byteLength); + HEAPU8.set(new Uint8Array(tar), tarStart); + mdl.obj = new Module['CommonModel'](objs.length - 1, normalMdl, tarStart, tar.byteLength); + return result; + } +} +class Recognizer extends EventTarget { + constructor() { + super(); + // Closure workaround to prevent acceptWaveform from getting removed + this['acceptWaveform'] = audioData => { + let start = _malloc(audioData.length * 4); + HEAPF32.set(audioData, start / 4); + this.obj['acceptWaveform'](start, audioData.length); + } + objs.push(this); + return new Proxy(this, { + get(self, prop, _) { + if(self[prop] == undefined && self.obj[prop] == undefined) return; + let p = self[prop]; + if(p) return p.bind ? p.bind(self) : p; + p = self.obj[prop]; + return p.bind ? p.bind(self.obj) : p; + } + }) + } + async delete(processCurrent = false) { + let result = new Promise((resolve, _) => this.addEventListener('status', _ => { + this.obj.delete(); + resolve(); + }, { once: true })); + this.obj['safeDelete'](processCurrent); + return result; + } + static async mk(model, sampleRate, mode, grammar, spkModel) { + let rec = new Recognizer(); + let result = new Promise((resolve, reject) => { + rec.addEventListener('status', ev => { + if(!ev.detail) resolve(rec); + else reject(ev.detail); + }, { once: true }); + }) + switch(mode) { + case 1: + rec.obj = new Module['Recognizer'](objs.length - 1, sampleRate, model); + break; + case 2: + rec.obj = new Module['Recognizer'](objs.length -1, sampleRate, model, spkModel); + break; + default: + rec.obj = new Module['Recognizer'](objs.length - 1, sampleRate, model, grammar, 0); + } + return result; + } +} +Module = { + 'cleanUp': async () => { + for(let obj of objs) await obj.delete(); + URL.revokeObjectURL(processorURL); + }, + + 'createTransferer': async (ctx, bufSize) => { + await ctx.audioWorklet.addModule(processorURL); + return new AudioWorkletNode(ctx, 'VoskletTransferer', { + channelCountMode: 'explicit', + numberOfInputs: 1, + numberOfOutputs: 0, + channelCount: 1, + processorOptions: [bufSize] + }); + }, + + 'createModel': (url, storepath, id) => + CommonModel.mk(url, storepath, id, true), + + 'createSpkModel': (url, storepath, id) => + CommonModel.mk(url, storepath, id, false), + + 'createRecognizer': (model, sampleRate) => + Recognizer.mk(model.obj, sampleRate, 1), + + 'createRecognizerWithGrm': (model, sampleRate, grammar) => + Recognizer.mk(model.obj, sampleRate, 3, grammar, null), + + 'createRecognizerWithSpkModel': (model, sampleRate, spkModel) => + Recognizer.mk(model.obj, sampleRate, 2, null, spkModel.obj) +} + +} \ No newline at end of file diff --git a/Examples/fromFile.html b/Examples/fromFile.html index fa639eb..9f4c3c1 100644 --- a/Examples/fromFile.html +++ b/Examples/fromFile.html @@ -5,19 +5,19 @@ diff --git a/Examples/fromMic.html b/Examples/fromMic.html index 99855ed..ec43f7e 100644 --- a/Examples/fromMic.html +++ b/Examples/fromMic.html @@ -5,7 +5,7 @@ diff --git a/README.md b/README.md index 096e645..f63dabd 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ diff --git a/Vosklet.js b/Vosklet.js index 87d24c1..ca1325f 100644 --- a/Vosklet.js +++ b/Vosklet.js @@ -1 +1 @@ -var loadVosklet = (() => { var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined; return (function(moduleArg = {}) { var moduleRtn;function n(){q.buffer!=t.buffer&&v();return t}function x(){q.buffer!=t.buffer&&v();return aa}function ba(){q.buffer!=t.buffer&&v();return ca}function da(){q.buffer!=t.buffer&&v();return ha}function y(){q.buffer!=t.buffer&&v();return ia}function z(){q.buffer!=t.buffer&&v();return ja}function ka(){q.buffer!=t.buffer&&v();return la}var A=moduleArg,ma,na,oa=new Promise((a,b)=>{ma=a;na=b}),pa="object"==typeof window,qa="function"==typeof importScripts,ra="object"==typeof process&&"object"==typeof process.Qa&&"string"==typeof process.Qa.node&&"renderer"!=process.type,sa=A.$ww;if(pa){var B=[],ta=["status","partialResult","result"];let a=URL.createObjectURL(new Blob(["(",(async()=>{let f=new TextDecoder,g=new TextEncoder,h=await navigator.storage.getDirectory();onmessage=async k=>{k=k.data;var l=k.Pa.split("/"),m=h;for(var p of l)m=await m.getDirectoryHandle(p,{create:!0});l=await m.getFileHandle("id",{create:!0});p=await m.getFileHandle("model.tgz",{create:!0});m=await l.createSyncAccessHandle();l=await p.createSyncAccessHandle();p=new ArrayBuffer(m.getSize());m.read(p);let r;if(f.decode(p)==k.id)r=new ArrayBuffer(l.getSize()),l.read(r),k=await (new Response((new Response(r)).body.pipeThrough(new DecompressionStream("gzip")))).arrayBuffer();else{p=await fetch(k.url);if(!p.ok)throw"Unable to download model";p=p.body.tee();r=await (new Response(p[0].pipeThrough(new CompressionStream("gzip")))).arrayBuffer();l.write(r,{at:0});l.truncate(r.byteLength);k=g.encode(k.id);m.write(k,{at:0});m.truncate(k.length);k=await (new Response(p[1])).arrayBuffer()}m.close();l.close();self.postMessage(k,[k])}}).toString(),")()"],{type:"text/javascript"})),b=new Worker(a),c=URL.createObjectURL(new Blob(["(",(()=>{registerProcessor("VoskletTransferer",class extends AudioWorkletProcessor{constructor(f){super();this.sa=0;this.za=f.processorOptions[0];this.wa=new Float32Array(this.za)}process(f){f[0][0]&&(this.wa.set(f[0][0],this.sa),this.sa+=128,this.sa>=this.za&&(this.sa=0,this.port.postMessage(this.wa,[this.wa.buffer]),this.wa=new Float32Array(this.za)));return!0}})}).toString(),")()"],{type:"text/javascript"}));class d extends EventTarget{constructor(){super();B.push(this)}delete(){this.ga.delete()}static async ra(f,g,h,k){let l=new d,m=new Promise((p,r)=>{l.addEventListener("status",w=>{w.detail?r(w.detail):(k&&(l.findWord=u=>l.ga.findWord(u)),p(l))},{once:!0})});b.addEventListener("message",p=>{p=p.data;let r=C(p.byteLength);x().set(new Uint8Array(p),r);l.ga=new A.CommonModel(B.length-1,k,r,p.byteLength)},{once:!0});b.postMessage({url:f,Pa:g,id:h});return m}}class e extends EventTarget{constructor(){super();this.acceptWaveform=f=>{let g=C(4*f.length);ka().set(f,g/4);this.ga.acceptWaveform(g,f.length)};B.push(this);return new Proxy(this,{get(f,g){if(void 0!=f[g]||void 0!=f.ga[g]){var h=f[g];if(h)return h.bind?h.bind(f):h;h=f.ga[g];return h.bind?h.bind(f.ga):h}}})}async delete(f=!1){let g=new Promise(h=>this.addEventListener("status",()=>{this.ga.delete();h()},{once:!0}));this.ga.safeDelete(f);return g}static async ra(f,g,h,k,l){let m=new e,p=new Promise((r,w)=>{m.addEventListener("status",u=>{u.detail?w(u.detail):r(m)},{once:!0})});switch(h){case 1:m.ga=new A.Recognizer(B.length-1,g,f);break;case 2:m.ga=new A.Recognizer(B.length-1,g,f,l);break;default:m.ga=new A.Recognizer(B.length-1,g,f,k,0)}return p}}A={cleanUp:async()=>{for(let f of B)await f.delete();URL.revokeObjectURL(c);URL.revokeObjectURL(a);b.terminate()},createTransferer:async(f,g)=>{await f.audioWorklet.addModule(c);return new AudioWorkletNode(f,"VoskletTransferer",{channelCountMode:"explicit",numberOfInputs:1,numberOfOutputs:0,channelCount:1,processorOptions:[g]})},createModel:(f,g,h)=>d.ra(f,g,h,!0),createSpkModel:(f,g,h)=>d.ra(f,g,h,!1),createRecognizer:(f,g)=>e.ra(f.ga,g,1),createRecognizerWithGrm:(f,g,h)=>e.ra(f.ga,g,3,h,null),createRecognizerWithSpkModel:(f,g,h)=>e.ra(f.ga,g,2,null,h.ga)}}var ua=Object.assign({},A),F="",va,wa;if(pa||qa)qa?F=self.location.href:"undefined"!=typeof document&&document.currentScript&&(F=document.currentScript.src),_scriptName&&(F=_scriptName),F.startsWith("blob:")?F="":F=F.substr(0,F.replace(/[?#].*/,"").lastIndexOf("/")+1),qa&&(wa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),va=a=>fetch(a,{credentials:"same-origin"}).then(b=>b.ok?b.arrayBuffer():Promise.reject(Error(b.status+" : "+b.url)));var xa=console.log.bind(console),G=console.error.bind(console);Object.assign(A,ua);ua=null;var q,ya,za=!1,Aa,t,aa,ca,ha,ia,ja,la,Ba,Ca,Da;function v(){var a=q.buffer;A.HEAP8=t=new Int8Array(a);A.HEAP16=ca=new Int16Array(a);A.HEAPU8=aa=new Uint8Array(a);A.HEAPU16=ha=new Uint16Array(a);A.HEAP32=ia=new Int32Array(a);A.HEAPU32=ja=new Uint32Array(a);A.HEAPF32=la=new Float32Array(a);A.HEAPF64=Da=new Float64Array(a);A.HEAP64=Ba=new BigInt64Array(a);A.HEAPU64=Ca=new BigUint64Array(a)}if(A.wasmMemory)q=A.wasmMemory;else if(q=new WebAssembly.Memory({initial:5040,maximum:32768,shared:!0}),!(q.buffer instanceof SharedArrayBuffer))throw G("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"),ra&&G("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");v();var Ea=[],Fa=[],Ga=[];function Ha(){if(sa){let a=A;Ia(a.sb,a.sz);removeEventListener("message",Ja);Ka=Ka.forEach(La);addEventListener("message",La)}else for(;0a.startsWith("data:application/octet-stream;base64,"),Pa;function Qa(a){return va(a).then(b=>new Uint8Array(b),()=>{if(wa)var b=wa(a);else throw"both async and sync fetching of the wasm failed";return b})}function Ra(a,b,c){return Qa(a).then(d=>WebAssembly.instantiate(d,b)).then(c,d=>{G(`failed to asynchronously prepare wasm: ${d}`);Na(d)})}function Sa(a,b){var c=Pa;return"function"!=typeof WebAssembly.instantiateStreaming||Oa(c)||"function"!=typeof fetch?Ra(c,a,b):fetch(c,{credentials:"same-origin"}).then(d=>WebAssembly.instantiateStreaming(d,a).then(b,function(e){G(`wasm streaming compile failed: ${e}`);G("falling back to ArrayBuffer instantiation");return Ra(c,a,b)}))}function Ta(a,b,c){pa?B[a].dispatchEvent(new CustomEvent(ta[b],{detail:0==c?null:J(c)})):self.postMessage([a,b,c])}function Ua(a){this.name="ExitStatus";this.message=`Program terminated with exit(${a})`;this.status=a}var Ka=[],Va=[],Wa,Xa=a=>{var b=Va[a];b||(a>=Va.length&&(Va.length=a+1),Va[a]=b=Wa.get(a));return b},La=a=>{a=a.data;let b=a._wsc;b&&Xa(b)(...a.x)},Ja=a=>{Ka.push(a)},$a=new TextDecoder,J=(a,b)=>{if(!a)return"";b=a+b;for(var c=a;!(c>=b)&&x()[c];)++c;return $a.decode(x().slice(a,c))};class ab{constructor(a){this.ea=a-24}}var bb=0,cb=0,db=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a},eb,K=a=>{for(var b="";x()[a];)b+=eb[x()[a++]];return b},L={},M={},fb={},N,gb=a=>{throw new N(a);},O,Q=(a,b,c)=>{function d(h){h=c(h);if(h.length!==a.length)throw new O("Mismatched type converter count");for(var k=0;kfb[h]=b);var e=Array(b.length),f=[],g=0;b.forEach((h,k)=>{M.hasOwnProperty(h)?e[k]=M[h]:(f.push(h),L.hasOwnProperty(h)||(L[h]=[]),L[h].push(()=>{e[k]=M[h];++g;g===f.length&&d(e)}))});0===f.length&&d(e)};function hb(a,b,c={}){var d=b.name;if(!a)throw new N(`type "${d}" must have a positive integer typeid pointer`);if(M.hasOwnProperty(a)){if(c.Ja)return;throw new N(`Cannot register type '${d}' twice`);}M[a]=b;delete fb[a];L.hasOwnProperty(a)&&(b=L[a],delete L[a],b.forEach(e=>e()))}function P(a,b,c={}){return hb(a,b,c)}var ib=(a,b,c)=>{switch(b){case 1:return c?d=>n()[d]:d=>x()[d];case 2:return c?d=>ba()[d>>1]:d=>da()[d>>1];case 4:return c?d=>y()[d>>2]:d=>z()[d>>2];case 8:return c?d=>Ba[d>>3]:d=>Ca[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},jb=a=>{throw new N(a.ca.fa.da.name+" instance already deleted");},kb=!1,lb=()=>{},mb=(a,b,c)=>{if(b===c)return a;if(void 0===c.ja)return null;a=mb(a,b,c.ja);return null===a?null:c.Fa(a)},nb={},R=[],ob=()=>{for(;R.length;){var a=R.pop();a.ca.pa=!1;a["delete"]()}},S,T={},pb=(a,b)=>{if(void 0===b)throw new N("ptr should not be undefined");for(;a.ja;)b=a.ua(b),a=a.ja;return T[b]},qb=(a,b)=>{if(!b.fa||!b.ea)throw new O("makeClassHandle requires ptr and ptrType");if(!!b.la!==!!b.ha)throw new O("Both smartPtrType and smartPtr must be specified");b.count={value:1};return U(Object.create(a,{ca:{value:b,writable:!0}}))},U=a=>{if("undefined"===typeof FinalizationRegistry)return U=b=>b,a;kb=new FinalizationRegistry(b=>{b=b.ca;--b.count.value;0===b.count.value&&(b.ha?b.la.na(b.ha):b.fa.da.na(b.ea))});U=b=>{var c=b.ca;c.ha&&kb.register(b,{ca:c},b);return b};lb=b=>{kb.unregister(b)};return U(a)};function rb(){}var sb=(a,b)=>Object.defineProperty(b,"name",{value:a}),tb=(a,b,c)=>{if(void 0===a[b].ia){var d=a[b];a[b]=function(...e){if(!a[b].ia.hasOwnProperty(e.length))throw new N(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].ia})!`);return a[b].ia[e.length].apply(this,e)};a[b].ia=[];a[b].ia[d.va]=d}},ub=(a,b,c)=>{if(A.hasOwnProperty(a)){if(void 0===c||void 0!==A[a].ia&&void 0!==A[a].ia[c])throw new N(`Cannot register public name '${a}' twice`);tb(A,a,a);if(A.hasOwnProperty(c))throw new N(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);A[a].ia[c]=b}else A[a]=b,void 0!==c&&(A[a].Ta=c)},vb=a=>{if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function wb(a,b,c,d,e,f,g,h){this.name=a;this.constructor=b;this.qa=c;this.na=d;this.ja=e;this.Ha=f;this.ua=g;this.Fa=h;this.La=[]}var xb=(a,b,c)=>{for(;b!==c;){if(!b.ua)throw new N(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.ua(a);b=b.ja}return a};function yb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);return 0}if(!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);return xb(b.ca.ea,b.ca.fa.da,this.da)}function zb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);if(this.ya){var c=this.Ma();null!==a&&a.push(this.na,c);return c}return 0}if(!b||!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.xa&&b.ca.fa.xa)throw new N(`Cannot convert argument of type ${b.ca.la?b.ca.la.name:b.ca.fa.name} to parameter type ${this.name}`);c=xb(b.ca.ea,b.ca.fa.da,this.da);if(this.ya){if(void 0===b.ca.ha)throw new N("Passing raw pointer to smart pointer is illegal");switch(this.Oa){case 0:if(b.ca.la===this)c=b.ca.ha;else throw new N(`Cannot convert argument of type ${b.ca.la?b.ca.la.name:b.ca.fa.name} to parameter type ${this.name}`);break;case 1:c=b.ca.ha;break;case 2:if(b.ca.la===this)c=b.ca.ha;else{var d=b.clone();c=this.Na(c,Ab(()=>d["delete"]()));null!==a&&a.push(this.na,c)}break;default:throw new N("Unsupporting sharing policy");}}return c}function Bb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);return 0}if(!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.ca.fa.xa)throw new N(`Cannot convert argument of type ${b.ca.fa.name} to parameter type ${this.name}`);return xb(b.ca.ea,b.ca.fa.da,this.da)}function Cb(a){return this.fromWireType(z()[a>>2])}function Db(a,b,c,d,e,f,g,h,k,l,m){this.name=a;this.da=b;this.Aa=c;this.xa=d;this.ya=e;this.Ka=f;this.Oa=g;this.Da=h;this.Ma=k;this.Na=l;this.na=m;e||void 0!==b.ja?this.toWireType=zb:(this.toWireType=d?yb:Bb,this.ka=null)}var Eb=(a,b,c)=>{if(!A.hasOwnProperty(a))throw new O("Replacing nonexistent public symbol");void 0!==A[a].ia&&void 0!==c?A[a].ia[c]=b:(A[a]=b,A[a].va=c)},V=(a,b)=>{a=K(a);var c=Xa(b);if("function"!=typeof c)throw new N(`unknown function pointer with signature ${a}: ${b}`);return c},Fb,Hb=a=>{a=Gb(a);var b=K(a);W(a);return b},Ib=(a,b)=>{function c(f){e[f]||M[f]||(fb[f]?fb[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Fb(`${a}: `+d.map(Hb).join([", "]));},Jb=(a,b)=>{for(var c=[],d=0;d>2]);return c},Kb=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function Lb(a){for(var b=1;bg)throw new N("argTypes array size mismatch! Must at least get return value and 'this' types!");var h=null!==b[1]&&null!==c,k=Lb(b);c="void"!==b[0].name;d=[a,gb,d,e,Kb,b[0],b[1]];for(e=0;e{a=a.trim();const b=a.indexOf("(");return-1!==b?a.substr(0,b):a},Qb=[],X=[],Ab=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Qb.pop()||X.length;X[b]=a;X[b+1]=1;return b}},Rb={name:"emscripten::val",fromWireType:a=>{if(!a)throw new N("Cannot use deleted val. handle = "+a);var b=X[a];9Ab(b),ma:8,readValueFromPointer:Cb,ka:null},Sb=(a,b,c)=>{switch(b){case 1:return c?function(d){return this.fromWireType(n()[d])}:function(d){return this.fromWireType(x()[d])};case 2:return c?function(d){return this.fromWireType(ba()[d>>1])}:function(d){return this.fromWireType(da()[d>>1])};case 4:return c?function(d){return this.fromWireType(y()[d>>2])}:function(d){return this.fromWireType(z()[d>>2])};default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},Tb=a=>{var b=M[a];if(void 0===b)throw a=`${"enum"} has unknown type ${Hb(a)}`,new N(a);return b},Ub=(a,b)=>{switch(b){case 4:return function(c){return this.fromWireType(ka()[c>>2])};case 8:return function(c){var d=this.fromWireType;q.buffer!=t.buffer&&v();return d.call(this,Da[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},Y=(a,b,c,d)=>{if(!(0=g){var h=a.charCodeAt(++f);g=65536+((g&1023)<<10)|h&1023}if(127>=g){if(c>=d)break;b[c++]=g}else{if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6}else{if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63}b[c++]=128|g>>6&63}b[c++]=128|g&63}}b[c]=0;return c-e},Vb=(a,b)=>{var c=17;Y(a,x(),b,c)},Wb=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},Xb=new TextDecoder("utf-16le"),Yb=(a,b)=>{var c=a>>1;for(b=c+b/2;!(c>=b)&&da()[c];)++c;c<<=1;return Xb.decode(x().slice(a,c))},Zb=(a,b,c)=>{c??=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=f;b+=2}ba()[b>>1]=0;return b-d},$b=a=>2*a.length,ac=(a,b)=>{for(var c=0,d="";!(c>=b/4);){var e=y()[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d},bc=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}y()[b>>2]=f;b+=4;if(b+4>c)break}y()[b>>2]=0;return b-d},cc=a=>{for(var b=0,c=0;c=d&&++c;b+=4}return b},dc={},ec=1,fc=URL.createObjectURL(new Blob(["onmessage=function(d){onmessage=null;d=d.data;d[`instantiateWasm`]=(i,r)=>{var n=new WebAssembly.Instance(d[`wasm`],i);return r(n,d[`wasm`]);};importScripts(d.js);loadVosklet(d);d.wasm=d.mem=d.js=0;}"],{type:"application/javascript"})),gc={},hc=a=>{if(!(a instanceof Ua||"unwind"==a))throw a;},ic=0,jc=a=>{Aa=a;0{if(!za)try{if(a(),!(0{if(!pc){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:"./this.program"},b;for(b in oc)void 0===oc[b]?delete a[b]:a[b]=oc[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);pc=c}return pc},pc,rc=()=>{if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues)return a=>(a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),a);Na("initRandomDevice")},sc=a=>(sc=rc())(a),tc=Array(256),uc=0;256>uc;++uc)tc[uc]=String.fromCharCode(uc);eb=tc;N=A.BindingError=class extends Error{constructor(a){super(a);this.name="BindingError"}};O=A.InternalError=class extends Error{constructor(a){super(a);this.name="InternalError"}};Object.assign(rb.prototype,{isAliasOf:function(a){if(!(this instanceof rb&&a instanceof rb))return!1;var b=this.ca.fa.da,c=this.ca.ea;a.ca=a.ca;var d=a.ca.fa.da;for(a=a.ca.ea;b.ja;)c=b.ua(c),b=b.ja;for(;d.ja;)a=d.ua(a),d=d.ja;return b===d&&c===a},clone:function(){this.ca.ea||jb(this);if(this.ca.ta)return this.ca.count.value+=1,this;var a=U,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.ca;a=a(c.call(b,d,{ca:{value:{count:e.count,pa:e.pa,ta:e.ta,ea:e.ea,fa:e.fa,ha:e.ha,la:e.la}}}));a.ca.count.value+=1;a.ca.pa=!1;return a},["delete"](){this.ca.ea||jb(this);if(this.ca.pa&&!this.ca.ta)throw new N("Object already scheduled for deletion");lb(this);var a=this.ca;--a.count.value;0===a.count.value&&(a.ha?a.la.na(a.ha):a.fa.da.na(a.ea));this.ca.ta||(this.ca.ha=void 0,this.ca.ea=void 0)},isDeleted:function(){return!this.ca.ea},deleteLater:function(){this.ca.ea||jb(this);if(this.ca.pa&&!this.ca.ta)throw new N("Object already scheduled for deletion");R.push(this);1===R.length&&S&&S(ob);this.ca.pa=!0;return this}});A.getInheritedInstanceCount=()=>Object.keys(T).length;A.getLiveInheritedInstances=()=>{var a=[],b;for(b in T)T.hasOwnProperty(b)&&a.push(T[b]);return a};A.flushPendingDeletes=ob;A.setDelayFunction=a=>{S=a;R.length&&S&&S(ob)};Object.assign(Db.prototype,{Ia(a){this.Da&&(a=this.Da(a));return a},Ca(a){this.na?.(a)},ma:8,readValueFromPointer:Cb,fromWireType:function(a){function b(){return this.ya?qb(this.da.qa,{fa:this.Ka,ea:c,la:this,ha:a}):qb(this.da.qa,{fa:this,ea:a})}var c=this.Ia(a);if(!c)return this.Ca(a),null;var d=pb(this.da,c);if(void 0!==d){if(0===d.ca.count.value)return d.ca.ea=c,d.ca.ha=a,d.clone();d=d.clone();this.Ca(a);return d}d=this.da.Ha(c);d=nb[d];if(!d)return b.call(this);d=this.xa?d.Ea:d.pointerType;var e=mb(c,this.da,d.da);return null===e?b.call(this):this.ya?qb(d.da.qa,{fa:d,ea:e,la:this,ha:a}):qb(d.da.qa,{fa:d,ea:e})}});Fb=A.UnboundTypeError=((a,b)=>{var c=sb(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c})(Error,"UnboundTypeError");X.push(0,1,void 0,1,null,1,!0,1,!1,1);A.count_emval_handles=()=>X.length/2-5-Qb.length;sa&&(dc[0]=this,addEventListener("message",Ja));var wc={c:(a,b,c,d)=>{Na(`Assertion failed: ${J(a)}, at: `+[b?J(b):"unknown filename",c,d?J(d):"unknown function"])},s:(a,b)=>Xa(a)(b),d:(a,b,c)=>{var d=new ab(a);z()[d.ea+16>>2]=0;z()[d.ea+4>>2]=b;z()[d.ea+8>>2]=c;bb=a;cb++;throw bb;},P:()=>{Na("")},q:(a,b,c)=>{b=K(b);P(a,{name:b,fromWireType:d=>d,toWireType:function(d,e){if("bigint"!=typeof e&&"number"!=typeof e)throw new TypeError(`Cannot convert "${db(e)}" to ${this.name}`);"number"==typeof e&&(e=BigInt(e));return e},ma:8,readValueFromPointer:ib(b,c,-1==b.indexOf("u")),ka:null})},R:(a,b,c,d)=>{b=K(b);P(a,{name:b,fromWireType:function(e){return!!e},toWireType:function(e,f){return f?c:d},ma:8,readValueFromPointer:function(e){return this.fromWireType(x()[e])},ka:null})},o:(a,b,c,d,e,f,g,h,k,l,m,p,r)=>{m=K(m);f=V(e,f);h&&=V(g,h);l&&=V(k,l);r=V(p,r);var w=vb(m);ub(w,function(){Ib(`Cannot construct ${m} due to unbound types`,[d])});Q([a,b,c],d?[d]:[],u=>{u=u[0];if(d){var D=u.da;var ea=D.qa}else ea=rb.prototype;u=sb(m,function(...Ya){if(Object.getPrototypeOf(this)!==Za)throw new N("Use 'new' to construct "+m);if(void 0===E.oa)throw new N(m+" has no accessible constructor");var Pb=E.oa[Ya.length];if(void 0===Pb)throw new N(`Tried to invoke ctor of ${m} with invalid number of parameters (${Ya.length}) - expected (${Object.keys(E.oa).toString()}) parameters instead!`);return Pb.apply(this,Ya)});var Za=Object.create(ea,{constructor:{value:u}});u.prototype=Za;var E=new wb(m,u,Za,r,D,f,h,l);if(E.ja){var fa;(fa=E.ja).Ba??(fa.Ba=[]);E.ja.Ba.push(E)}D=new Db(m,E,!0,!1,!1);fa=new Db(m+"*",E,!1,!1,!1);ea=new Db(m+" const*",E,!1,!0,!1);nb[a]={pointerType:fa,Ea:ea};Eb(w,u);return[D,fa,ea]})},j:(a,b,c,d,e,f)=>{var g=Jb(b,c);e=V(d,e);Q([],[a],h=>{h=h[0];var k=`constructor ${h.name}`;void 0===h.da.oa&&(h.da.oa=[]);if(void 0!==h.da.oa[b-1])throw new N(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${h.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);h.da.oa[b-1]=()=>{Ib(`Cannot construct ${h.name} due to unbound types`,g)};Q([],g,l=>{l.splice(1,0,null);h.da.oa[b-1]=Nb(k,l,null,e,f);return[]});return[]})},h:(a,b,c,d,e,f,g,h,k)=>{var l=Jb(c,d);b=K(b);b=Ob(b);f=V(e,f);Q([],[a],m=>{function p(){Ib(`Cannot call ${r} due to unbound types`,l)}m=m[0];var r=`${m.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);h&&m.da.La.push(b);var w=m.da.qa,u=w[b];void 0===u||void 0===u.ia&&u.className!==m.name&&u.va===c-2?(p.va=c-2,p.className=m.name,w[b]=p):(tb(w,b,r),w[b].ia[c-2]=p);Q([],l,D=>{D=Nb(r,D,m,f,g,k);void 0===w[b].ia?(D.va=c-2,w[b]=D):w[b].ia[c-2]=D;return[]});return[]})},Q:a=>P(a,Rb),A:(a,b,c,d)=>{function e(){}b=K(b);e.values={};P(a,{name:b,constructor:e,fromWireType:function(f){return this.constructor.values[f]},toWireType:(f,g)=>g.value,ma:8,readValueFromPointer:Sb(b,c,d),ka:null});ub(b,e)},k:(a,b,c)=>{var d=Tb(a);b=K(b);a=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},constructor:{value:sb(`${d.name}_${b}`,function(){})}});a.values[c]=d;a[b]=d},p:(a,b,c)=>{b=K(b);P(a,{name:b,fromWireType:d=>d,toWireType:(d,e)=>e,ma:8,readValueFromPointer:Ub(b,c),ka:null})},K:(a,b,c,d,e,f,g)=>{var h=Jb(b,c);a=K(a);a=Ob(a);e=V(d,e);ub(a,function(){Ib(`Cannot call ${a} due to unbound types`,h)},b-1);Q([],h,k=>{Eb(a,Nb(a,[k[0],null].concat(k.slice(1)),null,e,f,g),b-1);return[]})},i:(a,b,c,d,e)=>{b=K(b);-1===e&&(e=4294967295);e=h=>h;if(0===d){var f=32-8*c;e=h=>h<>>f}var g=b.includes("unsigned")?function(h,k){return k>>>0}:function(h,k){return k};P(a,{name:b,fromWireType:e,toWireType:g,ma:8,readValueFromPointer:ib(b,c,0!==d),ka:null})},e:(a,b,c)=>{function d(f){var g=z()[f>>2];f=z()[f+4>>2];return new e(n().buffer,f,g)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=K(c);P(a,{name:c,fromWireType:d,ma:8,readValueFromPointer:d},{Ja:!0})},r:(a,b)=>{b=K(b);var c="std::string"===b;P(a,{name:b,fromWireType:function(d){var e=z()[d>>2],f=d+4;if(c)for(var g=f,h=0;h<=e;++h){var k=f+h;if(h==e||0==x()[k]){g=J(g,k-g);if(void 0===l)var l=g;else l+=String.fromCharCode(0),l+=g;g=k+1}}else{l=Array(e);for(h=0;h>2]=g;if(c&&f)g+=1,Y(e,x(),k,g);else if(f)for(f=0;f{c=K(c);if(2===b){var d=Yb;var e=Zb;var f=$b;var g=h=>da()[h>>1]}else 4===b&&(d=ac,e=bc,f=cc,g=h=>z()[h>>2]);P(a,{name:c,fromWireType:h=>{for(var k=z()[h>>2],l,m=h+4,p=0;p<=k;++p){var r=h+4+p*b;if(p==k||0==g(r))m=d(m,r-m),void 0===l?l=m:(l+=String.fromCharCode(0),l+=m),m=r+b}W(h);return l},toWireType:(h,k)=>{if("string"!=typeof k)throw new N(`Cannot pass non-string to C++ string type ${c}`);var l=f(k),m=C(4+l+b);z()[m>>2]=l/b;e(k,m+4,l+b);null!==h&&h.push(W,m);return m},ma:8,readValueFromPointer:Cb,ka(h){W(h)}})},S:(a,b)=>{b=K(b);P(a,{Sa:!0,name:b,ma:0,fromWireType:()=>{},toWireType:()=>{}})},H:(a,b)=>{let c=dc[ec]=new Worker(fc);c.postMessage({$ww:ec,wasm:ya,js:A.mainScriptUrlOrBlob||_scriptName,wasmMemory:q,sb:a,sz:b});c.onmessage=La;return ec++},O:()=>1,u:()=>{ic=0},v:(a,b)=>{gc[a]&&(clearTimeout(gc[a].id),delete gc[a]);if(!b)return 0;var c=setTimeout(()=>{delete gc[a];kc(()=>vc(a,performance.now()))},b);gc[a]={id:c,Wa:b};return 0},J:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var g=Math.max(f,e);z()[a>>2]=60*g;y()[b>>2]=Number(f!=e);b=h=>{var k=Math.abs(h);return`UTC${0<=h?"-":"+"}${String(Math.floor(k/60)).padStart(2,"0")}${String(k%60).padStart(2,"0")}`};a=b(f);b=b(e);ex().set(mc[a].Ga,b),B:()=>lc.length,C:()=>mc.length,y:(a,b)=>{a=lc[a].Ra;var c=Wb(a)+1;Y(a,x(),b,c)},w:a=>mc[a].mode,E:a=>mc[a].Ga.length,z:(a,b)=>{a=lc[a].Ua;var c=Wb(a)+1;Y(a,x(),b,c)},x:(a,b)=>{a=mc[a].Va;var c=Wb(a)+1;Y(a,x(),b,c)},G:()=>{a:{if(!nc.length){var a=null;"undefined"!=typeof window&&"function"==typeof window.prompt&&(a=window.prompt("Input: "),null!==a&&(a+="\n"));if(!a){var b=null;break a}b=Array(Wb(a)+1);a=Y(a,b,0,b.length);b.length=a;nc=b}b=nc.shift()}return"number"===typeof b?b:-1},T:a=>{console.error(J(a))},V:a=>{console.log(J(a))},U:a=>{console.warn(J(a))},f:()=>Date.now(),l:a=>G(J(a)),m:()=>performance.now(),F:a=>xa(J(a)),L:a=>{var b=x().length;a>>>=0;if(a<=b||2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);a:{d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,d)/65536))-q.buffer.byteLength+65535)/65536;try{q.grow(d);v();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},M:(a,b)=>{var c=0;qc().forEach((d,e)=>{var f=b+c;e=z()[a+4*e>>2]=f;for(f=0;f{var c=qc();z()[a>>2]=c.length;var d=0;c.forEach(e=>d+=e.length+1);z()[b>>2]=d;return 0},b:a=>{Aa=a;jc(a)},g:Ta,I:(a,b)=>{sc(x().subarray(a,a+b));return 0},a:q,t:jc,W:function(a,b){for(let c of Object.values(dc))c.postMessage({_wsc:a,x:[b]}),c.onmessage=d=>Ta(...d.data)}},Z=function(){function a(c,d){Z=c.exports;Wa=Z._;Fa.unshift(Z.X);ya=d;H--;0==H&&(null!==Ma&&(clearInterval(Ma),Ma=null),I&&(c=I,I=null,c()));return Z}var b={a:wc};H++;if(A.instantiateWasm)try{return A.instantiateWasm(b,a)}catch(c){G(`Module.instantiateWasm callback failed with error: ${c}`),na(c)}Pa??=Oa("Vosklet.wasm")?"Vosklet.wasm":F+"Vosklet.wasm";Sa(b,function(c){a(c.instance,c.module)}).catch(na);return{}}(),W=a=>(W=Z.Y)(a),C=a=>(C=Z.Z)(a),Gb=a=>(Gb=Z.$)(a),vc=(a,b)=>(vc=Z.aa)(a,b),Ia=(a,b)=>(Ia=Z.ba)(a,b),xc;I=function yc(){xc||zc();xc||(I=yc)};function zc(){if(!(0 loadVosklet); \ No newline at end of file +var loadVosklet = (() => { var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined; return (function(moduleArg = {}) { var moduleRtn;function m(){p.buffer!=q.buffer&&t();return q}function w(){p.buffer!=q.buffer&&t();return aa}function ba(){p.buffer!=q.buffer&&t();return ca}function da(){p.buffer!=q.buffer&&t();return ha}function y(){p.buffer!=q.buffer&&t();return ia}function z(){p.buffer!=q.buffer&&t();return ja}function ka(){p.buffer!=q.buffer&&t();return la}var A=moduleArg,ma,na,oa=new Promise((a,b)=>{ma=a;na=b}),pa="object"==typeof window,qa="function"==typeof importScripts,ra="object"==typeof process&&"object"==typeof process.Pa&&"string"==typeof process.Pa.node&&"renderer"!=process.type,sa=A.$ww;if(pa){var B=[],ta=["status","partialResult","result"];let a=URL.createObjectURL(new Blob(["(",(()=>{registerProcessor("VoskletTransferer",class extends AudioWorkletProcessor{constructor(d){super();this.sa=0;this.za=d.processorOptions[0];this.wa=new Float32Array(this.za)}process(d){d[0][0]&&(this.wa.set(d[0][0],this.sa),this.sa+=128,this.sa>=this.za&&(this.sa=0,this.port.postMessage(this.wa,[this.wa.buffer]),this.wa=new Float32Array(this.za)));return!0}})}).toString(),")()"],{type:"text/javascript"}));class b extends EventTarget{constructor(){super();B.push(this)}delete(){this.ga.delete()}static async ra(d,e,f,h){let g=new b,k=new Promise((u,r)=>{g.addEventListener("status",x=>{x.detail?r(x.detail):(h&&(g.findWord=v=>g.ga.findWord(v)),u(g))},{once:!0})}),l=await caches.open("Vosklet"),n=await l.match(e);if("undefined"==typeof n||n.headers.get("id")!=f){n=await fetch(d,{cache:"no-store"});if(!n.ok)throw"Unable to fetch model, status: "+n.status;await l.put(e,new Response(n.clone().body.pipeThrough(new CompressionStream("gzip")),{headers:{id:f}}))}d=await (new Response(n.body.pipeThrough(new DecompressionStream("gzip")))).arrayBuffer();e=C(d.byteLength);w().set(new Uint8Array(d),e);g.ga=new A.CommonModel(B.length-1,h,e,d.byteLength);return k}}class c extends EventTarget{constructor(){super();this.acceptWaveform=d=>{let e=C(4*d.length);ka().set(d,e/4);this.ga.acceptWaveform(e,d.length)};B.push(this);return new Proxy(this,{get(d,e){if(void 0!=d[e]||void 0!=d.ga[e]){var f=d[e];if(f)return f.bind?f.bind(d):f;f=d.ga[e];return f.bind?f.bind(d.ga):f}}})}async delete(d=!1){let e=new Promise(f=>this.addEventListener("status",()=>{this.ga.delete();f()},{once:!0}));this.ga.safeDelete(d);return e}static async ra(d,e,f,h,g){let k=new c,l=new Promise((n,u)=>{k.addEventListener("status",r=>{r.detail?u(r.detail):n(k)},{once:!0})});switch(f){case 1:k.ga=new A.Recognizer(B.length-1,e,d);break;case 2:k.ga=new A.Recognizer(B.length-1,e,d,g);break;default:k.ga=new A.Recognizer(B.length-1,e,d,h,0)}return l}}A={cleanUp:async()=>{for(let d of B)await d.delete();URL.revokeObjectURL(a)},createTransferer:async(d,e)=>{await d.audioWorklet.addModule(a);return new AudioWorkletNode(d,"VoskletTransferer",{channelCountMode:"explicit",numberOfInputs:1,numberOfOutputs:0,channelCount:1,processorOptions:[e]})},createModel:(d,e,f)=>b.ra(d,e,f,!0),createSpkModel:(d,e,f)=>b.ra(d,e,f,!1),createRecognizer:(d,e)=>c.ra(d.ga,e,1),createRecognizerWithGrm:(d,e,f)=>c.ra(d.ga,e,3,f,null),createRecognizerWithSpkModel:(d,e,f)=>c.ra(d.ga,e,2,null,f.ga)}}var ua=Object.assign({},A),F="",va,wa;if(pa||qa)qa?F=self.location.href:"undefined"!=typeof document&&document.currentScript&&(F=document.currentScript.src),_scriptName&&(F=_scriptName),F.startsWith("blob:")?F="":F=F.substr(0,F.replace(/[?#].*/,"").lastIndexOf("/")+1),qa&&(wa=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),va=a=>fetch(a,{credentials:"same-origin"}).then(b=>b.ok?b.arrayBuffer():Promise.reject(Error(b.status+" : "+b.url)));var xa=console.log.bind(console),G=console.error.bind(console);Object.assign(A,ua);ua=null;var p,ya,za=!1,Aa,q,aa,ca,ha,ia,ja,la,Ba,Ca,Da;function t(){var a=p.buffer;A.HEAP8=q=new Int8Array(a);A.HEAP16=ca=new Int16Array(a);A.HEAPU8=aa=new Uint8Array(a);A.HEAPU16=ha=new Uint16Array(a);A.HEAP32=ia=new Int32Array(a);A.HEAPU32=ja=new Uint32Array(a);A.HEAPF32=la=new Float32Array(a);A.HEAPF64=Da=new Float64Array(a);A.HEAP64=Ba=new BigInt64Array(a);A.HEAPU64=Ca=new BigUint64Array(a)}if(A.wasmMemory)p=A.wasmMemory;else if(p=new WebAssembly.Memory({initial:5040,maximum:32768,shared:!0}),!(p.buffer instanceof SharedArrayBuffer))throw G("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"),ra&&G("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");t();var Ea=[],Fa=[],Ga=[];function Ha(){if(sa){let a=A;Ia(a.sb,a.sz);removeEventListener("message",Ja);Ka=Ka.forEach(La);addEventListener("message",La)}else for(;0a.startsWith("data:application/octet-stream;base64,"),Pa;function Qa(a){return va(a).then(b=>new Uint8Array(b),()=>{if(wa)var b=wa(a);else throw"both async and sync fetching of the wasm failed";return b})}function Ra(a,b,c){return Qa(a).then(d=>WebAssembly.instantiate(d,b)).then(c,d=>{G(`failed to asynchronously prepare wasm: ${d}`);Na(d)})}function Sa(a,b){var c=Pa;return"function"!=typeof WebAssembly.instantiateStreaming||Oa(c)||"function"!=typeof fetch?Ra(c,a,b):fetch(c,{credentials:"same-origin"}).then(d=>WebAssembly.instantiateStreaming(d,a).then(b,function(e){G(`wasm streaming compile failed: ${e}`);G("falling back to ArrayBuffer instantiation");return Ra(c,a,b)}))}function Ta(a,b,c){pa?B[a].dispatchEvent(new CustomEvent(ta[b],{detail:0==c?null:J(c)})):self.postMessage([a,b,c])}function Ua(a){this.name="ExitStatus";this.message=`Program terminated with exit(${a})`;this.status=a}var Ka=[],Va=[],Wa,Xa=a=>{var b=Va[a];b||(a>=Va.length&&(Va.length=a+1),Va[a]=b=Wa.get(a));return b},La=a=>{a=a.data;let b=a._wsc;b&&Xa(b)(...a.x)},Ja=a=>{Ka.push(a)},$a=new TextDecoder,J=(a,b)=>{if(!a)return"";b=a+b;for(var c=a;!(c>=b)&&w()[c];)++c;return $a.decode(w().slice(a,c))};class ab{constructor(a){this.ea=a-24}}var bb=0,cb=0,db=a=>{if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a},eb,K=a=>{for(var b="";w()[a];)b+=eb[w()[a++]];return b},L={},M={},fb={},N,gb=a=>{throw new N(a);},O,Q=(a,b,c)=>{function d(g){g=c(g);if(g.length!==a.length)throw new O("Mismatched type converter count");for(var k=0;kfb[g]=b);var e=Array(b.length),f=[],h=0;b.forEach((g,k)=>{M.hasOwnProperty(g)?e[k]=M[g]:(f.push(g),L.hasOwnProperty(g)||(L[g]=[]),L[g].push(()=>{e[k]=M[g];++h;h===f.length&&d(e)}))});0===f.length&&d(e)};function hb(a,b,c={}){var d=b.name;if(!a)throw new N(`type "${d}" must have a positive integer typeid pointer`);if(M.hasOwnProperty(a)){if(c.Ja)return;throw new N(`Cannot register type '${d}' twice`);}M[a]=b;delete fb[a];L.hasOwnProperty(a)&&(b=L[a],delete L[a],b.forEach(e=>e()))}function P(a,b,c={}){return hb(a,b,c)}var ib=(a,b,c)=>{switch(b){case 1:return c?d=>m()[d]:d=>w()[d];case 2:return c?d=>ba()[d>>1]:d=>da()[d>>1];case 4:return c?d=>y()[d>>2]:d=>z()[d>>2];case 8:return c?d=>Ba[d>>3]:d=>Ca[d>>3];default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},jb=a=>{throw new N(a.ca.fa.da.name+" instance already deleted");},kb=!1,lb=()=>{},mb=(a,b,c)=>{if(b===c)return a;if(void 0===c.ja)return null;a=mb(a,b,c.ja);return null===a?null:c.Fa(a)},nb={},R=[],ob=()=>{for(;R.length;){var a=R.pop();a.ca.pa=!1;a["delete"]()}},S,T={},pb=(a,b)=>{if(void 0===b)throw new N("ptr should not be undefined");for(;a.ja;)b=a.ua(b),a=a.ja;return T[b]},qb=(a,b)=>{if(!b.fa||!b.ea)throw new O("makeClassHandle requires ptr and ptrType");if(!!b.la!==!!b.ha)throw new O("Both smartPtrType and smartPtr must be specified");b.count={value:1};return U(Object.create(a,{ca:{value:b,writable:!0}}))},U=a=>{if("undefined"===typeof FinalizationRegistry)return U=b=>b,a;kb=new FinalizationRegistry(b=>{b=b.ca;--b.count.value;0===b.count.value&&(b.ha?b.la.na(b.ha):b.fa.da.na(b.ea))});U=b=>{var c=b.ca;c.ha&&kb.register(b,{ca:c},b);return b};lb=b=>{kb.unregister(b)};return U(a)};function rb(){}var sb=(a,b)=>Object.defineProperty(b,"name",{value:a}),tb=(a,b,c)=>{if(void 0===a[b].ia){var d=a[b];a[b]=function(...e){if(!a[b].ia.hasOwnProperty(e.length))throw new N(`Function '${c}' called with an invalid number of arguments (${e.length}) - expects one of (${a[b].ia})!`);return a[b].ia[e.length].apply(this,e)};a[b].ia=[];a[b].ia[d.va]=d}},ub=(a,b,c)=>{if(A.hasOwnProperty(a)){if(void 0===c||void 0!==A[a].ia&&void 0!==A[a].ia[c])throw new N(`Cannot register public name '${a}' twice`);tb(A,a,a);if(A.hasOwnProperty(c))throw new N(`Cannot register multiple overloads of a function with the same number of arguments (${c})!`);A[a].ia[c]=b}else A[a]=b,void 0!==c&&(A[a].Sa=c)},vb=a=>{if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?`_${a}`:a};function wb(a,b,c,d,e,f,h,g){this.name=a;this.constructor=b;this.qa=c;this.na=d;this.ja=e;this.Ha=f;this.ua=h;this.Fa=g;this.La=[]}var xb=(a,b,c)=>{for(;b!==c;){if(!b.ua)throw new N(`Expected null or instance of ${c.name}, got an instance of ${b.name}`);a=b.ua(a);b=b.ja}return a};function yb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);return 0}if(!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);return xb(b.ca.ea,b.ca.fa.da,this.da)}function zb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);if(this.ya){var c=this.Ma();null!==a&&a.push(this.na,c);return c}return 0}if(!b||!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);if(!this.xa&&b.ca.fa.xa)throw new N(`Cannot convert argument of type ${b.ca.la?b.ca.la.name:b.ca.fa.name} to parameter type ${this.name}`);c=xb(b.ca.ea,b.ca.fa.da,this.da);if(this.ya){if(void 0===b.ca.ha)throw new N("Passing raw pointer to smart pointer is illegal");switch(this.Oa){case 0:if(b.ca.la===this)c=b.ca.ha;else throw new N(`Cannot convert argument of type ${b.ca.la?b.ca.la.name:b.ca.fa.name} to parameter type ${this.name}`);break;case 1:c=b.ca.ha;break;case 2:if(b.ca.la===this)c=b.ca.ha;else{var d=b.clone();c=this.Na(c,Ab(()=>d["delete"]()));null!==a&&a.push(this.na,c)}break;default:throw new N("Unsupporting sharing policy");}}return c}function Bb(a,b){if(null===b){if(this.Aa)throw new N(`null is not a valid ${this.name}`);return 0}if(!b.ca)throw new N(`Cannot pass "${db(b)}" as a ${this.name}`);if(!b.ca.ea)throw new N(`Cannot pass deleted object as a pointer of type ${this.name}`);if(b.ca.fa.xa)throw new N(`Cannot convert argument of type ${b.ca.fa.name} to parameter type ${this.name}`);return xb(b.ca.ea,b.ca.fa.da,this.da)}function Cb(a){return this.fromWireType(z()[a>>2])}function Db(a,b,c,d,e,f,h,g,k,l,n){this.name=a;this.da=b;this.Aa=c;this.xa=d;this.ya=e;this.Ka=f;this.Oa=h;this.Da=g;this.Ma=k;this.Na=l;this.na=n;e||void 0!==b.ja?this.toWireType=zb:(this.toWireType=d?yb:Bb,this.ka=null)}var Eb=(a,b,c)=>{if(!A.hasOwnProperty(a))throw new O("Replacing nonexistent public symbol");void 0!==A[a].ia&&void 0!==c?A[a].ia[c]=b:(A[a]=b,A[a].va=c)},V=(a,b)=>{a=K(a);var c=Xa(b);if("function"!=typeof c)throw new N(`unknown function pointer with signature ${a}: ${b}`);return c},Fb,Hb=a=>{a=Gb(a);var b=K(a);W(a);return b},Ib=(a,b)=>{function c(f){e[f]||M[f]||(fb[f]?fb[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};b.forEach(c);throw new Fb(`${a}: `+d.map(Hb).join([", "]));},Jb=(a,b)=>{for(var c=[],d=0;d>2]);return c},Kb=a=>{for(;a.length;){var b=a.pop();a.pop()(b)}};function Lb(a){for(var b=1;bh)throw new N("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=null!==b[1]&&null!==c,k=Lb(b);c="void"!==b[0].name;d=[a,gb,d,e,Kb,b[0],b[1]];for(e=0;e{a=a.trim();const b=a.indexOf("(");return-1!==b?a.substr(0,b):a},Qb=[],X=[],Ab=a=>{switch(a){case void 0:return 2;case null:return 4;case !0:return 6;case !1:return 8;default:const b=Qb.pop()||X.length;X[b]=a;X[b+1]=1;return b}},Rb={name:"emscripten::val",fromWireType:a=>{if(!a)throw new N("Cannot use deleted val. handle = "+a);var b=X[a];9Ab(b),ma:8,readValueFromPointer:Cb,ka:null},Sb=(a,b,c)=>{switch(b){case 1:return c?function(d){return this.fromWireType(m()[d])}:function(d){return this.fromWireType(w()[d])};case 2:return c?function(d){return this.fromWireType(ba()[d>>1])}:function(d){return this.fromWireType(da()[d>>1])};case 4:return c?function(d){return this.fromWireType(y()[d>>2])}:function(d){return this.fromWireType(z()[d>>2])};default:throw new TypeError(`invalid integer width (${b}): ${a}`);}},Tb=a=>{var b=M[a];if(void 0===b)throw a=`${"enum"} has unknown type ${Hb(a)}`,new N(a);return b},Ub=(a,b)=>{switch(b){case 4:return function(c){return this.fromWireType(ka()[c>>2])};case 8:return function(c){var d=this.fromWireType;p.buffer!=q.buffer&&t();return d.call(this,Da[c>>3])};default:throw new TypeError(`invalid float width (${b}): ${a}`);}},Y=(a,b,c,d)=>{if(!(0=h){var g=a.charCodeAt(++f);h=65536+((h&1023)<<10)|g&1023}if(127>=h){if(c>=d)break;b[c++]=h}else{if(2047>=h){if(c+1>=d)break;b[c++]=192|h>>6}else{if(65535>=h){if(c+2>=d)break;b[c++]=224|h>>12}else{if(c+3>=d)break;b[c++]=240|h>>18;b[c++]=128|h>>12&63}b[c++]=128|h>>6&63}b[c++]=128|h&63}}b[c]=0;return c-e},Vb=(a,b)=>{Y(a,w(),b,17)},Wb=a=>{for(var b=0,c=0;c=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},Xb=new TextDecoder("utf-16le"),Yb=(a,b)=>{var c=a>>1;for(b=c+b/2;!(c>=b)&&da()[c];)++c;c<<=1;return Xb.decode(w().slice(a,c))},Zb=(a,b,c)=>{c??=2147483647;if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var e=0;e>1]=f;b+=2}ba()[b>>1]=0;return b-d},$b=a=>2*a.length,ac=(a,b)=>{for(var c=0,d="";!(c>=b/4);){var e=y()[a+4*c>>2];if(0==e)break;++c;65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d},bc=(a,b,c)=>{c??=2147483647;if(4>c)return 0;var d=b;c=d+c-4;for(var e=0;e=f){var h=a.charCodeAt(++e);f=65536+((f&1023)<<10)|h&1023}y()[b>>2]=f;b+=4;if(b+4>c)break}y()[b>>2]=0;return b-d},cc=a=>{for(var b=0,c=0;c=d&&++c;b+=4}return b},dc={},ec=1,fc=URL.createObjectURL(new Blob(["onmessage=function(d){onmessage=null;d=d.data;d[`instantiateWasm`]=(i,r)=>{var n=new WebAssembly.Instance(d[`wasm`],i);return r(n,d[`wasm`]);};importScripts(d.js);loadVosklet(d);d.wasm=d.mem=d.js=0;}"],{type:"application/javascript"})),gc={},hc=a=>{if(!(a instanceof Ua||"unwind"==a))throw a;},ic=0,jc=a=>{Aa=a;0{if(!za)try{if(a(),!(0{if(!pc){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:"./this.program"},b;for(b in oc)void 0===oc[b]?delete a[b]:a[b]=oc[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);pc=c}return pc},pc,rc=()=>{if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues)return a=>(a.set(crypto.getRandomValues(new Uint8Array(a.byteLength))),a);Na("initRandomDevice")},sc=a=>(sc=rc())(a),tc=Array(256),uc=0;256>uc;++uc)tc[uc]=String.fromCharCode(uc);eb=tc;N=A.BindingError=class extends Error{constructor(a){super(a);this.name="BindingError"}};O=A.InternalError=class extends Error{constructor(a){super(a);this.name="InternalError"}};Object.assign(rb.prototype,{isAliasOf:function(a){if(!(this instanceof rb&&a instanceof rb))return!1;var b=this.ca.fa.da,c=this.ca.ea;a.ca=a.ca;var d=a.ca.fa.da;for(a=a.ca.ea;b.ja;)c=b.ua(c),b=b.ja;for(;d.ja;)a=d.ua(a),d=d.ja;return b===d&&c===a},clone:function(){this.ca.ea||jb(this);if(this.ca.ta)return this.ca.count.value+=1,this;var a=U,b=Object,c=b.create,d=Object.getPrototypeOf(this),e=this.ca;a=a(c.call(b,d,{ca:{value:{count:e.count,pa:e.pa,ta:e.ta,ea:e.ea,fa:e.fa,ha:e.ha,la:e.la}}}));a.ca.count.value+=1;a.ca.pa=!1;return a},["delete"](){this.ca.ea||jb(this);if(this.ca.pa&&!this.ca.ta)throw new N("Object already scheduled for deletion");lb(this);var a=this.ca;--a.count.value;0===a.count.value&&(a.ha?a.la.na(a.ha):a.fa.da.na(a.ea));this.ca.ta||(this.ca.ha=void 0,this.ca.ea=void 0)},isDeleted:function(){return!this.ca.ea},deleteLater:function(){this.ca.ea||jb(this);if(this.ca.pa&&!this.ca.ta)throw new N("Object already scheduled for deletion");R.push(this);1===R.length&&S&&S(ob);this.ca.pa=!0;return this}});A.getInheritedInstanceCount=()=>Object.keys(T).length;A.getLiveInheritedInstances=()=>{var a=[],b;for(b in T)T.hasOwnProperty(b)&&a.push(T[b]);return a};A.flushPendingDeletes=ob;A.setDelayFunction=a=>{S=a;R.length&&S&&S(ob)};Object.assign(Db.prototype,{Ia(a){this.Da&&(a=this.Da(a));return a},Ca(a){this.na?.(a)},ma:8,readValueFromPointer:Cb,fromWireType:function(a){function b(){return this.ya?qb(this.da.qa,{fa:this.Ka,ea:c,la:this,ha:a}):qb(this.da.qa,{fa:this,ea:a})}var c=this.Ia(a);if(!c)return this.Ca(a),null;var d=pb(this.da,c);if(void 0!==d){if(0===d.ca.count.value)return d.ca.ea=c,d.ca.ha=a,d.clone();d=d.clone();this.Ca(a);return d}d=this.da.Ha(c);d=nb[d];if(!d)return b.call(this);d=this.xa?d.Ea:d.pointerType;var e=mb(c,this.da,d.da);return null===e?b.call(this):this.ya?qb(d.da.qa,{fa:d,ea:e,la:this,ha:a}):qb(d.da.qa,{fa:d,ea:e})}});Fb=A.UnboundTypeError=((a,b)=>{var c=sb(b,function(d){this.name=b;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(a.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:`${this.name}: ${this.message}`};return c})(Error,"UnboundTypeError");X.push(0,1,void 0,1,null,1,!0,1,!1,1);A.count_emval_handles=()=>X.length/2-5-Qb.length;sa&&(dc[0]=this,addEventListener("message",Ja));var wc={c:(a,b,c,d)=>{Na(`Assertion failed: ${J(a)}, at: `+[b?J(b):"unknown filename",c,d?J(d):"unknown function"])},s:(a,b)=>Xa(a)(b),d:(a,b,c)=>{var d=new ab(a);z()[d.ea+16>>2]=0;z()[d.ea+4>>2]=b;z()[d.ea+8>>2]=c;bb=a;cb++;throw bb;},P:()=>{Na("")},q:(a,b,c)=>{b=K(b);P(a,{name:b,fromWireType:d=>d,toWireType:function(d,e){if("bigint"!=typeof e&&"number"!=typeof e)throw new TypeError(`Cannot convert "${db(e)}" to ${this.name}`);"number"==typeof e&&(e=BigInt(e));return e},ma:8,readValueFromPointer:ib(b,c,-1==b.indexOf("u")),ka:null})},R:(a,b,c,d)=>{b=K(b);P(a,{name:b,fromWireType:function(e){return!!e},toWireType:function(e,f){return f?c:d},ma:8,readValueFromPointer:function(e){return this.fromWireType(w()[e])},ka:null})},o:(a,b,c,d,e,f,h,g,k,l,n,u,r)=>{n=K(n);f=V(e,f);g&&=V(h,g);l&&=V(k,l);r=V(u,r);var x=vb(n);ub(x,function(){Ib(`Cannot construct ${n} due to unbound types`,[d])});Q([a,b,c],d?[d]:[],v=>{v=v[0];if(d){var D=v.da;var ea=D.qa}else ea=rb.prototype;v=sb(n,function(...Ya){if(Object.getPrototypeOf(this)!==Za)throw new N("Use 'new' to construct "+n);if(void 0===E.oa)throw new N(n+" has no accessible constructor");var Pb=E.oa[Ya.length];if(void 0===Pb)throw new N(`Tried to invoke ctor of ${n} with invalid number of parameters (${Ya.length}) - expected (${Object.keys(E.oa).toString()}) parameters instead!`);return Pb.apply(this,Ya)});var Za=Object.create(ea,{constructor:{value:v}});v.prototype=Za;var E=new wb(n,v,Za,r,D,f,g,l);if(E.ja){var fa;(fa=E.ja).Ba??(fa.Ba=[]);E.ja.Ba.push(E)}D=new Db(n,E,!0,!1,!1);fa=new Db(n+"*",E,!1,!1,!1);ea=new Db(n+" const*",E,!1,!0,!1);nb[a]={pointerType:fa,Ea:ea};Eb(x,v);return[D,fa,ea]})},j:(a,b,c,d,e,f)=>{var h=Jb(b,c);e=V(d,e);Q([],[a],g=>{g=g[0];var k=`constructor ${g.name}`;void 0===g.da.oa&&(g.da.oa=[]);if(void 0!==g.da.oa[b-1])throw new N(`Cannot register multiple constructors with identical number of parameters (${b-1}) for class '${g.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);g.da.oa[b-1]=()=>{Ib(`Cannot construct ${g.name} due to unbound types`,h)};Q([],h,l=>{l.splice(1,0,null);g.da.oa[b-1]=Nb(k,l,null,e,f);return[]});return[]})},g:(a,b,c,d,e,f,h,g,k)=>{var l=Jb(c,d);b=K(b);b=Ob(b);f=V(e,f);Q([],[a],n=>{function u(){Ib(`Cannot call ${r} due to unbound types`,l)}n=n[0];var r=`${n.name}.${b}`;b.startsWith("@@")&&(b=Symbol[b.substring(2)]);g&&n.da.La.push(b);var x=n.da.qa,v=x[b];void 0===v||void 0===v.ia&&v.className!==n.name&&v.va===c-2?(u.va=c-2,u.className=n.name,x[b]=u):(tb(x,b,r),x[b].ia[c-2]=u);Q([],l,D=>{D=Nb(r,D,n,f,h,k);void 0===x[b].ia?(D.va=c-2,x[b]=D):x[b].ia[c-2]=D;return[]});return[]})},Q:a=>P(a,Rb),A:(a,b,c,d)=>{function e(){}b=K(b);e.values={};P(a,{name:b,constructor:e,fromWireType:function(f){return this.constructor.values[f]},toWireType:(f,h)=>h.value,ma:8,readValueFromPointer:Sb(b,c,d),ka:null});ub(b,e)},k:(a,b,c)=>{var d=Tb(a);b=K(b);a=d.constructor;d=Object.create(d.constructor.prototype,{value:{value:c},constructor:{value:sb(`${d.name}_${b}`,function(){})}});a.values[c]=d;a[b]=d},p:(a,b,c)=>{b=K(b);P(a,{name:b,fromWireType:d=>d,toWireType:(d,e)=>e,ma:8,readValueFromPointer:Ub(b,c),ka:null})},K:(a,b,c,d,e,f,h)=>{var g=Jb(b,c);a=K(a);a=Ob(a);e=V(d,e);ub(a,function(){Ib(`Cannot call ${a} due to unbound types`,g)},b-1);Q([],g,k=>{Eb(a,Nb(a,[k[0],null].concat(k.slice(1)),null,e,f,h),b-1);return[]})},h:(a,b,c,d,e)=>{b=K(b);-1===e&&(e=4294967295);e=g=>g;if(0===d){var f=32-8*c;e=g=>g<>>f}var h=b.includes("unsigned")?function(g,k){return k>>>0}:function(g,k){return k};P(a,{name:b,fromWireType:e,toWireType:h,ma:8,readValueFromPointer:ib(b,c,0!==d),ka:null})},e:(a,b,c)=>{function d(f){var h=z()[f>>2];f=z()[f+4>>2];return new e(m().buffer,f,h)}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][b];c=K(c);P(a,{name:c,fromWireType:d,ma:8,readValueFromPointer:d},{Ja:!0})},r:(a,b)=>{b=K(b);var c="std::string"===b;P(a,{name:b,fromWireType:function(d){var e=z()[d>>2],f=d+4;if(c)for(var h=f,g=0;g<=e;++g){var k=f+g;if(g==e||0==w()[k]){h=J(h,k-h);if(void 0===l)var l=h;else l+=String.fromCharCode(0),l+=h;h=k+1}}else{l=Array(e);for(g=0;g>2]=h;if(c&&f)h+=1,Y(e,w(),k,h);else if(f)for(f=0;f{c=K(c);if(2===b){var d=Yb;var e=Zb;var f=$b;var h=g=>da()[g>>1]}else 4===b&&(d=ac,e=bc,f=cc,h=g=>z()[g>>2]);P(a,{name:c,fromWireType:g=>{for(var k=z()[g>>2],l,n=g+4,u=0;u<=k;++u){var r=g+4+u*b;if(u==k||0==h(r))n=d(n,r-n),void 0===l?l=n:(l+=String.fromCharCode(0),l+=n),n=r+b}W(g);return l},toWireType:(g,k)=>{if("string"!=typeof k)throw new N(`Cannot pass non-string to C++ string type ${c}`);var l=f(k),n=C(4+l+b);z()[n>>2]=l/b;e(k,n+4,l+b);null!==g&&g.push(W,n);return n},ma:8,readValueFromPointer:Cb,ka(g){W(g)}})},S:(a,b)=>{b=K(b);P(a,{Ra:!0,name:b,ma:0,fromWireType:()=>{},toWireType:()=>{}})},H:(a,b)=>{let c=dc[ec]=new Worker(fc);c.postMessage({$ww:ec,wasm:ya,js:A.mainScriptUrlOrBlob||_scriptName,wasmMemory:p,sb:a,sz:b});c.onmessage=La;return ec++},O:()=>1,u:()=>{ic=0},v:(a,b)=>{gc[a]&&(clearTimeout(gc[a].id),delete gc[a]);if(!b)return 0;var c=setTimeout(()=>{delete gc[a];kc(()=>vc(a,performance.now()))},b);gc[a]={id:c,Va:b};return 0},J:(a,b,c,d)=>{var e=(new Date).getFullYear(),f=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();var h=Math.max(f,e);z()[a>>2]=60*h;y()[b>>2]=Number(f!=e);b=g=>{var k=Math.abs(g);return`UTC${0<=g?"-":"+"}${String(Math.floor(k/60)).padStart(2,"0")}${String(k%60).padStart(2,"0")}`};a=b(f);b=b(e);ew().set(mc[a].Ga,b),B:()=>lc.length,C:()=>mc.length,y:(a,b)=>{a=lc[a].Qa;var c=Wb(a)+1;Y(a,w(),b,c)},w:a=>mc[a].mode,E:a=>mc[a].Ga.length,z:(a,b)=>{a=lc[a].Ta;var c=Wb(a)+1;Y(a,w(),b,c)},x:(a,b)=>{a=mc[a].Ua;var c=Wb(a)+1;Y(a,w(),b,c)},G:()=>{a:{if(!nc.length){var a=null;"undefined"!=typeof window&&"function"==typeof window.prompt&&(a=window.prompt("Input: "),null!==a&&(a+="\n"));if(!a){var b=null;break a}b=Array(Wb(a)+1);a=Y(a,b,0,b.length);b.length=a;nc=b}b=nc.shift()}return"number"===typeof b?b:-1},T:a=>{console.error(J(a))},V:a=>{console.log(J(a))},U:a=>{console.warn(J(a))},f:()=>Date.now(),l:a=>G(J(a)),m:()=>performance.now(),F:a=>xa(J(a)),L:a=>{var b=w().length;a>>>=0;if(a<=b||2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);a:{d=(Math.min(2147483648,65536*Math.ceil(Math.max(a,d)/65536))-p.buffer.byteLength+65535)/65536;try{p.grow(d);t();var e=1;break a}catch(f){}e=void 0}if(e)return!0}return!1},M:(a,b)=>{var c=0;qc().forEach((d,e)=>{var f=b+c;e=z()[a+4*e>>2]=f;for(f=0;f{var c=qc();z()[a>>2]=c.length;var d=0;c.forEach(e=>d+=e.length+1);z()[b>>2]=d;return 0},b:a=>{Aa=a;jc(a)},i:Ta,I:(a,b)=>{sc(w().subarray(a,a+b));return 0},a:p,t:jc,W:function(a,b){for(let c of Object.values(dc))c.postMessage({_wsc:a,x:[b]}),c.onmessage=d=>Ta(...d.data)}},Z=function(){function a(c,d){Z=c.exports;Wa=Z._;Fa.unshift(Z.X);ya=d;H--;0==H&&(null!==Ma&&(clearInterval(Ma),Ma=null),I&&(c=I,I=null,c()));return Z}var b={a:wc};H++;if(A.instantiateWasm)try{return A.instantiateWasm(b,a)}catch(c){G(`Module.instantiateWasm callback failed with error: ${c}`),na(c)}Pa??=Oa("Vosklet.wasm")?"Vosklet.wasm":F+"Vosklet.wasm";Sa(b,function(c){a(c.instance,c.module)}).catch(na);return{}}(),W=a=>(W=Z.Y)(a),C=a=>(C=Z.Z)(a),Gb=a=>(Gb=Z.$)(a),vc=(a,b)=>(vc=Z.aa)(a,b),Ia=(a,b)=>(Ia=Z.ba)(a,b),xc;I=function yc(){xc||zc();xc||(I=yc)};function zc(){if(!(0 loadVosklet); \ No newline at end of file diff --git a/Vosklet.wasm b/Vosklet.wasm index ff2e377..0b3310a 100755 Binary files a/Vosklet.wasm and b/Vosklet.wasm differ diff --git a/src/CommonModel.cc b/src/CommonModel.cc index 0740696..ee2b114 100644 --- a/src/CommonModel.cc +++ b/src/CommonModel.cc @@ -8,28 +8,33 @@ CommonModel::CommonModel(int index, bool normalMdl, int tarStart, int tarSize) : }); } void CommonModel::extractAndLoad(unsigned char* tar, int tarSize) { - std::string storepath{'/' + std::to_string(index)}; - int res{untar(tar, tarSize, storepath.c_str())}; + // Map index onto [A-Z] + const char storepath[3]{'/', static_cast(index % 26 + 'A')}; + int res{untar(tar, tarSize, storepath)}; free(tar); + const char* untarErr{}; switch(res) { case IncorrectFormat: - fireEv(index, Event::status, "Untar: Incorrect tar format, must be USTAR"); - return; + untarErr = "Untar: Incorrect tar format, must be USTAR"; + break; case IncorrectFiletype: - fireEv(index, Event::status, "Untar: Not a directory or regular file"); - return; + untarErr = "Untar: Not a directory or regular file"; + break; case FailedOpen: - fireEv(index, Event::status, "Untar: Unable to open file for write"); - return; + untarErr = "Untar: Unable to open file for write"; + break; case FailedWrite: - fireEv(index, Event::status, "Untar: Unable to write file"); - return; + untarErr = "Untar: Unable to write file"; + break; case FailedClose: - fireEv(index, Event::status, "Untar: Unable to close file after write"); - return; + untarErr = "Untar: Unable to close file after write"; }; - if(normalMdl) mdl = vosk_model_new(storepath.c_str()); - else mdl = vosk_spk_model_new(storepath.c_str()); + if(untarErr != nullptr) { + fireEv(index, Event::status, untarErr); + return; + } + if(normalMdl) mdl = vosk_model_new(storepath); + else mdl = vosk_spk_model_new(storepath); if(normalMdl ? std::get(mdl) != nullptr : std::get(mdl) != nullptr) fireEv(index, status); else fireEv(index, status, "Unable to load model for recognition"); fs::remove_all(storepath); diff --git a/src/Wrapper.js b/src/Wrapper.js index c8b1b18..43c0c50 100644 --- a/src/Wrapper.js +++ b/src/Wrapper.js @@ -5,48 +5,9 @@ if(ENVIRONMENT_IS_WEB) { -// "var" to expose this outside the if +// 'var' to expose this outside the if var objs = []; var events = ['status', 'partialResult', 'result']; -let storageWorkerURL = URL.createObjectURL(new Blob(['(', (async () => { - let txtDecoder = new TextDecoder(); - let txtEncoder = new TextEncoder(); - let OPFSRoot = await navigator.storage.getDirectory(); - onmessage = async msg => { - msg = msg.data; - let components = msg.storepath.split('/'); - let prevDir = OPFSRoot; - for(let component of components) prevDir = await prevDir.getDirectoryHandle(component, { create: true }); - let idHandle = await prevDir.getFileHandle('id', { create: true }); - let mdlHandle = await prevDir.getFileHandle('model.tgz', { create: true }); - let idFile = await idHandle.createSyncAccessHandle(); - let mdlFile = await mdlHandle.createSyncAccessHandle(); - let oldIdBuf = new ArrayBuffer(idFile.getSize()); - idFile.read(oldIdBuf); - let tar, tgz; - if(txtDecoder.decode(oldIdBuf) == msg.id) { - tgz = new ArrayBuffer(mdlFile.getSize()); - mdlFile.read(tgz); - tar = await new Response(new Response(tgz).body.pipeThrough(new DecompressionStream('gzip'))).arrayBuffer(); - } - else { - let res = await fetch(msg.url); - if(!res.ok) throw 'Unable to download model' - let teed = res.body.tee(); - tgz = await new Response(teed[0].pipeThrough(new CompressionStream('gzip'))).arrayBuffer(); - mdlFile.write(tgz, { at: 0 }); - mdlFile.truncate(tgz.byteLength); - let newId = txtEncoder.encode(msg.id); - idFile.write(newId, { at: 0 }); - idFile.truncate(newId.length); - tar = await new Response(teed[1]).arrayBuffer(); - } - idFile.close(); - mdlFile.close(); - self.postMessage(tar, [tar]); - } -}).toString(), ')()'], { type: 'text/javascript' })) -let storageWorker = new Worker(storageWorkerURL); let processorURL = URL.createObjectURL(new Blob(['(', (() => { registerProcessor('VoskletTransferer', class extends AudioWorkletProcessor { constructor(opts) { @@ -88,17 +49,23 @@ class CommonModel extends EventTarget { else reject(ev.detail) }, { once: true }) }); - storageWorker.addEventListener('message', tar => { - tar = tar.data; - let tarStart = _malloc(tar.byteLength); - HEAPU8.set(new Uint8Array(tar), tarStart); - mdl.obj = new Module['CommonModel'](objs.length - 1, normalMdl, tarStart, tar.byteLength); - }, { once: true }); - storageWorker.postMessage({ - url: url, - storepath: storepath, - id: id - }); + let cache = await caches.open('Vosklet'); + let res = await cache.match(storepath); + let tar; + if(typeof res == 'undefined' || res.headers.get('id') != id) { + // Caching already handled explicitly + res = await fetch(url, { cache: 'no-store' }); + if (!res.ok) throw 'Unable to fetch model, status: ' + res.status; + await cache.put(storepath, new Response( + res.clone().body.pipeThrough(new CompressionStream('gzip')), + { headers: { 'id': id } } + )); + + } + tar = await new Response(res.body.pipeThrough(new DecompressionStream('gzip'))).arrayBuffer(); + let tarStart = _malloc(tar.byteLength); + HEAPU8.set(new Uint8Array(tar), tarStart); + mdl.obj = new Module['CommonModel'](objs.length - 1, normalMdl, tarStart, tar.byteLength); return result; } } @@ -155,8 +122,6 @@ Module = { 'cleanUp': async () => { for(let obj of objs) await obj.delete(); URL.revokeObjectURL(processorURL); - URL.revokeObjectURL(storageWorkerURL); - storageWorker.terminate(); }, 'createTransferer': async (ctx, bufSize) => { diff --git a/src/make b/src/make index c060418..65e1cb2 100755 --- a/src/make +++ b/src/make @@ -72,15 +72,18 @@ if [ ! -d "$VOSK" ]; then fi cd "$SRC" && - em++ Util.cc CommonModel.cc Recognizer.cc Bindings.cc -O3 -std=c++23 -fno-rtti -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -DMAX_WORKERS="$MAX_THREADS" -sWASMFS -sWASM_BIGINT -sMODULARIZE -sWASM_EXNREF -sTEXTDECODER=2 -sWASM_WORKERS=2 -sEVAL_CTORS=2 -sINITIAL_MEMORY="$INITIAL_MEMORY" -sALLOW_MEMORY_GROWTH -sPOLYFILL=0 -sEXIT_RUNTIME=0 -sINVOKE_RUN=0 -sSUPPORT_LONGJMP=0 -sINCOMING_MODULE_JS_API=wasmMemory,instantiateWasm,wasm -sEXPORT_NAME=loadVosklet -sMALLOC=emmalloc -sENVIRONMENT=web,worker -I. -I"$VOSK"/src -L"$KALDI"/src -l:online2/kaldi-online2.a -l:decoder/kaldi-decoder.a -l:ivector/kaldi-ivector.a -l:gmm/kaldi-gmm.a -l:tree/kaldi-tree.a -l:feat/kaldi-feat.a -l:cudamatrix/kaldi-cudamatrix.a -l:lat/kaldi-lat.a -l:lm/kaldi-lm.a -l:rnnlm/kaldi-rnnlm.a -l:hmm/kaldi-hmm.a -l:nnet3/kaldi-nnet3.a -l:transform/kaldi-transform.a -l:matrix/kaldi-matrix.a -l:fstext/kaldi-fstext.a -l:util/kaldi-util.a -l:base/kaldi-base.a -L"$OPENFST"/lib -l:libfst.a -l:libfstngram.a -L"$CLAPACK_WASM" -l:CBLAS/lib/cblas.a -l:CLAPACK-3.2.1/lapack.a -l:CLAPACK-3.2.1/libcblaswr.a -l:f2c_BLAS-3.8.0/blas.a -l:libf2c/libf2c.a -L"$VOSK"/src -l:vosk.a -lembind -flto -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals --pre-js Wrapper.js --closure 1 -o ../Vosklet.js +FILES="Util.o CommonModel.o Recognizer.o Bindings.o" +COMMON_FLAGS="-O3 -flto -fno-rtti -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals" +COMMON_LD_FLAGS="-sWASMFS -sWASM_BIGINT -sMODULARIZE -sTEXTDECODER=2 -sWASM_WORKERS=2 -sEVAL_CTORS=2 -sINITIAL_MEMORY="$INITIAL_MEMORY" -sALLOW_MEMORY_GROWTH -sPOLYFILL=0 -sEXIT_RUNTIME=0 -sINVOKE_RUN=0 -sSUPPORT_LONGJMP=0 -sINCOMING_MODULE_JS_API=wasmMemory,instantiateWasm,wasm -sEXPORT_NAME=loadVosklet -sMALLOC=emmalloc -sENVIRONMENT=web,worker -L"$KALDI"/src -l:online2/kaldi-online2.a -l:decoder/kaldi-decoder.a -l:ivector/kaldi-ivector.a -l:gmm/kaldi-gmm.a -l:tree/kaldi-tree.a -l:feat/kaldi-feat.a -l:cudamatrix/kaldi-cudamatrix.a -l:lat/kaldi-lat.a -l:lm/kaldi-lm.a -l:rnnlm/kaldi-rnnlm.a -l:hmm/kaldi-hmm.a -l:nnet3/kaldi-nnet3.a -l:transform/kaldi-transform.a -l:matrix/kaldi-matrix.a -l:fstext/kaldi-fstext.a -l:util/kaldi-util.a -l:base/kaldi-base.a -L"$OPENFST"/lib -l:libfst.a -l:libfstngram.a -L"$CLAPACK_WASM" -l:CBLAS/lib/cblas.a -l:CLAPACK-3.2.1/lapack.a -l:CLAPACK-3.2.1/libcblaswr.a -l:f2c_BLAS-3.8.0/blas.a -l:libf2c/libf2c.a -L"$VOSK"/src -l:vosk.a -lembind --closure 1 --pre-js" +em++ ${FILES//.o/.cc} $COMMON_FLAGS -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -DMAX_WORKERS="$MAX_THREADS" -std=c++23 -c -I. -I"$VOSK"/src && + +em++ $FILES $COMMON_FLAGS $COMMON_LD_FLAGS Wrapper.js -o ../Vosklet.js +em++ $FILES $COMMON_FLAGS $COMMON_LD_FLAGS ../Examples/Wrapper.js -o ../Examples/Vosklet.js + +rm -f $FILES cd .. && tr -d '\n' < Vosklet.js | tr -s ' ' > /tmp/hehe && mv /tmp/hehe Vosklet.js && +tr -d '\n' < Examples/Vosklet.js | tr -s ' ' > /tmp/hahe && mv /tmp/hahe Examples/Vosklet.js && +rm -rf /tmp/openfst -cp Vosklet.js Examples/Vosklet.js && -cp Vosklet.wasm Examples/Vosklet.wasm && - -# Can't serve files from raw.githubusercontent with Content-Encoding: gzip header so the browser won't decompress automatically. Manually decompressing instead. -sed -i 's/.pipeThrough(new CompressionStream("gzip"))//;s/\[1\])/[1].pipeThrough(new DecompressionStream("gzip")))/' Examples/Vosklet.js && - -rm -rf /tmp/openfst \ No newline at end of file diff --git a/test b/test index d925795..47a624c 100755 --- a/test +++ b/test @@ -37,13 +37,11 @@ CLAPACK_WASM=$(realpath clapack-wasm) cd src && MODE=0 && # 0: Debug, 1: Optimized release +COMMON_FLAGS="Util.cc CommonModel.cc Recognizer.cc Bindings.cc -std=c++23 -Wall -Wextra -Wpedantic -fno-rtti -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -DMAX_WORKERS="$MAX_THREADS" -sWASMFS -sWASM_BIGINT -sMODULARIZE -sWASM_EXNREF -sTEXTDECODER=2 -sWASM_WORKERS=2 -sEVAL_CTORS=2 -sINITIAL_MEMORY="$INITIAL_MEMORY" -sALLOW_MEMORY_GROWTH -sPOLYFILL=0 -sEXIT_RUNTIME=0 -sINVOKE_RUN=0 -sINCOMING_MODULE_JS_API=wasmMemory,instantiateWasm,wasm -sEXPORT_NAME=loadVosklet -sMALLOC=emmalloc -sENVIRONMENT=web,worker -I. -I"$VOSK"/src -L"$KALDI"/src -l:online2/kaldi-online2.a -l:decoder/kaldi-decoder.a -l:ivector/kaldi-ivector.a -l:gmm/kaldi-gmm.a -l:tree/kaldi-tree.a -l:feat/kaldi-feat.a -l:cudamatrix/kaldi-cudamatrix.a -l:lat/kaldi-lat.a -l:lm/kaldi-lm.a -l:rnnlm/kaldi-rnnlm.a -l:hmm/kaldi-hmm.a -l:nnet3/kaldi-nnet3.a -l:transform/kaldi-transform.a -l:matrix/kaldi-matrix.a -l:fstext/kaldi-fstext.a -l:util/kaldi-util.a -l:base/kaldi-base.a -L"$OPENFST"/lib -l:libfst.a -l:libfstngram.a -L"$CLAPACK_WASM" -l:CBLAS/lib/cblas.a -l:CLAPACK-3.2.1/lapack.a -l:CLAPACK-3.2.1/libcblaswr.a -l:f2c_BLAS-3.8.0/blas.a -l:libf2c/libf2c.a -L"$VOSK"/src -l:vosk.a -lembind -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals --pre-js ../Examples/Wrapper.js -o ../test.js" echo "Mode = $MODE" && if [ "$MODE" = 0 ]; then - em++ Util.cc CommonModel.cc Recognizer.cc Bindings.cc -O0 -std=c++23 -g3 -Wall -Wextra -Wpedantic -fno-rtti -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -DMAX_WORKERS="$MAX_THREADS" -sWASMFS -sWASM_BIGINT -sMODULARIZE -sWASM_EXNREF -sTEXTDECODER=2 -sWASM_WORKERS=2 -sEVAL_CTORS=2 -sSTACK_OVERFLOW_CHECK=2 -sASSERTIONS=2 -sINITIAL_MEMORY="$INITIAL_MEMORY" -sALLOW_MEMORY_GROWTH -sRUNTIME_DEBUG -sPOLYFILL=0 -sEXIT_RUNTIME=0 -sINVOKE_RUN=0 -sDISABLE_EXCEPTION_CATCHING=0 -sINCOMING_MODULE_JS_API=wasmMemory,instantiateWasm,wasm -sEXPORT_NAME=loadVosklet -sMALLOC=emmalloc -sENVIRONMENT=web,worker -I. -I"$VOSK"/src -L"$KALDI"/src -l:online2/kaldi-online2.a -l:decoder/kaldi-decoder.a -l:ivector/kaldi-ivector.a -l:gmm/kaldi-gmm.a -l:tree/kaldi-tree.a -l:feat/kaldi-feat.a -l:cudamatrix/kaldi-cudamatrix.a -l:lat/kaldi-lat.a -l:lm/kaldi-lm.a -l:rnnlm/kaldi-rnnlm.a -l:hmm/kaldi-hmm.a -l:nnet3/kaldi-nnet3.a -l:transform/kaldi-transform.a -l:matrix/kaldi-matrix.a -l:fstext/kaldi-fstext.a -l:util/kaldi-util.a -l:base/kaldi-base.a -L"$OPENFST"/lib -l:libfst.a -l:libfstngram.a -L"$CLAPACK_WASM" -l:CBLAS/lib/cblas.a -l:CLAPACK-3.2.1/lapack.a -l:CLAPACK-3.2.1/libcblaswr.a -l:f2c_BLAS-3.8.0/blas.a -l:libf2c/libf2c.a -L"$VOSK"/src -l:vosk.a -lembind -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals --pre-js Wrapper.js -o ../test.js + em++ $COMMON_FLAGS -O0 -sRUNTIME_DEBUG -sDISABLE_EXCEPTION_CATCHING=0 -sSTACK_OVERFLOW_CHECK=2 -sASSERTIONS=2 -g3 elif [ "$MODE" = 1 ]; then - em++ Util.cc CommonModel.cc Recognizer.cc Bindings.cc -O3 -Wall -Wextra -Wpedantic -std=c++23 -fno-rtti -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 -DMAX_WORKERS="$MAX_THREADS" -sWASMFS -sWASM_BIGINT -sMODULARIZE -sWASM_EXNREF -sTEXTDECODER=2 -sWASM_WORKERS=2 -sEVAL_CTORS=2 -sINITIAL_MEMORY="$INITIAL_MEMORY" -sALLOW_MEMORY_GROWTH -sPOLYFILL=0 -sEXIT_RUNTIME=0 -sINVOKE_RUN=0 -sSUPPORT_LONGJMP=0 -sINCOMING_MODULE_JS_API=wasmMemory,instantiateWasm,wasm -sEXPORT_NAME=loadVosklet -sMALLOC=emmalloc -sENVIRONMENT=web,worker -I. -I"$VOSK"/src -L"$KALDI"/src -l:online2/kaldi-online2.a -l:decoder/kaldi-decoder.a -l:ivector/kaldi-ivector.a -l:gmm/kaldi-gmm.a -l:tree/kaldi-tree.a -l:feat/kaldi-feat.a -l:cudamatrix/kaldi-cudamatrix.a -l:lat/kaldi-lat.a -l:lm/kaldi-lm.a -l:rnnlm/kaldi-rnnlm.a -l:hmm/kaldi-hmm.a -l:nnet3/kaldi-nnet3.a -l:transform/kaldi-transform.a -l:matrix/kaldi-matrix.a -l:fstext/kaldi-fstext.a -l:util/kaldi-util.a -l:base/kaldi-base.a -L"$OPENFST"/lib -l:libfst.a -l:libfstngram.a -L"$CLAPACK_WASM" -l:CBLAS/lib/cblas.a -l:CLAPACK-3.2.1/lapack.a -l:CLAPACK-3.2.1/libcblaswr.a -l:f2c_BLAS-3.8.0/blas.a -l:libf2c/libf2c.a -L"$VOSK"/src -l:vosk.a -lembind -flto -msimd128 -matomics -mbulk-memory -mreference-types -mnontrapping-fptoint -mextended-const -msign-ext -mmutable-globals --pre-js Wrapper.js --closure 1 -o ../test.js && + em++ $COMMON_FLAGS -O3 --closure 1 && tr -d '\n' < ../test.js | tr -s ' ' > /tmp/hehe && mv /tmp/hehe ../test.js -fi -cd .. && -sed -i 's/.pipeThrough(new CompressionStream("gzip"))//;s/\[1\])/[1].pipeThrough(new DecompressionStream("gzip")))/' test.js && -rm -f test.worker.js \ No newline at end of file +fi \ No newline at end of file