@microtronics/studio-cli 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var of=Object.create;var tn=Object.defineProperty;var Ff=Object.getOwnPropertyDescriptor;var vf=Object.getOwnPropertyNames;var lf=Object.getPrototypeOf,cf=Object.prototype.hasOwnProperty;var Ka=(x,A)=>()=>(A||x((A={exports:{}}).exports,A),A.exports),ff=(x,A)=>{for(var e in A)tn(x,e,{get:A[e],enumerable:!0})},za=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of vf(A))!cf.call(x,t)&&t!==e&&tn(x,t,{get:()=>A[t],enumerable:!(r=Ff(A,t))||r.enumerable});return x};var U0=(x,A,e)=>(e=x!=null?of(lf(x)):{},za(A||!x||!x.__esModule?tn(e,"default",{value:x,enumerable:!0}):e,x)),Ef=x=>za(tn({},"__esModule",{value:!0}),x);var Ko=Ka((nm,Jo)=>{"use strict";var gE=Object.create,jt=Object.defineProperty,yE=Object.getOwnPropertyDescriptor,Ro=Object.getOwnPropertyNames,kE=Object.getPrototypeOf,wE=Object.prototype.hasOwnProperty,_E=(x,A,e)=>A in x?jt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,Oo=(x,A)=>function(){return A||(0,x[Ro(x)[0]])((A={exports:{}}).exports,A),A.exports},SE=(x,A)=>{for(var e in A)jt(x,e,{get:A[e],enumerable:!0})},Go=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of Ro(A))!wE.call(x,t)&&t!==e&&jt(x,t,{get:()=>A[t],enumerable:!(r=yE(A,t))||r.enumerable});return x},Uo=(x,A,e)=>(e=x!=null?gE(kE(x)):{},Go(A||!x||!x.__esModule?jt(e,"default",{value:x,enumerable:!0}):e,x)),$E=x=>Go(jt({},"__esModule",{value:!0}),x),bx=(x,A,e)=>_E(x,typeof A!="symbol"?A+"":A,e),TE=Oo({"wasm/bin/pawncc.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],p="./this.program",m=(i,l)=>{throw l};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var w="",j,S;if(E){var P=require("fs");w=__dirname+"/",S=i=>{i=k(i)?new URL(i):i;var l=P.readFileSync(i);return l},j=async(i,l=!0)=>{i=k(i)?new URL(i):i;var B=P.readFileSync(i,l?void 0:"utf8");return B},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(i,l)=>{throw process.exitCode=i,l}}else if(F||v){try{w=new URL(".",r).href}catch{}v&&(S=i=>{var l=new XMLHttpRequest;return l.open("GET",i,!1),l.responseType="arraybuffer",l.send(null),new Uint8Array(l.response)}),j=async i=>{if(k(i))return new Promise((B,D)=>{var h=new XMLHttpRequest;h.open("GET",i,!0),h.responseType="arraybuffer",h.onload=()=>{if(h.status==200||h.status==0&&h.response){B(h.response);return}D(h.status)},h.onerror=D,h.send(null)});var l=await fetch(i,{credentials:"same-origin"});if(l.ok)return l.arrayBuffer();throw new Error(l.status+" : "+l.url)}}var N=console.log.bind(console),O=console.error.bind(console),L,t0=!1,M,k=i=>i.startsWith("file://");class R{}class Q extends R{}function K(i){for(var l=0,B=i.length,D=new Uint8Array(B),h;l<B;++l)h=i.charCodeAt(l),D[l]=~h>>8&h;return D}var J,H,a0=!1,n0=!1;function Z(){var i=I0.buffer;cx=new Int8Array(i),V0=new Int16Array(i),nA=new Uint8Array(i),tt=new Uint16Array(i),G0=new Int32Array(i),l0=new Uint32Array(i),et=new Float32Array(i),rt=new Float64Array(i),W0=new BigInt64Array(i),nt=new BigUint64Array(i)}function s0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)ur(n.preRun.shift());qA(Yx)}function U(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),nx.init(),Qe.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function c0(){y(),o.quit(),nx.shutdown(),n0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)dr(n.postRun.shift());qA(NA)}function d0(i){n.onAbort?.(i),i=`Aborted(${i})`,O(i),t0=!0,i+=". Build with -sASSERTIONS for more info.";var l=new WebAssembly.RuntimeError(i);throw H?.(l),l}var $0;function L0(){return K(`\0asm\0\0\0\x897\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\`\0\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F\x7F~~~\`\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`~\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\`\x7F~\0\`\x7F|\`\x7F~~\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F~\x7F\x7F\x7F~\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\`~\x7F\x7F\0\`\x7F\x7F~\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\x7F\x7F\x7F\`\x7F\x7F\x7F|\x7F\`\x7F\x7F|\x7F\`\x7F\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F~\`\v\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F~\`\x7F~\x7F\x7F\x7F\x7F\x7F\` \x7F~\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~~\x7F~\`\x7F~~\0\`~\x7F\0\`\x7F~\x7F\`\x7F||\`||\`|\x7F\`\x7F~~~\0\`|\x7F|\`~\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\`~~|\xD0env\binvoke_v\0env
1
+ "use strict";var vf=Object.create;var nn=Object.defineProperty;var lf=Object.getOwnPropertyDescriptor;var cf=Object.getOwnPropertyNames;var ff=Object.getPrototypeOf,Ef=Object.prototype.hasOwnProperty;var Wa=(x,A)=>()=>(A||x((A={exports:{}}).exports,A),A.exports),Bf=(x,A)=>{for(var e in A)nn(x,e,{get:A[e],enumerable:!0})},Xa=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of cf(A))!Ef.call(x,t)&&t!==e&&nn(x,t,{get:()=>A[t],enumerable:!(r=lf(A,t))||r.enumerable});return x};var U0=(x,A,e)=>(e=x!=null?vf(ff(x)):{},Xa(A||!x||!x.__esModule?nn(e,"default",{value:x,enumerable:!0}):e,x)),Cf=x=>Xa(nn({},"__esModule",{value:!0}),x);var Wo=Wa((im,Vo)=>{"use strict";var kE=Object.create,jt=Object.defineProperty,wE=Object.getOwnPropertyDescriptor,Uo=Object.getOwnPropertyNames,_E=Object.getPrototypeOf,SE=Object.prototype.hasOwnProperty,$E=(x,A,e)=>A in x?jt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,Ho=(x,A)=>function(){return A||(0,x[Uo(x)[0]])((A={exports:{}}).exports,A),A.exports},TE=(x,A)=>{for(var e in A)jt(x,e,{get:A[e],enumerable:!0})},Jo=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of Uo(A))!SE.call(x,t)&&t!==e&&jt(x,t,{get:()=>A[t],enumerable:!(r=wE(A,t))||r.enumerable});return x},Ko=(x,A,e)=>(e=x!=null?kE(_E(x)):{},Jo(A||!x||!x.__esModule?jt(e,"default",{value:x,enumerable:!0}):e,x)),PE=x=>Jo(jt({},"__esModule",{value:!0}),x),bx=(x,A,e)=>$E(x,typeof A!="symbol"?A+"":A,e),qE=Ho({"wasm/bin/pawncc.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var i,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],D="./this.program",m=(s,l)=>{throw l};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var w="",j,S;if(E){var P=require("fs");w=__dirname+"/",S=s=>{s=k(s)?new URL(s):s;var l=P.readFileSync(s);return l},j=async(s,l=!0)=>{s=k(s)?new URL(s):s;var B=P.readFileSync(s,l?void 0:"utf8");return B},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(s,l)=>{throw process.exitCode=s,l}}else if(F||v){try{w=new URL(".",r).href}catch{}v&&(S=s=>{var l=new XMLHttpRequest;return l.open("GET",s,!1),l.responseType="arraybuffer",l.send(null),new Uint8Array(l.response)}),j=async s=>{if(k(s))return new Promise((B,p)=>{var h=new XMLHttpRequest;h.open("GET",s,!0),h.responseType="arraybuffer",h.onload=()=>{if(h.status==200||h.status==0&&h.response){B(h.response);return}p(h.status)},h.onerror=p,h.send(null)});var l=await fetch(s,{credentials:"same-origin"});if(l.ok)return l.arrayBuffer();throw new Error(l.status+" : "+l.url)}}var N=console.log.bind(console),R=console.error.bind(console),O,e0=!1,I,k=s=>s.startsWith("file://");class L{}class Z extends L{}function W(s){for(var l=0,B=s.length,p=new Uint8Array(B),h;l<B;++l)h=s.charCodeAt(l),p[l]=~h>>8&h;return p}var U,J,a0=!1,i0=!1;function Q(){var s=M0.buffer;cx=new Int8Array(s),V0=new Int16Array(s),iA=new Uint8Array(s),tt=new Uint16Array(s),G0=new Int32Array(s),c0=new Uint32Array(s),et=new Float32Array(s),rt=new Float64Array(s),W0=new BigInt64Array(s),nt=new BigUint64Array(s)}function s0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)Dr(n.preRun.shift());NA(Zx)}function H(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),nx.init(),Ze.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function l0(){y(),o.quit(),nx.shutdown(),i0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)ur(n.postRun.shift());NA(IA)}function d0(s){n.onAbort?.(s),s=`Aborted(${s})`,R(s),e0=!0,s+=". Build with -sASSERTIONS for more info.";var l=new WebAssembly.RuntimeError(s);throw J?.(l),l}var $0;function q0(){return W(`\0asm\0\0\0\x897\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\`\0\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F\x7F~~~\`\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`~\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\`\x7F~\0\`\x7F|\`\x7F~~\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F\x7F\x7F\`\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F~\x7F\x7F\x7F~\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\`~\x7F\x7F\0\`\x7F\x7F~\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F~\x7F\x7F\x7F\`\x7F\x7F\x7F|\x7F\`\x7F\x7F|\x7F\`\x7F\x7F~\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~\`\x7F\x7F\x7F\x7F\x7F\x7F~\`\v\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F~\`\x7F~\x7F\x7F\x7F\x7F\x7F\` \x7F~\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~~\x7F~\`\x7F~~\0\`~\x7F\0\`\x7F~\x7F\`\x7F||\`||\`|\x7F\`\x7F~~~\0\`|\x7F|\`~\x7F\x7F\`~~~~\x7F\`~~~\x7F\`\x7F|\0\`~~|\xD0env\binvoke_v\0env
2
2
  invoke_vii\0\x07env invoke_ii\0env
3
3
  invoke_iii\0env\binvoke_i\0\0env\vinvoke_iiii\0\benv\r__assert_fail\0 env\finvoke_viiii\0env\finvoke_iiiii\0\renv\rinvoke_viiiii\0env\finvoke_iijii\0env invoke_vi\0env\vinvoke_viii\0 env\vinvoke_iiid\0 env\rinvoke_iiiiii\0env__syscall_faccessat\0\benv__syscall_openat\0\benv__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0\bwasi_snapshot_preview1\x07fd_read\0\bwasi_snapshot_preview1\bfd_close\0\0env__syscall_getcwd\0wasi_snapshot_preview1\x07fd_seek\0env__syscall_unlinkat\0env__syscall_rmdir\0\0env__syscall_renameat\0\bwasi_snapshot_preview1clock_time_get\0env__syscall_readlinkat\0\benvemscripten_resize_heap\0\0env_emscripten_throw_longjmp\0\xAA\xA8\x07!
4
4
 
@@ -1158,8 +1158,8 @@ S\0\0\xCD\0\0Q\0\0\xCD*\0\0\x97*\0\0>S\0\0A!\0\0\f\0\0\x90\0\0\xC6\0\0l\0\
1158
1158
  \0\0\xC0\v\0\0\xC0\f\0\0\xC0\r\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\x1B\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\xC0\0\0\0\xB3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\0\0\xC3\x07\0\0\xC3\b\0\0\xC3 \0\0\xC3
1159
1159
  \0\0\xC3\v\0\0\xC3\f\0\0\xC3\r\0\0\xD3\0\0\xC3\0\0\xC3\0\0\f\xBB\0\f\xC3\0\f\xC3\0\f\xC3\0\f\xDB\0A\xC0\xF9\v\xE1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0D\0\0\xFAC\0\0 D\0\0\0D\0\0\xFDC\0\0\xF6C\0\0\xEEC\0\0\xEFC\0\0D\0\0\xEBC\0\0\xE8C\0\0z\0\0\x87Y\0\0\xF3C\0\0\fD\0\0\xF7C\0\0\xF0C\0\0D\0\0\xBCC\0\0\xBDC\0\0MO\0\0\xFDN\0\0\xBCN\0\0\xBDN\0\0,D\0\0\xE3\0\0h&\0\0d-\0\0)\0\0\xA2,\0\0d\0\01\0\0>!\0\0G-\0\0_\0\0y\0\0K0\0\0\v!\0\0*\0\0\x84,\0\0\x81\0\0+\0\02\0\0g!\0\0\xF7)\0\0; \0\0-\0\0\xF01\0\0&\0\0\xAD(\0\0\xF1)\0\0\x97.\0\0\xE2\0\0\xB9-\0\0F-\0\0*\0\0
1160
1160
  *\0\0\xDC\0\x004\0\0\xE7.\0\0*\0\x006*\0\0.*\0\0\x9D/\0\0\xB3-\0\0\x8A3\0\0\x87/\0\0'*\0\x009)\0\0!D\0\0\0O\0\0!D\0\0\xB63\0\0\xC63\0\0\x983\0\0\xA53\0\0\xD73\0\0\xAD3\0\0\xAD3\0\0\0\0\0\0/\0A\xA0\xFE\vy\0\0\0\\\\\0\0\xF4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\b\0\0\0\0\0\0\0\0\0\xA0\x97\0\0\xA0\x9C\0\0\0\0\0\0\0\0\0 \x9C\0\0 \x9D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xA0\x9D\0\0\0\0\0\0\0\0\0\x07\0\0\0\0 \0\0\0\0\0\0\0A\xA4\xFF\v\x9F\0A\xBC\xFF\v\v\x9D\0\0\0\x9C\0\0\0("\0A\xD4\xFF\v\0A\xE4\xFF\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA8\x80\v \x98\xBF\0\0\0\0\0\0\0A\xBC\x80\v\xA0\0A\xD4\x80\v\x9D\0\0\0\xA1\0\0\x008"\0\0\0A\xEC\x80\v\0A\xFC\x80\v\xFF\xFF\xFF\xFF
1161
- \0A\xC0\x81\v\v0\xC0\0\0\x80!\0\`(`)}function Ex(i){return i}async function Xx(i){return i}async function TA(i,l){try{var B=await Xx(i),D=await WebAssembly.instantiate(B,l);return D}catch(h){O(`failed to asynchronously prepare wasm: ${h}`),d0(h)}}async function PA(i,l,B){return TA(l,B)}function lx(){var i={env:sx,wasi_snapshot_preview1:sx};return i}async function tx(){function i(_,I){return Qe=_.exports,m0(Qe),Z(),Qe}function l(_){return i(_.instance)}var B=lx();if(n.instantiateWasm)return new Promise((_,I)=>{n.instantiateWasm(B,(V,F0)=>{_(i(V,F0))})});$0??($0=L0());var D=await PA(L,$0,B),h=l(D);return h}class tA{constructor(l){bx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${l})`,this.status=l}}var V0,G0,W0,cx,et,rt,tt,l0,nt,nA,qA=i=>{for(;i.length>0;)i.shift()(n)},NA=[],dr=i=>NA.push(i),Yx=[],ur=i=>Yx.push(i),je=!1,ox=i=>G(i),y0=()=>o0(),sA=globalThis.TextDecoder&&new TextDecoder,gx=(i,l,B,D)=>{var h=l+B;if(D)return h;for(;i[l]&&!(l>=h);)++l;return l},DA=(i,l=0,B,D)=>{var h=gx(i,l,B,D);if(h-l>16&&i.buffer&&sA)return sA.decode(i.subarray(l,h));for(var _="";l<h;){var I=i[l++];if(!(I&128)){_+=String.fromCharCode(I);continue}var V=i[l++]&63;if((I&224)==192){_+=String.fromCharCode((I&31)<<6|V);continue}var F0=i[l++]&63;if((I&240)==224?I=(I&15)<<12|V<<6|F0:I=(I&7)<<18|V<<12|F0<<6|i[l++]&63,I<65536)_+=String.fromCharCode(I);else{var _0=I-65536;_+=String.fromCharCode(55296|_0>>10,56320|_0&1023)}}return _},iA=(i,l,B)=>i?DA(nA,i,l,B):"",IA=(i,l,B,D)=>d0(`Assertion failed: ${iA(i)}, at: `+[l?iA(l):"unknown filename",B,D?iA(D):"unknown function"]),f0={isAbs:i=>i.charAt(0)==="/",splitPath:i=>{var l=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return l.exec(i).slice(1)},normalizeArray:(i,l)=>{for(var B=0,D=i.length-1;D>=0;D--){var h=i[D];h==="."?i.splice(D,1):h===".."?(i.splice(D,1),B++):B&&(i.splice(D,1),B--)}if(l)for(;B;B--)i.unshift("..");return i},normalize:i=>{var l=f0.isAbs(i),B=i.slice(-1)==="/";return i=f0.normalizeArray(i.split("/").filter(D=>!!D),!l).join("/"),!i&&!l&&(i="."),i&&B&&(i+="/"),(l?"/":"")+i},dirname:i=>{var l=f0.splitPath(i),B=l[0],D=l[1];return!B&&!D?".":(D&&(D=D.slice(0,-1)),B+D)},basename:i=>i&&i.match(/([^\/]+|\/)\/*$/)[1],join:(...i)=>f0.normalize(i.join("/")),join2:(i,l)=>f0.normalize(i+"/"+l)},st=()=>{if(E){var i=require("crypto");return l=>i.randomFillSync(l)}return l=>(crypto.getRandomValues(l),0)},He=i=>(He=st())(i),dx={resolve:(...i)=>{for(var l="",B=!1,D=i.length-1;D>=-1&&!B;D--){var h=D>=0?i[D]:o.cwd();if(typeof h!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!h)return"";l=h+"/"+l,B=f0.isAbs(h)}return l=f0.normalizeArray(l.split("/").filter(_=>!!_),!B).join("/"),(B?"/":"")+l||"."},relative:(i,l)=>{i=dx.resolve(i).slice(1),l=dx.resolve(l).slice(1);function B(_0){for(var xx=0;xx<_0.length&&_0[xx]==="";xx++);for(var R0=_0.length-1;R0>=0&&_0[R0]==="";R0--);return xx>R0?[]:_0.slice(xx,R0-xx+1)}for(var D=B(i.split("/")),h=B(l.split("/")),_=Math.min(D.length,h.length),I=_,V=0;V<_;V++)if(D[V]!==h[V]){I=V;break}for(var F0=[],V=I;V<D.length;V++)F0.push("..");return F0=F0.concat(h.slice(I)),F0.join("/")}},Hx=[],Ae=i=>{for(var l=0,B=0;B<i.length;++B){var D=i.charCodeAt(B);D<=127?l++:D<=2047?l+=2:D>=55296&&D<=57343?(l+=4,++B):l+=3}return l},Je=(i,l,B,D)=>{if(!(D>0))return 0;for(var h=B,_=B+D-1,I=0;I<i.length;++I){var V=i.codePointAt(I);if(V<=127){if(B>=_)break;l[B++]=V}else if(V<=2047){if(B+1>=_)break;l[B++]=192|V>>6,l[B++]=128|V&63}else if(V<=65535){if(B+2>=_)break;l[B++]=224|V>>12,l[B++]=128|V>>6&63,l[B++]=128|V&63}else{if(B+3>=_)break;l[B++]=240|V>>18,l[B++]=128|V>>12&63,l[B++]=128|V>>6&63,l[B++]=128|V&63,I++}}return l[B]=0,B-h},ee=(i,l,B)=>{var D=B>0?B:Ae(i)+1,h=new Array(D),_=Je(i,h,0,h.length);return l&&(h.length=_),h},it=()=>{if(!Hx.length){var i=null;if(E){var l=256,B=Buffer.alloc(l),D=0,h=process.stdin.fd;try{D=P.readSync(h,B,0,l)}catch(_){if(_.toString().includes("EOF"))D=0;else throw _}D>0&&(i=B.slice(0,D).toString("utf-8"))}else globalThis.window?.prompt&&(i=window.prompt("Input: "),i!==null&&(i+=`
1162
- `));if(!i)return null;Hx=ee(i,!0)}return Hx.shift()},nx={ttys:[],init(){},shutdown(){},register(i,l){nx.ttys[i]={input:[],output:[],ops:l},o.registerDevice(i,nx.stream_ops)},stream_ops:{open(i){var l=nx.ttys[i.node.rdev];if(!l)throw new o.ErrnoError(43);i.tty=l,i.seekable=!1},close(i){i.tty.ops.fsync(i.tty)},fsync(i){i.tty.ops.fsync(i.tty)},read(i,l,B,D,h){if(!i.tty||!i.tty.ops.get_char)throw new o.ErrnoError(60);for(var _=0,I=0;I<D;I++){var V;try{V=i.tty.ops.get_char(i.tty)}catch{throw new o.ErrnoError(29)}if(V===void 0&&_===0)throw new o.ErrnoError(6);if(V==null)break;_++,l[B+I]=V}return _&&(i.node.atime=Date.now()),_},write(i,l,B,D,h){if(!i.tty||!i.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var _=0;_<D;_++)i.tty.ops.put_char(i.tty,l[B+_])}catch{throw new o.ErrnoError(29)}return D&&(i.node.mtime=i.node.ctime=Date.now()),_}},default_tty_ops:{get_char(i){return it()},put_char(i,l){l===null||l===10?(N(DA(i.output)),i.output=[]):l!=0&&i.output.push(l)},fsync(i){i.output?.length>0&&(N(DA(i.output)),i.output=[])},ioctl_tcgets(i){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(i,l,B){return 0},ioctl_tiocgwinsz(i){return[24,80]}},default_tty1_ops:{put_char(i,l){l===null||l===10?(O(DA(i.output)),i.output=[]):l!=0&&i.output.push(l)},fsync(i){i.output?.length>0&&(O(DA(i.output)),i.output=[])}}},MA=i=>{d0()},i0={ops_table:null,mount(i){return i0.createNode(null,"/",16895,0)},createNode(i,l,B,D){if(o.isBlkdev(B)||o.isFIFO(B))throw new o.ErrnoError(63);i0.ops_table||(i0.ops_table={dir:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,lookup:i0.node_ops.lookup,mknod:i0.node_ops.mknod,rename:i0.node_ops.rename,unlink:i0.node_ops.unlink,rmdir:i0.node_ops.rmdir,readdir:i0.node_ops.readdir,symlink:i0.node_ops.symlink},stream:{llseek:i0.stream_ops.llseek}},file:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:{llseek:i0.stream_ops.llseek,read:i0.stream_ops.read,write:i0.stream_ops.write,mmap:i0.stream_ops.mmap,msync:i0.stream_ops.msync}},link:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,readlink:i0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:o.chrdev_stream_ops}});var h=o.createNode(i,l,B,D);return o.isDir(h.mode)?(h.node_ops=i0.ops_table.dir.node,h.stream_ops=i0.ops_table.dir.stream,h.contents={}):o.isFile(h.mode)?(h.node_ops=i0.ops_table.file.node,h.stream_ops=i0.ops_table.file.stream,h.usedBytes=0,h.contents=i0.emptyFileContents??(i0.emptyFileContents=new Uint8Array(0))):o.isLink(h.mode)?(h.node_ops=i0.ops_table.link.node,h.stream_ops=i0.ops_table.link.stream):o.isChrdev(h.mode)&&(h.node_ops=i0.ops_table.chrdev.node,h.stream_ops=i0.ops_table.chrdev.stream),h.atime=h.mtime=h.ctime=Date.now(),i&&(i.contents[l]=h,i.atime=i.mtime=i.ctime=h.atime),h},getFileDataAsTypedArray(i){return i.contents.subarray(0,i.usedBytes)},expandFileStorage(i,l){var B=i.contents.length;if(!(B>=l)){var D=1024*1024;l=Math.max(l,B*(B<D?2:1.125)>>>0),B&&(l=Math.max(l,256));var h=i0.getFileDataAsTypedArray(i);i.contents=new Uint8Array(l),i.contents.set(h)}},resizeFileStorage(i,l){if(i.usedBytes!=l){var B=i.contents;i.contents=new Uint8Array(l),i.contents.set(B.subarray(0,Math.min(l,i.usedBytes))),i.usedBytes=l}},node_ops:{getattr(i){var l={};return l.dev=o.isChrdev(i.mode)?i.id:1,l.ino=i.id,l.mode=i.mode,l.nlink=1,l.uid=0,l.gid=0,l.rdev=i.rdev,o.isDir(i.mode)?l.size=4096:o.isFile(i.mode)?l.size=i.usedBytes:o.isLink(i.mode)?l.size=i.link.length:l.size=0,l.atime=new Date(i.atime),l.mtime=new Date(i.mtime),l.ctime=new Date(i.ctime),l.blksize=4096,l.blocks=Math.ceil(l.size/l.blksize),l},setattr(i,l){for(let B of["mode","atime","mtime","ctime"])l[B]!=null&&(i[B]=l[B]);l.size!==void 0&&i0.resizeFileStorage(i,l.size)},lookup(i,l){throw i0.doesNotExistError||(i0.doesNotExistError=new o.ErrnoError(44),i0.doesNotExistError.stack="<generic error, no stack>"),i0.doesNotExistError},mknod(i,l,B,D){return i0.createNode(i,l,B,D)},rename(i,l,B){var D;try{D=o.lookupNode(l,B)}catch{}if(D){if(o.isDir(i.mode))for(var h in D.contents)throw new o.ErrnoError(55);o.hashRemoveNode(D)}delete i.parent.contents[i.name],l.contents[B]=i,i.name=B,l.ctime=l.mtime=i.parent.ctime=i.parent.mtime=Date.now()},unlink(i,l){delete i.contents[l],i.ctime=i.mtime=Date.now()},rmdir(i,l){var B=o.lookupNode(i,l);for(var D in B.contents)throw new o.ErrnoError(55);delete i.contents[l],i.ctime=i.mtime=Date.now()},readdir(i){return[".","..",...Object.keys(i.contents)]},symlink(i,l,B){var D=i0.createNode(i,l,41471,0);return D.link=B,D},readlink(i){if(!o.isLink(i.mode))throw new o.ErrnoError(28);return i.link}},stream_ops:{read(i,l,B,D,h){var _=i.node.contents;if(h>=i.node.usedBytes)return 0;var I=Math.min(i.node.usedBytes-h,D);return l.set(_.subarray(h,h+I),B),I},write(i,l,B,D,h,_){if(l.buffer===cx.buffer&&(_=!1),!D)return 0;var I=i.node;return I.mtime=I.ctime=Date.now(),_?(I.contents=l.subarray(B,B+D),I.usedBytes=D):I.usedBytes===0&&h===0?(I.contents=l.slice(B,B+D),I.usedBytes=D):(i0.expandFileStorage(I,h+D),I.contents.set(l.subarray(B,B+D),h),I.usedBytes=Math.max(I.usedBytes,h+D)),D},llseek(i,l,B){var D=l;if(B===1?D+=i.position:B===2&&o.isFile(i.node.mode)&&(D+=i.node.usedBytes),D<0)throw new o.ErrnoError(28);return D},mmap(i,l,B,D,h){if(!o.isFile(i.node.mode))throw new o.ErrnoError(43);var _,I,V=i.node.contents;if(!(h&2)&&V.buffer===cx.buffer)I=!1,_=V.byteOffset;else{if(I=!0,_=MA(l),!_)throw new o.ErrnoError(48);V&&((B>0||B+l<V.length)&&(V.subarray?V=V.subarray(B,B+l):V=Array.prototype.slice.call(V,B,B+l)),cx.set(V,_))}return{ptr:_,allocated:I}},msync(i,l,B,D,h){return i0.stream_ops.write(i,l,0,D,B,!1),0}}},LA=i=>{if(typeof i!="string")return i;var l={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},B=l[i];if(typeof B>"u")throw new Error(`Unknown file open mode: ${i}`);return B},Qx=i=>(typeof i=="string"&&(i=ee(i,!0)),i.subarray||(i=new Uint8Array(i)),i),aA=(i,l)=>{var B=0;return i&&(B|=365),l&&(B|=146),B},q0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},k0={mount(i){return k0.createNode(null,"/",i.opts.fs.lstat(i.opts.root).mode,0)},createNode(i,l,B,D){if(!o.isDir(B)&&!o.isFile(B)&&!o.isLink(B))throw new o.ErrnoError(q0.EINVAL);var h=o.createNode(i,l,B);return h.node_ops=k0.node_ops,h.stream_ops=k0.stream_ops,h},realPath(i){for(var l=[];i.parent!==i;)l.push(i.name),i=i.parent;return l.push(i.mount.opts.root),l.reverse(),f0.join(...l)},node_ops:{getattr(i){var l=k0.realPath(i),B;try{B=i.mount.opts.fs.lstat(l)}catch(D){throw D.code?new o.ErrnoError(q0[D.code]):D}return{dev:B.dev,ino:B.ino,mode:B.mode,nlink:B.nlink,uid:B.uid,gid:B.gid,rdev:B.rdev,size:B.size,atime:B.atime,mtime:B.mtime,ctime:B.ctime,blksize:B.blksize,blocks:B.blocks}},setattr(i,l){var B=k0.realPath(i);try{if(l.mode!==void 0&&(i.mount.opts.fs.chmod(B,l.mode),i.mode=l.mode),l.atime||l.mtime){var D=new Date(l.atime||l.mtime),h=new Date(l.mtime||l.atime);i.mount.opts.fs.utime(B,D,h)}l.size!==void 0&&i.mount.opts.fs.truncate(B,l.size)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},lookup(i,l){try{var B=f0.join2(k0.realPath(i),l),D=i.mount.opts.fs.lstat(B).mode,h=k0.createNode(i,l,D);return h}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},mknod(i,l,B,D){var h=k0.createNode(i,l,B,D),_=k0.realPath(h);try{o.isDir(h.mode)?h.mount.opts.fs.mkdir(_,h.mode):h.mount.opts.fs.writeFile(_,"",{mode:h.mode})}catch(I){throw I.code?new o.ErrnoError(q0[I.code]):I}return h},rename(i,l,B){var D=k0.realPath(i),h=f0.join2(k0.realPath(l),B);try{i.mount.opts.fs.rename(D,h),i.name=B}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},unlink(i,l){var B=f0.join2(k0.realPath(i),l);try{i.mount.opts.fs.unlink(B)}catch(D){throw D.code?new o.ErrnoError(q0[D.code]):D}},rmdir(i,l){var B=f0.join2(k0.realPath(i),l);try{i.mount.opts.fs.rmdir(B)}catch(D){throw D.code?new o.ErrnoError(q0[D.code]):D}},readdir(i){var l=k0.realPath(i);try{return i.mount.opts.fs.readdir(l)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}},symlink(i,l,B){var D=f0.join2(k0.realPath(i),l);try{i.mount.opts.fs.symlink(B,D)}catch(h){throw h.code?new o.ErrnoError(q0[h.code]):h}},readlink(i){var l=k0.realPath(i);try{return i.mount.opts.fs.readlink(l)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}}},stream_ops:{open(i){var l=k0.realPath(i.node);try{i.nfd=i.node.mount.opts.fs.open(l,i.flags)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}},close(i){try{i.node.mount.opts.fs.close(i.nfd)}catch(l){throw l.code?new o.ErrnoError(q0[l.code]):l}},read(i,l,B,D,h){try{return i.node.mount.opts.fs.read(i.nfd,l,B,D,h)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},write(i,l,B,D,h){try{return i.node.mount.opts.fs.write(i.nfd,l,B,D,h)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},llseek(i,l,B){var D=l;if(B===1)D+=i.position;else if(B===2&&o.isFile(i.node.mode))try{var h=i.node.node_ops.getattr(i.node);D+=h.size}catch(_){throw new o.ErrnoError(q0[_.code])}if(D<0)throw new o.ErrnoError(q0.EINVAL);return D}}},pA=async i=>{var l=await j(i);return new Uint8Array(l)},Ke=(...i)=>o.createDataFile(...i),ux=i=>i,Bx=0,b0=null,ze=i=>{if(Bx--,n.monitorRunDependencies?.(Bx),Bx==0&&b0){var l=b0;b0=null,l()}},qx=i=>{Bx++,n.monitorRunDependencies?.(Bx)},ge=[],bA=async(i,l)=>{typeof Browser<"u"&&Browser.init();for(var B of ge)if(B.canHandle(l))return B.handle(i,l);return i},RA=async(i,l,B,D,h,_,I,V)=>{var F0=l?dx.resolve(f0.join2(i,l)):i,_0=ux(`cp ${F0}`);qx(_0);try{var xx=B;typeof B=="string"&&(xx=await pA(B)),xx=await bA(xx,F0),V?.(),_||Ke(i,l,xx,D,h,I)}finally{ze(_0)}},at=(i,l,B,D,h,_,I,V,F0,_0)=>{RA(i,l,B,D,h,V,F0,_0).then(_).catch(I)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(i){bx(this,"name","ErrnoError"),this.errno=i}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(i){this.node=i}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(i){this.shared.flags=i}get position(){return this.shared.position}set position(i){this.shared.position=i}},FSNode:class{constructor(i,l,B,D){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),i||(i=this),this.parent=i,this.mount=i.mount,this.id=o.nextInode++,this.name=l,this.mode=B,this.rdev=D,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(i){i?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(i){i?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(i,l={}){if(!i)throw new o.ErrnoError(44);l.follow_mount??(l.follow_mount=!0),f0.isAbs(i)||(i=o.cwd()+"/"+i);x:for(var B=0;B<40;B++){for(var D=i.split("/").filter(_0=>!!_0),h=o.root,_="/",I=0;I<D.length;I++){var V=I===D.length-1;if(V&&l.parent)break;if(D[I]!=="."){if(D[I]===".."){if(_=f0.dirname(_),o.isRoot(h)){i=_+"/"+D.slice(I+1).join("/"),B--;continue x}else h=h.parent;continue}_=f0.join2(_,D[I]);try{h=o.lookupNode(h,D[I])}catch(_0){if(_0?.errno===44&&V&&l.noent_okay)return{path:_};throw _0}if(o.isMountpoint(h)&&(!V||l.follow_mount)&&(h=h.mounted.root),o.isLink(h.mode)&&(!V||l.follow)){if(!h.node_ops.readlink)throw new o.ErrnoError(52);var F0=h.node_ops.readlink(h);f0.isAbs(F0)||(F0=f0.dirname(_)+"/"+F0),i=F0+"/"+D.slice(I+1).join("/");continue x}}}return{path:_,node:h}}throw new o.ErrnoError(32)},getPath(i){for(var l;;){if(o.isRoot(i)){var B=i.mount.mountpoint;return l?B[B.length-1]!=="/"?`${B}/${l}`:B+l:B}l=l?`${i.name}/${l}`:i.name,i=i.parent}},hashName(i,l){for(var B=0,D=0;D<l.length;D++)B=(B<<5)-B+l.charCodeAt(D)|0;return(i+B>>>0)%o.nameTable.length},hashAddNode(i){var l=o.hashName(i.parent.id,i.name);i.name_next=o.nameTable[l],o.nameTable[l]=i},hashRemoveNode(i){var l=o.hashName(i.parent.id,i.name);if(o.nameTable[l]===i)o.nameTable[l]=i.name_next;else for(var B=o.nameTable[l];B;){if(B.name_next===i){B.name_next=i.name_next;break}B=B.name_next}},lookupNode(i,l){var B=o.mayLookup(i);if(B)throw new o.ErrnoError(B);for(var D=o.hashName(i.id,l),h=o.nameTable[D];h;h=h.name_next){var _=h.name;if(h.parent.id===i.id&&_===l)return h}return o.lookup(i,l)},createNode(i,l,B,D){var h=new o.FSNode(i,l,B,D);return o.hashAddNode(h),h},destroyNode(i){o.hashRemoveNode(i)},isRoot(i){return i===i.parent},isMountpoint(i){return!!i.mounted},isFile(i){return(i&61440)===32768},isDir(i){return(i&61440)===16384},isLink(i){return(i&61440)===40960},isChrdev(i){return(i&61440)===8192},isBlkdev(i){return(i&61440)===24576},isFIFO(i){return(i&61440)===4096},isSocket(i){return(i&49152)===49152},flagsToPermissionString(i){var l=["r","w","rw"][i&3];return i&512&&(l+="w"),l},nodePermissions(i,l){return o.ignorePermissions?0:l.includes("r")&&!(i.mode&292)||l.includes("w")&&!(i.mode&146)||l.includes("x")&&!(i.mode&73)?2:0},mayLookup(i){if(!o.isDir(i.mode))return 54;var l=o.nodePermissions(i,"x");return l||(i.node_ops.lookup?0:2)},mayCreate(i,l){if(!o.isDir(i.mode))return 54;try{var B=o.lookupNode(i,l);return 20}catch{}return o.nodePermissions(i,"wx")},mayDelete(i,l,B){var D;try{D=o.lookupNode(i,l)}catch(_){return _.errno}var h=o.nodePermissions(i,"wx");if(h)return h;if(B){if(!o.isDir(D.mode))return 54;if(o.isRoot(D)||o.getPath(D)===o.cwd())return 10}else if(o.isDir(D.mode))return 31;return 0},mayOpen(i,l){if(!i)return 44;if(o.isLink(i.mode))return 32;var B=o.flagsToPermissionString(l);return o.isDir(i.mode)&&(B!=="r"||l&576)?31:o.nodePermissions(i,B)},checkOpExists(i,l){if(!i)throw new o.ErrnoError(l);return i},MAX_OPEN_FDS:4096,nextfd(){for(var i=0;i<=o.MAX_OPEN_FDS;i++)if(!o.streams[i])return i;throw new o.ErrnoError(33)},getStreamChecked(i){var l=o.getStream(i);if(!l)throw new o.ErrnoError(8);return l},getStream:i=>o.streams[i],createStream(i,l=-1){return i=Object.assign(new o.FSStream,i),l==-1&&(l=o.nextfd()),i.fd=l,o.streams[l]=i,i},closeStream(i){o.streams[i]=null},dupStream(i,l=-1){var B=o.createStream(i,l);return B.stream_ops?.dup?.(B),B},doSetAttr(i,l,B){var D=i?.stream_ops.setattr,h=D?i:l;D??(D=l.node_ops.setattr),o.checkOpExists(D,63);try{D(h,B)}catch(_){throw _ instanceof RangeError?new o.ErrnoError(22):_}},chrdev_stream_ops:{open(i){var l=o.getDevice(i.node.rdev);i.stream_ops=l.stream_ops,i.stream_ops.open?.(i)},llseek(){throw new o.ErrnoError(70)}},major:i=>i>>8,minor:i=>i&255,makedev:(i,l)=>i<<8|l,registerDevice(i,l){o.devices[i]={stream_ops:l}},getDevice:i=>o.devices[i],getMounts(i){for(var l=[],B=[i];B.length;){var D=B.pop();l.push(D),B.push(...D.mounts)}return l},syncfs(i,l){typeof i=="function"&&(l=i,i=!1),o.syncFSRequests++,o.syncFSRequests>1&&O(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var B=o.getMounts(o.root.mount),D=0;function h(V){return o.syncFSRequests--,l(V)}function _(V){if(V)return _.errored?void 0:(_.errored=!0,h(V));++D>=B.length&&h(null)}for(var I of B)I.type.syncfs?I.type.syncfs(I,i,_):_(null)},mount(i,l,B){var D=B==="/",h=!B,_;if(D&&o.root)throw new o.ErrnoError(10);if(!D&&!h){var I=o.lookupPath(B,{follow_mount:!1});if(B=I.path,_=I.node,o.isMountpoint(_))throw new o.ErrnoError(10);if(!o.isDir(_.mode))throw new o.ErrnoError(54)}var V={type:i,opts:l,mountpoint:B,mounts:[]},F0=i.mount(V);return F0.mount=V,V.root=F0,D?o.root=F0:_&&(_.mounted=V,_.mount&&_.mount.mounts.push(V)),F0},unmount(i){var l=o.lookupPath(i,{follow_mount:!1});if(!o.isMountpoint(l.node))throw new o.ErrnoError(28);var B=l.node,D=B.mounted,h=o.getMounts(D);for(var[_,I]of Object.entries(o.nameTable))for(;I;){var V=I.name_next;h.includes(I.mount)&&o.destroyNode(I),I=V}B.mounted=null;var F0=B.mount.mounts.indexOf(D);B.mount.mounts.splice(F0,1)},lookup(i,l){return i.node_ops.lookup(i,l)},mknod(i,l,B){var D=o.lookupPath(i,{parent:!0}),h=D.node,_=f0.basename(i);if(!_)throw new o.ErrnoError(28);if(_==="."||_==="..")throw new o.ErrnoError(20);var I=o.mayCreate(h,_);if(I)throw new o.ErrnoError(I);if(!h.node_ops.mknod)throw new o.ErrnoError(63);return h.node_ops.mknod(h,_,l,B)},statfs(i){return o.statfsNode(o.lookupPath(i,{follow:!0}).node)},statfsStream(i){return o.statfsNode(i.node)},statfsNode(i){var l={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return i.node_ops.statfs&&Object.assign(l,i.node_ops.statfs(i.mount.opts.root)),l},create(i,l=438){return l&=4095,l|=32768,o.mknod(i,l,0)},mkdir(i,l=511){return l&=1023,l|=16384,o.mknod(i,l,0)},mkdirTree(i,l){var B=i.split("/"),D="";for(var h of B)if(h){(D||f0.isAbs(i))&&(D+="/"),D+=h;try{o.mkdir(D,l)}catch(_){if(_.errno!=20)throw _}}},mkdev(i,l,B){return typeof B>"u"&&(B=l,l=438),l|=8192,o.mknod(i,l,B)},symlink(i,l){if(!dx.resolve(i))throw new o.ErrnoError(44);var B=o.lookupPath(l,{parent:!0}),D=B.node;if(!D)throw new o.ErrnoError(44);var h=f0.basename(l),_=o.mayCreate(D,h);if(_)throw new o.ErrnoError(_);if(!D.node_ops.symlink)throw new o.ErrnoError(63);return D.node_ops.symlink(D,h,i)},rename(i,l){var B=f0.dirname(i),D=f0.dirname(l),h=f0.basename(i),_=f0.basename(l),I,V,F0;if(I=o.lookupPath(i,{parent:!0}),V=I.node,I=o.lookupPath(l,{parent:!0}),F0=I.node,!V||!F0)throw new o.ErrnoError(44);if(V.mount!==F0.mount)throw new o.ErrnoError(75);var _0=o.lookupNode(V,h),xx=dx.relative(i,D);if(xx.charAt(0)!==".")throw new o.ErrnoError(28);if(xx=dx.relative(l,B),xx.charAt(0)!==".")throw new o.ErrnoError(55);var R0;try{R0=o.lookupNode(F0,_)}catch{}if(_0!==R0){var N0=o.isDir(_0.mode),h0=o.mayDelete(V,h,N0);if(h0)throw new o.ErrnoError(h0);if(h0=R0?o.mayDelete(F0,_,N0):o.mayCreate(F0,_),h0)throw new o.ErrnoError(h0);if(!V.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(_0)||R0&&o.isMountpoint(R0))throw new o.ErrnoError(10);if(F0!==V&&(h0=o.nodePermissions(V,"w"),h0))throw new o.ErrnoError(h0);o.hashRemoveNode(_0);try{V.node_ops.rename(_0,F0,_),_0.parent=F0}catch(Cx){throw Cx}finally{o.hashAddNode(_0)}}},rmdir(i){var l=o.lookupPath(i,{parent:!0}),B=l.node,D=f0.basename(i),h=o.lookupNode(B,D),_=o.mayDelete(B,D,!0);if(_)throw new o.ErrnoError(_);if(!B.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(h))throw new o.ErrnoError(10);B.node_ops.rmdir(B,D),o.destroyNode(h)},readdir(i){var l=o.lookupPath(i,{follow:!0}),B=l.node,D=o.checkOpExists(B.node_ops.readdir,54);return D(B)},unlink(i){var l=o.lookupPath(i,{parent:!0}),B=l.node;if(!B)throw new o.ErrnoError(44);var D=f0.basename(i),h=o.lookupNode(B,D),_=o.mayDelete(B,D,!1);if(_)throw new o.ErrnoError(_);if(!B.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(h))throw new o.ErrnoError(10);B.node_ops.unlink(B,D),o.destroyNode(h)},readlink(i){var l=o.lookupPath(i),B=l.node;if(!B)throw new o.ErrnoError(44);if(!B.node_ops.readlink)throw new o.ErrnoError(28);return B.node_ops.readlink(B)},stat(i,l){var B=o.lookupPath(i,{follow:!l}),D=B.node,h=o.checkOpExists(D.node_ops.getattr,63);return h(D)},fstat(i){var l=o.getStreamChecked(i),B=l.node,D=l.stream_ops.getattr,h=D?l:B;return D??(D=B.node_ops.getattr),o.checkOpExists(D,63),D(h)},lstat(i){return o.stat(i,!0)},doChmod(i,l,B,D){o.doSetAttr(i,l,{mode:B&4095|l.mode&-4096,ctime:Date.now(),dontFollow:D})},chmod(i,l,B){var D;if(typeof i=="string"){var h=o.lookupPath(i,{follow:!B});D=h.node}else D=i;o.doChmod(null,D,l,B)},lchmod(i,l){o.chmod(i,l,!0)},fchmod(i,l){var B=o.getStreamChecked(i);o.doChmod(B,B.node,l,!1)},doChown(i,l,B){o.doSetAttr(i,l,{timestamp:Date.now(),dontFollow:B})},chown(i,l,B,D){var h;if(typeof i=="string"){var _=o.lookupPath(i,{follow:!D});h=_.node}else h=i;o.doChown(null,h,D)},lchown(i,l,B){o.chown(i,l,B,!0)},fchown(i,l,B){var D=o.getStreamChecked(i);o.doChown(D,D.node,!1)},doTruncate(i,l,B){if(o.isDir(l.mode))throw new o.ErrnoError(31);if(!o.isFile(l.mode))throw new o.ErrnoError(28);var D=o.nodePermissions(l,"w");if(D)throw new o.ErrnoError(D);o.doSetAttr(i,l,{size:B,timestamp:Date.now()})},truncate(i,l){if(l<0)throw new o.ErrnoError(28);var B;if(typeof i=="string"){var D=o.lookupPath(i,{follow:!0});B=D.node}else B=i;o.doTruncate(null,B,l)},ftruncate(i,l){var B=o.getStreamChecked(i);if(l<0||(B.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(B,B.node,l)},utime(i,l,B){var D=o.lookupPath(i,{follow:!0}),h=D.node,_=o.checkOpExists(h.node_ops.setattr,63);_(h,{atime:l,mtime:B})},open(i,l,B=438){if(i==="")throw new o.ErrnoError(44);l=LA(l),l&64?B=B&4095|32768:B=0;var D,h;if(typeof i=="object")D=i;else{h=i.endsWith("/");var _=o.lookupPath(i,{follow:!(l&131072),noent_okay:!0});D=_.node,i=_.path}var I=!1;if(l&64)if(D){if(l&128)throw new o.ErrnoError(20)}else{if(h)throw new o.ErrnoError(31);D=o.mknod(i,B|511,0),I=!0}if(!D)throw new o.ErrnoError(44);if(o.isChrdev(D.mode)&&(l&=-513),l&65536&&!o.isDir(D.mode))throw new o.ErrnoError(54);if(!I){var V=o.mayOpen(D,l);if(V)throw new o.ErrnoError(V)}l&512&&!I&&o.truncate(D,0),l&=-131713;var F0=o.createStream({node:D,path:o.getPath(D),flags:l,seekable:!0,position:0,stream_ops:D.stream_ops,ungotten:[],error:!1});return F0.stream_ops.open&&F0.stream_ops.open(F0),I&&o.chmod(D,B&511),F0},close(i){if(o.isClosed(i))throw new o.ErrnoError(8);i.getdents&&(i.getdents=null);try{i.stream_ops.close&&i.stream_ops.close(i)}catch(l){throw l}finally{o.closeStream(i.fd)}i.fd=null},isClosed(i){return i.fd===null},llseek(i,l,B){if(o.isClosed(i))throw new o.ErrnoError(8);if(!i.seekable||!i.stream_ops.llseek)throw new o.ErrnoError(70);if(B!=0&&B!=1&&B!=2)throw new o.ErrnoError(28);return i.position=i.stream_ops.llseek(i,l,B),i.ungotten=[],i.position},read(i,l,B,D,h){if(D<0||h<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.read)throw new o.ErrnoError(28);var _=typeof h<"u";if(!_)h=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var I=i.stream_ops.read(i,l,B,D,h);return _||(i.position+=I),I},write(i,l,B,D,h,_){if(D<0||h<0)throw new o.ErrnoError(28);if(o.isClosed(i))throw new o.ErrnoError(8);if((i.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(i.node.mode))throw new o.ErrnoError(31);if(!i.stream_ops.write)throw new o.ErrnoError(28);i.seekable&&i.flags&1024&&o.llseek(i,0,2);var I=typeof h<"u";if(!I)h=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var V=i.stream_ops.write(i,l,B,D,h,_);return I||(i.position+=V),V},mmap(i,l,B,D,h){if((D&2)!==0&&(h&2)===0&&(i.flags&2097155)!==2)throw new o.ErrnoError(2);if((i.flags&2097155)===1)throw new o.ErrnoError(2);if(!i.stream_ops.mmap)throw new o.ErrnoError(43);if(!l)throw new o.ErrnoError(28);return i.stream_ops.mmap(i,l,B,D,h)},msync(i,l,B,D,h){return i.stream_ops.msync?i.stream_ops.msync(i,l,B,D,h):0},ioctl(i,l,B){if(!i.stream_ops.ioctl)throw new o.ErrnoError(59);return i.stream_ops.ioctl(i,l,B)},readFile(i,l={}){l.flags=l.flags||0,l.encoding=l.encoding||"binary",l.encoding!=="utf8"&&l.encoding!=="binary"&&d0(`Invalid encoding type "${l.encoding}"`);var B=o.open(i,l.flags),D=o.stat(i),h=D.size,_=new Uint8Array(h);return o.read(B,_,0,h,0),l.encoding==="utf8"&&(_=DA(_)),o.close(B),_},writeFile(i,l,B={}){B.flags=B.flags||577;var D=o.open(i,B.flags,B.mode);l=Qx(l),o.write(D,l,0,l.byteLength,void 0,B.canOwn),o.close(D)},cwd:()=>o.currentPath,chdir(i){var l=o.lookupPath(i,{follow:!0});if(l.node===null)throw new o.ErrnoError(44);if(!o.isDir(l.node.mode))throw new o.ErrnoError(54);var B=o.nodePermissions(l.node,"x");if(B)throw new o.ErrnoError(B);o.currentPath=l.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(D,h,_,I,V)=>I,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var i=new Uint8Array(1024),l=0,B=()=>(l===0&&(He(i),l=i.byteLength),i[--l]);o.createDevice("/dev","random",B),o.createDevice("/dev","urandom",B),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var i=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var l=o.createNode(i,"fd",16895,73);return l.stream_ops={llseek:i0.stream_ops.llseek},l.node_ops={lookup(B,D){var h=+D,_=o.getStreamChecked(h),I={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>_.path},id:h+1};return I.parent=I,I},readdir(){return Array.from(o.streams.entries()).filter(([B,D])=>D).map(([B,D])=>B.toString())}},l}},{},"/proc/self/fd")},createStandardStreams(i,l,B){i?o.createDevice("/dev","stdin",i):o.symlink("/dev/tty","/dev/stdin"),l?o.createDevice("/dev","stdout",null,l):o.symlink("/dev/tty","/dev/stdout"),B?o.createDevice("/dev","stderr",null,B):o.symlink("/dev/tty1","/dev/stderr");var D=o.open("/dev/stdin",0),h=o.open("/dev/stdout",1),_=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(i0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:i0,PROXYFS:k0}},init(i,l,B){o.initialized=!0,i??(i=n.stdin),l??(l=n.stdout),B??(B=n.stderr),o.createStandardStreams(i,l,B)},quit(){o.initialized=!1,b(0);for(var i of o.streams)i&&o.close(i)},findObject(i,l){var B=o.analyzePath(i,l);return B.exists?B.object:null},analyzePath(i,l){try{var B=o.lookupPath(i,{follow:!l});i=B.path}catch{}var D={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var B=o.lookupPath(i,{parent:!0});D.parentExists=!0,D.parentPath=B.path,D.parentObject=B.node,D.name=f0.basename(i),B=o.lookupPath(i,{follow:!l}),D.exists=!0,D.path=B.path,D.object=B.node,D.name=B.node.name,D.isRoot=B.path==="/"}catch(h){D.error=h.errno}return D},createPath(i,l,B,D){i=typeof i=="string"?i:o.getPath(i);for(var h=l.split("/").reverse();h.length;){var _=h.pop();if(_){var I=f0.join2(i,_);try{o.mkdir(I)}catch(V){if(V.errno!=20)throw V}i=I}}return I},createFile(i,l,B,D,h){var _=f0.join2(typeof i=="string"?i:o.getPath(i),l),I=aA(D,h);return o.create(_,I)},createDataFile(i,l,B,D,h,_){var I=l;i&&(i=typeof i=="string"?i:o.getPath(i),I=l?f0.join2(i,l):i);var V=aA(D,h),F0=o.create(I,V);if(B){B=Qx(B),o.chmod(F0,V|146);var _0=o.open(F0,577);o.write(_0,B,0,B.length,0,_),o.close(_0),o.chmod(F0,V)}},createDevice(i,l,B,D){var h,_=f0.join2(typeof i=="string"?i:o.getPath(i),l),I=aA(!!B,!!D);(h=o.createDevice).major??(h.major=64);var V=o.makedev(o.createDevice.major++,0);return o.registerDevice(V,{open(F0){F0.seekable=!1},close(F0){D?.buffer?.length&&D(10)},read(F0,_0,xx,R0,N0){for(var h0=0,Cx=0;Cx<R0;Cx++){var Sx;try{Sx=B()}catch{throw new o.ErrnoError(29)}if(Sx===void 0&&h0===0)throw new o.ErrnoError(6);if(Sx==null)break;h0++,_0[xx+Cx]=Sx}return h0&&(F0.node.atime=Date.now()),h0},write(F0,_0,xx,R0,N0){for(var h0=0;h0<R0;h0++)try{D(_0[xx+h0])}catch{throw new o.ErrnoError(29)}return R0&&(F0.node.mtime=F0.node.ctime=Date.now()),h0}}),o.mkdev(_,I,V)},forceLoadFile(i){if(i.isDevice||i.isFolder||i.link||i.contents)return!0;if(globalThis.XMLHttpRequest)d0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{i.contents=S(i.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(i,l,B,D,h){class _{constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get(N0){if(!(N0>this.length-1||N0<0)){var h0=N0%this.chunkSize,Cx=N0/this.chunkSize|0;return this.getter(Cx)[h0]}}setDataGetter(N0){this.getter=N0}cacheLength(){var N0=new XMLHttpRequest;N0.open("HEAD",B,!1),N0.send(null),N0.status>=200&&N0.status<300||N0.status===304||d0("Couldn't load "+B+". Status: "+N0.status);var h0=Number(N0.getResponseHeader("Content-length")),Cx,Sx=(Cx=N0.getResponseHeader("Accept-Ranges"))&&Cx==="bytes",Kx=(Cx=N0.getResponseHeader("Content-Encoding"))&&Cx==="gzip",Zx=1024*1024;Sx||(Zx=h0);var xA=(oA,$e)=>{oA>$e&&d0("invalid range ("+oA+", "+$e+") or no bytes requested!"),$e>h0-1&&d0("only "+h0+" bytes available! programmer error!");var kx=new XMLHttpRequest;return kx.open("GET",B,!1),h0!==Zx&&kx.setRequestHeader("Range","bytes="+oA+"-"+$e),kx.responseType="arraybuffer",kx.overrideMimeType&&kx.overrideMimeType("text/plain; charset=x-user-defined"),kx.send(null),kx.status>=200&&kx.status<300||kx.status===304||d0("Couldn't load "+B+". Status: "+kx.status),kx.response!==void 0?new Uint8Array(kx.response||[]):ee(kx.responseText||"",!0)},Ze=this;Ze.setDataGetter(oA=>{var $e=oA*Zx,kx=(oA+1)*Zx-1;return kx=Math.min(kx,h0-1),typeof Ze.chunks[oA]>"u"&&(Ze.chunks[oA]=xA($e,kx)),typeof Ze.chunks[oA]>"u"&&d0("doXHR failed!"),Ze.chunks[oA]}),(Kx||!h0)&&(Zx=h0=1,h0=this.getter(0).length,Zx=h0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=h0,this._chunkSize=Zx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var I=new _,V={isDevice:!1,contents:I}}else var V={isDevice:!1,url:B};var F0=o.createFile(i,l,V,D,h);V.contents?F0.contents=V.contents:V.url&&(F0.contents=null,F0.url=V.url),Object.defineProperties(F0,{usedBytes:{get:function(){return this.contents.length}}});var _0={};for(let[R0,N0]of Object.entries(F0.stream_ops))_0[R0]=(...h0)=>(o.forceLoadFile(F0),N0(...h0));function xx(R0,N0,h0,Cx,Sx){var Kx=R0.node.contents;if(Sx>=Kx.length)return 0;var Zx=Math.min(Kx.length-Sx,Cx);if(Kx.slice)for(var xA=0;xA<Zx;xA++)N0[h0+xA]=Kx[Sx+xA];else for(var xA=0;xA<Zx;xA++)N0[h0+xA]=Kx.get(Sx+xA);return Zx}return _0.read=(R0,N0,h0,Cx,Sx)=>(o.forceLoadFile(F0),xx(R0,N0,h0,Cx,Sx)),_0.mmap=(R0,N0,h0,Cx,Sx)=>{o.forceLoadFile(F0);var Kx=MA(N0);if(!Kx)throw new o.ErrnoError(48);return xx(R0,cx,Kx,N0,h0),{ptr:Kx,allocated:!0}},F0.stream_ops=_0,F0}},w0={currentUmask:18,calculateAt(i,l,B){if(f0.isAbs(l))return l;var D;if(i===-100)D=o.cwd();else{var h=w0.getStreamFromFD(i);D=h.path}if(l.length==0){if(!B)throw new o.ErrnoError(44);return D}return D+"/"+l},writeStat(i,l){l0[i>>2]=l.dev,l0[i+4>>2]=l.mode,l0[i+8>>2]=l.nlink,l0[i+12>>2]=l.uid,l0[i+16>>2]=l.gid,l0[i+20>>2]=l.rdev,W0[i+24>>3]=BigInt(l.size),G0[i+32>>2]=4096,G0[i+36>>2]=l.blocks;var B=l.atime.getTime(),D=l.mtime.getTime(),h=l.ctime.getTime();return W0[i+40>>3]=BigInt(Math.floor(B/1e3)),l0[i+48>>2]=B%1e3*1e3*1e3,W0[i+56>>3]=BigInt(Math.floor(D/1e3)),l0[i+64>>2]=D%1e3*1e3*1e3,W0[i+72>>3]=BigInt(Math.floor(h/1e3)),l0[i+80>>2]=h%1e3*1e3*1e3,W0[i+88>>3]=BigInt(l.ino),0},writeStatFs(i,l){l0[i+4>>2]=l.bsize,l0[i+60>>2]=l.bsize,W0[i+8>>3]=BigInt(l.blocks),W0[i+16>>3]=BigInt(l.bfree),W0[i+24>>3]=BigInt(l.bavail),W0[i+32>>3]=BigInt(l.files),W0[i+40>>3]=BigInt(l.ffree),l0[i+48>>2]=l.fsid,l0[i+64>>2]=l.flags,l0[i+56>>2]=l.namelen},doMsync(i,l,B,D,h){if(!o.isFile(l.node.mode))throw new o.ErrnoError(43);if(D&2)return 0;var _=nA.slice(i,i+B);o.msync(l,_,h,B,D)},getStreamFromFD(i){var l=o.getStreamChecked(i);return l},varargs:void 0,getStr(i){var l=iA(i);return l}};function Ve(i,l,B,D){try{if(l=w0.getStr(l),l=w0.calculateAt(i,l),B&-8)return-28;var h=o.lookupPath(l,{follow:!0}),_=h.node;if(!_)return-44;var I="";return B&4&&(I+="r"),B&2&&(I+="w"),B&1&&(I+="x"),I&&o.nodePermissions(_,I)?-2:0}catch(V){if(typeof o>"u"||V.name!=="ErrnoError")throw V;return-V.errno}}var OA=()=>{var i=G0[+w0.varargs>>2];return w0.varargs+=4,i},mA=OA;function ot(i,l,B){w0.varargs=B;try{var D=w0.getStreamFromFD(i);switch(l){case 0:{var h=OA();if(h<0)return-28;for(;o.streams[h];)h++;var _;return _=o.dupStream(D,h),_.fd}case 1:case 2:return 0;case 3:return D.flags;case 4:{var h=OA(),I=289792;return D.flags=D.flags&~I|h&I,0}case 12:{var h=mA(),V=0;return V0[h+V>>1]=2,0}case 13:case 14:return 0}return-28}catch(F0){if(typeof o>"u"||F0.name!=="ErrnoError")throw F0;return-F0.errno}}var ye=(i,l,B)=>Je(i,nA,l,B);function Dr(i,l){try{if(l===0)return-28;var B=o.cwd(),D=Ae(B)+1;return l<D?-68:(ye(B,i,l),D)}catch(h){if(typeof o>"u"||h.name!=="ErrnoError")throw h;return-h.errno}}function pr(i,l,B){w0.varargs=B;try{var D=w0.getStreamFromFD(i);switch(l){case 21509:return D.tty?0:-59;case 21505:{if(!D.tty)return-59;if(D.tty.ops.ioctl_tcgets){var h=D.tty.ops.ioctl_tcgets(D),_=mA();G0[_>>2]=h.c_iflag||0,G0[_+4>>2]=h.c_oflag||0,G0[_+8>>2]=h.c_cflag||0,G0[_+12>>2]=h.c_lflag||0;for(var I=0;I<32;I++)cx[_+I+17]=h.c_cc[I]||0;return 0}return 0}case 21510:case 21511:case 21512:return D.tty?0:-59;case 21506:case 21507:case 21508:{if(!D.tty)return-59;if(D.tty.ops.ioctl_tcsets){for(var _=mA(),V=G0[_>>2],F0=G0[_+4>>2],_0=G0[_+8>>2],xx=G0[_+12>>2],R0=[],I=0;I<32;I++)R0.push(cx[_+I+17]);return D.tty.ops.ioctl_tcsets(D.tty,l,{c_iflag:V,c_oflag:F0,c_cflag:_0,c_lflag:xx,c_cc:R0})}return 0}case 21519:{if(!D.tty)return-59;var _=mA();return G0[_>>2]=0,0}case 21520:return D.tty?-28:-59;case 21537:case 21531:{var _=mA();return o.ioctl(D,l,_)}case 21523:{if(!D.tty)return-59;if(D.tty.ops.ioctl_tiocgwinsz){var N0=D.tty.ops.ioctl_tiocgwinsz(D.tty),_=mA();V0[_>>1]=N0[0],V0[_+2>>1]=N0[1]}return 0}case 21524:return D.tty?0:-59;case 21515:return D.tty?0:-59;default:return-28}}catch(h0){if(typeof o>"u"||h0.name!=="ErrnoError")throw h0;return-h0.errno}}function Ft(i,l,B,D){w0.varargs=D;try{l=w0.getStr(l),l=w0.calculateAt(i,l);var h=D?OA():0;return B&64&&(h&=~w0.currentUmask),o.open(l,B,h).fd}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return-_.errno}}function vt(i,l,B,D){try{if(l=w0.getStr(l),l=w0.calculateAt(i,l),D<=0)return-28;var h=o.readlink(l),_=Math.min(D,Ae(h)),I=cx[B+_];return ye(h,B,D+1),cx[B+_]=I,_}catch(V){if(typeof o>"u"||V.name!=="ErrnoError")throw V;return-V.errno}}function lt(i,l,B,D){try{return l=w0.getStr(l),D=w0.getStr(D),l=w0.calculateAt(i,l),D=w0.calculateAt(B,D),o.rename(l,D),0}catch(h){if(typeof o>"u"||h.name!=="ErrnoError")throw h;return-h.errno}}function ke(i){try{return i=w0.getStr(i),o.rmdir(i),0}catch(l){if(typeof o>"u"||l.name!=="ErrnoError")throw l;return-l.errno}}function br(i,l,B){try{if(l=w0.getStr(l),l=w0.calculateAt(i,l),!B)o.unlink(l);else if(B===512)o.rmdir(l);else return-28;return 0}catch(D){if(typeof o>"u"||D.name!=="ErrnoError")throw D;return-D.errno}}var re=()=>{throw new Q},we=()=>performance.now(),ct=()=>Date.now(),mr=1,ft=i=>i>=0&&i<=3,te=9007199254740992,We=-9007199254740992,hr=i=>i<We||i>te?NaN:Number(i);function jr(i,l,B){if(l=hr(l),!ft(i))return 28;var D;if(i===0)D=ct();else if(mr)D=we();else return 52;var h=Math.round(D*1e3*1e3);return W0[B>>3]=BigInt(h),0}var Et=()=>2147483648,gr=(i,l)=>Math.ceil(i/l)*l,Bt=i=>{var l=I0.buffer.byteLength,B=(i-l+65535)/65536|0;try{return I0.grow(B),Z(),1}catch{}},Ct=i=>{var l=nA.length;i>>>=0;var B=Et();if(i>B)return!1;for(var D=1;D<=4;D*=2){var h=l*(1+.2/D);h=Math.min(h,i+100663296);var _=Math.min(B,gr(Math.max(i,h),65536)),I=Bt(_);if(I)return!0}return!1};function _e(i){try{var l=w0.getStreamFromFD(i);return o.close(l),0}catch(B){if(typeof o>"u"||B.name!=="ErrnoError")throw B;return B.errno}}var dt=(i,l,B,D)=>{for(var h=0,_=0;_<B;_++){var I=l0[l>>2],V=l0[l+4>>2];l+=8;var F0=o.read(i,cx,I,V,D);if(F0<0)return-1;if(h+=F0,F0<V)break;typeof D<"u"&&(D+=F0)}return h};function ut(i,l,B,D){try{var h=w0.getStreamFromFD(i),_=dt(h,l,B);return l0[D>>2]=_,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}function yr(i,l,B,D){l=hr(l);try{if(isNaN(l))return 22;var h=w0.getStreamFromFD(i);return o.llseek(h,l,B),W0[D>>3]=BigInt(h.position),h.getdents&&l===0&&B===0&&(h.getdents=null),0}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return _.errno}}var kr=(i,l,B,D)=>{for(var h=0,_=0;_<B;_++){var I=l0[l>>2],V=l0[l+4>>2];l+=8;var F0=o.write(i,cx,I,V,D);if(F0<0)return-1;if(h+=F0,F0<V)break;typeof D<"u"&&(D+=F0)}return h};function ne(i,l,B,D){try{var h=w0.getStreamFromFD(i),_=kr(h,l,B);return l0[D>>2]=_,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}var wr=0,se=()=>je||wr>0,Xe=i=>{M=i,se()||(n.onExit?.(i),t0=!0),m(i,new tA(i))},Nx=(i,l)=>{M=i,se()||c0(),Xe(i)},Dt=i=>{if(i instanceof tA||i=="unwind")return M;m(1,i)},GA=i=>W(i),ie=i=>{var l=Ae(i)+1,B=GA(l);return ye(i,B,l),B},Ye=[],Dx=i=>{var l=Ye[i];return l||(Ye[i]=l=T0.get(i)),l},Se=(...i)=>o.createPath(...i),ae=(...i)=>o.unlink(...i),a=(...i)=>o.createLazyFile(...i),c=(...i)=>o.createDevice(...i);if(o.createPreloadedFile=at,o.preloadFile=RA,o.staticInit(),n.noExitRuntime&&(je=n.noExitRuntime),n.preloadPlugins&&(ge=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(O=n.printErr),n.wasmBinary&&(L=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(p=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=en,n.addRunDependency=qx,n.removeRunDependency=ze,n.FS_preloadFile=RA,n.FS_unlink=ae,n.FS_createPath=Se,n.FS_createDevice=c,n.FS=o,n.FS_createDataFile=Ke,n.FS_createLazyFile=a,n.PROXYFS=k0;var d,b,y,$,G,W,o0,D0,X0,I0,T0;function m0(i){d=n._main=i.__main_argc_argv,b=i.fflush,y=i.__funcs_on_exit,$=i.setThrew,G=i._emscripten_stack_restore,W=i._emscripten_stack_alloc,o0=i.emscripten_stack_get_current,D0=I0=i.memory,X0=T0=i.__indirect_function_table}var sx={__assert_fail:IA,__syscall_faccessat:Ve,__syscall_fcntl64:ot,__syscall_getcwd:Dr,__syscall_ioctl:pr,__syscall_openat:Ft,__syscall_readlinkat:vt,__syscall_renameat:lt,__syscall_rmdir:ke,__syscall_unlinkat:br,_emscripten_throw_longjmp:re,clock_time_get:jr,emscripten_resize_heap:Ct,fd_close:_e,fd_read:ut,fd_seek:yr,fd_write:ne,invoke_i:oe,invoke_ii:Ox,invoke_iii:Gx,invoke_iiid:Bs,invoke_iiii:Jx,invoke_iiiii:fx,invoke_iiiiii:Cs,invoke_iijii:fs,invoke_v:yx,invoke_vi:Es,invoke_vii:Ix,invoke_viii:An,invoke_viiii:hA,invoke_viiiii:xn};function yx(i){var l=y0();try{Dx(i)()}catch(B){if(ox(l),!(B instanceof R))throw B;$(1,0)}}function Ix(i,l,B){var D=y0();try{Dx(i)(l,B)}catch(h){if(ox(D),!(h instanceof R))throw h;$(1,0)}}function Ox(i,l){var B=y0();try{return Dx(i)(l)}catch(D){if(ox(B),!(D instanceof R))throw D;$(1,0)}}function Gx(i,l,B){var D=y0();try{return Dx(i)(l,B)}catch(h){if(ox(D),!(h instanceof R))throw h;$(1,0)}}function oe(i){var l=y0();try{return Dx(i)()}catch(B){if(ox(l),!(B instanceof R))throw B;$(1,0)}}function Jx(i,l,B,D){var h=y0();try{return Dx(i)(l,B,D)}catch(_){if(ox(h),!(_ instanceof R))throw _;$(1,0)}}function hA(i,l,B,D,h){var _=y0();try{Dx(i)(l,B,D,h)}catch(I){if(ox(_),!(I instanceof R))throw I;$(1,0)}}function fx(i,l,B,D,h){var _=y0();try{return Dx(i)(l,B,D,h)}catch(I){if(ox(_),!(I instanceof R))throw I;$(1,0)}}function xn(i,l,B,D,h,_){var I=y0();try{Dx(i)(l,B,D,h,_)}catch(V){if(ox(I),!(V instanceof R))throw V;$(1,0)}}function fs(i,l,B,D,h){var _=y0();try{return Dx(i)(l,B,D,h)}catch(I){if(ox(_),!(I instanceof R))throw I;$(1,0)}}function Es(i,l){var B=y0();try{Dx(i)(l)}catch(D){if(ox(B),!(D instanceof R))throw D;$(1,0)}}function An(i,l,B,D){var h=y0();try{Dx(i)(l,B,D)}catch(_){if(ox(h),!(_ instanceof R))throw _;$(1,0)}}function Bs(i,l,B,D){var h=y0();try{return Dx(i)(l,B,D)}catch(_){if(ox(h),!(_ instanceof R))throw _;$(1,0)}}function Cs(i,l,B,D,h,_){var I=y0();try{return Dx(i)(l,B,D,h,_)}catch(V){if(ox(I),!(V instanceof R))throw V;$(1,0)}}function en(i=[]){var l=d;i.unshift(p);var B=i.length,D=GA((B+1)*4),h=D;for(var _ of i)l0[h>>2]=ie(_),h+=4;l0[h>>2]=0;try{var I=l(B,D);return Nx(I,!0),I}catch(V){return Dt(V)}}function pt(i=u){if(Bx>0){b0=pt;return}if(s0(),Bx>0){b0=pt;return}function l(){if(n.calledRun=!0,!t0){U(),J?.(n),n.onRuntimeInitialized?.();var B=n.noInitialRun||!0;B||en(i),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l()}var Qe;return Qe=await tx(),pt(),a0?s=n:s=new Promise((i,l)=>{J=i,H=l}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),PE=Oo({"wasm/bin/pawndbg.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],p="./this.program",m=(a,c)=>{throw c};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var w="",j,S;if(E){var P=require("fs");w=__dirname+"/",S=a=>{a=k(a)?new URL(a):a;var c=P.readFileSync(a);return c},j=async(a,c=!0)=>{a=k(a)?new URL(a):a;var d=P.readFileSync(a,c?void 0:"utf8");return d},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(a,c)=>{throw process.exitCode=a,c}}else if(F||v){try{w=new URL(".",r).href}catch{}v&&(S=a=>{var c=new XMLHttpRequest;return c.open("GET",a,!1),c.responseType="arraybuffer",c.send(null),new Uint8Array(c.response)}),j=async a=>{if(k(a))return new Promise((d,b)=>{var y=new XMLHttpRequest;y.open("GET",a,!0),y.responseType="arraybuffer",y.onload=()=>{if(y.status==200||y.status==0&&y.response){d(y.response);return}b(y.status)},y.onerror=b,y.send(null)});var c=await fetch(a,{credentials:"same-origin"});if(c.ok)return c.arrayBuffer();throw new Error(c.status+" : "+c.url)}}var N=console.log.bind(console),O=console.error.bind(console),L,t0=!1,M,k=a=>a.startsWith("file://");class R{}class Q extends R{}function K(a){for(var c=0,d=a.length,b=new Uint8Array(d),y;c<d;++c)y=a.charCodeAt(c),b[c]=~y>>8&y;return b}var J,H,a0=!1,n0=!1;function Z(){var a=GA.buffer;cx=new Int8Array(a),V0=new Int16Array(a),nA=new Uint8Array(a),tt=new Uint16Array(a),G0=new Int32Array(a),l0=new Uint32Array(a),et=new Float32Array(a),rt=new Float64Array(a),W0=new BigInt64Array(a),nt=new BigUint64Array(a)}function s0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)ur(n.preRun.shift());qA(Yx)}function U(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),nx.init(),ae.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function c0(){kr(),o.quit(),nx.shutdown(),n0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)dr(n.postRun.shift());qA(NA)}function d0(a){n.onAbort?.(a),a=`Aborted(${a})`,O(a),t0=!0,a+=". Build with -sASSERTIONS for more info.";var c=new WebAssembly.RuntimeError(a);throw H?.(c),c}var $0;function L0(){return K(`\0asm\0\0\0\xB4\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\0\`\0\0\`\0\x7F\`\x7F~~\x7F\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F~\x7F\x7F\x7F\`\x7F\x7F|\0\`\x7F~\0\`\x7F|\`\x7F~~~\0\`\x7F~\`|\x7F|\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F~\0\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xFD env\r__assert_fail\0 env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\0VU
1161
+ \0A\xC0\x81\v\v0\xC0\0\0\x80!\0\`(`)}function Ex(s){return s}async function Qx(s){return s}async function PA(s,l){try{var B=await Qx(s),p=await WebAssembly.instantiate(B,l);return p}catch(h){R(`failed to asynchronously prepare wasm: ${h}`),d0(h)}}async function qA(s,l,B){return PA(l,B)}function lx(){var s={env:ix,wasi_snapshot_preview1:ix};return s}async function tx(){function s(_,M){return Ze=_.exports,m0(Ze),Q(),Ze}function l(_){return s(_.instance)}var B=lx();if(n.instantiateWasm)return new Promise((_,M)=>{n.instantiateWasm(B,(z,F0)=>{_(s(z,F0))})});$0??($0=q0());var p=await qA(O,$0,B),h=l(p);return h}class nA{constructor(l){bx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${l})`,this.status=l}}var V0,G0,W0,cx,et,rt,tt,c0,nt,iA,NA=s=>{for(;s.length>0;)s.shift()(n)},IA=[],ur=s=>IA.push(s),Zx=[],Dr=s=>Zx.push(s),ge=!1,ox=s=>G(s),y0=()=>o0(),sA=globalThis.TextDecoder&&new TextDecoder,gx=(s,l,B,p)=>{var h=l+B;if(p)return h;for(;s[l]&&!(l>=h);)++l;return l},pA=(s,l=0,B,p)=>{var h=gx(s,l,B,p);if(h-l>16&&s.buffer&&sA)return sA.decode(s.subarray(l,h));for(var _="";l<h;){var M=s[l++];if(!(M&128)){_+=String.fromCharCode(M);continue}var z=s[l++]&63;if((M&224)==192){_+=String.fromCharCode((M&31)<<6|z);continue}var F0=s[l++]&63;if((M&240)==224?M=(M&15)<<12|z<<6|F0:M=(M&7)<<18|z<<12|F0<<6|s[l++]&63,M<65536)_+=String.fromCharCode(M);else{var _0=M-65536;_+=String.fromCharCode(55296|_0>>10,56320|_0&1023)}}return _},aA=(s,l,B)=>s?pA(iA,s,l,B):"",MA=(s,l,B,p)=>d0(`Assertion failed: ${aA(s)}, at: `+[l?aA(l):"unknown filename",B,p?aA(p):"unknown function"]),f0={isAbs:s=>s.charAt(0)==="/",splitPath:s=>{var l=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return l.exec(s).slice(1)},normalizeArray:(s,l)=>{for(var B=0,p=s.length-1;p>=0;p--){var h=s[p];h==="."?s.splice(p,1):h===".."?(s.splice(p,1),B++):B&&(s.splice(p,1),B--)}if(l)for(;B;B--)s.unshift("..");return s},normalize:s=>{var l=f0.isAbs(s),B=s.slice(-1)==="/";return s=f0.normalizeArray(s.split("/").filter(p=>!!p),!l).join("/"),!s&&!l&&(s="."),s&&B&&(s+="/"),(l?"/":"")+s},dirname:s=>{var l=f0.splitPath(s),B=l[0],p=l[1];return!B&&!p?".":(p&&(p=p.slice(0,-1)),B+p)},basename:s=>s&&s.match(/([^\/]+|\/)\/*$/)[1],join:(...s)=>f0.normalize(s.join("/")),join2:(s,l)=>f0.normalize(s+"/"+l)},it=()=>{if(E){var s=require("crypto");return l=>s.randomFillSync(l)}return l=>(crypto.getRandomValues(l),0)},Je=s=>(Je=it())(s),dx={resolve:(...s)=>{for(var l="",B=!1,p=s.length-1;p>=-1&&!B;p--){var h=p>=0?s[p]:o.cwd();if(typeof h!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!h)return"";l=h+"/"+l,B=f0.isAbs(h)}return l=f0.normalizeArray(l.split("/").filter(_=>!!_),!B).join("/"),(B?"/":"")+l||"."},relative:(s,l)=>{s=dx.resolve(s).slice(1),l=dx.resolve(l).slice(1);function B(_0){for(var xx=0;xx<_0.length&&_0[xx]==="";xx++);for(var R0=_0.length-1;R0>=0&&_0[R0]==="";R0--);return xx>R0?[]:_0.slice(xx,R0-xx+1)}for(var p=B(s.split("/")),h=B(l.split("/")),_=Math.min(p.length,h.length),M=_,z=0;z<_;z++)if(p[z]!==h[z]){M=z;break}for(var F0=[],z=M;z<p.length;z++)F0.push("..");return F0=F0.concat(h.slice(M)),F0.join("/")}},Jx=[],ee=s=>{for(var l=0,B=0;B<s.length;++B){var p=s.charCodeAt(B);p<=127?l++:p<=2047?l+=2:p>=55296&&p<=57343?(l+=4,++B):l+=3}return l},Ke=(s,l,B,p)=>{if(!(p>0))return 0;for(var h=B,_=B+p-1,M=0;M<s.length;++M){var z=s.codePointAt(M);if(z<=127){if(B>=_)break;l[B++]=z}else if(z<=2047){if(B+1>=_)break;l[B++]=192|z>>6,l[B++]=128|z&63}else if(z<=65535){if(B+2>=_)break;l[B++]=224|z>>12,l[B++]=128|z>>6&63,l[B++]=128|z&63}else{if(B+3>=_)break;l[B++]=240|z>>18,l[B++]=128|z>>12&63,l[B++]=128|z>>6&63,l[B++]=128|z&63,M++}}return l[B]=0,B-h},re=(s,l,B)=>{var p=B>0?B:ee(s)+1,h=new Array(p),_=Ke(s,h,0,h.length);return l&&(h.length=_),h},st=()=>{if(!Jx.length){var s=null;if(E){var l=256,B=Buffer.alloc(l),p=0,h=process.stdin.fd;try{p=P.readSync(h,B,0,l)}catch(_){if(_.toString().includes("EOF"))p=0;else throw _}p>0&&(s=B.slice(0,p).toString("utf-8"))}else globalThis.window?.prompt&&(s=window.prompt("Input: "),s!==null&&(s+=`
1162
+ `));if(!s)return null;Jx=re(s,!0)}return Jx.shift()},nx={ttys:[],init(){},shutdown(){},register(s,l){nx.ttys[s]={input:[],output:[],ops:l},o.registerDevice(s,nx.stream_ops)},stream_ops:{open(s){var l=nx.ttys[s.node.rdev];if(!l)throw new o.ErrnoError(43);s.tty=l,s.seekable=!1},close(s){s.tty.ops.fsync(s.tty)},fsync(s){s.tty.ops.fsync(s.tty)},read(s,l,B,p,h){if(!s.tty||!s.tty.ops.get_char)throw new o.ErrnoError(60);for(var _=0,M=0;M<p;M++){var z;try{z=s.tty.ops.get_char(s.tty)}catch{throw new o.ErrnoError(29)}if(z===void 0&&_===0)throw new o.ErrnoError(6);if(z==null)break;_++,l[B+M]=z}return _&&(s.node.atime=Date.now()),_},write(s,l,B,p,h){if(!s.tty||!s.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var _=0;_<p;_++)s.tty.ops.put_char(s.tty,l[B+_])}catch{throw new o.ErrnoError(29)}return p&&(s.node.mtime=s.node.ctime=Date.now()),_}},default_tty_ops:{get_char(s){return st()},put_char(s,l){l===null||l===10?(N(pA(s.output)),s.output=[]):l!=0&&s.output.push(l)},fsync(s){s.output?.length>0&&(N(pA(s.output)),s.output=[])},ioctl_tcgets(s){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(s,l,B){return 0},ioctl_tiocgwinsz(s){return[24,80]}},default_tty1_ops:{put_char(s,l){l===null||l===10?(R(pA(s.output)),s.output=[]):l!=0&&s.output.push(l)},fsync(s){s.output?.length>0&&(R(pA(s.output)),s.output=[])}}},LA=s=>{d0()},n0={ops_table:null,mount(s){return n0.createNode(null,"/",16895,0)},createNode(s,l,B,p){if(o.isBlkdev(B)||o.isFIFO(B))throw new o.ErrnoError(63);n0.ops_table||(n0.ops_table={dir:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,lookup:n0.node_ops.lookup,mknod:n0.node_ops.mknod,rename:n0.node_ops.rename,unlink:n0.node_ops.unlink,rmdir:n0.node_ops.rmdir,readdir:n0.node_ops.readdir,symlink:n0.node_ops.symlink},stream:{llseek:n0.stream_ops.llseek}},file:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:{llseek:n0.stream_ops.llseek,read:n0.stream_ops.read,write:n0.stream_ops.write,mmap:n0.stream_ops.mmap,msync:n0.stream_ops.msync}},link:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,readlink:n0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:o.chrdev_stream_ops}});var h=o.createNode(s,l,B,p);return o.isDir(h.mode)?(h.node_ops=n0.ops_table.dir.node,h.stream_ops=n0.ops_table.dir.stream,h.contents={}):o.isFile(h.mode)?(h.node_ops=n0.ops_table.file.node,h.stream_ops=n0.ops_table.file.stream,h.usedBytes=0,h.contents=n0.emptyFileContents??(n0.emptyFileContents=new Uint8Array(0))):o.isLink(h.mode)?(h.node_ops=n0.ops_table.link.node,h.stream_ops=n0.ops_table.link.stream):o.isChrdev(h.mode)&&(h.node_ops=n0.ops_table.chrdev.node,h.stream_ops=n0.ops_table.chrdev.stream),h.atime=h.mtime=h.ctime=Date.now(),s&&(s.contents[l]=h,s.atime=s.mtime=s.ctime=h.atime),h},getFileDataAsTypedArray(s){return s.contents.subarray(0,s.usedBytes)},expandFileStorage(s,l){var B=s.contents.length;if(!(B>=l)){var p=1024*1024;l=Math.max(l,B*(B<p?2:1.125)>>>0),B&&(l=Math.max(l,256));var h=n0.getFileDataAsTypedArray(s);s.contents=new Uint8Array(l),s.contents.set(h)}},resizeFileStorage(s,l){if(s.usedBytes!=l){var B=s.contents;s.contents=new Uint8Array(l),s.contents.set(B.subarray(0,Math.min(l,s.usedBytes))),s.usedBytes=l}},node_ops:{getattr(s){var l={};return l.dev=o.isChrdev(s.mode)?s.id:1,l.ino=s.id,l.mode=s.mode,l.nlink=1,l.uid=0,l.gid=0,l.rdev=s.rdev,o.isDir(s.mode)?l.size=4096:o.isFile(s.mode)?l.size=s.usedBytes:o.isLink(s.mode)?l.size=s.link.length:l.size=0,l.atime=new Date(s.atime),l.mtime=new Date(s.mtime),l.ctime=new Date(s.ctime),l.blksize=4096,l.blocks=Math.ceil(l.size/l.blksize),l},setattr(s,l){for(let B of["mode","atime","mtime","ctime"])l[B]!=null&&(s[B]=l[B]);l.size!==void 0&&n0.resizeFileStorage(s,l.size)},lookup(s,l){throw n0.doesNotExistError||(n0.doesNotExistError=new o.ErrnoError(44),n0.doesNotExistError.stack="<generic error, no stack>"),n0.doesNotExistError},mknod(s,l,B,p){return n0.createNode(s,l,B,p)},rename(s,l,B){var p;try{p=o.lookupNode(l,B)}catch{}if(p){if(o.isDir(s.mode))for(var h in p.contents)throw new o.ErrnoError(55);o.hashRemoveNode(p)}delete s.parent.contents[s.name],l.contents[B]=s,s.name=B,l.ctime=l.mtime=s.parent.ctime=s.parent.mtime=Date.now()},unlink(s,l){delete s.contents[l],s.ctime=s.mtime=Date.now()},rmdir(s,l){var B=o.lookupNode(s,l);for(var p in B.contents)throw new o.ErrnoError(55);delete s.contents[l],s.ctime=s.mtime=Date.now()},readdir(s){return[".","..",...Object.keys(s.contents)]},symlink(s,l,B){var p=n0.createNode(s,l,41471,0);return p.link=B,p},readlink(s){if(!o.isLink(s.mode))throw new o.ErrnoError(28);return s.link}},stream_ops:{read(s,l,B,p,h){var _=s.node.contents;if(h>=s.node.usedBytes)return 0;var M=Math.min(s.node.usedBytes-h,p);return l.set(_.subarray(h,h+M),B),M},write(s,l,B,p,h,_){if(l.buffer===cx.buffer&&(_=!1),!p)return 0;var M=s.node;return M.mtime=M.ctime=Date.now(),_?(M.contents=l.subarray(B,B+p),M.usedBytes=p):M.usedBytes===0&&h===0?(M.contents=l.slice(B,B+p),M.usedBytes=p):(n0.expandFileStorage(M,h+p),M.contents.set(l.subarray(B,B+p),h),M.usedBytes=Math.max(M.usedBytes,h+p)),p},llseek(s,l,B){var p=l;if(B===1?p+=s.position:B===2&&o.isFile(s.node.mode)&&(p+=s.node.usedBytes),p<0)throw new o.ErrnoError(28);return p},mmap(s,l,B,p,h){if(!o.isFile(s.node.mode))throw new o.ErrnoError(43);var _,M,z=s.node.contents;if(!(h&2)&&z.buffer===cx.buffer)M=!1,_=z.byteOffset;else{if(M=!0,_=LA(l),!_)throw new o.ErrnoError(48);z&&((B>0||B+l<z.length)&&(z.subarray?z=z.subarray(B,B+l):z=Array.prototype.slice.call(z,B,B+l)),cx.set(z,_))}return{ptr:_,allocated:M}},msync(s,l,B,p,h){return n0.stream_ops.write(s,l,0,p,B,!1),0}}},RA=s=>{if(typeof s!="string")return s;var l={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},B=l[s];if(typeof B>"u")throw new Error(`Unknown file open mode: ${s}`);return B},xA=s=>(typeof s=="string"&&(s=re(s,!0)),s.subarray||(s=new Uint8Array(s)),s),oA=(s,l)=>{var B=0;return s&&(B|=365),l&&(B|=146),B},N0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},k0={mount(s){return k0.createNode(null,"/",s.opts.fs.lstat(s.opts.root).mode,0)},createNode(s,l,B,p){if(!o.isDir(B)&&!o.isFile(B)&&!o.isLink(B))throw new o.ErrnoError(N0.EINVAL);var h=o.createNode(s,l,B);return h.node_ops=k0.node_ops,h.stream_ops=k0.stream_ops,h},realPath(s){for(var l=[];s.parent!==s;)l.push(s.name),s=s.parent;return l.push(s.mount.opts.root),l.reverse(),f0.join(...l)},node_ops:{getattr(s){var l=k0.realPath(s),B;try{B=s.mount.opts.fs.lstat(l)}catch(p){throw p.code?new o.ErrnoError(N0[p.code]):p}return{dev:B.dev,ino:B.ino,mode:B.mode,nlink:B.nlink,uid:B.uid,gid:B.gid,rdev:B.rdev,size:B.size,atime:B.atime,mtime:B.mtime,ctime:B.ctime,blksize:B.blksize,blocks:B.blocks}},setattr(s,l){var B=k0.realPath(s);try{if(l.mode!==void 0&&(s.mount.opts.fs.chmod(B,l.mode),s.mode=l.mode),l.atime||l.mtime){var p=new Date(l.atime||l.mtime),h=new Date(l.mtime||l.atime);s.mount.opts.fs.utime(B,p,h)}l.size!==void 0&&s.mount.opts.fs.truncate(B,l.size)}catch(_){throw _.code?new o.ErrnoError(N0[_.code]):_}},lookup(s,l){try{var B=f0.join2(k0.realPath(s),l),p=s.mount.opts.fs.lstat(B).mode,h=k0.createNode(s,l,p);return h}catch(_){throw _.code?new o.ErrnoError(N0[_.code]):_}},mknod(s,l,B,p){var h=k0.createNode(s,l,B,p),_=k0.realPath(h);try{o.isDir(h.mode)?h.mount.opts.fs.mkdir(_,h.mode):h.mount.opts.fs.writeFile(_,"",{mode:h.mode})}catch(M){throw M.code?new o.ErrnoError(N0[M.code]):M}return h},rename(s,l,B){var p=k0.realPath(s),h=f0.join2(k0.realPath(l),B);try{s.mount.opts.fs.rename(p,h),s.name=B}catch(_){throw _.code?new o.ErrnoError(N0[_.code]):_}},unlink(s,l){var B=f0.join2(k0.realPath(s),l);try{s.mount.opts.fs.unlink(B)}catch(p){throw p.code?new o.ErrnoError(N0[p.code]):p}},rmdir(s,l){var B=f0.join2(k0.realPath(s),l);try{s.mount.opts.fs.rmdir(B)}catch(p){throw p.code?new o.ErrnoError(N0[p.code]):p}},readdir(s){var l=k0.realPath(s);try{return s.mount.opts.fs.readdir(l)}catch(B){throw B.code?new o.ErrnoError(N0[B.code]):B}},symlink(s,l,B){var p=f0.join2(k0.realPath(s),l);try{s.mount.opts.fs.symlink(B,p)}catch(h){throw h.code?new o.ErrnoError(N0[h.code]):h}},readlink(s){var l=k0.realPath(s);try{return s.mount.opts.fs.readlink(l)}catch(B){throw B.code?new o.ErrnoError(N0[B.code]):B}}},stream_ops:{open(s){var l=k0.realPath(s.node);try{s.nfd=s.node.mount.opts.fs.open(l,s.flags)}catch(B){throw B.code?new o.ErrnoError(N0[B.code]):B}},close(s){try{s.node.mount.opts.fs.close(s.nfd)}catch(l){throw l.code?new o.ErrnoError(N0[l.code]):l}},read(s,l,B,p,h){try{return s.node.mount.opts.fs.read(s.nfd,l,B,p,h)}catch(_){throw _.code?new o.ErrnoError(N0[_.code]):_}},write(s,l,B,p,h){try{return s.node.mount.opts.fs.write(s.nfd,l,B,p,h)}catch(_){throw _.code?new o.ErrnoError(N0[_.code]):_}},llseek(s,l,B){var p=l;if(B===1)p+=s.position;else if(B===2&&o.isFile(s.node.mode))try{var h=s.node.node_ops.getattr(s.node);p+=h.size}catch(_){throw new o.ErrnoError(N0[_.code])}if(p<0)throw new o.ErrnoError(N0.EINVAL);return p}}},bA=async s=>{var l=await j(s);return new Uint8Array(l)},ze=(...s)=>o.createDataFile(...s),ux=s=>s,Bx=0,b0=null,Ve=s=>{if(Bx--,n.monitorRunDependencies?.(Bx),Bx==0&&b0){var l=b0;b0=null,l()}},Nx=s=>{Bx++,n.monitorRunDependencies?.(Bx)},ye=[],mA=async(s,l)=>{typeof Browser<"u"&&Browser.init();for(var B of ye)if(B.canHandle(l))return B.handle(s,l);return s},OA=async(s,l,B,p,h,_,M,z)=>{var F0=l?dx.resolve(f0.join2(s,l)):s,_0=ux(`cp ${F0}`);Nx(_0);try{var xx=B;typeof B=="string"&&(xx=await bA(B)),xx=await mA(xx,F0),z?.(),_||ze(s,l,xx,p,h,M)}finally{Ve(_0)}},at=(s,l,B,p,h,_,M,z,F0,_0)=>{OA(s,l,B,p,h,z,F0,_0).then(_).catch(M)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(s){bx(this,"name","ErrnoError"),this.errno=s}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(s){this.node=s}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(s){this.shared.flags=s}get position(){return this.shared.position}set position(s){this.shared.position=s}},FSNode:class{constructor(s,l,B,p){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),s||(s=this),this.parent=s,this.mount=s.mount,this.id=o.nextInode++,this.name=l,this.mode=B,this.rdev=p,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(s){s?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(s){s?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(s,l={}){if(!s)throw new o.ErrnoError(44);l.follow_mount??(l.follow_mount=!0),f0.isAbs(s)||(s=o.cwd()+"/"+s);x:for(var B=0;B<40;B++){for(var p=s.split("/").filter(_0=>!!_0),h=o.root,_="/",M=0;M<p.length;M++){var z=M===p.length-1;if(z&&l.parent)break;if(p[M]!=="."){if(p[M]===".."){if(_=f0.dirname(_),o.isRoot(h)){s=_+"/"+p.slice(M+1).join("/"),B--;continue x}else h=h.parent;continue}_=f0.join2(_,p[M]);try{h=o.lookupNode(h,p[M])}catch(_0){if(_0?.errno===44&&z&&l.noent_okay)return{path:_};throw _0}if(o.isMountpoint(h)&&(!z||l.follow_mount)&&(h=h.mounted.root),o.isLink(h.mode)&&(!z||l.follow)){if(!h.node_ops.readlink)throw new o.ErrnoError(52);var F0=h.node_ops.readlink(h);f0.isAbs(F0)||(F0=f0.dirname(_)+"/"+F0),s=F0+"/"+p.slice(M+1).join("/");continue x}}}return{path:_,node:h}}throw new o.ErrnoError(32)},getPath(s){for(var l;;){if(o.isRoot(s)){var B=s.mount.mountpoint;return l?B[B.length-1]!=="/"?`${B}/${l}`:B+l:B}l=l?`${s.name}/${l}`:s.name,s=s.parent}},hashName(s,l){for(var B=0,p=0;p<l.length;p++)B=(B<<5)-B+l.charCodeAt(p)|0;return(s+B>>>0)%o.nameTable.length},hashAddNode(s){var l=o.hashName(s.parent.id,s.name);s.name_next=o.nameTable[l],o.nameTable[l]=s},hashRemoveNode(s){var l=o.hashName(s.parent.id,s.name);if(o.nameTable[l]===s)o.nameTable[l]=s.name_next;else for(var B=o.nameTable[l];B;){if(B.name_next===s){B.name_next=s.name_next;break}B=B.name_next}},lookupNode(s,l){var B=o.mayLookup(s);if(B)throw new o.ErrnoError(B);for(var p=o.hashName(s.id,l),h=o.nameTable[p];h;h=h.name_next){var _=h.name;if(h.parent.id===s.id&&_===l)return h}return o.lookup(s,l)},createNode(s,l,B,p){var h=new o.FSNode(s,l,B,p);return o.hashAddNode(h),h},destroyNode(s){o.hashRemoveNode(s)},isRoot(s){return s===s.parent},isMountpoint(s){return!!s.mounted},isFile(s){return(s&61440)===32768},isDir(s){return(s&61440)===16384},isLink(s){return(s&61440)===40960},isChrdev(s){return(s&61440)===8192},isBlkdev(s){return(s&61440)===24576},isFIFO(s){return(s&61440)===4096},isSocket(s){return(s&49152)===49152},flagsToPermissionString(s){var l=["r","w","rw"][s&3];return s&512&&(l+="w"),l},nodePermissions(s,l){return o.ignorePermissions?0:l.includes("r")&&!(s.mode&292)||l.includes("w")&&!(s.mode&146)||l.includes("x")&&!(s.mode&73)?2:0},mayLookup(s){if(!o.isDir(s.mode))return 54;var l=o.nodePermissions(s,"x");return l||(s.node_ops.lookup?0:2)},mayCreate(s,l){if(!o.isDir(s.mode))return 54;try{var B=o.lookupNode(s,l);return 20}catch{}return o.nodePermissions(s,"wx")},mayDelete(s,l,B){var p;try{p=o.lookupNode(s,l)}catch(_){return _.errno}var h=o.nodePermissions(s,"wx");if(h)return h;if(B){if(!o.isDir(p.mode))return 54;if(o.isRoot(p)||o.getPath(p)===o.cwd())return 10}else if(o.isDir(p.mode))return 31;return 0},mayOpen(s,l){if(!s)return 44;if(o.isLink(s.mode))return 32;var B=o.flagsToPermissionString(l);return o.isDir(s.mode)&&(B!=="r"||l&576)?31:o.nodePermissions(s,B)},checkOpExists(s,l){if(!s)throw new o.ErrnoError(l);return s},MAX_OPEN_FDS:4096,nextfd(){for(var s=0;s<=o.MAX_OPEN_FDS;s++)if(!o.streams[s])return s;throw new o.ErrnoError(33)},getStreamChecked(s){var l=o.getStream(s);if(!l)throw new o.ErrnoError(8);return l},getStream:s=>o.streams[s],createStream(s,l=-1){return s=Object.assign(new o.FSStream,s),l==-1&&(l=o.nextfd()),s.fd=l,o.streams[l]=s,s},closeStream(s){o.streams[s]=null},dupStream(s,l=-1){var B=o.createStream(s,l);return B.stream_ops?.dup?.(B),B},doSetAttr(s,l,B){var p=s?.stream_ops.setattr,h=p?s:l;p??(p=l.node_ops.setattr),o.checkOpExists(p,63);try{p(h,B)}catch(_){throw _ instanceof RangeError?new o.ErrnoError(22):_}},chrdev_stream_ops:{open(s){var l=o.getDevice(s.node.rdev);s.stream_ops=l.stream_ops,s.stream_ops.open?.(s)},llseek(){throw new o.ErrnoError(70)}},major:s=>s>>8,minor:s=>s&255,makedev:(s,l)=>s<<8|l,registerDevice(s,l){o.devices[s]={stream_ops:l}},getDevice:s=>o.devices[s],getMounts(s){for(var l=[],B=[s];B.length;){var p=B.pop();l.push(p),B.push(...p.mounts)}return l},syncfs(s,l){typeof s=="function"&&(l=s,s=!1),o.syncFSRequests++,o.syncFSRequests>1&&R(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var B=o.getMounts(o.root.mount),p=0;function h(z){return o.syncFSRequests--,l(z)}function _(z){if(z)return _.errored?void 0:(_.errored=!0,h(z));++p>=B.length&&h(null)}for(var M of B)M.type.syncfs?M.type.syncfs(M,s,_):_(null)},mount(s,l,B){var p=B==="/",h=!B,_;if(p&&o.root)throw new o.ErrnoError(10);if(!p&&!h){var M=o.lookupPath(B,{follow_mount:!1});if(B=M.path,_=M.node,o.isMountpoint(_))throw new o.ErrnoError(10);if(!o.isDir(_.mode))throw new o.ErrnoError(54)}var z={type:s,opts:l,mountpoint:B,mounts:[]},F0=s.mount(z);return F0.mount=z,z.root=F0,p?o.root=F0:_&&(_.mounted=z,_.mount&&_.mount.mounts.push(z)),F0},unmount(s){var l=o.lookupPath(s,{follow_mount:!1});if(!o.isMountpoint(l.node))throw new o.ErrnoError(28);var B=l.node,p=B.mounted,h=o.getMounts(p);for(var[_,M]of Object.entries(o.nameTable))for(;M;){var z=M.name_next;h.includes(M.mount)&&o.destroyNode(M),M=z}B.mounted=null;var F0=B.mount.mounts.indexOf(p);B.mount.mounts.splice(F0,1)},lookup(s,l){return s.node_ops.lookup(s,l)},mknod(s,l,B){var p=o.lookupPath(s,{parent:!0}),h=p.node,_=f0.basename(s);if(!_)throw new o.ErrnoError(28);if(_==="."||_==="..")throw new o.ErrnoError(20);var M=o.mayCreate(h,_);if(M)throw new o.ErrnoError(M);if(!h.node_ops.mknod)throw new o.ErrnoError(63);return h.node_ops.mknod(h,_,l,B)},statfs(s){return o.statfsNode(o.lookupPath(s,{follow:!0}).node)},statfsStream(s){return o.statfsNode(s.node)},statfsNode(s){var l={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return s.node_ops.statfs&&Object.assign(l,s.node_ops.statfs(s.mount.opts.root)),l},create(s,l=438){return l&=4095,l|=32768,o.mknod(s,l,0)},mkdir(s,l=511){return l&=1023,l|=16384,o.mknod(s,l,0)},mkdirTree(s,l){var B=s.split("/"),p="";for(var h of B)if(h){(p||f0.isAbs(s))&&(p+="/"),p+=h;try{o.mkdir(p,l)}catch(_){if(_.errno!=20)throw _}}},mkdev(s,l,B){return typeof B>"u"&&(B=l,l=438),l|=8192,o.mknod(s,l,B)},symlink(s,l){if(!dx.resolve(s))throw new o.ErrnoError(44);var B=o.lookupPath(l,{parent:!0}),p=B.node;if(!p)throw new o.ErrnoError(44);var h=f0.basename(l),_=o.mayCreate(p,h);if(_)throw new o.ErrnoError(_);if(!p.node_ops.symlink)throw new o.ErrnoError(63);return p.node_ops.symlink(p,h,s)},rename(s,l){var B=f0.dirname(s),p=f0.dirname(l),h=f0.basename(s),_=f0.basename(l),M,z,F0;if(M=o.lookupPath(s,{parent:!0}),z=M.node,M=o.lookupPath(l,{parent:!0}),F0=M.node,!z||!F0)throw new o.ErrnoError(44);if(z.mount!==F0.mount)throw new o.ErrnoError(75);var _0=o.lookupNode(z,h),xx=dx.relative(s,p);if(xx.charAt(0)!==".")throw new o.ErrnoError(28);if(xx=dx.relative(l,B),xx.charAt(0)!==".")throw new o.ErrnoError(55);var R0;try{R0=o.lookupNode(F0,_)}catch{}if(_0!==R0){var I0=o.isDir(_0.mode),h0=o.mayDelete(z,h,I0);if(h0)throw new o.ErrnoError(h0);if(h0=R0?o.mayDelete(F0,_,I0):o.mayCreate(F0,_),h0)throw new o.ErrnoError(h0);if(!z.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(_0)||R0&&o.isMountpoint(R0))throw new o.ErrnoError(10);if(F0!==z&&(h0=o.nodePermissions(z,"w"),h0))throw new o.ErrnoError(h0);o.hashRemoveNode(_0);try{z.node_ops.rename(_0,F0,_),_0.parent=F0}catch(Cx){throw Cx}finally{o.hashAddNode(_0)}}},rmdir(s){var l=o.lookupPath(s,{parent:!0}),B=l.node,p=f0.basename(s),h=o.lookupNode(B,p),_=o.mayDelete(B,p,!0);if(_)throw new o.ErrnoError(_);if(!B.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(h))throw new o.ErrnoError(10);B.node_ops.rmdir(B,p),o.destroyNode(h)},readdir(s){var l=o.lookupPath(s,{follow:!0}),B=l.node,p=o.checkOpExists(B.node_ops.readdir,54);return p(B)},unlink(s){var l=o.lookupPath(s,{parent:!0}),B=l.node;if(!B)throw new o.ErrnoError(44);var p=f0.basename(s),h=o.lookupNode(B,p),_=o.mayDelete(B,p,!1);if(_)throw new o.ErrnoError(_);if(!B.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(h))throw new o.ErrnoError(10);B.node_ops.unlink(B,p),o.destroyNode(h)},readlink(s){var l=o.lookupPath(s),B=l.node;if(!B)throw new o.ErrnoError(44);if(!B.node_ops.readlink)throw new o.ErrnoError(28);return B.node_ops.readlink(B)},stat(s,l){var B=o.lookupPath(s,{follow:!l}),p=B.node,h=o.checkOpExists(p.node_ops.getattr,63);return h(p)},fstat(s){var l=o.getStreamChecked(s),B=l.node,p=l.stream_ops.getattr,h=p?l:B;return p??(p=B.node_ops.getattr),o.checkOpExists(p,63),p(h)},lstat(s){return o.stat(s,!0)},doChmod(s,l,B,p){o.doSetAttr(s,l,{mode:B&4095|l.mode&-4096,ctime:Date.now(),dontFollow:p})},chmod(s,l,B){var p;if(typeof s=="string"){var h=o.lookupPath(s,{follow:!B});p=h.node}else p=s;o.doChmod(null,p,l,B)},lchmod(s,l){o.chmod(s,l,!0)},fchmod(s,l){var B=o.getStreamChecked(s);o.doChmod(B,B.node,l,!1)},doChown(s,l,B){o.doSetAttr(s,l,{timestamp:Date.now(),dontFollow:B})},chown(s,l,B,p){var h;if(typeof s=="string"){var _=o.lookupPath(s,{follow:!p});h=_.node}else h=s;o.doChown(null,h,p)},lchown(s,l,B){o.chown(s,l,B,!0)},fchown(s,l,B){var p=o.getStreamChecked(s);o.doChown(p,p.node,!1)},doTruncate(s,l,B){if(o.isDir(l.mode))throw new o.ErrnoError(31);if(!o.isFile(l.mode))throw new o.ErrnoError(28);var p=o.nodePermissions(l,"w");if(p)throw new o.ErrnoError(p);o.doSetAttr(s,l,{size:B,timestamp:Date.now()})},truncate(s,l){if(l<0)throw new o.ErrnoError(28);var B;if(typeof s=="string"){var p=o.lookupPath(s,{follow:!0});B=p.node}else B=s;o.doTruncate(null,B,l)},ftruncate(s,l){var B=o.getStreamChecked(s);if(l<0||(B.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(B,B.node,l)},utime(s,l,B){var p=o.lookupPath(s,{follow:!0}),h=p.node,_=o.checkOpExists(h.node_ops.setattr,63);_(h,{atime:l,mtime:B})},open(s,l,B=438){if(s==="")throw new o.ErrnoError(44);l=RA(l),l&64?B=B&4095|32768:B=0;var p,h;if(typeof s=="object")p=s;else{h=s.endsWith("/");var _=o.lookupPath(s,{follow:!(l&131072),noent_okay:!0});p=_.node,s=_.path}var M=!1;if(l&64)if(p){if(l&128)throw new o.ErrnoError(20)}else{if(h)throw new o.ErrnoError(31);p=o.mknod(s,B|511,0),M=!0}if(!p)throw new o.ErrnoError(44);if(o.isChrdev(p.mode)&&(l&=-513),l&65536&&!o.isDir(p.mode))throw new o.ErrnoError(54);if(!M){var z=o.mayOpen(p,l);if(z)throw new o.ErrnoError(z)}l&512&&!M&&o.truncate(p,0),l&=-131713;var F0=o.createStream({node:p,path:o.getPath(p),flags:l,seekable:!0,position:0,stream_ops:p.stream_ops,ungotten:[],error:!1});return F0.stream_ops.open&&F0.stream_ops.open(F0),M&&o.chmod(p,B&511),F0},close(s){if(o.isClosed(s))throw new o.ErrnoError(8);s.getdents&&(s.getdents=null);try{s.stream_ops.close&&s.stream_ops.close(s)}catch(l){throw l}finally{o.closeStream(s.fd)}s.fd=null},isClosed(s){return s.fd===null},llseek(s,l,B){if(o.isClosed(s))throw new o.ErrnoError(8);if(!s.seekable||!s.stream_ops.llseek)throw new o.ErrnoError(70);if(B!=0&&B!=1&&B!=2)throw new o.ErrnoError(28);return s.position=s.stream_ops.llseek(s,l,B),s.ungotten=[],s.position},read(s,l,B,p,h){if(p<0||h<0)throw new o.ErrnoError(28);if(o.isClosed(s))throw new o.ErrnoError(8);if((s.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(s.node.mode))throw new o.ErrnoError(31);if(!s.stream_ops.read)throw new o.ErrnoError(28);var _=typeof h<"u";if(!_)h=s.position;else if(!s.seekable)throw new o.ErrnoError(70);var M=s.stream_ops.read(s,l,B,p,h);return _||(s.position+=M),M},write(s,l,B,p,h,_){if(p<0||h<0)throw new o.ErrnoError(28);if(o.isClosed(s))throw new o.ErrnoError(8);if((s.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(s.node.mode))throw new o.ErrnoError(31);if(!s.stream_ops.write)throw new o.ErrnoError(28);s.seekable&&s.flags&1024&&o.llseek(s,0,2);var M=typeof h<"u";if(!M)h=s.position;else if(!s.seekable)throw new o.ErrnoError(70);var z=s.stream_ops.write(s,l,B,p,h,_);return M||(s.position+=z),z},mmap(s,l,B,p,h){if((p&2)!==0&&(h&2)===0&&(s.flags&2097155)!==2)throw new o.ErrnoError(2);if((s.flags&2097155)===1)throw new o.ErrnoError(2);if(!s.stream_ops.mmap)throw new o.ErrnoError(43);if(!l)throw new o.ErrnoError(28);return s.stream_ops.mmap(s,l,B,p,h)},msync(s,l,B,p,h){return s.stream_ops.msync?s.stream_ops.msync(s,l,B,p,h):0},ioctl(s,l,B){if(!s.stream_ops.ioctl)throw new o.ErrnoError(59);return s.stream_ops.ioctl(s,l,B)},readFile(s,l={}){l.flags=l.flags||0,l.encoding=l.encoding||"binary",l.encoding!=="utf8"&&l.encoding!=="binary"&&d0(`Invalid encoding type "${l.encoding}"`);var B=o.open(s,l.flags),p=o.stat(s),h=p.size,_=new Uint8Array(h);return o.read(B,_,0,h,0),l.encoding==="utf8"&&(_=pA(_)),o.close(B),_},writeFile(s,l,B={}){B.flags=B.flags||577;var p=o.open(s,B.flags,B.mode);l=xA(l),o.write(p,l,0,l.byteLength,void 0,B.canOwn),o.close(p)},cwd:()=>o.currentPath,chdir(s){var l=o.lookupPath(s,{follow:!0});if(l.node===null)throw new o.ErrnoError(44);if(!o.isDir(l.node.mode))throw new o.ErrnoError(54);var B=o.nodePermissions(l.node,"x");if(B)throw new o.ErrnoError(B);o.currentPath=l.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(p,h,_,M,z)=>M,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var s=new Uint8Array(1024),l=0,B=()=>(l===0&&(Je(s),l=s.byteLength),s[--l]);o.createDevice("/dev","random",B),o.createDevice("/dev","urandom",B),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var s=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var l=o.createNode(s,"fd",16895,73);return l.stream_ops={llseek:n0.stream_ops.llseek},l.node_ops={lookup(B,p){var h=+p,_=o.getStreamChecked(h),M={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>_.path},id:h+1};return M.parent=M,M},readdir(){return Array.from(o.streams.entries()).filter(([B,p])=>p).map(([B,p])=>B.toString())}},l}},{},"/proc/self/fd")},createStandardStreams(s,l,B){s?o.createDevice("/dev","stdin",s):o.symlink("/dev/tty","/dev/stdin"),l?o.createDevice("/dev","stdout",null,l):o.symlink("/dev/tty","/dev/stdout"),B?o.createDevice("/dev","stderr",null,B):o.symlink("/dev/tty1","/dev/stderr");var p=o.open("/dev/stdin",0),h=o.open("/dev/stdout",1),_=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(n0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:n0,PROXYFS:k0}},init(s,l,B){o.initialized=!0,s??(s=n.stdin),l??(l=n.stdout),B??(B=n.stderr),o.createStandardStreams(s,l,B)},quit(){o.initialized=!1,b(0);for(var s of o.streams)s&&o.close(s)},findObject(s,l){var B=o.analyzePath(s,l);return B.exists?B.object:null},analyzePath(s,l){try{var B=o.lookupPath(s,{follow:!l});s=B.path}catch{}var p={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var B=o.lookupPath(s,{parent:!0});p.parentExists=!0,p.parentPath=B.path,p.parentObject=B.node,p.name=f0.basename(s),B=o.lookupPath(s,{follow:!l}),p.exists=!0,p.path=B.path,p.object=B.node,p.name=B.node.name,p.isRoot=B.path==="/"}catch(h){p.error=h.errno}return p},createPath(s,l,B,p){s=typeof s=="string"?s:o.getPath(s);for(var h=l.split("/").reverse();h.length;){var _=h.pop();if(_){var M=f0.join2(s,_);try{o.mkdir(M)}catch(z){if(z.errno!=20)throw z}s=M}}return M},createFile(s,l,B,p,h){var _=f0.join2(typeof s=="string"?s:o.getPath(s),l),M=oA(p,h);return o.create(_,M)},createDataFile(s,l,B,p,h,_){var M=l;s&&(s=typeof s=="string"?s:o.getPath(s),M=l?f0.join2(s,l):s);var z=oA(p,h),F0=o.create(M,z);if(B){B=xA(B),o.chmod(F0,z|146);var _0=o.open(F0,577);o.write(_0,B,0,B.length,0,_),o.close(_0),o.chmod(F0,z)}},createDevice(s,l,B,p){var h,_=f0.join2(typeof s=="string"?s:o.getPath(s),l),M=oA(!!B,!!p);(h=o.createDevice).major??(h.major=64);var z=o.makedev(o.createDevice.major++,0);return o.registerDevice(z,{open(F0){F0.seekable=!1},close(F0){p?.buffer?.length&&p(10)},read(F0,_0,xx,R0,I0){for(var h0=0,Cx=0;Cx<R0;Cx++){var $x;try{$x=B()}catch{throw new o.ErrnoError(29)}if($x===void 0&&h0===0)throw new o.ErrnoError(6);if($x==null)break;h0++,_0[xx+Cx]=$x}return h0&&(F0.node.atime=Date.now()),h0},write(F0,_0,xx,R0,I0){for(var h0=0;h0<R0;h0++)try{p(_0[xx+h0])}catch{throw new o.ErrnoError(29)}return R0&&(F0.node.mtime=F0.node.ctime=Date.now()),h0}}),o.mkdev(_,M,z)},forceLoadFile(s){if(s.isDevice||s.isFolder||s.link||s.contents)return!0;if(globalThis.XMLHttpRequest)d0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{s.contents=S(s.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(s,l,B,p,h){class _{constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get(I0){if(!(I0>this.length-1||I0<0)){var h0=I0%this.chunkSize,Cx=I0/this.chunkSize|0;return this.getter(Cx)[h0]}}setDataGetter(I0){this.getter=I0}cacheLength(){var I0=new XMLHttpRequest;I0.open("HEAD",B,!1),I0.send(null),I0.status>=200&&I0.status<300||I0.status===304||d0("Couldn't load "+B+". Status: "+I0.status);var h0=Number(I0.getResponseHeader("Content-length")),Cx,$x=(Cx=I0.getResponseHeader("Accept-Ranges"))&&Cx==="bytes",zx=(Cx=I0.getResponseHeader("Content-Encoding"))&&Cx==="gzip",AA=1024*1024;$x||(AA=h0);var eA=(FA,Te)=>{FA>Te&&d0("invalid range ("+FA+", "+Te+") or no bytes requested!"),Te>h0-1&&d0("only "+h0+" bytes available! programmer error!");var kx=new XMLHttpRequest;return kx.open("GET",B,!1),h0!==AA&&kx.setRequestHeader("Range","bytes="+FA+"-"+Te),kx.responseType="arraybuffer",kx.overrideMimeType&&kx.overrideMimeType("text/plain; charset=x-user-defined"),kx.send(null),kx.status>=200&&kx.status<300||kx.status===304||d0("Couldn't load "+B+". Status: "+kx.status),kx.response!==void 0?new Uint8Array(kx.response||[]):re(kx.responseText||"",!0)},xr=this;xr.setDataGetter(FA=>{var Te=FA*AA,kx=(FA+1)*AA-1;return kx=Math.min(kx,h0-1),typeof xr.chunks[FA]>"u"&&(xr.chunks[FA]=eA(Te,kx)),typeof xr.chunks[FA]>"u"&&d0("doXHR failed!"),xr.chunks[FA]}),(zx||!h0)&&(AA=h0=1,h0=this.getter(0).length,AA=h0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=h0,this._chunkSize=AA,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var M=new _,z={isDevice:!1,contents:M}}else var z={isDevice:!1,url:B};var F0=o.createFile(s,l,z,p,h);z.contents?F0.contents=z.contents:z.url&&(F0.contents=null,F0.url=z.url),Object.defineProperties(F0,{usedBytes:{get:function(){return this.contents.length}}});var _0={};for(let[R0,I0]of Object.entries(F0.stream_ops))_0[R0]=(...h0)=>(o.forceLoadFile(F0),I0(...h0));function xx(R0,I0,h0,Cx,$x){var zx=R0.node.contents;if($x>=zx.length)return 0;var AA=Math.min(zx.length-$x,Cx);if(zx.slice)for(var eA=0;eA<AA;eA++)I0[h0+eA]=zx[$x+eA];else for(var eA=0;eA<AA;eA++)I0[h0+eA]=zx.get($x+eA);return AA}return _0.read=(R0,I0,h0,Cx,$x)=>(o.forceLoadFile(F0),xx(R0,I0,h0,Cx,$x)),_0.mmap=(R0,I0,h0,Cx,$x)=>{o.forceLoadFile(F0);var zx=LA(I0);if(!zx)throw new o.ErrnoError(48);return xx(R0,cx,zx,I0,h0),{ptr:zx,allocated:!0}},F0.stream_ops=_0,F0}},w0={currentUmask:18,calculateAt(s,l,B){if(f0.isAbs(l))return l;var p;if(s===-100)p=o.cwd();else{var h=w0.getStreamFromFD(s);p=h.path}if(l.length==0){if(!B)throw new o.ErrnoError(44);return p}return p+"/"+l},writeStat(s,l){c0[s>>2]=l.dev,c0[s+4>>2]=l.mode,c0[s+8>>2]=l.nlink,c0[s+12>>2]=l.uid,c0[s+16>>2]=l.gid,c0[s+20>>2]=l.rdev,W0[s+24>>3]=BigInt(l.size),G0[s+32>>2]=4096,G0[s+36>>2]=l.blocks;var B=l.atime.getTime(),p=l.mtime.getTime(),h=l.ctime.getTime();return W0[s+40>>3]=BigInt(Math.floor(B/1e3)),c0[s+48>>2]=B%1e3*1e3*1e3,W0[s+56>>3]=BigInt(Math.floor(p/1e3)),c0[s+64>>2]=p%1e3*1e3*1e3,W0[s+72>>3]=BigInt(Math.floor(h/1e3)),c0[s+80>>2]=h%1e3*1e3*1e3,W0[s+88>>3]=BigInt(l.ino),0},writeStatFs(s,l){c0[s+4>>2]=l.bsize,c0[s+60>>2]=l.bsize,W0[s+8>>3]=BigInt(l.blocks),W0[s+16>>3]=BigInt(l.bfree),W0[s+24>>3]=BigInt(l.bavail),W0[s+32>>3]=BigInt(l.files),W0[s+40>>3]=BigInt(l.ffree),c0[s+48>>2]=l.fsid,c0[s+64>>2]=l.flags,c0[s+56>>2]=l.namelen},doMsync(s,l,B,p,h){if(!o.isFile(l.node.mode))throw new o.ErrnoError(43);if(p&2)return 0;var _=iA.slice(s,s+B);o.msync(l,_,h,B,p)},getStreamFromFD(s){var l=o.getStreamChecked(s);return l},varargs:void 0,getStr(s){var l=aA(s);return l}};function We(s,l,B,p){try{if(l=w0.getStr(l),l=w0.calculateAt(s,l),B&-8)return-28;var h=o.lookupPath(l,{follow:!0}),_=h.node;if(!_)return-44;var M="";return B&4&&(M+="r"),B&2&&(M+="w"),B&1&&(M+="x"),M&&o.nodePermissions(_,M)?-2:0}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}var GA=()=>{var s=G0[+w0.varargs>>2];return w0.varargs+=4,s},hA=GA;function ot(s,l,B){w0.varargs=B;try{var p=w0.getStreamFromFD(s);switch(l){case 0:{var h=GA();if(h<0)return-28;for(;o.streams[h];)h++;var _;return _=o.dupStream(p,h),_.fd}case 1:case 2:return 0;case 3:return p.flags;case 4:{var h=GA(),M=289792;return p.flags=p.flags&~M|h&M,0}case 12:{var h=hA(),z=0;return V0[h+z>>1]=2,0}case 13:case 14:return 0}return-28}catch(F0){if(typeof o>"u"||F0.name!=="ErrnoError")throw F0;return-F0.errno}}var ke=(s,l,B)=>Ke(s,iA,l,B);function pr(s,l){try{if(l===0)return-28;var B=o.cwd(),p=ee(B)+1;return l<p?-68:(ke(B,s,l),p)}catch(h){if(typeof o>"u"||h.name!=="ErrnoError")throw h;return-h.errno}}function br(s,l,B){w0.varargs=B;try{var p=w0.getStreamFromFD(s);switch(l){case 21509:return p.tty?0:-59;case 21505:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcgets){var h=p.tty.ops.ioctl_tcgets(p),_=hA();G0[_>>2]=h.c_iflag||0,G0[_+4>>2]=h.c_oflag||0,G0[_+8>>2]=h.c_cflag||0,G0[_+12>>2]=h.c_lflag||0;for(var M=0;M<32;M++)cx[_+M+17]=h.c_cc[M]||0;return 0}return 0}case 21510:case 21511:case 21512:return p.tty?0:-59;case 21506:case 21507:case 21508:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcsets){for(var _=hA(),z=G0[_>>2],F0=G0[_+4>>2],_0=G0[_+8>>2],xx=G0[_+12>>2],R0=[],M=0;M<32;M++)R0.push(cx[_+M+17]);return p.tty.ops.ioctl_tcsets(p.tty,l,{c_iflag:z,c_oflag:F0,c_cflag:_0,c_lflag:xx,c_cc:R0})}return 0}case 21519:{if(!p.tty)return-59;var _=hA();return G0[_>>2]=0,0}case 21520:return p.tty?-28:-59;case 21537:case 21531:{var _=hA();return o.ioctl(p,l,_)}case 21523:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tiocgwinsz){var I0=p.tty.ops.ioctl_tiocgwinsz(p.tty),_=hA();V0[_>>1]=I0[0],V0[_+2>>1]=I0[1]}return 0}case 21524:return p.tty?0:-59;case 21515:return p.tty?0:-59;default:return-28}}catch(h0){if(typeof o>"u"||h0.name!=="ErrnoError")throw h0;return-h0.errno}}function Ft(s,l,B,p){w0.varargs=p;try{l=w0.getStr(l),l=w0.calculateAt(s,l);var h=p?GA():0;return B&64&&(h&=~w0.currentUmask),o.open(l,B,h).fd}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return-_.errno}}function vt(s,l,B,p){try{if(l=w0.getStr(l),l=w0.calculateAt(s,l),p<=0)return-28;var h=o.readlink(l),_=Math.min(p,ee(h)),M=cx[B+_];return ke(h,B,p+1),cx[B+_]=M,_}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}function lt(s,l,B,p){try{return l=w0.getStr(l),p=w0.getStr(p),l=w0.calculateAt(s,l),p=w0.calculateAt(B,p),o.rename(l,p),0}catch(h){if(typeof o>"u"||h.name!=="ErrnoError")throw h;return-h.errno}}function we(s){try{return s=w0.getStr(s),o.rmdir(s),0}catch(l){if(typeof o>"u"||l.name!=="ErrnoError")throw l;return-l.errno}}function mr(s,l,B){try{if(l=w0.getStr(l),l=w0.calculateAt(s,l),!B)o.unlink(l);else if(B===512)o.rmdir(l);else return-28;return 0}catch(p){if(typeof o>"u"||p.name!=="ErrnoError")throw p;return-p.errno}}var te=()=>{throw new Z},_e=()=>performance.now(),ct=()=>Date.now(),hr=1,ft=s=>s>=0&&s<=3,ne=9007199254740992,Xe=-9007199254740992,jr=s=>s<Xe||s>ne?NaN:Number(s);function gr(s,l,B){if(l=jr(l),!ft(s))return 28;var p;if(s===0)p=ct();else if(hr)p=_e();else return 52;var h=Math.round(p*1e3*1e3);return W0[B>>3]=BigInt(h),0}var Et=()=>2147483648,yr=(s,l)=>Math.ceil(s/l)*l,Bt=s=>{var l=M0.buffer.byteLength,B=(s-l+65535)/65536|0;try{return M0.grow(B),Q(),1}catch{}},Ct=s=>{var l=iA.length;s>>>=0;var B=Et();if(s>B)return!1;for(var p=1;p<=4;p*=2){var h=l*(1+.2/p);h=Math.min(h,s+100663296);var _=Math.min(B,yr(Math.max(s,h),65536)),M=Bt(_);if(M)return!0}return!1};function Se(s){try{var l=w0.getStreamFromFD(s);return o.close(l),0}catch(B){if(typeof o>"u"||B.name!=="ErrnoError")throw B;return B.errno}}var dt=(s,l,B,p)=>{for(var h=0,_=0;_<B;_++){var M=c0[l>>2],z=c0[l+4>>2];l+=8;var F0=o.read(s,cx,M,z,p);if(F0<0)return-1;if(h+=F0,F0<z)break;typeof p<"u"&&(p+=F0)}return h};function ut(s,l,B,p){try{var h=w0.getStreamFromFD(s),_=dt(h,l,B);return c0[p>>2]=_,0}catch(M){if(typeof o>"u"||M.name!=="ErrnoError")throw M;return M.errno}}function kr(s,l,B,p){l=jr(l);try{if(isNaN(l))return 22;var h=w0.getStreamFromFD(s);return o.llseek(h,l,B),W0[p>>3]=BigInt(h.position),h.getdents&&l===0&&B===0&&(h.getdents=null),0}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return _.errno}}var wr=(s,l,B,p)=>{for(var h=0,_=0;_<B;_++){var M=c0[l>>2],z=c0[l+4>>2];l+=8;var F0=o.write(s,cx,M,z,p);if(F0<0)return-1;if(h+=F0,F0<z)break;typeof p<"u"&&(p+=F0)}return h};function ie(s,l,B,p){try{var h=w0.getStreamFromFD(s),_=wr(h,l,B);return c0[p>>2]=_,0}catch(M){if(typeof o>"u"||M.name!=="ErrnoError")throw M;return M.errno}}var _r=0,se=()=>ge||_r>0,Ye=s=>{I=s,se()||(n.onExit?.(s),e0=!0),m(s,new nA(s))},Ix=(s,l)=>{I=s,se()||l0(),Ye(s)},Dt=s=>{if(s instanceof nA||s=="unwind")return I;m(1,s)},UA=s=>V(s),ae=s=>{var l=ee(s)+1,B=UA(l);return ke(s,B,l),B},Qe=[],Dx=s=>{var l=Qe[s];return l||(Qe[s]=l=T0.get(s)),l},$e=(...s)=>o.createPath(...s),oe=(...s)=>o.unlink(...s),a=(...s)=>o.createLazyFile(...s),c=(...s)=>o.createDevice(...s);if(o.createPreloadedFile=at,o.preloadFile=OA,o.staticInit(),n.noExitRuntime&&(ge=n.noExitRuntime),n.preloadPlugins&&(ye=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(D=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=rn,n.addRunDependency=Nx,n.removeRunDependency=Ve,n.FS_preloadFile=OA,n.FS_unlink=oe,n.FS_createPath=$e,n.FS_createDevice=c,n.FS=o,n.FS_createDataFile=ze,n.FS_createLazyFile=a,n.PROXYFS=k0;var d,b,y,$,G,V,o0,D0,X0,M0,T0;function m0(s){d=n._main=s.__main_argc_argv,b=s.fflush,y=s.__funcs_on_exit,$=s.setThrew,G=s._emscripten_stack_restore,V=s._emscripten_stack_alloc,o0=s.emscripten_stack_get_current,D0=M0=s.memory,X0=T0=s.__indirect_function_table}var ix={__assert_fail:MA,__syscall_faccessat:We,__syscall_fcntl64:ot,__syscall_getcwd:pr,__syscall_ioctl:br,__syscall_openat:Ft,__syscall_readlinkat:vt,__syscall_renameat:lt,__syscall_rmdir:we,__syscall_unlinkat:mr,_emscripten_throw_longjmp:te,clock_time_get:gr,emscripten_resize_heap:Ct,fd_close:Se,fd_read:ut,fd_seek:kr,fd_write:ie,invoke_i:Fe,invoke_ii:Gx,invoke_iii:Ux,invoke_iiid:Ci,invoke_iiii:Kx,invoke_iiiii:fx,invoke_iiiiii:di,invoke_iijii:Ei,invoke_v:yx,invoke_vi:Bi,invoke_vii:Mx,invoke_viii:en,invoke_viiii:jA,invoke_viiiii:An};function yx(s){var l=y0();try{Dx(s)()}catch(B){if(ox(l),!(B instanceof L))throw B;$(1,0)}}function Mx(s,l,B){var p=y0();try{Dx(s)(l,B)}catch(h){if(ox(p),!(h instanceof L))throw h;$(1,0)}}function Gx(s,l){var B=y0();try{return Dx(s)(l)}catch(p){if(ox(B),!(p instanceof L))throw p;$(1,0)}}function Ux(s,l,B){var p=y0();try{return Dx(s)(l,B)}catch(h){if(ox(p),!(h instanceof L))throw h;$(1,0)}}function Fe(s){var l=y0();try{return Dx(s)()}catch(B){if(ox(l),!(B instanceof L))throw B;$(1,0)}}function Kx(s,l,B,p){var h=y0();try{return Dx(s)(l,B,p)}catch(_){if(ox(h),!(_ instanceof L))throw _;$(1,0)}}function jA(s,l,B,p,h){var _=y0();try{Dx(s)(l,B,p,h)}catch(M){if(ox(_),!(M instanceof L))throw M;$(1,0)}}function fx(s,l,B,p,h){var _=y0();try{return Dx(s)(l,B,p,h)}catch(M){if(ox(_),!(M instanceof L))throw M;$(1,0)}}function An(s,l,B,p,h,_){var M=y0();try{Dx(s)(l,B,p,h,_)}catch(z){if(ox(M),!(z instanceof L))throw z;$(1,0)}}function Ei(s,l,B,p,h){var _=y0();try{return Dx(s)(l,B,p,h)}catch(M){if(ox(_),!(M instanceof L))throw M;$(1,0)}}function Bi(s,l){var B=y0();try{Dx(s)(l)}catch(p){if(ox(B),!(p instanceof L))throw p;$(1,0)}}function en(s,l,B,p){var h=y0();try{Dx(s)(l,B,p)}catch(_){if(ox(h),!(_ instanceof L))throw _;$(1,0)}}function Ci(s,l,B,p){var h=y0();try{return Dx(s)(l,B,p)}catch(_){if(ox(h),!(_ instanceof L))throw _;$(1,0)}}function di(s,l,B,p,h,_){var M=y0();try{return Dx(s)(l,B,p,h,_)}catch(z){if(ox(M),!(z instanceof L))throw z;$(1,0)}}function rn(s=[]){var l=d;s.unshift(D);var B=s.length,p=UA((B+1)*4),h=p;for(var _ of s)c0[h>>2]=ae(_),h+=4;c0[h>>2]=0;try{var M=l(B,p);return Ix(M,!0),M}catch(z){return Dt(z)}}function pt(s=u){if(Bx>0){b0=pt;return}if(s0(),Bx>0){b0=pt;return}function l(){if(n.calledRun=!0,!e0){H(),U?.(n),n.onRuntimeInitialized?.();var B=n.noInitialRun||!0;B||rn(s),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l()}var Ze;return Ze=await tx(),pt(),a0?i=n:i=new Promise((s,l)=>{U=s,J=l}),i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),NE=Ho({"wasm/bin/pawndbg.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var i,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],D="./this.program",m=(a,c)=>{throw c};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var w="",j,S;if(E){var P=require("fs");w=__dirname+"/",S=a=>{a=k(a)?new URL(a):a;var c=P.readFileSync(a);return c},j=async(a,c=!0)=>{a=k(a)?new URL(a):a;var d=P.readFileSync(a,c?void 0:"utf8");return d},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(a,c)=>{throw process.exitCode=a,c}}else if(F||v){try{w=new URL(".",r).href}catch{}v&&(S=a=>{var c=new XMLHttpRequest;return c.open("GET",a,!1),c.responseType="arraybuffer",c.send(null),new Uint8Array(c.response)}),j=async a=>{if(k(a))return new Promise((d,b)=>{var y=new XMLHttpRequest;y.open("GET",a,!0),y.responseType="arraybuffer",y.onload=()=>{if(y.status==200||y.status==0&&y.response){d(y.response);return}b(y.status)},y.onerror=b,y.send(null)});var c=await fetch(a,{credentials:"same-origin"});if(c.ok)return c.arrayBuffer();throw new Error(c.status+" : "+c.url)}}var N=console.log.bind(console),R=console.error.bind(console),O,e0=!1,I,k=a=>a.startsWith("file://");class L{}class Z extends L{}function W(a){for(var c=0,d=a.length,b=new Uint8Array(d),y;c<d;++c)y=a.charCodeAt(c),b[c]=~y>>8&y;return b}var U,J,a0=!1,i0=!1;function Q(){var a=UA.buffer;cx=new Int8Array(a),V0=new Int16Array(a),iA=new Uint8Array(a),tt=new Uint16Array(a),G0=new Int32Array(a),c0=new Uint32Array(a),et=new Float32Array(a),rt=new Float64Array(a),W0=new BigInt64Array(a),nt=new BigUint64Array(a)}function s0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)Dr(n.preRun.shift());NA(Zx)}function H(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),nx.init(),oe.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function l0(){wr(),o.quit(),nx.shutdown(),i0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)ur(n.postRun.shift());NA(IA)}function d0(a){n.onAbort?.(a),a=`Aborted(${a})`,R(a),e0=!0,a+=". Build with -sASSERTIONS for more info.";var c=new WebAssembly.RuntimeError(a);throw J?.(c),c}var $0;function q0(){return W(`\0asm\0\0\0\xB4\`\x7F\x7F\`\x7F\0\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\x7F~~~~\0\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\0\`\x7F~\x7F~\`\x7F\x7F\x7F\x7F\0\`\0\0\`\0\x7F\`\x7F~~\x7F\0\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F~\x7F\x7F\x7F\`\x7F\x7F|\0\`\x7F~\0\`\x7F|\`\x7F~~~\0\`\x7F~\`|\x7F|\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F~\0\`~~~~\x7F\`~~~\x7F\`\x7F|\0\xFD env\r__assert_fail\0 env__syscall_openat\0env__syscall_fcntl64\0env__syscall_ioctl\0wasi_snapshot_preview1\bfd_write\0wasi_snapshot_preview1\x07fd_read\0wasi_snapshot_preview1\bfd_close\0\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\0VU
1163
1163
  
1164
1164
  \0\x07\v\v\0\b\0\0 \x07\0 \0\b\0\0\f\0\0\r\0\0\x07\0\f\x1B\x07\x07\f\0\v
1165
1165
  p\r\r\x07\x82\x80\x80\b\x7FA\x80\xAC\v\x07\xBD memory\0__wasm_call_ctors\0 __main_argc_argv\0
@@ -1523,8 +1523,8 @@ Usage: pawndbg -f <mapfile> [options]
1523
1523
  \v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF
1524
1524
  \v\f\r\x1B !"#\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x07\0A\xC0\x1B\v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0\0\0A\xE4\x1B\v\x07\0A\xFC\x1B\v
1525
1525
  \0\0\0\0\0\0\xEC\0A\x94\v\0A\xA4\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xE8\v \xD8\r\0\0\0\0\0\0\0A\xFC\v\b\0A\x94\v\0\0\0 \0\0\0\xF8\0\0\0\0A\xAC\v\0A\xBC\v\xFF\xFF\xFF\xFF
1526
- \0A\x80\v\vp\0\0D\0\0\0`)}function Ex(a){return a}async function Xx(a){return a}async function TA(a,c){try{var d=await Xx(a),b=await WebAssembly.instantiate(d,c);return b}catch(y){O(`failed to asynchronously prepare wasm: ${y}`),d0(y)}}async function PA(a,c,d){return TA(c,d)}function lx(){var a={env:Ye,wasi_snapshot_preview1:Ye};return a}async function tx(){function a($,G){return ae=$.exports,ie(ae),Z(),ae}function c($){return a($.instance)}var d=lx();if(n.instantiateWasm)return new Promise(($,G)=>{n.instantiateWasm(d,(W,o0)=>{$(a(W,o0))})});$0??($0=L0());var b=await PA(L,$0,d),y=c(b);return y}class tA{constructor(c){bx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${c})`,this.status=c}}var V0,G0,W0,cx,et,rt,tt,l0,nt,nA,qA=a=>{for(;a.length>0;)a.shift()(n)},NA=[],dr=a=>NA.push(a),Yx=[],ur=a=>Yx.push(a),je=!1,ox=globalThis.TextDecoder&&new TextDecoder,y0=(a,c,d,b)=>{var y=c+d;if(b)return y;for(;a[c]&&!(c>=y);)++c;return c},sA=(a,c=0,d,b)=>{var y=y0(a,c,d,b);if(y-c>16&&a.buffer&&ox)return ox.decode(a.subarray(c,y));for(var $="";c<y;){var G=a[c++];if(!(G&128)){$+=String.fromCharCode(G);continue}var W=a[c++]&63;if((G&224)==192){$+=String.fromCharCode((G&31)<<6|W);continue}var o0=a[c++]&63;if((G&240)==224?G=(G&15)<<12|W<<6|o0:G=(G&7)<<18|W<<12|o0<<6|a[c++]&63,G<65536)$+=String.fromCharCode(G);else{var D0=G-65536;$+=String.fromCharCode(55296|D0>>10,56320|D0&1023)}}return $},gx=(a,c,d)=>a?sA(nA,a,c,d):"",DA=(a,c,d,b)=>d0(`Assertion failed: ${gx(a)}, at: `+[c?gx(c):"unknown filename",d,b?gx(b):"unknown function"]),iA=()=>{var a=G0[+w0.varargs>>2];return w0.varargs+=4,a},IA=iA,f0={isAbs:a=>a.charAt(0)==="/",splitPath:a=>{var c=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return c.exec(a).slice(1)},normalizeArray:(a,c)=>{for(var d=0,b=a.length-1;b>=0;b--){var y=a[b];y==="."?a.splice(b,1):y===".."?(a.splice(b,1),d++):d&&(a.splice(b,1),d--)}if(c)for(;d;d--)a.unshift("..");return a},normalize:a=>{var c=f0.isAbs(a),d=a.slice(-1)==="/";return a=f0.normalizeArray(a.split("/").filter(b=>!!b),!c).join("/"),!a&&!c&&(a="."),a&&d&&(a+="/"),(c?"/":"")+a},dirname:a=>{var c=f0.splitPath(a),d=c[0],b=c[1];return!d&&!b?".":(b&&(b=b.slice(0,-1)),d+b)},basename:a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],join:(...a)=>f0.normalize(a.join("/")),join2:(a,c)=>f0.normalize(a+"/"+c)},st=()=>{if(E){var a=require("crypto");return c=>a.randomFillSync(c)}return c=>(crypto.getRandomValues(c),0)},He=a=>(He=st())(a),dx={resolve:(...a)=>{for(var c="",d=!1,b=a.length-1;b>=-1&&!d;b--){var y=b>=0?a[b]:o.cwd();if(typeof y!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!y)return"";c=y+"/"+c,d=f0.isAbs(y)}return c=f0.normalizeArray(c.split("/").filter($=>!!$),!d).join("/"),(d?"/":"")+c||"."},relative:(a,c)=>{a=dx.resolve(a).slice(1),c=dx.resolve(c).slice(1);function d(D0){for(var X0=0;X0<D0.length&&D0[X0]==="";X0++);for(var I0=D0.length-1;I0>=0&&D0[I0]==="";I0--);return X0>I0?[]:D0.slice(X0,I0-X0+1)}for(var b=d(a.split("/")),y=d(c.split("/")),$=Math.min(b.length,y.length),G=$,W=0;W<$;W++)if(b[W]!==y[W]){G=W;break}for(var o0=[],W=G;W<b.length;W++)o0.push("..");return o0=o0.concat(y.slice(G)),o0.join("/")}},Hx=[],Ae=a=>{for(var c=0,d=0;d<a.length;++d){var b=a.charCodeAt(d);b<=127?c++:b<=2047?c+=2:b>=55296&&b<=57343?(c+=4,++d):c+=3}return c},Je=(a,c,d,b)=>{if(!(b>0))return 0;for(var y=d,$=d+b-1,G=0;G<a.length;++G){var W=a.codePointAt(G);if(W<=127){if(d>=$)break;c[d++]=W}else if(W<=2047){if(d+1>=$)break;c[d++]=192|W>>6,c[d++]=128|W&63}else if(W<=65535){if(d+2>=$)break;c[d++]=224|W>>12,c[d++]=128|W>>6&63,c[d++]=128|W&63}else{if(d+3>=$)break;c[d++]=240|W>>18,c[d++]=128|W>>12&63,c[d++]=128|W>>6&63,c[d++]=128|W&63,G++}}return c[d]=0,d-y},ee=(a,c,d)=>{var b=d>0?d:Ae(a)+1,y=new Array(b),$=Je(a,y,0,y.length);return c&&(y.length=$),y},it=()=>{if(!Hx.length){var a=null;if(E){var c=256,d=Buffer.alloc(c),b=0,y=process.stdin.fd;try{b=P.readSync(y,d,0,c)}catch($){if($.toString().includes("EOF"))b=0;else throw $}b>0&&(a=d.slice(0,b).toString("utf-8"))}else globalThis.window?.prompt&&(a=window.prompt("Input: "),a!==null&&(a+=`
1527
- `));if(!a)return null;Hx=ee(a,!0)}return Hx.shift()},nx={ttys:[],init(){},shutdown(){},register(a,c){nx.ttys[a]={input:[],output:[],ops:c},o.registerDevice(a,nx.stream_ops)},stream_ops:{open(a){var c=nx.ttys[a.node.rdev];if(!c)throw new o.ErrnoError(43);a.tty=c,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,c,d,b,y){if(!a.tty||!a.tty.ops.get_char)throw new o.ErrnoError(60);for(var $=0,G=0;G<b;G++){var W;try{W=a.tty.ops.get_char(a.tty)}catch{throw new o.ErrnoError(29)}if(W===void 0&&$===0)throw new o.ErrnoError(6);if(W==null)break;$++,c[d+G]=W}return $&&(a.node.atime=Date.now()),$},write(a,c,d,b,y){if(!a.tty||!a.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var $=0;$<b;$++)a.tty.ops.put_char(a.tty,c[d+$])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),$}},default_tty_ops:{get_char(a){return it()},put_char(a,c){c===null||c===10?(N(sA(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){a.output?.length>0&&(N(sA(a.output)),a.output=[])},ioctl_tcgets(a){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(a,c,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,c){c===null||c===10?(O(sA(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){a.output?.length>0&&(O(sA(a.output)),a.output=[])}}},MA=a=>{d0()},i0={ops_table:null,mount(a){return i0.createNode(null,"/",16895,0)},createNode(a,c,d,b){if(o.isBlkdev(d)||o.isFIFO(d))throw new o.ErrnoError(63);i0.ops_table||(i0.ops_table={dir:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,lookup:i0.node_ops.lookup,mknod:i0.node_ops.mknod,rename:i0.node_ops.rename,unlink:i0.node_ops.unlink,rmdir:i0.node_ops.rmdir,readdir:i0.node_ops.readdir,symlink:i0.node_ops.symlink},stream:{llseek:i0.stream_ops.llseek}},file:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:{llseek:i0.stream_ops.llseek,read:i0.stream_ops.read,write:i0.stream_ops.write,mmap:i0.stream_ops.mmap,msync:i0.stream_ops.msync}},link:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,readlink:i0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:o.chrdev_stream_ops}});var y=o.createNode(a,c,d,b);return o.isDir(y.mode)?(y.node_ops=i0.ops_table.dir.node,y.stream_ops=i0.ops_table.dir.stream,y.contents={}):o.isFile(y.mode)?(y.node_ops=i0.ops_table.file.node,y.stream_ops=i0.ops_table.file.stream,y.usedBytes=0,y.contents=i0.emptyFileContents??(i0.emptyFileContents=new Uint8Array(0))):o.isLink(y.mode)?(y.node_ops=i0.ops_table.link.node,y.stream_ops=i0.ops_table.link.stream):o.isChrdev(y.mode)&&(y.node_ops=i0.ops_table.chrdev.node,y.stream_ops=i0.ops_table.chrdev.stream),y.atime=y.mtime=y.ctime=Date.now(),a&&(a.contents[c]=y,a.atime=a.mtime=a.ctime=y.atime),y},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,c){var d=a.contents.length;if(!(d>=c)){var b=1024*1024;c=Math.max(c,d*(d<b?2:1.125)>>>0),d&&(c=Math.max(c,256));var y=i0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(c),a.contents.set(y)}},resizeFileStorage(a,c){if(a.usedBytes!=c){var d=a.contents;a.contents=new Uint8Array(c),a.contents.set(d.subarray(0,Math.min(c,a.usedBytes))),a.usedBytes=c}},node_ops:{getattr(a){var c={};return c.dev=o.isChrdev(a.mode)?a.id:1,c.ino=a.id,c.mode=a.mode,c.nlink=1,c.uid=0,c.gid=0,c.rdev=a.rdev,o.isDir(a.mode)?c.size=4096:o.isFile(a.mode)?c.size=a.usedBytes:o.isLink(a.mode)?c.size=a.link.length:c.size=0,c.atime=new Date(a.atime),c.mtime=new Date(a.mtime),c.ctime=new Date(a.ctime),c.blksize=4096,c.blocks=Math.ceil(c.size/c.blksize),c},setattr(a,c){for(let d of["mode","atime","mtime","ctime"])c[d]!=null&&(a[d]=c[d]);c.size!==void 0&&i0.resizeFileStorage(a,c.size)},lookup(a,c){throw i0.doesNotExistError||(i0.doesNotExistError=new o.ErrnoError(44),i0.doesNotExistError.stack="<generic error, no stack>"),i0.doesNotExistError},mknod(a,c,d,b){return i0.createNode(a,c,d,b)},rename(a,c,d){var b;try{b=o.lookupNode(c,d)}catch{}if(b){if(o.isDir(a.mode))for(var y in b.contents)throw new o.ErrnoError(55);o.hashRemoveNode(b)}delete a.parent.contents[a.name],c.contents[d]=a,a.name=d,c.ctime=c.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,c){delete a.contents[c],a.ctime=a.mtime=Date.now()},rmdir(a,c){var d=o.lookupNode(a,c);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[c],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,c,d){var b=i0.createNode(a,c,41471,0);return b.link=d,b},readlink(a){if(!o.isLink(a.mode))throw new o.ErrnoError(28);return a.link}},stream_ops:{read(a,c,d,b,y){var $=a.node.contents;if(y>=a.node.usedBytes)return 0;var G=Math.min(a.node.usedBytes-y,b);return c.set($.subarray(y,y+G),d),G},write(a,c,d,b,y,$){if(c.buffer===cx.buffer&&($=!1),!b)return 0;var G=a.node;return G.mtime=G.ctime=Date.now(),$?(G.contents=c.subarray(d,d+b),G.usedBytes=b):G.usedBytes===0&&y===0?(G.contents=c.slice(d,d+b),G.usedBytes=b):(i0.expandFileStorage(G,y+b),G.contents.set(c.subarray(d,d+b),y),G.usedBytes=Math.max(G.usedBytes,y+b)),b},llseek(a,c,d){var b=c;if(d===1?b+=a.position:d===2&&o.isFile(a.node.mode)&&(b+=a.node.usedBytes),b<0)throw new o.ErrnoError(28);return b},mmap(a,c,d,b,y){if(!o.isFile(a.node.mode))throw new o.ErrnoError(43);var $,G,W=a.node.contents;if(!(y&2)&&W.buffer===cx.buffer)G=!1,$=W.byteOffset;else{if(G=!0,$=MA(c),!$)throw new o.ErrnoError(48);W&&((d>0||d+c<W.length)&&(W.subarray?W=W.subarray(d,d+c):W=Array.prototype.slice.call(W,d,d+c)),cx.set(W,$))}return{ptr:$,allocated:G}},msync(a,c,d,b,y){return i0.stream_ops.write(a,c,0,b,d,!1),0}}},LA=a=>{if(typeof a!="string")return a;var c={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=c[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},Qx=a=>(typeof a=="string"&&(a=ee(a,!0)),a.subarray||(a=new Uint8Array(a)),a),aA=(a,c)=>{var d=0;return a&&(d|=365),c&&(d|=146),d},q0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},k0={mount(a){return k0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,c,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(q0.EINVAL);var y=o.createNode(a,c,d);return y.node_ops=k0.node_ops,y.stream_ops=k0.stream_ops,y},realPath(a){for(var c=[];a.parent!==a;)c.push(a.name),a=a.parent;return c.push(a.mount.opts.root),c.reverse(),f0.join(...c)},node_ops:{getattr(a){var c=k0.realPath(a),d;try{d=a.mount.opts.fs.lstat(c)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}return{dev:d.dev,ino:d.ino,mode:d.mode,nlink:d.nlink,uid:d.uid,gid:d.gid,rdev:d.rdev,size:d.size,atime:d.atime,mtime:d.mtime,ctime:d.ctime,blksize:d.blksize,blocks:d.blocks}},setattr(a,c){var d=k0.realPath(a);try{if(c.mode!==void 0&&(a.mount.opts.fs.chmod(d,c.mode),a.mode=c.mode),c.atime||c.mtime){var b=new Date(c.atime||c.mtime),y=new Date(c.mtime||c.atime);a.mount.opts.fs.utime(d,b,y)}c.size!==void 0&&a.mount.opts.fs.truncate(d,c.size)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},lookup(a,c){try{var d=f0.join2(k0.realPath(a),c),b=a.mount.opts.fs.lstat(d).mode,y=k0.createNode(a,c,b);return y}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},mknod(a,c,d,b){var y=k0.createNode(a,c,d,b),$=k0.realPath(y);try{o.isDir(y.mode)?y.mount.opts.fs.mkdir($,y.mode):y.mount.opts.fs.writeFile($,"",{mode:y.mode})}catch(G){throw G.code?new o.ErrnoError(q0[G.code]):G}return y},rename(a,c,d){var b=k0.realPath(a),y=f0.join2(k0.realPath(c),d);try{a.mount.opts.fs.rename(b,y),a.name=d}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},unlink(a,c){var d=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},rmdir(a,c){var d=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},readdir(a){var c=k0.realPath(a);try{return a.mount.opts.fs.readdir(c)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},symlink(a,c,d){var b=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.symlink(d,b)}catch(y){throw y.code?new o.ErrnoError(q0[y.code]):y}},readlink(a){var c=k0.realPath(a);try{return a.mount.opts.fs.readlink(c)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}}},stream_ops:{open(a){var c=k0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(c,a.flags)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},close(a){try{a.node.mount.opts.fs.close(a.nfd)}catch(c){throw c.code?new o.ErrnoError(q0[c.code]):c}},read(a,c,d,b,y){try{return a.node.mount.opts.fs.read(a.nfd,c,d,b,y)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},write(a,c,d,b,y){try{return a.node.mount.opts.fs.write(a.nfd,c,d,b,y)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},llseek(a,c,d){var b=c;if(d===1)b+=a.position;else if(d===2&&o.isFile(a.node.mode))try{var y=a.node.node_ops.getattr(a.node);b+=y.size}catch($){throw new o.ErrnoError(q0[$.code])}if(b<0)throw new o.ErrnoError(q0.EINVAL);return b}}},pA=async a=>{var c=await j(a);return new Uint8Array(c)},Ke=(...a)=>o.createDataFile(...a),ux=a=>a,Bx=0,b0=null,ze=a=>{if(Bx--,n.monitorRunDependencies?.(Bx),Bx==0&&b0){var c=b0;b0=null,c()}},qx=a=>{Bx++,n.monitorRunDependencies?.(Bx)},ge=[],bA=async(a,c)=>{typeof Browser<"u"&&Browser.init();for(var d of ge)if(d.canHandle(c))return d.handle(a,c);return a},RA=async(a,c,d,b,y,$,G,W)=>{var o0=c?dx.resolve(f0.join2(a,c)):a,D0=ux(`cp ${o0}`);qx(D0);try{var X0=d;typeof d=="string"&&(X0=await pA(d)),X0=await bA(X0,o0),W?.(),$||Ke(a,c,X0,b,y,G)}finally{ze(D0)}},at=(a,c,d,b,y,$,G,W,o0,D0)=>{RA(a,c,d,b,y,W,o0,D0).then($).catch(G)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(a){bx(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(a){this.node=a}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},FSNode:class{constructor(a,c,d,b){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=c,this.mode=d,this.rdev=b,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(a){a?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(a){a?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(a,c={}){if(!a)throw new o.ErrnoError(44);c.follow_mount??(c.follow_mount=!0),f0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(D0=>!!D0),y=o.root,$="/",G=0;G<b.length;G++){var W=G===b.length-1;if(W&&c.parent)break;if(b[G]!=="."){if(b[G]===".."){if($=f0.dirname($),o.isRoot(y)){a=$+"/"+b.slice(G+1).join("/"),d--;continue x}else y=y.parent;continue}$=f0.join2($,b[G]);try{y=o.lookupNode(y,b[G])}catch(D0){if(D0?.errno===44&&W&&c.noent_okay)return{path:$};throw D0}if(o.isMountpoint(y)&&(!W||c.follow_mount)&&(y=y.mounted.root),o.isLink(y.mode)&&(!W||c.follow)){if(!y.node_ops.readlink)throw new o.ErrnoError(52);var o0=y.node_ops.readlink(y);f0.isAbs(o0)||(o0=f0.dirname($)+"/"+o0),a=o0+"/"+b.slice(G+1).join("/");continue x}}}return{path:$,node:y}}throw new o.ErrnoError(32)},getPath(a){for(var c;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return c?d[d.length-1]!=="/"?`${d}/${c}`:d+c:d}c=c?`${a.name}/${c}`:a.name,a=a.parent}},hashName(a,c){for(var d=0,b=0;b<c.length;b++)d=(d<<5)-d+c.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var c=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[c],o.nameTable[c]=a},hashRemoveNode(a){var c=o.hashName(a.parent.id,a.name);if(o.nameTable[c]===a)o.nameTable[c]=a.name_next;else for(var d=o.nameTable[c];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,c){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,c),y=o.nameTable[b];y;y=y.name_next){var $=y.name;if(y.parent.id===a.id&&$===c)return y}return o.lookup(a,c)},createNode(a,c,d,b){var y=new o.FSNode(a,c,d,b);return o.hashAddNode(y),y},destroyNode(a){o.hashRemoveNode(a)},isRoot(a){return a===a.parent},isMountpoint(a){return!!a.mounted},isFile(a){return(a&61440)===32768},isDir(a){return(a&61440)===16384},isLink(a){return(a&61440)===40960},isChrdev(a){return(a&61440)===8192},isBlkdev(a){return(a&61440)===24576},isFIFO(a){return(a&61440)===4096},isSocket(a){return(a&49152)===49152},flagsToPermissionString(a){var c=["r","w","rw"][a&3];return a&512&&(c+="w"),c},nodePermissions(a,c){return o.ignorePermissions?0:c.includes("r")&&!(a.mode&292)||c.includes("w")&&!(a.mode&146)||c.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var c=o.nodePermissions(a,"x");return c||(a.node_ops.lookup?0:2)},mayCreate(a,c){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,c);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,c,d){var b;try{b=o.lookupNode(a,c)}catch($){return $.errno}var y=o.nodePermissions(a,"wx");if(y)return y;if(d){if(!o.isDir(b.mode))return 54;if(o.isRoot(b)||o.getPath(b)===o.cwd())return 10}else if(o.isDir(b.mode))return 31;return 0},mayOpen(a,c){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(c);return o.isDir(a.mode)&&(d!=="r"||c&576)?31:o.nodePermissions(a,d)},checkOpExists(a,c){if(!a)throw new o.ErrnoError(c);return a},MAX_OPEN_FDS:4096,nextfd(){for(var a=0;a<=o.MAX_OPEN_FDS;a++)if(!o.streams[a])return a;throw new o.ErrnoError(33)},getStreamChecked(a){var c=o.getStream(a);if(!c)throw new o.ErrnoError(8);return c},getStream:a=>o.streams[a],createStream(a,c=-1){return a=Object.assign(new o.FSStream,a),c==-1&&(c=o.nextfd()),a.fd=c,o.streams[c]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,c=-1){var d=o.createStream(a,c);return d.stream_ops?.dup?.(d),d},doSetAttr(a,c,d){var b=a?.stream_ops.setattr,y=b?a:c;b??(b=c.node_ops.setattr),o.checkOpExists(b,63);try{b(y,d)}catch($){throw $ instanceof RangeError?new o.ErrnoError(22):$}},chrdev_stream_ops:{open(a){var c=o.getDevice(a.node.rdev);a.stream_ops=c.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,c)=>a<<8|c,registerDevice(a,c){o.devices[a]={stream_ops:c}},getDevice:a=>o.devices[a],getMounts(a){for(var c=[],d=[a];d.length;){var b=d.pop();c.push(b),d.push(...b.mounts)}return c},syncfs(a,c){typeof a=="function"&&(c=a,a=!1),o.syncFSRequests++,o.syncFSRequests>1&&O(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var d=o.getMounts(o.root.mount),b=0;function y(W){return o.syncFSRequests--,c(W)}function $(W){if(W)return $.errored?void 0:($.errored=!0,y(W));++b>=d.length&&y(null)}for(var G of d)G.type.syncfs?G.type.syncfs(G,a,$):$(null)},mount(a,c,d){var b=d==="/",y=!d,$;if(b&&o.root)throw new o.ErrnoError(10);if(!b&&!y){var G=o.lookupPath(d,{follow_mount:!1});if(d=G.path,$=G.node,o.isMountpoint($))throw new o.ErrnoError(10);if(!o.isDir($.mode))throw new o.ErrnoError(54)}var W={type:a,opts:c,mountpoint:d,mounts:[]},o0=a.mount(W);return o0.mount=W,W.root=o0,b?o.root=o0:$&&($.mounted=W,$.mount&&$.mount.mounts.push(W)),o0},unmount(a){var c=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(c.node))throw new o.ErrnoError(28);var d=c.node,b=d.mounted,y=o.getMounts(b);for(var[$,G]of Object.entries(o.nameTable))for(;G;){var W=G.name_next;y.includes(G.mount)&&o.destroyNode(G),G=W}d.mounted=null;var o0=d.mount.mounts.indexOf(b);d.mount.mounts.splice(o0,1)},lookup(a,c){return a.node_ops.lookup(a,c)},mknod(a,c,d){var b=o.lookupPath(a,{parent:!0}),y=b.node,$=f0.basename(a);if(!$)throw new o.ErrnoError(28);if($==="."||$==="..")throw new o.ErrnoError(20);var G=o.mayCreate(y,$);if(G)throw new o.ErrnoError(G);if(!y.node_ops.mknod)throw new o.ErrnoError(63);return y.node_ops.mknod(y,$,c,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){var c={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return a.node_ops.statfs&&Object.assign(c,a.node_ops.statfs(a.mount.opts.root)),c},create(a,c=438){return c&=4095,c|=32768,o.mknod(a,c,0)},mkdir(a,c=511){return c&=1023,c|=16384,o.mknod(a,c,0)},mkdirTree(a,c){var d=a.split("/"),b="";for(var y of d)if(y){(b||f0.isAbs(a))&&(b+="/"),b+=y;try{o.mkdir(b,c)}catch($){if($.errno!=20)throw $}}},mkdev(a,c,d){return typeof d>"u"&&(d=c,c=438),c|=8192,o.mknod(a,c,d)},symlink(a,c){if(!dx.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(c,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var y=f0.basename(c),$=o.mayCreate(b,y);if($)throw new o.ErrnoError($);if(!b.node_ops.symlink)throw new o.ErrnoError(63);return b.node_ops.symlink(b,y,a)},rename(a,c){var d=f0.dirname(a),b=f0.dirname(c),y=f0.basename(a),$=f0.basename(c),G,W,o0;if(G=o.lookupPath(a,{parent:!0}),W=G.node,G=o.lookupPath(c,{parent:!0}),o0=G.node,!W||!o0)throw new o.ErrnoError(44);if(W.mount!==o0.mount)throw new o.ErrnoError(75);var D0=o.lookupNode(W,y),X0=dx.relative(a,b);if(X0.charAt(0)!==".")throw new o.ErrnoError(28);if(X0=dx.relative(c,d),X0.charAt(0)!==".")throw new o.ErrnoError(55);var I0;try{I0=o.lookupNode(o0,$)}catch{}if(D0!==I0){var T0=o.isDir(D0.mode),m0=o.mayDelete(W,y,T0);if(m0)throw new o.ErrnoError(m0);if(m0=I0?o.mayDelete(o0,$,T0):o.mayCreate(o0,$),m0)throw new o.ErrnoError(m0);if(!W.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(D0)||I0&&o.isMountpoint(I0))throw new o.ErrnoError(10);if(o0!==W&&(m0=o.nodePermissions(W,"w"),m0))throw new o.ErrnoError(m0);o.hashRemoveNode(D0);try{W.node_ops.rename(D0,o0,$),D0.parent=o0}catch(sx){throw sx}finally{o.hashAddNode(D0)}}},rmdir(a){var c=o.lookupPath(a,{parent:!0}),d=c.node,b=f0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!0);if($)throw new o.ErrnoError($);if(!d.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.rmdir(d,b),o.destroyNode(y)},readdir(a){var c=o.lookupPath(a,{follow:!0}),d=c.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var c=o.lookupPath(a,{parent:!0}),d=c.node;if(!d)throw new o.ErrnoError(44);var b=f0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!1);if($)throw new o.ErrnoError($);if(!d.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.unlink(d,b),o.destroyNode(y)},readlink(a){var c=o.lookupPath(a),d=c.node;if(!d)throw new o.ErrnoError(44);if(!d.node_ops.readlink)throw new o.ErrnoError(28);return d.node_ops.readlink(d)},stat(a,c){var d=o.lookupPath(a,{follow:!c}),b=d.node,y=o.checkOpExists(b.node_ops.getattr,63);return y(b)},fstat(a){var c=o.getStreamChecked(a),d=c.node,b=c.stream_ops.getattr,y=b?c:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(y)},lstat(a){return o.stat(a,!0)},doChmod(a,c,d,b){o.doSetAttr(a,c,{mode:d&4095|c.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,c,d){var b;if(typeof a=="string"){var y=o.lookupPath(a,{follow:!d});b=y.node}else b=a;o.doChmod(null,b,c,d)},lchmod(a,c){o.chmod(a,c,!0)},fchmod(a,c){var d=o.getStreamChecked(a);o.doChmod(d,d.node,c,!1)},doChown(a,c,d){o.doSetAttr(a,c,{timestamp:Date.now(),dontFollow:d})},chown(a,c,d,b){var y;if(typeof a=="string"){var $=o.lookupPath(a,{follow:!b});y=$.node}else y=a;o.doChown(null,y,b)},lchown(a,c,d){o.chown(a,c,d,!0)},fchown(a,c,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,c,d){if(o.isDir(c.mode))throw new o.ErrnoError(31);if(!o.isFile(c.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(c,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,c,{size:d,timestamp:Date.now()})},truncate(a,c){if(c<0)throw new o.ErrnoError(28);var d;if(typeof a=="string"){var b=o.lookupPath(a,{follow:!0});d=b.node}else d=a;o.doTruncate(null,d,c)},ftruncate(a,c){var d=o.getStreamChecked(a);if(c<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,c)},utime(a,c,d){var b=o.lookupPath(a,{follow:!0}),y=b.node,$=o.checkOpExists(y.node_ops.setattr,63);$(y,{atime:c,mtime:d})},open(a,c,d=438){if(a==="")throw new o.ErrnoError(44);c=LA(c),c&64?d=d&4095|32768:d=0;var b,y;if(typeof a=="object")b=a;else{y=a.endsWith("/");var $=o.lookupPath(a,{follow:!(c&131072),noent_okay:!0});b=$.node,a=$.path}var G=!1;if(c&64)if(b){if(c&128)throw new o.ErrnoError(20)}else{if(y)throw new o.ErrnoError(31);b=o.mknod(a,d|511,0),G=!0}if(!b)throw new o.ErrnoError(44);if(o.isChrdev(b.mode)&&(c&=-513),c&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!G){var W=o.mayOpen(b,c);if(W)throw new o.ErrnoError(W)}c&512&&!G&&o.truncate(b,0),c&=-131713;var o0=o.createStream({node:b,path:o.getPath(b),flags:c,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return o0.stream_ops.open&&o0.stream_ops.open(o0),G&&o.chmod(b,d&511),o0},close(a){if(o.isClosed(a))throw new o.ErrnoError(8);a.getdents&&(a.getdents=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(c){throw c}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,c,d){if(o.isClosed(a))throw new o.ErrnoError(8);if(!a.seekable||!a.stream_ops.llseek)throw new o.ErrnoError(70);if(d!=0&&d!=1&&d!=2)throw new o.ErrnoError(28);return a.position=a.stream_ops.llseek(a,c,d),a.ungotten=[],a.position},read(a,c,d,b,y){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.read)throw new o.ErrnoError(28);var $=typeof y<"u";if(!$)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var G=a.stream_ops.read(a,c,d,b,y);return $||(a.position+=G),G},write(a,c,d,b,y,$){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.write)throw new o.ErrnoError(28);a.seekable&&a.flags&1024&&o.llseek(a,0,2);var G=typeof y<"u";if(!G)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var W=a.stream_ops.write(a,c,d,b,y,$);return G||(a.position+=W),W},mmap(a,c,d,b,y){if((b&2)!==0&&(y&2)===0&&(a.flags&2097155)!==2)throw new o.ErrnoError(2);if((a.flags&2097155)===1)throw new o.ErrnoError(2);if(!a.stream_ops.mmap)throw new o.ErrnoError(43);if(!c)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,c,d,b,y)},msync(a,c,d,b,y){return a.stream_ops.msync?a.stream_ops.msync(a,c,d,b,y):0},ioctl(a,c,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,c,d)},readFile(a,c={}){c.flags=c.flags||0,c.encoding=c.encoding||"binary",c.encoding!=="utf8"&&c.encoding!=="binary"&&d0(`Invalid encoding type "${c.encoding}"`);var d=o.open(a,c.flags),b=o.stat(a),y=b.size,$=new Uint8Array(y);return o.read(d,$,0,y,0),c.encoding==="utf8"&&($=sA($)),o.close(d),$},writeFile(a,c,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);c=Qx(c),o.write(b,c,0,c.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var c=o.lookupPath(a,{follow:!0});if(c.node===null)throw new o.ErrnoError(44);if(!o.isDir(c.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(c.node,"x");if(d)throw new o.ErrnoError(d);o.currentPath=c.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(b,y,$,G,W)=>G,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),c=0,d=()=>(c===0&&(He(a),c=a.byteLength),a[--c]);o.createDevice("/dev","random",d),o.createDevice("/dev","urandom",d),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var a=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var c=o.createNode(a,"fd",16895,73);return c.stream_ops={llseek:i0.stream_ops.llseek},c.node_ops={lookup(d,b){var y=+b,$=o.getStreamChecked(y),G={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>$.path},id:y+1};return G.parent=G,G},readdir(){return Array.from(o.streams.entries()).filter(([d,b])=>b).map(([d,b])=>d.toString())}},c}},{},"/proc/self/fd")},createStandardStreams(a,c,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),c?o.createDevice("/dev","stdout",null,c):o.symlink("/dev/tty","/dev/stdout"),d?o.createDevice("/dev","stderr",null,d):o.symlink("/dev/tty1","/dev/stderr");var b=o.open("/dev/stdin",0),y=o.open("/dev/stdout",1),$=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(i0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:i0,PROXYFS:k0}},init(a,c,d){o.initialized=!0,a??(a=n.stdin),c??(c=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,c,d)},quit(){o.initialized=!1,ne(0);for(var a of o.streams)a&&o.close(a)},findObject(a,c){var d=o.analyzePath(a,c);return d.exists?d.object:null},analyzePath(a,c){try{var d=o.lookupPath(a,{follow:!c});a=d.path}catch{}var b={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var d=o.lookupPath(a,{parent:!0});b.parentExists=!0,b.parentPath=d.path,b.parentObject=d.node,b.name=f0.basename(a),d=o.lookupPath(a,{follow:!c}),b.exists=!0,b.path=d.path,b.object=d.node,b.name=d.node.name,b.isRoot=d.path==="/"}catch(y){b.error=y.errno}return b},createPath(a,c,d,b){a=typeof a=="string"?a:o.getPath(a);for(var y=c.split("/").reverse();y.length;){var $=y.pop();if($){var G=f0.join2(a,$);try{o.mkdir(G)}catch(W){if(W.errno!=20)throw W}a=G}}return G},createFile(a,c,d,b,y){var $=f0.join2(typeof a=="string"?a:o.getPath(a),c),G=aA(b,y);return o.create($,G)},createDataFile(a,c,d,b,y,$){var G=c;a&&(a=typeof a=="string"?a:o.getPath(a),G=c?f0.join2(a,c):a);var W=aA(b,y),o0=o.create(G,W);if(d){d=Qx(d),o.chmod(o0,W|146);var D0=o.open(o0,577);o.write(D0,d,0,d.length,0,$),o.close(D0),o.chmod(o0,W)}},createDevice(a,c,d,b){var y,$=f0.join2(typeof a=="string"?a:o.getPath(a),c),G=aA(!!d,!!b);(y=o.createDevice).major??(y.major=64);var W=o.makedev(o.createDevice.major++,0);return o.registerDevice(W,{open(o0){o0.seekable=!1},close(o0){b?.buffer?.length&&b(10)},read(o0,D0,X0,I0,T0){for(var m0=0,sx=0;sx<I0;sx++){var yx;try{yx=d()}catch{throw new o.ErrnoError(29)}if(yx===void 0&&m0===0)throw new o.ErrnoError(6);if(yx==null)break;m0++,D0[X0+sx]=yx}return m0&&(o0.node.atime=Date.now()),m0},write(o0,D0,X0,I0,T0){for(var m0=0;m0<I0;m0++)try{b(D0[X0+m0])}catch{throw new o.ErrnoError(29)}return I0&&(o0.node.mtime=o0.node.ctime=Date.now()),m0}}),o.mkdev($,G,W)},forceLoadFile(a){if(a.isDevice||a.isFolder||a.link||a.contents)return!0;if(globalThis.XMLHttpRequest)d0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{a.contents=S(a.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(a,c,d,b,y){class ${constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get(T0){if(!(T0>this.length-1||T0<0)){var m0=T0%this.chunkSize,sx=T0/this.chunkSize|0;return this.getter(sx)[m0]}}setDataGetter(T0){this.getter=T0}cacheLength(){var T0=new XMLHttpRequest;T0.open("HEAD",d,!1),T0.send(null),T0.status>=200&&T0.status<300||T0.status===304||d0("Couldn't load "+d+". Status: "+T0.status);var m0=Number(T0.getResponseHeader("Content-length")),sx,yx=(sx=T0.getResponseHeader("Accept-Ranges"))&&sx==="bytes",Ix=(sx=T0.getResponseHeader("Content-Encoding"))&&sx==="gzip",Ox=1024*1024;yx||(Ox=m0);var Gx=(Jx,hA)=>{Jx>hA&&d0("invalid range ("+Jx+", "+hA+") or no bytes requested!"),hA>m0-1&&d0("only "+m0+" bytes available! programmer error!");var fx=new XMLHttpRequest;return fx.open("GET",d,!1),m0!==Ox&&fx.setRequestHeader("Range","bytes="+Jx+"-"+hA),fx.responseType="arraybuffer",fx.overrideMimeType&&fx.overrideMimeType("text/plain; charset=x-user-defined"),fx.send(null),fx.status>=200&&fx.status<300||fx.status===304||d0("Couldn't load "+d+". Status: "+fx.status),fx.response!==void 0?new Uint8Array(fx.response||[]):ee(fx.responseText||"",!0)},oe=this;oe.setDataGetter(Jx=>{var hA=Jx*Ox,fx=(Jx+1)*Ox-1;return fx=Math.min(fx,m0-1),typeof oe.chunks[Jx]>"u"&&(oe.chunks[Jx]=Gx(hA,fx)),typeof oe.chunks[Jx]>"u"&&d0("doXHR failed!"),oe.chunks[Jx]}),(Ix||!m0)&&(Ox=m0=1,m0=this.getter(0).length,Ox=m0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=m0,this._chunkSize=Ox,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var G=new $,W={isDevice:!1,contents:G}}else var W={isDevice:!1,url:d};var o0=o.createFile(a,c,W,b,y);W.contents?o0.contents=W.contents:W.url&&(o0.contents=null,o0.url=W.url),Object.defineProperties(o0,{usedBytes:{get:function(){return this.contents.length}}});var D0={};for(let[I0,T0]of Object.entries(o0.stream_ops))D0[I0]=(...m0)=>(o.forceLoadFile(o0),T0(...m0));function X0(I0,T0,m0,sx,yx){var Ix=I0.node.contents;if(yx>=Ix.length)return 0;var Ox=Math.min(Ix.length-yx,sx);if(Ix.slice)for(var Gx=0;Gx<Ox;Gx++)T0[m0+Gx]=Ix[yx+Gx];else for(var Gx=0;Gx<Ox;Gx++)T0[m0+Gx]=Ix.get(yx+Gx);return Ox}return D0.read=(I0,T0,m0,sx,yx)=>(o.forceLoadFile(o0),X0(I0,T0,m0,sx,yx)),D0.mmap=(I0,T0,m0,sx,yx)=>{o.forceLoadFile(o0);var Ix=MA(T0);if(!Ix)throw new o.ErrnoError(48);return X0(I0,cx,Ix,T0,m0),{ptr:Ix,allocated:!0}},o0.stream_ops=D0,o0}},w0={currentUmask:18,calculateAt(a,c,d){if(f0.isAbs(c))return c;var b;if(a===-100)b=o.cwd();else{var y=w0.getStreamFromFD(a);b=y.path}if(c.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+c},writeStat(a,c){l0[a>>2]=c.dev,l0[a+4>>2]=c.mode,l0[a+8>>2]=c.nlink,l0[a+12>>2]=c.uid,l0[a+16>>2]=c.gid,l0[a+20>>2]=c.rdev,W0[a+24>>3]=BigInt(c.size),G0[a+32>>2]=4096,G0[a+36>>2]=c.blocks;var d=c.atime.getTime(),b=c.mtime.getTime(),y=c.ctime.getTime();return W0[a+40>>3]=BigInt(Math.floor(d/1e3)),l0[a+48>>2]=d%1e3*1e3*1e3,W0[a+56>>3]=BigInt(Math.floor(b/1e3)),l0[a+64>>2]=b%1e3*1e3*1e3,W0[a+72>>3]=BigInt(Math.floor(y/1e3)),l0[a+80>>2]=y%1e3*1e3*1e3,W0[a+88>>3]=BigInt(c.ino),0},writeStatFs(a,c){l0[a+4>>2]=c.bsize,l0[a+60>>2]=c.bsize,W0[a+8>>3]=BigInt(c.blocks),W0[a+16>>3]=BigInt(c.bfree),W0[a+24>>3]=BigInt(c.bavail),W0[a+32>>3]=BigInt(c.files),W0[a+40>>3]=BigInt(c.ffree),l0[a+48>>2]=c.fsid,l0[a+64>>2]=c.flags,l0[a+56>>2]=c.namelen},doMsync(a,c,d,b,y){if(!o.isFile(c.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var $=nA.slice(a,a+d);o.msync(c,$,y,d,b)},getStreamFromFD(a){var c=o.getStreamChecked(a);return c},varargs:void 0,getStr(a){var c=gx(a);return c}};function Ve(a,c,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(c){case 0:{var y=iA();if(y<0)return-28;for(;o.streams[y];)y++;var $;return $=o.dupStream(b,y),$.fd}case 1:case 2:return 0;case 3:return b.flags;case 4:{var y=iA(),G=289792;return b.flags=b.flags&~G|y&G,0}case 12:{var y=IA(),W=0;return V0[y+W>>1]=2,0}case 13:case 14:return 0}return-28}catch(o0){if(typeof o>"u"||o0.name!=="ErrnoError")throw o0;return-o0.errno}}function OA(a,c,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(c){case 21509:return b.tty?0:-59;case 21505:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcgets){var y=b.tty.ops.ioctl_tcgets(b),$=IA();G0[$>>2]=y.c_iflag||0,G0[$+4>>2]=y.c_oflag||0,G0[$+8>>2]=y.c_cflag||0,G0[$+12>>2]=y.c_lflag||0;for(var G=0;G<32;G++)cx[$+G+17]=y.c_cc[G]||0;return 0}return 0}case 21510:case 21511:case 21512:return b.tty?0:-59;case 21506:case 21507:case 21508:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcsets){for(var $=IA(),W=G0[$>>2],o0=G0[$+4>>2],D0=G0[$+8>>2],X0=G0[$+12>>2],I0=[],G=0;G<32;G++)I0.push(cx[$+G+17]);return b.tty.ops.ioctl_tcsets(b.tty,c,{c_iflag:W,c_oflag:o0,c_cflag:D0,c_lflag:X0,c_cc:I0})}return 0}case 21519:{if(!b.tty)return-59;var $=IA();return G0[$>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var $=IA();return o.ioctl(b,c,$)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var T0=b.tty.ops.ioctl_tiocgwinsz(b.tty),$=IA();V0[$>>1]=T0[0],V0[$+2>>1]=T0[1]}return 0}case 21524:return b.tty?0:-59;case 21515:return b.tty?0:-59;default:return-28}}catch(m0){if(typeof o>"u"||m0.name!=="ErrnoError")throw m0;return-m0.errno}}function mA(a,c,d,b){w0.varargs=b;try{c=w0.getStr(c),c=w0.calculateAt(a,c);var y=b?iA():0;return d&64&&(y&=~w0.currentUmask),o.open(c,d,y).fd}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var ot=()=>2147483648,ye=(a,c)=>Math.ceil(a/c)*c,Dr=a=>{var c=GA.buffer.byteLength,d=(a-c+65535)/65536|0;try{return GA.grow(d),Z(),1}catch{}},pr=a=>{var c=nA.length;a>>>=0;var d=ot();if(a>d)return!1;for(var b=1;b<=4;b*=2){var y=c*(1+.2/b);y=Math.min(y,a+100663296);var $=Math.min(d,ye(Math.max(a,y),65536)),G=Dr($);if(G)return!0}return!1};function Ft(a){try{var c=w0.getStreamFromFD(a);return o.close(c),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var vt=(a,c,d,b)=>{for(var y=0,$=0;$<d;$++){var G=l0[c>>2],W=l0[c+4>>2];c+=8;var o0=o.read(a,cx,G,W,b);if(o0<0)return-1;if(y+=o0,o0<W)break;typeof b<"u"&&(b+=o0)}return y};function lt(a,c,d,b){try{var y=w0.getStreamFromFD(a),$=vt(y,c,d);return l0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var ke=9007199254740992,br=-9007199254740992,re=a=>a<br||a>ke?NaN:Number(a);function we(a,c,d,b){c=re(c);try{if(isNaN(c))return 22;var y=w0.getStreamFromFD(a);return o.llseek(y,c,d),W0[b>>3]=BigInt(y.position),y.getdents&&c===0&&d===0&&(y.getdents=null),0}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var ct=(a,c,d,b)=>{for(var y=0,$=0;$<d;$++){var G=l0[c>>2],W=l0[c+4>>2];c+=8;var o0=o.write(a,cx,G,W,b);if(o0<0)return-1;if(y+=o0,o0<W)break;typeof b<"u"&&(b+=o0)}return y};function mr(a,c,d,b){try{var y=w0.getStreamFromFD(a),$=ct(y,c,d);return l0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var ft=0,te=()=>je||ft>0,We=a=>{M=a,te()||(n.onExit?.(a),t0=!0),m(a,new tA(a))},hr=(a,c)=>{M=a,te()||c0(),We(a)},jr=a=>{if(a instanceof tA||a=="unwind")return M;m(1,a)},Et=(a,c,d)=>Je(a,nA,c,d),gr=a=>se(a),Bt=a=>{var c=Ae(a)+1,d=gr(c);return Et(a,d,c),d},Ct=(...a)=>o.createPath(...a),_e=(...a)=>o.unlink(...a),dt=(...a)=>o.createLazyFile(...a),ut=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=at,o.preloadFile=RA,o.staticInit(),n.noExitRuntime&&(je=n.noExitRuntime),n.preloadPlugins&&(ge=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(O=n.printErr),n.wasmBinary&&(L=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(p=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=Dx,n.addRunDependency=qx,n.removeRunDependency=ze,n.FS_preloadFile=RA,n.FS_unlink=_e,n.FS_createPath=Ct,n.FS_createDevice=ut,n.FS=o,n.FS_createDataFile=Ke,n.FS_createLazyFile=dt,n.PROXYFS=k0;var yr,kr,ne,wr,se,Xe,Nx,Dt,GA;function ie(a){yr=n._main=a.__main_argc_argv,kr=a.__funcs_on_exit,ne=a.fflush,wr=a._emscripten_stack_restore,se=a._emscripten_stack_alloc,Xe=a.emscripten_stack_get_current,Nx=GA=a.memory,Dt=a.__indirect_function_table}var Ye={__assert_fail:DA,__syscall_fcntl64:Ve,__syscall_ioctl:OA,__syscall_openat:mA,emscripten_resize_heap:pr,fd_close:Ft,fd_read:lt,fd_seek:we,fd_write:mr};function Dx(a=[]){var c=yr;a.unshift(p);var d=a.length,b=gr((d+1)*4),y=b;for(var $ of a)l0[y>>2]=Bt($),y+=4;l0[y>>2]=0;try{var G=c(d,b);return hr(G,!0),G}catch(W){return jr(W)}}function Se(a=u){if(Bx>0){b0=Se;return}if(s0(),Bx>0){b0=Se;return}function c(){if(n.calledRun=!0,!t0){U(),J?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||Dx(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),c()},1)):c()}var ae;return ae=await tx(),Se(),a0?s=n:s=new Promise((a,c)=>{J=a,H=c}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),Ho={};SE(Ho,{createPawnCC:()=>IE,createPawnDbg:()=>ME});Jo.exports=$E(Ho);var qE=Uo(TE(),1),NE=Uo(PE(),1),IE=qE.default,ME=NE.default});var Me=Ka((Vm,Dv)=>{"use strict";var VE=Object.create,Tt=Object.defineProperty,WE=Object.getOwnPropertyDescriptor,kF=Object.getOwnPropertyNames,XE=Object.getPrototypeOf,YE=Object.prototype.hasOwnProperty,QE=(x,A,e)=>A in x?Tt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,ZE=(x,A)=>function(){try{return A||(0,x[kF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},xB=(x,A)=>{for(var e in A)Tt(x,e,{get:A[e],enumerable:!0})},wF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of kF(A))!YE.call(x,t)&&t!==e&&Tt(x,t,{get:()=>A[t],enumerable:!(r=WE(A,t))||r.enumerable});return x},AB=(x,A,e)=>(e=x!=null?VE(XE(x)):{},wF(A||!x||!x.__esModule?Tt(e,"default",{value:x,enumerable:!0}):e,x)),eB=x=>wF(Tt({},"__esModule",{value:!0}),x),A0=(x,A,e)=>QE(x,typeof A!="symbol"?A+"":A,e),rB=ZE({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var s;(function(){function f(e0){e0=e0.split("-")[0];for(var E0=e0.split(".").slice(0,3);E0.length<3;)E0.push("00");return E0=E0.map((p0,Z0,Y0)=>p0.padStart(2,"0")),E0.join("")}var C=e0=>[e0/1e4|0,(e0/100|0)%100,e0%100].join("."),g=2147483647,T=typeof process<"u"&&process.versions?.node?f(process.versions.node):g;if(T<180300)throw new Error(`This emscripten-generated code requires node v${C(180300)} (detected v${C(T)})`);var q=typeof navigator<"u"&&navigator.userAgent;if(q){var Y=q.includes("Safari/")&&!q.includes("Chrome/")&&q.match(/Version\/(\d+\.?\d*\.?\d*)/)?f(q.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):g;if(Y<15e4)throw new Error(`This emscripten-generated code requires Safari v${C(15e4)} (detected v${Y})`);var X=q.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(q.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):g;if(X<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${X})`);var x0=q.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(q.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):g;if(x0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${x0})`)}})();var n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=!F&&!E&&!v,p=[],m="./this.program",w=(f,C)=>{throw C};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var j="",S,P;if(E){if(!(globalThis.process?.versions?.node&&globalThis.process?.type!="renderer"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var N=require("fs");j=__dirname+"/",P=C=>{C=R(C)?new URL(C):C;var g=N.readFileSync(C);return k(Buffer.isBuffer(g)),g},S=async(C,g=!0)=>{C=R(C)?new URL(C):C;var T=N.readFileSync(C,g?void 0:"utf8");return k(g?Buffer.isBuffer(T):typeof T=="string"),T},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),w=(C,g)=>{throw process.exitCode=C,g}}else if(!u)if(F||v){try{j=new URL(".",r).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");v&&(P=f=>{var C=new XMLHttpRequest;return C.open("GET",f,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),S=async f=>{if(R(f))return new Promise((g,T)=>{var q=new XMLHttpRequest;q.open("GET",f,!0),q.responseType="arraybuffer",q.onload=()=>{if(q.status==200||q.status==0&&q.response){g(q.response);return}T(q.status)},q.onerror=T,q.send(null)});var C=await fetch(f,{credentials:"same-origin"});if(C.ok)return C.arrayBuffer();throw new Error(C.status+" : "+C.url)}}else throw new Error("environment detection error");var O=console.log.bind(console),L=console.error.bind(console);k(!u,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var t0;globalThis.WebAssembly||L("no native wasm support detected");var M=!1;function k(f,C){f||lx("Assertion failed"+(C?": "+C:""))}var R=f=>f.startsWith("file://");function Q(){var f=ms();k((f&3)==0),f==0&&(f+=4),y0[f>>2]=34821223,y0[f+4>>2]=2310721022,y0[0]=1668509029}function K(){if(!M){var f=ms();f==0&&(f+=4);var C=y0[f>>2],g=y0[f+4>>2];(C!=34821223||g!=2310721022)&&lx(`Stack overflow! Stack cookie has been overwritten at ${dx(f)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${dx(g)} ${dx(C)}`),y0[0]!=1668509029&&lx("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class J{}class H extends J{}var a0=!0;(()=>{var f=new Int16Array(1),C=new Int8Array(f.buffer);f[0]=25459,(C[0]!==115||C[1]!==99)&&lx("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function n0(f){Object.getOwnPropertyDescriptor(n,f)||Object.defineProperty(n,f,{configurable:!0,set(){lx(`Attempt to set \`Module.${f}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function Z(f){return()=>k(!1,`call to '${f}' via reference taken before Wasm module initialization`)}function s0(f){Object.getOwnPropertyDescriptor(n,f)&&lx(`\`Module.${f}\` was supplied but \`${f}\` not included in INCOMING_MODULE_JS_API`)}function U(f){return f==="FS_createPath"||f==="FS_createDataFile"||f==="FS_createPreloadedFile"||f==="FS_preloadFile"||f==="FS_unlink"||f==="addRunDependency"||f==="FS_createLazyFile"||f==="FS_createDevice"||f==="removeRunDependency"}function v0(f){c0(f)}function c0(f){Object.getOwnPropertyDescriptor(n,f)||Object.defineProperty(n,f,{configurable:!0,get(){var C=`'${f}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;U(f)&&(C+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),lx(C)}})}function B0(f){for(var C=0,g=f.length,T=new Uint8Array(g),q;C<g;++C)q=f.charCodeAt(C),T[C]=~q>>8&q;return T}var d0,$0,L0=!1;function Ex(){var f=rn.buffer;Yx=new Int8Array(f),qA=new Int16Array(f),n.HEAPU8=gx=new Uint8Array(f),ox=new Uint16Array(f),NA=new Int32Array(f),y0=new Uint32Array(f),ur=new Float32Array(f),je=new Float64Array(f),dr=new BigInt64Array(f),sA=new BigUint64Array(f)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function Xx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)st(n.preRun.shift());n0("preRun"),DA(f0)}function TA(){k(!L0),L0=!0,K(),_r.__wasm_call_ctors()}function PA(){if(K(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)IA(n.postRun.shift());n0("postRun"),DA(iA)}function lx(f){n.onAbort?.(f),f=`Aborted(${f})`,L(f),M=!0;var C=new WebAssembly.RuntimeError(f);throw $0?.(C),C}function tx(){lx("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var tA={init:tx,createDataFile:tx,createPreloadedFile:tx,createLazyFile:tx,open:tx,mkdev:tx,registerDevice:tx,analyzePath:tx,ErrnoError:tx};function V0(f,C){return(...g)=>{k(L0,`native function \`${f}\` called before runtime initialization`);var T=_r[f];return k(T,`exported native function \`${f}\` not found`),k(g.length<=C,`native function \`${f}\` called with ${g.length} args but expects ${C}`),T(...g)}}var G0;function W0(){return B0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
1526
+ \0A\x80\v\vp\0\0D\0\0\0`)}function Ex(a){return a}async function Qx(a){return a}async function PA(a,c){try{var d=await Qx(a),b=await WebAssembly.instantiate(d,c);return b}catch(y){R(`failed to asynchronously prepare wasm: ${y}`),d0(y)}}async function qA(a,c,d){return PA(c,d)}function lx(){var a={env:Qe,wasi_snapshot_preview1:Qe};return a}async function tx(){function a($,G){return oe=$.exports,ae(oe),Q(),oe}function c($){return a($.instance)}var d=lx();if(n.instantiateWasm)return new Promise(($,G)=>{n.instantiateWasm(d,(V,o0)=>{$(a(V,o0))})});$0??($0=q0());var b=await qA(O,$0,d),y=c(b);return y}class nA{constructor(c){bx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${c})`,this.status=c}}var V0,G0,W0,cx,et,rt,tt,c0,nt,iA,NA=a=>{for(;a.length>0;)a.shift()(n)},IA=[],ur=a=>IA.push(a),Zx=[],Dr=a=>Zx.push(a),ge=!1,ox=globalThis.TextDecoder&&new TextDecoder,y0=(a,c,d,b)=>{var y=c+d;if(b)return y;for(;a[c]&&!(c>=y);)++c;return c},sA=(a,c=0,d,b)=>{var y=y0(a,c,d,b);if(y-c>16&&a.buffer&&ox)return ox.decode(a.subarray(c,y));for(var $="";c<y;){var G=a[c++];if(!(G&128)){$+=String.fromCharCode(G);continue}var V=a[c++]&63;if((G&224)==192){$+=String.fromCharCode((G&31)<<6|V);continue}var o0=a[c++]&63;if((G&240)==224?G=(G&15)<<12|V<<6|o0:G=(G&7)<<18|V<<12|o0<<6|a[c++]&63,G<65536)$+=String.fromCharCode(G);else{var D0=G-65536;$+=String.fromCharCode(55296|D0>>10,56320|D0&1023)}}return $},gx=(a,c,d)=>a?sA(iA,a,c,d):"",pA=(a,c,d,b)=>d0(`Assertion failed: ${gx(a)}, at: `+[c?gx(c):"unknown filename",d,b?gx(b):"unknown function"]),aA=()=>{var a=G0[+w0.varargs>>2];return w0.varargs+=4,a},MA=aA,f0={isAbs:a=>a.charAt(0)==="/",splitPath:a=>{var c=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return c.exec(a).slice(1)},normalizeArray:(a,c)=>{for(var d=0,b=a.length-1;b>=0;b--){var y=a[b];y==="."?a.splice(b,1):y===".."?(a.splice(b,1),d++):d&&(a.splice(b,1),d--)}if(c)for(;d;d--)a.unshift("..");return a},normalize:a=>{var c=f0.isAbs(a),d=a.slice(-1)==="/";return a=f0.normalizeArray(a.split("/").filter(b=>!!b),!c).join("/"),!a&&!c&&(a="."),a&&d&&(a+="/"),(c?"/":"")+a},dirname:a=>{var c=f0.splitPath(a),d=c[0],b=c[1];return!d&&!b?".":(b&&(b=b.slice(0,-1)),d+b)},basename:a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],join:(...a)=>f0.normalize(a.join("/")),join2:(a,c)=>f0.normalize(a+"/"+c)},it=()=>{if(E){var a=require("crypto");return c=>a.randomFillSync(c)}return c=>(crypto.getRandomValues(c),0)},Je=a=>(Je=it())(a),dx={resolve:(...a)=>{for(var c="",d=!1,b=a.length-1;b>=-1&&!d;b--){var y=b>=0?a[b]:o.cwd();if(typeof y!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!y)return"";c=y+"/"+c,d=f0.isAbs(y)}return c=f0.normalizeArray(c.split("/").filter($=>!!$),!d).join("/"),(d?"/":"")+c||"."},relative:(a,c)=>{a=dx.resolve(a).slice(1),c=dx.resolve(c).slice(1);function d(D0){for(var X0=0;X0<D0.length&&D0[X0]==="";X0++);for(var M0=D0.length-1;M0>=0&&D0[M0]==="";M0--);return X0>M0?[]:D0.slice(X0,M0-X0+1)}for(var b=d(a.split("/")),y=d(c.split("/")),$=Math.min(b.length,y.length),G=$,V=0;V<$;V++)if(b[V]!==y[V]){G=V;break}for(var o0=[],V=G;V<b.length;V++)o0.push("..");return o0=o0.concat(y.slice(G)),o0.join("/")}},Jx=[],ee=a=>{for(var c=0,d=0;d<a.length;++d){var b=a.charCodeAt(d);b<=127?c++:b<=2047?c+=2:b>=55296&&b<=57343?(c+=4,++d):c+=3}return c},Ke=(a,c,d,b)=>{if(!(b>0))return 0;for(var y=d,$=d+b-1,G=0;G<a.length;++G){var V=a.codePointAt(G);if(V<=127){if(d>=$)break;c[d++]=V}else if(V<=2047){if(d+1>=$)break;c[d++]=192|V>>6,c[d++]=128|V&63}else if(V<=65535){if(d+2>=$)break;c[d++]=224|V>>12,c[d++]=128|V>>6&63,c[d++]=128|V&63}else{if(d+3>=$)break;c[d++]=240|V>>18,c[d++]=128|V>>12&63,c[d++]=128|V>>6&63,c[d++]=128|V&63,G++}}return c[d]=0,d-y},re=(a,c,d)=>{var b=d>0?d:ee(a)+1,y=new Array(b),$=Ke(a,y,0,y.length);return c&&(y.length=$),y},st=()=>{if(!Jx.length){var a=null;if(E){var c=256,d=Buffer.alloc(c),b=0,y=process.stdin.fd;try{b=P.readSync(y,d,0,c)}catch($){if($.toString().includes("EOF"))b=0;else throw $}b>0&&(a=d.slice(0,b).toString("utf-8"))}else globalThis.window?.prompt&&(a=window.prompt("Input: "),a!==null&&(a+=`
1527
+ `));if(!a)return null;Jx=re(a,!0)}return Jx.shift()},nx={ttys:[],init(){},shutdown(){},register(a,c){nx.ttys[a]={input:[],output:[],ops:c},o.registerDevice(a,nx.stream_ops)},stream_ops:{open(a){var c=nx.ttys[a.node.rdev];if(!c)throw new o.ErrnoError(43);a.tty=c,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,c,d,b,y){if(!a.tty||!a.tty.ops.get_char)throw new o.ErrnoError(60);for(var $=0,G=0;G<b;G++){var V;try{V=a.tty.ops.get_char(a.tty)}catch{throw new o.ErrnoError(29)}if(V===void 0&&$===0)throw new o.ErrnoError(6);if(V==null)break;$++,c[d+G]=V}return $&&(a.node.atime=Date.now()),$},write(a,c,d,b,y){if(!a.tty||!a.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var $=0;$<b;$++)a.tty.ops.put_char(a.tty,c[d+$])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),$}},default_tty_ops:{get_char(a){return st()},put_char(a,c){c===null||c===10?(N(sA(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){a.output?.length>0&&(N(sA(a.output)),a.output=[])},ioctl_tcgets(a){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(a,c,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,c){c===null||c===10?(R(sA(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){a.output?.length>0&&(R(sA(a.output)),a.output=[])}}},LA=a=>{d0()},n0={ops_table:null,mount(a){return n0.createNode(null,"/",16895,0)},createNode(a,c,d,b){if(o.isBlkdev(d)||o.isFIFO(d))throw new o.ErrnoError(63);n0.ops_table||(n0.ops_table={dir:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,lookup:n0.node_ops.lookup,mknod:n0.node_ops.mknod,rename:n0.node_ops.rename,unlink:n0.node_ops.unlink,rmdir:n0.node_ops.rmdir,readdir:n0.node_ops.readdir,symlink:n0.node_ops.symlink},stream:{llseek:n0.stream_ops.llseek}},file:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:{llseek:n0.stream_ops.llseek,read:n0.stream_ops.read,write:n0.stream_ops.write,mmap:n0.stream_ops.mmap,msync:n0.stream_ops.msync}},link:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr,readlink:n0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:n0.node_ops.getattr,setattr:n0.node_ops.setattr},stream:o.chrdev_stream_ops}});var y=o.createNode(a,c,d,b);return o.isDir(y.mode)?(y.node_ops=n0.ops_table.dir.node,y.stream_ops=n0.ops_table.dir.stream,y.contents={}):o.isFile(y.mode)?(y.node_ops=n0.ops_table.file.node,y.stream_ops=n0.ops_table.file.stream,y.usedBytes=0,y.contents=n0.emptyFileContents??(n0.emptyFileContents=new Uint8Array(0))):o.isLink(y.mode)?(y.node_ops=n0.ops_table.link.node,y.stream_ops=n0.ops_table.link.stream):o.isChrdev(y.mode)&&(y.node_ops=n0.ops_table.chrdev.node,y.stream_ops=n0.ops_table.chrdev.stream),y.atime=y.mtime=y.ctime=Date.now(),a&&(a.contents[c]=y,a.atime=a.mtime=a.ctime=y.atime),y},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,c){var d=a.contents.length;if(!(d>=c)){var b=1024*1024;c=Math.max(c,d*(d<b?2:1.125)>>>0),d&&(c=Math.max(c,256));var y=n0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(c),a.contents.set(y)}},resizeFileStorage(a,c){if(a.usedBytes!=c){var d=a.contents;a.contents=new Uint8Array(c),a.contents.set(d.subarray(0,Math.min(c,a.usedBytes))),a.usedBytes=c}},node_ops:{getattr(a){var c={};return c.dev=o.isChrdev(a.mode)?a.id:1,c.ino=a.id,c.mode=a.mode,c.nlink=1,c.uid=0,c.gid=0,c.rdev=a.rdev,o.isDir(a.mode)?c.size=4096:o.isFile(a.mode)?c.size=a.usedBytes:o.isLink(a.mode)?c.size=a.link.length:c.size=0,c.atime=new Date(a.atime),c.mtime=new Date(a.mtime),c.ctime=new Date(a.ctime),c.blksize=4096,c.blocks=Math.ceil(c.size/c.blksize),c},setattr(a,c){for(let d of["mode","atime","mtime","ctime"])c[d]!=null&&(a[d]=c[d]);c.size!==void 0&&n0.resizeFileStorage(a,c.size)},lookup(a,c){throw n0.doesNotExistError||(n0.doesNotExistError=new o.ErrnoError(44),n0.doesNotExistError.stack="<generic error, no stack>"),n0.doesNotExistError},mknod(a,c,d,b){return n0.createNode(a,c,d,b)},rename(a,c,d){var b;try{b=o.lookupNode(c,d)}catch{}if(b){if(o.isDir(a.mode))for(var y in b.contents)throw new o.ErrnoError(55);o.hashRemoveNode(b)}delete a.parent.contents[a.name],c.contents[d]=a,a.name=d,c.ctime=c.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,c){delete a.contents[c],a.ctime=a.mtime=Date.now()},rmdir(a,c){var d=o.lookupNode(a,c);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[c],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,c,d){var b=n0.createNode(a,c,41471,0);return b.link=d,b},readlink(a){if(!o.isLink(a.mode))throw new o.ErrnoError(28);return a.link}},stream_ops:{read(a,c,d,b,y){var $=a.node.contents;if(y>=a.node.usedBytes)return 0;var G=Math.min(a.node.usedBytes-y,b);return c.set($.subarray(y,y+G),d),G},write(a,c,d,b,y,$){if(c.buffer===cx.buffer&&($=!1),!b)return 0;var G=a.node;return G.mtime=G.ctime=Date.now(),$?(G.contents=c.subarray(d,d+b),G.usedBytes=b):G.usedBytes===0&&y===0?(G.contents=c.slice(d,d+b),G.usedBytes=b):(n0.expandFileStorage(G,y+b),G.contents.set(c.subarray(d,d+b),y),G.usedBytes=Math.max(G.usedBytes,y+b)),b},llseek(a,c,d){var b=c;if(d===1?b+=a.position:d===2&&o.isFile(a.node.mode)&&(b+=a.node.usedBytes),b<0)throw new o.ErrnoError(28);return b},mmap(a,c,d,b,y){if(!o.isFile(a.node.mode))throw new o.ErrnoError(43);var $,G,V=a.node.contents;if(!(y&2)&&V.buffer===cx.buffer)G=!1,$=V.byteOffset;else{if(G=!0,$=LA(c),!$)throw new o.ErrnoError(48);V&&((d>0||d+c<V.length)&&(V.subarray?V=V.subarray(d,d+c):V=Array.prototype.slice.call(V,d,d+c)),cx.set(V,$))}return{ptr:$,allocated:G}},msync(a,c,d,b,y){return n0.stream_ops.write(a,c,0,b,d,!1),0}}},RA=a=>{if(typeof a!="string")return a;var c={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=c[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},xA=a=>(typeof a=="string"&&(a=re(a,!0)),a.subarray||(a=new Uint8Array(a)),a),oA=(a,c)=>{var d=0;return a&&(d|=365),c&&(d|=146),d},N0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},k0={mount(a){return k0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,c,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(N0.EINVAL);var y=o.createNode(a,c,d);return y.node_ops=k0.node_ops,y.stream_ops=k0.stream_ops,y},realPath(a){for(var c=[];a.parent!==a;)c.push(a.name),a=a.parent;return c.push(a.mount.opts.root),c.reverse(),f0.join(...c)},node_ops:{getattr(a){var c=k0.realPath(a),d;try{d=a.mount.opts.fs.lstat(c)}catch(b){throw b.code?new o.ErrnoError(N0[b.code]):b}return{dev:d.dev,ino:d.ino,mode:d.mode,nlink:d.nlink,uid:d.uid,gid:d.gid,rdev:d.rdev,size:d.size,atime:d.atime,mtime:d.mtime,ctime:d.ctime,blksize:d.blksize,blocks:d.blocks}},setattr(a,c){var d=k0.realPath(a);try{if(c.mode!==void 0&&(a.mount.opts.fs.chmod(d,c.mode),a.mode=c.mode),c.atime||c.mtime){var b=new Date(c.atime||c.mtime),y=new Date(c.mtime||c.atime);a.mount.opts.fs.utime(d,b,y)}c.size!==void 0&&a.mount.opts.fs.truncate(d,c.size)}catch($){throw $.code?new o.ErrnoError(N0[$.code]):$}},lookup(a,c){try{var d=f0.join2(k0.realPath(a),c),b=a.mount.opts.fs.lstat(d).mode,y=k0.createNode(a,c,b);return y}catch($){throw $.code?new o.ErrnoError(N0[$.code]):$}},mknod(a,c,d,b){var y=k0.createNode(a,c,d,b),$=k0.realPath(y);try{o.isDir(y.mode)?y.mount.opts.fs.mkdir($,y.mode):y.mount.opts.fs.writeFile($,"",{mode:y.mode})}catch(G){throw G.code?new o.ErrnoError(N0[G.code]):G}return y},rename(a,c,d){var b=k0.realPath(a),y=f0.join2(k0.realPath(c),d);try{a.mount.opts.fs.rename(b,y),a.name=d}catch($){throw $.code?new o.ErrnoError(N0[$.code]):$}},unlink(a,c){var d=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(N0[b.code]):b}},rmdir(a,c){var d=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(N0[b.code]):b}},readdir(a){var c=k0.realPath(a);try{return a.mount.opts.fs.readdir(c)}catch(d){throw d.code?new o.ErrnoError(N0[d.code]):d}},symlink(a,c,d){var b=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.symlink(d,b)}catch(y){throw y.code?new o.ErrnoError(N0[y.code]):y}},readlink(a){var c=k0.realPath(a);try{return a.mount.opts.fs.readlink(c)}catch(d){throw d.code?new o.ErrnoError(N0[d.code]):d}}},stream_ops:{open(a){var c=k0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(c,a.flags)}catch(d){throw d.code?new o.ErrnoError(N0[d.code]):d}},close(a){try{a.node.mount.opts.fs.close(a.nfd)}catch(c){throw c.code?new o.ErrnoError(N0[c.code]):c}},read(a,c,d,b,y){try{return a.node.mount.opts.fs.read(a.nfd,c,d,b,y)}catch($){throw $.code?new o.ErrnoError(N0[$.code]):$}},write(a,c,d,b,y){try{return a.node.mount.opts.fs.write(a.nfd,c,d,b,y)}catch($){throw $.code?new o.ErrnoError(N0[$.code]):$}},llseek(a,c,d){var b=c;if(d===1)b+=a.position;else if(d===2&&o.isFile(a.node.mode))try{var y=a.node.node_ops.getattr(a.node);b+=y.size}catch($){throw new o.ErrnoError(N0[$.code])}if(b<0)throw new o.ErrnoError(N0.EINVAL);return b}}},bA=async a=>{var c=await j(a);return new Uint8Array(c)},ze=(...a)=>o.createDataFile(...a),ux=a=>a,Bx=0,b0=null,Ve=a=>{if(Bx--,n.monitorRunDependencies?.(Bx),Bx==0&&b0){var c=b0;b0=null,c()}},Nx=a=>{Bx++,n.monitorRunDependencies?.(Bx)},ye=[],mA=async(a,c)=>{typeof Browser<"u"&&Browser.init();for(var d of ye)if(d.canHandle(c))return d.handle(a,c);return a},OA=async(a,c,d,b,y,$,G,V)=>{var o0=c?dx.resolve(f0.join2(a,c)):a,D0=ux(`cp ${o0}`);Nx(D0);try{var X0=d;typeof d=="string"&&(X0=await bA(d)),X0=await mA(X0,o0),V?.(),$||ze(a,c,X0,b,y,G)}finally{Ve(D0)}},at=(a,c,d,b,y,$,G,V,o0,D0)=>{OA(a,c,d,b,y,V,o0,D0).then($).catch(G)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(a){bx(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(a){this.node=a}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},FSNode:class{constructor(a,c,d,b){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=c,this.mode=d,this.rdev=b,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(a){a?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(a){a?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(a,c={}){if(!a)throw new o.ErrnoError(44);c.follow_mount??(c.follow_mount=!0),f0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(D0=>!!D0),y=o.root,$="/",G=0;G<b.length;G++){var V=G===b.length-1;if(V&&c.parent)break;if(b[G]!=="."){if(b[G]===".."){if($=f0.dirname($),o.isRoot(y)){a=$+"/"+b.slice(G+1).join("/"),d--;continue x}else y=y.parent;continue}$=f0.join2($,b[G]);try{y=o.lookupNode(y,b[G])}catch(D0){if(D0?.errno===44&&V&&c.noent_okay)return{path:$};throw D0}if(o.isMountpoint(y)&&(!V||c.follow_mount)&&(y=y.mounted.root),o.isLink(y.mode)&&(!V||c.follow)){if(!y.node_ops.readlink)throw new o.ErrnoError(52);var o0=y.node_ops.readlink(y);f0.isAbs(o0)||(o0=f0.dirname($)+"/"+o0),a=o0+"/"+b.slice(G+1).join("/");continue x}}}return{path:$,node:y}}throw new o.ErrnoError(32)},getPath(a){for(var c;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return c?d[d.length-1]!=="/"?`${d}/${c}`:d+c:d}c=c?`${a.name}/${c}`:a.name,a=a.parent}},hashName(a,c){for(var d=0,b=0;b<c.length;b++)d=(d<<5)-d+c.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var c=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[c],o.nameTable[c]=a},hashRemoveNode(a){var c=o.hashName(a.parent.id,a.name);if(o.nameTable[c]===a)o.nameTable[c]=a.name_next;else for(var d=o.nameTable[c];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,c){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,c),y=o.nameTable[b];y;y=y.name_next){var $=y.name;if(y.parent.id===a.id&&$===c)return y}return o.lookup(a,c)},createNode(a,c,d,b){var y=new o.FSNode(a,c,d,b);return o.hashAddNode(y),y},destroyNode(a){o.hashRemoveNode(a)},isRoot(a){return a===a.parent},isMountpoint(a){return!!a.mounted},isFile(a){return(a&61440)===32768},isDir(a){return(a&61440)===16384},isLink(a){return(a&61440)===40960},isChrdev(a){return(a&61440)===8192},isBlkdev(a){return(a&61440)===24576},isFIFO(a){return(a&61440)===4096},isSocket(a){return(a&49152)===49152},flagsToPermissionString(a){var c=["r","w","rw"][a&3];return a&512&&(c+="w"),c},nodePermissions(a,c){return o.ignorePermissions?0:c.includes("r")&&!(a.mode&292)||c.includes("w")&&!(a.mode&146)||c.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var c=o.nodePermissions(a,"x");return c||(a.node_ops.lookup?0:2)},mayCreate(a,c){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,c);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,c,d){var b;try{b=o.lookupNode(a,c)}catch($){return $.errno}var y=o.nodePermissions(a,"wx");if(y)return y;if(d){if(!o.isDir(b.mode))return 54;if(o.isRoot(b)||o.getPath(b)===o.cwd())return 10}else if(o.isDir(b.mode))return 31;return 0},mayOpen(a,c){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(c);return o.isDir(a.mode)&&(d!=="r"||c&576)?31:o.nodePermissions(a,d)},checkOpExists(a,c){if(!a)throw new o.ErrnoError(c);return a},MAX_OPEN_FDS:4096,nextfd(){for(var a=0;a<=o.MAX_OPEN_FDS;a++)if(!o.streams[a])return a;throw new o.ErrnoError(33)},getStreamChecked(a){var c=o.getStream(a);if(!c)throw new o.ErrnoError(8);return c},getStream:a=>o.streams[a],createStream(a,c=-1){return a=Object.assign(new o.FSStream,a),c==-1&&(c=o.nextfd()),a.fd=c,o.streams[c]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,c=-1){var d=o.createStream(a,c);return d.stream_ops?.dup?.(d),d},doSetAttr(a,c,d){var b=a?.stream_ops.setattr,y=b?a:c;b??(b=c.node_ops.setattr),o.checkOpExists(b,63);try{b(y,d)}catch($){throw $ instanceof RangeError?new o.ErrnoError(22):$}},chrdev_stream_ops:{open(a){var c=o.getDevice(a.node.rdev);a.stream_ops=c.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,c)=>a<<8|c,registerDevice(a,c){o.devices[a]={stream_ops:c}},getDevice:a=>o.devices[a],getMounts(a){for(var c=[],d=[a];d.length;){var b=d.pop();c.push(b),d.push(...b.mounts)}return c},syncfs(a,c){typeof a=="function"&&(c=a,a=!1),o.syncFSRequests++,o.syncFSRequests>1&&R(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var d=o.getMounts(o.root.mount),b=0;function y(V){return o.syncFSRequests--,c(V)}function $(V){if(V)return $.errored?void 0:($.errored=!0,y(V));++b>=d.length&&y(null)}for(var G of d)G.type.syncfs?G.type.syncfs(G,a,$):$(null)},mount(a,c,d){var b=d==="/",y=!d,$;if(b&&o.root)throw new o.ErrnoError(10);if(!b&&!y){var G=o.lookupPath(d,{follow_mount:!1});if(d=G.path,$=G.node,o.isMountpoint($))throw new o.ErrnoError(10);if(!o.isDir($.mode))throw new o.ErrnoError(54)}var V={type:a,opts:c,mountpoint:d,mounts:[]},o0=a.mount(V);return o0.mount=V,V.root=o0,b?o.root=o0:$&&($.mounted=V,$.mount&&$.mount.mounts.push(V)),o0},unmount(a){var c=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(c.node))throw new o.ErrnoError(28);var d=c.node,b=d.mounted,y=o.getMounts(b);for(var[$,G]of Object.entries(o.nameTable))for(;G;){var V=G.name_next;y.includes(G.mount)&&o.destroyNode(G),G=V}d.mounted=null;var o0=d.mount.mounts.indexOf(b);d.mount.mounts.splice(o0,1)},lookup(a,c){return a.node_ops.lookup(a,c)},mknod(a,c,d){var b=o.lookupPath(a,{parent:!0}),y=b.node,$=f0.basename(a);if(!$)throw new o.ErrnoError(28);if($==="."||$==="..")throw new o.ErrnoError(20);var G=o.mayCreate(y,$);if(G)throw new o.ErrnoError(G);if(!y.node_ops.mknod)throw new o.ErrnoError(63);return y.node_ops.mknod(y,$,c,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){var c={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return a.node_ops.statfs&&Object.assign(c,a.node_ops.statfs(a.mount.opts.root)),c},create(a,c=438){return c&=4095,c|=32768,o.mknod(a,c,0)},mkdir(a,c=511){return c&=1023,c|=16384,o.mknod(a,c,0)},mkdirTree(a,c){var d=a.split("/"),b="";for(var y of d)if(y){(b||f0.isAbs(a))&&(b+="/"),b+=y;try{o.mkdir(b,c)}catch($){if($.errno!=20)throw $}}},mkdev(a,c,d){return typeof d>"u"&&(d=c,c=438),c|=8192,o.mknod(a,c,d)},symlink(a,c){if(!dx.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(c,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var y=f0.basename(c),$=o.mayCreate(b,y);if($)throw new o.ErrnoError($);if(!b.node_ops.symlink)throw new o.ErrnoError(63);return b.node_ops.symlink(b,y,a)},rename(a,c){var d=f0.dirname(a),b=f0.dirname(c),y=f0.basename(a),$=f0.basename(c),G,V,o0;if(G=o.lookupPath(a,{parent:!0}),V=G.node,G=o.lookupPath(c,{parent:!0}),o0=G.node,!V||!o0)throw new o.ErrnoError(44);if(V.mount!==o0.mount)throw new o.ErrnoError(75);var D0=o.lookupNode(V,y),X0=dx.relative(a,b);if(X0.charAt(0)!==".")throw new o.ErrnoError(28);if(X0=dx.relative(c,d),X0.charAt(0)!==".")throw new o.ErrnoError(55);var M0;try{M0=o.lookupNode(o0,$)}catch{}if(D0!==M0){var T0=o.isDir(D0.mode),m0=o.mayDelete(V,y,T0);if(m0)throw new o.ErrnoError(m0);if(m0=M0?o.mayDelete(o0,$,T0):o.mayCreate(o0,$),m0)throw new o.ErrnoError(m0);if(!V.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(D0)||M0&&o.isMountpoint(M0))throw new o.ErrnoError(10);if(o0!==V&&(m0=o.nodePermissions(V,"w"),m0))throw new o.ErrnoError(m0);o.hashRemoveNode(D0);try{V.node_ops.rename(D0,o0,$),D0.parent=o0}catch(ix){throw ix}finally{o.hashAddNode(D0)}}},rmdir(a){var c=o.lookupPath(a,{parent:!0}),d=c.node,b=f0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!0);if($)throw new o.ErrnoError($);if(!d.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.rmdir(d,b),o.destroyNode(y)},readdir(a){var c=o.lookupPath(a,{follow:!0}),d=c.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var c=o.lookupPath(a,{parent:!0}),d=c.node;if(!d)throw new o.ErrnoError(44);var b=f0.basename(a),y=o.lookupNode(d,b),$=o.mayDelete(d,b,!1);if($)throw new o.ErrnoError($);if(!d.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.unlink(d,b),o.destroyNode(y)},readlink(a){var c=o.lookupPath(a),d=c.node;if(!d)throw new o.ErrnoError(44);if(!d.node_ops.readlink)throw new o.ErrnoError(28);return d.node_ops.readlink(d)},stat(a,c){var d=o.lookupPath(a,{follow:!c}),b=d.node,y=o.checkOpExists(b.node_ops.getattr,63);return y(b)},fstat(a){var c=o.getStreamChecked(a),d=c.node,b=c.stream_ops.getattr,y=b?c:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(y)},lstat(a){return o.stat(a,!0)},doChmod(a,c,d,b){o.doSetAttr(a,c,{mode:d&4095|c.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,c,d){var b;if(typeof a=="string"){var y=o.lookupPath(a,{follow:!d});b=y.node}else b=a;o.doChmod(null,b,c,d)},lchmod(a,c){o.chmod(a,c,!0)},fchmod(a,c){var d=o.getStreamChecked(a);o.doChmod(d,d.node,c,!1)},doChown(a,c,d){o.doSetAttr(a,c,{timestamp:Date.now(),dontFollow:d})},chown(a,c,d,b){var y;if(typeof a=="string"){var $=o.lookupPath(a,{follow:!b});y=$.node}else y=a;o.doChown(null,y,b)},lchown(a,c,d){o.chown(a,c,d,!0)},fchown(a,c,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,c,d){if(o.isDir(c.mode))throw new o.ErrnoError(31);if(!o.isFile(c.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(c,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,c,{size:d,timestamp:Date.now()})},truncate(a,c){if(c<0)throw new o.ErrnoError(28);var d;if(typeof a=="string"){var b=o.lookupPath(a,{follow:!0});d=b.node}else d=a;o.doTruncate(null,d,c)},ftruncate(a,c){var d=o.getStreamChecked(a);if(c<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,c)},utime(a,c,d){var b=o.lookupPath(a,{follow:!0}),y=b.node,$=o.checkOpExists(y.node_ops.setattr,63);$(y,{atime:c,mtime:d})},open(a,c,d=438){if(a==="")throw new o.ErrnoError(44);c=RA(c),c&64?d=d&4095|32768:d=0;var b,y;if(typeof a=="object")b=a;else{y=a.endsWith("/");var $=o.lookupPath(a,{follow:!(c&131072),noent_okay:!0});b=$.node,a=$.path}var G=!1;if(c&64)if(b){if(c&128)throw new o.ErrnoError(20)}else{if(y)throw new o.ErrnoError(31);b=o.mknod(a,d|511,0),G=!0}if(!b)throw new o.ErrnoError(44);if(o.isChrdev(b.mode)&&(c&=-513),c&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!G){var V=o.mayOpen(b,c);if(V)throw new o.ErrnoError(V)}c&512&&!G&&o.truncate(b,0),c&=-131713;var o0=o.createStream({node:b,path:o.getPath(b),flags:c,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return o0.stream_ops.open&&o0.stream_ops.open(o0),G&&o.chmod(b,d&511),o0},close(a){if(o.isClosed(a))throw new o.ErrnoError(8);a.getdents&&(a.getdents=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(c){throw c}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,c,d){if(o.isClosed(a))throw new o.ErrnoError(8);if(!a.seekable||!a.stream_ops.llseek)throw new o.ErrnoError(70);if(d!=0&&d!=1&&d!=2)throw new o.ErrnoError(28);return a.position=a.stream_ops.llseek(a,c,d),a.ungotten=[],a.position},read(a,c,d,b,y){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.read)throw new o.ErrnoError(28);var $=typeof y<"u";if(!$)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var G=a.stream_ops.read(a,c,d,b,y);return $||(a.position+=G),G},write(a,c,d,b,y,$){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.write)throw new o.ErrnoError(28);a.seekable&&a.flags&1024&&o.llseek(a,0,2);var G=typeof y<"u";if(!G)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var V=a.stream_ops.write(a,c,d,b,y,$);return G||(a.position+=V),V},mmap(a,c,d,b,y){if((b&2)!==0&&(y&2)===0&&(a.flags&2097155)!==2)throw new o.ErrnoError(2);if((a.flags&2097155)===1)throw new o.ErrnoError(2);if(!a.stream_ops.mmap)throw new o.ErrnoError(43);if(!c)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,c,d,b,y)},msync(a,c,d,b,y){return a.stream_ops.msync?a.stream_ops.msync(a,c,d,b,y):0},ioctl(a,c,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,c,d)},readFile(a,c={}){c.flags=c.flags||0,c.encoding=c.encoding||"binary",c.encoding!=="utf8"&&c.encoding!=="binary"&&d0(`Invalid encoding type "${c.encoding}"`);var d=o.open(a,c.flags),b=o.stat(a),y=b.size,$=new Uint8Array(y);return o.read(d,$,0,y,0),c.encoding==="utf8"&&($=sA($)),o.close(d),$},writeFile(a,c,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);c=xA(c),o.write(b,c,0,c.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var c=o.lookupPath(a,{follow:!0});if(c.node===null)throw new o.ErrnoError(44);if(!o.isDir(c.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(c.node,"x");if(d)throw new o.ErrnoError(d);o.currentPath=c.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(b,y,$,G,V)=>G,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),c=0,d=()=>(c===0&&(Je(a),c=a.byteLength),a[--c]);o.createDevice("/dev","random",d),o.createDevice("/dev","urandom",d),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var a=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var c=o.createNode(a,"fd",16895,73);return c.stream_ops={llseek:n0.stream_ops.llseek},c.node_ops={lookup(d,b){var y=+b,$=o.getStreamChecked(y),G={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>$.path},id:y+1};return G.parent=G,G},readdir(){return Array.from(o.streams.entries()).filter(([d,b])=>b).map(([d,b])=>d.toString())}},c}},{},"/proc/self/fd")},createStandardStreams(a,c,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),c?o.createDevice("/dev","stdout",null,c):o.symlink("/dev/tty","/dev/stdout"),d?o.createDevice("/dev","stderr",null,d):o.symlink("/dev/tty1","/dev/stderr");var b=o.open("/dev/stdin",0),y=o.open("/dev/stdout",1),$=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(n0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:n0,PROXYFS:k0}},init(a,c,d){o.initialized=!0,a??(a=n.stdin),c??(c=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,c,d)},quit(){o.initialized=!1,ie(0);for(var a of o.streams)a&&o.close(a)},findObject(a,c){var d=o.analyzePath(a,c);return d.exists?d.object:null},analyzePath(a,c){try{var d=o.lookupPath(a,{follow:!c});a=d.path}catch{}var b={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var d=o.lookupPath(a,{parent:!0});b.parentExists=!0,b.parentPath=d.path,b.parentObject=d.node,b.name=f0.basename(a),d=o.lookupPath(a,{follow:!c}),b.exists=!0,b.path=d.path,b.object=d.node,b.name=d.node.name,b.isRoot=d.path==="/"}catch(y){b.error=y.errno}return b},createPath(a,c,d,b){a=typeof a=="string"?a:o.getPath(a);for(var y=c.split("/").reverse();y.length;){var $=y.pop();if($){var G=f0.join2(a,$);try{o.mkdir(G)}catch(V){if(V.errno!=20)throw V}a=G}}return G},createFile(a,c,d,b,y){var $=f0.join2(typeof a=="string"?a:o.getPath(a),c),G=oA(b,y);return o.create($,G)},createDataFile(a,c,d,b,y,$){var G=c;a&&(a=typeof a=="string"?a:o.getPath(a),G=c?f0.join2(a,c):a);var V=oA(b,y),o0=o.create(G,V);if(d){d=xA(d),o.chmod(o0,V|146);var D0=o.open(o0,577);o.write(D0,d,0,d.length,0,$),o.close(D0),o.chmod(o0,V)}},createDevice(a,c,d,b){var y,$=f0.join2(typeof a=="string"?a:o.getPath(a),c),G=oA(!!d,!!b);(y=o.createDevice).major??(y.major=64);var V=o.makedev(o.createDevice.major++,0);return o.registerDevice(V,{open(o0){o0.seekable=!1},close(o0){b?.buffer?.length&&b(10)},read(o0,D0,X0,M0,T0){for(var m0=0,ix=0;ix<M0;ix++){var yx;try{yx=d()}catch{throw new o.ErrnoError(29)}if(yx===void 0&&m0===0)throw new o.ErrnoError(6);if(yx==null)break;m0++,D0[X0+ix]=yx}return m0&&(o0.node.atime=Date.now()),m0},write(o0,D0,X0,M0,T0){for(var m0=0;m0<M0;m0++)try{b(D0[X0+m0])}catch{throw new o.ErrnoError(29)}return M0&&(o0.node.mtime=o0.node.ctime=Date.now()),m0}}),o.mkdev($,G,V)},forceLoadFile(a){if(a.isDevice||a.isFolder||a.link||a.contents)return!0;if(globalThis.XMLHttpRequest)d0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{a.contents=S(a.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(a,c,d,b,y){class ${constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get(T0){if(!(T0>this.length-1||T0<0)){var m0=T0%this.chunkSize,ix=T0/this.chunkSize|0;return this.getter(ix)[m0]}}setDataGetter(T0){this.getter=T0}cacheLength(){var T0=new XMLHttpRequest;T0.open("HEAD",d,!1),T0.send(null),T0.status>=200&&T0.status<300||T0.status===304||d0("Couldn't load "+d+". Status: "+T0.status);var m0=Number(T0.getResponseHeader("Content-length")),ix,yx=(ix=T0.getResponseHeader("Accept-Ranges"))&&ix==="bytes",Mx=(ix=T0.getResponseHeader("Content-Encoding"))&&ix==="gzip",Gx=1024*1024;yx||(Gx=m0);var Ux=(Kx,jA)=>{Kx>jA&&d0("invalid range ("+Kx+", "+jA+") or no bytes requested!"),jA>m0-1&&d0("only "+m0+" bytes available! programmer error!");var fx=new XMLHttpRequest;return fx.open("GET",d,!1),m0!==Gx&&fx.setRequestHeader("Range","bytes="+Kx+"-"+jA),fx.responseType="arraybuffer",fx.overrideMimeType&&fx.overrideMimeType("text/plain; charset=x-user-defined"),fx.send(null),fx.status>=200&&fx.status<300||fx.status===304||d0("Couldn't load "+d+". Status: "+fx.status),fx.response!==void 0?new Uint8Array(fx.response||[]):re(fx.responseText||"",!0)},Fe=this;Fe.setDataGetter(Kx=>{var jA=Kx*Gx,fx=(Kx+1)*Gx-1;return fx=Math.min(fx,m0-1),typeof Fe.chunks[Kx]>"u"&&(Fe.chunks[Kx]=Ux(jA,fx)),typeof Fe.chunks[Kx]>"u"&&d0("doXHR failed!"),Fe.chunks[Kx]}),(Mx||!m0)&&(Gx=m0=1,m0=this.getter(0).length,Gx=m0,N("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=m0,this._chunkSize=Gx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||d0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var G=new $,V={isDevice:!1,contents:G}}else var V={isDevice:!1,url:d};var o0=o.createFile(a,c,V,b,y);V.contents?o0.contents=V.contents:V.url&&(o0.contents=null,o0.url=V.url),Object.defineProperties(o0,{usedBytes:{get:function(){return this.contents.length}}});var D0={};for(let[M0,T0]of Object.entries(o0.stream_ops))D0[M0]=(...m0)=>(o.forceLoadFile(o0),T0(...m0));function X0(M0,T0,m0,ix,yx){var Mx=M0.node.contents;if(yx>=Mx.length)return 0;var Gx=Math.min(Mx.length-yx,ix);if(Mx.slice)for(var Ux=0;Ux<Gx;Ux++)T0[m0+Ux]=Mx[yx+Ux];else for(var Ux=0;Ux<Gx;Ux++)T0[m0+Ux]=Mx.get(yx+Ux);return Gx}return D0.read=(M0,T0,m0,ix,yx)=>(o.forceLoadFile(o0),X0(M0,T0,m0,ix,yx)),D0.mmap=(M0,T0,m0,ix,yx)=>{o.forceLoadFile(o0);var Mx=LA(T0);if(!Mx)throw new o.ErrnoError(48);return X0(M0,cx,Mx,T0,m0),{ptr:Mx,allocated:!0}},o0.stream_ops=D0,o0}},w0={currentUmask:18,calculateAt(a,c,d){if(f0.isAbs(c))return c;var b;if(a===-100)b=o.cwd();else{var y=w0.getStreamFromFD(a);b=y.path}if(c.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+c},writeStat(a,c){c0[a>>2]=c.dev,c0[a+4>>2]=c.mode,c0[a+8>>2]=c.nlink,c0[a+12>>2]=c.uid,c0[a+16>>2]=c.gid,c0[a+20>>2]=c.rdev,W0[a+24>>3]=BigInt(c.size),G0[a+32>>2]=4096,G0[a+36>>2]=c.blocks;var d=c.atime.getTime(),b=c.mtime.getTime(),y=c.ctime.getTime();return W0[a+40>>3]=BigInt(Math.floor(d/1e3)),c0[a+48>>2]=d%1e3*1e3*1e3,W0[a+56>>3]=BigInt(Math.floor(b/1e3)),c0[a+64>>2]=b%1e3*1e3*1e3,W0[a+72>>3]=BigInt(Math.floor(y/1e3)),c0[a+80>>2]=y%1e3*1e3*1e3,W0[a+88>>3]=BigInt(c.ino),0},writeStatFs(a,c){c0[a+4>>2]=c.bsize,c0[a+60>>2]=c.bsize,W0[a+8>>3]=BigInt(c.blocks),W0[a+16>>3]=BigInt(c.bfree),W0[a+24>>3]=BigInt(c.bavail),W0[a+32>>3]=BigInt(c.files),W0[a+40>>3]=BigInt(c.ffree),c0[a+48>>2]=c.fsid,c0[a+64>>2]=c.flags,c0[a+56>>2]=c.namelen},doMsync(a,c,d,b,y){if(!o.isFile(c.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var $=iA.slice(a,a+d);o.msync(c,$,y,d,b)},getStreamFromFD(a){var c=o.getStreamChecked(a);return c},varargs:void 0,getStr(a){var c=gx(a);return c}};function We(a,c,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(c){case 0:{var y=aA();if(y<0)return-28;for(;o.streams[y];)y++;var $;return $=o.dupStream(b,y),$.fd}case 1:case 2:return 0;case 3:return b.flags;case 4:{var y=aA(),G=289792;return b.flags=b.flags&~G|y&G,0}case 12:{var y=MA(),V=0;return V0[y+V>>1]=2,0}case 13:case 14:return 0}return-28}catch(o0){if(typeof o>"u"||o0.name!=="ErrnoError")throw o0;return-o0.errno}}function GA(a,c,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(c){case 21509:return b.tty?0:-59;case 21505:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcgets){var y=b.tty.ops.ioctl_tcgets(b),$=MA();G0[$>>2]=y.c_iflag||0,G0[$+4>>2]=y.c_oflag||0,G0[$+8>>2]=y.c_cflag||0,G0[$+12>>2]=y.c_lflag||0;for(var G=0;G<32;G++)cx[$+G+17]=y.c_cc[G]||0;return 0}return 0}case 21510:case 21511:case 21512:return b.tty?0:-59;case 21506:case 21507:case 21508:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcsets){for(var $=MA(),V=G0[$>>2],o0=G0[$+4>>2],D0=G0[$+8>>2],X0=G0[$+12>>2],M0=[],G=0;G<32;G++)M0.push(cx[$+G+17]);return b.tty.ops.ioctl_tcsets(b.tty,c,{c_iflag:V,c_oflag:o0,c_cflag:D0,c_lflag:X0,c_cc:M0})}return 0}case 21519:{if(!b.tty)return-59;var $=MA();return G0[$>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var $=MA();return o.ioctl(b,c,$)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var T0=b.tty.ops.ioctl_tiocgwinsz(b.tty),$=MA();V0[$>>1]=T0[0],V0[$+2>>1]=T0[1]}return 0}case 21524:return b.tty?0:-59;case 21515:return b.tty?0:-59;default:return-28}}catch(m0){if(typeof o>"u"||m0.name!=="ErrnoError")throw m0;return-m0.errno}}function hA(a,c,d,b){w0.varargs=b;try{c=w0.getStr(c),c=w0.calculateAt(a,c);var y=b?aA():0;return d&64&&(y&=~w0.currentUmask),o.open(c,d,y).fd}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var ot=()=>2147483648,ke=(a,c)=>Math.ceil(a/c)*c,pr=a=>{var c=UA.buffer.byteLength,d=(a-c+65535)/65536|0;try{return UA.grow(d),Q(),1}catch{}},br=a=>{var c=iA.length;a>>>=0;var d=ot();if(a>d)return!1;for(var b=1;b<=4;b*=2){var y=c*(1+.2/b);y=Math.min(y,a+100663296);var $=Math.min(d,ke(Math.max(a,y),65536)),G=pr($);if(G)return!0}return!1};function Ft(a){try{var c=w0.getStreamFromFD(a);return o.close(c),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var vt=(a,c,d,b)=>{for(var y=0,$=0;$<d;$++){var G=c0[c>>2],V=c0[c+4>>2];c+=8;var o0=o.read(a,cx,G,V,b);if(o0<0)return-1;if(y+=o0,o0<V)break;typeof b<"u"&&(b+=o0)}return y};function lt(a,c,d,b){try{var y=w0.getStreamFromFD(a),$=vt(y,c,d);return c0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var we=9007199254740992,mr=-9007199254740992,te=a=>a<mr||a>we?NaN:Number(a);function _e(a,c,d,b){c=te(c);try{if(isNaN(c))return 22;var y=w0.getStreamFromFD(a);return o.llseek(y,c,d),W0[b>>3]=BigInt(y.position),y.getdents&&c===0&&d===0&&(y.getdents=null),0}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var ct=(a,c,d,b)=>{for(var y=0,$=0;$<d;$++){var G=c0[c>>2],V=c0[c+4>>2];c+=8;var o0=o.write(a,cx,G,V,b);if(o0<0)return-1;if(y+=o0,o0<V)break;typeof b<"u"&&(b+=o0)}return y};function hr(a,c,d,b){try{var y=w0.getStreamFromFD(a),$=ct(y,c,d);return c0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var ft=0,ne=()=>ge||ft>0,Xe=a=>{I=a,ne()||(n.onExit?.(a),e0=!0),m(a,new nA(a))},jr=(a,c)=>{I=a,ne()||l0(),Xe(a)},gr=a=>{if(a instanceof nA||a=="unwind")return I;m(1,a)},Et=(a,c,d)=>Ke(a,iA,c,d),yr=a=>se(a),Bt=a=>{var c=ee(a)+1,d=yr(c);return Et(a,d,c),d},Ct=(...a)=>o.createPath(...a),Se=(...a)=>o.unlink(...a),dt=(...a)=>o.createLazyFile(...a),ut=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=at,o.preloadFile=OA,o.staticInit(),n.noExitRuntime&&(ge=n.noExitRuntime),n.preloadPlugins&&(ye=n.preloadPlugins),n.print&&(N=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(D=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=Dx,n.addRunDependency=Nx,n.removeRunDependency=Ve,n.FS_preloadFile=OA,n.FS_unlink=Se,n.FS_createPath=Ct,n.FS_createDevice=ut,n.FS=o,n.FS_createDataFile=ze,n.FS_createLazyFile=dt,n.PROXYFS=k0;var kr,wr,ie,_r,se,Ye,Ix,Dt,UA;function ae(a){kr=n._main=a.__main_argc_argv,wr=a.__funcs_on_exit,ie=a.fflush,_r=a._emscripten_stack_restore,se=a._emscripten_stack_alloc,Ye=a.emscripten_stack_get_current,Ix=UA=a.memory,Dt=a.__indirect_function_table}var Qe={__assert_fail:pA,__syscall_fcntl64:We,__syscall_ioctl:GA,__syscall_openat:hA,emscripten_resize_heap:br,fd_close:Ft,fd_read:lt,fd_seek:_e,fd_write:hr};function Dx(a=[]){var c=kr;a.unshift(D);var d=a.length,b=yr((d+1)*4),y=b;for(var $ of a)c0[y>>2]=Bt($),y+=4;c0[y>>2]=0;try{var G=c(d,b);return jr(G,!0),G}catch(V){return gr(V)}}function $e(a=u){if(Bx>0){b0=$e;return}if(s0(),Bx>0){b0=$e;return}function c(){if(n.calledRun=!0,!e0){H(),U?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||Dx(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),c()},1)):c()}var oe;return oe=await tx(),$e(),a0?i=n:i=new Promise((a,c)=>{U=a,J=c}),i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),zo={};TE(zo,{createPawnCC:()=>LE,createPawnDbg:()=>RE});Vo.exports=PE(zo);var IE=Ko(qE(),1),ME=Ko(NE(),1),LE=IE.default,RE=ME.default});var Le=Wa((Wm,mv)=>{"use strict";var XE=Object.create,Tt=Object.defineProperty,YE=Object.getOwnPropertyDescriptor,SF=Object.getOwnPropertyNames,QE=Object.getPrototypeOf,ZE=Object.prototype.hasOwnProperty,xB=(x,A,e)=>A in x?Tt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,AB=(x,A)=>function(){try{return A||(0,x[SF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},eB=(x,A)=>{for(var e in A)Tt(x,e,{get:A[e],enumerable:!0})},$F=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of SF(A))!ZE.call(x,t)&&t!==e&&Tt(x,t,{get:()=>A[t],enumerable:!(r=YE(A,t))||r.enumerable});return x},rB=(x,A,e)=>(e=x!=null?XE(QE(x)):{},$F(A||!x||!x.__esModule?Tt(e,"default",{value:x,enumerable:!0}):e,x)),tB=x=>$F(Tt({},"__esModule",{value:!0}),x),A0=(x,A,e)=>xB(x,typeof A!="symbol"?A+"":A,e),nB=AB({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var i;(function(){function f(r0){r0=r0.split("-")[0];for(var E0=r0.split(".").slice(0,3);E0.length<3;)E0.push("00");return E0=E0.map((p0,Z0,Y0)=>p0.padStart(2,"0")),E0.join("")}var C=r0=>[r0/1e4|0,(r0/100|0)%100,r0%100].join("."),g=2147483647,T=typeof process<"u"&&process.versions?.node?f(process.versions.node):g;if(T<180300)throw new Error(`This emscripten-generated code requires node v${C(180300)} (detected v${C(T)})`);var q=typeof navigator<"u"&&navigator.userAgent;if(q){var Y=q.includes("Safari/")&&!q.includes("Chrome/")&&q.match(/Version\/(\d+\.?\d*\.?\d*)/)?f(q.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):g;if(Y<15e4)throw new Error(`This emscripten-generated code requires Safari v${C(15e4)} (detected v${Y})`);var X=q.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(q.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):g;if(X<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${X})`);var x0=q.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(q.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):g;if(x0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${x0})`)}})();var n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=!F&&!E&&!v,D=[],m="./this.program",w=(f,C)=>{throw C};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var j="",S,P;if(E){if(!(globalThis.process?.versions?.node&&globalThis.process?.type!="renderer"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var N=require("fs");j=__dirname+"/",P=C=>{C=L(C)?new URL(C):C;var g=N.readFileSync(C);return k(Buffer.isBuffer(g)),g},S=async(C,g=!0)=>{C=L(C)?new URL(C):C;var T=N.readFileSync(C,g?void 0:"utf8");return k(g?Buffer.isBuffer(T):typeof T=="string"),T},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),D=process.argv.slice(2),w=(C,g)=>{throw process.exitCode=C,g}}else if(!u)if(F||v){try{j=new URL(".",r).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");v&&(P=f=>{var C=new XMLHttpRequest;return C.open("GET",f,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),S=async f=>{if(L(f))return new Promise((g,T)=>{var q=new XMLHttpRequest;q.open("GET",f,!0),q.responseType="arraybuffer",q.onload=()=>{if(q.status==200||q.status==0&&q.response){g(q.response);return}T(q.status)},q.onerror=T,q.send(null)});var C=await fetch(f,{credentials:"same-origin"});if(C.ok)return C.arrayBuffer();throw new Error(C.status+" : "+C.url)}}else throw new Error("environment detection error");var R=console.log.bind(console),O=console.error.bind(console);k(!u,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var e0;globalThis.WebAssembly||O("no native wasm support detected");var I=!1;function k(f,C){f||lx("Assertion failed"+(C?": "+C:""))}var L=f=>f.startsWith("file://");function Z(){var f=hi();k((f&3)==0),f==0&&(f+=4),y0[f>>2]=34821223,y0[f+4>>2]=2310721022,y0[0]=1668509029}function W(){if(!I){var f=hi();f==0&&(f+=4);var C=y0[f>>2],g=y0[f+4>>2];(C!=34821223||g!=2310721022)&&lx(`Stack overflow! Stack cookie has been overwritten at ${dx(f)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${dx(g)} ${dx(C)}`),y0[0]!=1668509029&&lx("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class U{}class J extends U{}var a0=!0;(()=>{var f=new Int16Array(1),C=new Int8Array(f.buffer);f[0]=25459,(C[0]!==115||C[1]!==99)&&lx("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function i0(f){Object.getOwnPropertyDescriptor(n,f)||Object.defineProperty(n,f,{configurable:!0,set(){lx(`Attempt to set \`Module.${f}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function Q(f){return()=>k(!1,`call to '${f}' via reference taken before Wasm module initialization`)}function s0(f){Object.getOwnPropertyDescriptor(n,f)&&lx(`\`Module.${f}\` was supplied but \`${f}\` not included in INCOMING_MODULE_JS_API`)}function H(f){return f==="FS_createPath"||f==="FS_createDataFile"||f==="FS_createPreloadedFile"||f==="FS_preloadFile"||f==="FS_unlink"||f==="addRunDependency"||f==="FS_createLazyFile"||f==="FS_createDevice"||f==="removeRunDependency"}function v0(f){l0(f)}function l0(f){Object.getOwnPropertyDescriptor(n,f)||Object.defineProperty(n,f,{configurable:!0,get(){var C=`'${f}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;H(f)&&(C+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),lx(C)}})}function B0(f){for(var C=0,g=f.length,T=new Uint8Array(g),q;C<g;++C)q=f.charCodeAt(C),T[C]=~q>>8&q;return T}var d0,$0,q0=!1;function Ex(){var f=tn.buffer;Zx=new Int8Array(f),NA=new Int16Array(f),n.HEAPU8=gx=new Uint8Array(f),ox=new Uint16Array(f),IA=new Int32Array(f),y0=new Uint32Array(f),Dr=new Float32Array(f),ge=new Float64Array(f),ur=new BigInt64Array(f),sA=new BigUint64Array(f)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function Qx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)it(n.preRun.shift());i0("preRun"),pA(f0)}function PA(){k(!q0),q0=!0,W(),Sr.__wasm_call_ctors()}function qA(){if(W(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)MA(n.postRun.shift());i0("postRun"),pA(aA)}function lx(f){n.onAbort?.(f),f=`Aborted(${f})`,O(f),I=!0;var C=new WebAssembly.RuntimeError(f);throw $0?.(C),C}function tx(){lx("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var nA={init:tx,createDataFile:tx,createPreloadedFile:tx,createLazyFile:tx,open:tx,mkdev:tx,registerDevice:tx,analyzePath:tx,ErrnoError:tx};function V0(f,C){return(...g)=>{k(q0,`native function \`${f}\` called before runtime initialization`);var T=Sr[f];return k(T,`exported native function \`${f}\` not found`),k(g.length<=C,`native function \`${f}\` called with ${g.length} args but expects ${C}`),T(...g)}}var G0;function W0(){return B0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
1528
1528
  \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F|\`\r\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\b\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~~\0\`\x7F~\x7F\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`|\x7F|\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\xA7\x07env_emval_new_cstring\0env_emval_get_property\0env\r_emval_decref\0\0env_emval_create_invoker\0env\r_emval_incref\0\0env\r_emval_invoke\0env_emval_run_destructors\0\0env_emval_get_module_property\0env_embind_register_value_object\0\venv#_embind_register_value_object_field\0\renv_embind_finalize_value_object\0\0env_embind_register_class\0env"_embind_register_class_constructor\0\venv_embind_register_class_property\0\renv_embind_register_function\0env\v__cxa_throw\0env_embind_register_void\0env_embind_register_bool\0\x07env_embind_register_integer\0
1529
1529
  env_embind_register_bigint\0env_embind_register_float\0env\x1B_embind_register_std_string\0env_embind_register_std_wstring\0env_embind_register_emval\0\0env_embind_register_memory_view\0wasi_snapshot_preview1
1530
1530
  random_get\0env _abort_js\0wasi_snapshot_preview1\bfd_write\0 wasi_snapshot_preview1\bfd_close\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\xB6\xB4 \0\b\0\0\0\b\b\0\b\0 \0\0\b\0\b\0\0 \x07  \x07
@@ -2172,55 +2172,55 @@ jv.\xC9\xC2\x81\x85,r\x92\xA1\xE8\xBF\xA2Kf\xA8p\x8BK\xC2\xA3Ql\xC7\xE8\x92\xD
2172
2172
  \x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\x91\x9C\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xCB\x9C\v\f\0A\xD7\x9C\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\x85\x9D\v\0A\x91\x9D\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xBF\x9D\v\0A\xCB\x9D\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\x82\x9E\v\0\0\0\0\0\0\0\0\0 \0A\xB3\x9E\v\0A\xBF\x9E\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xED\x9E\v\0A\xF9\x9E\v\xAF\b\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\x90\\\0\0\fR\0\0\xB0O\0\0\xF8R\0\0N10__cxxabiv116__shim_type_infoE\0\0\0\0\fR\0\0\xE0O\0\0\xA4O\0\0N10__cxxabiv117__class_type_infoE\0\0\0\fR\0\0P\0\0\xA4O\0\0N10__cxxabiv117__pbase_type_infoE\0\0\0\fR\0\0@P\0\0P\0\0N10__cxxabiv119__pointer_type_infoE\0\fR\0\0pP\0\0\xA4O\0\0N10__cxxabiv120__function_type_infoE\0\0\0\0\fR\0\0\xA4P\0\0P\0\0N10__cxxabiv129__pointer_to_member_type_infoE\0\0\0\0\0\0\0\xF0P\0\0G\0\0\0H\0\0\0I\0\0\0J\0\0\0K\0\0\0\fR\0\0\xFCP\0\0\xA4O\0\0N10__cxxabiv123__fundamental_type_infoE\0\xDCP\0\0,Q\0\0v\0Dn\0\0\0\0\xDCP\0\0<Q\0\0b\0\0\0\xDCP\0\0HQ\0\0c\0\0\0\xDCP\0\0TQ\0\0h\0\0\0\xDCP\0\0\`Q\0\0a\0\0\0\xDCP\0\0lQ\0\0s\0\0\0\xDCP\0\0xQ\0\0t\0\0\0\xDCP\0\0\x84Q\0\0i\0\0\0\xDCP\0\0\x90Q\0\0j\0\0\0\xDCP\0\0\x9CQ\0\0l\0\0\0\xDCP\0\0\xA8Q\0\0m\0\0\0\xDCP\0\0\xB4Q\0\0x\0\0\0\xDCP\0\0\xC0Q\0\0y\0\0\0\xDCP\0\0\xCCQ\0\0f\0\0\0\xDCP\0\0\xD8Q\0\0d\0\0\0\0\0\0\0\xD4O\0\0G\0\0\0L\0\0\0I\0\0\0J\0\0\0M\0\0\0N\0\0\0O\0\0\0P\0\0\0\0\0\0\0,R\0\0G\0\0\0Q\0\0\0I\0\0\0J\0\0\0M\0\0\0R\0\0\0S\0\0\0T\0\0\0\fR\0\x008R\0\0\xD4O\0\0N10__cxxabiv120__si_class_type_infoE\0\0\0\0\0\0\0\x004P\0\0G\0\0\0U\0\0\0I\0\0\0J\0\0\0V\0\0\0\xE4Q\0\0\x84R\0\0St9exception\0\0\0\0\0\0\0\0\xA8R\0\x009\0\0\0W\0\0\0X\0\0\0\fR\0\0\xB4R\0\0|R\0\0St11logic_error\0\0\0\0\0\xD8R\0\x009\0\0\0Y\0\0\0X\0\0\0\fR\0\0\xE4R\0\0\xA8R\0\0St12length_error\0\0\0\0\xE4Q\0\0\0S\0\0St9type_info\0\0\0\0\0\0\xA0N\0\xEB\xA7~ u\x86\xFA\0\xB9,\xFD\xB7\x8Az\xBC\0\xCC\xA2\0=I\xD7\0\b\0\x93\b\x8F*_\xB7\xFAX\xD9\xFD\xCA\xBD\xE1\xCD\xDC@x\0}ga\xEC\0\xE5
2173
2173
  \xD4\0\xCC>Ov\x98\xAF\0\0D\0\xAE\0\xAE\`\0\xFAw!\xEB+\0\`A\x92\0\xA9\xA3nN\0A\xD8\xA7\v\f\0\0\0\0\0\0\0\0*\0A\xF8\xA7\v'9H\0A\x8E\xA8\v\x92\0A\xA2\xA8\v\x8D8R\`S\0\0\xCA\0\0\0\0\0\0\0\0\xBB\xDB\xEB\x07+\x07;\x07P\x07Success\0Illegal byte sequence\0Domain error\0Result not representable\0Not a tty\0Permission denied\0Operation not permitted\0No such file or directory\0No such process\0File exists\0Value too large for defined data type\0No space left on device\0Out of memory\0Resource busy\0Interrupted system call\0Resource temporarily unavailable\0Invalid seek\0Cross-device link\0Read-only file system\0Directory not empty\0Connection reset by peer\0Operation timed out\0Connection refused\0Host is down\0Host is unreachable\0Address in use\0Broken pipe\0I/O error\0No such device or address\0Block device required\0No such device\0Not a directory\0Is a directory\0Text file busy\0Exec format error\0Invalid argument\0Argument list too long\0Symbolic link loop\0Filename too long\0Too many open files in system\0No file descriptors available\0Bad file descriptor\0No child process\0Bad address\0File too large\0Too many links\0No locks available\0Resource deadlock would occur\0State not recoverable\0Owner died\0Operation canceled\0Function not implemented\0No message of desired type\0Identifier removed\0Device not a stream\0No data available\0Device timeout\0Out of streams resources\0Link has been severed\0Protocol error\0Bad message\0File descriptor in bad state\0Not a socket\0Destination address required\0Message too large\0Protocol wrong type for socket\0Protocol not available\0Protocol not supported\0Socket type not supported\0Not supported\0Protocol family not supported\0Address family not supported by protocol\0Address not available\0Network is down\0Network unreachable\0Connection reset by network\0Connection aborted\0No buffer space available\0Socket is connected\0Socket not connected\0Cannot send after socket shutdown\0Operation already in progress\0Operation in progress\0Stale file handle\0Remote I/O error\0Quota exceeded\0No medium found\0Wrong medium type\0Multihop attempted\0Required key not available\0Key has expired\0Key has been revoked\0Key was rejected by service\0A\xB0\xB7\vI\0\0\0 F\0\0 K\0\0\0\0\0\0\0\0\0\xA0J\0\0\xA0K\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 L\0\0\0\0\0\0\0\0\0\x07\0\0\0\0 \0\0\0\0\0\0\0A\x84\xB8\v@\0A\x9C\xB8\vA\0\0\0B\0\0\0u\0\0\0\0A\xB4\xB8\v\0A\xC4\xB8\v\xFF\xFF\xFF\xFF
2174
2174
  \0A\x88\xB9\v \xF8[\0\x008y\0\0\0A\x9C\xB9\vE\0A\xB4\xB9\v
2175
- A\0\0\0F\0\0\0Xy\0A\xCC\xB9\v\0A\xDC\xB9\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA0\xBA\v\x07\x90\\\0\0P{`)}function cx(f){return f}async function et(f){return f}async function rt(f,C){try{var g=await et(f),T=await WebAssembly.instantiate(g,C);return T}catch(q){L(`failed to asynchronously prepare wasm: ${q}`),R(f)&&L(`warning: Loading from a file URI (${f}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`),lx(q)}}async function tt(f,C,g){return rt(C,g)}function l0(){var f={env:Oa,wasi_snapshot_preview1:Oa};return f}async function nt(){function f(X,x0){return _r=X.exports,tf(_r),Ex(),_r}var C=n;function g(X){return k(n===C,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),C=null,f(X.instance)}var T=l0();if(n.instantiateWasm)return new Promise((X,x0)=>{try{n.instantiateWasm(T,(e0,E0)=>{X(f(e0,E0))})}catch(e0){L(`Module.instantiateWasm callback failed with error: ${e0}`),x0(e0)}});G0??(G0=W0());var q=await tt(t0,G0,T),Y=g(q);return Y}class nA{constructor(C){A0(this,"name","ExitStatus"),this.message=`Program terminated with exit(${C})`,this.status=C}}var qA,NA,dr,Yx,ur,je,ox,y0,sA,gx,DA=f=>{for(;f.length>0;)f.shift()(n)},iA=[],IA=f=>iA.push(f),f0=[],st=f=>f0.push(f),He=!0;function dx(f){return k(typeof f=="number",`ptrToString expects a number, got ${typeof f}`),f>>>=0,"0x"+f.toString(16).padStart(8,"0")}var Hx=f=>{Hx.shown||(Hx.shown={}),Hx.shown[f]||(Hx.shown[f]=1,E&&(f="warning: "+f),L(f))};class Ae{constructor(C){this.excPtr=C,this.ptr=C-24}set_type(C){y0[this.ptr+4>>2]=C}get_type(){return y0[this.ptr+4>>2]}set_destructor(C){y0[this.ptr+8>>2]=C}get_destructor(){return y0[this.ptr+8>>2]}set_caught(C){C=C?1:0,Yx[this.ptr+12]=C}get_caught(){return Yx[this.ptr+12]!=0}set_rethrown(C){C=C?1:0,Yx[this.ptr+13]=C}get_rethrown(){return Yx[this.ptr+13]!=0}init(C,g){this.set_adjusted_ptr(0),this.set_type(C),this.set_destructor(g)}set_adjusted_ptr(C){y0[this.ptr+16>>2]=C}get_adjusted_ptr(){return y0[this.ptr+16>>2]}}var Je=0,ee=(f,C,g)=>{var T=new Ae(f);T.init(C,g),Je++,k(!1,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")},it=()=>lx("native code called abort()"),nx={},MA=f=>{for(;f.length;){var C=f.pop(),g=f.pop();g(C)}};function i0(f){return this.fromWireType(y0[f>>2])}var LA={},Qx={},aA={},q0=class extends Error{constructor(C){super(C),this.name="InternalError"}},k0=f=>{throw new q0(f)},pA=(f,C,g)=>{f.forEach(x0=>aA[x0]=C);function T(x0){var e0=g(x0);e0.length!==f.length&&k0("Mismatched type converter count");for(var E0=0;E0<f.length;++E0)qx(f[E0],e0[E0])}var q=new Array(C.length),Y=[],X=0;for(let[x0,e0]of C.entries())Qx.hasOwnProperty(e0)?q[x0]=Qx[e0]:(Y.push(e0),LA.hasOwnProperty(e0)||(LA[e0]=[]),LA[e0].push(()=>{q[x0]=Qx[e0],++X,X===Y.length&&T(q)}));Y.length===0&&T(q)},Ke=f=>{var C=nx[f];delete nx[f];var g=C.rawConstructor,T=C.rawDestructor,q=C.fields,Y=q.map(X=>X.getterReturnType).concat(q.map(X=>X.setterArgumentType));pA([f],Y,X=>{var x0={};for(var[e0,E0]of q.entries()){let p0=X[e0],Z0=E0.getter,Y0=E0.getterContext,Ax=X[e0+q.length],Mx=E0.setter,wx=E0.setterContext;x0[E0.fieldName]={read:FA=>p0.fromWireType(Z0(Y0,FA)),write:(FA,UA)=>{var jA=[];Mx(wx,FA,Ax.toWireType(jA,UA)),MA(jA)},optional:p0.optional}}return[{name:C.name,fromWireType:p0=>{var Z0={};for(var Y0 in x0)Z0[Y0]=x0[Y0].read(p0);return T(p0),Z0},toWireType:(p0,Z0)=>{for(var Y0 in x0)if(!(Y0 in Z0)&&!x0[Y0].optional)throw new TypeError(`Missing field: "${Y0}"`);var Ax=g();for(Y0 in x0)x0[Y0].write(Ax,Z0[Y0]);return p0!==null&&p0.push(T,Ax),Ax},readValueFromPointer:i0,destructorFunction:T}]})},ux=f=>{for(var C="";;){var g=gx[f++];if(!g)return C;C+=String.fromCharCode(g)}},Bx=class extends Error{constructor(C){super(C),this.name="BindingError"}},b0=f=>{throw new Bx(f)};function ze(f,C,g={}){var T=C.name;if(f||b0(`type "${T}" must have a positive integer typeid pointer`),Qx.hasOwnProperty(f)){if(g.ignoreDuplicateRegistrations)return;b0(`Cannot register type '${T}' twice`)}if(Qx[f]=C,delete aA[f],LA.hasOwnProperty(f)){var q=LA[f];delete LA[f],q.forEach(Y=>Y())}}function qx(f,C,g={}){return ze(f,C,g)}var ge=(f,C,g)=>{switch(C){case 1:return g?T=>Yx[T]:T=>gx[T];case 2:return g?T=>qA[T>>1]:T=>ox[T>>1];case 4:return g?T=>NA[T>>2]:T=>y0[T>>2];case 8:return g?T=>dr[T>>3]:T=>sA[T>>3];default:throw new TypeError(`invalid integer width (${C}): ${f}`)}},bA=f=>{if(f===null)return"null";var C=typeof f;return C==="object"||C==="array"||C==="function"?f.toString():""+f},RA=(f,C,g,T)=>{if(C<g||C>T)throw new TypeError(`Passing a number "${bA(C)}" from JS side to C/C++ side to an argument of type "${f}", which is outside the valid range [${g}, ${T}]!`)},at=(f,C,g,T,q)=>{C=ux(C);let Y=T===0n,X=x0=>x0;if(Y){let x0=g*8;X=e0=>BigInt.asUintN(x0,e0),q=X(q)}qx(f,{name:C,fromWireType:X,toWireType:(x0,e0)=>{if(typeof e0=="number")e0=BigInt(e0);else if(typeof e0!="bigint")throw new TypeError(`Cannot convert "${bA(e0)}" to ${C}`);return RA(C,e0,T,q),e0},readValueFromPointer:ge(C,g,!Y),destructorFunction:null})},o=(f,C,g,T)=>{C=ux(C),qx(f,{name:C,fromWireType:function(q){return!!q},toWireType:function(q,Y){return Y?g:T},readValueFromPointer:function(q){return this.fromWireType(gx[q])},destructorFunction:null})},w0=f=>({count:f.count,deleteScheduled:f.deleteScheduled,preservePointerOnDelete:f.preservePointerOnDelete,ptr:f.ptr,ptrType:f.ptrType,smartPtr:f.smartPtr,smartPtrType:f.smartPtrType}),Ve=f=>{function C(g){return g.$$.ptrType.registeredClass.name}b0(C(f)+" instance already deleted")},OA=!1,mA=f=>{},ot=f=>{f.smartPtr?f.smartPtrType.rawDestructor(f.smartPtr):f.ptrType.registeredClass.rawDestructor(f.ptr)},ye=f=>{f.count.value-=1;var C=f.count.value===0;C&&ot(f)},Dr=(f,C,g)=>{if(C===g)return f;if(g.baseClass===void 0)return null;var T=Dr(f,C,g.baseClass);return T===null?null:g.downcast(T)},pr={},Ft={},vt=(f,C)=>{for(C===void 0&&b0("ptr should not be undefined");f.baseClass;)C=f.upcast(C),f=f.baseClass;return C},lt=(f,C)=>(C=vt(f,C),Ft[C]),ke=(f,C)=>{(!C.ptrType||!C.ptr)&&k0("makeClassHandle requires ptr and ptrType");var g=!!C.smartPtrType,T=!!C.smartPtr;return g!==T&&k0("Both smartPtrType and smartPtr must be specified"),C.count={value:1},re(Object.create(f,{$$:{value:C,writable:!0}}))};function br(f){var C=this.getPointee(f);if(!C)return this.destructor(f),null;var g=lt(this.registeredClass,C);if(g!==void 0){if(g.$$.count.value===0)return g.$$.ptr=C,g.$$.smartPtr=f,g.clone();var T=g.clone();return this.destructor(f),T}function q(){return this.isSmartPointer?ke(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:C,smartPtrType:this,smartPtr:f}):ke(this.registeredClass.instancePrototype,{ptrType:this,ptr:f})}var Y=this.registeredClass.getActualType(C),X=pr[Y];if(!X)return q.call(this);var x0;this.isConst?x0=X.constPointerType:x0=X.pointerType;var e0=Dr(C,this.registeredClass,x0.registeredClass);return e0===null?q.call(this):this.isSmartPointer?ke(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:e0,smartPtrType:this,smartPtr:f}):ke(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:e0})}var re=f=>globalThis.FinalizationRegistry?(OA=new FinalizationRegistry(C=>{console.warn(C.leakWarning),ye(C.$$)}),re=C=>{var g=C.$$,T=!!g.smartPtr;if(T){var q={$$:g},Y=g.ptrType.registeredClass,X=new Error(`Embind found a leaked C++ instance ${Y.name} <${dx(g.ptr)}>.
2175
+ A\0\0\0F\0\0\0Xy\0A\xCC\xB9\v\0A\xDC\xB9\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA0\xBA\v\x07\x90\\\0\0P{`)}function cx(f){return f}async function et(f){return f}async function rt(f,C){try{var g=await et(f),T=await WebAssembly.instantiate(g,C);return T}catch(q){O(`failed to asynchronously prepare wasm: ${q}`),L(f)&&O(`warning: Loading from a file URI (${f}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`),lx(q)}}async function tt(f,C,g){return rt(C,g)}function c0(){var f={env:Ha,wasi_snapshot_preview1:Ha};return f}async function nt(){function f(X,x0){return Sr=X.exports,sf(Sr),Ex(),Sr}var C=n;function g(X){return k(n===C,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),C=null,f(X.instance)}var T=c0();if(n.instantiateWasm)return new Promise((X,x0)=>{try{n.instantiateWasm(T,(r0,E0)=>{X(f(r0,E0))})}catch(r0){O(`Module.instantiateWasm callback failed with error: ${r0}`),x0(r0)}});G0??(G0=W0());var q=await tt(e0,G0,T),Y=g(q);return Y}class iA{constructor(C){A0(this,"name","ExitStatus"),this.message=`Program terminated with exit(${C})`,this.status=C}}var NA,IA,ur,Zx,Dr,ge,ox,y0,sA,gx,pA=f=>{for(;f.length>0;)f.shift()(n)},aA=[],MA=f=>aA.push(f),f0=[],it=f=>f0.push(f),Je=!0;function dx(f){return k(typeof f=="number",`ptrToString expects a number, got ${typeof f}`),f>>>=0,"0x"+f.toString(16).padStart(8,"0")}var Jx=f=>{Jx.shown||(Jx.shown={}),Jx.shown[f]||(Jx.shown[f]=1,E&&(f="warning: "+f),O(f))};class ee{constructor(C){this.excPtr=C,this.ptr=C-24}set_type(C){y0[this.ptr+4>>2]=C}get_type(){return y0[this.ptr+4>>2]}set_destructor(C){y0[this.ptr+8>>2]=C}get_destructor(){return y0[this.ptr+8>>2]}set_caught(C){C=C?1:0,Zx[this.ptr+12]=C}get_caught(){return Zx[this.ptr+12]!=0}set_rethrown(C){C=C?1:0,Zx[this.ptr+13]=C}get_rethrown(){return Zx[this.ptr+13]!=0}init(C,g){this.set_adjusted_ptr(0),this.set_type(C),this.set_destructor(g)}set_adjusted_ptr(C){y0[this.ptr+16>>2]=C}get_adjusted_ptr(){return y0[this.ptr+16>>2]}}var Ke=0,re=(f,C,g)=>{var T=new ee(f);T.init(C,g),Ke++,k(!1,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")},st=()=>lx("native code called abort()"),nx={},LA=f=>{for(;f.length;){var C=f.pop(),g=f.pop();g(C)}};function n0(f){return this.fromWireType(y0[f>>2])}var RA={},xA={},oA={},N0=class extends Error{constructor(C){super(C),this.name="InternalError"}},k0=f=>{throw new N0(f)},bA=(f,C,g)=>{f.forEach(x0=>oA[x0]=C);function T(x0){var r0=g(x0);r0.length!==f.length&&k0("Mismatched type converter count");for(var E0=0;E0<f.length;++E0)Nx(f[E0],r0[E0])}var q=new Array(C.length),Y=[],X=0;for(let[x0,r0]of C.entries())xA.hasOwnProperty(r0)?q[x0]=xA[r0]:(Y.push(r0),RA.hasOwnProperty(r0)||(RA[r0]=[]),RA[r0].push(()=>{q[x0]=xA[r0],++X,X===Y.length&&T(q)}));Y.length===0&&T(q)},ze=f=>{var C=nx[f];delete nx[f];var g=C.rawConstructor,T=C.rawDestructor,q=C.fields,Y=q.map(X=>X.getterReturnType).concat(q.map(X=>X.setterArgumentType));bA([f],Y,X=>{var x0={};for(var[r0,E0]of q.entries()){let p0=X[r0],Z0=E0.getter,Y0=E0.getterContext,Ax=X[r0+q.length],Lx=E0.setter,wx=E0.setterContext;x0[E0.fieldName]={read:vA=>p0.fromWireType(Z0(Y0,vA)),write:(vA,HA)=>{var gA=[];Lx(wx,vA,Ax.toWireType(gA,HA)),LA(gA)},optional:p0.optional}}return[{name:C.name,fromWireType:p0=>{var Z0={};for(var Y0 in x0)Z0[Y0]=x0[Y0].read(p0);return T(p0),Z0},toWireType:(p0,Z0)=>{for(var Y0 in x0)if(!(Y0 in Z0)&&!x0[Y0].optional)throw new TypeError(`Missing field: "${Y0}"`);var Ax=g();for(Y0 in x0)x0[Y0].write(Ax,Z0[Y0]);return p0!==null&&p0.push(T,Ax),Ax},readValueFromPointer:n0,destructorFunction:T}]})},ux=f=>{for(var C="";;){var g=gx[f++];if(!g)return C;C+=String.fromCharCode(g)}},Bx=class extends Error{constructor(C){super(C),this.name="BindingError"}},b0=f=>{throw new Bx(f)};function Ve(f,C,g={}){var T=C.name;if(f||b0(`type "${T}" must have a positive integer typeid pointer`),xA.hasOwnProperty(f)){if(g.ignoreDuplicateRegistrations)return;b0(`Cannot register type '${T}' twice`)}if(xA[f]=C,delete oA[f],RA.hasOwnProperty(f)){var q=RA[f];delete RA[f],q.forEach(Y=>Y())}}function Nx(f,C,g={}){return Ve(f,C,g)}var ye=(f,C,g)=>{switch(C){case 1:return g?T=>Zx[T]:T=>gx[T];case 2:return g?T=>NA[T>>1]:T=>ox[T>>1];case 4:return g?T=>IA[T>>2]:T=>y0[T>>2];case 8:return g?T=>ur[T>>3]:T=>sA[T>>3];default:throw new TypeError(`invalid integer width (${C}): ${f}`)}},mA=f=>{if(f===null)return"null";var C=typeof f;return C==="object"||C==="array"||C==="function"?f.toString():""+f},OA=(f,C,g,T)=>{if(C<g||C>T)throw new TypeError(`Passing a number "${mA(C)}" from JS side to C/C++ side to an argument of type "${f}", which is outside the valid range [${g}, ${T}]!`)},at=(f,C,g,T,q)=>{C=ux(C);let Y=T===0n,X=x0=>x0;if(Y){let x0=g*8;X=r0=>BigInt.asUintN(x0,r0),q=X(q)}Nx(f,{name:C,fromWireType:X,toWireType:(x0,r0)=>{if(typeof r0=="number")r0=BigInt(r0);else if(typeof r0!="bigint")throw new TypeError(`Cannot convert "${mA(r0)}" to ${C}`);return OA(C,r0,T,q),r0},readValueFromPointer:ye(C,g,!Y),destructorFunction:null})},o=(f,C,g,T)=>{C=ux(C),Nx(f,{name:C,fromWireType:function(q){return!!q},toWireType:function(q,Y){return Y?g:T},readValueFromPointer:function(q){return this.fromWireType(gx[q])},destructorFunction:null})},w0=f=>({count:f.count,deleteScheduled:f.deleteScheduled,preservePointerOnDelete:f.preservePointerOnDelete,ptr:f.ptr,ptrType:f.ptrType,smartPtr:f.smartPtr,smartPtrType:f.smartPtrType}),We=f=>{function C(g){return g.$$.ptrType.registeredClass.name}b0(C(f)+" instance already deleted")},GA=!1,hA=f=>{},ot=f=>{f.smartPtr?f.smartPtrType.rawDestructor(f.smartPtr):f.ptrType.registeredClass.rawDestructor(f.ptr)},ke=f=>{f.count.value-=1;var C=f.count.value===0;C&&ot(f)},pr=(f,C,g)=>{if(C===g)return f;if(g.baseClass===void 0)return null;var T=pr(f,C,g.baseClass);return T===null?null:g.downcast(T)},br={},Ft={},vt=(f,C)=>{for(C===void 0&&b0("ptr should not be undefined");f.baseClass;)C=f.upcast(C),f=f.baseClass;return C},lt=(f,C)=>(C=vt(f,C),Ft[C]),we=(f,C)=>{(!C.ptrType||!C.ptr)&&k0("makeClassHandle requires ptr and ptrType");var g=!!C.smartPtrType,T=!!C.smartPtr;return g!==T&&k0("Both smartPtrType and smartPtr must be specified"),C.count={value:1},te(Object.create(f,{$$:{value:C,writable:!0}}))};function mr(f){var C=this.getPointee(f);if(!C)return this.destructor(f),null;var g=lt(this.registeredClass,C);if(g!==void 0){if(g.$$.count.value===0)return g.$$.ptr=C,g.$$.smartPtr=f,g.clone();var T=g.clone();return this.destructor(f),T}function q(){return this.isSmartPointer?we(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:C,smartPtrType:this,smartPtr:f}):we(this.registeredClass.instancePrototype,{ptrType:this,ptr:f})}var Y=this.registeredClass.getActualType(C),X=br[Y];if(!X)return q.call(this);var x0;this.isConst?x0=X.constPointerType:x0=X.pointerType;var r0=pr(C,this.registeredClass,x0.registeredClass);return r0===null?q.call(this):this.isSmartPointer?we(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:r0,smartPtrType:this,smartPtr:f}):we(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:r0})}var te=f=>globalThis.FinalizationRegistry?(GA=new FinalizationRegistry(C=>{console.warn(C.leakWarning),ke(C.$$)}),te=C=>{var g=C.$$,T=!!g.smartPtr;if(T){var q={$$:g},Y=g.ptrType.registeredClass,X=new Error(`Embind found a leaked C++ instance ${Y.name} <${dx(g.ptr)}>.
2176
2176
  We'll free it automatically in this case, but this functionality is not reliable across various environments.
2177
2177
  Make sure to invoke .delete() manually once you're done with the instance instead.
2178
- Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(X,br),q.leakWarning=X.stack.replace(/^Error: /,""),OA.register(C,q,C)}return C},mA=C=>OA.unregister(C),re(f)):(re=C=>C,f),we=[],ct=()=>{for(;we.length;){var f=we.pop();f.$$.deleteScheduled=!1,f.delete()}},mr,ft=()=>{let f=te.prototype;Object.assign(f,{isAliasOf(g){if(!(this instanceof te)||!(g instanceof te))return!1;var T=this.$$.ptrType.registeredClass,q=this.$$.ptr;g.$$=g.$$;for(var Y=g.$$.ptrType.registeredClass,X=g.$$.ptr;T.baseClass;)q=T.upcast(q),T=T.baseClass;for(;Y.baseClass;)X=Y.upcast(X),Y=Y.baseClass;return T===Y&&q===X},clone(){if(this.$$.ptr||Ve(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var g=re(Object.create(Object.getPrototypeOf(this),{$$:{value:w0(this.$$)}}));return g.$$.count.value+=1,g.$$.deleteScheduled=!1,g},delete(){this.$$.ptr||Ve(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),mA(this),ye(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||Ve(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),we.push(this),we.length===1&&mr&&mr(ct),this.$$.deleteScheduled=!0,this}});let C=Symbol.dispose;C&&(f[C]=f.delete)};function te(){}var We=(f,C)=>Object.defineProperty(C,"name",{value:f}),hr=(f,C,g)=>{if(f[C].overloadTable===void 0){var T=f[C];f[C]=function(...q){return f[C].overloadTable.hasOwnProperty(q.length)||b0(`Function '${g}' called with an invalid number of arguments (${q.length}) - expects one of (${f[C].overloadTable})!`),f[C].overloadTable[q.length].apply(this,q)},f[C].overloadTable=[],f[C].overloadTable[T.argCount]=T}},jr=(f,C,g)=>{n.hasOwnProperty(f)?((g===void 0||n[f].overloadTable!==void 0&&n[f].overloadTable[g]!==void 0)&&b0(`Cannot register public name '${f}' twice`),hr(n,f,f),n[f].overloadTable.hasOwnProperty(g)&&b0(`Cannot register multiple overloads of a function with the same number of arguments (${g})!`),n[f].overloadTable[g]=C):(n[f]=C,n[f].argCount=g)},Et=48,gr=57,Bt=f=>{k(typeof f=="string"),f=f.replace(/[^a-zA-Z0-9_]/g,"$");var C=f.charCodeAt(0);return C>=Et&&C<=gr?`_${f}`:f};function Ct(f,C,g,T,q,Y,X,x0){this.name=f,this.constructor=C,this.instancePrototype=g,this.rawDestructor=T,this.baseClass=q,this.getActualType=Y,this.upcast=X,this.downcast=x0,this.pureVirtualFunctions=[]}var _e=(f,C,g)=>{for(;C!==g;)C.upcast||b0(`Expected null or instance of ${g.name}, got an instance of ${C.name}`),f=C.upcast(f),C=C.baseClass;return f};function dt(f,C){if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;C.$$||b0(`Cannot pass "${bA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=_e(C.$$.ptr,g,this.registeredClass);return T}function ut(f,C){var g;if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),this.isSmartPointer?(g=this.rawConstructor(),f!==null&&f.push(this.rawDestructor,g),g):0;(!C||!C.$$)&&b0(`Cannot pass "${bA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&C.$$.ptrType.isConst&&b0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);var T=C.$$.ptrType.registeredClass;if(g=_e(C.$$.ptr,T,this.registeredClass),this.isSmartPointer)switch(C.$$.smartPtr===void 0&&b0("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:C.$$.smartPtrType===this?g=C.$$.smartPtr:b0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:g=C.$$.smartPtr;break;case 2:if(C.$$.smartPtrType===this)g=C.$$.smartPtr;else{var q=C.clone();g=this.rawShare(g,D0.toHandle(()=>q.delete())),f!==null&&f.push(this.rawDestructor,g)}break;default:b0("Unsupported sharing policy")}return g}function yr(f,C){if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;C.$$||b0(`Cannot pass "${bA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`),C.$$.ptrType.isConst&&b0(`Cannot convert argument of type ${C.$$.ptrType.name} to parameter type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=_e(C.$$.ptr,g,this.registeredClass);return T}var kr=()=>{Object.assign(ne.prototype,{getPointee(f){return this.rawGetPointee&&(f=this.rawGetPointee(f)),f},destructor(f){this.rawDestructor?.(f)},readValueFromPointer:i0,fromWireType:br})};function ne(f,C,g,T,q,Y,X,x0,e0,E0,p0){this.name=f,this.registeredClass=C,this.isReference=g,this.isConst=T,this.isSmartPointer=q,this.pointeeType=Y,this.sharingPolicy=X,this.rawGetPointee=x0,this.rawConstructor=e0,this.rawShare=E0,this.rawDestructor=p0,!q&&C.baseClass===void 0?T?(this.toWireType=dt,this.destructorFunction=null):(this.toWireType=yr,this.destructorFunction=null):this.toWireType=ut}var wr=(f,C,g)=>{n.hasOwnProperty(f)||k0("Replacing nonexistent public symbol"),n[f].overloadTable!==void 0&&g!==void 0?n[f].overloadTable[g]=C:(n[f]=C,n[f].argCount=g)},se=[],Xe=f=>{var C=se[f];return C||(se[f]=C=Ar.get(f)),k(Ar.get(f)==C,"table mirror is out of date"),C},Nx=(f,C,g=!1)=>{k(!g,"async bindings are only supported with JSPI"),f=ux(f);function T(){var Y=Xe(C);return Y}var q=T();return typeof q!="function"&&b0(`unknown function pointer with signature ${f}: ${C}`),q};class Dt extends Error{}var GA=f=>{var C=Ma(f),g=ux(C);return Fe(C),g},ie=(f,C)=>{var g=[],T={};function q(Y){if(!T[Y]&&!Qx[Y]){if(aA[Y]){aA[Y].forEach(q);return}g.push(Y),T[Y]=!0}}throw C.forEach(q),new Dt(`${f}: `+g.map(GA).join([", "]))},Ye=(f,C,g,T,q,Y,X,x0,e0,E0,p0,Z0,Y0)=>{p0=ux(p0),Y=Nx(q,Y),x0&&(x0=Nx(X,x0)),E0&&(E0=Nx(e0,E0)),Y0=Nx(Z0,Y0);var Ax=Bt(p0);jr(Ax,function(){ie(`Cannot construct ${p0} due to unbound types`,[T])}),pA([f,C,g],T?[T]:[],Mx=>{var wx;Mx=Mx[0];var FA,UA;T?(FA=Mx.registeredClass,UA=FA.instancePrototype):UA=te.prototype;var jA=We(p0,function(...hs){if(Object.getPrototypeOf(this)!==Sr)throw new Bx(`Use 'new' to construct ${p0}`);if(HA.constructor_body===void 0)throw new Bx(`${p0} has no accessible constructor`);var Ja=HA.constructor_body[hs.length];if(Ja===void 0)throw new Bx(`Tried to invoke ctor of ${p0} with invalid number of parameters (${hs.length}) - expected (${Object.keys(HA.constructor_body).toString()}) parameters instead!`);return Ja.apply(this,hs)}),Sr=Object.create(UA,{constructor:{value:jA}});jA.prototype=Sr;var HA=new Ct(p0,jA,Sr,Y0,FA,Y,x0,E0);HA.baseClass&&((wx=HA.baseClass).__derivedClasses??(wx.__derivedClasses=[]),HA.baseClass.__derivedClasses.push(HA));var af=new ne(p0,HA,!0,!1,!1),Ua=new ne(p0+"*",HA,!1,!1,!1),Ha=new ne(p0+" const*",HA,!1,!0,!1);return pr[f]={pointerType:Ua,constPointerType:Ha},wr(Ax,jA),[af,Ua,Ha]})},Dx=(f,C)=>{for(var g=[],T=0;T<f;T++)g.push(y0[C+T*4>>2]);return g};function Se(f){for(var C=1;C<f.length;++C)if(f[C]!==null&&f[C].destructorFunction===void 0)return!0;return!1}function ae(f,C,g,T,q){if(f<C||f>g){var Y=C==g?C:`${C} to ${g}`;q(`function ${T} called with ${f} arguments, expected ${Y}`)}}function a(f,C,g,T){var q=Se(f),Y=f.length-2,X=[],x0=["fn"];C&&x0.push("thisWired");for(var e0=0;e0<Y;++e0)X.push(`arg${e0}`),x0.push(`arg${e0}Wired`);X=X.join(","),x0=x0.join(",");var E0=`return function (${X}) {
2178
+ Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(X,mr),q.leakWarning=X.stack.replace(/^Error: /,""),GA.register(C,q,C)}return C},hA=C=>GA.unregister(C),te(f)):(te=C=>C,f),_e=[],ct=()=>{for(;_e.length;){var f=_e.pop();f.$$.deleteScheduled=!1,f.delete()}},hr,ft=()=>{let f=ne.prototype;Object.assign(f,{isAliasOf(g){if(!(this instanceof ne)||!(g instanceof ne))return!1;var T=this.$$.ptrType.registeredClass,q=this.$$.ptr;g.$$=g.$$;for(var Y=g.$$.ptrType.registeredClass,X=g.$$.ptr;T.baseClass;)q=T.upcast(q),T=T.baseClass;for(;Y.baseClass;)X=Y.upcast(X),Y=Y.baseClass;return T===Y&&q===X},clone(){if(this.$$.ptr||We(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var g=te(Object.create(Object.getPrototypeOf(this),{$$:{value:w0(this.$$)}}));return g.$$.count.value+=1,g.$$.deleteScheduled=!1,g},delete(){this.$$.ptr||We(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),hA(this),ke(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||We(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),_e.push(this),_e.length===1&&hr&&hr(ct),this.$$.deleteScheduled=!0,this}});let C=Symbol.dispose;C&&(f[C]=f.delete)};function ne(){}var Xe=(f,C)=>Object.defineProperty(C,"name",{value:f}),jr=(f,C,g)=>{if(f[C].overloadTable===void 0){var T=f[C];f[C]=function(...q){return f[C].overloadTable.hasOwnProperty(q.length)||b0(`Function '${g}' called with an invalid number of arguments (${q.length}) - expects one of (${f[C].overloadTable})!`),f[C].overloadTable[q.length].apply(this,q)},f[C].overloadTable=[],f[C].overloadTable[T.argCount]=T}},gr=(f,C,g)=>{n.hasOwnProperty(f)?((g===void 0||n[f].overloadTable!==void 0&&n[f].overloadTable[g]!==void 0)&&b0(`Cannot register public name '${f}' twice`),jr(n,f,f),n[f].overloadTable.hasOwnProperty(g)&&b0(`Cannot register multiple overloads of a function with the same number of arguments (${g})!`),n[f].overloadTable[g]=C):(n[f]=C,n[f].argCount=g)},Et=48,yr=57,Bt=f=>{k(typeof f=="string"),f=f.replace(/[^a-zA-Z0-9_]/g,"$");var C=f.charCodeAt(0);return C>=Et&&C<=yr?`_${f}`:f};function Ct(f,C,g,T,q,Y,X,x0){this.name=f,this.constructor=C,this.instancePrototype=g,this.rawDestructor=T,this.baseClass=q,this.getActualType=Y,this.upcast=X,this.downcast=x0,this.pureVirtualFunctions=[]}var Se=(f,C,g)=>{for(;C!==g;)C.upcast||b0(`Expected null or instance of ${g.name}, got an instance of ${C.name}`),f=C.upcast(f),C=C.baseClass;return f};function dt(f,C){if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;C.$$||b0(`Cannot pass "${mA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=Se(C.$$.ptr,g,this.registeredClass);return T}function ut(f,C){var g;if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),this.isSmartPointer?(g=this.rawConstructor(),f!==null&&f.push(this.rawDestructor,g),g):0;(!C||!C.$$)&&b0(`Cannot pass "${mA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&C.$$.ptrType.isConst&&b0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);var T=C.$$.ptrType.registeredClass;if(g=Se(C.$$.ptr,T,this.registeredClass),this.isSmartPointer)switch(C.$$.smartPtr===void 0&&b0("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:C.$$.smartPtrType===this?g=C.$$.smartPtr:b0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:g=C.$$.smartPtr;break;case 2:if(C.$$.smartPtrType===this)g=C.$$.smartPtr;else{var q=C.clone();g=this.rawShare(g,D0.toHandle(()=>q.delete())),f!==null&&f.push(this.rawDestructor,g)}break;default:b0("Unsupported sharing policy")}return g}function kr(f,C){if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;C.$$||b0(`Cannot pass "${mA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`),C.$$.ptrType.isConst&&b0(`Cannot convert argument of type ${C.$$.ptrType.name} to parameter type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=Se(C.$$.ptr,g,this.registeredClass);return T}var wr=()=>{Object.assign(ie.prototype,{getPointee(f){return this.rawGetPointee&&(f=this.rawGetPointee(f)),f},destructor(f){this.rawDestructor?.(f)},readValueFromPointer:n0,fromWireType:mr})};function ie(f,C,g,T,q,Y,X,x0,r0,E0,p0){this.name=f,this.registeredClass=C,this.isReference=g,this.isConst=T,this.isSmartPointer=q,this.pointeeType=Y,this.sharingPolicy=X,this.rawGetPointee=x0,this.rawConstructor=r0,this.rawShare=E0,this.rawDestructor=p0,!q&&C.baseClass===void 0?T?(this.toWireType=dt,this.destructorFunction=null):(this.toWireType=kr,this.destructorFunction=null):this.toWireType=ut}var _r=(f,C,g)=>{n.hasOwnProperty(f)||k0("Replacing nonexistent public symbol"),n[f].overloadTable!==void 0&&g!==void 0?n[f].overloadTable[g]=C:(n[f]=C,n[f].argCount=g)},se=[],Ye=f=>{var C=se[f];return C||(se[f]=C=er.get(f)),k(er.get(f)==C,"table mirror is out of date"),C},Ix=(f,C,g=!1)=>{k(!g,"async bindings are only supported with JSPI"),f=ux(f);function T(){var Y=Ye(C);return Y}var q=T();return typeof q!="function"&&b0(`unknown function pointer with signature ${f}: ${C}`),q};class Dt extends Error{}var UA=f=>{var C=Oa(f),g=ux(C);return ve(C),g},ae=(f,C)=>{var g=[],T={};function q(Y){if(!T[Y]&&!xA[Y]){if(oA[Y]){oA[Y].forEach(q);return}g.push(Y),T[Y]=!0}}throw C.forEach(q),new Dt(`${f}: `+g.map(UA).join([", "]))},Qe=(f,C,g,T,q,Y,X,x0,r0,E0,p0,Z0,Y0)=>{p0=ux(p0),Y=Ix(q,Y),x0&&(x0=Ix(X,x0)),E0&&(E0=Ix(r0,E0)),Y0=Ix(Z0,Y0);var Ax=Bt(p0);gr(Ax,function(){ae(`Cannot construct ${p0} due to unbound types`,[T])}),bA([f,C,g],T?[T]:[],Lx=>{var wx;Lx=Lx[0];var vA,HA;T?(vA=Lx.registeredClass,HA=vA.instancePrototype):HA=ne.prototype;var gA=Xe(p0,function(...ji){if(Object.getPrototypeOf(this)!==$r)throw new Bx(`Use 'new' to construct ${p0}`);if(JA.constructor_body===void 0)throw new Bx(`${p0} has no accessible constructor`);var Va=JA.constructor_body[ji.length];if(Va===void 0)throw new Bx(`Tried to invoke ctor of ${p0} with invalid number of parameters (${ji.length}) - expected (${Object.keys(JA.constructor_body).toString()}) parameters instead!`);return Va.apply(this,ji)}),$r=Object.create(HA,{constructor:{value:gA}});gA.prototype=$r;var JA=new Ct(p0,gA,$r,Y0,vA,Y,x0,E0);JA.baseClass&&((wx=JA.baseClass).__derivedClasses??(wx.__derivedClasses=[]),JA.baseClass.__derivedClasses.push(JA));var Ff=new ie(p0,JA,!0,!1,!1),Ka=new ie(p0+"*",JA,!1,!1,!1),za=new ie(p0+" const*",JA,!1,!0,!1);return br[f]={pointerType:Ka,constPointerType:za},_r(Ax,gA),[Ff,Ka,za]})},Dx=(f,C)=>{for(var g=[],T=0;T<f;T++)g.push(y0[C+T*4>>2]);return g};function $e(f){for(var C=1;C<f.length;++C)if(f[C]!==null&&f[C].destructorFunction===void 0)return!0;return!1}function oe(f,C,g,T,q){if(f<C||f>g){var Y=C==g?C:`${C} to ${g}`;q(`function ${T} called with ${f} arguments, expected ${Y}`)}}function a(f,C,g,T){var q=$e(f),Y=f.length-2,X=[],x0=["fn"];C&&x0.push("thisWired");for(var r0=0;r0<Y;++r0)X.push(`arg${r0}`),x0.push(`arg${r0}Wired`);X=X.join(","),x0=x0.join(",");var E0=`return function (${X}) {
2179
2179
  `;E0+=`checkArgCount(arguments.length, minArgs, maxArgs, humanName, throwBindingError);
2180
2180
  `,q&&(E0+=`var destructors = [];
2181
2181
  `);var p0=q?"destructors":"null",Z0=["humanName","throwBindingError","invoker","fn","runDestructors","fromRetWire","toClassParamWire"];C&&(E0+=`var thisWired = toClassParamWire(${p0}, this);
2182
- `);for(var e0=0;e0<Y;++e0){var Y0=`toArg${e0}Wire`;E0+=`var arg${e0}Wired = ${Y0}(${p0}, arg${e0});
2182
+ `);for(var r0=0;r0<Y;++r0){var Y0=`toArg${r0}Wire`;E0+=`var arg${r0}Wired = ${Y0}(${p0}, arg${r0});
2183
2183
  `,Z0.push(Y0)}if(E0+=(g||T?"var rv = ":"")+`invoker(${x0});
2184
2184
  `,q)E0+=`runDestructors(destructors);
2185
- `;else for(var e0=C?1:2;e0<f.length;++e0){var Ax=e0===1?"thisWired":"arg"+(e0-2)+"Wired";f[e0].destructorFunction!==null&&(E0+=`${Ax}_dtor(${Ax});
2185
+ `;else for(var r0=C?1:2;r0<f.length;++r0){var Ax=r0===1?"thisWired":"arg"+(r0-2)+"Wired";f[r0].destructorFunction!==null&&(E0+=`${Ax}_dtor(${Ax});
2186
2186
  `,Z0.push(`${Ax}_dtor`))}return g&&(E0+=`var ret = fromRetWire(rv);
2187
2187
  return ret;
2188
2188
  `),E0+=`}
2189
2189
  `,Z0.push("checkArgCount","minArgs","maxArgs"),E0=`if (arguments.length !== ${Z0.length}){ throw new Error(humanName + "Expected ${Z0.length} closure arguments " + arguments.length + " given."); }
2190
- ${E0}`,new Function(Z0,E0)}function c(f){for(var C=f.length-2,g=f.length-1;g>=2&&f[g].optional;--g)C--;return C}function d(f,C,g,T,q,Y){var X=C.length;X<2&&b0("argTypes array size mismatch! Must at least get return value and 'this' types!"),k(!Y,"async bindings are only supported with JSPI");for(var x0=C[1]!==null&&g!==null,e0=Se(C),E0=!C[0].isVoid,p0=X-2,Z0=c(C),Y0=C[0],Ax=C[1],Mx=[f,b0,T,q,MA,Y0.fromWireType.bind(Y0),Ax?.toWireType.bind(Ax)],wx=2;wx<X;++wx){var FA=C[wx];Mx.push(FA.toWireType.bind(FA))}if(!e0)for(var wx=x0?1:2;wx<C.length;++wx)C[wx].destructorFunction!==null&&Mx.push(C[wx].destructorFunction);Mx.push(ae,Z0,p0);var jA=a(C,x0,E0,Y)(...Mx);return We(f,jA)}var b=(f,C,g,T,q,Y)=>{k(C>0);var X=Dx(C,g);q=Nx(T,q),pA([],[f],x0=>{x0=x0[0];var e0=`constructor ${x0.name}`;if(x0.registeredClass.constructor_body===void 0&&(x0.registeredClass.constructor_body=[]),x0.registeredClass.constructor_body[C-1]!==void 0)throw new Bx(`Cannot register multiple constructors with identical number of parameters (${C-1}) for class '${x0.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return x0.registeredClass.constructor_body[C-1]=()=>{ie(`Cannot construct ${x0.name} due to unbound types`,X)},pA([],X,E0=>(E0.splice(1,0,null),x0.registeredClass.constructor_body[C-1]=d(e0,E0,null,q,Y),[])),[]})},y=(f,C,g)=>(f instanceof Object||b0(`${g} with invalid "this": ${f}`),f instanceof C.registeredClass.constructor||b0(`${g} incompatible with "this" of type ${f.constructor.name}`),f.$$.ptr||b0(`cannot call emscripten binding method ${g} on deleted object`),_e(f.$$.ptr,f.$$.ptrType.registeredClass,C.registeredClass)),$=(f,C,g,T,q,Y,X,x0,e0,E0)=>{C=ux(C),q=Nx(T,q),pA([],[f],p0=>{p0=p0[0];var Z0=`${p0.name}.${C}`,Y0={get(){ie(`Cannot access ${Z0} due to unbound types`,[g,X])},enumerable:!0,configurable:!0};return e0?Y0.set=()=>ie(`Cannot access ${Z0} due to unbound types`,[g,X]):Y0.set=Ax=>b0(Z0+" is a read-only property"),Object.defineProperty(p0.registeredClass.instancePrototype,C,Y0),pA([],e0?[g,X]:[g],Ax=>{var Mx=Ax[0],wx={get(){var UA=y(this,p0,Z0+" getter");return Mx.fromWireType(q(Y,UA))},enumerable:!0};if(e0){e0=Nx(x0,e0);var FA=Ax[1];wx.set=function(UA){var jA=y(this,p0,Z0+" setter"),Sr=[];e0(E0,jA,FA.toWireType(Sr,UA)),MA(Sr)}}return Object.defineProperty(p0.registeredClass.instancePrototype,C,wx),[]}),[]})},G=[],W=[0,1,,1,null,1,!0,1,!1,1],o0=f=>{if(f>9&&--W[f+1]===0){k(W[f]!==void 0,"decref for unallocated handle");var C=W[f];W[f]=void 0,G.push(f)}},D0={toValue:f=>(f||b0(`Cannot use deleted val. handle = ${f}`),k(f===2||W[f]!==void 0&&f%2===0,`invalid handle: ${f}`),W[f]),toHandle:f=>{switch(f){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let C=G.pop()||W.length;return W[C]=f,W[C+1]=1,C}}}},X0={name:"emscripten::val",fromWireType:f=>{var C=D0.toValue(f);return o0(f),C},toWireType:(f,C)=>D0.toHandle(C),readValueFromPointer:i0,destructorFunction:null},I0=f=>qx(f,X0),T0=(f,C)=>{switch(C){case 4:return function(g){return this.fromWireType(ur[g>>2])};case 8:return function(g){return this.fromWireType(je[g>>3])};default:throw new TypeError(`invalid float width (${C}): ${f}`)}},m0=(f,C,g)=>{C=ux(C),qx(f,{name:C,fromWireType:T=>T,toWireType:(T,q)=>{if(typeof q!="number"&&typeof q!="boolean")throw new TypeError(`Cannot convert ${bA(q)} to ${C}`);return q},readValueFromPointer:T0(C,g),destructorFunction:null})},sx=f=>{f=f.trim();let C=f.indexOf("(");return C===-1?f:(k(f.endsWith(")"),"Parentheses for argument names should match."),f.slice(0,C))},yx=(f,C,g,T,q,Y,X,x0)=>{var e0=Dx(C,g);f=ux(f),f=sx(f),q=Nx(T,q,X),jr(f,function(){ie(`Cannot call ${f} due to unbound types`,e0)},C-1),pA([],e0,E0=>{var p0=[E0[0],null].concat(E0.slice(1));return wr(f,d(f,p0,null,q,Y,X),C-1),[]})},Ix=(f,C,g,T,q)=>{C=ux(C);let Y=T===0,X=e0=>e0;if(Y){var x0=32-8*g;X=e0=>e0<<x0>>>x0,q=X(q)}qx(f,{name:C,fromWireType:X,toWireType:(e0,E0)=>{if(typeof E0!="number"&&typeof E0!="boolean")throw new TypeError(`Cannot convert "${bA(E0)}" to ${C}`);return RA(C,E0,T,q),E0},readValueFromPointer:ge(C,g,T!==0),destructorFunction:null})},Ox=(f,C,g)=>{var T=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],q=T[C];function Y(X){var x0=y0[X>>2],e0=y0[X+4>>2];return new q(Yx.buffer,e0,x0)}g=ux(g),qx(f,{name:g,fromWireType:Y,readValueFromPointer:Y},{ignoreDuplicateRegistrations:!0})},Gx=(f,C,g,T)=>{if(k(typeof f=="string",`stringToUTF8Array expects a string (got ${typeof f})`),!(T>0))return 0;for(var q=g,Y=g+T-1,X=0;X<f.length;++X){var x0=f.codePointAt(X);if(x0<=127){if(g>=Y)break;C[g++]=x0}else if(x0<=2047){if(g+1>=Y)break;C[g++]=192|x0>>6,C[g++]=128|x0&63}else if(x0<=65535){if(g+2>=Y)break;C[g++]=224|x0>>12,C[g++]=128|x0>>6&63,C[g++]=128|x0&63}else{if(g+3>=Y)break;x0>1114111&&Hx(`Invalid Unicode code point ${dx(x0)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`),C[g++]=240|x0>>18,C[g++]=128|x0>>12&63,C[g++]=128|x0>>6&63,C[g++]=128|x0&63,X++}}return C[g]=0,g-q},oe=(f,C,g)=>(k(typeof g=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),Gx(f,gx,C,g)),Jx=f=>{for(var C=0,g=0;g<f.length;++g){var T=f.charCodeAt(g);T<=127?C++:T<=2047?C+=2:T>=55296&&T<=57343?(C+=4,++g):C+=3}return C},hA=globalThis.TextDecoder&&new TextDecoder,fx=(f,C,g,T)=>{var q=C+g;if(T)return q;for(;f[C]&&!(C>=q);)++C;return C},xn=(f,C=0,g,T)=>{var q=fx(f,C,g,T);if(q-C>16&&f.buffer&&hA)return hA.decode(f.subarray(C,q));for(var Y="";C<q;){var X=f[C++];if(!(X&128)){Y+=String.fromCharCode(X);continue}var x0=f[C++]&63;if((X&224)==192){Y+=String.fromCharCode((X&31)<<6|x0);continue}var e0=f[C++]&63;if((X&240)==224?X=(X&15)<<12|x0<<6|e0:((X&248)!=240&&Hx(`Invalid UTF-8 leading byte ${dx(X)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),X=(X&7)<<18|x0<<12|e0<<6|f[C++]&63),X<65536)Y+=String.fromCharCode(X);else{var E0=X-65536;Y+=String.fromCharCode(55296|E0>>10,56320|E0&1023)}}return Y},fs=(f,C,g)=>(k(typeof f=="number",`UTF8ToString expects a number (got ${typeof f})`),f?xn(gx,f,C,g):""),Es=(f,C)=>{C=ux(C);var g=!0;qx(f,{name:C,fromWireType(T){var q=y0[T>>2],Y=T+4,X;if(g)X=fs(Y,q,!0);else{X="";for(var x0=0;x0<q;++x0)X+=String.fromCharCode(gx[Y+x0])}return Fe(T),X},toWireType(T,q){q instanceof ArrayBuffer&&(q=new Uint8Array(q));var Y,X=typeof q=="string";X||ArrayBuffer.isView(q)&&q.BYTES_PER_ELEMENT==1||b0("Cannot pass non-string to std::string"),g&&X?Y=Jx(q):Y=q.length;var x0=bs(4+Y+1),e0=x0+4;if(y0[x0>>2]=Y,X)if(g)oe(q,e0,Y+1);else for(var E0=0;E0<Y;++E0){var p0=q.charCodeAt(E0);p0>255&&(Fe(x0),b0("String has UTF-16 code units that do not fit in 8 bits")),gx[e0+E0]=p0}else gx.set(q,e0);return T!==null&&T.push(Fe,x0),x0},readValueFromPointer:i0,destructorFunction(T){Fe(T)}})},An=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Bs=(f,C,g)=>{k(f%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var T=f>>1,q=fx(ox,T,C/2,g);if(q-T>16&&An)return An.decode(ox.subarray(T,q));for(var Y="",X=T;X<q;++X){var x0=ox[X];Y+=String.fromCharCode(x0)}return Y},Cs=(f,C,g)=>{if(k(C%2==0,"pointer passed to stringToUTF16 must be 2-byte aligned"),k(typeof g=="number","stringToUTF16 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<2)return 0;g-=2;for(var T=C,q=g<f.length*2?g/2:f.length,Y=0;Y<q;++Y){var X=f.charCodeAt(Y);qA[C>>1]=X,C+=2}return qA[C>>1]=0,C-T},en=f=>f.length*2,pt=(f,C,g)=>{k(f%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var T="",q=f>>2,Y=0;!(Y>=C/4);Y++){var X=y0[q+Y];if(!X&&!g)break;T+=String.fromCodePoint(X)}return T},Qe=(f,C,g)=>{if(k(C%4==0,"pointer passed to stringToUTF32 must be 4-byte aligned"),k(typeof g=="number","stringToUTF32 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<4)return 0;for(var T=C,q=T+g-4,Y=0;Y<f.length;++Y){var X=f.codePointAt(Y);if(X>65535&&Y++,NA[C>>2]=X,C+=4,C+4>q)break}return NA[C>>2]=0,C-T},i=f=>{for(var C=0,g=0;g<f.length;++g){var T=f.codePointAt(g);T>65535&&g++,C+=4}return C},l=(f,C,g)=>{g=ux(g);var T,q,Y;C===2?(T=Bs,q=Cs,Y=en):(k(C===4,"only 2-byte and 4-byte strings are currently supported"),T=pt,q=Qe,Y=i),qx(f,{name:g,fromWireType:X=>{var x0=y0[X>>2],e0=T(X+4,x0*C,!0);return Fe(X),e0},toWireType:(X,x0)=>{typeof x0!="string"&&b0(`Cannot pass non-string to C++ string type ${g}`);var e0=Y(x0),E0=bs(4+e0+C);return y0[E0>>2]=e0/C,q(x0,E0+4,e0+C),X!==null&&X.push(Fe,E0),E0},readValueFromPointer:i0,destructorFunction(X){Fe(X)}})},B=(f,C,g,T,q,Y)=>{nx[f]={name:ux(C),rawConstructor:Nx(g,T),rawDestructor:Nx(q,Y),fields:[]}},D=(f,C,g,T,q,Y,X,x0,e0,E0)=>{nx[f].fields.push({fieldName:ux(C),getterReturnType:g,getter:Nx(T,q),getterContext:Y,setterArgumentType:X,setter:Nx(x0,e0),setterContext:E0})},h=(f,C)=>{C=ux(C),qx(f,{isVoid:!0,name:C,fromWireType:()=>{},toWireType:(g,T)=>{}})},_=[],I=f=>{var C=_.length;return _.push(f),C},V=(f,C)=>{var g=Qx[f];return g===void 0&&b0(`${C} has unknown type ${GA(f)}`),g},F0=(f,C)=>{for(var g=new Array(f),T=0;T<f;++T)g[T]=V(y0[C+T*4>>2],`parameter ${T}`);return g},_0=(f,C,g)=>{var T=[],q=f(T,g);return T.length&&(y0[C>>2]=D0.toHandle(T)),q},xx={},R0=f=>{var C=xx[f];return C===void 0?ux(f):C},N0=(f,C,g)=>{var T=8,[q,...Y]=F0(f,C),X=q.toWireType.bind(q),x0=Y.map(Ax=>Ax.readValueFromPointer.bind(Ax));f--;var e0={toValue:D0.toValue},E0=x0.map((Ax,Mx)=>{var wx=`argFromPtr${Mx}`;return e0[wx]=Ax,`${wx}(args${Mx?"+"+Mx*T:""})`}),p0;switch(g){case 0:p0="toValue(handle)";break;case 2:p0="new (toValue(handle))";break;case 3:p0="";break;case 1:e0.getStringOrSymbol=R0,p0="toValue(handle)[getStringOrSymbol(methodName)]";break}p0+=`(${E0})`,q.isVoid||(e0.toReturnWire=X,e0.emval_returnValue=_0,p0=`return emval_returnValue(toReturnWire, destructorsRef, ${p0})`),p0=`return function (handle, methodName, destructorsRef, args) {
2190
+ ${E0}`,new Function(Z0,E0)}function c(f){for(var C=f.length-2,g=f.length-1;g>=2&&f[g].optional;--g)C--;return C}function d(f,C,g,T,q,Y){var X=C.length;X<2&&b0("argTypes array size mismatch! Must at least get return value and 'this' types!"),k(!Y,"async bindings are only supported with JSPI");for(var x0=C[1]!==null&&g!==null,r0=$e(C),E0=!C[0].isVoid,p0=X-2,Z0=c(C),Y0=C[0],Ax=C[1],Lx=[f,b0,T,q,LA,Y0.fromWireType.bind(Y0),Ax?.toWireType.bind(Ax)],wx=2;wx<X;++wx){var vA=C[wx];Lx.push(vA.toWireType.bind(vA))}if(!r0)for(var wx=x0?1:2;wx<C.length;++wx)C[wx].destructorFunction!==null&&Lx.push(C[wx].destructorFunction);Lx.push(oe,Z0,p0);var gA=a(C,x0,E0,Y)(...Lx);return Xe(f,gA)}var b=(f,C,g,T,q,Y)=>{k(C>0);var X=Dx(C,g);q=Ix(T,q),bA([],[f],x0=>{x0=x0[0];var r0=`constructor ${x0.name}`;if(x0.registeredClass.constructor_body===void 0&&(x0.registeredClass.constructor_body=[]),x0.registeredClass.constructor_body[C-1]!==void 0)throw new Bx(`Cannot register multiple constructors with identical number of parameters (${C-1}) for class '${x0.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return x0.registeredClass.constructor_body[C-1]=()=>{ae(`Cannot construct ${x0.name} due to unbound types`,X)},bA([],X,E0=>(E0.splice(1,0,null),x0.registeredClass.constructor_body[C-1]=d(r0,E0,null,q,Y),[])),[]})},y=(f,C,g)=>(f instanceof Object||b0(`${g} with invalid "this": ${f}`),f instanceof C.registeredClass.constructor||b0(`${g} incompatible with "this" of type ${f.constructor.name}`),f.$$.ptr||b0(`cannot call emscripten binding method ${g} on deleted object`),Se(f.$$.ptr,f.$$.ptrType.registeredClass,C.registeredClass)),$=(f,C,g,T,q,Y,X,x0,r0,E0)=>{C=ux(C),q=Ix(T,q),bA([],[f],p0=>{p0=p0[0];var Z0=`${p0.name}.${C}`,Y0={get(){ae(`Cannot access ${Z0} due to unbound types`,[g,X])},enumerable:!0,configurable:!0};return r0?Y0.set=()=>ae(`Cannot access ${Z0} due to unbound types`,[g,X]):Y0.set=Ax=>b0(Z0+" is a read-only property"),Object.defineProperty(p0.registeredClass.instancePrototype,C,Y0),bA([],r0?[g,X]:[g],Ax=>{var Lx=Ax[0],wx={get(){var HA=y(this,p0,Z0+" getter");return Lx.fromWireType(q(Y,HA))},enumerable:!0};if(r0){r0=Ix(x0,r0);var vA=Ax[1];wx.set=function(HA){var gA=y(this,p0,Z0+" setter"),$r=[];r0(E0,gA,vA.toWireType($r,HA)),LA($r)}}return Object.defineProperty(p0.registeredClass.instancePrototype,C,wx),[]}),[]})},G=[],V=[0,1,,1,null,1,!0,1,!1,1],o0=f=>{if(f>9&&--V[f+1]===0){k(V[f]!==void 0,"decref for unallocated handle");var C=V[f];V[f]=void 0,G.push(f)}},D0={toValue:f=>(f||b0(`Cannot use deleted val. handle = ${f}`),k(f===2||V[f]!==void 0&&f%2===0,`invalid handle: ${f}`),V[f]),toHandle:f=>{switch(f){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let C=G.pop()||V.length;return V[C]=f,V[C+1]=1,C}}}},X0={name:"emscripten::val",fromWireType:f=>{var C=D0.toValue(f);return o0(f),C},toWireType:(f,C)=>D0.toHandle(C),readValueFromPointer:n0,destructorFunction:null},M0=f=>Nx(f,X0),T0=(f,C)=>{switch(C){case 4:return function(g){return this.fromWireType(Dr[g>>2])};case 8:return function(g){return this.fromWireType(ge[g>>3])};default:throw new TypeError(`invalid float width (${C}): ${f}`)}},m0=(f,C,g)=>{C=ux(C),Nx(f,{name:C,fromWireType:T=>T,toWireType:(T,q)=>{if(typeof q!="number"&&typeof q!="boolean")throw new TypeError(`Cannot convert ${mA(q)} to ${C}`);return q},readValueFromPointer:T0(C,g),destructorFunction:null})},ix=f=>{f=f.trim();let C=f.indexOf("(");return C===-1?f:(k(f.endsWith(")"),"Parentheses for argument names should match."),f.slice(0,C))},yx=(f,C,g,T,q,Y,X,x0)=>{var r0=Dx(C,g);f=ux(f),f=ix(f),q=Ix(T,q,X),gr(f,function(){ae(`Cannot call ${f} due to unbound types`,r0)},C-1),bA([],r0,E0=>{var p0=[E0[0],null].concat(E0.slice(1));return _r(f,d(f,p0,null,q,Y,X),C-1),[]})},Mx=(f,C,g,T,q)=>{C=ux(C);let Y=T===0,X=r0=>r0;if(Y){var x0=32-8*g;X=r0=>r0<<x0>>>x0,q=X(q)}Nx(f,{name:C,fromWireType:X,toWireType:(r0,E0)=>{if(typeof E0!="number"&&typeof E0!="boolean")throw new TypeError(`Cannot convert "${mA(E0)}" to ${C}`);return OA(C,E0,T,q),E0},readValueFromPointer:ye(C,g,T!==0),destructorFunction:null})},Gx=(f,C,g)=>{var T=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],q=T[C];function Y(X){var x0=y0[X>>2],r0=y0[X+4>>2];return new q(Zx.buffer,r0,x0)}g=ux(g),Nx(f,{name:g,fromWireType:Y,readValueFromPointer:Y},{ignoreDuplicateRegistrations:!0})},Ux=(f,C,g,T)=>{if(k(typeof f=="string",`stringToUTF8Array expects a string (got ${typeof f})`),!(T>0))return 0;for(var q=g,Y=g+T-1,X=0;X<f.length;++X){var x0=f.codePointAt(X);if(x0<=127){if(g>=Y)break;C[g++]=x0}else if(x0<=2047){if(g+1>=Y)break;C[g++]=192|x0>>6,C[g++]=128|x0&63}else if(x0<=65535){if(g+2>=Y)break;C[g++]=224|x0>>12,C[g++]=128|x0>>6&63,C[g++]=128|x0&63}else{if(g+3>=Y)break;x0>1114111&&Jx(`Invalid Unicode code point ${dx(x0)} encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).`),C[g++]=240|x0>>18,C[g++]=128|x0>>12&63,C[g++]=128|x0>>6&63,C[g++]=128|x0&63,X++}}return C[g]=0,g-q},Fe=(f,C,g)=>(k(typeof g=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),Ux(f,gx,C,g)),Kx=f=>{for(var C=0,g=0;g<f.length;++g){var T=f.charCodeAt(g);T<=127?C++:T<=2047?C+=2:T>=55296&&T<=57343?(C+=4,++g):C+=3}return C},jA=globalThis.TextDecoder&&new TextDecoder,fx=(f,C,g,T)=>{var q=C+g;if(T)return q;for(;f[C]&&!(C>=q);)++C;return C},An=(f,C=0,g,T)=>{var q=fx(f,C,g,T);if(q-C>16&&f.buffer&&jA)return jA.decode(f.subarray(C,q));for(var Y="";C<q;){var X=f[C++];if(!(X&128)){Y+=String.fromCharCode(X);continue}var x0=f[C++]&63;if((X&224)==192){Y+=String.fromCharCode((X&31)<<6|x0);continue}var r0=f[C++]&63;if((X&240)==224?X=(X&15)<<12|x0<<6|r0:((X&248)!=240&&Jx(`Invalid UTF-8 leading byte ${dx(X)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),X=(X&7)<<18|x0<<12|r0<<6|f[C++]&63),X<65536)Y+=String.fromCharCode(X);else{var E0=X-65536;Y+=String.fromCharCode(55296|E0>>10,56320|E0&1023)}}return Y},Ei=(f,C,g)=>(k(typeof f=="number",`UTF8ToString expects a number (got ${typeof f})`),f?An(gx,f,C,g):""),Bi=(f,C)=>{C=ux(C);var g=!0;Nx(f,{name:C,fromWireType(T){var q=y0[T>>2],Y=T+4,X;if(g)X=Ei(Y,q,!0);else{X="";for(var x0=0;x0<q;++x0)X+=String.fromCharCode(gx[Y+x0])}return ve(T),X},toWireType(T,q){q instanceof ArrayBuffer&&(q=new Uint8Array(q));var Y,X=typeof q=="string";X||ArrayBuffer.isView(q)&&q.BYTES_PER_ELEMENT==1||b0("Cannot pass non-string to std::string"),g&&X?Y=Kx(q):Y=q.length;var x0=mi(4+Y+1),r0=x0+4;if(y0[x0>>2]=Y,X)if(g)Fe(q,r0,Y+1);else for(var E0=0;E0<Y;++E0){var p0=q.charCodeAt(E0);p0>255&&(ve(x0),b0("String has UTF-16 code units that do not fit in 8 bits")),gx[r0+E0]=p0}else gx.set(q,r0);return T!==null&&T.push(ve,x0),x0},readValueFromPointer:n0,destructorFunction(T){ve(T)}})},en=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Ci=(f,C,g)=>{k(f%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var T=f>>1,q=fx(ox,T,C/2,g);if(q-T>16&&en)return en.decode(ox.subarray(T,q));for(var Y="",X=T;X<q;++X){var x0=ox[X];Y+=String.fromCharCode(x0)}return Y},di=(f,C,g)=>{if(k(C%2==0,"pointer passed to stringToUTF16 must be 2-byte aligned"),k(typeof g=="number","stringToUTF16 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<2)return 0;g-=2;for(var T=C,q=g<f.length*2?g/2:f.length,Y=0;Y<q;++Y){var X=f.charCodeAt(Y);NA[C>>1]=X,C+=2}return NA[C>>1]=0,C-T},rn=f=>f.length*2,pt=(f,C,g)=>{k(f%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var T="",q=f>>2,Y=0;!(Y>=C/4);Y++){var X=y0[q+Y];if(!X&&!g)break;T+=String.fromCodePoint(X)}return T},Ze=(f,C,g)=>{if(k(C%4==0,"pointer passed to stringToUTF32 must be 4-byte aligned"),k(typeof g=="number","stringToUTF32 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<4)return 0;for(var T=C,q=T+g-4,Y=0;Y<f.length;++Y){var X=f.codePointAt(Y);if(X>65535&&Y++,IA[C>>2]=X,C+=4,C+4>q)break}return IA[C>>2]=0,C-T},s=f=>{for(var C=0,g=0;g<f.length;++g){var T=f.codePointAt(g);T>65535&&g++,C+=4}return C},l=(f,C,g)=>{g=ux(g);var T,q,Y;C===2?(T=Ci,q=di,Y=rn):(k(C===4,"only 2-byte and 4-byte strings are currently supported"),T=pt,q=Ze,Y=s),Nx(f,{name:g,fromWireType:X=>{var x0=y0[X>>2],r0=T(X+4,x0*C,!0);return ve(X),r0},toWireType:(X,x0)=>{typeof x0!="string"&&b0(`Cannot pass non-string to C++ string type ${g}`);var r0=Y(x0),E0=mi(4+r0+C);return y0[E0>>2]=r0/C,q(x0,E0+4,r0+C),X!==null&&X.push(ve,E0),E0},readValueFromPointer:n0,destructorFunction(X){ve(X)}})},B=(f,C,g,T,q,Y)=>{nx[f]={name:ux(C),rawConstructor:Ix(g,T),rawDestructor:Ix(q,Y),fields:[]}},p=(f,C,g,T,q,Y,X,x0,r0,E0)=>{nx[f].fields.push({fieldName:ux(C),getterReturnType:g,getter:Ix(T,q),getterContext:Y,setterArgumentType:X,setter:Ix(x0,r0),setterContext:E0})},h=(f,C)=>{C=ux(C),Nx(f,{isVoid:!0,name:C,fromWireType:()=>{},toWireType:(g,T)=>{}})},_=[],M=f=>{var C=_.length;return _.push(f),C},z=(f,C)=>{var g=xA[f];return g===void 0&&b0(`${C} has unknown type ${UA(f)}`),g},F0=(f,C)=>{for(var g=new Array(f),T=0;T<f;++T)g[T]=z(y0[C+T*4>>2],`parameter ${T}`);return g},_0=(f,C,g)=>{var T=[],q=f(T,g);return T.length&&(y0[C>>2]=D0.toHandle(T)),q},xx={},R0=f=>{var C=xx[f];return C===void 0?ux(f):C},I0=(f,C,g)=>{var T=8,[q,...Y]=F0(f,C),X=q.toWireType.bind(q),x0=Y.map(Ax=>Ax.readValueFromPointer.bind(Ax));f--;var r0={toValue:D0.toValue},E0=x0.map((Ax,Lx)=>{var wx=`argFromPtr${Lx}`;return r0[wx]=Ax,`${wx}(args${Lx?"+"+Lx*T:""})`}),p0;switch(g){case 0:p0="toValue(handle)";break;case 2:p0="new (toValue(handle))";break;case 3:p0="";break;case 1:r0.getStringOrSymbol=R0,p0="toValue(handle)[getStringOrSymbol(methodName)]";break}p0+=`(${E0})`,q.isVoid||(r0.toReturnWire=X,r0.emval_returnValue=_0,p0=`return emval_returnValue(toReturnWire, destructorsRef, ${p0})`),p0=`return function (handle, methodName, destructorsRef, args) {
2191
2191
  ${p0}
2192
- }`;var Z0=new Function(Object.keys(e0),p0)(...Object.values(e0)),Y0=`methodCaller<(${Y.map(Ax=>Ax.name)}) => ${q.name}>`;return I(We(Y0,Z0))},h0=f=>(f=R0(f),D0.toHandle(n[f])),Cx=(f,C)=>(f=D0.toValue(f),C=D0.toValue(C),D0.toHandle(f[C])),Sx=f=>{f>9&&(W[f+1]+=1)},Kx=(f,C,g,T,q)=>_[f](C,g,T,q),Zx=f=>D0.toHandle(R0(f)),xA=f=>{var C=D0.toValue(f);MA(C),o0(f)},Ze=()=>2147483648,oA=(f,C)=>(k(C,"alignment argument is required"),Math.ceil(f/C)*C),$e=f=>{var C=rn.buffer.byteLength,g=(f-C+65535)/65536|0;try{return rn.grow(g),Ex(),1}catch(T){L(`growMemory: Attempted to grow heap from ${C} bytes to ${f} bytes, but got error: ${T}`)}},kx=f=>{var C=gx.length;f>>>=0,k(f>C);var g=Ze();if(f>g)return L(`Cannot enlarge memory, requested ${f} bytes, but the limit is ${g} bytes!`),!1;for(var T=1;T<=4;T*=2){var q=C*(1+.2/T);q=Math.min(q,f+100663296);var Y=Math.min(g,oA(Math.max(f,q),65536)),X=$e(Y);if(X)return!0}return L(`Failed to grow the heap from ${C} bytes to ${Y} bytes, not enough memory!`),!1},uc=f=>{lx("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},Dc=9007199254740992,pc=-9007199254740992,bc=f=>f<pc||f>Dc?NaN:Number(f);function mc(f,C,g,T){return C=bc(C),70}var ds=[null,[],[]],us=(f,C)=>{var g=ds[f];k(g),C===0||C===10?((f===1?O:L)(xn(g)),g.length=0):g.push(C)},Ab=()=>{La(0),ds[1].length&&us(1,10),ds[2].length&&us(2,10)},hc=(f,C,g,T)=>{for(var q=0,Y=0;Y<g;Y++){var X=y0[C>>2],x0=y0[C+4>>2];C+=8;for(var e0=0;e0<x0;e0++)us(f,gx[X+e0]);q+=x0}return y0[T>>2]=q,0},jc=()=>{if(E){var f=require("crypto");return C=>f.randomFillSync(C)}return C=>(crypto.getRandomValues(C),0)},qa=f=>(qa=jc())(f),gc=(f,C)=>qa(gx.subarray(f,f+C)),yc=(f,C)=>{if(xr)for(var g=f;g<f+C;g++){var T=Xe(g);T&&xr.set(T,g)}},xr,kc=f=>(xr||(xr=new WeakMap,yc(0,Ar.length)),xr.get(f)||0),Ds=[],wc=()=>{if(Ds.length)return Ds.pop();try{return Ar.grow(1)}catch(f){if(!(f instanceof RangeError))throw f;lx("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},ps=(f,C)=>{Ar.set(f,C),se[f]=Ar.get(f)},Na=f=>{let C=f.length;return k(C<16384),[C%128|128,C>>7,...f]},_c={i:127,p:127,j:126,f:125,d:124,e:111},Ia=f=>Na(Array.from(f,C=>{var g=_c[C];return k(g,`invalid signature char: ${C}`),g})),Sc=(f,C)=>{var g=Uint8Array.of(0,97,115,109,1,0,0,0,1,...Na([1,96,...Ia(C.slice(1)),...Ia(C[0]==="v"?"":C[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),T=new WebAssembly.Module(g),q=new WebAssembly.Instance(T,{e:{f}}),Y=q.exports.f;return Y},$c=(f,C)=>{k(typeof f<"u");var g=kc(f);if(g)return g;var T=wc();try{ps(T,f)}catch(Y){if(!(Y instanceof TypeError))throw Y;k(typeof C<"u","Missing signature argument to addFunction: "+f);var q=Sc(f,C);ps(T,q)}return xr.set(f,T),T},Tc=f=>{xr.delete(Xe(f)),ps(f,null),Ds.push(f)};ft(),kr(),k(W.length===10);{if(n.noExitRuntime&&(He=n.noExitRuntime),n.print&&(O=n.print),n.printErr&&(L=n.printErr),n.wasmBinary&&(t0=n.wasmBinary),n.FS_createDataFile=tA.createDataFile,n.FS_createPreloadedFile=tA.createPreloadedFile,Nc(),n.arguments&&(p=n.arguments),n.thisProgram&&(m=n.thisProgram),k(typeof n.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),k(typeof n.read>"u","Module.read option was removed"),k(typeof n.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),k(typeof n.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),k(typeof n.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),k(typeof n.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),k(typeof n.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),k(typeof n.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),k(typeof n.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),k(typeof n.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n0("preInit")}n.addFunction=$c,n.removeFunction=Tc;var Pc=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","stackAlloc","getTempRet0","setTempRet0","zeroMemory","exitJS","withStackSave","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","getExecutableName","autoResumeAudioContext","getDynCaller","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","asmjsMangle","mmapAlloc","HandleAllocator","getUniqueRunDependency","addRunDependency","removeRunDependency","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","ccall","cwrap","intArrayFromString","intArrayToString","stringToAscii","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","incrementUncaughtExceptionCount","decrementUncaughtExceptionCount","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_fileDataToTypedArray","FS_stdin_getChar","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize","getFunctionArgsName","createJsInvokerSignature","getEnumValueType","PureVirtualError","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","enumReadValueFromPointer","installIndexedIterator","setDelayFunction","count_emval_handles"];Pc.forEach(v0);var qc=["run","out","err","callMain","abort","wasmExports","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","HEAPU64","stackSave","stackRestore","createNamedFunction","ptrToString","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","alignMemory","wasmTable","wasmMemory","noExitRuntime","addOnPreRun","addOnPostRun","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","getFunctionAddress","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","AsciiToString","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s","InternalError","BindingError","throwInternalError","throwBindingError","registeredTypes","awaitingDependencies","typeDependencies","tupleRegistrations","structRegistrations","sharedRegisterType","whenDependentTypesAreResolved","getTypeName","getFunctionName","heap32VectorToArray","requireRegisteredType","usesDestructorStack","checkArgCount","getRequiredArgCount","createJsInvoker","UnboundTypeError","EmValType","EmValOptionalType","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","embindRepr","registeredInstances","getBasestPointer","getInheritedInstance","registeredPointers","registerType","integerReadValueFromPointer","floatReadValueFromPointer","assertIntegerRange","readPointer","runDestructors","craftInvokerFunction","embind__requireFunction","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","throwInstanceAlreadyDeleted","deletionQueue","flushPendingDeletes","delayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_freelist","emval_handles","emval_symbols","getStringOrSymbol","Emval","emval_returnValue","emval_lookupTypes","emval_methodCallers","emval_addMethodCaller"];qc.forEach(c0);function Nc(){s0("fetchSettings"),s0("logReadFiles"),s0("loadSplitModule"),s0("onMalloc"),s0("onRealloc"),s0("onFree"),s0("onSbrkGrow")}var Ma=Z("___getTypeName"),bs=Z("_malloc"),Fe=Z("_free"),Ic=n._MdnCom_ESCHandler=Z("_MdnCom_ESCHandler"),Mc=n._MdnCom_Free=Z("_MdnCom_Free"),Lc=n._MdnCom_RawRx=Z("_MdnCom_RawRx"),Rc=n._MdnCom_CryptoSelfTest=Z("_MdnCom_CryptoSelfTest"),Oc=n._MdnCom_SetCompanionKeypair=Z("_MdnCom_SetCompanionKeypair"),Gc=n._MdnCom_InitiateEcsHandshake=Z("_MdnCom_InitiateEcsHandshake"),Uc=n._MdnCom_SetSecDebug=Z("_MdnCom_SetSecDebug"),Hc=n._MdnCom_GetEcsState=Z("_MdnCom_GetEcsState"),Jc=n._MdnCom_ResetEcs=Z("_MdnCom_ResetEcs"),Kc=n._MdnCom_RegisterEcsHandshakeCallback=Z("_MdnCom_RegisterEcsHandshakeCallback"),zc=n._MdnCom_Init=Z("_MdnCom_Init"),Vc=n._SendUtoQuery=Z("_SendUtoQuery"),Wc=n._SendUtoCmdExt=Z("_SendUtoCmdExt"),La=Z("_fflush"),ms=Z("_emscripten_stack_get_end"),Xc=Z("_emscripten_stack_get_base"),Yc=Z("_strerror"),Ra=Z("_emscripten_stack_init"),Qc=Z("_emscripten_stack_get_free"),Zc=Z("__emscripten_stack_restore"),xf=Z("__emscripten_stack_alloc"),Af=Z("_emscripten_stack_get_current"),ef=Z("memory"),rf=Z("__indirect_function_table"),rn=Z("wasmMemory"),Ar=Z("wasmTable");function tf(f){k(typeof f.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof f.malloc<"u","missing Wasm export: malloc"),k(typeof f.free<"u","missing Wasm export: free"),k(typeof f.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof f.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof f.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof f.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof f.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof f.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof f.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof f.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof f.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof f.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof f.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof f.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof f.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof f.fflush<"u","missing Wasm export: fflush"),k(typeof f.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof f.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof f.strerror<"u","missing Wasm export: strerror"),k(typeof f.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof f.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof f._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof f._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof f.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof f.memory<"u","missing Wasm export: memory"),k(typeof f.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),Ma=V0("__getTypeName",1),bs=V0("malloc",1),Fe=V0("free",1),Ic=n._MdnCom_ESCHandler=V0("MdnCom_ESCHandler",1),Mc=n._MdnCom_Free=V0("MdnCom_Free",1),Lc=n._MdnCom_RawRx=V0("MdnCom_RawRx",1),Rc=n._MdnCom_CryptoSelfTest=V0("MdnCom_CryptoSelfTest",0),Oc=n._MdnCom_SetCompanionKeypair=V0("MdnCom_SetCompanionKeypair",2),Gc=n._MdnCom_InitiateEcsHandshake=V0("MdnCom_InitiateEcsHandshake",0),Uc=n._MdnCom_SetSecDebug=V0("MdnCom_SetSecDebug",1),Hc=n._MdnCom_GetEcsState=V0("MdnCom_GetEcsState",0),Jc=n._MdnCom_ResetEcs=V0("MdnCom_ResetEcs",0),Kc=n._MdnCom_RegisterEcsHandshakeCallback=V0("MdnCom_RegisterEcsHandshakeCallback",1),zc=n._MdnCom_Init=V0("MdnCom_Init",2),Vc=n._SendUtoQuery=V0("SendUtoQuery",2),Wc=n._SendUtoCmdExt=V0("SendUtoCmdExt",4),La=V0("fflush",1),ms=f.emscripten_stack_get_end,Xc=f.emscripten_stack_get_base,Yc=V0("strerror",1),Ra=f.emscripten_stack_init,Qc=f.emscripten_stack_get_free,Zc=f._emscripten_stack_restore,xf=f._emscripten_stack_alloc,Af=f.emscripten_stack_get_current,ef=rn=f.memory,rf=Ar=f.__indirect_function_table}var Oa={__cxa_throw:ee,_abort_js:it,_embind_finalize_value_object:Ke,_embind_register_bigint:at,_embind_register_bool:o,_embind_register_class:Ye,_embind_register_class_constructor:b,_embind_register_class_property:$,_embind_register_emval:I0,_embind_register_float:m0,_embind_register_function:yx,_embind_register_integer:Ix,_embind_register_memory_view:Ox,_embind_register_std_string:Es,_embind_register_std_wstring:l,_embind_register_value_object:B,_embind_register_value_object_field:D,_embind_register_void:h,_emval_create_invoker:N0,_emval_decref:o0,_emval_get_module_property:h0,_emval_get_property:Cx,_emval_incref:Sx,_emval_invoke:Kx,_emval_new_cstring:Zx,_emval_run_destructors:xA,emscripten_resize_heap:kx,fd_close:uc,fd_seek:mc,fd_write:hc,random_get:gc},Ga;function nf(){Ra(),Q()}function sf(){nf(),Xx();function f(){k(!Ga),Ga=!0,n.calledRun=!0,!M&&(TA(),d0?.(n),n.onRuntimeInitialized?.(),n0("onRuntimeInitialized"),k(!n._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),PA())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),f()},1)):f(),K()}var _r;_r=await nt(),sf(),L0?s=n:s=new Promise((f,C)=>{d0=f,$0=C});for(let f of Object.keys(n))f in t||Object.defineProperty(t,f,{configurable:!0,get(){lx(`Access to module property ('${f}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),_F={};xB(_F,{API_STAMP_UNBOUNDED:()=>o8,AT_COMMANDS:()=>_x,AT_COMMAND_TIMEOUT_MS:()=>zx,ApiBadRequestError:()=>S0,ApiForbiddenError:()=>Mn,ApiMethodNotAllowedError:()=>Ri,ApiNotFoundError:()=>fA,AtCommandHandler:()=>yd,AtDeviceError:()=>Li,AtHandlerDisposedError:()=>Ux,BACKFILL_PENDING_HEADER:()=>nv,BACKFILL_PENDING_VALUE:()=>sv,BLE_CONFIGURATION:()=>Wd,BLE_SCAN_TIMEOUT_MS:()=>Yd,COMPANION_AUTH_ERROR_I18N_KEYS:()=>_d,COMPANION_CERT_PATH:()=>ti,COMPANION_PRIVATE_KEY_SIZE:()=>RF,COMPANION_PUBLIC_KEY_SIZE:()=>LF,CertApiError:()=>wt,CompanionAuthErrorKind:()=>M8,CompanionAuthManager:()=>wd,CompanionCertError:()=>N8,DDE_FIELD_UNUSED_INDEX:()=>s8,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>UF,DEFAULT_RECONNECT_OPTIONS:()=>z8,DLO_FILENAME:()=>Hr,DdeMapper:()=>od,DdeUnknownAliasError:()=>ki,DdeUnknownContainerError:()=>Ie,DdeUnknownFieldError:()=>Ii,DdeWriteForbiddenError:()=>$t,DebugLogLevel:()=>r8,DebugMaster:()=>XB,DebugSync:()=>$8,DeviceManager:()=>zd,DeviceState:()=>K8,FW_FILENAME:()=>mi,LIC_API_BASE_URL:()=>k8,LOCAL_API_LIFECYCLE_FLAGS:()=>or,LOCAL_API_SITE_MASK:()=>Ci,LOCAL_API_SITE_MASTER_KEYS:()=>Mt,LegacySync:()=>_8,LocalDataManager:()=>G8,MANUFACTURER_CODE:()=>Xd,MS_1999_12_31:()=>ni,MemoryStorage:()=>QB,Mutex:()=>ji,OfflineSyncManager:()=>dd,RAW_TERMINAL_PATTERN:()=>P8,RESPONSE_PATTERNS:()=>K0,Rm2mStateManager:()=>Hd,SYNC_LOGIC_MASK:()=>QF,SyncManager:()=>jd,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>T8,USB_CONFIGURATION:()=>Vd,UplinkMode:()=>x8,UtoCommand:()=>JF,UtoESC:()=>ZF,UtoFileFlag:()=>XF,UtoFileFlagInt:()=>YF,UtoFileType:()=>VF,UtoFlag:()=>WF,UtoMaster:()=>e8,UtoResult:()=>KF,UtoSplitTag:()=>zF,UtoTag:()=>hi,WebSocketBridge:()=>Mi,applyBlueprintNames:()=>g8,applyDecpl:()=>wC,assertValidRequestStamps:()=>Vr,base64ToBytes:()=>ri,base64UrlToBytes:()=>wB,buildBlueprintNameMap:()=>fi,bytesToBase64:()=>jn,bytesToBase64Url:()=>Di,checkDeviceCapabilities:()=>Pd,computeDisplayValue:()=>O8,computeDisplayValues:()=>Bi,consoleLogger:()=>QA,convertToString:()=>si,crc16Modbus:()=>qB,crc32Ethernet:()=>bi,createDebugBufferState:()=>q8,createLocalApiHandler:()=>iD,createLocalApiSession:()=>Gi,createSiteInfoFromDde:()=>ED,dbStampToStamp40:()=>YA,decodeContainer:()=>vi,decodeFloatm16:()=>d8,decodeLifecycleFlags:()=>Y8,decodeRm2mStateResponse:()=>J8,decodeUplinkState:()=>U8,deriveDeviceLifecycleMirror:()=>Q8,encodeContainer:()=>ci,encodeFloatm16:()=>u8,encodeLifecycleFlags:()=>Hi,encodeNulPaddedJson:()=>W8,encodeSerialNumber:()=>NB,extractBits:()=>wn,formatApiStamp:()=>Jr,generateCompanionKeypair:()=>ei,getDeviceAssignment:()=>w8,isCertValid:()=>pi,isDevicePushableTag:()=>i8,isUnusedField:()=>Be,isValidStamp:()=>Oi,mapLocalApiError:()=>uv,nullLogger:()=>gn,parseApiStamp:()=>zr,parseBlueprint:()=>vd,parseDde:()=>jC,parseMetadataResponse:()=>L8,parseNulPaddedJson:()=>It,parseRm2mStateParams:()=>H8,parseSerialNumberFromDataView:()=>IB,parseValuesResponse:()=>R8,requestCompanionCert:()=>HF,resolveAuthErrorKind:()=>Sd,resolveBlueprintNameMap:()=>Nt,resolveContainerTag:()=>kn,resolveTagForContainer:()=>yt,resolveTagInModel:()=>AC,routeLocalApiRequest:()=>Cv,spreadBits:()=>v8,stamp40ToDbHex:()=>cA,syncLogic:()=>yn,systemTimeSource:()=>qt,toHex:()=>Ne,toUint8Array:()=>ii,utoStack:()=>z0});Dv.exports=eB(_F);var SF=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:bn,n:Dn,Gx:tF,Gy:nF,a:Ls,d:Rs,h:tB}=SF,kt=32,nB=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},Tx=(x="")=>{let A=new Error(x);throw nB(A,Tx),A},sB=x=>typeof x=="bigint",iB=x=>typeof x=="string",aB=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,Fr=(x,A,e="")=>{let r=aB(x),t=x?.length,s=A!==void 0;if(!r||s&&t!==A){let n=e&&`"${e}" `,F=s?` of length ${A}`:"",v=r?`length=${t}`:`type=${typeof x}`,E=n+"expected Uint8Array"+F+", got "+v;throw r?new RangeError(E):new TypeError(E)}return x},qn=x=>new Uint8Array(x),di=x=>Uint8Array.from(x),$F=(x,A)=>x.toString(16).padStart(A,"0"),TF=x=>Array.from(Fr(x)).map(A=>$F(A,2)).join(""),Ee={_0:48,_9:57,A:65,F:70,a:97,f:102},sF=x=>{if(x>=Ee._0&&x<=Ee._9)return x-Ee._0;if(x>=Ee.A&&x<=Ee.F)return x-(Ee.A-10);if(x>=Ee.a&&x<=Ee.f)return x-(Ee.a-10)},PF=x=>{let A="hex invalid";if(!iB(x))return Tx(A);let e=x.length,r=e/2;if(e%2)return Tx(A);let t=qn(r);for(let s=0,n=0;s<r;s++,n+=2){let F=sF(x.charCodeAt(n)),v=sF(x.charCodeAt(n+1));if(F===void 0||v===void 0)return Tx(A);t[s]=F*16+v}return t},qF=()=>globalThis?.crypto,oB=()=>qF()?.subtle??Tx("crypto.subtle must be defined, consider polyfill"),NF=(...x)=>{let A=0;for(let t of x)A+=Fr(t).length;let e=qn(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},FB=(x=kt)=>qF().getRandomValues(qn(x)),mn=BigInt,tr=(x,A,e,r="bad number: out of range")=>{if(!sB(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},ax=(x,A=bn)=>{let e=x%A;return e>=0n?e:A+e},iF=(1n<<255n)-1n,C0=x=>{x<0n&&Tx("negative coordinate");let A=(x>>255n)*19n+(x&iF);return A=(A>>255n)*19n+(A&iF),A%bn},vB=x=>ax(x,Dn),lB=(x,A)=>{(x===0n||A<=0n)&&Tx("no inverse n="+x+" mod="+A);let e=ax(x,A),r=A,t=0n,s=1n,n=1n,F=0n;for(;e!==0n;){let v=r/e,E=r%e,u=t-n*v,p=s-F*v;r=e,e=E,t=n,s=F,n=u,F=p}return r===1n?ax(t,A):Tx("no inverse")},cB=x=>{let A=mB[x];return typeof A!="function"&&Tx("hashes."+x+" not set"),A},fB=x=>Fr(x,64,"digest"),Os=x=>x instanceof Pt?x:Tx("Point expected"),xi=2n**256n,ui=class nr{constructor(A,e,r,t){A0(this,"X"),A0(this,"Y"),A0(this,"Z"),A0(this,"T");let s=xi;this.X=tr(A,0n,s),this.Y=tr(e,0n,s),this.Z=tr(r,1n,s),this.T=tr(t,0n,s),Object.freeze(this)}static CURVE(){return SF}static fromAffine(A){return new nr(A.x,A.y,1n,C0(A.x*A.y))}static fromBytes(A,e=!1){let r=Rs,t=di(Fr(A,kt)),s=A[31];t[31]=s&-129;let n=IF(t);tr(n,0n,e?xi:bn);let v=C0(n*n),E=ax(v-1n),u=C0(r*v+1n),{isValid:p,value:m}=CB(E,u);p||Tx("bad point: y not sqrt");let w=(m&1n)===1n,j=(s&128)!==0;return!e&&m===0n&&j&&Tx("bad point: x==0, isLastByteOdd"),j!==w&&(m=ax(-m)),new nr(m,n,1n,C0(m*n))}static fromHex(A,e){return nr.fromBytes(PF(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=Ls,e=Rs,r=this;if(r.is0())return Tx("bad point: ZERO");let{X:t,Y:s,Z:n,T:F}=r,v=C0(t*t),E=C0(s*s),u=C0(n*n),p=C0(u*u),m=C0(v*A),w=C0(u*(m+E)),j=ax(p+C0(e*C0(v*E)));if(w!==j)return Tx("bad point: equation left != right (1)");let S=C0(t*s),P=C0(n*F);return S!==P?Tx("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:s,Y:n,Z:F}=Os(A),v=C0(e*F),E=C0(s*t),u=C0(r*F),p=C0(n*t);return v===E&&u===p}is0(){return this.equals(ir)}negate(){return new nr(ax(-this.X),this.Y,this.Z,ax(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=Ls,s=C0(A*A),n=C0(e*e),F=C0(2n*r*r),v=C0(t*s),E=ax(A+e),u=ax(C0(E*E)-s-n),p=ax(v+n),m=ax(p-F),w=ax(v-n),j=C0(u*m),S=C0(p*w),P=C0(u*w),N=C0(m*p);return new nr(j,S,N,P)}add(A){let{X:e,Y:r,Z:t,T:s}=this,{X:n,Y:F,Z:v,T:E}=Os(A),u=Ls,p=Rs,m=C0(e*n),w=C0(r*F),j=C0(C0(s*p)*E),S=C0(t*v),P=ax(C0(ax(e+r)*ax(n+F))-m-w),N=ax(S-j),O=ax(S+j),L=ax(w-C0(u*m)),t0=C0(P*N),M=C0(O*L),k=C0(P*L),R=C0(N*O);return new nr(t0,M,R,k)}subtract(A){return this.add(Os(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(tr(A,1n,Dn),!e&&this.is0()))return ir;if(A===1n)return this;if(this.equals(Kr))return kB(A).p;let r=ir,t=Kr;for(let s=this;A>0n;s=s.double(),A>>=1n)A&1n?r=r.add(s):e&&(t=t.add(s));return r}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:e,Z:r}=this;if(this.equals(ir))return{x:0n,y:1n};let t=lB(r,bn);C0(r*t)!==1n&&Tx("invalid inverse");let s=C0(A*t),n=C0(e*t);return{x:s,y:n}}toBytes(){let{x:A,y:e}=this.toAffine(),r=EB(e);return r[31]|=A&1n?128:0,r}toHex(){return TF(this.toBytes())}clearCofactor(){return this.multiply(mn(tB),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(Dn/2n,!1).double();return Dn%2n&&(A=A.add(this)),A.is0()}};A0(ui,"BASE");A0(ui,"ZERO");var Pt=ui,Kr=new Pt(tF,nF,1n,ax(tF*nF)),ir=new Pt(0n,1n,1n,0n);Pt.BASE=Kr;Pt.ZERO=ir;var EB=x=>PF($F(tr(x,0n,xi),64)).reverse(),IF=x=>mn("0x"+TF(di(Fr(x)).reverse())),XA=(x,A)=>{let e=x;for(;A-- >0n;)e=C0(e*e);return e},BB=x=>{let A=C0(x*x),e=C0(A*x),r=C0(XA(e,2n)*e),t=C0(XA(r,1n)*x),s=C0(XA(t,5n)*t),n=C0(XA(s,10n)*s),F=C0(XA(n,20n)*n),v=C0(XA(F,40n)*F),E=C0(XA(v,80n)*v),u=C0(XA(E,80n)*v),p=C0(XA(u,10n)*s);return{pow_p_5_8:C0(XA(p,2n)*x),b2:e}},aF=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,CB=(x,A)=>{let e=C0(A*C0(A*A)),r=C0(C0(e*e)*A),t=BB(C0(x*r)).pow_p_5_8,s=C0(x*C0(e*t)),n=C0(A*C0(s*s)),F=s,v=C0(s*aF),E=n===x,u=n===ax(-x),p=n===ax(-x*aF);return E&&(s=F),(u||p)&&(s=v),(ax(s)&1n)===1n&&(s=ax(-s)),{isValid:E||u,value:s}},dB=x=>vB(IF(x)),uB=(...x)=>Promise.resolve(cB("sha512Async")(NF(...x))).then(fB),DB=x=>{let A=di(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=dB(e),s=Kr.multiply(t),n=s.toBytes();return{head:e,prefix:r,scalar:t,point:s,pointBytes:n}},pB=x=>uB(Fr(x,kt)).then(DB),bB=x=>pB(x).then(A=>A.pointBytes),mB={sha512Async:async x=>{let A=oB(),e=NF(x);return qn(await A.digest("SHA-512",e.buffer))},sha512:void 0},hB=x=>(x=x===void 0?FB(kt):x,Fr(x,kt)),jB=async x=>{let A=hB(x),e=await bB(A);return{secretKey:A,publicKey:e}},hn=8,gB=256,MF=Math.ceil(gB/hn)+1,Ai=2**(hn-1),yB=()=>{let x=[],A=Kr,e=A;for(let r=0;r<MF;r++){e=A,x.push(e);for(let t=1;t<Ai;t++)e=e.add(A),x.push(e);A=e.double()}return x},oF=void 0,FF=(x,A)=>{let e=A.negate();return x?e:A},kB=x=>{let A=oF||(oF=yB()),e=ir,r=Kr,t=2**hn,s=t,n=mn(t-1),F=mn(hn);for(let v=0;v<MF;v++){let E=Number(x&n);x>>=F,E>Ai&&(E-=s,x+=1n);let u=v*Ai,p=u,m=u+Math.abs(E)-1,w=v%2!==0,j=E<0;E===0?r=r.add(FF(w,A[p])):e=e.add(FF(j,A[m]))}return x!==0n&&Tx("invalid wnaf"),{p:e,f:r}},LF=32,RF=64;async function ei(){let{secretKey:x,publicKey:A}=await jB(),e=new Uint8Array(RF);return e.set(x,0),e.set(A,LF),{publicKey:A,privateKey:e}}function jn(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function ri(x,A="base64 value"){return GF(OF(x,A))}function OF(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function Di(x){return jn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function wB(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return GF(OF(r,A))}function GF(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var wt=class extends Error{constructor(x,A,e){super(e),A0(this,"httpStatus",x),A0(this,"code",A),this.name="CertApiError"}},ti="/api/1/companion/cert",UF=10080*60*1e3,vF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function HF(x,A){let e=x.apiHost.replace(/\/+$/,""),r=vF?ti:e+ti,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};vF&&e&&(t["x-target-host"]=e);let s=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:Di(A.publicKey),subject:A.subject})});if(!s.ok){let F="unknown_error",v=s.statusText||`Cert API request failed (${s.status})`;try{let E=await s.json();E.code&&(F=E.code),E.message&&(v=E.message)}catch{}throw new wt(s.status,F,v)}let n=await s.json();if(!n.certificate||!n.notAfter)throw new wt(s.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function pi(x,A=UF){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var _B=require("events"),SB=AB(rB(),1),En="[device-master]",QA={debug:(x,...A)=>console.debug(En,x,...A),info:(x,...A)=>console.info(En,x,...A),warn:(x,...A)=>console.warn(En,x,...A),error:(x,...A)=>console.error(En,x,...A)},gn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},$B=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function bi(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^$B[(e^x[r])&255];return(e^-1)>>>0}var ni=Date.UTC(1999,11,31,0,0,0);function si(x,A,e=" "){let r=""+x,t=Math.max(0,Math.abs(A)-r.length),s=e.repeat(t);return A<0?r+s:s+r}function Ne(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function ii(x){if(x instanceof Uint8Array)return x;if(x instanceof ArrayBuffer)return new Uint8Array(x);if(x&&Object.hasOwn(x,"type")&&x.type==="Buffer"&&Object.hasOwn(x,"data")&&x.data instanceof Array)return Uint8Array.from(x.data);if(x.buffer)return new Uint8Array(x.buffer,x.byteOffset,x.byteLength);throw new Error("can not convert value to Uint8Array")}var TB=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),PB=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);function qB(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let s=(r^x[t])&255;r=(e^TB[s])&255,e=PB[s]}return 256*e|r}function NB(x){if(x.length!==16)throw new Error("Serial number hex must be exactly 16 characters long.");let A=new ArrayBuffer(8),e=new DataView(A),r=x.substring(8,16),t=x.substring(0,8),s=parseInt(r,16),n=parseInt(t,16);return e.setUint32(0,s,!0),e.setUint32(4,n,!0),e}function IB(x){let A=("0000000"+x.getUint32(4,!0).toString(16)).slice(-8),e=("0000000"+x.getUint32(0,!0).toString(16)).slice(-8),r=`${A}${e}`.toUpperCase();return r.startsWith("0000")||e.startsWith("0000")?null:r}var MB=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],LB=new Map(MB.map((x,A)=>[x,128+A]));function RB(x){return x<=127||x>=160&&x<=255?x:LB.get(x)??63}var Hr="uto_script.dat",mi="uto_fw.dat",JF=(x=>(x[x.RESULT=0]="RESULT",x[x.QUERY=1]="QUERY",x[x.DELETE=2]="DELETE",x[x.DATA=3]="DATA",x[x.UNS_DATA=4]="UNS_DATA",x[x.LIVE_DATA=5]="LIVE_DATA",x[x.FILE_LIST=7]="FILE_LIST",x[x.FILE_RETR=8]="FILE_RETR",x[x.FILE_STOR=9]="FILE_STOR",x[x.FILE_DELE=10]="FILE_DELE",x[x.SET_VALUE=11]="SET_VALUE",x))(JF||{}),KF=(x=>(x[x.OK=0]="OK",x[x.TAG=1]="TAG",x[x.DLEN=2]="DLEN",x[x.DATA=3]="DATA",x[x.STAMP=4]="STAMP",x[x.EOD=5]="EOD",x[x.COMMAND=6]="COMMAND",x[x.COMMAND_DENIED=7]="COMMAND_DENIED",x[x.FULL=8]="FULL",x[x.NOTSUPPORTED=9]="NOTSUPPORTED",x[x.OLDDATA=10]="OLDDATA",x[x.STORAGE=11]="STORAGE",x[x.BUSY=12]="BUSY",x[x.DISC=256]="DISC",x))(KF||{}),hi=(x=>(x[x.DEVINFO=0]="DEVINFO",x[x.STAMPS=1]="STAMPS",x[x.LIC_QUERY=2]="LIC_QUERY",x[x.FILEMAP=3]="FILEMAP",x[x.MNTCFG=4]="MNTCFG",x[x.MDNCFG=5]="MDNCFG",x[x.CONTEXT=128]="CONTEXT",x[x.ALERTS=4294901767]="ALERTS",x[x.HISTDATA0=26368]="HISTDATA0",x[x.LOG=26375]="LOG",x[x.SYSCFG=26378]="SYSCFG",x[x.STATE=26389]="STATE",x[x.LOCALS=26402]="LOCALS",x[x.POS=26404]="POS",x[x.CTRLAMX=26405]="CTRLAMX",x[x.DYNPOS__=26406]="DYNPOS__",x[x.CONFIG0=26416]="CONFIG0",x[x.CONFIG1=26417]="CONFIG1",x[x.CONFIG2=26418]="CONFIG2",x[x.CONFIG3=26419]="CONFIG3",x[x.CONFIG4=26420]="CONFIG4",x[x.CONFIG5=26421]="CONFIG5",x[x.CONFIG6=26422]="CONFIG6",x[x.CONFIG7=26423]="CONFIG7",x[x.CONFIG8=26424]="CONFIG8",x[x.CONFIG9=26425]="CONFIG9",x[x.SYSOTP=26432]="SYSOTP",x[x.SYSFLASH=26433]="SYSFLASH",x[x.APPOTP=26434]="APPOTP",x[x.APPFLASH=26435]="APPFLASH",x[x.APPSTATE=26436]="APPSTATE",x[x.SYSINFO=26437]="SYSINFO",x[x.APPINFO=26438]="APPINFO",x[x.SYSSTATE=26439]="SYSSTATE",x[x.HISTDATA1=26528]="HISTDATA1",x[x.HISTDATA2=26529]="HISTDATA2",x[x.HISTDATA3=26530]="HISTDATA3",x[x.HISTDATA4=26531]="HISTDATA4",x[x.HISTDATA5=26532]="HISTDATA5",x[x.HISTDATA6=26533]="HISTDATA6",x[x.HISTDATA7=26534]="HISTDATA7",x[x.HISTDATA8=26535]="HISTDATA8",x[x.HISTDATA9=26536]="HISTDATA9",x[x.HISTDATA_RAW=26623]="HISTDATA_RAW",x[x.CONFIGA=4294928218]="CONFIGA",x[x.CONFIGB=4294928219]="CONFIGB",x[x.CONFIGC=4294928220]="CONFIGC",x))(hi||{}),zF=(x=>(x[x.HISTDATA0=0]="HISTDATA0",x[x.HISTDATA1=1]="HISTDATA1",x[x.HISTDATA2=2]="HISTDATA2",x[x.HISTDATA3=3]="HISTDATA3",x[x.HISTDATA4=4]="HISTDATA4",x[x.HISTDATA5=5]="HISTDATA5",x[x.HISTDATA6=6]="HISTDATA6",x[x.HISTDATA7=7]="HISTDATA7",x[x.HISTDATA8=8]="HISTDATA8",x[x.HISTDATA9=9]="HISTDATA9",x[x.ALERTS=32]="ALERTS",x[x.APPLOG=40]="APPLOG",x))(zF||{}),VF=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(VF||{}),WF=(x=>(x[x.HISTORIC=1]="HISTORIC",x[x.UP=2]="UP",x[x.DOWN=4]="DOWN",x[x.DLEN_VAR=8]="DLEN_VAR",x[x.SET_VALUE=16]="SET_VALUE",x))(WF||{}),XF=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(XF||{}),YF=(x=>(x[x.CRC_STAMP=1]="CRC_STAMP",x[x.FORCE_DNLD=2]="FORCE_DNLD",x[x.FORCE_UPLD=4]="FORCE_UPLD",x[x.DEL=8]="DEL",x[x.CREATOR=16]="CREATOR",x[x.SYNCONLYDOWN=33]="SYNCONLYDOWN",x[x.SYNCONLYUP=65]="SYNCONLYUP",x[x.STAMP_ONLY=97]="STAMP_ONLY",x[x.TAKEFROMTPL=128]="TAKEFROMTPL",x[x.EXISTSONDEV=256]="EXISTSONDEV",x))(YF||{}),QF=97;function yn(x){return x&QF}var ZF=(x=>(x[x.KEEPALIVE=1]="KEEPALIVE",x[x.NEWDATA=2]="NEWDATA",x[x.DISC=3]="DISC",x[x.LIVE_ON=4]="LIVE_ON",x[x.LIVE_OFF=5]="LIVE_OFF",x[x.NO_GPRS=6]="NO_GPRS",x[x.ZLIB=7]="ZLIB",x[x.WAKEUP=8]="WAKEUP",x[x.SECURITY=9]="SECURITY",x[x.CAP_00=192]="CAP_00",x[x.CAP_01=193]="CAP_01",x[x.CAP_02=194]="CAP_02",x[x.CAP_03=195]="CAP_03",x[x.CAP_04=196]="CAP_04",x[x.CAP_05=197]="CAP_05",x[x.CAP_06=198]="CAP_06",x[x.CAP_07=199]="CAP_07",x[x.CAP_08=200]="CAP_08",x[x.CAP_09=201]="CAP_09",x[x.CAP_0a=202]="CAP_0a",x[x.CAP_0b=203]="CAP_0b",x[x.CAP_0c=204]="CAP_0c",x[x.CAP_0d=205]="CAP_0d",x[x.CAP_0e=206]="CAP_0e",x[x.CAP_0f=207]="CAP_0f",x))(ZF||{}),x8=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(x8||{}),lF={config0:26416,config1:26417,config2:26418,config3:26419,config4:26420,config5:26421,config6:26422,config7:26423,config8:26424,config9:26425,histdata0:26368,histdata1:26528,histdata2:26529,histdata3:26530,histdata4:26531,histdata5:26532,histdata6:26533,histdata7:26534,histdata8:26535,histdata9:26536},OB=class{constructor(){}resultToString(x){x|=0;let A=x&256?"+DISC":"";switch(x&255){case 0:return"OK"+A;case 1:return"E_TAG"+A;case 2:return"E_DLEN"+A;case 3:return"E_DATA"+A;case 4:return"E_STAMP"+A;case 5:return"E_EOD"+A;case 6:return"E_CMD"+A;case 7:return"E_CMDDENIED"+A;case 8:return"E_FULL"+A;case 9:return"E_NOTSUPPORTED"+A;case 10:return"E_OLDDATA"+A;case 11:return"E_STORAGE"+A;case 12:return"E_STORAGE"+A}return"E_0x"+Ne(x,4)+A}commandToString(x){switch(x|=0,x){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+Ne(x,2)}tagToString(x){x|=0;let A=Object.entries(hi).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+Ne(x,4)}containerIdToTag(x,A){let e=lF[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(lF).find(([,e])=>e===x.wTag);if(A)return A[0];if(x.wTag===26623){if(!x.data||!x.data.byteLength)return null;let e=x.data.getUint8(0);return e===32?"alerts":e>=0&&e<=9?`histdata${e}`:null}return null}formatSerialNumber(x,A="-"){return x?x.substr(0,4)+A+x.substr(4,4)+A+x.substr(8,4)+A+x.substr(12):"(none)"}decodeUplinkState(x){let A={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},e=!!(x&A.WAKEUPABLE),r=[];x&A.POSUPDATE_ACTIVE?r=["locating",!1]:x&A.RETRY?r=["retry",!1]:x&A.STARTED?r=["dialing",!1]:x&A.ACTIVE?r=["active",!1]:x&A.FAILED?r=["failed",e]:x&A.DISABLED?r=["disabled",!1]:r=["offline",e];let t=A.WAKEUPABLE|A.RETRY|A.STARTED|A.ACTIVE|A.POSUPDATE_ACTIVE|A.FAILED|A.DISABLED|A.EXTSIM;return{signal:r[0],wakeupAble:r[1],path:x&A.EXTSIM?"xsim ":"isim ",txStateUnknown:x&~t}}stamp40ToMS(x){let A=Math.trunc(x/256),e=x&255;return Math.round(A*1e3+1e3*e/256)+ni}msToStamp40(x){let A=(x-ni)/1e3,e=Math.trunc(A),r=Math.round((A-e)*256);return e*256+r}stamp40ToDate(x){return new Date(this.stamp40ToMS(x))}utf8Unpack(x,A,e){let r=new TextDecoder("utf-8"),t=0;for(;t<e&&x.getUint8(A+t);)t++;let s=new Uint8Array(x.buffer,A,t);return r.decode(s)}ansiUnpack(x,A,e,r){try{let t=ii(x),s=new TextDecoder(r),n=0;for(;n<e&&t[A+n];)n++;return s.decode(t.slice(A,A+n))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${r}"`}}cp1252Unpack(x,A,e){return this.ansiUnpack(x,A,e,"cp1252")}ansiPack(x,A,e,r){let t=ii(x);t.fill(0,A,A+e);for(let s=0;s<e&&s<r.length;s++)t[A+s]=RB(r.charCodeAt(s))}cp1252Pack(x,A,e,r){return this.ansiPack(x,A,e,r)}dataFrameNotNull(x){if(!x.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(0),r=A.getUint16(2),t=A.getUint16(4),s=A.getUint32(6),n=(Ne(s,8)+Ne(x.dwDevSN,8)).toUpperCase(),F=[];for(let v=0;v<(A.byteLength-10)/5;v++){let E=A.getUint8(10+v*5+2),u=A.getUint16(10+v*5);F.push({wTag:u,sTag:this.tagToString(u),size:A.getUint16(10+v*5+3),flags:{historic:!!(E&1),single:!(E&1),up:!!(E&2),down:!!(E&4),variableLength:!!(E&8),setValue:!!(E&16)}})}return{serialNumber:n,class:Ne(e,4),firmwareVersion:`${si(t>>8,2)}v${si(t&255,3,"0")}`,flags:Ne(r,4),utos:F}}decode_STAMPS(x){this.dataFrameNotNull(x);let A=x.data,e={contextId:A.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let r=0;r<(A.byteLength-8)/5;r++)e.stamps.push(A.getUint32(8+r*5+0)*256+A.getUint8(8+r*5+4));return e}decode_CONTEXT(x){this.dataFrameNotNull(x);let A=x.data;return{id:A.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(A,8,50)}}encode_CONTEXT(x){let A=new Uint8Array(58),e=new DataView(A.buffer);return e.setBigUint64(0,BigInt("0x"+x.id),!0),this.cp1252Pack(e,8,50,x.name),A}decode_FILEMAP(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(13,!1),r={stamp:A.getUint32(0,!1)*256+A.getUint8(4),size:A.getUint32(5,!1),crc32:A.getUint32(9,!1),flags:{read:!!(e&1),write:!!(e&2),node:!!(e&4),system:!!(e&8),extra:e&-16},_flags:e,name:this.cp1252Unpack(A,15,A.byteLength-15)};if(r.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+r.flags.extra);return r}encode_FILEMAP(x){if(x.flags){let r=0;x.flags.extra&&(r|=x.flags.extra|0),x.flags.read&&(r|=1),x.flags.write&&(r|=2),x.flags.node&&(r|=4),x.flags.system&&(r|=8),x._flags=r}let A=new Uint8Array(15+x.name.length+1),e=new DataView(A.buffer);return e.setUint32(0,Math.trunc(x.stamp/256),!1),e.setUint8(4,x.stamp&255),e.setUint32(5,x.size,!1),e.setUint32(9,x.crc32,!1),e.setUint16(13,x._flags,!1),this.cp1252Pack(e,15,256,x.name),A}decode_RM2M_STATE(x){this.dataFrameNotNull(x);let A=x.data;return{rssi:A.getInt8(0),uplinkMode:A.getUint8(1),imei:this.cp1252Unpack(A,61,15),hardwareId:this.cp1252Unpack(A,96,50),sim:{id:this.cp1252Unpack(A,2,15),apn:this.cp1252Unpack(A,17,40),iccId:this.cp1252Unpack(A,76,20)},network:{mcc:A.getUint16(57),mnc:A.getUint16(59)}}}},z0=new OB,qt={nowMs:()=>Date.now()},ji=class{constructor(x="(unnamed)"){A0(this,"name"),A0(this,"_locked"),A0(this,"_chain"),this.name=x,this._locked=0,this._chain=[]}get islocked(){return!!this._locked}requestLock(){if(++this._locked!==1)return new Promise(x=>{this._chain.push(x)})}unlock(){--this._locked,this._chain.length&&this._chain.shift()()}async runExclusive(x){await this.requestLock();try{return await x()}finally{this.unlock()}}},cF=new WeakMap;function A8(x,A){let r=(cF.get(x)??Promise.resolve()).then(()=>GB(x,A));return cF.set(x,r.catch(()=>{})),r}async function GB(x,A){x.interface&&x.interface==="ble"?await UB(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function UB(x,A,e=23){let r=new Uint8Array(A),t=e-3;for(let s=0;s<r.byteLength;s+=t){let n=r.slice(s,s+t);await x(n.buffer)}}var fF=15e3,HB=500,JB=3,KB=1024;function EF(x){return x?.utos.find(e=>e.wTag===3)?.size||KB}var e8=class pn extends _B.EventEmitter{constructor(A,e,r=qt){super(),A0(this,"mdnComInterface"),A0(this,"receiveUto"),A0(this,"sendUto"),A0(this,"rxUto"),A0(this,"txStream"),A0(this,"SendUtoCmdExt"),A0(this,"utoPortLock"),A0(this,"transport"),A0(this,"logger"),A0(this,"ecsHandshakeResolver",null),A0(this,"disposeTransportListener",null),A0(this,"encrypted",!1),A0(this,"lastTxWrite",Promise.resolve()),A0(this,"timeSource"),A0(this,"fileChunkSize",EF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new ji("UTO-Port"),this.transport=A,this.logger=e??QA,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,SB.default)({print:s=>{this.logger.info(`[mdnCom] ${s}`),this.emit("mdnCom",s)},printErr:s=>{this.logger.error(`[mdnCom] ${s}`),this.emit("mdnComError",s)}});let A=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let e=this.mdnComInterface.addFunction(()=>{if(this.txStream){let s=this.txStream();this.lastTxWrite=A8(this.transport,s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let s=this.rxUto(),n=this.parseUtoFrame(s);this.emit("utoFrame",n)}},"v");await A(e,r);let t=this.mdnComInterface.addFunction(s=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${s} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let n=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,n({success:s===0,resultCode:s})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async s=>{this.receiveUto&&await this.receiveUto(new Uint8Array(s))}),await this.requestDeviceInfo().catch()}async dispose(A){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!A){let e=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(e.message),e}try{this.logger.info("[dispose] requesting context for encrypted close");let e=await this.requestContext();e?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(e)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(e){this.logger.error(`[dispose] error during context round trip: ${e}`)}try{this.logger.info("[dispose] sending connection close"),await A.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(e){this.logger.error(`[dispose] error sending connection close: ${e}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(e){this.logger.error(`[dispose] error resetting WASM ECS state: ${e}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(A){return{dwDevSN:A.vDevID_u32,bCmd:A.vCmd_u8,stamp:A.vStamp_s.u32SysTime*256+A.vStamp_s.u8SysTime,wTag:A.vTag_u16&255,wTagFull:A.vTag_u16,sTag:z0.resultToString(A.vTag_u16),_dbg:A.vDevID_u32.toString(16),bVersion:1,_dlen:A.vDLen_u16,bRes:A.vRes_u8,bSeq:A.vSeq_u8,data:A.vData_pu8.length?new DataView(A.vData_pu8.buffer,A.vData_pu8.byteOffset,A.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(A,e=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let r=Math.trunc(e/256),t=e&255;return await this.sendWithRetry((s,n,F)=>{if(s.bCmd===0){let v=this.resultVerdict(s);v===5||v===0||v===4?n(null):F(s);return}if(s.wTagFull!==A)return F(s);n(s)},async()=>{this.sendUto(A,{u32SysTime:r,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${A.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}static resultCode(A){return{verdict:A.wTagFull&-257,disc:(A.wTagFull&256)!==0}}resultVerdict(A){let{verdict:e,disc:r}=pn.resultCode(A);return r&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${A.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",A.wTagFull)),e}static concatChunks(A){let e=A.reduce((s,n)=>s+n.length,0),r=new Uint8Array(e),t=0;for(let s of A)r.set(s,t),t+=s.length;return r}sendWithRetry(A,e,r){let t=r?.timeoutMs??HB,s=r?.maxRetries??JB;return new Promise((n,F)=>{let v=0,E=!1,u=()=>{},p,m={resolve:j=>{E=!0,clearTimeout(p),this.removeListener("utoFrame",u),n(j)},reject:j=>{E=!0,clearTimeout(p),this.removeListener("utoFrame",u),F(j)}},w=async()=>{u=j=>A(j,m.resolve,m.reject),this.once("utoFrame",u);try{await e()}catch(j){if(E)return;this.removeListener("utoFrame",u),F(j);return}E||(p=setTimeout(()=>{if(this.removeListener("utoFrame",u),v>=s){F(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${s} retries`));return}v++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${v}/${s})`),w()},t))};w()})}createFrameIdleGuard(A,e,r){let t,s=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{s(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),r()},e)},clear:s}}async requestHistoricUtos(A,e,r,t=fF,s=0,n){return await this.utoPortLock.requestLock(),new Promise((F,v)=>{if(!this.sendUto)return F([]);let E=[],u=0,p=Promise.resolve(),m=P=>{if(w.arm(),P.bCmd===0){w.clear(),this.settleHistoricTransfer(P,E,n,p,F,v);return}if(P.wTagFull===A&&P.data&&(E.push({stamp40:P.stamp,data:this.copyDataView(P.data)}),r?.(++u),n&&s>0&&E.length>=s)){let N=E.splice(0);p=p.then(()=>n(N))}this.once("utoFrame",m)},w=this.createFrameIdleGuard(m,t,()=>v(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${u} records received)`)));this.once("utoFrame",m),w.arm();let j=Math.trunc(e/256),S=e&255;this.sendUto(A,{u32SysTime:j,u8SysTime:S})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,e,r,t,s,n){let F=this.resultVerdict(A);if(!(F===5||F===0||F===4)){t.then(()=>n(A)).catch(n);return}let E=r&&e.length>0?e.splice(0):null;(E?t.then(()=>r(E)):t).then(()=>s(r?[]:e)).catch(n)}async requestFile(A,e,r=fF){return await this.utoPortLock.requestLock(),new Promise((t,s)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let n=[],F=0,v=p=>{if(E.arm(),p.bCmd===0){E.clear();let m=this.resultVerdict(p);m===5||m===0?t(pn.concatChunks(n)):s(p);return}if(p.bCmd===3&&p.data){let m=this.copyDataView(p.data);n.push(m),F+=m.byteLength,e?.(F)}this.once("utoFrame",v)},E=this.createFrameIdleGuard(v,r,()=>s(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${A}", ${F} bytes received)`)));this.once("utoFrame",v),E.arm();let u=new Uint8Array(A.length+1);for(let p=0;p<A.length;p++)u[p]=A.charCodeAt(p)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},u)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(A){let e=new Uint8Array(A.length+1);for(let r=0;r<A.length;r++)e[r]=A.charCodeAt(r)&255;await this.sendUTOCmdExt(10,3,e,0)}async sendSetValue(A,e,r){this.isInitialized();let t=new Uint8Array(e.length);z0.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,A,t,r),{outcome:"ok",resultCode:0}}catch(s){let n=s;if(n&&n.bCmd===0&&typeof n.wTagFull=="number"){let{verdict:F}=pn.resultCode(n),v=n.wTagFull;return F===4?{outcome:"stamp",resultCode:v}:F===7||F===9?{outcome:"denied",resultCode:v}:{outcome:"error",resultCode:v}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${s}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),e=A?z0.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=EF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?z0.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,z0.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},s=n=>this.handleFileListFrame(n,t,A,e,r,s);this.once("utoFrame",s),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,e,r,t,s,n){if(A.bCmd===0){let F=this.resultVerdict(A);F===5||F===0?t(r?e[r]?{[r]:e[r]}:{}:e):s(A);return}try{let F=z0.decode_FILEMAP(A);e[F.name]=F}catch(F){s(F);return}this.once("utoFrame",n)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?z0.decode_STAMPS(A):null}async sendFile(A,e,r,t){let s=e;A===2&&(s=new Uint8Array(e.length+1),s.set(new Uint8Array(e),1),s[0]=A);let n={name:t??Hr,stamp:r===0?0:z0.msToStamp40(r??this.timeSource.nowMs()),size:s.length,_flags:11,crc32:bi(s)},F=z0.encode_FILEMAP(n);if(!await this.sendUTOCmdExt(9,3,F,0)){let E=this.fileChunkSize;for(let u=0;u<s.length;u+=E){let p=Math.min(E,s.byteLength-u),m=new Uint8Array(s.buffer,s.byteOffset+u,p);await this.sendUTOCmdExt(3,3,m,u*256);let j=(u+p)/s.byteLength*100;this.emit("installing",j.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,e,r,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let s=t??this.utoStampNow40,n=Math.trunc(s/256),F=s&255;return await this.sendWithRetry((v,E,u)=>{if(v.bCmd!==0){u(v);return}this.resultVerdict(v)===0?E(null):u(v)},async()=>{this.SendUtoCmdExt(A,e,{u32SysTime:n,u8SysTime:F},r),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${A} tag=0x${e.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(A,e,r){return this.sendUTOCmdExt(3,A,e,r)}packOtpFlashString(A){let e=new Uint8Array(1024);return z0.cp1252Pack(e,0,1024,A),e}async writeAppOtp(A){await this.sendUTOData(26434,this.packOtpFlashString(A))}async writeAppFlash(A){await this.sendUTOData(26435,this.packOtpFlashString(A))}async writeSysOtp(A){await this.sendUTOData(26432,this.packOtpFlashString(A))}async writeSysFlash(A){await this.sendUTOData(26433,this.packOtpFlashString(A))}async initiateEcsHandshake(A){if(this.isInitialized(),A.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${A.companionPublicKey.length}`);if(A.companionPrivateKey.length!==32&&A.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${A.companionPrivateKey.length}`);let e=A.companionPublicKey.slice(0,32),r=A.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${e.length} seed.len=${r.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(e,r);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((s,n)=>{if(A.signal?.aborted){n(new Error("Operation aborted"));return}let F=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),n(new Error("Operation aborted")))};A.signal?.addEventListener("abort",F,{once:!0}),this.ecsHandshakeResolver=E=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(E)}`),A.signal?.removeEventListener("abort",F),E.success&&(this.encrypted=!0),s(E)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let v=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${v} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),v<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",F),s({success:!1,resultCode:v})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},zB=require("events"),r8=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(r8||{}),VB=5e3,WB=5e3,XB=class extends zB.EventEmitter{constructor(x,A){super(),A0(this,"atHandler"),A0(this,"debugCache",null),A0(this,"logger"),A0(this,"dataHandler"),this.atHandler=x,this.logger=A??QA,this.dataHandler=e=>{this.processIncomingDebugData(e)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(x){let A=this.initDebugCache();this.processDebugChunk(A,x)}async sendDebugCommand(x){await this.atHandler.sendRaw(x)}formatConsoleLine(x){if(!x.length)return;let A=x;x[0]===""&&(A=x.substring(1));try{let[e,r,,t]=A.split(" "),s={sequenceId:e?.substring(1),lineNumber:Number.isNaN(r)?void 0:Number(r),message:"",level:3},n=`${t.substring(1)}`,F=t.substring(0,1);"$!?~$".includes(F)&&(s.level=this.logLevelFromPrefix(F)),s.message=n,this.emitMessageEvent(s)}catch{this.emitMessageEvent({level:2,message:A})}}logLevelFromPrefix(x){switch(x){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(x){this.emit("message",x)}processDebugChunk({f00:x,f00Start:A,f01LastSee:e,f11:r},t){for(let s of t){s==="\xFF"&&(s="%");let n=String.fromCharCode(...r.map(F=>F.tag));if(s===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:1,buf:s,start:Date.now()})}else if(s===""){switch(n){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let F=r.pop().buf+s;F==="****^reset****"?e=0:this.process_x01(F,e)}else if(s===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:16,buf:s,start:Date.now()})}else if(r.length){let F=r[r.length-1];if(F.tag===16&&s==="\r")continue;F.buf+=s,F.tag===16&&s===`
2193
- `&&r.pop()}else{if(x||(A=Date.now()),s==="\r"||(x+=s,!(Date.now()>A+WB||s===`
2192
+ }`;var Z0=new Function(Object.keys(r0),p0)(...Object.values(r0)),Y0=`methodCaller<(${Y.map(Ax=>Ax.name)}) => ${q.name}>`;return M(Xe(Y0,Z0))},h0=f=>(f=R0(f),D0.toHandle(n[f])),Cx=(f,C)=>(f=D0.toValue(f),C=D0.toValue(C),D0.toHandle(f[C])),$x=f=>{f>9&&(V[f+1]+=1)},zx=(f,C,g,T,q)=>_[f](C,g,T,q),AA=f=>D0.toHandle(R0(f)),eA=f=>{var C=D0.toValue(f);LA(C),o0(f)},xr=()=>2147483648,FA=(f,C)=>(k(C,"alignment argument is required"),Math.ceil(f/C)*C),Te=f=>{var C=tn.buffer.byteLength,g=(f-C+65535)/65536|0;try{return tn.grow(g),Ex(),1}catch(T){O(`growMemory: Attempted to grow heap from ${C} bytes to ${f} bytes, but got error: ${T}`)}},kx=f=>{var C=gx.length;f>>>=0,k(f>C);var g=xr();if(f>g)return O(`Cannot enlarge memory, requested ${f} bytes, but the limit is ${g} bytes!`),!1;for(var T=1;T<=4;T*=2){var q=C*(1+.2/T);q=Math.min(q,f+100663296);var Y=Math.min(g,FA(Math.max(f,q),65536)),X=Te(Y);if(X)return!0}return O(`Failed to grow the heap from ${C} bytes to ${Y} bytes, not enough memory!`),!1},pc=f=>{lx("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},bc=9007199254740992,mc=-9007199254740992,hc=f=>f<mc||f>bc?NaN:Number(f);function jc(f,C,g,T){return C=hc(C),70}var ui=[null,[],[]],Di=(f,C)=>{var g=ui[f];k(g),C===0||C===10?((f===1?R:O)(An(g)),g.length=0):g.push(C)},eb=()=>{Ga(0),ui[1].length&&Di(1,10),ui[2].length&&Di(2,10)},gc=(f,C,g,T)=>{for(var q=0,Y=0;Y<g;Y++){var X=y0[C>>2],x0=y0[C+4>>2];C+=8;for(var r0=0;r0<x0;r0++)Di(f,gx[X+r0]);q+=x0}return y0[T>>2]=q,0},yc=()=>{if(E){var f=require("crypto");return C=>f.randomFillSync(C)}return C=>(crypto.getRandomValues(C),0)},Ma=f=>(Ma=yc())(f),kc=(f,C)=>Ma(gx.subarray(f,f+C)),wc=(f,C)=>{if(Ar)for(var g=f;g<f+C;g++){var T=Ye(g);T&&Ar.set(T,g)}},Ar,_c=f=>(Ar||(Ar=new WeakMap,wc(0,er.length)),Ar.get(f)||0),pi=[],Sc=()=>{if(pi.length)return pi.pop();try{return er.grow(1)}catch(f){if(!(f instanceof RangeError))throw f;lx("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},bi=(f,C)=>{er.set(f,C),se[f]=er.get(f)},La=f=>{let C=f.length;return k(C<16384),[C%128|128,C>>7,...f]},$c={i:127,p:127,j:126,f:125,d:124,e:111},Ra=f=>La(Array.from(f,C=>{var g=$c[C];return k(g,`invalid signature char: ${C}`),g})),Tc=(f,C)=>{var g=Uint8Array.of(0,97,115,109,1,0,0,0,1,...La([1,96,...Ra(C.slice(1)),...Ra(C[0]==="v"?"":C[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),T=new WebAssembly.Module(g),q=new WebAssembly.Instance(T,{e:{f}}),Y=q.exports.f;return Y},Pc=(f,C)=>{k(typeof f<"u");var g=_c(f);if(g)return g;var T=Sc();try{bi(T,f)}catch(Y){if(!(Y instanceof TypeError))throw Y;k(typeof C<"u","Missing signature argument to addFunction: "+f);var q=Tc(f,C);bi(T,q)}return Ar.set(f,T),T},qc=f=>{Ar.delete(Ye(f)),bi(f,null),pi.push(f)};ft(),wr(),k(V.length===10);{if(n.noExitRuntime&&(Je=n.noExitRuntime),n.print&&(R=n.print),n.printErr&&(O=n.printErr),n.wasmBinary&&(e0=n.wasmBinary),n.FS_createDataFile=nA.createDataFile,n.FS_createPreloadedFile=nA.createPreloadedFile,Mc(),n.arguments&&(D=n.arguments),n.thisProgram&&(m=n.thisProgram),k(typeof n.memoryInitializerPrefixURL>"u","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.pthreadMainPrefixURL>"u","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.cdInitializerPrefixURL>"u","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),k(typeof n.filePackagePrefixURL>"u","Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),k(typeof n.read>"u","Module.read option was removed"),k(typeof n.readAsync>"u","Module.readAsync option was removed (modify readAsync in JS)"),k(typeof n.readBinary>"u","Module.readBinary option was removed (modify readBinary in JS)"),k(typeof n.setWindowTitle>"u","Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)"),k(typeof n.TOTAL_MEMORY>"u","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),k(typeof n.ENVIRONMENT>"u","Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)"),k(typeof n.STACK_SIZE>"u","STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time"),k(typeof n.wasmMemory>"u","Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally"),k(typeof n.INITIAL_MEMORY>"u","Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically"),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();i0("preInit")}n.addFunction=Pc,n.removeFunction=qc;var Nc=["writeI53ToI64","writeI53ToI64Clamped","writeI53ToI64Signaling","writeI53ToU64Clamped","writeI53ToU64Signaling","readI53FromI64","readI53FromU64","convertI32PairToI53","convertI32PairToI53Checked","convertU32PairToI53","stackAlloc","getTempRet0","setTempRet0","zeroMemory","exitJS","withStackSave","strError","inetPton4","inetNtop4","inetPton6","inetNtop6","readSockaddr","writeSockaddr","readEmAsmArgs","jstoi_q","getExecutableName","autoResumeAudioContext","getDynCaller","dynCall","handleException","keepRuntimeAlive","runtimeKeepalivePush","runtimeKeepalivePop","callUserCallback","maybeExit","asyncLoad","asmjsMangle","mmapAlloc","HandleAllocator","getUniqueRunDependency","addRunDependency","removeRunDependency","addOnInit","addOnPostCtor","addOnPreMain","addOnExit","STACK_SIZE","STACK_ALIGN","POINTER_SIZE","ASSERTIONS","ccall","cwrap","intArrayFromString","intArrayToString","stringToAscii","stringToNewUTF8","stringToUTF8OnStack","writeArrayToMemory","registerKeyEventCallback","maybeCStringToJsString","findEventTarget","getBoundingClientRect","fillMouseEventData","registerMouseEventCallback","registerWheelEventCallback","registerUiEventCallback","registerFocusEventCallback","fillDeviceOrientationEventData","registerDeviceOrientationEventCallback","fillDeviceMotionEventData","registerDeviceMotionEventCallback","screenOrientation","fillOrientationChangeEventData","registerOrientationChangeEventCallback","fillFullscreenChangeEventData","registerFullscreenChangeEventCallback","JSEvents_requestFullscreen","JSEvents_resizeCanvasForFullscreen","registerRestoreOldStyle","hideEverythingExceptGivenElement","restoreHiddenElements","setLetterbox","softFullscreenResizeWebGLRenderTarget","doRequestFullscreen","fillPointerlockChangeEventData","registerPointerlockChangeEventCallback","registerPointerlockErrorEventCallback","requestPointerLock","fillVisibilityChangeEventData","registerVisibilityChangeEventCallback","registerTouchEventCallback","fillGamepadEventData","registerGamepadEventCallback","registerBeforeUnloadEventCallback","fillBatteryEventData","registerBatteryEventCallback","setCanvasElementSize","getCanvasElementSize","jsStackTrace","getCallstack","convertPCtoSourceLocation","getEnvStrings","checkWasiClock","wasiRightsToMuslOFlags","wasiOFlagsToMuslOFlags","safeSetTimeout","setImmediateWrapped","safeRequestAnimationFrame","clearImmediateWrapped","registerPostMainLoop","registerPreMainLoop","getPromise","makePromise","idsToPromises","makePromiseCallback","findMatchingCatch","incrementUncaughtExceptionCount","decrementUncaughtExceptionCount","Browser_asyncPrepareDataCounter","isLeapYear","ydayFromDate","arraySum","addDays","getSocketFromFD","getSocketAddress","FS_createPreloadedFile","FS_preloadFile","FS_modeStringToFlags","FS_getMode","FS_fileDataToTypedArray","FS_stdin_getChar","FS_mkdirTree","_setNetworkCallback","heapObjectForWebGLType","toTypedArrayIndex","webgl_enable_ANGLE_instanced_arrays","webgl_enable_OES_vertex_array_object","webgl_enable_WEBGL_draw_buffers","webgl_enable_WEBGL_multi_draw","webgl_enable_EXT_polygon_offset_clamp","webgl_enable_EXT_clip_control","webgl_enable_WEBGL_polygon_mode","emscriptenWebGLGet","computeUnpackAlignedImageSize","colorChannelsInGlTextureFormat","emscriptenWebGLGetTexPixelData","emscriptenWebGLGetUniform","webglGetUniformLocation","webglPrepareUniformLocationsBeforeFirstUse","webglGetLeftBracePos","emscriptenWebGLGetVertexAttrib","__glGetActiveAttribOrUniform","writeGLArray","registerWebGlEventCallback","runAndAbortIfError","ALLOC_NORMAL","ALLOC_STACK","allocate","writeStringToMemory","writeAsciiToMemory","allocateUTF8","allocateUTF8OnStack","demangle","stackTrace","getNativeTypeSize","getFunctionArgsName","createJsInvokerSignature","getEnumValueType","PureVirtualError","registerInheritedInstance","unregisterInheritedInstance","getInheritedInstanceCount","getLiveInheritedInstances","enumReadValueFromPointer","installIndexedIterator","setDelayFunction","count_emval_handles"];Nc.forEach(v0);var Ic=["run","out","err","callMain","abort","wasmExports","writeStackCookie","checkStackCookie","INT53_MAX","INT53_MIN","bigintToI53Checked","HEAP8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","HEAP64","HEAPU64","stackSave","stackRestore","createNamedFunction","ptrToString","getHeapMax","growMemory","ENV","ERRNO_CODES","DNS","Protocols","Sockets","timers","warnOnce","readEmAsmArgsArray","alignMemory","wasmTable","wasmMemory","noExitRuntime","addOnPreRun","addOnPostRun","convertJsFunctionToWasm","freeTableIndexes","functionsInTableMap","getEmptyTableSlot","updateTableMap","getFunctionAddress","setValue","getValue","PATH","PATH_FS","UTF8Decoder","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","AsciiToString","UTF16Decoder","UTF16ToString","stringToUTF16","lengthBytesUTF16","UTF32ToString","stringToUTF32","lengthBytesUTF32","JSEvents","specialHTMLTargets","findCanvasEventTarget","currentFullscreenStrategy","restoreOldWindowedStyle","UNWIND_CACHE","ExitStatus","flush_NO_FILESYSTEM","initRandomFill","randomFill","emSetImmediate","emClearImmediate_deps","emClearImmediate","promiseMap","uncaughtExceptionCount","exceptionCaught","ExceptionInfo","Browser","requestFullscreen","requestFullScreen","setCanvasSize","getUserMedia","createContext","getPreloadedImageData__data","wget","MONTH_DAYS_REGULAR","MONTH_DAYS_LEAP","MONTH_DAYS_REGULAR_CUMULATIVE","MONTH_DAYS_LEAP_CUMULATIVE","SYSCALLS","preloadPlugins","FS_stdin_getChar_buffer","FS_unlink","FS_createPath","FS_createDevice","FS_readFile","FS","FS_root","FS_mounts","FS_devices","FS_streams","FS_nextInode","FS_nameTable","FS_currentPath","FS_initialized","FS_ignorePermissions","FS_filesystems","FS_syncFSRequests","FS_lookupPath","FS_getPath","FS_hashName","FS_hashAddNode","FS_hashRemoveNode","FS_lookupNode","FS_createNode","FS_destroyNode","FS_isRoot","FS_isMountpoint","FS_isFile","FS_isDir","FS_isLink","FS_isChrdev","FS_isBlkdev","FS_isFIFO","FS_isSocket","FS_flagsToPermissionString","FS_nodePermissions","FS_mayLookup","FS_mayCreate","FS_mayDelete","FS_mayOpen","FS_checkOpExists","FS_nextfd","FS_getStreamChecked","FS_getStream","FS_createStream","FS_closeStream","FS_dupStream","FS_doSetAttr","FS_chrdev_stream_ops","FS_major","FS_minor","FS_makedev","FS_registerDevice","FS_getDevice","FS_getMounts","FS_syncfs","FS_mount","FS_unmount","FS_lookup","FS_mknod","FS_statfs","FS_statfsStream","FS_statfsNode","FS_create","FS_mkdir","FS_mkdev","FS_symlink","FS_rename","FS_rmdir","FS_readdir","FS_readlink","FS_stat","FS_fstat","FS_lstat","FS_doChmod","FS_chmod","FS_lchmod","FS_fchmod","FS_doChown","FS_chown","FS_lchown","FS_fchown","FS_doTruncate","FS_truncate","FS_ftruncate","FS_utime","FS_open","FS_close","FS_isClosed","FS_llseek","FS_read","FS_write","FS_mmap","FS_msync","FS_ioctl","FS_writeFile","FS_cwd","FS_chdir","FS_createDefaultDirectories","FS_createDefaultDevices","FS_createSpecialDirectories","FS_createStandardStreams","FS_staticInit","FS_init","FS_quit","FS_findObject","FS_analyzePath","FS_createFile","FS_createDataFile","FS_forceLoadFile","FS_createLazyFile","MEMFS","TTY","PIPEFS","SOCKFS","tempFixedLengthArray","miniTempWebGLFloatBuffers","miniTempWebGLIntBuffers","GL","AL","GLUT","EGL","GLEW","IDBStore","SDL","SDL_gfx","print","printErr","jstoi_s","InternalError","BindingError","throwInternalError","throwBindingError","registeredTypes","awaitingDependencies","typeDependencies","tupleRegistrations","structRegistrations","sharedRegisterType","whenDependentTypesAreResolved","getTypeName","getFunctionName","heap32VectorToArray","requireRegisteredType","usesDestructorStack","checkArgCount","getRequiredArgCount","createJsInvoker","UnboundTypeError","EmValType","EmValOptionalType","throwUnboundTypeError","ensureOverloadTable","exposePublicSymbol","replacePublicSymbol","embindRepr","registeredInstances","getBasestPointer","getInheritedInstance","registeredPointers","registerType","integerReadValueFromPointer","floatReadValueFromPointer","assertIntegerRange","readPointer","runDestructors","craftInvokerFunction","embind__requireFunction","genericPointerToWireType","constNoSmartPtrRawPointerToWireType","nonConstNoSmartPtrRawPointerToWireType","init_RegisteredPointer","RegisteredPointer","RegisteredPointer_fromWireType","runDestructor","releaseClassHandle","finalizationRegistry","detachFinalizer_deps","detachFinalizer","attachFinalizer","makeClassHandle","init_ClassHandle","ClassHandle","throwInstanceAlreadyDeleted","deletionQueue","flushPendingDeletes","delayFunction","RegisteredClass","shallowCopyInternalPointer","downcastPointer","upcastPointer","validateThis","char_0","char_9","makeLegalFunctionName","emval_freelist","emval_handles","emval_symbols","getStringOrSymbol","Emval","emval_returnValue","emval_lookupTypes","emval_methodCallers","emval_addMethodCaller"];Ic.forEach(l0);function Mc(){s0("fetchSettings"),s0("logReadFiles"),s0("loadSplitModule"),s0("onMalloc"),s0("onRealloc"),s0("onFree"),s0("onSbrkGrow")}var Oa=Q("___getTypeName"),mi=Q("_malloc"),ve=Q("_free"),Lc=n._MdnCom_ESCHandler=Q("_MdnCom_ESCHandler"),Rc=n._MdnCom_Free=Q("_MdnCom_Free"),Oc=n._MdnCom_RawRx=Q("_MdnCom_RawRx"),Gc=n._MdnCom_CryptoSelfTest=Q("_MdnCom_CryptoSelfTest"),Uc=n._MdnCom_SetCompanionKeypair=Q("_MdnCom_SetCompanionKeypair"),Hc=n._MdnCom_InitiateEcsHandshake=Q("_MdnCom_InitiateEcsHandshake"),Jc=n._MdnCom_SetSecDebug=Q("_MdnCom_SetSecDebug"),Kc=n._MdnCom_GetEcsState=Q("_MdnCom_GetEcsState"),zc=n._MdnCom_ResetEcs=Q("_MdnCom_ResetEcs"),Vc=n._MdnCom_RegisterEcsHandshakeCallback=Q("_MdnCom_RegisterEcsHandshakeCallback"),Wc=n._MdnCom_Init=Q("_MdnCom_Init"),Xc=n._SendUtoQuery=Q("_SendUtoQuery"),Yc=n._SendUtoCmdExt=Q("_SendUtoCmdExt"),Ga=Q("_fflush"),hi=Q("_emscripten_stack_get_end"),Qc=Q("_emscripten_stack_get_base"),Zc=Q("_strerror"),Ua=Q("_emscripten_stack_init"),xf=Q("_emscripten_stack_get_free"),Af=Q("__emscripten_stack_restore"),ef=Q("__emscripten_stack_alloc"),rf=Q("_emscripten_stack_get_current"),tf=Q("memory"),nf=Q("__indirect_function_table"),tn=Q("wasmMemory"),er=Q("wasmTable");function sf(f){k(typeof f.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof f.malloc<"u","missing Wasm export: malloc"),k(typeof f.free<"u","missing Wasm export: free"),k(typeof f.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof f.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof f.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof f.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof f.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof f.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof f.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof f.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof f.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof f.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof f.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof f.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof f.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof f.fflush<"u","missing Wasm export: fflush"),k(typeof f.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof f.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof f.strerror<"u","missing Wasm export: strerror"),k(typeof f.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof f.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof f._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof f._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof f.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof f.memory<"u","missing Wasm export: memory"),k(typeof f.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),Oa=V0("__getTypeName",1),mi=V0("malloc",1),ve=V0("free",1),Lc=n._MdnCom_ESCHandler=V0("MdnCom_ESCHandler",1),Rc=n._MdnCom_Free=V0("MdnCom_Free",1),Oc=n._MdnCom_RawRx=V0("MdnCom_RawRx",1),Gc=n._MdnCom_CryptoSelfTest=V0("MdnCom_CryptoSelfTest",0),Uc=n._MdnCom_SetCompanionKeypair=V0("MdnCom_SetCompanionKeypair",2),Hc=n._MdnCom_InitiateEcsHandshake=V0("MdnCom_InitiateEcsHandshake",0),Jc=n._MdnCom_SetSecDebug=V0("MdnCom_SetSecDebug",1),Kc=n._MdnCom_GetEcsState=V0("MdnCom_GetEcsState",0),zc=n._MdnCom_ResetEcs=V0("MdnCom_ResetEcs",0),Vc=n._MdnCom_RegisterEcsHandshakeCallback=V0("MdnCom_RegisterEcsHandshakeCallback",1),Wc=n._MdnCom_Init=V0("MdnCom_Init",2),Xc=n._SendUtoQuery=V0("SendUtoQuery",2),Yc=n._SendUtoCmdExt=V0("SendUtoCmdExt",4),Ga=V0("fflush",1),hi=f.emscripten_stack_get_end,Qc=f.emscripten_stack_get_base,Zc=V0("strerror",1),Ua=f.emscripten_stack_init,xf=f.emscripten_stack_get_free,Af=f._emscripten_stack_restore,ef=f._emscripten_stack_alloc,rf=f.emscripten_stack_get_current,tf=tn=f.memory,nf=er=f.__indirect_function_table}var Ha={__cxa_throw:re,_abort_js:st,_embind_finalize_value_object:ze,_embind_register_bigint:at,_embind_register_bool:o,_embind_register_class:Qe,_embind_register_class_constructor:b,_embind_register_class_property:$,_embind_register_emval:M0,_embind_register_float:m0,_embind_register_function:yx,_embind_register_integer:Mx,_embind_register_memory_view:Gx,_embind_register_std_string:Bi,_embind_register_std_wstring:l,_embind_register_value_object:B,_embind_register_value_object_field:p,_embind_register_void:h,_emval_create_invoker:I0,_emval_decref:o0,_emval_get_module_property:h0,_emval_get_property:Cx,_emval_incref:$x,_emval_invoke:zx,_emval_new_cstring:AA,_emval_run_destructors:eA,emscripten_resize_heap:kx,fd_close:pc,fd_seek:jc,fd_write:gc,random_get:kc},Ja;function af(){Ua(),Z()}function of(){af(),Qx();function f(){k(!Ja),Ja=!0,n.calledRun=!0,!I&&(PA(),d0?.(n),n.onRuntimeInitialized?.(),i0("onRuntimeInitialized"),k(!n._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),qA())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),f()},1)):f(),W()}var Sr;Sr=await nt(),of(),q0?i=n:i=new Promise((f,C)=>{d0=f,$0=C});for(let f of Object.keys(n))f in t||Object.defineProperty(t,f,{configurable:!0,get(){lx(`Access to module property ('${f}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),TF={};eB(TF,{API_STAMP_UNBOUNDED:()=>l8,AT_COMMANDS:()=>_x,AT_COMMAND_TIMEOUT_MS:()=>Vx,ApiBadRequestError:()=>S0,ApiForbiddenError:()=>Ln,ApiMethodNotAllowedError:()=>Os,ApiNotFoundError:()=>EA,AtCommandHandler:()=>wd,AtDeviceError:()=>Rs,AtHandlerDisposedError:()=>Hx,BACKFILL_PENDING_HEADER:()=>av,BACKFILL_PENDING_VALUE:()=>ov,BLE_CONFIGURATION:()=>Yd,BLE_SCAN_TIMEOUT_MS:()=>Zd,COMPANION_AUTH_ERROR_I18N_KEYS:()=>$d,COMPANION_CERT_PATH:()=>ns,COMPANION_PRIVATE_KEY_SIZE:()=>UF,COMPANION_PUBLIC_KEY_SIZE:()=>GF,CertApiError:()=>wt,CompanionAuthErrorKind:()=>O8,CompanionAuthManager:()=>Sd,CompanionCertError:()=>L8,DDE_FIELD_UNUSED_INDEX:()=>o8,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>KF,DEFAULT_RECONNECT_OPTIONS:()=>X8,DLO_FILENAME:()=>Jr,DdeMapper:()=>vd,DdeUnknownAliasError:()=>ws,DdeUnknownContainerError:()=>Me,DdeUnknownFieldError:()=>Ms,DdeWriteForbiddenError:()=>$t,DebugLogLevel:()=>i8,DebugMaster:()=>QB,DebugSync:()=>q8,DeviceManager:()=>Wd,DeviceState:()=>W8,FW_FILENAME:()=>hs,LIC_API_BASE_URL:()=>S8,LOCAL_API_LIFECYCLE_FLAGS:()=>Fr,LOCAL_API_SITE_MASK:()=>ds,LOCAL_API_SITE_MASTER_KEYS:()=>Mt,LegacySync:()=>T8,LocalDataManager:()=>J8,MANUFACTURER_CODE:()=>Qd,MS_1999_12_31:()=>is,MemoryStorage:()=>xC,Mutex:()=>gs,OfflineSyncManager:()=>Dd,RAW_TERMINAL_PATTERN:()=>I8,RESPONSE_PATTERNS:()=>K0,Rm2mStateManager:()=>Kd,SYNC_LOGIC_MASK:()=>A8,SyncManager:()=>yd,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>N8,USB_CONFIGURATION:()=>Xd,UplinkMode:()=>r8,UtoCommand:()=>VF,UtoESC:()=>e8,UtoFileFlag:()=>ZF,UtoFileFlagInt:()=>x8,UtoFileType:()=>YF,UtoFlag:()=>QF,UtoMaster:()=>n8,UtoResult:()=>WF,UtoSplitTag:()=>XF,UtoTag:()=>js,WebSocketBridge:()=>Ls,applyBlueprintNames:()=>w8,applyDecpl:()=>SC,assertValidRequestStamps:()=>Wr,base64ToBytes:()=>ts,base64UrlToBytes:()=>SB,buildBlueprintNameMap:()=>Es,bytesToBase64:()=>gn,bytesToBase64Url:()=>ps,checkDeviceCapabilities:()=>Nd,computeDisplayValue:()=>H8,computeDisplayValues:()=>Cs,consoleLogger:()=>ZA,convertToString:()=>ss,crc16Modbus:()=>IB,crc32Ethernet:()=>ms,createDebugBufferState:()=>M8,createLocalApiHandler:()=>oD,createLocalApiSession:()=>Us,createSiteInfoFromDde:()=>CD,dbStampToStamp40:()=>QA,decodeContainer:()=>ls,decodeFloatm16:()=>p8,decodeLifecycleFlags:()=>xv,decodeRm2mStateResponse:()=>V8,decodeUplinkState:()=>K8,deriveDeviceLifecycleMirror:()=>Av,encodeContainer:()=>fs,encodeFloatm16:()=>b8,encodeLifecycleFlags:()=>Js,encodeNulPaddedJson:()=>Q8,encodeSerialNumber:()=>MB,extractBits:()=>_n,formatApiStamp:()=>Kr,generateCompanionKeypair:()=>rs,getDeviceAssignment:()=>$8,isCertValid:()=>bs,isDevicePushableTag:()=>F8,isUnusedField:()=>Ce,isValidStamp:()=>Gs,mapLocalApiError:()=>bv,nullLogger:()=>yn,parseApiStamp:()=>Vr,parseBlueprint:()=>cd,parseDde:()=>yC,parseMetadataResponse:()=>G8,parseNulPaddedJson:()=>It,parseRm2mStateParams:()=>z8,parseSerialNumberFromDataView:()=>LB,parseValuesResponse:()=>U8,requestCompanionCert:()=>zF,resolveAuthErrorKind:()=>Td,resolveBlueprintNameMap:()=>Nt,resolveContainerTag:()=>wn,resolveTagForContainer:()=>yt,resolveTagInModel:()=>rC,routeLocalApiRequest:()=>Dv,spreadBits:()=>f8,stamp40ToDbHex:()=>fA,syncLogic:()=>kn,systemTimeSource:()=>qt,toHex:()=>Ie,toUint8Array:()=>as,utoStack:()=>z0});mv.exports=tB(TF);var PF=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:mn,n:pn,Gx:sF,Gy:aF,a:Ri,d:Oi,h:iB}=PF,kt=32,sB=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},Px=(x="")=>{let A=new Error(x);throw sB(A,Px),A},aB=x=>typeof x=="bigint",oB=x=>typeof x=="string",FB=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,vr=(x,A,e="")=>{let r=FB(x),t=x?.length,i=A!==void 0;if(!r||i&&t!==A){let n=e&&`"${e}" `,F=i?` of length ${A}`:"",v=r?`length=${t}`:`type=${typeof x}`,E=n+"expected Uint8Array"+F+", got "+v;throw r?new RangeError(E):new TypeError(E)}return x},Nn=x=>new Uint8Array(x),us=x=>Uint8Array.from(x),qF=(x,A)=>x.toString(16).padStart(A,"0"),NF=x=>Array.from(vr(x)).map(A=>qF(A,2)).join(""),Be={_0:48,_9:57,A:65,F:70,a:97,f:102},oF=x=>{if(x>=Be._0&&x<=Be._9)return x-Be._0;if(x>=Be.A&&x<=Be.F)return x-(Be.A-10);if(x>=Be.a&&x<=Be.f)return x-(Be.a-10)},IF=x=>{let A="hex invalid";if(!oB(x))return Px(A);let e=x.length,r=e/2;if(e%2)return Px(A);let t=Nn(r);for(let i=0,n=0;i<r;i++,n+=2){let F=oF(x.charCodeAt(n)),v=oF(x.charCodeAt(n+1));if(F===void 0||v===void 0)return Px(A);t[i]=F*16+v}return t},MF=()=>globalThis?.crypto,vB=()=>MF()?.subtle??Px("crypto.subtle must be defined, consider polyfill"),LF=(...x)=>{let A=0;for(let t of x)A+=vr(t).length;let e=Nn(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},lB=(x=kt)=>MF().getRandomValues(Nn(x)),hn=BigInt,nr=(x,A,e,r="bad number: out of range")=>{if(!aB(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},ax=(x,A=mn)=>{let e=x%A;return e>=0n?e:A+e},FF=(1n<<255n)-1n,C0=x=>{x<0n&&Px("negative coordinate");let A=(x>>255n)*19n+(x&FF);return A=(A>>255n)*19n+(A&FF),A%mn},cB=x=>ax(x,pn),fB=(x,A)=>{(x===0n||A<=0n)&&Px("no inverse n="+x+" mod="+A);let e=ax(x,A),r=A,t=0n,i=1n,n=1n,F=0n;for(;e!==0n;){let v=r/e,E=r%e,u=t-n*v,D=i-F*v;r=e,e=E,t=n,i=F,n=u,F=D}return r===1n?ax(t,A):Px("no inverse")},EB=x=>{let A=jB[x];return typeof A!="function"&&Px("hashes."+x+" not set"),A},BB=x=>vr(x,64,"digest"),Gi=x=>x instanceof Pt?x:Px("Point expected"),As=2n**256n,Ds=class ir{constructor(A,e,r,t){A0(this,"X"),A0(this,"Y"),A0(this,"Z"),A0(this,"T");let i=As;this.X=nr(A,0n,i),this.Y=nr(e,0n,i),this.Z=nr(r,1n,i),this.T=nr(t,0n,i),Object.freeze(this)}static CURVE(){return PF}static fromAffine(A){return new ir(A.x,A.y,1n,C0(A.x*A.y))}static fromBytes(A,e=!1){let r=Oi,t=us(vr(A,kt)),i=A[31];t[31]=i&-129;let n=RF(t);nr(n,0n,e?As:mn);let v=C0(n*n),E=ax(v-1n),u=C0(r*v+1n),{isValid:D,value:m}=uB(E,u);D||Px("bad point: y not sqrt");let w=(m&1n)===1n,j=(i&128)!==0;return!e&&m===0n&&j&&Px("bad point: x==0, isLastByteOdd"),j!==w&&(m=ax(-m)),new ir(m,n,1n,C0(m*n))}static fromHex(A,e){return ir.fromBytes(IF(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=Ri,e=Oi,r=this;if(r.is0())return Px("bad point: ZERO");let{X:t,Y:i,Z:n,T:F}=r,v=C0(t*t),E=C0(i*i),u=C0(n*n),D=C0(u*u),m=C0(v*A),w=C0(u*(m+E)),j=ax(D+C0(e*C0(v*E)));if(w!==j)return Px("bad point: equation left != right (1)");let S=C0(t*i),P=C0(n*F);return S!==P?Px("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:i,Y:n,Z:F}=Gi(A),v=C0(e*F),E=C0(i*t),u=C0(r*F),D=C0(n*t);return v===E&&u===D}is0(){return this.equals(ar)}negate(){return new ir(ax(-this.X),this.Y,this.Z,ax(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=Ri,i=C0(A*A),n=C0(e*e),F=C0(2n*r*r),v=C0(t*i),E=ax(A+e),u=ax(C0(E*E)-i-n),D=ax(v+n),m=ax(D-F),w=ax(v-n),j=C0(u*m),S=C0(D*w),P=C0(u*w),N=C0(m*D);return new ir(j,S,N,P)}add(A){let{X:e,Y:r,Z:t,T:i}=this,{X:n,Y:F,Z:v,T:E}=Gi(A),u=Ri,D=Oi,m=C0(e*n),w=C0(r*F),j=C0(C0(i*D)*E),S=C0(t*v),P=ax(C0(ax(e+r)*ax(n+F))-m-w),N=ax(S-j),R=ax(S+j),O=ax(w-C0(u*m)),e0=C0(P*N),I=C0(R*O),k=C0(P*O),L=C0(N*R);return new ir(e0,I,L,k)}subtract(A){return this.add(Gi(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(nr(A,1n,pn),!e&&this.is0()))return ar;if(A===1n)return this;if(this.equals(zr))return _B(A).p;let r=ar,t=zr;for(let i=this;A>0n;i=i.double(),A>>=1n)A&1n?r=r.add(i):e&&(t=t.add(i));return r}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:e,Z:r}=this;if(this.equals(ar))return{x:0n,y:1n};let t=fB(r,mn);C0(r*t)!==1n&&Px("invalid inverse");let i=C0(A*t),n=C0(e*t);return{x:i,y:n}}toBytes(){let{x:A,y:e}=this.toAffine(),r=CB(e);return r[31]|=A&1n?128:0,r}toHex(){return NF(this.toBytes())}clearCofactor(){return this.multiply(hn(iB),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(pn/2n,!1).double();return pn%2n&&(A=A.add(this)),A.is0()}};A0(Ds,"BASE");A0(Ds,"ZERO");var Pt=Ds,zr=new Pt(sF,aF,1n,ax(sF*aF)),ar=new Pt(0n,1n,1n,0n);Pt.BASE=zr;Pt.ZERO=ar;var CB=x=>IF(qF(nr(x,0n,As),64)).reverse(),RF=x=>hn("0x"+NF(us(vr(x)).reverse())),YA=(x,A)=>{let e=x;for(;A-- >0n;)e=C0(e*e);return e},dB=x=>{let A=C0(x*x),e=C0(A*x),r=C0(YA(e,2n)*e),t=C0(YA(r,1n)*x),i=C0(YA(t,5n)*t),n=C0(YA(i,10n)*i),F=C0(YA(n,20n)*n),v=C0(YA(F,40n)*F),E=C0(YA(v,80n)*v),u=C0(YA(E,80n)*v),D=C0(YA(u,10n)*i);return{pow_p_5_8:C0(YA(D,2n)*x),b2:e}},vF=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,uB=(x,A)=>{let e=C0(A*C0(A*A)),r=C0(C0(e*e)*A),t=dB(C0(x*r)).pow_p_5_8,i=C0(x*C0(e*t)),n=C0(A*C0(i*i)),F=i,v=C0(i*vF),E=n===x,u=n===ax(-x),D=n===ax(-x*vF);return E&&(i=F),(u||D)&&(i=v),(ax(i)&1n)===1n&&(i=ax(-i)),{isValid:E||u,value:i}},DB=x=>cB(RF(x)),pB=(...x)=>Promise.resolve(EB("sha512Async")(LF(...x))).then(BB),bB=x=>{let A=us(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=DB(e),i=zr.multiply(t),n=i.toBytes();return{head:e,prefix:r,scalar:t,point:i,pointBytes:n}},mB=x=>pB(vr(x,kt)).then(bB),hB=x=>mB(x).then(A=>A.pointBytes),jB={sha512Async:async x=>{let A=vB(),e=LF(x);return Nn(await A.digest("SHA-512",e.buffer))},sha512:void 0},gB=x=>(x=x===void 0?lB(kt):x,vr(x,kt)),yB=async x=>{let A=gB(x),e=await hB(A);return{secretKey:A,publicKey:e}},jn=8,kB=256,OF=Math.ceil(kB/jn)+1,es=2**(jn-1),wB=()=>{let x=[],A=zr,e=A;for(let r=0;r<OF;r++){e=A,x.push(e);for(let t=1;t<es;t++)e=e.add(A),x.push(e);A=e.double()}return x},lF=void 0,cF=(x,A)=>{let e=A.negate();return x?e:A},_B=x=>{let A=lF||(lF=wB()),e=ar,r=zr,t=2**jn,i=t,n=hn(t-1),F=hn(jn);for(let v=0;v<OF;v++){let E=Number(x&n);x>>=F,E>es&&(E-=i,x+=1n);let u=v*es,D=u,m=u+Math.abs(E)-1,w=v%2!==0,j=E<0;E===0?r=r.add(cF(w,A[D])):e=e.add(cF(j,A[m]))}return x!==0n&&Px("invalid wnaf"),{p:e,f:r}},GF=32,UF=64;async function rs(){let{secretKey:x,publicKey:A}=await yB(),e=new Uint8Array(UF);return e.set(x,0),e.set(A,GF),{publicKey:A,privateKey:e}}function gn(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function ts(x,A="base64 value"){return JF(HF(x,A))}function HF(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function ps(x){return gn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function SB(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return JF(HF(r,A))}function JF(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var wt=class extends Error{constructor(x,A,e){super(e),A0(this,"httpStatus",x),A0(this,"code",A),this.name="CertApiError"}},ns="/api/1/companion/cert",KF=10080*60*1e3,fF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function zF(x,A){let e=x.apiHost.replace(/\/+$/,""),r=fF?ns:e+ns,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};fF&&e&&(t["x-target-host"]=e);let i=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:ps(A.publicKey),subject:A.subject})});if(!i.ok){let F="unknown_error",v=i.statusText||`Cert API request failed (${i.status})`;try{let E=await i.json();E.code&&(F=E.code),E.message&&(v=E.message)}catch{}throw new wt(i.status,F,v)}let n=await i.json();if(!n.certificate||!n.notAfter)throw new wt(i.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function bs(x,A=KF){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var $B=require("events"),TB=rB(nB(),1),Bn="[device-master]",ZA={debug:(x,...A)=>console.debug(Bn,x,...A),info:(x,...A)=>console.info(Bn,x,...A),warn:(x,...A)=>console.warn(Bn,x,...A),error:(x,...A)=>console.error(Bn,x,...A)},yn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},PB=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function ms(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^PB[(e^x[r])&255];return(e^-1)>>>0}var is=Date.UTC(1999,11,31,0,0,0);function ss(x,A,e=" "){let r=""+x,t=Math.max(0,Math.abs(A)-r.length),i=e.repeat(t);return A<0?r+i:i+r}function Ie(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function as(x){if(x instanceof Uint8Array)return x;if(x instanceof ArrayBuffer)return new Uint8Array(x);if(x&&Object.hasOwn(x,"type")&&x.type==="Buffer"&&Object.hasOwn(x,"data")&&x.data instanceof Array)return Uint8Array.from(x.data);if(x.buffer)return new Uint8Array(x.buffer,x.byteOffset,x.byteLength);throw new Error("can not convert value to Uint8Array")}var qB=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),NB=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);function IB(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let i=(r^x[t])&255;r=(e^qB[i])&255,e=NB[i]}return 256*e|r}function MB(x){if(x.length!==16)throw new Error("Serial number hex must be exactly 16 characters long.");let A=new ArrayBuffer(8),e=new DataView(A),r=x.substring(8,16),t=x.substring(0,8),i=parseInt(r,16),n=parseInt(t,16);return e.setUint32(0,i,!0),e.setUint32(4,n,!0),e}function LB(x){let A=("0000000"+x.getUint32(4,!0).toString(16)).slice(-8),e=("0000000"+x.getUint32(0,!0).toString(16)).slice(-8),r=`${A}${e}`.toUpperCase();return r.startsWith("0000")||e.startsWith("0000")?null:r}var RB=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],OB=new Map(RB.map((x,A)=>[x,128+A]));function GB(x){return x<=127||x>=160&&x<=255?x:OB.get(x)??63}var Jr="uto_script.dat",hs="uto_fw.dat",VF=(x=>(x[x.RESULT=0]="RESULT",x[x.QUERY=1]="QUERY",x[x.DELETE=2]="DELETE",x[x.DATA=3]="DATA",x[x.UNS_DATA=4]="UNS_DATA",x[x.LIVE_DATA=5]="LIVE_DATA",x[x.FILE_LIST=7]="FILE_LIST",x[x.FILE_RETR=8]="FILE_RETR",x[x.FILE_STOR=9]="FILE_STOR",x[x.FILE_DELE=10]="FILE_DELE",x[x.SET_VALUE=11]="SET_VALUE",x))(VF||{}),WF=(x=>(x[x.OK=0]="OK",x[x.TAG=1]="TAG",x[x.DLEN=2]="DLEN",x[x.DATA=3]="DATA",x[x.STAMP=4]="STAMP",x[x.EOD=5]="EOD",x[x.COMMAND=6]="COMMAND",x[x.COMMAND_DENIED=7]="COMMAND_DENIED",x[x.FULL=8]="FULL",x[x.NOTSUPPORTED=9]="NOTSUPPORTED",x[x.OLDDATA=10]="OLDDATA",x[x.STORAGE=11]="STORAGE",x[x.BUSY=12]="BUSY",x[x.DISC=256]="DISC",x))(WF||{}),js=(x=>(x[x.DEVINFO=0]="DEVINFO",x[x.STAMPS=1]="STAMPS",x[x.LIC_QUERY=2]="LIC_QUERY",x[x.FILEMAP=3]="FILEMAP",x[x.MNTCFG=4]="MNTCFG",x[x.MDNCFG=5]="MDNCFG",x[x.CONTEXT=128]="CONTEXT",x[x.ALERTS=4294901767]="ALERTS",x[x.HISTDATA0=26368]="HISTDATA0",x[x.LOG=26375]="LOG",x[x.SYSCFG=26378]="SYSCFG",x[x.STATE=26389]="STATE",x[x.LOCALS=26402]="LOCALS",x[x.POS=26404]="POS",x[x.CTRLAMX=26405]="CTRLAMX",x[x.DYNPOS__=26406]="DYNPOS__",x[x.CONFIG0=26416]="CONFIG0",x[x.CONFIG1=26417]="CONFIG1",x[x.CONFIG2=26418]="CONFIG2",x[x.CONFIG3=26419]="CONFIG3",x[x.CONFIG4=26420]="CONFIG4",x[x.CONFIG5=26421]="CONFIG5",x[x.CONFIG6=26422]="CONFIG6",x[x.CONFIG7=26423]="CONFIG7",x[x.CONFIG8=26424]="CONFIG8",x[x.CONFIG9=26425]="CONFIG9",x[x.SYSOTP=26432]="SYSOTP",x[x.SYSFLASH=26433]="SYSFLASH",x[x.APPOTP=26434]="APPOTP",x[x.APPFLASH=26435]="APPFLASH",x[x.APPSTATE=26436]="APPSTATE",x[x.SYSINFO=26437]="SYSINFO",x[x.APPINFO=26438]="APPINFO",x[x.SYSSTATE=26439]="SYSSTATE",x[x.HISTDATA1=26528]="HISTDATA1",x[x.HISTDATA2=26529]="HISTDATA2",x[x.HISTDATA3=26530]="HISTDATA3",x[x.HISTDATA4=26531]="HISTDATA4",x[x.HISTDATA5=26532]="HISTDATA5",x[x.HISTDATA6=26533]="HISTDATA6",x[x.HISTDATA7=26534]="HISTDATA7",x[x.HISTDATA8=26535]="HISTDATA8",x[x.HISTDATA9=26536]="HISTDATA9",x[x.HISTDATA_RAW=26623]="HISTDATA_RAW",x[x.CONFIGA=4294928218]="CONFIGA",x[x.CONFIGB=4294928219]="CONFIGB",x[x.CONFIGC=4294928220]="CONFIGC",x))(js||{}),XF=(x=>(x[x.HISTDATA0=0]="HISTDATA0",x[x.HISTDATA1=1]="HISTDATA1",x[x.HISTDATA2=2]="HISTDATA2",x[x.HISTDATA3=3]="HISTDATA3",x[x.HISTDATA4=4]="HISTDATA4",x[x.HISTDATA5=5]="HISTDATA5",x[x.HISTDATA6=6]="HISTDATA6",x[x.HISTDATA7=7]="HISTDATA7",x[x.HISTDATA8=8]="HISTDATA8",x[x.HISTDATA9=9]="HISTDATA9",x[x.ALERTS=32]="ALERTS",x[x.APPLOG=40]="APPLOG",x))(XF||{}),YF=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(YF||{}),QF=(x=>(x[x.HISTORIC=1]="HISTORIC",x[x.UP=2]="UP",x[x.DOWN=4]="DOWN",x[x.DLEN_VAR=8]="DLEN_VAR",x[x.SET_VALUE=16]="SET_VALUE",x))(QF||{}),ZF=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(ZF||{}),x8=(x=>(x[x.CRC_STAMP=1]="CRC_STAMP",x[x.FORCE_DNLD=2]="FORCE_DNLD",x[x.FORCE_UPLD=4]="FORCE_UPLD",x[x.DEL=8]="DEL",x[x.CREATOR=16]="CREATOR",x[x.SYNCONLYDOWN=33]="SYNCONLYDOWN",x[x.SYNCONLYUP=65]="SYNCONLYUP",x[x.STAMP_ONLY=97]="STAMP_ONLY",x[x.TAKEFROMTPL=128]="TAKEFROMTPL",x[x.EXISTSONDEV=256]="EXISTSONDEV",x))(x8||{}),A8=97;function kn(x){return x&A8}var e8=(x=>(x[x.KEEPALIVE=1]="KEEPALIVE",x[x.NEWDATA=2]="NEWDATA",x[x.DISC=3]="DISC",x[x.LIVE_ON=4]="LIVE_ON",x[x.LIVE_OFF=5]="LIVE_OFF",x[x.NO_GPRS=6]="NO_GPRS",x[x.ZLIB=7]="ZLIB",x[x.WAKEUP=8]="WAKEUP",x[x.SECURITY=9]="SECURITY",x[x.CAP_00=192]="CAP_00",x[x.CAP_01=193]="CAP_01",x[x.CAP_02=194]="CAP_02",x[x.CAP_03=195]="CAP_03",x[x.CAP_04=196]="CAP_04",x[x.CAP_05=197]="CAP_05",x[x.CAP_06=198]="CAP_06",x[x.CAP_07=199]="CAP_07",x[x.CAP_08=200]="CAP_08",x[x.CAP_09=201]="CAP_09",x[x.CAP_0a=202]="CAP_0a",x[x.CAP_0b=203]="CAP_0b",x[x.CAP_0c=204]="CAP_0c",x[x.CAP_0d=205]="CAP_0d",x[x.CAP_0e=206]="CAP_0e",x[x.CAP_0f=207]="CAP_0f",x))(e8||{}),r8=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(r8||{}),EF={config0:26416,config1:26417,config2:26418,config3:26419,config4:26420,config5:26421,config6:26422,config7:26423,config8:26424,config9:26425,histdata0:26368,histdata1:26528,histdata2:26529,histdata3:26530,histdata4:26531,histdata5:26532,histdata6:26533,histdata7:26534,histdata8:26535,histdata9:26536},UB=class{constructor(){}resultToString(x){x|=0;let A=x&256?"+DISC":"";switch(x&255){case 0:return"OK"+A;case 1:return"E_TAG"+A;case 2:return"E_DLEN"+A;case 3:return"E_DATA"+A;case 4:return"E_STAMP"+A;case 5:return"E_EOD"+A;case 6:return"E_CMD"+A;case 7:return"E_CMDDENIED"+A;case 8:return"E_FULL"+A;case 9:return"E_NOTSUPPORTED"+A;case 10:return"E_OLDDATA"+A;case 11:return"E_STORAGE"+A;case 12:return"E_STORAGE"+A}return"E_0x"+Ie(x,4)+A}commandToString(x){switch(x|=0,x){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+Ie(x,2)}tagToString(x){x|=0;let A=Object.entries(js).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+Ie(x,4)}containerIdToTag(x,A){let e=EF[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(EF).find(([,e])=>e===x.wTag);if(A)return A[0];if(x.wTag===26623){if(!x.data||!x.data.byteLength)return null;let e=x.data.getUint8(0);return e===32?"alerts":e>=0&&e<=9?`histdata${e}`:null}return null}formatSerialNumber(x,A="-"){return x?x.substr(0,4)+A+x.substr(4,4)+A+x.substr(8,4)+A+x.substr(12):"(none)"}decodeUplinkState(x){let A={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},e=!!(x&A.WAKEUPABLE),r=[];x&A.POSUPDATE_ACTIVE?r=["locating",!1]:x&A.RETRY?r=["retry",!1]:x&A.STARTED?r=["dialing",!1]:x&A.ACTIVE?r=["active",!1]:x&A.FAILED?r=["failed",e]:x&A.DISABLED?r=["disabled",!1]:r=["offline",e];let t=A.WAKEUPABLE|A.RETRY|A.STARTED|A.ACTIVE|A.POSUPDATE_ACTIVE|A.FAILED|A.DISABLED|A.EXTSIM;return{signal:r[0],wakeupAble:r[1],path:x&A.EXTSIM?"xsim ":"isim ",txStateUnknown:x&~t}}stamp40ToMS(x){let A=Math.trunc(x/256),e=x&255;return Math.round(A*1e3+1e3*e/256)+is}msToStamp40(x){let A=(x-is)/1e3,e=Math.trunc(A),r=Math.round((A-e)*256);return e*256+r}stamp40ToDate(x){return new Date(this.stamp40ToMS(x))}utf8Unpack(x,A,e){let r=new TextDecoder("utf-8"),t=0;for(;t<e&&x.getUint8(A+t);)t++;let i=new Uint8Array(x.buffer,A,t);return r.decode(i)}ansiUnpack(x,A,e,r){try{let t=as(x),i=new TextDecoder(r),n=0;for(;n<e&&t[A+n];)n++;return i.decode(t.slice(A,A+n))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${r}"`}}cp1252Unpack(x,A,e){return this.ansiUnpack(x,A,e,"cp1252")}ansiPack(x,A,e,r){let t=as(x);t.fill(0,A,A+e);for(let i=0;i<e&&i<r.length;i++)t[A+i]=GB(r.charCodeAt(i))}cp1252Pack(x,A,e,r){return this.ansiPack(x,A,e,r)}dataFrameNotNull(x){if(!x.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(0),r=A.getUint16(2),t=A.getUint16(4),i=A.getUint32(6),n=(Ie(i,8)+Ie(x.dwDevSN,8)).toUpperCase(),F=[];for(let v=0;v<(A.byteLength-10)/5;v++){let E=A.getUint8(10+v*5+2),u=A.getUint16(10+v*5);F.push({wTag:u,sTag:this.tagToString(u),size:A.getUint16(10+v*5+3),flags:{historic:!!(E&1),single:!(E&1),up:!!(E&2),down:!!(E&4),variableLength:!!(E&8),setValue:!!(E&16)}})}return{serialNumber:n,class:Ie(e,4),firmwareVersion:`${ss(t>>8,2)}v${ss(t&255,3,"0")}`,flags:Ie(r,4),utos:F}}decode_STAMPS(x){this.dataFrameNotNull(x);let A=x.data,e={contextId:A.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let r=0;r<(A.byteLength-8)/5;r++)e.stamps.push(A.getUint32(8+r*5+0)*256+A.getUint8(8+r*5+4));return e}decode_CONTEXT(x){this.dataFrameNotNull(x);let A=x.data;return{id:A.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(A,8,50)}}encode_CONTEXT(x){let A=new Uint8Array(58),e=new DataView(A.buffer);return e.setBigUint64(0,BigInt("0x"+x.id),!0),this.cp1252Pack(e,8,50,x.name),A}decode_FILEMAP(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(13,!1),r={stamp:A.getUint32(0,!1)*256+A.getUint8(4),size:A.getUint32(5,!1),crc32:A.getUint32(9,!1),flags:{read:!!(e&1),write:!!(e&2),node:!!(e&4),system:!!(e&8),extra:e&-16},_flags:e,name:this.cp1252Unpack(A,15,A.byteLength-15)};if(r.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+r.flags.extra);return r}encode_FILEMAP(x){if(x.flags){let r=0;x.flags.extra&&(r|=x.flags.extra|0),x.flags.read&&(r|=1),x.flags.write&&(r|=2),x.flags.node&&(r|=4),x.flags.system&&(r|=8),x._flags=r}let A=new Uint8Array(15+x.name.length+1),e=new DataView(A.buffer);return e.setUint32(0,Math.trunc(x.stamp/256),!1),e.setUint8(4,x.stamp&255),e.setUint32(5,x.size,!1),e.setUint32(9,x.crc32,!1),e.setUint16(13,x._flags,!1),this.cp1252Pack(e,15,256,x.name),A}decode_RM2M_STATE(x){this.dataFrameNotNull(x);let A=x.data;return{rssi:A.getInt8(0),uplinkMode:A.getUint8(1),imei:this.cp1252Unpack(A,61,15),hardwareId:this.cp1252Unpack(A,96,50),sim:{id:this.cp1252Unpack(A,2,15),apn:this.cp1252Unpack(A,17,40),iccId:this.cp1252Unpack(A,76,20)},network:{mcc:A.getUint16(57),mnc:A.getUint16(59)}}}},z0=new UB,qt={nowMs:()=>Date.now()},gs=class{constructor(x="(unnamed)"){A0(this,"name"),A0(this,"_locked"),A0(this,"_chain"),this.name=x,this._locked=0,this._chain=[]}get islocked(){return!!this._locked}requestLock(){if(++this._locked!==1)return new Promise(x=>{this._chain.push(x)})}unlock(){--this._locked,this._chain.length&&this._chain.shift()()}async runExclusive(x){await this.requestLock();try{return await x()}finally{this.unlock()}}},BF=new WeakMap;function t8(x,A){let r=(BF.get(x)??Promise.resolve()).then(()=>HB(x,A));return BF.set(x,r.catch(()=>{})),r}async function HB(x,A){x.interface&&x.interface==="ble"?await JB(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function JB(x,A,e=23){let r=new Uint8Array(A),t=e-3;for(let i=0;i<r.byteLength;i+=t){let n=r.slice(i,i+t);await x(n.buffer)}}var CF=15e3,KB=500,zB=3,VB=1024;function dF(x){return x?.utos.find(e=>e.wTag===3)?.size||VB}var n8=class bn extends $B.EventEmitter{constructor(A,e,r=qt){super(),A0(this,"mdnComInterface"),A0(this,"receiveUto"),A0(this,"sendUto"),A0(this,"rxUto"),A0(this,"txStream"),A0(this,"SendUtoCmdExt"),A0(this,"utoPortLock"),A0(this,"transport"),A0(this,"logger"),A0(this,"ecsHandshakeResolver",null),A0(this,"disposeTransportListener",null),A0(this,"encrypted",!1),A0(this,"lastTxWrite",Promise.resolve()),A0(this,"timeSource"),A0(this,"fileChunkSize",dF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new gs("UTO-Port"),this.transport=A,this.logger=e??ZA,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,TB.default)({print:i=>{this.logger.info(`[mdnCom] ${i}`),this.emit("mdnCom",i)},printErr:i=>{this.logger.error(`[mdnCom] ${i}`),this.emit("mdnComError",i)}});let A=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let e=this.mdnComInterface.addFunction(()=>{if(this.txStream){let i=this.txStream();this.lastTxWrite=t8(this.transport,i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let i=this.rxUto(),n=this.parseUtoFrame(i);this.emit("utoFrame",n)}},"v");await A(e,r);let t=this.mdnComInterface.addFunction(i=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${i} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let n=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,n({success:i===0,resultCode:i})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async i=>{this.receiveUto&&await this.receiveUto(new Uint8Array(i))}),await this.requestDeviceInfo().catch()}async dispose(A){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!A){let e=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(e.message),e}try{this.logger.info("[dispose] requesting context for encrypted close");let e=await this.requestContext();e?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(e)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(e){this.logger.error(`[dispose] error during context round trip: ${e}`)}try{this.logger.info("[dispose] sending connection close"),await A.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(e){this.logger.error(`[dispose] error sending connection close: ${e}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(e){this.logger.error(`[dispose] error resetting WASM ECS state: ${e}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(A){return{dwDevSN:A.vDevID_u32,bCmd:A.vCmd_u8,stamp:A.vStamp_s.u32SysTime*256+A.vStamp_s.u8SysTime,wTag:A.vTag_u16&255,wTagFull:A.vTag_u16,sTag:z0.resultToString(A.vTag_u16),_dbg:A.vDevID_u32.toString(16),bVersion:1,_dlen:A.vDLen_u16,bRes:A.vRes_u8,bSeq:A.vSeq_u8,data:A.vData_pu8.length?new DataView(A.vData_pu8.buffer,A.vData_pu8.byteOffset,A.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(A,e=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let r=Math.trunc(e/256),t=e&255;return await this.sendWithRetry((i,n,F)=>{if(i.bCmd===0){let v=this.resultVerdict(i);v===5||v===0||v===4?n(null):F(i);return}if(i.wTagFull!==A)return F(i);n(i)},async()=>{this.sendUto(A,{u32SysTime:r,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${A.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}static resultCode(A){return{verdict:A.wTagFull&-257,disc:(A.wTagFull&256)!==0}}resultVerdict(A){let{verdict:e,disc:r}=bn.resultCode(A);return r&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${A.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",A.wTagFull)),e}static concatChunks(A){let e=A.reduce((i,n)=>i+n.length,0),r=new Uint8Array(e),t=0;for(let i of A)r.set(i,t),t+=i.length;return r}sendWithRetry(A,e,r){let t=r?.timeoutMs??KB,i=r?.maxRetries??zB;return new Promise((n,F)=>{let v=0,E=!1,u=()=>{},D,m={resolve:j=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),n(j)},reject:j=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),F(j)}},w=async()=>{u=j=>A(j,m.resolve,m.reject),this.once("utoFrame",u);try{await e()}catch(j){if(E)return;this.removeListener("utoFrame",u),F(j);return}E||(D=setTimeout(()=>{if(this.removeListener("utoFrame",u),v>=i){F(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${i} retries`));return}v++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${v}/${i})`),w()},t))};w()})}createFrameIdleGuard(A,e,r){let t,i=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{i(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),r()},e)},clear:i}}async requestHistoricUtos(A,e,r,t=CF,i=0,n){return await this.utoPortLock.requestLock(),new Promise((F,v)=>{if(!this.sendUto)return F([]);let E=[],u=0,D=Promise.resolve(),m=P=>{if(w.arm(),P.bCmd===0){w.clear(),this.settleHistoricTransfer(P,E,n,D,F,v);return}if(P.wTagFull===A&&P.data&&(E.push({stamp40:P.stamp,data:this.copyDataView(P.data)}),r?.(++u),n&&i>0&&E.length>=i)){let N=E.splice(0);D=D.then(()=>n(N))}this.once("utoFrame",m)},w=this.createFrameIdleGuard(m,t,()=>v(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${u} records received)`)));this.once("utoFrame",m),w.arm();let j=Math.trunc(e/256),S=e&255;this.sendUto(A,{u32SysTime:j,u8SysTime:S})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,e,r,t,i,n){let F=this.resultVerdict(A);if(!(F===5||F===0||F===4)){t.then(()=>n(A)).catch(n);return}let E=r&&e.length>0?e.splice(0):null;(E?t.then(()=>r(E)):t).then(()=>i(r?[]:e)).catch(n)}async requestFile(A,e,r=CF){return await this.utoPortLock.requestLock(),new Promise((t,i)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let n=[],F=0,v=D=>{if(E.arm(),D.bCmd===0){E.clear();let m=this.resultVerdict(D);m===5||m===0?t(bn.concatChunks(n)):i(D);return}if(D.bCmd===3&&D.data){let m=this.copyDataView(D.data);n.push(m),F+=m.byteLength,e?.(F)}this.once("utoFrame",v)},E=this.createFrameIdleGuard(v,r,()=>i(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${A}", ${F} bytes received)`)));this.once("utoFrame",v),E.arm();let u=new Uint8Array(A.length+1);for(let D=0;D<A.length;D++)u[D]=A.charCodeAt(D)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},u)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(A){let e=new Uint8Array(A.length+1);for(let r=0;r<A.length;r++)e[r]=A.charCodeAt(r)&255;await this.sendUTOCmdExt(10,3,e,0)}async sendSetValue(A,e,r){this.isInitialized();let t=new Uint8Array(e.length);z0.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,A,t,r),{outcome:"ok",resultCode:0}}catch(i){let n=i;if(n&&n.bCmd===0&&typeof n.wTagFull=="number"){let{verdict:F}=bn.resultCode(n),v=n.wTagFull;return F===4?{outcome:"stamp",resultCode:v}:F===7||F===9?{outcome:"denied",resultCode:v}:{outcome:"error",resultCode:v}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${i}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),e=A?z0.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=dF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?z0.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,z0.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},i=n=>this.handleFileListFrame(n,t,A,e,r,i);this.once("utoFrame",i),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,e,r,t,i,n){if(A.bCmd===0){let F=this.resultVerdict(A);F===5||F===0?t(r?e[r]?{[r]:e[r]}:{}:e):i(A);return}try{let F=z0.decode_FILEMAP(A);e[F.name]=F}catch(F){i(F);return}this.once("utoFrame",n)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?z0.decode_STAMPS(A):null}async sendFile(A,e,r,t){let i=e;A===2&&(i=new Uint8Array(e.length+1),i.set(new Uint8Array(e),1),i[0]=A);let n={name:t??Jr,stamp:r===0?0:z0.msToStamp40(r??this.timeSource.nowMs()),size:i.length,_flags:11,crc32:ms(i)},F=z0.encode_FILEMAP(n);if(!await this.sendUTOCmdExt(9,3,F,0)){let E=this.fileChunkSize;for(let u=0;u<i.length;u+=E){let D=Math.min(E,i.byteLength-u),m=new Uint8Array(i.buffer,i.byteOffset+u,D);await this.sendUTOCmdExt(3,3,m,u*256);let j=(u+D)/i.byteLength*100;this.emit("installing",j.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,e,r,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let i=t??this.utoStampNow40,n=Math.trunc(i/256),F=i&255;return await this.sendWithRetry((v,E,u)=>{if(v.bCmd!==0){u(v);return}this.resultVerdict(v)===0?E(null):u(v)},async()=>{this.SendUtoCmdExt(A,e,{u32SysTime:n,u8SysTime:F},r),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${A} tag=0x${e.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(A,e,r){return this.sendUTOCmdExt(3,A,e,r)}packOtpFlashString(A){let e=new Uint8Array(1024);return z0.cp1252Pack(e,0,1024,A),e}async writeAppOtp(A){await this.sendUTOData(26434,this.packOtpFlashString(A))}async writeAppFlash(A){await this.sendUTOData(26435,this.packOtpFlashString(A))}async writeSysOtp(A){await this.sendUTOData(26432,this.packOtpFlashString(A))}async writeSysFlash(A){await this.sendUTOData(26433,this.packOtpFlashString(A))}async initiateEcsHandshake(A){if(this.isInitialized(),A.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${A.companionPublicKey.length}`);if(A.companionPrivateKey.length!==32&&A.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${A.companionPrivateKey.length}`);let e=A.companionPublicKey.slice(0,32),r=A.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${e.length} seed.len=${r.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(e,r);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((i,n)=>{if(A.signal?.aborted){n(new Error("Operation aborted"));return}let F=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),n(new Error("Operation aborted")))};A.signal?.addEventListener("abort",F,{once:!0}),this.ecsHandshakeResolver=E=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(E)}`),A.signal?.removeEventListener("abort",F),E.success&&(this.encrypted=!0),i(E)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let v=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${v} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),v<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",F),i({success:!1,resultCode:v})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},WB=require("events"),i8=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(i8||{}),XB=5e3,YB=5e3,QB=class extends WB.EventEmitter{constructor(x,A){super(),A0(this,"atHandler"),A0(this,"debugCache",null),A0(this,"logger"),A0(this,"dataHandler"),this.atHandler=x,this.logger=A??ZA,this.dataHandler=e=>{this.processIncomingDebugData(e)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(x){let A=this.initDebugCache();this.processDebugChunk(A,x)}async sendDebugCommand(x){await this.atHandler.sendRaw(x)}formatConsoleLine(x){if(!x.length)return;let A=x;x[0]===""&&(A=x.substring(1));try{let[e,r,,t]=A.split(" "),i={sequenceId:e?.substring(1),lineNumber:Number.isNaN(r)?void 0:Number(r),message:"",level:3},n=`${t.substring(1)}`,F=t.substring(0,1);"$!?~$".includes(F)&&(i.level=this.logLevelFromPrefix(F)),i.message=n,this.emitMessageEvent(i)}catch{this.emitMessageEvent({level:2,message:A})}}logLevelFromPrefix(x){switch(x){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(x){this.emit("message",x)}processDebugChunk({f00:x,f00Start:A,f01LastSee:e,f11:r},t){for(let i of t){i==="\xFF"&&(i="%");let n=String.fromCharCode(...r.map(F=>F.tag));if(i===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:1,buf:i,start:Date.now()})}else if(i===""){switch(n){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let F=r.pop().buf+i;F==="****^reset****"?e=0:this.process_x01(F,e)}else if(i===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:16,buf:i,start:Date.now()})}else if(r.length){let F=r[r.length-1];if(F.tag===16&&i==="\r")continue;F.buf+=i,F.tag===16&&i===`
2193
+ `&&r.pop()}else{if(x||(A=Date.now()),i==="\r"||(x+=i,!(Date.now()>A+YB||i===`
2194
2194
  `)))continue;x.slice(0,-1).split(`
2195
- `).forEach(v=>{this.onConsole(v)}),x=""}for(let F=r.length-1;F>=0;F--)Date.now()>r[F].start+VB&&r.splice(F,1)}}isHex(x){return/^[a-fA-F0-9]*$/.test(x)}onConsole(x){if(!(x[0]===""&&x[1]==="#"&&x.length<10)){if(x[0]===""&&x[1]==="."&&x.length<10050){let[A,e]=x.substr(2).split("=");if(A.length>1&&A.length<50){["~~","~h","~g","~i","~r","~s"].includes(A)||(this.emit("#watch",{key:A,value:e,date:new Date}),this.logger.debug(`#watch ${A} = ${e}`));return}}this.formatConsoleLine(x)}}process_x01(x,A){if(x.length<11)return;let e=x.substr(1,4);if(!this.isHex(e))return;let r=x.substr(-5,4);if(!this.isHex(r))return;let t=parseInt(e,16),s=parseInt(r,16),n=65535&(A<0?0:t-A),F=65535&s-t-x.length;if(n&&this.onConsole(`?console - x01 ${n} characters lost`),A=s,F){this.onConsole(`?console - x01 ${F} characters lost (dropped "${x}")`);return}this.onConsole(x[0]+x.slice(5,-5))}dispose(){this.atHandler.off("data",this.dataHandler),this.removeAllListeners()}};function YA(x){return parseInt(x.slice(6),16)}function cA(x){return"400000"+x.toString(16).toUpperCase().padStart(10,"0")}function t8(x){return x?new Uint8Array(x):null}function Bn(x){return{...x,data:t8(x.data)}}function Gs(x){return{...x,data:t8(x.data)}}var YB=/^400000[0-9A-F]{10}$/;function BF(x,A){if(!YB.test(A))throw new Error(`MemoryStorage: uto_data row for tag ${x} has non-canonical stamp "${A}"; expected 16-char uppercase hex output of stamp40ToDbHex ("400000" + 10 hex digits)`)}var QB=class n8{constructor(){A0(this,"metadata",new Map),A0(this,"utoData",new Map),A0(this,"changeRequests",[]),A0(this,"files",new Map)}async getMetadataValue(A){return this.metadata.get(A)??null}async setMetadataValue(A,e){this.metadata.set(A,e)}async deleteMetadataValue(A){this.metadata.delete(A)}async getUtoDataTags(){return[...this.utoData.keys()]}async getLatestStampForTag(A){let e=this.utoData.get(A);return!e||e.size===0?null:[...e.keys()].sort().at(-1)}async getRowForTag(A){let e=await this.getLatestStampForTag(A);return e===null?null:Bn(this.utoData.get(A).get(e))}async replaceUtoRow(A){BF(A.tag,A.stamp),this.utoData.set(A.tag,new Map([[A.stamp,Bn(A)]]))}async insertHistoricRows(A){for(let e of A){BF(e.tag,e.stamp);let r=this.utoData.get(e.tag);r||(r=new Map,this.utoData.set(e.tag,r)),r.has(e.stamp)||r.set(e.stamp,Bn(e))}}async getHistoricRows(A,e){let r=this.utoData.get(A);if(!r)return[];let t=[...r.values()];if(e.fromStamp!==void 0){let n=e.fromStamp;t=t.filter(F=>F.stamp>=n)}if(e.untilStamp!==void 0){let n=e.untilStamp;t=t.filter(F=>F.stamp<=n)}t.sort((n,F)=>e.order==="desc"?F.stamp.localeCompare(n.stamp):n.stamp.localeCompare(F.stamp));let s=e.offset??0;return t.slice(s,s+e.limit).map(Bn)}async getUtoChangeRequests(){return[...this.changeRequests].sort((A,e)=>A.tag-e.tag||A.stamp.localeCompare(e.stamp)).map(A=>({...A}))}async insertUtoChangeRequests(A){for(let e of A)this.changeRequests.push({tag:e.tag,stamp:cA(e.stamp40),user:e.user??"",json:e.json})}async clearUtoChangeRequests(){this.changeRequests=[]}async getFiles(){return[...this.files.values()].map(Gs)}async getFile(A){let e=this.files.get(A);return e?Gs(e):null}async upsertFile(A){this.files.set(A.filename,Gs(A))}async deleteFile(A){this.files.delete(A)}toJSON(){let A=[];for(let e of this.utoData.values())for(let r of e.values())A.push({tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?jn(r.data):null});return{metadata:Object.fromEntries(this.metadata),utoData:A,changeRequests:this.changeRequests.map(e=>({...e})),files:[...this.files.values()].map(e=>({filename:e.filename,stamp:e.stamp,crc:e.crc,size:e.size,flags:e.flags,flags_int:e.flags_int,data:e.data?jn(e.data):null}))}}static fromJSON(A){let e=new n8;for(let[r,t]of Object.entries(A.metadata??{}))e.metadata.set(r,t);for(let r of A.utoData??[]){let t=e.utoData.get(r.tag);t||(t=new Map,e.utoData.set(r.tag,t)),t.set(r.stamp,{tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?ri(r.data,`uto_data.data of tag ${r.tag}`):null})}e.changeRequests=(A.changeRequests??[]).map(r=>({...r}));for(let r of A.files??[])e.files.set(r.filename,{filename:r.filename,stamp:r.stamp,crc:r.crc,size:r.size,flags:r.flags,flags_int:r.flags_int,data:r.data?ri(r.data,`files.data of "${r.filename}"`):null});return e}},ZB=new Set(["link","unknown"]);function _t(x){return ZB.has(x)}var s8=-2;function Be(x){return x.index===s8}var xC=65535,CF={configa:4294928218,configb:4294928219,configc:4294928220};function gi(x){let A=x.toLowerCase();if(A==="histdata"||A==="histdata0")return"histdata0";let e=/^rm2mconfig([0-9a-c])$/.exec(A);return e?`config${e[1]}`:x}function kn(x){let A=gi(x.trim()).toLowerCase();return Object.prototype.hasOwnProperty.call(CF,A)?CF[A]:z0.containerIdToTag(A,!1)}function yt(x){return kn(x.name)}function AC(x,A){let e=x.byNameOrAlias(A);return kn(e?e.name:A)}function i8(x){return Number.isInteger(x)&&x>=0&&x<=xC}var eC={u8:"u8",s8:"s8",u16:"u16",s16:"s16",u32:"u32",s32:"s32",s64:"s64",f32:"f32",f64:"f64",floatm16:"floatm16",stamp4:"stamp4",stamp:"stamp",stamp8:"stamp8",datetime:"datetime",ufm8:"ufm8",link:"link",string:"string",float:"f32",float32:"f32",float64:"f64",char:"string",bint:"s8",wint:"s16",dint:"s32",qint:"s64",byte:"u8",word:"u16",dword:"u32",time_span:"s64"};function rC(x){return x===void 0?"unknown":eC[x.toLowerCase()]??"unknown"}var tC={u8:1,s8:1,u16:2,s16:2,floatm16:2,u32:4,s32:4,f32:4,stamp4:4,stamp:5,stamp8:8,datetime:8,ufm8:1,link:0,unknown:0,s64:8,f64:8},nC=new Set(["name","alias","title","index","byteofs","type","max","decpl","vscale","vofs","units","editmask","view","edit","default","bitmask"]),yi="name",sC="type";function iC(x){let A=x.indexOf("=");return{key:x.slice(0,A).trim().toLowerCase(),value:x.slice(A+1).trim()}}function aC(x){return/^config[0-9]$/.test(x)||/^config[A-C]$/i.test(x)?"config":/^histdata[0-9]$/.test(x)?"histdata":"other"}function sr(x,A){let e=x.get(A);if(e===void 0)return;let r=parseInt(e,10);return Number.isNaN(r)?void 0:r}function oC(x){let A=x.get("bitmask");if(A===void 0)return;let e=A.startsWith("$")?A.slice(1):A,r=parseInt(e,16);return Number.isNaN(r)?void 0:r}var FC=/^(.*?)%(config[0-9a-fA-F])%(.+)$/;function a8(x){let A=FC.exec(x);if(!A)return{};let e=A[1],r=e===""?NaN:Number(e);return{ref:{container:A[2],field:A[3]},prefixValue:Number.isFinite(r)?r:void 0}}function vC(x){let A=x.get("vscale");if(A===void 0)return{value:1};let e=a8(A);if(e.ref)return{value:e.prefixValue??1,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:1}}function lC(x){let A=x.get("vofs");if(A===void 0)return{value:0};let e=a8(A);if(e.ref)return{value:e.prefixValue??0,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:0}}function cC(x,A){return x==="string"?A??0:tC[x]}function fC(x){let A={};for(let[e,r]of x)nC.has(e)||(A[e]=r);return A}function EC(x,A,e){let r=rC(x.get(sC)),t=sr(x,"max"),s=cC(r,t),n=A.fields[A.fields.length-1],v=sr(x,"byteofs")??(n?n.byteofs+n.size:A.kind==="histdata"?1:0),E=A.fields.length,u=x.get(yi)??(A.kind==="histdata"?`ch${E}`:`field${E}`),p=vC(x),m=lC(x),w=sr(x,"index");return{name:u,alias:x.get("alias"),title:x.get("title"),index:w,sortIndex:w??e,byteofs:v,type:r,size:s,max:t,decpl:sr(x,"decpl"),vscale:p.value,vofs:m.value,vscaleRef:p.ref,vofsRef:m.ref,units:x.get("units"),editmask:x.get("editmask"),view:sr(x,"view"),edit:sr(x,"edit"),default:x.get("default"),bitmask:oC(x),attrs:fC(x)}}function BC(){return{name:"",kind:"other",fields:[],recordSize:0}}function CC(x,A,e){switch(A){case yi:{let r=gi(e);x.name=r,x.kind=aC(r);break}case"alias":x.alias=e;break;case"title":x.title=e;break;case"upload":x.upload=parseInt(e,10);break;case"download":x.download=parseInt(e,10);break;case"edit":x.edit=parseInt(e,10);break;default:break}}function dC(x){if(!x.name)throw new Error("?dde.table-without-name");x.recordSize=x.fields.filter(A=>!_t(A.type)).reduce((A,e)=>Math.max(A,e.byteofs+e.size),0),x.fields.sort((A,e)=>A.sortIndex-e.sortIndex)}function uC(x){if(x==="*")return{keyBytes:[],matchAll:!0};let A=x.slice(0,2).toLowerCase()==="0x"?x.slice(2):x;A.length%2!==0&&(A=`0${A}`);let e=[];for(let r=0;r<A.length;r+=2){let t=parseInt(A.slice(r,r+2),16);e.push(Number.isNaN(t)?0:t)}return{keyBytes:e,matchAll:!1}}function DC(x){return x.toLowerCase()==="histdata28"?"applog0":gi(x)}function pC(x){let{keyBytes:A,matchAll:e}=uC(x.get("key")??"00");return{source:x.get("source")??"",target:DC(x.get("target")??""),key:A[0]??0,keyBytes:A,matchAll:e,keepraw:sr(x,"keepraw")}}function bC(x,A){return{containers:x,splits:A,byNameOrAlias(e){let r=e.toLowerCase();return x.find(t=>t.name.toLowerCase()===r||(t.alias??"").toLowerCase()===r)??null}}}function mC(x,A){switch(A){case"<table>":return x.container=BC(),x.expectName=!0,!0;case"</table>":return x.container&&(dC(x.container),x.containers.push(x.container)),x.container=null,!0;case"<field>":return x.field=new Map,!0;case"</field>":return x.container&&x.field&&x.container.fields.push(EC(x.field,x.container,x.line)),x.field=null,!0;case"<split>":return x.split=new Map,!0;case"</split>":return x.split&&x.splits.push(pC(x.split)),x.split=null,!0;default:return!1}}function hC(x,A){let{key:e,value:r}=iC(A);if(x.split)x.split.set(e,r);else if(x.field)x.field.set(e,r);else if(x.container){if(x.expectName&&e!==yi)throw new Error(`?dde.first-table-attr-not-name."${e}"`);x.expectName=!1,CC(x.container,e,r)}}function jC(x){let A={containers:[],splits:[],container:null,field:null,split:null,expectName:!1,line:0};for(let[e,r]of x.replace(/\r\n/g,`
2195
+ `).forEach(v=>{this.onConsole(v)}),x=""}for(let F=r.length-1;F>=0;F--)Date.now()>r[F].start+XB&&r.splice(F,1)}}isHex(x){return/^[a-fA-F0-9]*$/.test(x)}onConsole(x){if(!(x[0]===""&&x[1]==="#"&&x.length<10)){if(x[0]===""&&x[1]==="."&&x.length<10050){let[A,e]=x.substr(2).split("=");if(A.length>1&&A.length<50){["~~","~h","~g","~i","~r","~s"].includes(A)||(this.emit("#watch",{key:A,value:e,date:new Date}),this.logger.debug(`#watch ${A} = ${e}`));return}}this.formatConsoleLine(x)}}process_x01(x,A){if(x.length<11)return;let e=x.substr(1,4);if(!this.isHex(e))return;let r=x.substr(-5,4);if(!this.isHex(r))return;let t=parseInt(e,16),i=parseInt(r,16),n=65535&(A<0?0:t-A),F=65535&i-t-x.length;if(n&&this.onConsole(`?console - x01 ${n} characters lost`),A=i,F){this.onConsole(`?console - x01 ${F} characters lost (dropped "${x}")`);return}this.onConsole(x[0]+x.slice(5,-5))}dispose(){this.atHandler.off("data",this.dataHandler),this.removeAllListeners()}};function QA(x){return parseInt(x.slice(6),16)}function fA(x){return"400000"+x.toString(16).toUpperCase().padStart(10,"0")}function s8(x){return x?new Uint8Array(x):null}function Cn(x){return{...x,data:s8(x.data)}}function Ui(x){return{...x,data:s8(x.data)}}var ZB=/^400000[0-9A-F]{10}$/;function uF(x,A){if(!ZB.test(A))throw new Error(`MemoryStorage: uto_data row for tag ${x} has non-canonical stamp "${A}"; expected 16-char uppercase hex output of stamp40ToDbHex ("400000" + 10 hex digits)`)}var xC=class a8{constructor(){A0(this,"metadata",new Map),A0(this,"utoData",new Map),A0(this,"changeRequests",[]),A0(this,"files",new Map)}async getMetadataValue(A){return this.metadata.get(A)??null}async setMetadataValue(A,e){this.metadata.set(A,e)}async deleteMetadataValue(A){this.metadata.delete(A)}async getUtoDataTags(){return[...this.utoData.keys()]}async getLatestStampForTag(A){let e=this.utoData.get(A);return!e||e.size===0?null:[...e.keys()].sort().at(-1)}async getRowForTag(A){let e=await this.getLatestStampForTag(A);return e===null?null:Cn(this.utoData.get(A).get(e))}async replaceUtoRow(A){uF(A.tag,A.stamp),this.utoData.set(A.tag,new Map([[A.stamp,Cn(A)]]))}async insertHistoricRows(A){for(let e of A){uF(e.tag,e.stamp);let r=this.utoData.get(e.tag);r||(r=new Map,this.utoData.set(e.tag,r)),r.has(e.stamp)||r.set(e.stamp,Cn(e))}}async getHistoricRows(A,e){let r=this.utoData.get(A);if(!r)return[];let t=[...r.values()];if(e.fromStamp!==void 0){let n=e.fromStamp;t=t.filter(F=>F.stamp>=n)}if(e.untilStamp!==void 0){let n=e.untilStamp;t=t.filter(F=>F.stamp<=n)}t.sort((n,F)=>e.order==="desc"?F.stamp.localeCompare(n.stamp):n.stamp.localeCompare(F.stamp));let i=e.offset??0;return t.slice(i,i+e.limit).map(Cn)}async getUtoChangeRequests(){return[...this.changeRequests].sort((A,e)=>A.tag-e.tag||A.stamp.localeCompare(e.stamp)).map(A=>({...A}))}async insertUtoChangeRequests(A){for(let e of A)this.changeRequests.push({tag:e.tag,stamp:fA(e.stamp40),user:e.user??"",json:e.json})}async clearUtoChangeRequests(){this.changeRequests=[]}async getFiles(){return[...this.files.values()].map(Ui)}async getFile(A){let e=this.files.get(A);return e?Ui(e):null}async upsertFile(A){this.files.set(A.filename,Ui(A))}async deleteFile(A){this.files.delete(A)}toJSON(){let A=[];for(let e of this.utoData.values())for(let r of e.values())A.push({tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?gn(r.data):null});return{metadata:Object.fromEntries(this.metadata),utoData:A,changeRequests:this.changeRequests.map(e=>({...e})),files:[...this.files.values()].map(e=>({filename:e.filename,stamp:e.stamp,crc:e.crc,size:e.size,flags:e.flags,flags_int:e.flags_int,data:e.data?gn(e.data):null}))}}static fromJSON(A){let e=new a8;for(let[r,t]of Object.entries(A.metadata??{}))e.metadata.set(r,t);for(let r of A.utoData??[]){let t=e.utoData.get(r.tag);t||(t=new Map,e.utoData.set(r.tag,t)),t.set(r.stamp,{tag:r.tag,stamp:r.stamp,flags:r.flags,site_related:r.site_related,data:r.data?ts(r.data,`uto_data.data of tag ${r.tag}`):null})}e.changeRequests=(A.changeRequests??[]).map(r=>({...r}));for(let r of A.files??[])e.files.set(r.filename,{filename:r.filename,stamp:r.stamp,crc:r.crc,size:r.size,flags:r.flags,flags_int:r.flags_int,data:r.data?ts(r.data,`files.data of "${r.filename}"`):null});return e}},AC=new Set(["link","unknown"]);function _t(x){return AC.has(x)}var o8=-2;function Ce(x){return x.index===o8}var eC=65535,DF={configa:4294928218,configb:4294928219,configc:4294928220};function ys(x){let A=x.toLowerCase();if(A==="histdata"||A==="histdata0")return"histdata0";let e=/^rm2mconfig([0-9a-c])$/.exec(A);return e?`config${e[1]}`:x}function wn(x){let A=ys(x.trim()).toLowerCase();return Object.prototype.hasOwnProperty.call(DF,A)?DF[A]:z0.containerIdToTag(A,!1)}function yt(x){return wn(x.name)}function rC(x,A){let e=x.byNameOrAlias(A);return wn(e?e.name:A)}function F8(x){return Number.isInteger(x)&&x>=0&&x<=eC}var tC={u8:"u8",s8:"s8",u16:"u16",s16:"s16",u32:"u32",s32:"s32",s64:"s64",f32:"f32",f64:"f64",floatm16:"floatm16",stamp4:"stamp4",stamp:"stamp",stamp8:"stamp8",datetime:"datetime",ufm8:"ufm8",link:"link",string:"string",float:"f32",float32:"f32",float64:"f64",char:"string",bint:"s8",wint:"s16",dint:"s32",qint:"s64",byte:"u8",word:"u16",dword:"u32",time_span:"s64"};function nC(x){return x===void 0?"unknown":tC[x.toLowerCase()]??"unknown"}var iC={u8:1,s8:1,u16:2,s16:2,floatm16:2,u32:4,s32:4,f32:4,stamp4:4,stamp:5,stamp8:8,datetime:8,ufm8:1,link:0,unknown:0,s64:8,f64:8},sC=new Set(["name","alias","title","index","byteofs","type","max","decpl","vscale","vofs","units","editmask","view","edit","default","bitmask"]),ks="name",aC="type";function oC(x){let A=x.indexOf("=");return{key:x.slice(0,A).trim().toLowerCase(),value:x.slice(A+1).trim()}}function FC(x){return/^config[0-9]$/.test(x)||/^config[A-C]$/i.test(x)?"config":/^histdata[0-9]$/.test(x)?"histdata":"other"}function sr(x,A){let e=x.get(A);if(e===void 0)return;let r=parseInt(e,10);return Number.isNaN(r)?void 0:r}function vC(x){let A=x.get("bitmask");if(A===void 0)return;let e=A.startsWith("$")?A.slice(1):A,r=parseInt(e,16);return Number.isNaN(r)?void 0:r}var lC=/^(.*?)%(config[0-9a-fA-F])%(.+)$/;function v8(x){let A=lC.exec(x);if(!A)return{};let e=A[1],r=e===""?NaN:Number(e);return{ref:{container:A[2],field:A[3]},prefixValue:Number.isFinite(r)?r:void 0}}function cC(x){let A=x.get("vscale");if(A===void 0)return{value:1};let e=v8(A);if(e.ref)return{value:e.prefixValue??1,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:1}}function fC(x){let A=x.get("vofs");if(A===void 0)return{value:0};let e=v8(A);if(e.ref)return{value:e.prefixValue??0,ref:e.ref};let r=Number(A);return Number.isFinite(r)?{value:r}:{value:0}}function EC(x,A){return x==="string"?A??0:iC[x]}function BC(x){let A={};for(let[e,r]of x)sC.has(e)||(A[e]=r);return A}function CC(x,A,e){let r=nC(x.get(aC)),t=sr(x,"max"),i=EC(r,t),n=A.fields[A.fields.length-1],v=sr(x,"byteofs")??(n?n.byteofs+n.size:A.kind==="histdata"?1:0),E=A.fields.length,u=x.get(ks)??(A.kind==="histdata"?`ch${E}`:`field${E}`),D=cC(x),m=fC(x),w=sr(x,"index");return{name:u,alias:x.get("alias"),title:x.get("title"),index:w,sortIndex:w??e,byteofs:v,type:r,size:i,max:t,decpl:sr(x,"decpl"),vscale:D.value,vofs:m.value,vscaleRef:D.ref,vofsRef:m.ref,units:x.get("units"),editmask:x.get("editmask"),view:sr(x,"view"),edit:sr(x,"edit"),default:x.get("default"),bitmask:vC(x),attrs:BC(x)}}function dC(){return{name:"",kind:"other",fields:[],recordSize:0}}function uC(x,A,e){switch(A){case ks:{let r=ys(e);x.name=r,x.kind=FC(r);break}case"alias":x.alias=e;break;case"title":x.title=e;break;case"upload":x.upload=parseInt(e,10);break;case"download":x.download=parseInt(e,10);break;case"edit":x.edit=parseInt(e,10);break;default:break}}function DC(x){if(!x.name)throw new Error("?dde.table-without-name");x.recordSize=x.fields.filter(A=>!_t(A.type)).reduce((A,e)=>Math.max(A,e.byteofs+e.size),0),x.fields.sort((A,e)=>A.sortIndex-e.sortIndex)}function pC(x){if(x==="*")return{keyBytes:[],matchAll:!0};let A=x.slice(0,2).toLowerCase()==="0x"?x.slice(2):x;A.length%2!==0&&(A=`0${A}`);let e=[];for(let r=0;r<A.length;r+=2){let t=parseInt(A.slice(r,r+2),16);e.push(Number.isNaN(t)?0:t)}return{keyBytes:e,matchAll:!1}}function bC(x){return x.toLowerCase()==="histdata28"?"applog0":ys(x)}function mC(x){let{keyBytes:A,matchAll:e}=pC(x.get("key")??"00");return{source:x.get("source")??"",target:bC(x.get("target")??""),key:A[0]??0,keyBytes:A,matchAll:e,keepraw:sr(x,"keepraw")}}function hC(x,A){return{containers:x,splits:A,byNameOrAlias(e){let r=e.toLowerCase();return x.find(t=>t.name.toLowerCase()===r||(t.alias??"").toLowerCase()===r)??null}}}function jC(x,A){switch(A){case"<table>":return x.container=dC(),x.expectName=!0,!0;case"</table>":return x.container&&(DC(x.container),x.containers.push(x.container)),x.container=null,!0;case"<field>":return x.field=new Map,!0;case"</field>":return x.container&&x.field&&x.container.fields.push(CC(x.field,x.container,x.line)),x.field=null,!0;case"<split>":return x.split=new Map,!0;case"</split>":return x.split&&x.splits.push(mC(x.split)),x.split=null,!0;default:return!1}}function gC(x,A){let{key:e,value:r}=oC(A);if(x.split)x.split.set(e,r);else if(x.field)x.field.set(e,r);else if(x.container){if(x.expectName&&e!==ks)throw new Error(`?dde.first-table-attr-not-name."${e}"`);x.expectName=!1,uC(x.container,e,r)}}function yC(x){let A={containers:[],splits:[],container:null,field:null,split:null,expectName:!1,line:0};for(let[e,r]of x.replace(/\r\n/g,`
2196
2196
  `).replace(/\r/g,`
2197
2197
  `).split(`
2198
- `).entries()){A.line=e;let t=r.trim();t===""||t.startsWith("//")||mC(A,t)||t.includes("=")&&hC(A,t)}return bC(A.containers,A.splits)}var o8=null,gC=4;function Jr(x){let A=new Date(x),e=(r,t)=>r.toString().padStart(t,"0");return e(A.getUTCFullYear(),4)+e(A.getUTCMonth()+1,2)+e(A.getUTCDate(),2)+e(A.getUTCHours(),2)+e(A.getUTCMinutes(),2)+e(A.getUTCSeconds(),2)+e(A.getUTCMilliseconds(),3)}function zr(x){let A=x.trim();if(A==="*")return o8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(u,p,m)=>{let w=A.slice(u,u+p);return parseInt(w.length?w.padEnd(p,"0"):m,10)},r=parseInt(A.slice(0,gC),10),t=A.length>=6?e(4,2,"01"):1,s=A.length>=8?e(6,2,"01"):1,n=e(8,2,"00"),F=e(10,2,"00"),v=e(12,2,"00"),E=e(14,3,"000");return Date.UTC(r,t-1,s,n,F,v,E)}var St="NAN",yC="%HEX%",kC=65535,ki=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),A0(this,"alias",x),this.name="DdeUnknownAliasError"}};function Nn(x){return(x.alias??x.name).toLowerCase()}function In(x){return x==="string"}function wi(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function F8(x){return(x.editmask??"").toUpperCase()===yC}function wC(x,A){return A===void 0||!Number.isFinite(x)?x:_i(x,A)}function _i(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function _C(x,A){if(!Number.isFinite(x)||x===0)return x;let e=Math.abs(x),r=Math.floor(Math.log10(e));return 10**(r+1)<=e?r+=1:10**r>e&&(r-=1),_i(x,A-1-r)}function SC(x){return x==="floatm16"||x==="f32"||x==="f64"}function $C(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(SC(x.type)?9:0),r=_i(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return _C(r,t)}function wn(x,A){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),r=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,s=1n;for(;r!==0n;)r&1n&&(e&1n&&(t|=s),s<<=1n),e>>=1n,r>>=1n;return Number(t)}function v8(x,A,e){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),s=BigInt.asUintN(64,BigInt(Math.trunc(e))),n=1n;for(;s!==0n;)s&1n&&(r=t&1n?r|n:r&~n,t>>=1n),s>>=1n,n<<=1n;return Number(r)}var TC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function _n(x){return!!x.bitmask&&TC.has(x.type)}var l8=255,c8=254,f8=253,E8=252,B8=251,PC=207,Si=65535,Sn=65534,$i=65533,Ti=65532,Pi=65531;function qC(x){switch(x){case l8:return Si;case c8:return Sn;case f8:return $i;case E8:return Ti;case B8:return Pi;default:return x<=31?x:x>PC?Sn:(x&15|16)<<(x>>4)-1}}function NC(x){switch(x){case Si:return l8;case Sn:return c8;case $i:return f8;case Ti:return E8;case Pi:return B8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var $n=1023,ai=31,C8=127,Us=8388607,IC=255,oi=15,MC=-14,dF=15;function d8(x){let A=(x&$n)<<13,e=(x&31744)>>10;if(e===ai)return D8(1024-(x&$n));e!==0&&(e=e-oi+4+C8);let r=(A|e<<23)>>>0;x&32768&&(r=(r|2147483648)>>>0);let t=new DataView(new ArrayBuffer(4));return t.setUint32(0,r),t.getFloat32(0)}function u8(x){if(typeof x=="string"||Number.isNaN(x))return kC;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&Us)+4096,s=(t>Us?1:0)+(e>>>23&IC),n=(t&Us)>>>13;return s!==0&&(s=s-C8-4,s<MC?(n=0,s=0):s>dF?(n=$n,s=dF+oi):s=s+oi),r|s<<10|n}var LC=["OF","UF","OL","SC"],Fi={u8:{NAN:255,OF:254,UF:253,OL:252,SC:251},u16:{NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},u32:{NAN:4294967295,OF:4294967294,UF:4294967293,OL:4294967292,SC:4294967291},s8:{NAN:127,OF:126,UF:-126,OL:-127,SC:-128},s16:{NAN:32767,OF:32766,UF:-32766,OL:-32767,SC:-32768},s32:{NAN:2147483647,OF:2147483646,UF:-2147483646,OL:-2147483647,SC:-2147483648},s64:{NAN:0x7fffffffffffffffn,OF:0x7ffffffffffffffen,UF:-0x7ffffffffffffffen,OL:-0x7fffffffffffffffn,SC:-0x8000000000000000n},ufm8:{NAN:Si,OF:Sn,UF:$i,OL:Ti,SC:Pi}},RC={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},Vx={NAN:1,OF:2,UF:3,OL:4,SC:5},OC=new Set(["u8","u16","u32","ufm8"]);function GC(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function qi(x){let A=x.replace(/,/g,"").trim();if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(A))return null;let e=Number(A);return Number.isFinite(e)?e:null}function Ni(x,A,e){switch(x){case"u8":return A.getUint8(e);case"s8":return A.getInt8(e);case"u16":return A.getUint16(e,!1);case"s16":return A.getInt16(e,!1);case"u32":return A.getUint32(e,!1);case"s32":return A.getInt32(e,!1);case"s64":return Number(A.getBigInt64(e,!1));case"f32":return A.getFloat32(e,!1);case"f64":return A.getFloat64(e,!1);case"floatm16":return d8(A.getUint16(e,!1));case"ufm8":return qC(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function D8(x){switch(x){case Vx.OF:return"OF";case Vx.UF:return"UF";case Vx.OL:return"OL";case Vx.SC:return"SC";default:return St}}var uF=[["NAN",Vx.NAN],["OF",Vx.OF],["UF",Vx.UF],["OL",Vx.OL],["SC",Vx.SC]];function UC(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?Vx.NAN:(r=r&4194304?8388608-r:r&255,r===0?Vx.NAN:r)}function HC(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?Vx.NAN:r}function JC(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);_n(x)&&(t=BigInt(wn(Number(t),x.bitmask)));let s=Fi.s64;return uF.find(([n])=>t===BigInt(s[n]))?.[1]??0}let e=Fi[x.type];if(!e)return 0;let r=Ni(x.type,A,x.byteofs);return _n(x)&&(r=wn(r,x.bitmask)),uF.find(([t])=>r===e[t])?.[1]??0}function p8(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&ai)===ai?1024-(e&$n):0}case"f32":return UC(A,x.byteofs);case"f64":return HC(A,x.byteofs);default:return JC(x,A)}}function b8(x,A){let e=Ni(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(_n(x)&&(e=wn(e,x.bitmask)),e*x.vscale+x.vofs)}function KC(x,A){let e=p8(x,A);if(e!==0)return D8(e);let r=b8(x,A);return Number.isNaN(r)?St:$C(x,r)}function zC(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(In(x.type)||wi(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return p8(x,e)!==0?NaN:b8(x,e)}function VC(x,A){if(F8(x)){let e="";for(let r=0;r<x.size;r++)e+=A.getUint8(x.byteofs+r).toString(16).padStart(2,"0");return e.toUpperCase()}return z0.cp1252Unpack(A,x.byteofs,x.size)}var m8=25569,h8=864e5;function WC(x){return(x-m8)*h8}function XC(x){return x/h8+m8}function YC(x,A){if(x.type==="datetime")return Jr(WC(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return Jr(z0.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),Jr(z0.stamp40ToMS(e))}var QC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function ZC(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function xd(x){let A=x.default;if(A===void 0)return;if(In(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===St)return St;if(QC.has(x.type))return ZC(e,0);let r=qi(e);return r!==null?r:A}function Ad(x,A,e){return x.byteofs+x.size>e?xd(x):In(x.type)?VC(x,A):wi(x.type)?YC(x,A):KC(x,A)}function vi(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)Be(t)||_t(t.type)||(r[Nn(t)]=Ad(t,e,A.byteLength));return r}function ed(x,A){if(typeof A=="number")return Number.isFinite(A)?{kind:"value",physical:A}:{kind:"sentinel",state:"NAN"};if(typeof A=="string"){if(A.toUpperCase()===St||A==="")return{kind:"sentinel",state:"NAN"};let e=LC.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=qi(A);return r!==null?{kind:"value",physical:r}:DF(x)}return DF(x)}function DF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?qi(A):null)??0}}function li(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,RC[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|Vx[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(Vx[e]),!1);default:break}let r=Fi[x.type]?.[e];if(r===void 0)throw new Error(`?ddeCodec.non-numeric-type."${x.type}"`);if(x.type==="s64")return A.setBigInt64(x.byteofs,BigInt(r),!1);j8(x,A,Number(r))}function rd(x,A,e){if(x.vscale===0)return;let r=(e-x.vofs)/x.vscale;switch(x.type){case"f32":return A.setFloat32(x.byteofs,r,!1);case"f64":return A.setFloat64(x.byteofs,r,!1);case"floatm16":return A.setUint16(x.byteofs,u8(r),!1);default:break}if(Number.isNaN(r))return li(x,A,"NAN");if(!Number.isFinite(r))return li(x,A,"OF");let t=r;OC.has(x.type)&&t<0&&(t=0),j8(x,A,GC(t))}function j8(x,A,e){if(_n(x)){let r=Ni(x.type,A,x.byteofs);e=v8(r,e,x.bitmask)}td(x.type,A,x.byteofs,e)}function td(x,A,e,r){switch(x){case"u8":return A.setUint8(e,r);case"s8":return A.setInt8(e,r);case"u16":return A.setUint16(e,r,!1);case"s16":return A.setInt16(e,r,!1);case"u32":return A.setUint32(e,r,!1);case"s32":return A.setInt32(e,r,!1);case"s64":return A.setBigInt64(e,BigInt(r),!1);case"ufm8":return A.setUint8(e,NC(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function nd(x,A,e){let r=String(e);if(F8(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${Nn(x)}"`);for(let s=0;s<x.size;s++){let n=s*2<t.length?parseInt(t.substr(s*2,2),16):0;A.setUint8(x.byteofs+s,n)}return}z0.cp1252Pack(A,x.byteofs,x.size,r)}function sd(x,A,e){let r=zr(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${Nn(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,XC(r),!1);return}let t=z0.msToStamp40(r);if(x.type==="stamp8"){A.setBigUint64(x.byteofs,BigInt(t),!1);return}A.setUint32(x.byteofs,Math.trunc(t/256),!1),x.size>=5&&A.setUint8(x.byteofs+4,t&255)}function id(x,A,e){if(In(x.type))return nd(x,A,e);if(wi(x.type))return sd(x,A,e);let r=ed(x,e);switch(r.kind){case"skip":return;case"sentinel":return li(x,A,r.state);case"value":return rd(x,A,r.physical)}}function ci(x,A,e){let r=e?new Uint8Array(e):new Uint8Array(x.recordSize),t=new DataView(r.buffer,r.byteOffset,r.byteLength),s=new Map(x.fields.filter(n=>!Be(n)&&!_t(n.type)).map(n=>[Nn(n),n]));for(let[n,F]of Object.entries(A)){let v=s.get(n.toLowerCase());if(!v)throw new ki(n);id(v,t,F)}return r}var pF=99,ad=256,Ie=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),A0(this,"container",x),this.name="DdeUnknownContainerError"}},$t=class extends Error{constructor(x,A){let e=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${e}"`),A0(this,"container",x),A0(this,"field",A),this.name="DdeWriteForbiddenError"}},Ii=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),A0(this,"field",x),this.name="DdeUnknownFieldError"}};function Hs(x){return(x.alias??x.name).toLowerCase()}var od=class{constructor(x,A,e=qt){A0(this,"model",x),A0(this,"storage",A),A0(this,"timeSource",e)}async readContainer(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=yt(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=vi(await this.resolveScaleRefs(A),r.data);return delete t.stamp,{stamp:this.rowStamp(r),...t}}async writeContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Ie(x);let r=yt(e);if(r===null)throw new Ie(x);if(e.edit===pF)throw new $t(e.name);let{stamp:t,...s}=A;this.assertFieldsWritable(e,s);let n=await this.storage.getRowForTag(r),F=ci(await this.resolveScaleRefs(e),s,n?.data??null),v=z0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),E=cA(v);return await this.storage.replaceUtoRow({tag:r,stamp:E,flags:n?.flags??0,site_related:n?.site_related??0,data:F}),{tag:r,stampHex:E,stamp40:v,data:F,devicePushable:i8(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Ie(x);let r=yt(e);if(r===null)throw new Ie(x);let{stamp:t,...s}=A,n=ci(await this.resolveScaleRefs(e),s,null),F=z0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:cA(F),flags:0,site_related:0,data:n})}recordStampMs(x){if(typeof x!="string")return null;try{return zr(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Ie(x);let r=this.model.splits.find(E=>E.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new Ie(x);let t=Math.abs(A.count),s=A.offset??0,n=this.buildSelectSet(e,A.select),F=await this.resolveScaleRefs(e);return(await this.collectMatched(F,r,s+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:n})).slice(s,s+t)}matchesSplit(x,A){return x.length===0?!1:A.matchAll?!0:x.length<A.keyBytes.length?!1:A.keyBytes.every((e,r)=>x[r]===e)}async collectMatched(x,A,e,r){let t=[];if(e<=0)return t;let s=Math.max(e,ad);for(let n=0;;n+=s){let F=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:s,offset:n});for(let v of F)if(v.data&&this.matchesSplit(v.data,A)&&(t.push(this.recordFromRow(x,v,r.selectSet)),t.length>=e))return t;if(F.length<s)return t}}async readTimeseriesEdge(x,A,e){return(await this.readTimeseries(x,{count:A==="youngest"?-1:1,select:e}))[0]??null}recordFromRow(x,A,e){let r=vi(x,A.data),t={stamp:this.rowStamp(A)};for(let[s,n]of Object.entries(r))s!=="stamp"&&(!e||e.has(s))&&(t[s]=n);return t}rowStamp(x){return Jr(z0.stamp40ToMS(YA(x.stamp)))}boundHex(x){if(x!=null)return cA(z0.msToStamp40(x))}async resolveScaleRefs(x){if(!x.fields.some(r=>r.vscaleRef||r.vofsRef))return x;let A=new Map,e=[];for(let r of x.fields){if(!r.vscaleRef&&!r.vofsRef){e.push(r);continue}e.push({...r,vscale:r.vscaleRef?await this.resolveRef(r.vscaleRef,A,r.vscale):r.vscale,vofs:r.vofsRef?await this.resolveRef(r.vofsRef,A,r.vofs):r.vofs})}return{...x,fields:e}}async resolveRef(x,A,e){if(!/^config[0-9a-f]$/i.test(x.container))return e;let r=this.referencedField(x);if(!r)return e;let t=x.container.toLowerCase();A.has(t)||A.set(t,await this.referencedRecordData(x.container));let s=A.get(t);if(!s)return e;let n=zC(r,s);return n===null?e:n}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>Hs(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=yt(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!Be(r)&&!_t(r.type)).map(r=>[Hs(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===pF)throw new $t(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!Be(t)&&!_t(t.type)).map(t=>Hs(t))),r=new Set;for(let t of A){let s=t.toLowerCase();if(s!=="stamp"){if(!e.has(s))throw new Ii(t);r.add(s)}}return r}},Fd=new Set(["$titles","$meta"]);function vd(x){let A=x;if(typeof x=="string")try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function fi(x,A){let e=A.toLowerCase();if(Fd.has(e))return null;let r=x[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[s,n]of Object.entries(r)){if(typeof n!="object"||n===null)continue;let F=n.alias;typeof F=="string"&&F.length>0&&t.set(s.toLowerCase(),F)}return t}function g8(x,A){let e={};for(let[r,t]of Object.entries(x)){if(r==="stamp"){e[r]=t;continue}let s=A?.get(r.toLowerCase());e[s??r]=t}return e}function Nt(x,A){if(!x)return null;let e=fi(x,A.name);return e||(A.alias?fi(x,A.alias):null)}var ld=require("events"),O0="[OfflineSyncManager]",cd=500,fd="site_info",Ed=new Set(["local-data-interface.json"]);function Rx(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function Bd(x){let A=yn(x);return!!(x&2)||A!==0&&A!==65}function bF(x){return x.filter(A=>(A.filename===Hr||A.filename===mi)&&A.outcome==="download").map(A=>A.filename)}var er="skip-equal",Ur="skip-device-readonly",Js="delete",qe="error",Ks="upload",zs="uploading-utos",mF="downloading-utos",Cn="fetching-device-state",Vs="uploading-files",dn="downloading-files",hF="executing-change-requests",jF="executed",Cd="error",Ws="skip-old-stamp",dd=class extends ld.EventEmitter{constructor(x,A,e){super(),A0(this,"utoMaster",x),A0(this,"storage",A),A0(this,"logger",e)}emitProgress(x,A,e,r,t){let s={phase:x,item:A,completed:e,total:r,...t};this.emit("progress",s)}async uploadHistoricTag(x,A,e,r,t){try{let s=await this.storage.getRowForTag(x),n=0,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>({tag:x,stamp:cA(u.stamp40),flags:s?.flags??0,site_related:s?.site_related??0,data:u.data}));await this.storage.insertHistoricRows(E),n+=E.length};return await this.utoMaster.requestHistoricUtos(x,e,t,void 0,cd,F),this.logger?.info(`${O0} historic upload tag=0x${x.toString(16)} +${n} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:n}}catch(s){return this.logger?.error(`${O0} historic upload error tag=0x${x.toString(16)}: ${s}`),{tag:x,sTag:A.sTag,historic:!0,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadSingleTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t)return this.logger?.info(`${O0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:er,dbStamp40:e,deviceStamp40:r};let s=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:cA(t.stamp),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${O0} single upload tag=0x${x.toString(16)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"upload",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${O0} single upload error tag=0x${x.toString(16)}: ${JSON.stringify(t)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(zs,null,0,t);let s=0;for(let n of x){Rx(r);let F=A.get(n),{tagInfo:v,dbStamp40:E,deviceStamp40:u}=F;if(this.emitProgress(zs,v?.sTag??`0x${n.toString(16)}`,s,t),!v||u===null)e.set(n,{tag:n,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:E,deviceStamp40:u});else if(!(!v.flags.up||u<=E)){let p=v.sTag,m=s,w=v.historic?await this.uploadHistoricTag(n,v,E,u,j=>{this.emitProgress(zs,p,m,t,{recordsReceived:j})}):await this.uploadSingleTag(n,v,E,u);e.set(n,w)}++s}}async pullFileFromDevice(x,A,e,r,t,s){let n=A.stamp;try{let F=await this.utoMaster.requestFile(x,E=>{this.emitProgress(Vs,x,s,t,{bytesTransferred:E})}),v=bi(F);if(v!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${v.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:cA(n),crc:A.crc32,size:F.byteLength,flags:A._flags,flags_int:r,data:F}),{filename:x,outcome:Ks,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${O0} file upload error ${x}: ${JSON.stringify(F)}`),{filename:x,outcome:qe,dbStamp40:e,deviceStamp40:n}}}async autoSyncUploadFile(x,A,e,r,t,s,n,F){let v=A.stamp;if(v>r)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):s?this.pullFileFromDevice(x,A,r,t,n,F):void 0;if(v===r&&this.fileContentMatches(A,e))return{filename:x,outcome:er,dbStamp40:r,deviceStamp40:v}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:cA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:er,dbStamp40:r,deviceStamp40:t}}catch(s){return this.logger?.error(`${O0} file upload error ${x}: ${JSON.stringify(s)}`),{filename:x,outcome:qe,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(x,A,e,r,t,s,n){let F=A.stamp;if(F!==r||!this.fileContentMatches(A,e))return t?this.pullFileFromDevice(x,A,r,e.flags_int,s,n):{filename:x,outcome:Ur,dbStamp40:r,deviceStamp40:F}}async decideFileUpload(x,A,e,r){let t=await this.storage.getFile(x),s=!!(A._flags&1);if(!t)return s?this.pullFileFromDevice(x,A,0,16,e,r):void 0;let n=YA(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,n,t.flags_int,s,e,r):this.decideNonSystemUpload(x,A,t,n,s,e,r)}pullIfReadable(x,A,e,r,t,s,n){return x?this.pullFileFromDevice(A,e,r,t,s,n):void 0}async decideNonSystemUpload(x,A,e,r,t,s,n){let F=e.flags_int;if(!(F&2))return F&4?this.pullIfReadable(t,x,A,r,F,s,n):this.decideUploadBySyncLogic(x,A,e,r,t,s,n)}async decideUploadBySyncLogic(x,A,e,r,t,s,n){let F=e.flags_int,v=yn(F);if(v===65)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):this.pullIfReadable(t,x,A,r,F,s,n);if(v===1)return this.autoSyncUploadFile(x,A,e,r,F,t,s,n);if(v===97)return A.stamp>r?this.pullIfReadable(t,x,A,r,F,s,n):void 0;if(v!==33)return this.mirrorUploadFile(x,A,e,r,t,s,n)}async uploadFiles(x,A,e,r){let t=Object.entries(x),s=t.length;this.emitProgress(Vs,null,0,s);let n=0;for(let[F,v]of t){if(Rx(r),!(F===mi||F===Hr&&!e)){let u=await this.decideFileUpload(F,v,s,n);u&&A.set(F,u)}this.emitProgress(Vs,F,++n,s)}}fileContentMatches(x,A){return A!==null&&x.crc32===A.crc&&x.size===A.size}async downloadSingleTag(x,A,e,r){try{let t=await this.storage.getRowForTag(x);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,x,t.data,e),{tag:x,sTag:A.sTag,historic:!1,outcome:"download",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${O0} download error tag=0x${x.toString(16)}: ${t}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async processDownloadTag(x,A,e,r,t){if(e===r&&!t.has(x)){let s=A.flags.up?er:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:s,dbStamp40:e,deviceStamp40:r});return}if(e>r){let s=A.flags.down?await this.downloadSingleTag(x,A,e,r):{tag:x,sTag:A.sTag,historic:!1,outcome:Ur,dbStamp40:e,deviceStamp40:r};t.set(x,s)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(mF,null,0,t);let s=0;for(let n of x){Rx(r);let{tagInfo:F,dbStamp40:v,deviceStamp40:E}=A.get(n);F&&E!==null&&!F.historic&&await this.processDownloadTag(n,F,v,E,e),this.emitProgress(mF,F?.sTag??`0x${n.toString(16)}`,++s,t)}}async sendFileToDevice(x,A,e,r,t){let s=x.data.byteLength,n=F=>{if(F!==null){let v=Math.round(s*parseInt(F,10)/100);this.emitProgress(dn,x.filename,t,r,{bytesTransferred:v,bytesTotal:s})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,x.data,z0.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(F){return this.logger?.error(`${O0} file download error ${x.filename}: ${F}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",n)}}async processDownloadFile(x,A,e,r,t=!1){if(!x.data)return;let s=A?.stamp??0,n=YA(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return n===s?void 0:{filename:x.filename,outcome:er,dbStamp40:n,deviceStamp40:s};if(!(!t&&n<s))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:Ur,dbStamp40:n,deviceStamp40:s}:this.sendFileToDevice(x,n,s,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(fd);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${O0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),s=t.filter(p=>p.flags&8),n=t.filter(p=>!(p.flags&8)),F=[...s,...n].filter(p=>p.filename),v=Object.entries(x).filter(([,p])=>p._flags&4).map(([p])=>p),E=F.length;this.emitProgress(dn,null,0,E);let u=0;for(let p of F){if(Rx(r),e&&p.filename===Hr){this.emitProgress(dn,p.filename,++u,E);continue}let m=p.filename===Hr&&!e,w=await this.decideFileDownload(p,x[p.filename],A.get(p.filename),v,m,E,u);w&&A.set(p.filename,w),this.emitProgress(dn,p.filename,++u,E)}}async decideFileDownload(x,A,e,r,t,s,n){return A!==void 0?this.decideDownloadExisting(x,A,e,t,s,n):this.decideDownloadMissing(x,r,s,n)}async decideDownloadExisting(x,A,e,r,t,s){if(A._flags&4)return;if(x.flags&8)return e?void 0:this.processDownloadFile(x,A,t,s,r);let n=x.flags_int;if(n&8)return this.handleDeviceDelete(x,A,e);if(!e&&!(n&4))return this.pushToDevice(x,A,t,s)}async pushToDevice(x,A,e,r){let t=A.stamp,s=YA(x.stamp),n=this.wantDownloadPush(x,A,s,t);if(n==="match")return{filename:x.filename,outcome:er,dbStamp40:s,deviceStamp40:t};if(n!=="none"&&!(s===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,s,t,e,r):{filename:x.filename,outcome:Ur,dbStamp40:s,deviceStamp40:t}}wantDownloadPush(x,A,e,r){let t=x.flags_int;if(t&2)return"push";let s=this.fileContentMatches(A,x),n=yn(t);return n===33||n===1&&e>=r?s?"match":"push":n===97&&e>r?"push":"none"}async handleDeviceDelete(x,A,e){let r=A.stamp,t=YA(x.stamp);if(!(e&&(e.outcome===Ks||e.outcome===qe))){if(!(A._flags&2))return{filename:x.filename,outcome:Ur,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Js,dbStamp40:t,deviceStamp40:r}}catch(s){return this.logger?.error(`${O0} file delete error ${x.filename}: ${JSON.stringify(s)}`),{filename:x.filename,outcome:qe,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,s=YA(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Js,dbStamp40:s,deviceStamp40:null}}catch(n){return this.logger?.error(`${O0} file delete error ${x.filename}: ${JSON.stringify(n)}`),{filename:x.filename,outcome:qe,dbStamp40:s,deviceStamp40:null}}if(!(x.flags&12)&&Bd(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,s,0,e,r)}hasMatchingNode(x,A){return A.some(e=>e.slice(0,-1)===x.slice(0,e.length-1))}async reconcileFileState(x){try{await this.reconcileFileStateUnguarded(x)}catch(A){if(x?.aborted)throw A;this.logger?.error(`${O0} file-state reconciliation failed: ${JSON.stringify(A)}`)}}async reconcileFileStateUnguarded(x){let A=await this.utoMaster.requestFileList(),e=new Set(Object.keys(A)),r=await this.storage.getFiles(),t=new Map(r.map(s=>[s.filename,s]));for(let[s,n]of Object.entries(A))Rx(x),await this.reconcileDeviceFile(s,n,t.get(s)??null);for(let s of r)Rx(x),e.has(s.filename)||await this.dropRowMissingFromDevice(s)}async reconcileDeviceFile(x,A,e){let r=!!((A._flags|(e?.flags??0))&8);if(e?.data&&!this.fileContentMatches(A,e)){this.logger?.info(`${O0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp:cA(A.stamp),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e?.flags_int??16,data:this.keepBlob(x,r)?e?.data??null:null};e&&this.fileRowMatches(e,t)||await this.storage.upsertFile(t)}keepBlob(x,A){return!A||Ed.has(x)}fileRowMatches(x,A){return x.stamp===A.stamp&&x.crc===A.crc&&x.size===A.size&&x.flags===A.flags&&x.flags_int===A.flags_int&&(x.data??null)===A.data}async dropRowMissingFromDevice(x){try{await this.storage.deleteFile(x.filename)}catch(A){this.logger?.error(`${O0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){Rx(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${O0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null){if(!A.serialNumber)throw new Error(`${O0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${O0} DB metadata missing device_id`);await this.storage.setMetadataValue("device_id",A.serialNumber),e=A.serialNumber}if(e.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${O0} DB device_id "${e}" does not match connected device "${A.serialNumber}"`);return this.emitProgress("validating",null,1,1),A}buildTagMap(x){let A=new Map;for(let e=0;e<x.utos.length;e++){let r=x.utos[e];A.set(r.wTag,{index:e,flags:{up:r.flags.up,down:r.flags.down,setValue:!!r.flags.setValue},historic:r.flags.historic,sTag:r.sTag})}return A}async resolveDbTags(x){let A=await this.storage.getUtoDataTags(),e=new Set(A);for(let[r,t]of x)t.historic&&!e.has(r)&&A.push(r);return A}async buildTagStampCache(x,A,e){let r=new Map;for(let t of x){let s=A.get(t),n=await this.storage.getLatestStampForTag(t),F=n?YA(n):0,v=s&&s.index<e.stamps.length?e.stamps[s.index]:null;r.set(t,{dbStamp40:F,deviceStamp40:v,tagInfo:s})}return r}async executeChangeRequests(x,A,e,r,t,s){let n=await this.storage.getUtoChangeRequests(),F=this.groupChangeRequests(n),v=F.size;if(this.emitProgress(hF,null,0,v),v===0)return;let E=new Set,u=0;for(let[p,m]of F){Rx(s);let w=x.get(p),j=w?.sTag??`0x${p.toString(16)}`;this.emitProgress(hF,j,u,v),await this.executeChangeRequestTag(p,j,w,m,A,r,t,E),++u}E.size>0&&await this.repullExecutedTags(E,x,e,s)}groupChangeRequests(x){let A=new Map;for(let e of x){let r=A.get(e.tag)??[];r.push({stamp40:YA(e.stamp),user:e.user,json:e.json}),A.set(e.tag,r)}return A}async executeChangeRequestTag(x,A,e,r,t,s,n,F){if(!e){this.pushChangeResults(n,x,A,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(n,x,A,r,"skip-unsupported");return}let v=e.index<t.stamps.length?t.stamps[e.index]:0,E=r.filter(p=>p.stamp40<=v),u=r.filter(p=>p.stamp40>v);this.pushChangeResults(n,x,A,E,Ws),u.length>0&&await this.coalesceAndSend(x,A,e,u,s,n,F)}async coalesceAndSend(x,A,e,r,t,s,n){let F=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===qe||!F||!F.data){this.pushChangeResults(s,x,A,r,"error");return}let v=this.resolveSetObject(F.data,r,A);if(v===null){this.pushChangeResults(s,x,A,r,"error");return}if(Object.keys(v).length===0){this.pushChangeResults(s,x,A,r,"skip-no-change");return}let E=r[r.length-1].stamp40,u=await this.utoMaster.sendSetValue(x,JSON.stringify(v),E);u.outcome==="ok"||u.outcome==="stamp"?(n.add(x),this.pushChangeResults(s,x,A,r,jF,u.resultCode)):u.outcome==="denied"?(this.logger?.warn(`${O0} change-request denied ${A} (result=${u.resultCode}) \u2014 server will retry`),this.pushChangeResults(s,x,A,r,"denied",u.resultCode)):(this.logger?.error(`${O0} change-request error ${A} (result=${u.resultCode})`),this.pushChangeResults(s,x,A,r,"error",u.resultCode))}resolveSetObject(x,A,e){try{let r=JSON.parse(z0.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${O0} change-request unparseable uto_data ${e}: ${r}`),null}}buildSetObject(x,A,e){let r={};for(let t of A){let s=JSON.parse(t.json);if(!this.isPlainRecord(s))throw new Error(`change-request JSON is not an object on ${e}`);for(let[n,F]of Object.entries(s)){let v=this.resolveChangeField(x[n],F,n,e);v.apply&&(r[n]=v.value,x[n]=v.value)}}return r}resolveChangeField(x,A,e,r){if(this.isBitwiseOp(A)){let{op:t,val:s}=A;return this.resolveBitwiseOp(x,t,s,e,r)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,e,r,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${O0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${O0} change-request op "${A}" with non-number val on ${t}.${r} \u2014 skipped`),{apply:!1}):x===void 0?A==="|"?{apply:!0,value:e}:{apply:!1}:typeof x!="number"?(this.logger?.warn(`${O0} change-request op "${A}" on non-number ${t}.${r} \u2014 skipped`),{apply:!1}):{apply:!0,value:A==="|"?x|e:x&e}}isBitwiseOp(x){return this.isPlainRecord(x)&&"op"in x}isPlainRecord(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}pushChangeResults(x,A,e,r,t,s){for(let n of r)x.push({tag:A,sTag:e,stamp40:n.stamp40,user:n.user,outcome:t,resultCode:s})}async repullExecutedTags(x,A,e,r){let t=null;try{t=await this.utoMaster.requestStamps()}catch(s){this.logger?.warn(`${O0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${s}`)}for(let s of x)Rx(r),await this.repullExecutedTag(s,A,t,e)}async repullExecutedTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${O0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let s=await this.storage.getRowForTag(x),n=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:cA(n),flags:s?.flags??0,site_related:s?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let F=r.get(x);if(F){let v=A.get(x),E=e&&v&&v.index<e.stamps.length?e.stamps[v.index]:n;F.dbStamp40=n,F.deviceStamp40=E}this.logger?.info(`${O0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${O0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],s=bF(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:s.length>0,rebootFilesDeployed:s,totalTagsUploaded:r.filter(n=>n.outcome==="upload"&&!n.historic).length,totalTagsDownloaded:r.filter(n=>n.outcome==="download").length,totalTagsSkipped:r.filter(n=>n.outcome===er||n.outcome==="skip-db-readonly"||n.outcome===Ur).length,totalHistoricRecordsAppended:r.reduce((n,F)=>n+(F.recordsAppended??0),0),totalFilesUploaded:t.filter(n=>n.outcome===Ks).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===Js).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===jF).length,totalErrors:r.filter(n=>n.outcome===qe).length+t.filter(n=>n.outcome===qe).length+e.filter(n=>n.outcome===Cd).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);Rx(A),this.emitProgress(Cn,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${O0} requestStamps returned null`);this.emitProgress(Cn,"stamps",1,3);let s=await this.utoMaster.requestFileList();this.emitProgress(Cn,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(Cn,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),v=new Map,E=new Map,u=[],p=await this.isAppInDevPhase();return Rx(A),await this.uploadUtoTags(n,F,v,A),Rx(A),await this.uploadFiles(s,E,p,A),Rx(A),await this.executeChangeRequests(r,t,F,v,u,A),Rx(A),await this.downloadUtoTags(n,F,v,A),Rx(A),await this.downloadFiles(s,E,p,A),Rx(A),bF([...E.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(v,E,u)}async executeAdHocChangeRequest(x,A){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${O0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${O0} requestStamps returned null`);let s=r.get(x),n=s?.sTag??`0x${x.toString(16)}`,F=A.map(m=>({stamp40:m.stamp40,user:"",json:m.json})).sort((m,w)=>m.stamp40-w.stamp40),v=new Map,E=[],u=new Set;return await this.executeChangeRequestTag(x,n,s,F,t,v,E,u),u.size>0&&await this.repullExecutedTags(u,r,new Map,void 0),E.find(m=>m.outcome!==Ws)?.outcome??Ws}},ud=require("events"),Dd=require("events"),pd=require("events"),bd=5e3,Mi=class y8 extends pd.EventEmitter{constructor(A=QA){super(),A0(this,"logger",A),A0(this,"ws",null),A0(this,"bridgeTransport",null),A0(this,"bridgeSignal"),A0(this,"bridgeResolve",null),A0(this,"bridgeReject",null),A0(this,"serverMessageCount",0),A0(this,"settled",!1),A0(this,"abortHandler",null),A0(this,"connectTimeout"),A0(this,"writeQueue",[]),A0(this,"isProcessingQueue",!1),A0(this,"queueAborted",!1),A0(this,"queueDrainPromise",Promise.resolve()),A0(this,"transportUnsubscribe",null)}static buildSyncUrl(A,e){return`wss://${A}/uto/1/sync/${e}`}resetBridgeState(){this.serverMessageCount=0,this.settled=!1,this.abortHandler=null,this.connectTimeout=void 0,this.writeQueue=[],this.isProcessingQueue=!1,this.queueAborted=!1,this.queueDrainPromise=Promise.resolve(),this.bridgeResolve=null,this.bridgeReject=null,this.bridgeTransport=null,this.bridgeSignal=void 0,this.transportUnsubscribe=null}async processWriteQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.writeQueue.length>0&&!this.queueAborted;){let A=this.writeQueue.shift();try{await A8(this.bridgeTransport,A)}catch(e){let r=e instanceof Error?e.message:String(e);this.logger.error(`Error writing to transport: ${r}`)}}this.isProcessingQueue=!1}}cleanup(){this.transportUnsubscribe&&(this.transportUnsubscribe(),this.transportUnsubscribe=null),this.abortHandler&&this.bridgeSignal&&(this.bridgeSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null),this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.ws=null}settle(A,e){this.settled||(this.settled=!0,this.cleanup(),A==="resolve"?this.bridgeResolve?.({serverMessageCount:this.serverMessageCount}):this.bridgeReject?.(e))}attachWebSocketHandlers(A,e){let r=t=>{A.readyState===WebSocket.OPEN&&!this.bridgeSignal?.aborted&&!this.settled&&A.send(t)};this.abortHandler=()=>{this.logger.info("WebSocket bridge aborted"),this.queueAborted=!0,this.writeQueue.length=0,(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)&&A.close(),this.settle("reject",new Error("Operation aborted"))},this.bridgeSignal&&this.bridgeSignal.addEventListener("abort",this.abortHandler),A.onopen=()=>{this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.info(`WebSocket connected to ${e}`),this.transportUnsubscribe=this.bridgeTransport.onData(r),this.emit("wsConnected")},A.onmessage=t=>{this.serverMessageCount++,this.emit("serverMessage",this.serverMessageCount),!(this.bridgeSignal?.aborted||this.settled)&&(this.writeQueue.push(t.data),this.isProcessingQueue||(this.queueDrainPromise=this.processWriteQueue()))},A.onclose=t=>{this.logger.info(`WebSocket closed (server=${e}, code=${t.code}, messages=${this.serverMessageCount})`),this.emit("wsClosed",t.code,t.reason),this.queueDrainPromise.then(()=>this.settle("resolve")).catch(()=>this.settle("resolve"))},A.onerror=t=>{this.logger.error(`WebSocket error (server=${e})`),this.emit("wsError",t),this.queueAborted=!0,this.writeQueue.length=0,this.settle("reject",new Error("WebSocket error"))}}async bridge(A,e,r,t){return new Promise((s,n)=>{if(t?.aborted){n(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=s,this.bridgeReject=n;let F=y8.buildSyncUrl(e,r);this.logger.info(`Opening WebSocket: ${F}`);let v=new WebSocket(F);v.binaryType="arraybuffer",this.ws=v,this.connectTimeout=setTimeout(()=>{v.readyState===WebSocket.CONNECTING&&(this.logger.error("WebSocket connection timeout"),v.close(),this.settle("reject",new Error("WebSocket connection timeout")))},bd),this.attachWebSocketHandlers(v,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},k8="https://lic.mydatanet.at/api/2/";async function w8(x,A=k8){let e=`${A}devices/${x}/assignment`,r=await fetch(e);if(!r.ok)throw new Error(`Failed to get device assignment: ${r.status} ${r.statusText}`);return r.json()}var _8=class extends Dd.EventEmitter{constructor(x=QA){super(),A0(this,"logger",x)}async execute(x,A,e,r){let t=e;t||(this.logger.info("[LegacySync] No serverUrl provided, resolving via device assignment..."),this.emit("syncPhase",{phase:"resolving-server"}),t=(await w8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let s=new Mi(this.logger);s.on("wsConnected",()=>this.emit("wsConnected")),s.on("wsClosed",(F,v)=>this.emit("wsClosed",F,v)),s.on("wsError",F=>this.emit("wsError",F)),s.on("serverMessage",F=>this.emit("serverMessage",F));let n=await s.bridge(x,t,A,r);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+n.serverMessageCount+")"),{serverMessageCount:n.serverMessageCount}}},md=require("events"),S8="Operation aborted";function hd(x){return x instanceof Error?x.message:String(x)}function Xs(x){if(x?.aborted)throw new Error(S8)}var $8=class extends md.EventEmitter{constructor(x,A=QA){super(),A0(this,"atHandler",x),A0(this,"logger",A)}async execute(x,A,e,r){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:n=>this.atHandler.queryMntServerConfig(n),initiateSync:n=>this.atHandler.initiateMntSync(n)},{name:"mdn",queryServer:n=>this.atHandler.queryMdnServerConfig(n),initiateSync:n=>this.atHandler.initiateMdnSync(n)}],s={};for(let n of t)try{s[n.name]=await this.runSyncPhase(n,x,A,r)}catch(F){if(r?.aborted)throw new Error(S8);let v=`${n.name.toUpperCase()} sync phase failed: ${hd(F)}`;throw this.logger.error(v),new Error(v)}return this.logger.info(`Debug sync completed (mntMessages=${s.mnt}, mdnMessages=${s.mdn})`),{mntServerMessageCount:s.mnt,mdnServerMessageCount:s.mdn}}async runSyncPhase(x,A,e,r){Xs(r);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let s=await x.queryServer(r);this.logger.info(`${t} server domain: ${s}`),Xs(r),await x.initiateSync(r),Xs(r);let n=await this.syncWithServer(A,s,e,r);return this.logger.info(`${t} phase completed (serverMessages=${n.serverMessageCount})`),n.serverMessageCount}async syncWithServer(x,A,e,r){let t=new Mi(this.logger),s=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let n=this.atHandler.createConCloseMonitor(()=>{s=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let F=await t.bridge(x,A,e,r);return s?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(r)),F}finally{n()}}},jd=class extends ud.EventEmitter{constructor(x,A,e=QA){super(),A0(this,"syncTransport",x),A0(this,"logger",e),A0(this,"atHandler"),this.atHandler=A??null}async sync(x){let A=this.atHandler?"debug":"legacy";this.emit("syncStart",{mode:A});try{if(this.atHandler)try{return this.emit("syncPhase",{phase:"debug-sync"}),await this.syncWithDebug(x)}catch(e){return this.logger.warn("[SyncManager] Debug sync failed, falling back to legacy sync: "+(e instanceof Error?e.message:String(e))),this.emit("syncPhase",{phase:"debug-fallback-legacy"}),await this.syncLegacy(x)}return this.emit("syncPhase",{phase:"legacy"}),await this.syncLegacy(x)}catch(e){throw this.emit("syncError",e),e}}async syncLegacy(x){let A=new _8(this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let r={mode:"legacy",serverMessageCount:(await A.execute(this.syncTransport,x.serialNumber,x.serverUrl,x.signal)).serverMessageCount};return this.emit("syncComplete",r),r}async syncWithDebug(x){let A=new $8(this.atHandler,this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let e=await A.execute(this.syncTransport,x.serialNumber,x.serverUrl??"",x.signal),r={mode:"debug",serverMessageCount:e.mntServerMessageCount+e.mdnServerMessageCount,mntServerMessageCount:e.mntServerMessageCount,mdnServerMessageCount:e.mdnServerMessageCount};return this.emit("syncComplete",r),r}dispose(){}},gd=require("events"),_x={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},K0={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},zx=1e4,T8=9e4,P8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function q8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var rr="Operation aborted",Ux=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},Li=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},yd=class extends gd.EventEmitter{constructor(x,A=QA){super(),A0(this,"transport",x),A0(this,"logger",A),A0(this,"mutex",new ji("AtCommandHandler")),A0(this,"bufferState",q8()),A0(this,"responseCallback",null),A0(this,"decoder",new TextDecoder),A0(this,"dataHandler"),A0(this,"disposeTransportListener"),A0(this,"isDisposed",!1),A0(this,"activeAbort",null),A0(this,"session"),this.dataHandler=e=>this.handleIncomingData(e),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(e,r,t=zx,s)=>this.executeSendAndWait(e,r,t,s),sendRaw:(e,r=zx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(_x.MNT_CFG,K0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(_x.MDN_CFG,K0.MDN_CFG_PREFIX,e),initiateMntSync:e=>this.executeInitiateMntSync(e),initiateMdnSync:e=>this.executeInitiateMdnSync(e),sendCompanionCert:(e,r)=>this.executeSendCompanionCert(e,r),queryCompanionCertSupport:e=>this.executeQueryCompanionCertSupport(e),sendConnectionClose:e=>this.executeSendConnectionClose(e)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(x){await this.mutex.requestLock();try{if(this.isDisposed)throw new Ux;return await x(this.session)}finally{this.mutex.unlock()}}handleIncomingData(x){let A=this.decoder.decode(x);this.bufferState.buffer+=A,this.emit("data",A),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(x){let A=new Uint8Array(x.length+2);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A[x.length]=10,A[x.length+1]=13,A.buffer}makeCleanup(x,A,e){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(x),A&&e&&A.removeEventListener("abort",e)}}makeResponseChecker(x,A,e,r){let t=x instanceof RegExp;return s=>{if(x!==K0.ERROR&&s.includes(K0.ERROR)){A(),r(new Li);return}let n=!1,F=s;if(t){let v=s.match(x);v&&(n=!0,F=v[0])}else n=s.includes(x);if(n){A(),e(F);return}s.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,e,r){return new Promise((t,s)=>{if(this.isDisposed){s(new Ux);return}if(r?.aborted){s(new Error(rr));return}x&&(this.bufferState.buffer="");let F=A instanceof RegExp?A.source:A,v={cleanup:()=>{}},E=setTimeout(()=>{v.cleanup(),s(new Error(`Timeout waiting for response: ${F}`))},e),u=()=>{v.cleanup(),s(new Error(rr))};v.cleanup=this.makeCleanup(E,r,u),r&&r.addEventListener("abort",u);let p=this.makeResponseChecker(A,v.cleanup,t,s);this.responseCallback=p,this.activeAbort=()=>{v.cleanup(),s(new Ux)},!x&&this.bufferState.buffer&&p(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(m=>{v.cleanup(),s(m)}))})}executeSendRaw(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Ux);return}this.bufferState.buffer="";let t=setTimeout(()=>{s(),r(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),s=this.makeCleanup(t);this.activeAbort=()=>{s(),r(new Ux)},this.responseCallback=n=>{P8.test(n)&&(s(),this.logger.info("RX: "+n.trim()),e(n))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(n=>{s(),r(n)})})}executeQueryConfig(x,A,e){return new Promise((r,t)=>{if(this.isDisposed){t(new Ux);return}if(e?.aborted){t(new Error(rr));return}this.bufferState.buffer="";let s={cleanup:()=>{}},n=setTimeout(()=>{s.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},zx),F=()=>{s.cleanup(),t(new Error(rr))};s.cleanup=this.makeCleanup(n,e,F),e&&e.addEventListener("abort",F);let v=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{s.cleanup(),t(new Ux)},this.responseCallback=E=>{let u=E.match(v);if(u){s.cleanup();let p=u[1].trim();this.logger.info(`Server config ${A}: ${p}`),r(p);return}E.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(E=>{s.cleanup(),this.logger.error(`Failed to send ${A} command: `+(E instanceof Error?E.message:String(E))),t(E)})})}async sendAndWait(x,A,e=zx,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=zx){return this.withAtLock(e=>e.sendRaw(x,A))}async queryMntServerConfig(x){return this.withAtLock(A=>A.queryMntServerConfig(x))}async queryMdnServerConfig(x){return this.withAtLock(A=>A.queryMdnServerConfig(x))}async initiateMntSync(x){return this.withAtLock(A=>A.initiateMntSync(x))}async initiateMdnSync(x){return this.withAtLock(A=>A.initiateMdnSync(x))}async sendCompanionCert(x,A){return this.withAtLock(e=>e.sendCompanionCert(x,A))}async executeInitiateMntSync(x){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(_x.MNT_SYNC,K0.OK,zx,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(_x.MDN_SYNC,K0.OK,zx,x),await this.executeSendAndWait(null,K0.SYNC_START,zx,x)}catch(A){this.logger.error("Failed to initiate MDN sync: "+(A instanceof Error?A.message:String(A)))}}async executeSendCompanionCert(x,A){if(this.isDisposed)throw new Ux;if(A?.aborted)throw new Error(rr);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${_x.COMPANION_CERT}=${r}`,K0.OK,zx,A),s=parseInt(t.match(/(\d+)/)[1],10),n=0;for(;n<r;){let F=Math.min(s,r-n),v=e.slice(n,n+F);await this.executeSendAndWait(`${_x.COMPANION_CERT}=${F},${n},${v}`,K0.OK,zx,A),n+=F}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Ux);return}if(A?.aborted){r(new Error(rr));return}this.bufferState.buffer="";let t={cleanup:()=>{}},s=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},zx),n=()=>{t.cleanup(),r(new Error(rr))};t.cleanup=this.makeCleanup(s,A,n),A&&A.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Ux)},this.responseCallback=v=>{let E=v.match(K0.COMPCERT_ERROR);if(E){t.cleanup(),e({success:!1,errorCode:parseInt(E[1],10)});return}if(v.includes(K0.OK)){t.cleanup(),e({success:!0});return}v.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${_x.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+F),this.transport.write(this.encodeCommand(F)).catch(v=>{t.cleanup(),r(v)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(_x.COMPANION_CERT_TEST,K0.OK,zx,x),!0}catch(A){if(A instanceof Ux)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(_x.CON_CLOSE,K0.CON_CLOSE,zx,x)}catch(A){this.logger.error("Failed to receive +CONCLOSE response: "+(A instanceof Error?A.message:String(A)))}}createConCloseMonitor(x){let A="",e=r=>{A+=r,A.includes(K0.CON_CLOSE)&&(A="",this.bufferState.closedByDevice=!0,x()),A.length>1e3&&(A=A.slice(-500))};return this.on("data",e),()=>{this.off("data",e)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}},N8=(x=>(x[x.FORMAT=1]="FORMAT",x[x.SIGNATURE=2]="SIGNATURE",x[x.EXPIRED=3]="EXPIRED",x[x.NO_MDN_PUBKEY=4]="NO_MDN_PUBKEY",x[x.BUSY=5]="BUSY",x[x.INTERNAL=6]="INTERNAL",x))(N8||{}),kd=require("events"),Ys="requesting-cert",Qs="cert-revoked",I8=class Ei extends kd.EventEmitter{constructor(){super(...arguments),A0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??gn,{signal:r,atHandler:t}=A,s=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),s();let n=await this.loadOrGenerateKeypair(A.storage),F=await A.storage.getCertificate(A.apiConfig.apiHost);(F===null||!pi(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(Ys),s(),F=await this.requestAndStoreCert(n,A)),this.utoMaster=new e8(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),s();let v=F;F=await t.withAtLock(async p=>{let m=await this.presentCertWithRefresh(p,v,n,A);return await p.initiateMdnSync(r),m}),this.emitPhase("ecs-handshake"),s(),await this.utoMaster.init();let E=await this.utoMaster.initiateEcsHandshake({companionPublicKey:n.publicKey,companionPrivateKey:n.privateKey,signal:r});if(!E.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${E.resultCode})`);this.emitPhase("connected");let u=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:u}}catch(n){return this.handleError(n)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let e=await A.getKeypair();if(e!==null)return e;let r=await ei();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await HF(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof wt&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new Zs(Qs,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await Ei.fetchCertOrThrowRevoked(A,e),t={base64Url:r.certificateBase64Url,notAfter:r.notAfter};return await e.storage.saveCertificate(t,e.apiConfig.apiHost),t}static async refreshCertificate(A){let e=await A.storage.getKeypair(),r=e!==null?e:await(async()=>{let n=await ei();return await A.storage.saveKeypair(n),n})(),t=await Ei.fetchCertOrThrowRevoked(r,A),s={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(s,A.apiConfig.apiHost),s}static async clearCredentials(A,e){await A.clearCertificate(e)}async presentCertWithRefresh(A,e,r,t){let s=await A.sendCompanionCert(e.base64Url,t.signal);if(s.success||s.errorCode===3&&((t.logger??gn).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(Ys),e=await this.requestAndStoreCert(r,t),s=await A.sendCompanionCert(e.base64Url,t.signal),s.success))return e;throw new Zs("cert-presenting",`AT+COMPCERT rejected (code ${s.errorCode??"?"})`,{certErrorCode:s.errorCode})}emitPhase(A){this.emit("phase",A)}fail(A,e){return this.emit("phase","error"),{success:!1,phase:A,error:e}}handleError(A){return A instanceof Zs?(this.emit("phase",A.phase===Qs?Qs:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof wt?{success:!1,phase:Ys,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};A0(I8,"encodePublicKeyBase64Url",Di);var wd=I8,Zs=class extends Error{constructor(x,A,e={}){super(A),A0(this,"phase",x),A0(this,"extra",e),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}},M8=(x=>(x.CERT_FORMAT="cert_format",x.CERT_SIGNATURE="cert_signature",x.CERT_EXPIRED="cert_expired",x.NO_MDN_PUBKEY="no_mdn_pubkey",x.DEVICE_BUSY="device_busy",x.DEVICE_INTERNAL="device_internal",x.ECS_FAILURE="ecs_failure",x.CERT_REVOKED="cert_revoked",x.SESSION_EXPIRED="session_expired",x.ABORTED="aborted",x.UNKNOWN="unknown",x))(M8||{}),_d={cert_format:"companion_auth.error.cert_format",cert_signature:"companion_auth.error.cert_signature",cert_expired:"companion_auth.error.cert_expired",no_mdn_pubkey:"companion_auth.error.no_mdn_pubkey",device_busy:"companion_auth.error.device_busy",device_internal:"companion_auth.error.device_internal",ecs_failure:"companion_auth.error.ecs_failure",cert_revoked:"companion_auth.error.cert_revoked",session_expired:"companion_auth.error.session_expired",aborted:"companion_auth.error.aborted",unknown:"companion_auth.error.unknown"};function Sd(x){if(x.certErrorCode!==void 0)switch(x.certErrorCode){case 1:return"cert_format";case 2:return"cert_signature";case 3:return"cert_expired";case 4:return"no_mdn_pubkey";case 5:return"device_busy";case 6:return"device_internal"}return x.phase==="cert-revoked"?x.httpStatus===401?"session_expired":"cert_revoked":x.phase==="ecs-handshake"?"ecs_failure":x.error==="Operation aborted"?"aborted":"unknown"}var $d=require("events");function L8(x){let A=x.replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f").map(e=>{let r=e.split(" ");return r.length<4?null:{name:r[0],scale:parseFloat(r[1]),offset:parseFloat(r[2]),unit:r[3]}}).filter(e=>e!==null):[]}function R8(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function O8(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function Bi(x,A){return x.map((e,r)=>({name:e.name,displayValue:O8(A[r]??"",e.scale,e.offset),unit:e.unit}))}var Td=2e3,G8=class extends $d.EventEmitter{constructor(x,A=QA){super(),A0(this,"atHandler",x),A0(this,"logger",A),A0(this,"datapoints",[]),A0(this,"values",[]),A0(this,"polling",!1),A0(this,"pollTimer",null),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(_x.APP_GET_METADATA),A=x.includes(K0.OK)?{supported:!0,pinRequired:!1}:x.includes(K0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(K0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(K0.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(A)),A}async fetchMetadata(x){this.logger.info("Fetching metadata"+(x?" (with PIN)":""));let A=x?`${_x.APP_GET_METADATA}=${x}`:_x.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(K0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(K0.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(e.includes(K0.OK)){let r=L8(e);return this.logger.info("Parsed "+r.length+" datapoints"),this.datapoints=r,this.values=new Array(r.length).fill(""),this.emit("metadata",r),r}return e.includes(K0.ERROR)?(this.logger.error("Metadata fetch error: "+e),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(x){return this.readValues(A=>this.atHandler.sendRaw(A),x)}async readValues(x,A){try{this.logger.debug("Fetching values");let e=A?`${_x.APP_GET_DATAVALUE}=${A}`:_x.APP_GET_DATAVALUE,r=await x(e);if(r.includes(K0.OK)){let t=R8(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",Bi(this.datapoints,t)),t}return[]}catch(e){return this.logger.warn("Value fetch error: "+(e instanceof Error?e.message:String(e))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let A=(await this.atHandler.sendRaw(_x.APP_TRIG_MEASURE_TEST)).includes(K0.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof Ux)throw x;return this.logger.warn("Measurement trigger probe failed: "+(x instanceof Error?x.message:String(x))),!1}}async triggerMeasurement(x={}){let{pin:A,timeoutMs:e=T8,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let s=await t.sendRaw(_x.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+s),!s.includes(K0.OK))return this.logger.warn("Measurement trigger rejected: "+s.trim()),{outcome:"rejected",values:[],response:s};this.emit("measurementTriggered");try{let n=await t.sendAndWait(null,K0.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(v=>t.sendRaw(v),A),response:n}}catch(n){if(n instanceof Ux)throw n;let F="timeout";return n instanceof Li?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${K0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:s}}})}async startPolling(x,A=Td){if(this.polling){this.logger.warn("Polling already active \u2014 ignoring startPolling call");return}this.logger.info("Starting polling every "+A+" ms"),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.fetchPromise=this.fetchValues(x),await this.fetchPromise,this.fetchPromise=null,this.polling&&(this.pollTimer=setInterval(()=>{this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchValues(x).finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))},A))}async stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.polling&&(this.logger.info("Polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getSnapshot(){return{datapoints:[...this.datapoints],values:[...this.values],isPolling:this.polling}}getDisplayValues(){return Bi(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function Pd(x,A,e){let r=s=>{if(s instanceof Ux)throw s},t=new G8(x);try{let s=await x.queryMdnServerConfig(e).catch(p=>(r(p),!1)),n=await t.checkSupport().catch(p=>(r(p),{supported:!1,pinRequired:!1})),F=n.supported?await t.checkMeasurementTriggerSupport().catch(p=>(r(p),!1)):!1,v=n.supported?{pinRequired:n.pinRequired,canTriggerMeasurement:F}:!1,E=!1,u=!1;if(s){let[p,m]=await Promise.all([x.queryCompanionCertSupport(e).catch(w=>(r(w),!1)),A?.getCertificate(s)]);E=p,u=m!=null&&pi(m.notAfter)}return{hostname:s,localData:v,secureConnection:E,validCert:u}}finally{t.dispose()}}var qd=require("events"),Nd={0:"trigger",1:"wakeup",2:"online"},Id={0:["2G","","GSM"],1:["2G","Compact","GSM-COMPACT"],2:["3G","","UTRAN"],3:["2G","EDGE","GSM-EGPRS"],4:["3G","HSDPA","UTRAN-HSDPA"],5:["3G","HSUPA","UTRAN-HSUPA"],6:["3G","HSPA+","UTRAN-HSXPA"],7:["4G","","EUTRAN"],8:["4G","LTE-M","LTE-CATM1"],9:["4G","NB-IoT","LTE-CATNB1"],100:["WiFi","","WIFI"],101:["LAN","Ethernet","ETHERNET"],102:["Local","Wireless","WIRELESS"],103:["Local","Wired","WIRED"]},Md={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},$x={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},Ld=$x.FAILED|$x.ACTIVE|$x.STARTED|$x.RETRY|$x.WAKEUPABLE|$x.EXTSIM|$x.DISABLED|$x.WAKEUP|$x.POSUPDATE_ACTIVE,gF=`${K0.RM2M_STATE}: `;function U8(x=0){let A=(x&$x.WAKEUPABLE)!==0,e="offline",r=A;return x&$x.POSUPDATE_ACTIVE?(e="locating",r=!1):x&$x.RETRY?(e="retry",r=!1):x&$x.STARTED?(e="dialing",r=!1):x&$x.ACTIVE?(e="active",r=!1):x&$x.FAILED?(e="failed",r=A):x&$x.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&$x.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~Ld}}function Rd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:Nd[A]??x}function Od(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:Id[A]??["unknown",`itf#${x}`,`itf#${x}`]}function Gd(x){if(x.length===0)return null;let A=x.join(",");return Md[A]??A}function H8(x){let A=x.split(","),[e,r,t,s,...n]=A;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let F=parseInt(r,10),v=Od(s),E=s!==void 0?parseInt(s,10):NaN;return{stamp:new Date,rssi:E>=101?null:parseInt(e,10),state:F,uplinkState:U8(F),uplinkMode:Rd(t),uplinkInterface:v?v[0]:null,uplinkInterfaceExtended:v?v[1]:null,uplinkInterfaceTechnical:v?v[2]:null,scriptState:Gd(n)}}function J8(x){let A=x.indexOf(gF);if(A===-1)return null;let e=x.substring(A+gF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?H8(t):null}var Ud=5e3,Hd=class extends qd.EventEmitter{constructor(x,A=gn){super(),A0(this,"atHandler"),A0(this,"logger"),A0(this,"lastState",null),A0(this,"pollingTimer",null),A0(this,"polling",!1),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(_x.RM2M_STATE),A=J8(x);return A?(this.lastState=A,this.emit("state",A),this.logger.debug("RM2M state fetched successfully")):this.logger.warn("Failed to parse RM2M state response"),A}catch(x){let A=x instanceof Error?x.message:String(x);return this.logger.error(`Failed to fetch RM2M state: ${A}`),this.emit("error",A),null}}startPolling(x=Ud){if(this.polling){this.logger.debug("Polling already active, ignoring startPolling call");return}this.logger.info(`Starting RM2M state polling every ${x}ms`),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.runGuardedFetch(),this.pollingTimer=setInterval(()=>this.runGuardedFetch(),x)}runGuardedFetch(){this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchState().finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))}async stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null),this.polling&&(this.logger.info("RM2M state polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getLastState(){return this.lastState?{...this.lastState,uplinkState:{...this.lastState.uplinkState}}:null}get isPolling(){return this.polling}dispose(){this.stopPolling(),this.lastState=null,this.removeAllListeners()}},Jd=require("events"),K8=class extends Jd.EventEmitter{constructor(){super(...arguments),A0(this,"serialNumber",""),A0(this,"serverUrl",""),A0(this,"deviceId",""),A0(this,"rssi",null),A0(this,"hasDebugSupport",!1),A0(this,"connectionState","disconnected"),A0(this,"connectionError",""),A0(this,"mtuSize",23)}get isConnected(){return this.connectionState==="connected"}setConnected(x){this.serialNumber=x.serialNumber,this.deviceId=x.deviceId,this.serverUrl=x.serverUrl??this.serverUrl,this.hasDebugSupport=x.hasDebugSupport??!1,this.mtuSize=x.mtuSize??23,this.rssi=x.rssi??null,this.connectionState="connected",this.connectionError="",this.emit("connected",this.snapshot()),this.emit("stateChange",this.snapshot())}setDisconnected(){this.connectionState="disconnected",this.rssi=null,this.emit("disconnected"),this.emit("stateChange",this.snapshot())}setError(x){this.connectionError=x,this.connectionState="disconnected",this.emit("error",x),this.emit("stateChange",this.snapshot())}setConnectionState(x){this.connectionState=x,this.emit("stateChange",this.snapshot())}updateRssi(x){this.rssi=x,this.emit("rssiUpdate",x)}reset(){this.serialNumber="",this.serverUrl="",this.deviceId="",this.rssi=null,this.hasDebugSupport=!1,this.connectionState="disconnected",this.connectionError="",this.mtuSize=23,this.emit("reset"),this.emit("stateChange",this.snapshot())}snapshot(){return{serialNumber:this.serialNumber,serverUrl:this.serverUrl,deviceId:this.deviceId,rssi:this.rssi,hasDebugSupport:this.hasDebugSupport,connectionState:this.connectionState,connectionError:this.connectionError,mtuSize:this.mtuSize,isConnected:this.isConnected}}},Kd=require("events"),z8={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},zd=class extends Kd.EventEmitter{constructor(x=QA,A){super(),A0(this,"logger",x),A0(this,"state"),A0(this,"transports",null),A0(this,"transportFactory",null),A0(this,"disconnectFn",null),A0(this,"reconnectOptions"),A0(this,"reconnectAbortController",null),this.state=new K8,this.reconnectOptions={...z8,...A}}async connect(x,A,e){this.transportFactory=x,this.disconnectFn=A,this.state.setConnectionState("connecting");try{return this.transports=await x(),this.state.setConnected(e),this.logger.info(`Connected to device ${e.serialNumber}`),this.transports}catch(r){let t=r instanceof Error?r.message:String(r);throw this.state.setError(t),this.logger.error(`Connection failed: ${t}`),r}}async disconnect(){if(this.stopReconnect(),this.disconnectFn)try{await this.disconnectFn()}catch(x){this.logger.warn(`Disconnect error: ${x}`)}this.transports=null,this.state.setDisconnected(),this.logger.info("Disconnected from device")}async reconnect(){if(!this.transportFactory||!this.disconnectFn)return this.logger.error("Cannot reconnect: no transport factory"),!1;this.state.setConnectionState("reconnecting"),this.reconnectAbortController=new AbortController;let{signal:x}=this.reconnectAbortController,A=Date.now(),e=this.reconnectOptions.initialDelay;for(;Date.now()-A<this.reconnectOptions.maxDuration;){if(x.aborted||(this.logger.info(`Reconnecting in ${e}ms...`),await this.sleep(e,x),x.aborted))return!1;try{return this.transports=await this.transportFactory(),this.state.setConnectionState("connected"),this.state.connectionError="",this.logger.info("Reconnected successfully"),this.emit("reconnected"),!0}catch(r){this.logger.warn(`Reconnect attempt failed: ${r}`),e=Math.min(e*2,this.reconnectOptions.maxDelay)}}return this.state.setError("Reconnect timeout exceeded"),this.logger.error("Reconnect failed: timeout exceeded"),this.emit("reconnectFailed"),!1}stopReconnect(){this.reconnectAbortController?.abort(),this.reconnectAbortController=null}getTransports(){return this.transports}sleep(x,A){return new Promise(e=>{let r=setTimeout(e,x);A?.addEventListener("abort",()=>{clearTimeout(r),e()},{once:!0})})}},Vd={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},Wd={service:"BC300000-0FA0-4ED4-860A-CF95434B5A4E",txCharacteristic:"BC30E1FF-0FA0-4ED4-860A-CF95434B5A4E",rxCharacteristic:"BC30E1FE-0FA0-4ED4-860A-CF95434B5A4E",txDebugCharacteristic:"BC30E201-0FA0-4ED4-860A-CF95434B5A4E",rxDebugCharacteristic:"BC30E200-0FA0-4ED4-860A-CF95434B5A4E"},Xd=590,Yd=3e4,S0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},fA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},Mn=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},Ri=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function EA(x){try{return decodeURIComponent(x)}catch{throw new S0("malformed url encoding")}}var Qd=2e3,Zd=2136;function Oi(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=Qd&&A<=Zd}function Vr(x){if(x)for(let A of["stamp","from","until"]){let e=x[A];if(typeof e=="string"&&!(A==="until"&&e==="*")&&!(A!=="stamp"&&e.trim().length===0)&&!Oi(e))throw new S0(`attribute '${A}' is not valid`)}}function xu(x){return typeof x.setMetadataValue=="function"?x:null}function Au(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function Gi(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function eu(x){return{status:200,body:x.ctx.siteInfo}}async function ru(x){let{blueprint:A}=x.ctx;if(!A)throw new fA("blueprint unavailable");return{status:200,body:A}}async function tu(x){let{me:A}=x.ctx;if(A==null)throw new fA("no profile stored");return{status:200,body:A}}function V8(x,A,e,r){let t=x.push;t&&(async()=>{try{await t.container(A,e,r)}catch(s){x.logger?.error(`[localApi] device push for tag ${A} failed:`,s)}})()}async function nu(x,A,e){let r=x.push;if(!r)return null;try{return await r.adHocChangeRequest(A,e)}catch(t){return x.logger?.error(`[localApi] change request for tag ${A} failed:`,t),null}}var su=1024;function It(x){let A=x.indexOf(0),e=A<0?x:x.subarray(0,A);try{let r=new TextDecoder("utf-8").decode(e),t=JSON.parse(r);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function W8(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(su,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var Ui=26432,or={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},X8=Object.keys(or),Mt=["standby","commissioned","offline","commissioning","online"],Ci=Mt.reduce((x,A)=>x|or[A],0)>>>0;function Y8(x){let A=0;for(let e of X8)x[e]===!0&&(A|=or[e]);return A>>>0}function Hi(x,A){let e={};for(let r of X8)x&or[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function Q8(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(Ui);if(!r?.data)return!1;let t=It(r.data);if(!t)return!1;let s=!1;if(typeof t.lifecycleFlags=="number"){let n=Hi(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(n)&&(e.lifecycle_flags=n,s=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,s=!0),s}var iu=new Set([...Mt,"service","lifecycle_state"]);function au(x,A){let e=Math.max(z0.msToStamp40((x.timeSource??qt).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function ou(x){let A=cu(x.request.body??null);if(!A)throw new S0("invalid or missing request body");Fu(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!lu(r))throw new S0("this site does not support lifecycle flags!");let t=Y8(r),s=t;for(let E of Mt){let u=A[E];typeof u=="boolean"&&(s=u?s|or[E]:s&~or[E])}if(s>>>=0,s===t)return{status:204,body:""};let n=au(e,x.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~Ci>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:s&Ci}}),stamp40:n+1}],v=Au(e.storage);return v&&await v.insertUtoChangeRequests(F.map(E=>({tag:Ui,stamp40:E.stamp40,json:E.json}))),e.siteInfo.lifecycle_flags=Hi(s,r),await Z8(e),vu(e,F),{status:204,body:""}}function Fu(x){let A=[];for(let[e,r]of Object.entries(x))iu.has(e)?(e==="lifecycle_state"?typeof r!="string":typeof r!="boolean")&&A.push(`"${e}" is not valid`):A.push(`"${e}" is not an allowed lifecycle property`);if(A.length>0)throw new S0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!Mt.includes(e)))throw new S0("invalid parameters")}async function vu(x,A){try{let e=await nu(x,Ui,A);e==="executed"?await Q8(x.storage,x.siteInfo)&&await Z8(x):e!==null&&x.logger?.warn(`[localApi] lifecycle change request not applied by the device (outcome=${e})`)}catch(e){x.logger?.error("[localApi] lifecycle device-mirror refresh failed:",e)}}async function Z8(x){await xu(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function lu(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function cu(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function xv(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0('"select" must be an array')}}function fu(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0("invalid parameter, select must be an array")}}function Eu(x,A){let e=new Map;if(A){for(let[r,t]of A)e.set(t,r);return e}for(let r of x?.fields??[]){if(Be(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function Bu(x){let A=new Map;for(let e of x.fields){if(Be(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function Cu(x){let A=new Set;for(let e of x.fields)Be(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function du(x,A,e){if(!e)return null;let r=Eu(x,A),t=new Set,s=[];for(let n of e){if(n==="stamp")continue;let F=r.get(n);F?t.add(F):s.push(n)}if(s.length>0)throw Av(s);return t}function uu(x,A){let e=Bu(x),r=[],t=[],s=!1;for(let n of A){if(n==="stamp"){s=!0,r.push("stamp");continue}let F=e.get(n);F?r.push(F):t.push(n)}if(t.length>0)throw Av(t);return s||r.unshift("stamp"),r}function Du(x,A){if(A===void 0)return;let e=Cu(x),r=A.map(s=>s.toLowerCase()),t=r.filter(s=>!e.has(s));if(t.length>0)throw new S0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function pu(x,A){if(!A)return x;let e={};for(let[r,t]of Object.entries(x))(r==="stamp"||A.has(r))&&(e[r]=t);return e}function Ji(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function Av(x){return new S0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function Ln(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function bu(x){let A=x.ctx,e=EA(x.params[1]),r=Ln(A.model,e);if(!r)throw new S0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new fA(`no data for container "${e}"`);let s=hu(A,r,t,mu(x));return{status:200,body:ev(A,e,s)}}function mu(x){let A=x.query.json??{};return xv(A.select)}function hu(x,A,e,r){let t=du(A,Nt(x.blueprint??null,A),r);return pu(e,t)}function ev(x,A,e){let r=x.model.byNameOrAlias(A);return r?g8(e,Nt(x.blueprint??null,r)):e}async function ju(x){let A=x.ctx,e=EA(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new fA(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new fA(`unknown container "${e}"`);let s=x.query.json??{},n=fu(s.select),F=Du(r,n);return{status:200,body:Ji(t,F)}}async function gu(x){let A=EA(x.params[1]);return rv(x,A,"canonical")}async function yu(x){let A=EA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new fA(`unknown container "${A}"`);return rv(x,A,"legacy")}async function rv(x,A,e){let r=Tu(x);if(!r)throw new S0("invalid or missing request body");Vr(r);let{stamp:t,...s}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new S0("value(s) of field(s) stamp are not valid");let n=x.ctx;if(e==="canonical"&&!Ln(n.model,A))throw new S0("container does not exist");let F=n.model.byNameOrAlias(A);if(F?.kind==="histdata")throw new fA(`unknown container "${A}"`);let v=e==="canonical"?_u(n,F,s):Su(F,s);try{let E=e==="canonical"&&t!==void 0?{...v,stamp:t}:v,u=await n.mapper.writeContainer(A,E);return u.devicePushable&&V8(n,u.tag,u.data,u.stamp40),{status:204,body:""}}catch(E){throw ku(E,A,e,n,F)}}function ku(x,A,e,r,t){if(x instanceof $t){let s=x.field?wu(r,t,x.field,e):void 0;return e==="canonical"?s?new S0(`no permission to modify container field \`${s}\``):new S0(`no permission to modify container \`${A}\``):s?new Mn(`unknown field name(s): ${s}`):new Ri(`no permission to modify '${A}'`)}return x}function wu(x,A,e,r){if(!A)return e;let t=A.fields.find(n=>n.name===e||n.name.toLowerCase()===e||(n.alias??n.name).toLowerCase()===e);return t?r==="legacy"?(t.alias??t.name).toLowerCase():Nt(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function _u(x,A,e){if(!A)return e;let r=Nt(x.blueprint??null,A),t=new Map;if(r)for(let[s,n]of r)t.set(n,s);else for(let s of A.fields){let n=s.alias??s.name;t.set(n,n.toLowerCase()),t.set(n.toLowerCase(),n.toLowerCase())}return tv(A,t,e,s=>new S0(`unknown field name(s): ${s}`))}function Su(x,A){if(!x)return A;let e=new Map;for(let r of x.fields){let t=r.alias??r.name;e.set(t.toLowerCase(),t.toLowerCase()),e.set(t,t.toLowerCase())}return tv(x,e,A,r=>new Mn(`unknown field name(s): ${r}`))}var $u=new Set(["stamp","stamp4","stamp8","datetime"]);function tv(x,A,e,r){let t=new Map(x.fields.map(v=>[(v.alias??v.name).toLowerCase(),v])),s={},n=[],F=[];for(let[v,E]of Object.entries(e)){let u=A.get(v);if(!u){n.push(v);continue}let p=t.get(u);if(p&&$u.has(p.type)&&!(typeof E=="string"&&Oi(E))){F.push(v);continue}s[u]=E}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new S0(`value(s) of field(s) ${F.join(",")} are not valid`);return s}function Tu(x){let A=x.query.json,e=A!=null&&typeof A=="object"&&!Array.isArray(A)?A:void 0,r=x.request.body;if(!r)return e?{...e}:null;let t=Pu(r);if(t===void 0)throw new S0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function Pu(x){try{return JSON.parse(x)}catch{return}}var nv="x-mt-backfill",sv="pending";async function Ki(x,A,e){let r=x.push?.backfill;if(!(!r||A===void 0||A===null||e===null))try{return await r.call(x.push,{fromMs:e})==="pending"?{[nv]:sv}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var qu=1e3,un=1e3,iv="20000101",av="*";async function Nu(x){let A=x.query.json??{};fv(A,["from","until","count","offset","select"]),Vr(A);let e=x.ctx,r=EA(x.params[1]),{mapperSelect:t,order:s}=Fv(e,r,A.select);vv(e,r);let n=Tn(A.from,iv,"from"),F=Tn(A.until,av,"until");lv(n,F),F!==null&&(F=Mu(F));let v=Lu(A.count),E=cv(A.offset),u=await Ki(e,A.from,n);return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:n,untilMs:F,count:v,offset:E,select:t})).map(m=>ov(x,e,r,Ji(m,s))),headers:u}}async function Iu(x){let A=x.query.json??{};fv(A,["from","until","offset","select"]),Vr(A);let e=x.ctx,r=EA(x.params[1]),t=x.params[2],{mapperSelect:s,order:n}=Fv(e,r,A.select);vv(e,r);let F=Tn(A.from,iv,"from"),v=Tn(A.until,av,"until");lv(F,v);let E=cv(A.offset),u=await Ki(e,A.from,F),m=(await e.mapper.readTimeseries(r,{fromMs:F,untilMs:v,count:t==="youngest"?-1:1,offset:E,select:s}))[0];return m?{status:200,body:ov(x,e,r,Ji(m,n)),headers:u}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:u}}function ov(x,A,e,r){return x.apiVersion==="1"?r:ev(A,e,r)}function Fv(x,A,e){let r=xv(e);if(!r)return{mapperSelect:void 0,order:null};let t=Ln(x.model,A);if(!t)return{mapperSelect:r,order:null};let s=uu(t,r),n=s.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:s}}function vv(x,A){if(!Ln(x.model,A))throw new S0("timeseries does not exist")}function Tn(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return zr(t)}catch{throw new S0(`attribute '${e}' is not valid`)}}function lv(x,A){if(x!==null&&A!==null&&x>A)throw new S0('E_BAD_REQUEST "from" value must be older than "until"')}function Mu(x){let A=z0.msToStamp40(x);return z0.stamp40ToMS(A)>=x&&(A-=1),z0.stamp40ToMS(A)}function Lu(x){if(x==null||x==="")return qu;let A=Number(x);if(!Number.isInteger(A))throw new S0('"count" must be an integer');if(A===0)throw new S0("`count` cannot be 0");if(A<-un)throw new S0(`"count" must be greater than or equal to -${un}`);if(A>un)throw new S0(`"count" must be less than or equal to ${un}`);return A}function cv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new S0('"offset" must be an integer');if(A<0)throw new S0('"offset" must be greater than or equal to 0');return A}function fv(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new S0(`"${e}" is not allowed`)}var Ru=1e5,Ou="20000101",Gu="*";async function Uu(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new fA(`unknown container "${e}"`);let s=x.query.json??{};Vr(s);let{fromMs:n,untilMs:F}=Ku(s);zu(n,F);let v=Vu(s),E=Wu(s),u=Ev(t,s.select)??["stamp"],p=Pn(s.from)?await Ki(r,s.from,n):void 0,m=u.filter(S=>S!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:n,untilMs:F,count:v,offset:E,select:m.length>0?m:void 0})).map(S=>u.map(P=>P==="stamp"?S.stamp:S[P]??null)),headers:p}}async function Hu(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.params[2],t=x.ctx,s=t.model.byNameOrAlias(e);if(!s)throw new fA(`unknown container "${e}"`);let n=x.query.json??{};Vr(n);let F=Ev(s,n.select)??["stamp"],v=Ju(n),E=F.filter(m=>m!=="stamp"),p=(await t.mapper.readTimeseries(e,{fromMs:null,untilMs:v??null,count:v!==void 0||r==="youngest"?-1:1,select:E.length>0?E:void 0}))[0];return p?{status:200,body:[F.map(m=>m==="stamp"?p.stamp:p[m]??null)]}:{status:200,body:[]}}function Ju(x){if(!(!Pn(x.until)||x.until==="*"))try{return zr(String(x.until))??void 0}catch{throw new S0("from or until value invalid")}}function Ku(x){let A=Pn(x.from),e=Pn(x.until);if((!A||!e)&&!zi(x.count))throw new S0("missing or invalid parameters (from and until and/or count)");return{fromMs:yF(A?x.from:Ou),untilMs:yF(e?x.until:Gu)}}function zu(x,A){if(x!==null&&A!==null&&x>A)throw new S0('"from" value must be older than "until"')}function yF(x){let A=String(x);try{return zr(A)}catch{throw new S0(`invalid stamp "${A}"`)}}function Vu(x){if(!zi(x.count))return Ru;if(typeof x.count!="number")throw new S0("invalid parameter count");return x.count}function Wu(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new S0("invalid parameter offset");return A}function Ev(x,A){if(A==null)return;if(!Array.isArray(A))throw new S0("invalid parameter, select must be an array");let e=A.map(F=>String(F).toLowerCase()),r=e.filter(F=>F.includes(" "));if(r.length>0)throw new S0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],s=new Set(x.fields.filter(F=>!Be(F)).map(F=>(F.alias??F.name).toLowerCase()));s.add("stamp");let n=t.filter(F=>!s.has(F));if(n.length>0)throw new S0(`invalid channel(s) ${n.join(",")}`);return t}function zi(x){return!!x}function Pn(x){return typeof x=="string"?x.trim().length>0:zi(x)}var Xu="device_id";function Yu(x){return async A=>(await Rn(A),{status:200,body:await Zu(A.ctx,x)})}async function Rn(x){let A=EA(x.params[0]),e=await Qu(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new fA(`unknown device "${A}"`)}async function Qu(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(Xu)}async function Zu(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=It(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=Jr(z0.stamp40ToMS(YA(e.stamp))),r):{}}function Vi(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function xD(x){return async A=>{await Rn(A);let e=rD(A.request.body??null);if(!e)throw new S0("invalid or missing request body");return Vi(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?It(r.data)??{}:{};return await Wi(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function AD(x){return async A=>(await Rn(A),Vi(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await Wi(A.ctx,x,e,{}),{status:204,body:""})}))}function eD(x){return async A=>{await Rn(A);let e=EA(A.params[1]);return Vi(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=It(r.data)??{},s=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===s&&delete t[n];return await Wi(A.ctx,x,r,t),{status:204,body:""}})}}function rD(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}async function Wi(x,A,e,r){let t=W8(JSON.stringify(r),e?.data?.length??0),s=z0.msToStamp40((x.timeSource??qt).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:cA(s),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),V8(x,A,t,s)}var Bv={"content-type":"application/json"},tD=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:tu,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:eu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:ru,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:ou,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:Iu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:Nu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:bu,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:gu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:Hu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:Uu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:ju,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:yu,checksUid:!0},...nD()];function nD(){let x={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},A={"sys-flash":26433,"app-flash":26435},e=Object.entries(x).map(([t,s])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:Yu(s),checksUid:!1})),r=Object.entries(A).flatMap(([t,s])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:xD(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:AD(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:eD(s),checksUid:!1}]);return[...e,...r]}var sD=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function iD(x){let A=Gi();return e=>Cv(x,e,A)}async function Cv(x,A,e=Gi()){try{let[r,t]=FD(A.path),s=vD(t),n=oD(r,x);if(n===null)return ar(404,"E_NOT_FOUND","unknown customer");let F=A.method.toUpperCase();for(let v of tD){if(v.method!==F)continue;let E=v.pattern.exec(n);if(!E)continue;let u=E.slice(1);if(v.checksUid&&!aD(x,u[0]))return ar(404,"E_NOT_FOUND","unknown site");let p=/^\/api\/([12])\//.exec(n)?.[1]??"1",m=await v.handler({request:A,params:u,query:s,ctx:x,session:e,apiVersion:p});return fD(m)}return ar(404,"E_NOT_FOUND","not found")}catch(r){return uv(r)}}function aD(x,A){return x.allowAnySiteUid===!0||A!==void 0&&EA(A)===x.siteUid}function oD(x,A){let e=sD.exec(x);if(!e)return x;let r=EA(e[2]).toLowerCase();return(A.siteInfo.customer_id??"").toLowerCase()===r||(A.siteInfo.customer_uid??"").toLowerCase()===r?`/api/${e[1]}/sites/${e[3]}`:null}function FD(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function vD(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&lD(A,e);return A}function lD(x,A){let e=A.indexOf("="),r=EA(e<0?A:A.slice(0,e)),t=e<0?"":EA(A.slice(e+1));r==="json"?x.json=cD(t):x.params[r]=t}function cD(x){try{return JSON.parse(x)}catch{throw new S0("request supplied data which is not json formatted ")}}function fD(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...Bv,...x.headers},body:A}}function dv(x,A){return{status:x,headers:{...Bv},body:JSON.stringify(A)}}function uv(x){return x instanceof S0||x instanceof Ii||x instanceof ki?ar(400,"E_BAD_REQUEST",x.message):x instanceof Mn||x instanceof $t?ar(403,"E_FORBIDDEN",x.message):x instanceof Ri?ar(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof fA||x instanceof Ie?ar(404,"E_NOT_FOUND",x.message):dv(500,{err:x instanceof Error?x.message:String(x)})}function ar(x,A,e){return dv(x,{err:`${A} ${e}`})}function ED(x,A){let e=A.apmId??"local",r=A.version??1;return{uid:A.siteUid,name:A.name??A.siteUid,customer_id:e,customer_uid:e,app:{apmid:e,version:String(r)},device:{device_id:A.deviceId,lifecycle_flags:{}},lifecycle_flags:{},containers:x.containers.map(t=>({name:t.name,alias:t.alias??t.name,kind:t.kind}))}}});var xb={};ff(xb,{default:()=>dc,deviceExitCode:()=>Cc,program:()=>uA});module.exports=Ef(xb);var J0=require("commander"),Yt=U0(require("chalk"));var js={name:"@microtronics/studio-cli",version:"1.2.0",description:"Microtronics Studio CLI Tool",main:"./out/api.js",typings:"./out/studio-cli.d.ts",bin:{"studio-cli":"studio-cli"},publishConfig:{access:"public"},scripts:{compile:"npm run build:registryApiTypings && tsc","build:cli":"node build.mjs","build:exe":"node build-exe.mjs",api:"api-extractor run --local --verbose",build:"npm run compile && npm run api && npm run build:cli","watch:build":"npm run compile -- --watch",test:"cross-env STUDIO_ENV=lucky mocha","test-ci":"cross-env STUDIO_ENV=lucky mocha --reporter mocha-junit-reporter","watch:test":"npm run test -- --watch",prepublishOnly:"npm run build","build:registryApiTypings":"npx openapi-typescript https://api.registry.lucky.ci.microtronics.com/v1/openapi.yaml -o ./src/typings/registry.ts"},author:"Microtronics",license:"ISC",dependencies:{"@gera2ld/tarjs":"^0.3.1",ajv:"^8.17.1","ajv-formats":"^3.0.1","ajv-keywords":"^5.1.0",chalk:"^5.4.1",commander:"^12.1.0","cross-fetch":"^4.0.0","deepmerge-ts":"^7.1.5",dotenv:"^16.4.7","file-type-checker":"^1.1.2",glob:"^11.0.1","iconv-lite":"^0.6.3","image-dimensions":"^2.3.0",ini:"^5.0.0",minimatch:"^10.0.1","openapi-fetch":"^0.13.0",pako:"^2.1.0",semver:"^7.7.2","sql.js":"^1.14.2","tinytar-fix":"^0.1.1","update-notifier":"^7.3.1",usb:"^2.14.0",uuid:"^9.0.1","vscode-uri":"^3.0.8",yaml:"^2.6.1"},engines:{node:">= 22"},devDependencies:{"@microsoft/api-extractor":"^7.47.11","@microtronics/device-master":"bitbucket:microtronics-core/device-master#v4.1.0","@types/chai":"^4.3.6","@types/chai-as-promised":"^7.1.5","@types/ini":"^4.1.1","@types/mocha":"^10.0.9","@types/node":"^22.9.1","@types/semver":"^7.5.6","@types/sql.js":"^1.4.11","@types/update-notifier":"^6.0.8","@types/vscode":"^1.86.2","@yao-pkg/pkg":"^6.22.0",chai:"^4.3.8","chai-as-promised":"^7.1.2","cross-env":"^7.0.3",esbuild:"^0.27.3","extract-zip":"^2.0.1",mocha:"^10.8.2","mocha-junit-reporter":"^2.2.1","openapi-typescript":"^7.6.0","pawncc-wasm":"bitbucket:microtronics-core/pawncc-wasm#v1.1.1",resedit:"^3.0.2",tar:"^7.5.7","ts-node":"^10.9.2",typescript:"^5.6.3"},mocha:{require:["ts-node/register"],"watch-files":"src/**",spec:"./test/**/*.spec.ts",recursive:!0},files:["out/api.js","out/studio-cli.d.ts","dist/main.js","dist/studio-cli.d.ts","studio-cli","CHANGELOG.md"]};var gA=U0(require("node:fs/promises"));var bt=require("vscode-uri"),Va=require("glob"),ve={readFile(x){return gA.default.readFile(x.fsPath)},async rm(x){if(await this.stat(x))return gA.default.rm(x.fsPath,{recursive:!0})},async stat(x){try{let A=await gA.default.stat(x.fsPath),e=(A.isDirectory()?2:0)|(A.isFile()?1:0)|(A.isSymbolicLink()?64:0);return{ctime:A.ctimeMs,mtime:A.mtimeMs,permissions:void 0,size:A.size,type:e}}catch{return null}},async writeFile(x,A){typeof A=="string"&&(A=new TextEncoder().encode(A));let e=bt.Utils.dirname(x);return await gA.default.mkdir(e.fsPath,{recursive:!0}),gA.default.writeFile(x.fsPath,A,{flag:"w"})},async findFiles(x,A,e){let r={ignore:e,nodir:!0,absolute:!0,dot:!0,cwd:x.fsPath};return(await(0,Va.glob)(A,r)).map(s=>{let n=s.replace(/\\/g,"/");return bt.URI.parse(`file:///${n}`)})},async copy(x,A){let e=await gA.default.stat(x.fsPath);return await gA.default.mkdir(bt.Utils.dirname(A).fsPath,{recursive:!0}),e.isDirectory()?gA.default.cp(x.fsPath,A.fsPath,{force:!0,recursive:!0}):gA.default.copyFile(x.fsPath,A.fsPath)},async mkdir(x){await gA.default.mkdir(x.fsPath,{recursive:!0})}};var xt=require("vscode-uri");var de=require("vscode-uri");var Pr=require("vscode-uri");var Cf=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function nn(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^Cf[(e^x[r])&255];return(e^-1)>>>0}var lb=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),cb=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);var j0;(w=>{function x(j,S){let[P,N]=S,{line:O,col:L}=j.linePos(P);return{line:Number(O)-1,startCharacter:L-1,endCharacter:L+(N-P)}}w.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(j){return nn(A.encode(j)).toString(16)}w.generateHashForLibraryName=e;function r(j){return nn(A.encode(j)).toString(16)}w.generateHashForFilePath=r;function t(j){return nn(j).toString(16).toUpperCase().padStart(8,"0")}w.generateCRC32ForFileContent=t;function s(j){try{let S=null;return j?.type==="Buffer"?S=Uint8Array.from(j.data):S=j,new TextDecoder("utf8").decode(S)}catch{return""}}w.convertBlobToString=s;function n(j=""){return j.replace(/\r\n|\n\r|\r/g,`
2199
- `)}w.normalizeLF=n;function F(j){try{let S=s(j);return n(S).split(`
2200
- `)}catch{return[]}}w.convertBlobToStringArray=F,w.isNumeric=j=>!Array.isArray(j)&&j-parseFloat(j)+1>=0;function E(j){let S="",P=j.byteLength;for(let N=0;N<P;N++)S+=String.fromCharCode(j[N]);return btoa(S)}w.bufferToBase64=E;function u(j,S){let P=`${j}`.match(/\{\d*(index)(\+\d*)?}/g);if(P){let N=j;return P.forEach(O=>{let L=O.replace(/\+0$/,""),t0=L.match(/index/)?.[0];if(t0){let M=L.slice(1,-1).split(t0)[1],k=parseInt(M)||0;N=N.replace(O,`${S+k}`)}}),N}else return j}w.patchValueWithArrayInfo=u;let p={};function m(j,S,P){let N=p[j];N&&clearTimeout(N.timer),p[j]={timer:setTimeout(()=>{delete p[j],P()},S),handler:P}}w.defer=m})(j0||={});var co=require("image-dimensions"),fo=require("file-type-checker");var Nb=require("cross-fetch/polyfill"),Fo=U0(require("openapi-fetch"));var Te=require("vscode-uri");var px=require("vscode-uri");var JA=U0(require("semver"));var Lx="dist/",Wa="dde/",gs="dlo/",ys=".studio/",Xa="dfiles/",r0;(v=>{v.fileNames={projectSettings:"studio.json",mainAmx:"main.amx",mainAmxReport:"main.xml",ddeXml:"dde.xml",ddeOpenApi:"main.yaml",historyJson:"history.json",mainDDE:"main.dde",autoInc:"auto.inc",defaultInc:"default.inc",autoUplinkInc:"app-uplink.inc",autoDdeInc:"X-dde.inc",mainDdeInc:"main-dde.inc",autoLocalDataInc:"auto-local-data.inc",legacyAutoInc:"legacy-auto.inc",legacyAutoDdeInc:"legacy-auto-dde.inc",legacyAutoUplinkInc:"legacy-auto-uplink.inc",reportTemplate:"mdn_report_template.json",dloCfg:"dlo.cfg",devMirror:"mirror.json",devDeviceLog:"device.jsonl"};let A=`${ys}auto/`,e=`${ys}dev/`,r=`${A}dlo/`,t=`${A}dde/`;v.filePaths={studio:{initFile:`${A}.init`,auto:{path:A,dlo:{path:r,autoInc:`${r}${v.fileNames.autoInc}`,defaultInc:`${r}${v.fileNames.defaultInc}`,autoUplinkInc:`${r}${v.fileNames.autoUplinkInc}`,autoLocalDataInc:`${r}${v.fileNames.autoLocalDataInc}`,autoDdeInc:`${r}${v.fileNames.autoDdeInc}`,mainDdeInc:`${r}${v.fileNames.mainDdeInc}`,legacyAutoInc:`${r}${v.fileNames.legacyAutoInc}`,legacyAutoDdeInc:`${r}${v.fileNames.legacyAutoDdeInc}`,legacyAutoUplinkInc:`${r}${v.fileNames.legacyAutoUplinkInc}`,cfg:`${r}${v.fileNames.dloCfg}`},dde:{path:t,historyJson:`${t}${v.fileNames.historyJson}`}},libdeps:`${ys}libdeps/`,dev:{path:e,mirror:`${e}${v.fileNames.devMirror}`,deviceLog:`${e}${v.fileNames.devDeviceLog}`}},dist:{path:Lx,dloPath:`${Lx}dlo/`,mainAmxPath:`${Lx}dlo/${v.fileNames.mainAmx}`,mainAmxReportPath:`${Lx}dlo/${v.fileNames.mainAmxReport}`,ddeXmlPath:`${Lx}dde/${v.fileNames.ddeXml}`,ddeApiPath:`${Lx}api/`,ddeApi:`${Lx}api/${v.fileNames.ddeOpenApi}`,historyJson:`${Lx}dde/${v.fileNames.historyJson}`,povPath:`${Lx}pov`,povDetailsPath:`${Lx}pov/details`,dfilesPath:`${Lx}dfiles`,dfilesProperties:`${Lx}dfiles/properties.json`,bloPath:`${Lx}blo`,reportTemplate:`${Lx}/${v.fileNames.reportTemplate}`,definesTs:`${Lx}defines.ts`,definesAppTs:`${Lx}defines.app.ts`},dlo:{path:gs,mainDLO:`${gs}main.dlo`,mainINI:`${gs}main.ini`},dde:{path:Wa,mainDDE:`${Wa}main.dde`},dfiles:{path:Xa,mainDFILES:`${Xa}/main.dfiles`},appIni:"app.ini",defaultsIni:"defaults.ini"},v.readme=E=>`# ${E} README
2198
+ `).entries()){A.line=e;let t=r.trim();t===""||t.startsWith("//")||jC(A,t)||t.includes("=")&&gC(A,t)}return hC(A.containers,A.splits)}var l8=null,kC=4;function Kr(x){let A=new Date(x),e=(r,t)=>r.toString().padStart(t,"0");return e(A.getUTCFullYear(),4)+e(A.getUTCMonth()+1,2)+e(A.getUTCDate(),2)+e(A.getUTCHours(),2)+e(A.getUTCMinutes(),2)+e(A.getUTCSeconds(),2)+e(A.getUTCMilliseconds(),3)}function Vr(x){let A=x.trim();if(A==="*")return l8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(u,D,m)=>{let w=A.slice(u,u+D);return parseInt(w.length?w.padEnd(D,"0"):m,10)},r=parseInt(A.slice(0,kC),10),t=A.length>=6?e(4,2,"01"):1,i=A.length>=8?e(6,2,"01"):1,n=e(8,2,"00"),F=e(10,2,"00"),v=e(12,2,"00"),E=e(14,3,"000");return Date.UTC(r,t-1,i,n,F,v,E)}var St="NAN",wC="%HEX%",_C=65535,ws=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),A0(this,"alias",x),this.name="DdeUnknownAliasError"}};function In(x){return(x.alias??x.name).toLowerCase()}function Mn(x){return x==="string"}function _s(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function c8(x){return(x.editmask??"").toUpperCase()===wC}function SC(x,A){return A===void 0||!Number.isFinite(x)?x:Ss(x,A)}function Ss(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function $C(x,A){if(!Number.isFinite(x)||x===0)return x;let e=Math.abs(x),r=Math.floor(Math.log10(e));return 10**(r+1)<=e?r+=1:10**r>e&&(r-=1),Ss(x,A-1-r)}function TC(x){return x==="floatm16"||x==="f32"||x==="f64"}function PC(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(TC(x.type)?9:0),r=Ss(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return $C(r,t)}function _n(x,A){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),r=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,i=1n;for(;r!==0n;)r&1n&&(e&1n&&(t|=i),i<<=1n),e>>=1n,r>>=1n;return Number(t)}function f8(x,A,e){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),i=BigInt.asUintN(64,BigInt(Math.trunc(e))),n=1n;for(;i!==0n;)i&1n&&(r=t&1n?r|n:r&~n,t>>=1n),i>>=1n,n<<=1n;return Number(r)}var qC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Sn(x){return!!x.bitmask&&qC.has(x.type)}var E8=255,B8=254,C8=253,d8=252,u8=251,NC=207,$s=65535,$n=65534,Ts=65533,Ps=65532,qs=65531;function IC(x){switch(x){case E8:return $s;case B8:return $n;case C8:return Ts;case d8:return Ps;case u8:return qs;default:return x<=31?x:x>NC?$n:(x&15|16)<<(x>>4)-1}}function MC(x){switch(x){case $s:return E8;case $n:return B8;case Ts:return C8;case Ps:return d8;case qs:return u8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var Tn=1023,os=31,D8=127,Hi=8388607,LC=255,Fs=15,RC=-14,pF=15;function p8(x){let A=(x&Tn)<<13,e=(x&31744)>>10;if(e===os)return m8(1024-(x&Tn));e!==0&&(e=e-Fs+4+D8);let r=(A|e<<23)>>>0;x&32768&&(r=(r|2147483648)>>>0);let t=new DataView(new ArrayBuffer(4));return t.setUint32(0,r),t.getFloat32(0)}function b8(x){if(typeof x=="string"||Number.isNaN(x))return _C;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&Hi)+4096,i=(t>Hi?1:0)+(e>>>23&LC),n=(t&Hi)>>>13;return i!==0&&(i=i-D8-4,i<RC?(n=0,i=0):i>pF?(n=Tn,i=pF+Fs):i=i+Fs),r|i<<10|n}var OC=["OF","UF","OL","SC"],vs={u8:{NAN:255,OF:254,UF:253,OL:252,SC:251},u16:{NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},u32:{NAN:4294967295,OF:4294967294,UF:4294967293,OL:4294967292,SC:4294967291},s8:{NAN:127,OF:126,UF:-126,OL:-127,SC:-128},s16:{NAN:32767,OF:32766,UF:-32766,OL:-32767,SC:-32768},s32:{NAN:2147483647,OF:2147483646,UF:-2147483646,OL:-2147483647,SC:-2147483648},s64:{NAN:0x7fffffffffffffffn,OF:0x7ffffffffffffffen,UF:-0x7ffffffffffffffen,OL:-0x7fffffffffffffffn,SC:-0x8000000000000000n},ufm8:{NAN:$s,OF:$n,UF:Ts,OL:Ps,SC:qs}},GC={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},Wx={NAN:1,OF:2,UF:3,OL:4,SC:5},UC=new Set(["u8","u16","u32","ufm8"]);function HC(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function Ns(x){let A=x.replace(/,/g,"").trim();if(!/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(A))return null;let e=Number(A);return Number.isFinite(e)?e:null}function Is(x,A,e){switch(x){case"u8":return A.getUint8(e);case"s8":return A.getInt8(e);case"u16":return A.getUint16(e,!1);case"s16":return A.getInt16(e,!1);case"u32":return A.getUint32(e,!1);case"s32":return A.getInt32(e,!1);case"s64":return Number(A.getBigInt64(e,!1));case"f32":return A.getFloat32(e,!1);case"f64":return A.getFloat64(e,!1);case"floatm16":return p8(A.getUint16(e,!1));case"ufm8":return IC(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function m8(x){switch(x){case Wx.OF:return"OF";case Wx.UF:return"UF";case Wx.OL:return"OL";case Wx.SC:return"SC";default:return St}}var bF=[["NAN",Wx.NAN],["OF",Wx.OF],["UF",Wx.UF],["OL",Wx.OL],["SC",Wx.SC]];function JC(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?Wx.NAN:(r=r&4194304?8388608-r:r&255,r===0?Wx.NAN:r)}function KC(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?Wx.NAN:r}function zC(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);Sn(x)&&(t=BigInt(_n(Number(t),x.bitmask)));let i=vs.s64;return bF.find(([n])=>t===BigInt(i[n]))?.[1]??0}let e=vs[x.type];if(!e)return 0;let r=Is(x.type,A,x.byteofs);return Sn(x)&&(r=_n(r,x.bitmask)),bF.find(([t])=>r===e[t])?.[1]??0}function h8(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&os)===os?1024-(e&Tn):0}case"f32":return JC(A,x.byteofs);case"f64":return KC(A,x.byteofs);default:return zC(x,A)}}function j8(x,A){let e=Is(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(Sn(x)&&(e=_n(e,x.bitmask)),e*x.vscale+x.vofs)}function VC(x,A){let e=h8(x,A);if(e!==0)return m8(e);let r=j8(x,A);return Number.isNaN(r)?St:PC(x,r)}function WC(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(Mn(x.type)||_s(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return h8(x,e)!==0?NaN:j8(x,e)}function XC(x,A){if(c8(x)){let e="";for(let r=0;r<x.size;r++)e+=A.getUint8(x.byteofs+r).toString(16).padStart(2,"0");return e.toUpperCase()}return z0.cp1252Unpack(A,x.byteofs,x.size)}var g8=25569,y8=864e5;function YC(x){return(x-g8)*y8}function QC(x){return x/y8+g8}function ZC(x,A){if(x.type==="datetime")return Kr(YC(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return Kr(z0.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),Kr(z0.stamp40ToMS(e))}var xd=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Ad(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function ed(x){let A=x.default;if(A===void 0)return;if(Mn(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===St)return St;if(xd.has(x.type))return Ad(e,0);let r=Ns(e);return r!==null?r:A}function rd(x,A,e){return x.byteofs+x.size>e?ed(x):Mn(x.type)?XC(x,A):_s(x.type)?ZC(x,A):VC(x,A)}function ls(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)Ce(t)||_t(t.type)||(r[In(t)]=rd(t,e,A.byteLength));return r}function td(x,A){if(typeof A=="number")return Number.isFinite(A)?{kind:"value",physical:A}:{kind:"sentinel",state:"NAN"};if(typeof A=="string"){if(A.toUpperCase()===St||A==="")return{kind:"sentinel",state:"NAN"};let e=OC.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=Ns(A);return r!==null?{kind:"value",physical:r}:mF(x)}return mF(x)}function mF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?Ns(A):null)??0}}function cs(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,GC[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|Wx[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(Wx[e]),!1);default:break}let r=vs[x.type]?.[e];if(r===void 0)throw new Error(`?ddeCodec.non-numeric-type."${x.type}"`);if(x.type==="s64")return A.setBigInt64(x.byteofs,BigInt(r),!1);k8(x,A,Number(r))}function nd(x,A,e){if(x.vscale===0)return;let r=(e-x.vofs)/x.vscale;switch(x.type){case"f32":return A.setFloat32(x.byteofs,r,!1);case"f64":return A.setFloat64(x.byteofs,r,!1);case"floatm16":return A.setUint16(x.byteofs,b8(r),!1);default:break}if(Number.isNaN(r))return cs(x,A,"NAN");if(!Number.isFinite(r))return cs(x,A,"OF");let t=r;UC.has(x.type)&&t<0&&(t=0),k8(x,A,HC(t))}function k8(x,A,e){if(Sn(x)){let r=Is(x.type,A,x.byteofs);e=f8(r,e,x.bitmask)}id(x.type,A,x.byteofs,e)}function id(x,A,e,r){switch(x){case"u8":return A.setUint8(e,r);case"s8":return A.setInt8(e,r);case"u16":return A.setUint16(e,r,!1);case"s16":return A.setInt16(e,r,!1);case"u32":return A.setUint32(e,r,!1);case"s32":return A.setInt32(e,r,!1);case"s64":return A.setBigInt64(e,BigInt(r),!1);case"ufm8":return A.setUint8(e,MC(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function sd(x,A,e){let r=String(e);if(c8(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${In(x)}"`);for(let i=0;i<x.size;i++){let n=i*2<t.length?parseInt(t.substr(i*2,2),16):0;A.setUint8(x.byteofs+i,n)}return}z0.cp1252Pack(A,x.byteofs,x.size,r)}function ad(x,A,e){let r=Vr(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${In(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,QC(r),!1);return}let t=z0.msToStamp40(r);if(x.type==="stamp8"){A.setBigUint64(x.byteofs,BigInt(t),!1);return}A.setUint32(x.byteofs,Math.trunc(t/256),!1),x.size>=5&&A.setUint8(x.byteofs+4,t&255)}function od(x,A,e){if(Mn(x.type))return sd(x,A,e);if(_s(x.type))return ad(x,A,e);let r=td(x,e);switch(r.kind){case"skip":return;case"sentinel":return cs(x,A,r.state);case"value":return nd(x,A,r.physical)}}function fs(x,A,e){let r=e?new Uint8Array(e):new Uint8Array(x.recordSize),t=new DataView(r.buffer,r.byteOffset,r.byteLength),i=new Map(x.fields.filter(n=>!Ce(n)&&!_t(n.type)).map(n=>[In(n),n]));for(let[n,F]of Object.entries(A)){let v=i.get(n.toLowerCase());if(!v)throw new ws(n);od(v,t,F)}return r}var hF=99,Fd=256,Me=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),A0(this,"container",x),this.name="DdeUnknownContainerError"}},$t=class extends Error{constructor(x,A){let e=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${e}"`),A0(this,"container",x),A0(this,"field",A),this.name="DdeWriteForbiddenError"}},Ms=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),A0(this,"field",x),this.name="DdeUnknownFieldError"}};function Ji(x){return(x.alias??x.name).toLowerCase()}var vd=class{constructor(x,A,e=qt){A0(this,"model",x),A0(this,"storage",A),A0(this,"timeSource",e)}async readContainer(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=yt(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=ls(await this.resolveScaleRefs(A),r.data);return delete t.stamp,{stamp:this.rowStamp(r),...t}}async writeContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Me(x);let r=yt(e);if(r===null)throw new Me(x);if(e.edit===hF)throw new $t(e.name);let{stamp:t,...i}=A;this.assertFieldsWritable(e,i);let n=await this.storage.getRowForTag(r),F=fs(await this.resolveScaleRefs(e),i,n?.data??null),v=z0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),E=fA(v);return await this.storage.replaceUtoRow({tag:r,stamp:E,flags:n?.flags??0,site_related:n?.site_related??0,data:F}),{tag:r,stampHex:E,stamp40:v,data:F,devicePushable:F8(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Me(x);let r=yt(e);if(r===null)throw new Me(x);let{stamp:t,...i}=A,n=fs(await this.resolveScaleRefs(e),i,null),F=z0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:fA(F),flags:0,site_related:0,data:n})}recordStampMs(x){if(typeof x!="string")return null;try{return Vr(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Me(x);let r=this.model.splits.find(E=>E.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new Me(x);let t=Math.abs(A.count),i=A.offset??0,n=this.buildSelectSet(e,A.select),F=await this.resolveScaleRefs(e);return(await this.collectMatched(F,r,i+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:n})).slice(i,i+t)}matchesSplit(x,A){return x.length===0?!1:A.matchAll?!0:x.length<A.keyBytes.length?!1:A.keyBytes.every((e,r)=>x[r]===e)}async collectMatched(x,A,e,r){let t=[];if(e<=0)return t;let i=Math.max(e,Fd);for(let n=0;;n+=i){let F=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:i,offset:n});for(let v of F)if(v.data&&this.matchesSplit(v.data,A)&&(t.push(this.recordFromRow(x,v,r.selectSet)),t.length>=e))return t;if(F.length<i)return t}}async readTimeseriesEdge(x,A,e){return(await this.readTimeseries(x,{count:A==="youngest"?-1:1,select:e}))[0]??null}recordFromRow(x,A,e){let r=ls(x,A.data),t={stamp:this.rowStamp(A)};for(let[i,n]of Object.entries(r))i!=="stamp"&&(!e||e.has(i))&&(t[i]=n);return t}rowStamp(x){return Kr(z0.stamp40ToMS(QA(x.stamp)))}boundHex(x){if(x!=null)return fA(z0.msToStamp40(x))}async resolveScaleRefs(x){if(!x.fields.some(r=>r.vscaleRef||r.vofsRef))return x;let A=new Map,e=[];for(let r of x.fields){if(!r.vscaleRef&&!r.vofsRef){e.push(r);continue}e.push({...r,vscale:r.vscaleRef?await this.resolveRef(r.vscaleRef,A,r.vscale):r.vscale,vofs:r.vofsRef?await this.resolveRef(r.vofsRef,A,r.vofs):r.vofs})}return{...x,fields:e}}async resolveRef(x,A,e){if(!/^config[0-9a-f]$/i.test(x.container))return e;let r=this.referencedField(x);if(!r)return e;let t=x.container.toLowerCase();A.has(t)||A.set(t,await this.referencedRecordData(x.container));let i=A.get(t);if(!i)return e;let n=WC(r,i);return n===null?e:n}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>Ji(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=yt(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!Ce(r)&&!_t(r.type)).map(r=>[Ji(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===hF)throw new $t(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!Ce(t)&&!_t(t.type)).map(t=>Ji(t))),r=new Set;for(let t of A){let i=t.toLowerCase();if(i!=="stamp"){if(!e.has(i))throw new Ms(t);r.add(i)}}return r}},ld=new Set(["$titles","$meta"]);function cd(x){let A=x;if(typeof x=="string")try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function Es(x,A){let e=A.toLowerCase();if(ld.has(e))return null;let r=x[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[i,n]of Object.entries(r)){if(typeof n!="object"||n===null)continue;let F=n.alias;typeof F=="string"&&F.length>0&&t.set(i.toLowerCase(),F)}return t}function w8(x,A){let e={};for(let[r,t]of Object.entries(x)){if(r==="stamp"){e[r]=t;continue}let i=A?.get(r.toLowerCase());e[i??r]=t}return e}function Nt(x,A){if(!x)return null;let e=Es(x,A.name);return e||(A.alias?Es(x,A.alias):null)}var fd=require("events"),O0="[OfflineSyncManager]",Ed=500,Bd="site_info",Cd=new Set(["local-data-interface.json"]);function Ox(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function dd(x){let A=kn(x);return!!(x&2)||A!==0&&A!==65}function jF(x){return x.filter(A=>(A.filename===Jr||A.filename===hs)&&A.outcome==="download").map(A=>A.filename)}var rr="skip-equal",Hr="skip-device-readonly",Ki="delete",Ne="error",zi="upload",Vi="uploading-utos",gF="downloading-utos",dn="fetching-device-state",Wi="uploading-files",un="downloading-files",yF="executing-change-requests",kF="executed",ud="error",Xi="skip-old-stamp",Dd=class extends fd.EventEmitter{constructor(x,A,e){super(),A0(this,"utoMaster",x),A0(this,"storage",A),A0(this,"logger",e)}emitProgress(x,A,e,r,t){let i={phase:x,item:A,completed:e,total:r,...t};this.emit("progress",i)}async uploadHistoricTag(x,A,e,r,t){try{let i=await this.storage.getRowForTag(x),n=0,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>({tag:x,stamp:fA(u.stamp40),flags:i?.flags??0,site_related:i?.site_related??0,data:u.data}));await this.storage.insertHistoricRows(E),n+=E.length};return await this.utoMaster.requestHistoricUtos(x,e,t,void 0,Ed,F),this.logger?.info(`${O0} historic upload tag=0x${x.toString(16)} +${n} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:n}}catch(i){return this.logger?.error(`${O0} historic upload error tag=0x${x.toString(16)}: ${i}`),{tag:x,sTag:A.sTag,historic:!0,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadSingleTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t)return this.logger?.info(`${O0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:rr,dbStamp40:e,deviceStamp40:r};let i=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:fA(t.stamp),flags:i?.flags??0,site_related:i?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${O0} single upload tag=0x${x.toString(16)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"upload",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${O0} single upload error tag=0x${x.toString(16)}: ${JSON.stringify(t)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(Vi,null,0,t);let i=0;for(let n of x){Ox(r);let F=A.get(n),{tagInfo:v,dbStamp40:E,deviceStamp40:u}=F;if(this.emitProgress(Vi,v?.sTag??`0x${n.toString(16)}`,i,t),!v||u===null)e.set(n,{tag:n,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:E,deviceStamp40:u});else if(!(!v.flags.up||u<=E)){let D=v.sTag,m=i,w=v.historic?await this.uploadHistoricTag(n,v,E,u,j=>{this.emitProgress(Vi,D,m,t,{recordsReceived:j})}):await this.uploadSingleTag(n,v,E,u);e.set(n,w)}++i}}async pullFileFromDevice(x,A,e,r,t,i){let n=A.stamp;try{let F=await this.utoMaster.requestFile(x,E=>{this.emitProgress(Wi,x,i,t,{bytesTransferred:E})}),v=ms(F);if(v!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${v.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:fA(n),crc:A.crc32,size:F.byteLength,flags:A._flags,flags_int:r,data:F}),{filename:x,outcome:zi,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${O0} file upload error ${x}: ${JSON.stringify(F)}`),{filename:x,outcome:Ne,dbStamp40:e,deviceStamp40:n}}}async autoSyncUploadFile(x,A,e,r,t,i,n,F){let v=A.stamp;if(v>r)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):i?this.pullFileFromDevice(x,A,r,t,n,F):void 0;if(v===r&&this.fileContentMatches(A,e))return{filename:x,outcome:rr,dbStamp40:r,deviceStamp40:v}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:fA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:rr,dbStamp40:r,deviceStamp40:t}}catch(i){return this.logger?.error(`${O0} file upload error ${x}: ${JSON.stringify(i)}`),{filename:x,outcome:Ne,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(x,A,e,r,t,i,n){let F=A.stamp;if(F!==r||!this.fileContentMatches(A,e))return t?this.pullFileFromDevice(x,A,r,e.flags_int,i,n):{filename:x,outcome:Hr,dbStamp40:r,deviceStamp40:F}}async decideFileUpload(x,A,e,r){let t=await this.storage.getFile(x),i=!!(A._flags&1);if(!t)return i?this.pullFileFromDevice(x,A,0,16,e,r):void 0;let n=QA(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,n,t.flags_int,i,e,r):this.decideNonSystemUpload(x,A,t,n,i,e,r)}pullIfReadable(x,A,e,r,t,i,n){return x?this.pullFileFromDevice(A,e,r,t,i,n):void 0}async decideNonSystemUpload(x,A,e,r,t,i,n){let F=e.flags_int;if(!(F&2))return F&4?this.pullIfReadable(t,x,A,r,F,i,n):this.decideUploadBySyncLogic(x,A,e,r,t,i,n)}async decideUploadBySyncLogic(x,A,e,r,t,i,n){let F=e.flags_int,v=kn(F);if(v===65)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):this.pullIfReadable(t,x,A,r,F,i,n);if(v===1)return this.autoSyncUploadFile(x,A,e,r,F,t,i,n);if(v===97)return A.stamp>r?this.pullIfReadable(t,x,A,r,F,i,n):void 0;if(v!==33)return this.mirrorUploadFile(x,A,e,r,t,i,n)}async uploadFiles(x,A,e,r){let t=Object.entries(x),i=t.length;this.emitProgress(Wi,null,0,i);let n=0;for(let[F,v]of t){if(Ox(r),!(F===hs||F===Jr&&!e)){let u=await this.decideFileUpload(F,v,i,n);u&&A.set(F,u)}this.emitProgress(Wi,F,++n,i)}}fileContentMatches(x,A){return A!==null&&x.crc32===A.crc&&x.size===A.size}async downloadSingleTag(x,A,e,r){try{let t=await this.storage.getRowForTag(x);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,x,t.data,e),{tag:x,sTag:A.sTag,historic:!1,outcome:"download",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${O0} download error tag=0x${x.toString(16)}: ${t}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async processDownloadTag(x,A,e,r,t){if(e===r&&!t.has(x)){let i=A.flags.up?rr:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:i,dbStamp40:e,deviceStamp40:r});return}if(e>r){let i=A.flags.down?await this.downloadSingleTag(x,A,e,r):{tag:x,sTag:A.sTag,historic:!1,outcome:Hr,dbStamp40:e,deviceStamp40:r};t.set(x,i)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(gF,null,0,t);let i=0;for(let n of x){Ox(r);let{tagInfo:F,dbStamp40:v,deviceStamp40:E}=A.get(n);F&&E!==null&&!F.historic&&await this.processDownloadTag(n,F,v,E,e),this.emitProgress(gF,F?.sTag??`0x${n.toString(16)}`,++i,t)}}async sendFileToDevice(x,A,e,r,t){let i=x.data.byteLength,n=F=>{if(F!==null){let v=Math.round(i*parseInt(F,10)/100);this.emitProgress(un,x.filename,t,r,{bytesTransferred:v,bytesTotal:i})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,x.data,z0.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(F){return this.logger?.error(`${O0} file download error ${x.filename}: ${F}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",n)}}async processDownloadFile(x,A,e,r,t=!1){if(!x.data)return;let i=A?.stamp??0,n=QA(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return n===i?void 0:{filename:x.filename,outcome:rr,dbStamp40:n,deviceStamp40:i};if(!(!t&&n<i))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:Hr,dbStamp40:n,deviceStamp40:i}:this.sendFileToDevice(x,n,i,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(Bd);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${O0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),i=t.filter(D=>D.flags&8),n=t.filter(D=>!(D.flags&8)),F=[...i,...n].filter(D=>D.filename),v=Object.entries(x).filter(([,D])=>D._flags&4).map(([D])=>D),E=F.length;this.emitProgress(un,null,0,E);let u=0;for(let D of F){if(Ox(r),e&&D.filename===Jr){this.emitProgress(un,D.filename,++u,E);continue}let m=D.filename===Jr&&!e,w=await this.decideFileDownload(D,x[D.filename],A.get(D.filename),v,m,E,u);w&&A.set(D.filename,w),this.emitProgress(un,D.filename,++u,E)}}async decideFileDownload(x,A,e,r,t,i,n){return A!==void 0?this.decideDownloadExisting(x,A,e,t,i,n):this.decideDownloadMissing(x,r,i,n)}async decideDownloadExisting(x,A,e,r,t,i){if(A._flags&4)return;if(x.flags&8)return e?void 0:this.processDownloadFile(x,A,t,i,r);let n=x.flags_int;if(n&8)return this.handleDeviceDelete(x,A,e);if(!e&&!(n&4))return this.pushToDevice(x,A,t,i)}async pushToDevice(x,A,e,r){let t=A.stamp,i=QA(x.stamp),n=this.wantDownloadPush(x,A,i,t);if(n==="match")return{filename:x.filename,outcome:rr,dbStamp40:i,deviceStamp40:t};if(n!=="none"&&!(i===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,i,t,e,r):{filename:x.filename,outcome:Hr,dbStamp40:i,deviceStamp40:t}}wantDownloadPush(x,A,e,r){let t=x.flags_int;if(t&2)return"push";let i=this.fileContentMatches(A,x),n=kn(t);return n===33||n===1&&e>=r?i?"match":"push":n===97&&e>r?"push":"none"}async handleDeviceDelete(x,A,e){let r=A.stamp,t=QA(x.stamp);if(!(e&&(e.outcome===zi||e.outcome===Ne))){if(!(A._flags&2))return{filename:x.filename,outcome:Hr,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Ki,dbStamp40:t,deviceStamp40:r}}catch(i){return this.logger?.error(`${O0} file delete error ${x.filename}: ${JSON.stringify(i)}`),{filename:x.filename,outcome:Ne,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,i=QA(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Ki,dbStamp40:i,deviceStamp40:null}}catch(n){return this.logger?.error(`${O0} file delete error ${x.filename}: ${JSON.stringify(n)}`),{filename:x.filename,outcome:Ne,dbStamp40:i,deviceStamp40:null}}if(!(x.flags&12)&&dd(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,i,0,e,r)}hasMatchingNode(x,A){return A.some(e=>e.slice(0,-1)===x.slice(0,e.length-1))}async reconcileFileState(x){try{await this.reconcileFileStateUnguarded(x)}catch(A){if(x?.aborted)throw A;this.logger?.error(`${O0} file-state reconciliation failed: ${JSON.stringify(A)}`)}}async reconcileFileStateUnguarded(x){let A=await this.utoMaster.requestFileList(),e=new Set(Object.keys(A)),r=await this.storage.getFiles(),t=new Map(r.map(i=>[i.filename,i]));for(let[i,n]of Object.entries(A))Ox(x),await this.reconcileDeviceFile(i,n,t.get(i)??null);for(let i of r)Ox(x),e.has(i.filename)||await this.dropRowMissingFromDevice(i)}async reconcileDeviceFile(x,A,e){let r=!!((A._flags|(e?.flags??0))&8);if(e?.data&&!this.fileContentMatches(A,e)){this.logger?.info(`${O0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp:fA(A.stamp),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e?.flags_int??16,data:this.keepBlob(x,r)?e?.data??null:null};e&&this.fileRowMatches(e,t)||await this.storage.upsertFile(t)}keepBlob(x,A){return!A||Cd.has(x)}fileRowMatches(x,A){return x.stamp===A.stamp&&x.crc===A.crc&&x.size===A.size&&x.flags===A.flags&&x.flags_int===A.flags_int&&(x.data??null)===A.data}async dropRowMissingFromDevice(x){try{await this.storage.deleteFile(x.filename)}catch(A){this.logger?.error(`${O0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){Ox(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${O0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null){if(!A.serialNumber)throw new Error(`${O0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${O0} DB metadata missing device_id`);await this.storage.setMetadataValue("device_id",A.serialNumber),e=A.serialNumber}if(e.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${O0} DB device_id "${e}" does not match connected device "${A.serialNumber}"`);return this.emitProgress("validating",null,1,1),A}buildTagMap(x){let A=new Map;for(let e=0;e<x.utos.length;e++){let r=x.utos[e];A.set(r.wTag,{index:e,flags:{up:r.flags.up,down:r.flags.down,setValue:!!r.flags.setValue},historic:r.flags.historic,sTag:r.sTag})}return A}async resolveDbTags(x){let A=await this.storage.getUtoDataTags(),e=new Set(A);for(let[r,t]of x)t.historic&&!e.has(r)&&A.push(r);return A}async buildTagStampCache(x,A,e){let r=new Map;for(let t of x){let i=A.get(t),n=await this.storage.getLatestStampForTag(t),F=n?QA(n):0,v=i&&i.index<e.stamps.length?e.stamps[i.index]:null;r.set(t,{dbStamp40:F,deviceStamp40:v,tagInfo:i})}return r}async executeChangeRequests(x,A,e,r,t,i){let n=await this.storage.getUtoChangeRequests(),F=this.groupChangeRequests(n),v=F.size;if(this.emitProgress(yF,null,0,v),v===0)return;let E=new Set,u=0;for(let[D,m]of F){Ox(i);let w=x.get(D),j=w?.sTag??`0x${D.toString(16)}`;this.emitProgress(yF,j,u,v),await this.executeChangeRequestTag(D,j,w,m,A,r,t,E),++u}E.size>0&&await this.repullExecutedTags(E,x,e,i)}groupChangeRequests(x){let A=new Map;for(let e of x){let r=A.get(e.tag)??[];r.push({stamp40:QA(e.stamp),user:e.user,json:e.json}),A.set(e.tag,r)}return A}async executeChangeRequestTag(x,A,e,r,t,i,n,F){if(!e){this.pushChangeResults(n,x,A,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(n,x,A,r,"skip-unsupported");return}let v=e.index<t.stamps.length?t.stamps[e.index]:0,E=r.filter(D=>D.stamp40<=v),u=r.filter(D=>D.stamp40>v);this.pushChangeResults(n,x,A,E,Xi),u.length>0&&await this.coalesceAndSend(x,A,e,u,i,n,F)}async coalesceAndSend(x,A,e,r,t,i,n){let F=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===Ne||!F||!F.data){this.pushChangeResults(i,x,A,r,"error");return}let v=this.resolveSetObject(F.data,r,A);if(v===null){this.pushChangeResults(i,x,A,r,"error");return}if(Object.keys(v).length===0){this.pushChangeResults(i,x,A,r,"skip-no-change");return}let E=r[r.length-1].stamp40,u=await this.utoMaster.sendSetValue(x,JSON.stringify(v),E);u.outcome==="ok"||u.outcome==="stamp"?(n.add(x),this.pushChangeResults(i,x,A,r,kF,u.resultCode)):u.outcome==="denied"?(this.logger?.warn(`${O0} change-request denied ${A} (result=${u.resultCode}) \u2014 server will retry`),this.pushChangeResults(i,x,A,r,"denied",u.resultCode)):(this.logger?.error(`${O0} change-request error ${A} (result=${u.resultCode})`),this.pushChangeResults(i,x,A,r,"error",u.resultCode))}resolveSetObject(x,A,e){try{let r=JSON.parse(z0.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${O0} change-request unparseable uto_data ${e}: ${r}`),null}}buildSetObject(x,A,e){let r={};for(let t of A){let i=JSON.parse(t.json);if(!this.isPlainRecord(i))throw new Error(`change-request JSON is not an object on ${e}`);for(let[n,F]of Object.entries(i)){let v=this.resolveChangeField(x[n],F,n,e);v.apply&&(r[n]=v.value,x[n]=v.value)}}return r}resolveChangeField(x,A,e,r){if(this.isBitwiseOp(A)){let{op:t,val:i}=A;return this.resolveBitwiseOp(x,t,i,e,r)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,e,r,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${O0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${O0} change-request op "${A}" with non-number val on ${t}.${r} \u2014 skipped`),{apply:!1}):x===void 0?A==="|"?{apply:!0,value:e}:{apply:!1}:typeof x!="number"?(this.logger?.warn(`${O0} change-request op "${A}" on non-number ${t}.${r} \u2014 skipped`),{apply:!1}):{apply:!0,value:A==="|"?x|e:x&e}}isBitwiseOp(x){return this.isPlainRecord(x)&&"op"in x}isPlainRecord(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}pushChangeResults(x,A,e,r,t,i){for(let n of r)x.push({tag:A,sTag:e,stamp40:n.stamp40,user:n.user,outcome:t,resultCode:i})}async repullExecutedTags(x,A,e,r){let t=null;try{t=await this.utoMaster.requestStamps()}catch(i){this.logger?.warn(`${O0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${i}`)}for(let i of x)Ox(r),await this.repullExecutedTag(i,A,t,e)}async repullExecutedTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${O0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let i=await this.storage.getRowForTag(x),n=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:fA(n),flags:i?.flags??0,site_related:i?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let F=r.get(x);if(F){let v=A.get(x),E=e&&v&&v.index<e.stamps.length?e.stamps[v.index]:n;F.dbStamp40=n,F.deviceStamp40=E}this.logger?.info(`${O0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${O0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],i=jF(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:i.length>0,rebootFilesDeployed:i,totalTagsUploaded:r.filter(n=>n.outcome==="upload"&&!n.historic).length,totalTagsDownloaded:r.filter(n=>n.outcome==="download").length,totalTagsSkipped:r.filter(n=>n.outcome===rr||n.outcome==="skip-db-readonly"||n.outcome===Hr).length,totalHistoricRecordsAppended:r.reduce((n,F)=>n+(F.recordsAppended??0),0),totalFilesUploaded:t.filter(n=>n.outcome===zi).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===Ki).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===kF).length,totalErrors:r.filter(n=>n.outcome===Ne).length+t.filter(n=>n.outcome===Ne).length+e.filter(n=>n.outcome===ud).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);Ox(A),this.emitProgress(dn,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${O0} requestStamps returned null`);this.emitProgress(dn,"stamps",1,3);let i=await this.utoMaster.requestFileList();this.emitProgress(dn,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(dn,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),v=new Map,E=new Map,u=[],D=await this.isAppInDevPhase();return Ox(A),await this.uploadUtoTags(n,F,v,A),Ox(A),await this.uploadFiles(i,E,D,A),Ox(A),await this.executeChangeRequests(r,t,F,v,u,A),Ox(A),await this.downloadUtoTags(n,F,v,A),Ox(A),await this.downloadFiles(i,E,D,A),Ox(A),jF([...E.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(v,E,u)}async executeAdHocChangeRequest(x,A){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${O0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${O0} requestStamps returned null`);let i=r.get(x),n=i?.sTag??`0x${x.toString(16)}`,F=A.map(m=>({stamp40:m.stamp40,user:"",json:m.json})).sort((m,w)=>m.stamp40-w.stamp40),v=new Map,E=[],u=new Set;return await this.executeChangeRequestTag(x,n,i,F,t,v,E,u),u.size>0&&await this.repullExecutedTags(u,r,new Map,void 0),E.find(m=>m.outcome!==Xi)?.outcome??Xi}},pd=require("events"),bd=require("events"),md=require("events"),hd=5e3,Ls=class _8 extends md.EventEmitter{constructor(A=ZA){super(),A0(this,"logger",A),A0(this,"ws",null),A0(this,"bridgeTransport",null),A0(this,"bridgeSignal"),A0(this,"bridgeResolve",null),A0(this,"bridgeReject",null),A0(this,"serverMessageCount",0),A0(this,"settled",!1),A0(this,"abortHandler",null),A0(this,"connectTimeout"),A0(this,"writeQueue",[]),A0(this,"isProcessingQueue",!1),A0(this,"queueAborted",!1),A0(this,"queueDrainPromise",Promise.resolve()),A0(this,"transportUnsubscribe",null)}static buildSyncUrl(A,e){return`wss://${A}/uto/1/sync/${e}`}resetBridgeState(){this.serverMessageCount=0,this.settled=!1,this.abortHandler=null,this.connectTimeout=void 0,this.writeQueue=[],this.isProcessingQueue=!1,this.queueAborted=!1,this.queueDrainPromise=Promise.resolve(),this.bridgeResolve=null,this.bridgeReject=null,this.bridgeTransport=null,this.bridgeSignal=void 0,this.transportUnsubscribe=null}async processWriteQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.writeQueue.length>0&&!this.queueAborted;){let A=this.writeQueue.shift();try{await t8(this.bridgeTransport,A)}catch(e){let r=e instanceof Error?e.message:String(e);this.logger.error(`Error writing to transport: ${r}`)}}this.isProcessingQueue=!1}}cleanup(){this.transportUnsubscribe&&(this.transportUnsubscribe(),this.transportUnsubscribe=null),this.abortHandler&&this.bridgeSignal&&(this.bridgeSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null),this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.ws=null}settle(A,e){this.settled||(this.settled=!0,this.cleanup(),A==="resolve"?this.bridgeResolve?.({serverMessageCount:this.serverMessageCount}):this.bridgeReject?.(e))}attachWebSocketHandlers(A,e){let r=t=>{A.readyState===WebSocket.OPEN&&!this.bridgeSignal?.aborted&&!this.settled&&A.send(t)};this.abortHandler=()=>{this.logger.info("WebSocket bridge aborted"),this.queueAborted=!0,this.writeQueue.length=0,(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)&&A.close(),this.settle("reject",new Error("Operation aborted"))},this.bridgeSignal&&this.bridgeSignal.addEventListener("abort",this.abortHandler),A.onopen=()=>{this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.info(`WebSocket connected to ${e}`),this.transportUnsubscribe=this.bridgeTransport.onData(r),this.emit("wsConnected")},A.onmessage=t=>{this.serverMessageCount++,this.emit("serverMessage",this.serverMessageCount),!(this.bridgeSignal?.aborted||this.settled)&&(this.writeQueue.push(t.data),this.isProcessingQueue||(this.queueDrainPromise=this.processWriteQueue()))},A.onclose=t=>{this.logger.info(`WebSocket closed (server=${e}, code=${t.code}, messages=${this.serverMessageCount})`),this.emit("wsClosed",t.code,t.reason),this.queueDrainPromise.then(()=>this.settle("resolve")).catch(()=>this.settle("resolve"))},A.onerror=t=>{this.logger.error(`WebSocket error (server=${e})`),this.emit("wsError",t),this.queueAborted=!0,this.writeQueue.length=0,this.settle("reject",new Error("WebSocket error"))}}async bridge(A,e,r,t){return new Promise((i,n)=>{if(t?.aborted){n(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=i,this.bridgeReject=n;let F=_8.buildSyncUrl(e,r);this.logger.info(`Opening WebSocket: ${F}`);let v=new WebSocket(F);v.binaryType="arraybuffer",this.ws=v,this.connectTimeout=setTimeout(()=>{v.readyState===WebSocket.CONNECTING&&(this.logger.error("WebSocket connection timeout"),v.close(),this.settle("reject",new Error("WebSocket connection timeout")))},hd),this.attachWebSocketHandlers(v,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},S8="https://lic.mydatanet.at/api/2/";async function $8(x,A=S8){let e=`${A}devices/${x}/assignment`,r=await fetch(e);if(!r.ok)throw new Error(`Failed to get device assignment: ${r.status} ${r.statusText}`);return r.json()}var T8=class extends bd.EventEmitter{constructor(x=ZA){super(),A0(this,"logger",x)}async execute(x,A,e,r){let t=e;t||(this.logger.info("[LegacySync] No serverUrl provided, resolving via device assignment..."),this.emit("syncPhase",{phase:"resolving-server"}),t=(await $8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let i=new Ls(this.logger);i.on("wsConnected",()=>this.emit("wsConnected")),i.on("wsClosed",(F,v)=>this.emit("wsClosed",F,v)),i.on("wsError",F=>this.emit("wsError",F)),i.on("serverMessage",F=>this.emit("serverMessage",F));let n=await i.bridge(x,t,A,r);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+n.serverMessageCount+")"),{serverMessageCount:n.serverMessageCount}}},jd=require("events"),P8="Operation aborted";function gd(x){return x instanceof Error?x.message:String(x)}function Yi(x){if(x?.aborted)throw new Error(P8)}var q8=class extends jd.EventEmitter{constructor(x,A=ZA){super(),A0(this,"atHandler",x),A0(this,"logger",A)}async execute(x,A,e,r){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:n=>this.atHandler.queryMntServerConfig(n),initiateSync:n=>this.atHandler.initiateMntSync(n)},{name:"mdn",queryServer:n=>this.atHandler.queryMdnServerConfig(n),initiateSync:n=>this.atHandler.initiateMdnSync(n)}],i={};for(let n of t)try{i[n.name]=await this.runSyncPhase(n,x,A,r)}catch(F){if(r?.aborted)throw new Error(P8);let v=`${n.name.toUpperCase()} sync phase failed: ${gd(F)}`;throw this.logger.error(v),new Error(v)}return this.logger.info(`Debug sync completed (mntMessages=${i.mnt}, mdnMessages=${i.mdn})`),{mntServerMessageCount:i.mnt,mdnServerMessageCount:i.mdn}}async runSyncPhase(x,A,e,r){Yi(r);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let i=await x.queryServer(r);this.logger.info(`${t} server domain: ${i}`),Yi(r),await x.initiateSync(r),Yi(r);let n=await this.syncWithServer(A,i,e,r);return this.logger.info(`${t} phase completed (serverMessages=${n.serverMessageCount})`),n.serverMessageCount}async syncWithServer(x,A,e,r){let t=new Ls(this.logger),i=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let n=this.atHandler.createConCloseMonitor(()=>{i=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let F=await t.bridge(x,A,e,r);return i?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(r)),F}finally{n()}}},yd=class extends pd.EventEmitter{constructor(x,A,e=ZA){super(),A0(this,"syncTransport",x),A0(this,"logger",e),A0(this,"atHandler"),this.atHandler=A??null}async sync(x){let A=this.atHandler?"debug":"legacy";this.emit("syncStart",{mode:A});try{if(this.atHandler)try{return this.emit("syncPhase",{phase:"debug-sync"}),await this.syncWithDebug(x)}catch(e){return this.logger.warn("[SyncManager] Debug sync failed, falling back to legacy sync: "+(e instanceof Error?e.message:String(e))),this.emit("syncPhase",{phase:"debug-fallback-legacy"}),await this.syncLegacy(x)}return this.emit("syncPhase",{phase:"legacy"}),await this.syncLegacy(x)}catch(e){throw this.emit("syncError",e),e}}async syncLegacy(x){let A=new T8(this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let r={mode:"legacy",serverMessageCount:(await A.execute(this.syncTransport,x.serialNumber,x.serverUrl,x.signal)).serverMessageCount};return this.emit("syncComplete",r),r}async syncWithDebug(x){let A=new q8(this.atHandler,this.logger);A.on("syncPhase",t=>this.emit("syncPhase",t));let e=await A.execute(this.syncTransport,x.serialNumber,x.serverUrl??"",x.signal),r={mode:"debug",serverMessageCount:e.mntServerMessageCount+e.mdnServerMessageCount,mntServerMessageCount:e.mntServerMessageCount,mdnServerMessageCount:e.mdnServerMessageCount};return this.emit("syncComplete",r),r}dispose(){}},kd=require("events"),_x={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},K0={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},Vx=1e4,N8=9e4,I8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function M8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var tr="Operation aborted",Hx=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},Rs=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},wd=class extends kd.EventEmitter{constructor(x,A=ZA){super(),A0(this,"transport",x),A0(this,"logger",A),A0(this,"mutex",new gs("AtCommandHandler")),A0(this,"bufferState",M8()),A0(this,"responseCallback",null),A0(this,"decoder",new TextDecoder),A0(this,"dataHandler"),A0(this,"disposeTransportListener"),A0(this,"isDisposed",!1),A0(this,"activeAbort",null),A0(this,"session"),this.dataHandler=e=>this.handleIncomingData(e),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(e,r,t=Vx,i)=>this.executeSendAndWait(e,r,t,i),sendRaw:(e,r=Vx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(_x.MNT_CFG,K0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(_x.MDN_CFG,K0.MDN_CFG_PREFIX,e),initiateMntSync:e=>this.executeInitiateMntSync(e),initiateMdnSync:e=>this.executeInitiateMdnSync(e),sendCompanionCert:(e,r)=>this.executeSendCompanionCert(e,r),queryCompanionCertSupport:e=>this.executeQueryCompanionCertSupport(e),sendConnectionClose:e=>this.executeSendConnectionClose(e)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(x){await this.mutex.requestLock();try{if(this.isDisposed)throw new Hx;return await x(this.session)}finally{this.mutex.unlock()}}handleIncomingData(x){let A=this.decoder.decode(x);this.bufferState.buffer+=A,this.emit("data",A),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(x){let A=new Uint8Array(x.length+2);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A[x.length]=10,A[x.length+1]=13,A.buffer}makeCleanup(x,A,e){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(x),A&&e&&A.removeEventListener("abort",e)}}makeResponseChecker(x,A,e,r){let t=x instanceof RegExp;return i=>{if(x!==K0.ERROR&&i.includes(K0.ERROR)){A(),r(new Rs);return}let n=!1,F=i;if(t){let v=i.match(x);v&&(n=!0,F=v[0])}else n=i.includes(x);if(n){A(),e(F);return}i.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,e,r){return new Promise((t,i)=>{if(this.isDisposed){i(new Hx);return}if(r?.aborted){i(new Error(tr));return}x&&(this.bufferState.buffer="");let F=A instanceof RegExp?A.source:A,v={cleanup:()=>{}},E=setTimeout(()=>{v.cleanup(),i(new Error(`Timeout waiting for response: ${F}`))},e),u=()=>{v.cleanup(),i(new Error(tr))};v.cleanup=this.makeCleanup(E,r,u),r&&r.addEventListener("abort",u);let D=this.makeResponseChecker(A,v.cleanup,t,i);this.responseCallback=D,this.activeAbort=()=>{v.cleanup(),i(new Hx)},!x&&this.bufferState.buffer&&D(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(m=>{v.cleanup(),i(m)}))})}executeSendRaw(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Hx);return}this.bufferState.buffer="";let t=setTimeout(()=>{i(),r(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),i=this.makeCleanup(t);this.activeAbort=()=>{i(),r(new Hx)},this.responseCallback=n=>{I8.test(n)&&(i(),this.logger.info("RX: "+n.trim()),e(n))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(n=>{i(),r(n)})})}executeQueryConfig(x,A,e){return new Promise((r,t)=>{if(this.isDisposed){t(new Hx);return}if(e?.aborted){t(new Error(tr));return}this.bufferState.buffer="";let i={cleanup:()=>{}},n=setTimeout(()=>{i.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},Vx),F=()=>{i.cleanup(),t(new Error(tr))};i.cleanup=this.makeCleanup(n,e,F),e&&e.addEventListener("abort",F);let v=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{i.cleanup(),t(new Hx)},this.responseCallback=E=>{let u=E.match(v);if(u){i.cleanup();let D=u[1].trim();this.logger.info(`Server config ${A}: ${D}`),r(D);return}E.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(E=>{i.cleanup(),this.logger.error(`Failed to send ${A} command: `+(E instanceof Error?E.message:String(E))),t(E)})})}async sendAndWait(x,A,e=Vx,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=Vx){return this.withAtLock(e=>e.sendRaw(x,A))}async queryMntServerConfig(x){return this.withAtLock(A=>A.queryMntServerConfig(x))}async queryMdnServerConfig(x){return this.withAtLock(A=>A.queryMdnServerConfig(x))}async initiateMntSync(x){return this.withAtLock(A=>A.initiateMntSync(x))}async initiateMdnSync(x){return this.withAtLock(A=>A.initiateMdnSync(x))}async sendCompanionCert(x,A){return this.withAtLock(e=>e.sendCompanionCert(x,A))}async executeInitiateMntSync(x){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(_x.MNT_SYNC,K0.OK,Vx,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(_x.MDN_SYNC,K0.OK,Vx,x),await this.executeSendAndWait(null,K0.SYNC_START,Vx,x)}catch(A){this.logger.error("Failed to initiate MDN sync: "+(A instanceof Error?A.message:String(A)))}}async executeSendCompanionCert(x,A){if(this.isDisposed)throw new Hx;if(A?.aborted)throw new Error(tr);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${_x.COMPANION_CERT}=${r}`,K0.OK,Vx,A),i=parseInt(t.match(/(\d+)/)[1],10),n=0;for(;n<r;){let F=Math.min(i,r-n),v=e.slice(n,n+F);await this.executeSendAndWait(`${_x.COMPANION_CERT}=${F},${n},${v}`,K0.OK,Vx,A),n+=F}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Hx);return}if(A?.aborted){r(new Error(tr));return}this.bufferState.buffer="";let t={cleanup:()=>{}},i=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},Vx),n=()=>{t.cleanup(),r(new Error(tr))};t.cleanup=this.makeCleanup(i,A,n),A&&A.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Hx)},this.responseCallback=v=>{let E=v.match(K0.COMPCERT_ERROR);if(E){t.cleanup(),e({success:!1,errorCode:parseInt(E[1],10)});return}if(v.includes(K0.OK)){t.cleanup(),e({success:!0});return}v.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${_x.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+F),this.transport.write(this.encodeCommand(F)).catch(v=>{t.cleanup(),r(v)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(_x.COMPANION_CERT_TEST,K0.OK,Vx,x),!0}catch(A){if(A instanceof Hx)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(_x.CON_CLOSE,K0.CON_CLOSE,Vx,x)}catch(A){this.logger.error("Failed to receive +CONCLOSE response: "+(A instanceof Error?A.message:String(A)))}}createConCloseMonitor(x){let A="",e=r=>{A+=r,A.includes(K0.CON_CLOSE)&&(A="",this.bufferState.closedByDevice=!0,x()),A.length>1e3&&(A=A.slice(-500))};return this.on("data",e),()=>{this.off("data",e)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}},L8=(x=>(x[x.FORMAT=1]="FORMAT",x[x.SIGNATURE=2]="SIGNATURE",x[x.EXPIRED=3]="EXPIRED",x[x.NO_MDN_PUBKEY=4]="NO_MDN_PUBKEY",x[x.BUSY=5]="BUSY",x[x.INTERNAL=6]="INTERNAL",x))(L8||{}),_d=require("events"),Qi="requesting-cert",Zi="cert-revoked",R8=class Bs extends _d.EventEmitter{constructor(){super(...arguments),A0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??yn,{signal:r,atHandler:t}=A,i=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),i();let n=await this.loadOrGenerateKeypair(A.storage),F=await A.storage.getCertificate(A.apiConfig.apiHost);(F===null||!bs(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(Qi),i(),F=await this.requestAndStoreCert(n,A)),this.utoMaster=new n8(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),i();let v=F;F=await t.withAtLock(async D=>{let m=await this.presentCertWithRefresh(D,v,n,A);return await D.initiateMdnSync(r),m}),this.emitPhase("ecs-handshake"),i(),await this.utoMaster.init();let E=await this.utoMaster.initiateEcsHandshake({companionPublicKey:n.publicKey,companionPrivateKey:n.privateKey,signal:r});if(!E.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${E.resultCode})`);this.emitPhase("connected");let u=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:u}}catch(n){return this.handleError(n)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let e=await A.getKeypair();if(e!==null)return e;let r=await rs();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await zF(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof wt&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new xs(Zi,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await Bs.fetchCertOrThrowRevoked(A,e),t={base64Url:r.certificateBase64Url,notAfter:r.notAfter};return await e.storage.saveCertificate(t,e.apiConfig.apiHost),t}static async refreshCertificate(A){let e=await A.storage.getKeypair(),r=e!==null?e:await(async()=>{let n=await rs();return await A.storage.saveKeypair(n),n})(),t=await Bs.fetchCertOrThrowRevoked(r,A),i={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(i,A.apiConfig.apiHost),i}static async clearCredentials(A,e){await A.clearCertificate(e)}async presentCertWithRefresh(A,e,r,t){let i=await A.sendCompanionCert(e.base64Url,t.signal);if(i.success||i.errorCode===3&&((t.logger??yn).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(Qi),e=await this.requestAndStoreCert(r,t),i=await A.sendCompanionCert(e.base64Url,t.signal),i.success))return e;throw new xs("cert-presenting",`AT+COMPCERT rejected (code ${i.errorCode??"?"})`,{certErrorCode:i.errorCode})}emitPhase(A){this.emit("phase",A)}fail(A,e){return this.emit("phase","error"),{success:!1,phase:A,error:e}}handleError(A){return A instanceof xs?(this.emit("phase",A.phase===Zi?Zi:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof wt?{success:!1,phase:Qi,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};A0(R8,"encodePublicKeyBase64Url",ps);var Sd=R8,xs=class extends Error{constructor(x,A,e={}){super(A),A0(this,"phase",x),A0(this,"extra",e),this.name="AuthError"}get certErrorCode(){return this.extra.certErrorCode}get httpStatus(){return this.extra.httpStatus}get apiCode(){return this.extra.apiCode}},O8=(x=>(x.CERT_FORMAT="cert_format",x.CERT_SIGNATURE="cert_signature",x.CERT_EXPIRED="cert_expired",x.NO_MDN_PUBKEY="no_mdn_pubkey",x.DEVICE_BUSY="device_busy",x.DEVICE_INTERNAL="device_internal",x.ECS_FAILURE="ecs_failure",x.CERT_REVOKED="cert_revoked",x.SESSION_EXPIRED="session_expired",x.ABORTED="aborted",x.UNKNOWN="unknown",x))(O8||{}),$d={cert_format:"companion_auth.error.cert_format",cert_signature:"companion_auth.error.cert_signature",cert_expired:"companion_auth.error.cert_expired",no_mdn_pubkey:"companion_auth.error.no_mdn_pubkey",device_busy:"companion_auth.error.device_busy",device_internal:"companion_auth.error.device_internal",ecs_failure:"companion_auth.error.ecs_failure",cert_revoked:"companion_auth.error.cert_revoked",session_expired:"companion_auth.error.session_expired",aborted:"companion_auth.error.aborted",unknown:"companion_auth.error.unknown"};function Td(x){if(x.certErrorCode!==void 0)switch(x.certErrorCode){case 1:return"cert_format";case 2:return"cert_signature";case 3:return"cert_expired";case 4:return"no_mdn_pubkey";case 5:return"device_busy";case 6:return"device_internal"}return x.phase==="cert-revoked"?x.httpStatus===401?"session_expired":"cert_revoked":x.phase==="ecs-handshake"?"ecs_failure":x.error==="Operation aborted"?"aborted":"unknown"}var Pd=require("events");function G8(x){let A=x.replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f").map(e=>{let r=e.split(" ");return r.length<4?null:{name:r[0],scale:parseFloat(r[1]),offset:parseFloat(r[2]),unit:r[3]}}).filter(e=>e!==null):[]}function U8(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function H8(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function Cs(x,A){return x.map((e,r)=>({name:e.name,displayValue:H8(A[r]??"",e.scale,e.offset),unit:e.unit}))}var qd=2e3,J8=class extends Pd.EventEmitter{constructor(x,A=ZA){super(),A0(this,"atHandler",x),A0(this,"logger",A),A0(this,"datapoints",[]),A0(this,"values",[]),A0(this,"polling",!1),A0(this,"pollTimer",null),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(_x.APP_GET_METADATA),A=x.includes(K0.OK)?{supported:!0,pinRequired:!1}:x.includes(K0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(K0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(K0.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(A)),A}async fetchMetadata(x){this.logger.info("Fetching metadata"+(x?" (with PIN)":""));let A=x?`${_x.APP_GET_METADATA}=${x}`:_x.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(K0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(K0.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(e.includes(K0.OK)){let r=G8(e);return this.logger.info("Parsed "+r.length+" datapoints"),this.datapoints=r,this.values=new Array(r.length).fill(""),this.emit("metadata",r),r}return e.includes(K0.ERROR)?(this.logger.error("Metadata fetch error: "+e),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(x){return this.readValues(A=>this.atHandler.sendRaw(A),x)}async readValues(x,A){try{this.logger.debug("Fetching values");let e=A?`${_x.APP_GET_DATAVALUE}=${A}`:_x.APP_GET_DATAVALUE,r=await x(e);if(r.includes(K0.OK)){let t=U8(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",Cs(this.datapoints,t)),t}return[]}catch(e){return this.logger.warn("Value fetch error: "+(e instanceof Error?e.message:String(e))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let A=(await this.atHandler.sendRaw(_x.APP_TRIG_MEASURE_TEST)).includes(K0.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof Hx)throw x;return this.logger.warn("Measurement trigger probe failed: "+(x instanceof Error?x.message:String(x))),!1}}async triggerMeasurement(x={}){let{pin:A,timeoutMs:e=N8,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let i=await t.sendRaw(_x.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+i),!i.includes(K0.OK))return this.logger.warn("Measurement trigger rejected: "+i.trim()),{outcome:"rejected",values:[],response:i};this.emit("measurementTriggered");try{let n=await t.sendAndWait(null,K0.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(v=>t.sendRaw(v),A),response:n}}catch(n){if(n instanceof Hx)throw n;let F="timeout";return n instanceof Rs?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${K0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:i}}})}async startPolling(x,A=qd){if(this.polling){this.logger.warn("Polling already active \u2014 ignoring startPolling call");return}this.logger.info("Starting polling every "+A+" ms"),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.fetchPromise=this.fetchValues(x),await this.fetchPromise,this.fetchPromise=null,this.polling&&(this.pollTimer=setInterval(()=>{this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchValues(x).finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))},A))}async stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null),this.polling&&(this.logger.info("Polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getSnapshot(){return{datapoints:[...this.datapoints],values:[...this.values],isPolling:this.polling}}getDisplayValues(){return Cs(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function Nd(x,A,e){let r=i=>{if(i instanceof Hx)throw i},t=new J8(x);try{let i=await x.queryMdnServerConfig(e).catch(D=>(r(D),!1)),n=await t.checkSupport().catch(D=>(r(D),{supported:!1,pinRequired:!1})),F=n.supported?await t.checkMeasurementTriggerSupport().catch(D=>(r(D),!1)):!1,v=n.supported?{pinRequired:n.pinRequired,canTriggerMeasurement:F}:!1,E=!1,u=!1;if(i){let[D,m]=await Promise.all([x.queryCompanionCertSupport(e).catch(w=>(r(w),!1)),A?.getCertificate(i)]);E=D,u=m!=null&&bs(m.notAfter)}return{hostname:i,localData:v,secureConnection:E,validCert:u}}finally{t.dispose()}}var Id=require("events"),Md={0:"trigger",1:"wakeup",2:"online"},Ld={0:["2G","","GSM"],1:["2G","Compact","GSM-COMPACT"],2:["3G","","UTRAN"],3:["2G","EDGE","GSM-EGPRS"],4:["3G","HSDPA","UTRAN-HSDPA"],5:["3G","HSUPA","UTRAN-HSUPA"],6:["3G","HSPA+","UTRAN-HSXPA"],7:["4G","","EUTRAN"],8:["4G","LTE-M","LTE-CATM1"],9:["4G","NB-IoT","LTE-CATNB1"],100:["WiFi","","WIFI"],101:["LAN","Ethernet","ETHERNET"],102:["Local","Wireless","WIRELESS"],103:["Local","Wired","WIRED"]},Rd={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},Tx={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},Od=Tx.FAILED|Tx.ACTIVE|Tx.STARTED|Tx.RETRY|Tx.WAKEUPABLE|Tx.EXTSIM|Tx.DISABLED|Tx.WAKEUP|Tx.POSUPDATE_ACTIVE,wF=`${K0.RM2M_STATE}: `;function K8(x=0){let A=(x&Tx.WAKEUPABLE)!==0,e="offline",r=A;return x&Tx.POSUPDATE_ACTIVE?(e="locating",r=!1):x&Tx.RETRY?(e="retry",r=!1):x&Tx.STARTED?(e="dialing",r=!1):x&Tx.ACTIVE?(e="active",r=!1):x&Tx.FAILED?(e="failed",r=A):x&Tx.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&Tx.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~Od}}function Gd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:Md[A]??x}function Ud(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:Ld[A]??["unknown",`itf#${x}`,`itf#${x}`]}function Hd(x){if(x.length===0)return null;let A=x.join(",");return Rd[A]??A}function z8(x){let A=x.split(","),[e,r,t,i,...n]=A;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let F=parseInt(r,10),v=Ud(i),E=i!==void 0?parseInt(i,10):NaN;return{stamp:new Date,rssi:E>=101?null:parseInt(e,10),state:F,uplinkState:K8(F),uplinkMode:Gd(t),uplinkInterface:v?v[0]:null,uplinkInterfaceExtended:v?v[1]:null,uplinkInterfaceTechnical:v?v[2]:null,scriptState:Hd(n)}}function V8(x){let A=x.indexOf(wF);if(A===-1)return null;let e=x.substring(A+wF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?z8(t):null}var Jd=5e3,Kd=class extends Id.EventEmitter{constructor(x,A=yn){super(),A0(this,"atHandler"),A0(this,"logger"),A0(this,"lastState",null),A0(this,"pollingTimer",null),A0(this,"polling",!1),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(_x.RM2M_STATE),A=V8(x);return A?(this.lastState=A,this.emit("state",A),this.logger.debug("RM2M state fetched successfully")):this.logger.warn("Failed to parse RM2M state response"),A}catch(x){let A=x instanceof Error?x.message:String(x);return this.logger.error(`Failed to fetch RM2M state: ${A}`),this.emit("error",A),null}}startPolling(x=Jd){if(this.polling){this.logger.debug("Polling already active, ignoring startPolling call");return}this.logger.info(`Starting RM2M state polling every ${x}ms`),this.polling=!0,this.fetchInProgress=!1,this.emit("pollingStarted"),this.runGuardedFetch(),this.pollingTimer=setInterval(()=>this.runGuardedFetch(),x)}runGuardedFetch(){this.fetchInProgress||(this.fetchInProgress=!0,this.fetchPromise=this.fetchState().finally(()=>{this.fetchInProgress=!1,this.fetchPromise=null}))}async stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null),this.polling&&(this.logger.info("RM2M state polling stopped"),this.polling=!1,this.emit("pollingStopped")),this.fetchPromise&&await this.fetchPromise}getLastState(){return this.lastState?{...this.lastState,uplinkState:{...this.lastState.uplinkState}}:null}get isPolling(){return this.polling}dispose(){this.stopPolling(),this.lastState=null,this.removeAllListeners()}},zd=require("events"),W8=class extends zd.EventEmitter{constructor(){super(...arguments),A0(this,"serialNumber",""),A0(this,"serverUrl",""),A0(this,"deviceId",""),A0(this,"rssi",null),A0(this,"hasDebugSupport",!1),A0(this,"connectionState","disconnected"),A0(this,"connectionError",""),A0(this,"mtuSize",23)}get isConnected(){return this.connectionState==="connected"}setConnected(x){this.serialNumber=x.serialNumber,this.deviceId=x.deviceId,this.serverUrl=x.serverUrl??this.serverUrl,this.hasDebugSupport=x.hasDebugSupport??!1,this.mtuSize=x.mtuSize??23,this.rssi=x.rssi??null,this.connectionState="connected",this.connectionError="",this.emit("connected",this.snapshot()),this.emit("stateChange",this.snapshot())}setDisconnected(){this.connectionState="disconnected",this.rssi=null,this.emit("disconnected"),this.emit("stateChange",this.snapshot())}setError(x){this.connectionError=x,this.connectionState="disconnected",this.emit("error",x),this.emit("stateChange",this.snapshot())}setConnectionState(x){this.connectionState=x,this.emit("stateChange",this.snapshot())}updateRssi(x){this.rssi=x,this.emit("rssiUpdate",x)}reset(){this.serialNumber="",this.serverUrl="",this.deviceId="",this.rssi=null,this.hasDebugSupport=!1,this.connectionState="disconnected",this.connectionError="",this.mtuSize=23,this.emit("reset"),this.emit("stateChange",this.snapshot())}snapshot(){return{serialNumber:this.serialNumber,serverUrl:this.serverUrl,deviceId:this.deviceId,rssi:this.rssi,hasDebugSupport:this.hasDebugSupport,connectionState:this.connectionState,connectionError:this.connectionError,mtuSize:this.mtuSize,isConnected:this.isConnected}}},Vd=require("events"),X8={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},Wd=class extends Vd.EventEmitter{constructor(x=ZA,A){super(),A0(this,"logger",x),A0(this,"state"),A0(this,"transports",null),A0(this,"transportFactory",null),A0(this,"disconnectFn",null),A0(this,"reconnectOptions"),A0(this,"reconnectAbortController",null),this.state=new W8,this.reconnectOptions={...X8,...A}}async connect(x,A,e){this.transportFactory=x,this.disconnectFn=A,this.state.setConnectionState("connecting");try{return this.transports=await x(),this.state.setConnected(e),this.logger.info(`Connected to device ${e.serialNumber}`),this.transports}catch(r){let t=r instanceof Error?r.message:String(r);throw this.state.setError(t),this.logger.error(`Connection failed: ${t}`),r}}async disconnect(){if(this.stopReconnect(),this.disconnectFn)try{await this.disconnectFn()}catch(x){this.logger.warn(`Disconnect error: ${x}`)}this.transports=null,this.state.setDisconnected(),this.logger.info("Disconnected from device")}async reconnect(){if(!this.transportFactory||!this.disconnectFn)return this.logger.error("Cannot reconnect: no transport factory"),!1;this.state.setConnectionState("reconnecting"),this.reconnectAbortController=new AbortController;let{signal:x}=this.reconnectAbortController,A=Date.now(),e=this.reconnectOptions.initialDelay;for(;Date.now()-A<this.reconnectOptions.maxDuration;){if(x.aborted||(this.logger.info(`Reconnecting in ${e}ms...`),await this.sleep(e,x),x.aborted))return!1;try{return this.transports=await this.transportFactory(),this.state.setConnectionState("connected"),this.state.connectionError="",this.logger.info("Reconnected successfully"),this.emit("reconnected"),!0}catch(r){this.logger.warn(`Reconnect attempt failed: ${r}`),e=Math.min(e*2,this.reconnectOptions.maxDelay)}}return this.state.setError("Reconnect timeout exceeded"),this.logger.error("Reconnect failed: timeout exceeded"),this.emit("reconnectFailed"),!1}stopReconnect(){this.reconnectAbortController?.abort(),this.reconnectAbortController=null}getTransports(){return this.transports}sleep(x,A){return new Promise(e=>{let r=setTimeout(e,x);A?.addEventListener("abort",()=>{clearTimeout(r),e()},{once:!0})})}},Xd={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},Yd={service:"BC300000-0FA0-4ED4-860A-CF95434B5A4E",txCharacteristic:"BC30E1FF-0FA0-4ED4-860A-CF95434B5A4E",rxCharacteristic:"BC30E1FE-0FA0-4ED4-860A-CF95434B5A4E",txDebugCharacteristic:"BC30E201-0FA0-4ED4-860A-CF95434B5A4E",rxDebugCharacteristic:"BC30E200-0FA0-4ED4-860A-CF95434B5A4E"},Qd=590,Zd=3e4,S0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},EA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},Ln=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},Os=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function BA(x){try{return decodeURIComponent(x)}catch{throw new S0("malformed url encoding")}}var xu=2e3,Au=2136;function Gs(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=xu&&A<=Au}function Wr(x){if(x)for(let A of["stamp","from","until"]){let e=x[A];if(typeof e=="string"&&!(A==="until"&&e==="*")&&!(A!=="stamp"&&e.trim().length===0)&&!Gs(e))throw new S0(`attribute '${A}' is not valid`)}}function eu(x){return typeof x.setMetadataValue=="function"?x:null}function ru(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function Us(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function tu(x){return{status:200,body:x.ctx.siteInfo}}async function nu(x){let{blueprint:A}=x.ctx;if(!A)throw new EA("blueprint unavailable");return{status:200,body:A}}async function iu(x){let{me:A}=x.ctx;if(A==null)throw new EA("no profile stored");return{status:200,body:A}}function Y8(x,A,e,r){let t=x.push;t&&(async()=>{try{await t.container(A,e,r)}catch(i){x.logger?.error(`[localApi] device push for tag ${A} failed:`,i)}})()}async function su(x,A,e){let r=x.push;if(!r)return null;try{return await r.adHocChangeRequest(A,e)}catch(t){return x.logger?.error(`[localApi] change request for tag ${A} failed:`,t),null}}var au=1024;function It(x){let A=x.indexOf(0),e=A<0?x:x.subarray(0,A);try{let r=new TextDecoder("utf-8").decode(e),t=JSON.parse(r);return typeof t!="object"||t===null||Array.isArray(t)?null:t}catch{return null}}function Q8(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(au,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var Hs=26432,Fr={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},Z8=Object.keys(Fr),Mt=["standby","commissioned","offline","commissioning","online"],ds=Mt.reduce((x,A)=>x|Fr[A],0)>>>0;function xv(x){let A=0;for(let e of Z8)x[e]===!0&&(A|=Fr[e]);return A>>>0}function Js(x,A){let e={};for(let r of Z8)x&Fr[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function Av(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(Hs);if(!r?.data)return!1;let t=It(r.data);if(!t)return!1;let i=!1;if(typeof t.lifecycleFlags=="number"){let n=Js(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(n)&&(e.lifecycle_flags=n,i=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,i=!0),i}var ou=new Set([...Mt,"service","lifecycle_state"]);function Fu(x,A){let e=Math.max(z0.msToStamp40((x.timeSource??qt).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function vu(x){let A=Eu(x.request.body??null);if(!A)throw new S0("invalid or missing request body");lu(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!fu(r))throw new S0("this site does not support lifecycle flags!");let t=xv(r),i=t;for(let E of Mt){let u=A[E];typeof u=="boolean"&&(i=u?i|Fr[E]:i&~Fr[E])}if(i>>>=0,i===t)return{status:204,body:""};let n=Fu(e,x.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~ds>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:i&ds}}),stamp40:n+1}],v=ru(e.storage);return v&&await v.insertUtoChangeRequests(F.map(E=>({tag:Hs,stamp40:E.stamp40,json:E.json}))),e.siteInfo.lifecycle_flags=Js(i,r),await ev(e),cu(e,F),{status:204,body:""}}function lu(x){let A=[];for(let[e,r]of Object.entries(x))ou.has(e)?(e==="lifecycle_state"?typeof r!="string":typeof r!="boolean")&&A.push(`"${e}" is not valid`):A.push(`"${e}" is not an allowed lifecycle property`);if(A.length>0)throw new S0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!Mt.includes(e)))throw new S0("invalid parameters")}async function cu(x,A){try{let e=await su(x,Hs,A);e==="executed"?await Av(x.storage,x.siteInfo)&&await ev(x):e!==null&&x.logger?.warn(`[localApi] lifecycle change request not applied by the device (outcome=${e})`)}catch(e){x.logger?.error("[localApi] lifecycle device-mirror refresh failed:",e)}}async function ev(x){await eu(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function fu(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function Eu(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}function rv(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0('"select" must be an array')}}function Bu(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new S0("invalid parameter, select must be an array")}}function Cu(x,A){let e=new Map;if(A){for(let[r,t]of A)e.set(t,r);return e}for(let r of x?.fields??[]){if(Ce(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function du(x){let A=new Map;for(let e of x.fields){if(Ce(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function uu(x){let A=new Set;for(let e of x.fields)Ce(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function Du(x,A,e){if(!e)return null;let r=Cu(x,A),t=new Set,i=[];for(let n of e){if(n==="stamp")continue;let F=r.get(n);F?t.add(F):i.push(n)}if(i.length>0)throw tv(i);return t}function pu(x,A){let e=du(x),r=[],t=[],i=!1;for(let n of A){if(n==="stamp"){i=!0,r.push("stamp");continue}let F=e.get(n);F?r.push(F):t.push(n)}if(t.length>0)throw tv(t);return i||r.unshift("stamp"),r}function bu(x,A){if(A===void 0)return;let e=uu(x),r=A.map(i=>i.toLowerCase()),t=r.filter(i=>!e.has(i));if(t.length>0)throw new S0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function mu(x,A){if(!A)return x;let e={};for(let[r,t]of Object.entries(x))(r==="stamp"||A.has(r))&&(e[r]=t);return e}function Ks(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function tv(x){return new S0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function Rn(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function hu(x){let A=x.ctx,e=BA(x.params[1]),r=Rn(A.model,e);if(!r)throw new S0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new EA(`no data for container "${e}"`);let i=gu(A,r,t,ju(x));return{status:200,body:nv(A,e,i)}}function ju(x){let A=x.query.json??{};return rv(A.select)}function gu(x,A,e,r){let t=Du(A,Nt(x.blueprint??null,A),r);return mu(e,t)}function nv(x,A,e){let r=x.model.byNameOrAlias(A);return r?w8(e,Nt(x.blueprint??null,r)):e}async function yu(x){let A=x.ctx,e=BA(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new EA(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new EA(`unknown container "${e}"`);let i=x.query.json??{},n=Bu(i.select),F=bu(r,n);return{status:200,body:Ks(t,F)}}async function ku(x){let A=BA(x.params[1]);return iv(x,A,"canonical")}async function wu(x){let A=BA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new EA(`unknown container "${A}"`);return iv(x,A,"legacy")}async function iv(x,A,e){let r=qu(x);if(!r)throw new S0("invalid or missing request body");Wr(r);let{stamp:t,...i}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new S0("value(s) of field(s) stamp are not valid");let n=x.ctx;if(e==="canonical"&&!Rn(n.model,A))throw new S0("container does not exist");let F=n.model.byNameOrAlias(A);if(F?.kind==="histdata")throw new EA(`unknown container "${A}"`);let v=e==="canonical"?$u(n,F,i):Tu(F,i);try{let E=e==="canonical"&&t!==void 0?{...v,stamp:t}:v,u=await n.mapper.writeContainer(A,E);return u.devicePushable&&Y8(n,u.tag,u.data,u.stamp40),{status:204,body:""}}catch(E){throw _u(E,A,e,n,F)}}function _u(x,A,e,r,t){if(x instanceof $t){let i=x.field?Su(r,t,x.field,e):void 0;return e==="canonical"?i?new S0(`no permission to modify container field \`${i}\``):new S0(`no permission to modify container \`${A}\``):i?new Ln(`unknown field name(s): ${i}`):new Os(`no permission to modify '${A}'`)}return x}function Su(x,A,e,r){if(!A)return e;let t=A.fields.find(n=>n.name===e||n.name.toLowerCase()===e||(n.alias??n.name).toLowerCase()===e);return t?r==="legacy"?(t.alias??t.name).toLowerCase():Nt(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function $u(x,A,e){if(!A)return e;let r=Nt(x.blueprint??null,A),t=new Map;if(r)for(let[i,n]of r)t.set(n,i);else for(let i of A.fields){let n=i.alias??i.name;t.set(n,n.toLowerCase()),t.set(n.toLowerCase(),n.toLowerCase())}return sv(A,t,e,i=>new S0(`unknown field name(s): ${i}`))}function Tu(x,A){if(!x)return A;let e=new Map;for(let r of x.fields){let t=r.alias??r.name;e.set(t.toLowerCase(),t.toLowerCase()),e.set(t,t.toLowerCase())}return sv(x,e,A,r=>new Ln(`unknown field name(s): ${r}`))}var Pu=new Set(["stamp","stamp4","stamp8","datetime"]);function sv(x,A,e,r){let t=new Map(x.fields.map(v=>[(v.alias??v.name).toLowerCase(),v])),i={},n=[],F=[];for(let[v,E]of Object.entries(e)){let u=A.get(v);if(!u){n.push(v);continue}let D=t.get(u);if(D&&Pu.has(D.type)&&!(typeof E=="string"&&Gs(E))){F.push(v);continue}i[u]=E}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new S0(`value(s) of field(s) ${F.join(",")} are not valid`);return i}function qu(x){let A=x.query.json,e=A!=null&&typeof A=="object"&&!Array.isArray(A)?A:void 0,r=x.request.body;if(!r)return e?{...e}:null;let t=Nu(r);if(t===void 0)throw new S0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function Nu(x){try{return JSON.parse(x)}catch{return}}var av="x-mt-backfill",ov="pending";async function zs(x,A,e){let r=x.push?.backfill;if(!(!r||A===void 0||A===null||e===null))try{return await r.call(x.push,{fromMs:e})==="pending"?{[av]:ov}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var Iu=1e3,Dn=1e3,Fv="20000101",vv="*";async function Mu(x){let A=x.query.json??{};Cv(A,["from","until","count","offset","select"]),Wr(A);let e=x.ctx,r=BA(x.params[1]),{mapperSelect:t,order:i}=cv(e,r,A.select);fv(e,r);let n=Pn(A.from,Fv,"from"),F=Pn(A.until,vv,"until");Ev(n,F),F!==null&&(F=Ru(F));let v=Ou(A.count),E=Bv(A.offset),u=await zs(e,A.from,n);return{status:200,body:(await e.mapper.readTimeseries(r,{fromMs:n,untilMs:F,count:v,offset:E,select:t})).map(m=>lv(x,e,r,Ks(m,i))),headers:u}}async function Lu(x){let A=x.query.json??{};Cv(A,["from","until","offset","select"]),Wr(A);let e=x.ctx,r=BA(x.params[1]),t=x.params[2],{mapperSelect:i,order:n}=cv(e,r,A.select);fv(e,r);let F=Pn(A.from,Fv,"from"),v=Pn(A.until,vv,"until");Ev(F,v);let E=Bv(A.offset),u=await zs(e,A.from,F),m=(await e.mapper.readTimeseries(r,{fromMs:F,untilMs:v,count:t==="youngest"?-1:1,offset:E,select:i}))[0];return m?{status:200,body:lv(x,e,r,Ks(m,n)),headers:u}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:u}}function lv(x,A,e,r){return x.apiVersion==="1"?r:nv(A,e,r)}function cv(x,A,e){let r=rv(e);if(!r)return{mapperSelect:void 0,order:null};let t=Rn(x.model,A);if(!t)return{mapperSelect:r,order:null};let i=pu(t,r),n=i.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:i}}function fv(x,A){if(!Rn(x.model,A))throw new S0("timeseries does not exist")}function Pn(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return Vr(t)}catch{throw new S0(`attribute '${e}' is not valid`)}}function Ev(x,A){if(x!==null&&A!==null&&x>A)throw new S0('E_BAD_REQUEST "from" value must be older than "until"')}function Ru(x){let A=z0.msToStamp40(x);return z0.stamp40ToMS(A)>=x&&(A-=1),z0.stamp40ToMS(A)}function Ou(x){if(x==null||x==="")return Iu;let A=Number(x);if(!Number.isInteger(A))throw new S0('"count" must be an integer');if(A===0)throw new S0("`count` cannot be 0");if(A<-Dn)throw new S0(`"count" must be greater than or equal to -${Dn}`);if(A>Dn)throw new S0(`"count" must be less than or equal to ${Dn}`);return A}function Bv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new S0('"offset" must be an integer');if(A<0)throw new S0('"offset" must be greater than or equal to 0');return A}function Cv(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new S0(`"${e}" is not allowed`)}var Gu=1e5,Uu="20000101",Hu="*";async function Ju(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new EA(`unknown container "${e}"`);let i=x.query.json??{};Wr(i);let{fromMs:n,untilMs:F}=Vu(i);Wu(n,F);let v=Xu(i),E=Yu(i),u=dv(t,i.select)??["stamp"],D=qn(i.from)?await zs(r,i.from,n):void 0,m=u.filter(S=>S!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:n,untilMs:F,count:v,offset:E,select:m.length>0?m:void 0})).map(S=>u.map(P=>P==="stamp"?S.stamp:S[P]??null)),headers:D}}async function Ku(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.params[2],t=x.ctx,i=t.model.byNameOrAlias(e);if(!i)throw new EA(`unknown container "${e}"`);let n=x.query.json??{};Wr(n);let F=dv(i,n.select)??["stamp"],v=zu(n),E=F.filter(m=>m!=="stamp"),D=(await t.mapper.readTimeseries(e,{fromMs:null,untilMs:v??null,count:v!==void 0||r==="youngest"?-1:1,select:E.length>0?E:void 0}))[0];return D?{status:200,body:[F.map(m=>m==="stamp"?D.stamp:D[m]??null)]}:{status:200,body:[]}}function zu(x){if(!(!qn(x.until)||x.until==="*"))try{return Vr(String(x.until))??void 0}catch{throw new S0("from or until value invalid")}}function Vu(x){let A=qn(x.from),e=qn(x.until);if((!A||!e)&&!Vs(x.count))throw new S0("missing or invalid parameters (from and until and/or count)");return{fromMs:_F(A?x.from:Uu),untilMs:_F(e?x.until:Hu)}}function Wu(x,A){if(x!==null&&A!==null&&x>A)throw new S0('"from" value must be older than "until"')}function _F(x){let A=String(x);try{return Vr(A)}catch{throw new S0(`invalid stamp "${A}"`)}}function Xu(x){if(!Vs(x.count))return Gu;if(typeof x.count!="number")throw new S0("invalid parameter count");return x.count}function Yu(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new S0("invalid parameter offset");return A}function dv(x,A){if(A==null)return;if(!Array.isArray(A))throw new S0("invalid parameter, select must be an array");let e=A.map(F=>String(F).toLowerCase()),r=e.filter(F=>F.includes(" "));if(r.length>0)throw new S0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],i=new Set(x.fields.filter(F=>!Ce(F)).map(F=>(F.alias??F.name).toLowerCase()));i.add("stamp");let n=t.filter(F=>!i.has(F));if(n.length>0)throw new S0(`invalid channel(s) ${n.join(",")}`);return t}function Vs(x){return!!x}function qn(x){return typeof x=="string"?x.trim().length>0:Vs(x)}var Qu="device_id";function Zu(x){return async A=>(await On(A),{status:200,body:await AD(A.ctx,x)})}async function On(x){let A=BA(x.params[0]),e=await xD(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new EA(`unknown device "${A}"`)}async function xD(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(Qu)}async function AD(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=It(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=Kr(z0.stamp40ToMS(QA(e.stamp))),r):{}}function Ws(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function eD(x){return async A=>{await On(A);let e=nD(A.request.body??null);if(!e)throw new S0("invalid or missing request body");return Ws(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?It(r.data)??{}:{};return await Xs(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function rD(x){return async A=>(await On(A),Ws(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await Xs(A.ctx,x,e,{}),{status:204,body:""})}))}function tD(x){return async A=>{await On(A);let e=BA(A.params[1]);return Ws(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=It(r.data)??{},i=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===i&&delete t[n];return await Xs(A.ctx,x,r,t),{status:204,body:""}})}}function nD(x){if(!x)return null;let A;try{A=JSON.parse(x)}catch{return null}return typeof A!="object"||A===null||Array.isArray(A)?null:A}async function Xs(x,A,e,r){let t=Q8(JSON.stringify(r),e?.data?.length??0),i=z0.msToStamp40((x.timeSource??qt).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:fA(i),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),Y8(x,A,t,i)}var uv={"content-type":"application/json"},iD=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:iu,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:tu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:nu,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:vu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:Lu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:Mu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:hu,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:ku,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:Ku,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:Ju,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:yu,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:wu,checksUid:!0},...sD()];function sD(){let x={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},A={"sys-flash":26433,"app-flash":26435},e=Object.entries(x).map(([t,i])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:Zu(i),checksUid:!1})),r=Object.entries(A).flatMap(([t,i])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:eD(i),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:rD(i),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:tD(i),checksUid:!1}]);return[...e,...r]}var aD=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function oD(x){let A=Us();return e=>Dv(x,e,A)}async function Dv(x,A,e=Us()){try{let[r,t]=lD(A.path),i=cD(t),n=vD(r,x);if(n===null)return or(404,"E_NOT_FOUND","unknown customer");let F=A.method.toUpperCase();for(let v of iD){if(v.method!==F)continue;let E=v.pattern.exec(n);if(!E)continue;let u=E.slice(1);if(v.checksUid&&!FD(x,u[0]))return or(404,"E_NOT_FOUND","unknown site");let D=/^\/api\/([12])\//.exec(n)?.[1]??"1",m=await v.handler({request:A,params:u,query:i,ctx:x,session:e,apiVersion:D});return BD(m)}return or(404,"E_NOT_FOUND","not found")}catch(r){return bv(r)}}function FD(x,A){return x.allowAnySiteUid===!0||A!==void 0&&BA(A)===x.siteUid}function vD(x,A){let e=aD.exec(x);if(!e)return x;let r=BA(e[2]).toLowerCase();return(A.siteInfo.customer_id??"").toLowerCase()===r||(A.siteInfo.customer_uid??"").toLowerCase()===r?`/api/${e[1]}/sites/${e[3]}`:null}function lD(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function cD(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&fD(A,e);return A}function fD(x,A){let e=A.indexOf("="),r=BA(e<0?A:A.slice(0,e)),t=e<0?"":BA(A.slice(e+1));r==="json"?x.json=ED(t):x.params[r]=t}function ED(x){try{return JSON.parse(x)}catch{throw new S0("request supplied data which is not json formatted ")}}function BD(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...uv,...x.headers},body:A}}function pv(x,A){return{status:x,headers:{...uv},body:JSON.stringify(A)}}function bv(x){return x instanceof S0||x instanceof Ms||x instanceof ws?or(400,"E_BAD_REQUEST",x.message):x instanceof Ln||x instanceof $t?or(403,"E_FORBIDDEN",x.message):x instanceof Os?or(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof EA||x instanceof Me?or(404,"E_NOT_FOUND",x.message):pv(500,{err:x instanceof Error?x.message:String(x)})}function or(x,A,e){return pv(x,{err:`${A} ${e}`})}function CD(x,A){let e=A.apmId??"local",r=A.version??1;return{uid:A.siteUid,name:A.name??A.siteUid,customer_id:e,customer_uid:e,app:{apmid:e,version:String(r)},device:{device_id:A.deviceId,lifecycle_flags:{}},lifecycle_flags:{},containers:x.containers.map(t=>({name:t.name,alias:t.alias??t.name,kind:t.kind}))}}});var Ab={};Bf(Ab,{default:()=>Dc,deviceExitCode:()=>uc,program:()=>DA});module.exports=Cf(Ab);var J0=require("commander"),Qt=U0(require("chalk"));var gi={name:"@microtronics/studio-cli",version:"1.2.1",description:"Microtronics Studio CLI Tool",main:"./out/api.js",typings:"./out/studio-cli.d.ts",bin:{"studio-cli":"studio-cli"},publishConfig:{access:"public"},scripts:{compile:"npm run build:registryApiTypings && tsc","build:cli":"node build.mjs","build:exe":"node build-exe.mjs",api:"api-extractor run --local --verbose",build:"npm run compile && npm run api && npm run build:cli","watch:build":"npm run compile -- --watch",test:"cross-env STUDIO_ENV=lucky mocha","test-ci":"cross-env STUDIO_ENV=lucky mocha --reporter mocha-junit-reporter","watch:test":"npm run test -- --watch",prepublishOnly:"npm run build","build:registryApiTypings":"npx openapi-typescript https://api.registry.lucky.ci.microtronics.com/v1/openapi.yaml -o ./src/typings/registry.ts"},author:"Microtronics",license:"ISC",dependencies:{"@gera2ld/tarjs":"^0.3.1",ajv:"^8.17.1","ajv-formats":"^3.0.1","ajv-keywords":"^5.1.0",chalk:"^5.4.1",commander:"^12.1.0","cross-fetch":"^4.0.0","deepmerge-ts":"^7.1.5",dotenv:"^16.4.7","file-type-checker":"^1.1.2",glob:"^11.0.1","iconv-lite":"^0.6.3","image-dimensions":"^2.3.0",ini:"^5.0.0",minimatch:"^10.0.1","openapi-fetch":"^0.13.0",pako:"^2.1.0",semver:"^7.7.2","sql.js":"^1.14.2","tinytar-fix":"^0.1.1","update-notifier":"^7.3.1",usb:"^2.14.0",uuid:"^9.0.1","vscode-uri":"^3.0.8",yaml:"^2.6.1"},engines:{node:">= 22"},devDependencies:{"@microsoft/api-extractor":"^7.47.11","@microtronics/device-master":"bitbucket:microtronics-core/device-master#v4.1.0","@types/chai":"^4.3.6","@types/chai-as-promised":"^7.1.5","@types/ini":"^4.1.1","@types/mocha":"^10.0.9","@types/node":"^22.9.1","@types/semver":"^7.5.6","@types/sql.js":"^1.4.11","@types/update-notifier":"^6.0.8","@types/vscode":"^1.86.2","@yao-pkg/pkg":"^6.22.0",chai:"^4.3.8","chai-as-promised":"^7.1.2","cross-env":"^7.0.3",esbuild:"^0.27.3","extract-zip":"^2.0.1",mocha:"^10.8.2","mocha-junit-reporter":"^2.2.1","openapi-typescript":"^7.6.0","pawncc-wasm":"bitbucket:microtronics-core/pawncc-wasm#v1.1.1",resedit:"^3.0.2",tar:"^7.5.7","ts-node":"^10.9.2",typescript:"^5.6.3"},mocha:{require:["ts-node/register"],"watch-files":"src/**",spec:"./test/**/*.spec.ts",recursive:!0},files:["out/api.js","out/studio-cli.d.ts","dist/main.js","dist/studio-cli.d.ts","studio-cli","CHANGELOG.md"]};var yA=U0(require("node:fs/promises"));var bt=require("vscode-uri"),Ya=require("glob"),le={readFile(x){return yA.default.readFile(x.fsPath)},async rm(x){if(await this.stat(x))return yA.default.rm(x.fsPath,{recursive:!0})},async stat(x){try{let A=await yA.default.stat(x.fsPath),e=(A.isDirectory()?2:0)|(A.isFile()?1:0)|(A.isSymbolicLink()?64:0);return{ctime:A.ctimeMs,mtime:A.mtimeMs,permissions:void 0,size:A.size,type:e}}catch{return null}},async writeFile(x,A){typeof A=="string"&&(A=new TextEncoder().encode(A));let e=bt.Utils.dirname(x);return await yA.default.mkdir(e.fsPath,{recursive:!0}),yA.default.writeFile(x.fsPath,A,{flag:"w"})},async findFiles(x,A,e){let r={ignore:e,nodir:!0,absolute:!0,dot:!0,cwd:x.fsPath};return(await(0,Ya.glob)(A,r)).map(i=>{let n=i.replace(/\\/g,"/");return bt.URI.parse(`file:///${n}`)})},async copy(x,A){let e=await yA.default.stat(x.fsPath);return await yA.default.mkdir(bt.Utils.dirname(A).fsPath,{recursive:!0}),e.isDirectory()?yA.default.cp(x.fsPath,A.fsPath,{force:!0,recursive:!0}):yA.default.copyFile(x.fsPath,A.fsPath)},async mkdir(x){await yA.default.mkdir(x.fsPath,{recursive:!0})}};var xt=require("vscode-uri");var ue=require("vscode-uri");var qr=require("vscode-uri");var uf=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function sn(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^uf[(e^x[r])&255];return(e^-1)>>>0}var cb=new Uint8Array([0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64,0,193,129,64,1,192,128,65,0,193,129,64,1,192,128,65,1,192,128,65,0,193,129,64]),fb=new Uint8Array([0,192,193,1,195,3,2,194,198,6,7,199,5,197,196,4,204,12,13,205,15,207,206,14,10,202,203,11,201,9,8,200,216,24,25,217,27,219,218,26,30,222,223,31,221,29,28,220,20,212,213,21,215,23,22,214,210,18,19,211,17,209,208,16,240,48,49,241,51,243,242,50,54,246,247,55,245,53,52,244,60,252,253,61,255,63,62,254,250,58,59,251,57,249,248,56,40,232,233,41,235,43,42,234,238,46,47,239,45,237,236,44,228,36,37,229,39,231,230,38,34,226,227,35,225,33,32,224,160,96,97,161,99,163,162,98,102,166,167,103,165,101,100,164,108,172,173,109,175,111,110,174,170,106,107,171,105,169,168,104,120,184,185,121,187,123,122,186,190,126,127,191,125,189,188,124,180,116,117,181,119,183,182,118,114,178,179,115,177,113,112,176,80,144,145,81,147,83,82,146,150,86,87,151,85,149,148,84,156,92,93,157,95,159,158,94,90,154,155,91,153,89,88,152,136,72,73,137,75,139,138,74,78,142,143,79,141,77,76,140,68,132,133,69,135,71,70,134,130,66,67,131,65,129,128,64]);var j0;(w=>{function x(j,S){let[P,N]=S,{line:R,col:O}=j.linePos(P);return{line:Number(R)-1,startCharacter:O-1,endCharacter:O+(N-P)}}w.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(j){return sn(A.encode(j)).toString(16)}w.generateHashForLibraryName=e;function r(j){return sn(A.encode(j)).toString(16)}w.generateHashForFilePath=r;function t(j){return sn(j).toString(16).toUpperCase().padStart(8,"0")}w.generateCRC32ForFileContent=t;function i(j){try{let S=null;return j?.type==="Buffer"?S=Uint8Array.from(j.data):S=j,new TextDecoder("utf8").decode(S)}catch{return""}}w.convertBlobToString=i;function n(j=""){return j.replace(/\r\n|\n\r|\r/g,`
2199
+ `)}w.normalizeLF=n;function F(j){try{let S=i(j);return n(S).split(`
2200
+ `)}catch{return[]}}w.convertBlobToStringArray=F,w.isNumeric=j=>!Array.isArray(j)&&j-parseFloat(j)+1>=0;function E(j){let S="",P=j.byteLength;for(let N=0;N<P;N++)S+=String.fromCharCode(j[N]);return btoa(S)}w.bufferToBase64=E;function u(j,S){let P=`${j}`.match(/\{\d*(index)(\+\d*)?}/g);if(P){let N=j;return P.forEach(R=>{let O=R.replace(/\+0$/,""),e0=O.match(/index/)?.[0];if(e0){let I=O.slice(1,-1).split(e0)[1],k=parseInt(I)||0;N=N.replace(R,`${S+k}`)}}),N}else return j}w.patchValueWithArrayInfo=u;let D={};function m(j,S,P){let N=D[j];N&&clearTimeout(N.timer),D[j]={timer:setTimeout(()=>{delete D[j],P()},S),handler:P}}w.defer=m})(j0||={});var Bo=require("image-dimensions"),Co=require("file-type-checker");var Ib=require("cross-fetch/polyfill"),co=U0(require("openapi-fetch"));var Pe=require("vscode-uri");var px=require("vscode-uri");var KA=U0(require("semver"));var Rx="dist/",Qa="dde/",yi="dlo/",ki=".studio/",Za="dfiles/",t0;(v=>{v.fileNames={projectSettings:"studio.json",mainAmx:"main.amx",mainAmxReport:"main.xml",ddeXml:"dde.xml",ddeOpenApi:"main.yaml",historyJson:"history.json",mainDDE:"main.dde",autoInc:"auto.inc",defaultInc:"default.inc",autoUplinkInc:"app-uplink.inc",autoDdeInc:"X-dde.inc",mainDdeInc:"main-dde.inc",autoLocalDataInc:"auto-local-data.inc",legacyAutoInc:"legacy-auto.inc",legacyAutoDdeInc:"legacy-auto-dde.inc",legacyAutoUplinkInc:"legacy-auto-uplink.inc",reportTemplate:"mdn_report_template.json",dloCfg:"dlo.cfg",devMirror:"mirror.json",devDeviceLog:"device.jsonl"};let A=`${ki}auto/`,e=`${ki}dev/`,r=`${A}dlo/`,t=`${A}dde/`;v.filePaths={studio:{initFile:`${A}.init`,auto:{path:A,dlo:{path:r,autoInc:`${r}${v.fileNames.autoInc}`,defaultInc:`${r}${v.fileNames.defaultInc}`,autoUplinkInc:`${r}${v.fileNames.autoUplinkInc}`,autoLocalDataInc:`${r}${v.fileNames.autoLocalDataInc}`,autoDdeInc:`${r}${v.fileNames.autoDdeInc}`,mainDdeInc:`${r}${v.fileNames.mainDdeInc}`,legacyAutoInc:`${r}${v.fileNames.legacyAutoInc}`,legacyAutoDdeInc:`${r}${v.fileNames.legacyAutoDdeInc}`,legacyAutoUplinkInc:`${r}${v.fileNames.legacyAutoUplinkInc}`,cfg:`${r}${v.fileNames.dloCfg}`},dde:{path:t,historyJson:`${t}${v.fileNames.historyJson}`}},libdeps:`${ki}libdeps/`,dev:{path:e,mirror:`${e}${v.fileNames.devMirror}`,deviceLog:`${e}${v.fileNames.devDeviceLog}`}},dist:{path:Rx,dloPath:`${Rx}dlo/`,mainAmxPath:`${Rx}dlo/${v.fileNames.mainAmx}`,mainAmxReportPath:`${Rx}dlo/${v.fileNames.mainAmxReport}`,ddeXmlPath:`${Rx}dde/${v.fileNames.ddeXml}`,ddeApiPath:`${Rx}api/`,ddeApi:`${Rx}api/${v.fileNames.ddeOpenApi}`,historyJson:`${Rx}dde/${v.fileNames.historyJson}`,povPath:`${Rx}pov`,povDetailsPath:`${Rx}pov/details`,dfilesPath:`${Rx}dfiles`,dfilesProperties:`${Rx}dfiles/properties.json`,bloPath:`${Rx}blo`,reportTemplate:`${Rx}/${v.fileNames.reportTemplate}`,definesTs:`${Rx}defines.ts`,definesAppTs:`${Rx}defines.app.ts`},dlo:{path:yi,mainDLO:`${yi}main.dlo`,mainINI:`${yi}main.ini`},dde:{path:Qa,mainDDE:`${Qa}main.dde`},dfiles:{path:Za,mainDFILES:`${Za}/main.dfiles`},appIni:"app.ini",defaultsIni:"defaults.ini"},v.readme=E=>`# ${E} README
2201
2201
 
2202
2202
  This is the README for your project "${E}". Write a brief description what this project is about.`,v.changelog=`# Changelog
2203
2203
 
2204
2204
  All notable changes to this project will be documented in this file.
2205
2205
 
2206
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(r0||={});var Ao=U0(require("node:child_process")),eo=require("minimatch");var ks=require("vscode-uri");var Ya=U0(require("semver")),df="package.json",uf=["peerDependencies","dependencies","optionalDependencies"],Df=" ",$r;(r=>{r.PART_DIST_PATHS=[r0.filePaths.dist.bloPath,r0.filePaths.dist.povDetailsPath];async function A(t,s,n,F){let v=ks.Utils.joinPath(t,df),E=`${n.name}/${gf(t)}`;if(!await s.stat(v))return!1;let p=await pf(s,v,E,F);if(!p)return!1;let m=p.pkg;if(typeof m!="object"||m===null||Array.isArray(m))return F.warn(`"${E}/package.json" does not contain a JSON object - skipped normalizing it.`),!1;if(!Ya.valid(n.version))return F.warn(`Library manifest version "${n.version}" is not a valid semantic version - skipped normalizing "${E}/package.json".`),!1;bf(m,n,E,F);let w=mf(m,n.version);m=w.pkg;let j=w.changed;j&&F.warn(`Patched version "${w.oldVersion??"<none>"}" -> "${n.version}" in "${E}/package.json" (studio.json is the source of truth).`);let S=jf(n);if(hf(m,S,E,F)&&(j=!0),!j)return!1;let P=yf(p.raw),N=p.raw.endsWith(`
2207
- `),O=JSON.stringify(m,null,P)+(N?`
2208
- `:"");try{await s.writeFile(v,O)}catch(L){return F.warn(`Could not write "${E}/package.json": ${L}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,s,n,F){for(let v of r.PART_DIST_PATHS){let E=ks.Utils.joinPath(t,v);await A(E,s,n,F)}}r.normalizeLibraryParts=e})($r||={});async function pf(x,A,e,r){try{let t=await x.readFile(A),s=j0.convertBlobToString(t),n=JSON.parse(s);return{raw:s,pkg:n}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function bf(x,A,e,r){x.name!==void 0&&x.name!==A.name&&r.warn(`"${e}/package.json" name "${x.name}" does not match library name "${A.name}".`)}function mf(x,A){if(x.version===A)return{pkg:x,changed:!1,oldVersion:x.version};let e=x.version;if(x.version===void 0&&Object.hasOwn(x,"name")){let{name:r,...t}=x;x={name:r,version:A,...t}}else x.version=A;return{pkg:x,changed:!0,oldVersion:e}}function hf(x,A,e,r){let t=!1;for(let s of uf){let n=x[s];if(!n)continue;let F=!1;for(let v of Object.keys(n)){if(!A.has(v))continue;let E=n[v];if(typeof E!="string"||E.startsWith("npm:")||E.includes("://")){r.warn(`Left "${v}" in ${s} of ${e}/package.json untouched - its value "${E}" does not look like a Studio library reference.`);continue}delete n[v],F=!0,t=!0,r.warn(`Removed "${v}" from ${s} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}F&&Object.keys(n).length===0&&delete x[s]}return t}function jf(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function gf(x){let A=x.path.replace(/\\/g,"/");for(let e of $r.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function yf(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:Df}var kf=require("tinytar-fix"),wf=require("pako"),le=".studio/libdeps",mt="package.json",_f="package-lock.json";function Qa(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(ex.dependencyIdToName)}async function Sf(x,A,e,r){let t=px.Utils.joinPath(x,le,r);try{return await A.stat(px.Utils.joinPath(t,z.fileName))?await z.readRaw(t,A):null}catch(s){return e.warn(`Could not read manifest for library "${r}": ${s}`),null}}async function $f(x,A,e,r){let t=new Set,s=Qa(r),n=null;for(;s.length>0;){let F=s.shift();if(t.has(F))continue;t.add(F);let v=await Sf(x,A,e,F);if(!v)continue;let E=v.engines?.backend;E&&(!n||z.compareBackendVersion(E,n.backend)>0)&&(n={backend:E,requiredBy:`${v.publisher}/${v.name}`}),s.push(...Qa(v))}return n}var ex;(M=>{async function x(k,R=!1){let Q=k.libraryDependencies||{};return R||Object.assign(Q,k.libraryDevDependencies||{}),Q}M.getAll=x;function A(k){return k.split("/")[1]}M.dependencyIdToName=A;function e(k,R){let Q=A(R);return px.Utils.joinPath(k,le,Q)}M.dependencyToPath=e;function r(k){return isNaN(k.split("")[0])?k.substring(1):k}M.rangeToVersion=r;function t(k,R,Q){if(!JA.satisfies(R,Q,{includePrerelease:!0}))throw new Error(`${k}, version ${R} does not satisfy required constraint ${Q}`)}M.satisfiesSemverRange=t;async function s(k,R,Q={},K=!1){let J=await z.read(k,R),H=J.libraryDependencies||{};K&&Object.assign(H,J.libraryDevDependencies);let a0=Object.keys(Q);for(let n0 of a0)if(Object.hasOwn(H,n0)){let Z=Q[n0],s0=H[n0],U=r(Z),v0=r(s0),c0=JA.compare(U,v0);c0===1?(H[n0]=Z,t(n0,U,s0)):c0===-1&&(H[n0]=s0,t(n0,v0,Z))}else H[n0]=Q[n0];return H}M.validateDependencyTree=s;async function n(k,R,Q,K,J){let H=r(J),a0=px.Utils.joinPath(k,le,K);try{let n0=await z.read(a0,R);return JA.gte(n0.version,H)&&n0.publisher.toLowerCase()===Q.toLowerCase()}catch{return!1}}M.isDependencyInstalled=n;async function F(k,R,Q,K){let J=px.Utils.joinPath(k,le,K);await R.rm(J).catch(H=>{Q.error("removeExisting",H)})}M.removeExisting=F;async function v(k,R,Q,K,J){let H=kf.untar(wf.ungzip(J));await F(k,R,Q,K);for(let a0 of H.values())try{let n0=px.Utils.joinPath(k,le,K,a0.name);await R.writeFile(n0,a0.data)}catch(n0){Q.error("Extracting lib",n0)}}M.extractLibraryContent=v;async function E(k,R,Q,K,J,H,a0,n0=!1){let[Z,s0]=H.split("/");if(a0&&await n(k,R,Z,s0,a0))return;await F(k,R,Q,s0);let U=await Fx.getLibraryProfile(J,Z,s0,K),v0=a0?U.versions?.find(tx=>JA.eq(tx.name,M.rangeToVersion(a0))):U.versions[0];if(!v0)throw new Error(`Library ${H} with version ${a0} does not exist!`);let c0=v0.files.find(tx=>tx.name==="studio.json"),d0=(await Tf(J,c0.downloadUrl)).libraryDependencies||{},$0={...d0};$0[H]=`^${v0.name}`,await s(k,R,$0,n0);for(let[tx,tA]of Object.entries(d0))await E(k,R,Q,K,J,tx,tA,n0);let L0=v0.files.find(tx=>tx.name==="library.tar.gz");if(!L0)throw new Error(`Library ${H} has no content!`);let Ex=await Fx.fetchCustomContent(J,L0.downloadUrl);await v(k,R,Q,s0,Ex),await L(k,R,Q,s0,n0);let Xx=await z.read(k,R),TA=Xx.libraryDependencies||{},PA=Xx.libraryDevDependencies||{},lx=n0?PA:TA;lx[H]=`^${v0.name}`,Xx.libraryDependencies=TA,Xx.libraryDevDependencies=PA,await z.write(k,R,Xx)}M.installDependency=E;async function u(k,R,Q,K,J){let H=await z.read(k,R),a0=H.libraryDependencies||{},n0=H.libraryDevDependencies||{},Z=Object.assign(a0,n0);for(let[s0,U]of Object.entries(Z)){let v0=Object.hasOwn(n0,s0);await E(k,R,Q,K,J,s0,U,v0)}for(let[s0]of Object.entries(Z)){let U=A(s0),v0=Object.hasOwn(n0,s0);await L(k,R,Q,U,v0)}Q.done(`Installed ${Object.entries(Z).length} dependencies`)}M.installDependencies=u;async function p(k,R,Q,K,J){let H=await z.read(k,R),a0=H.libraryDependencies||{},n0=H.libraryDevDependencies||{},Z=Object.assign(a0,n0),s0=`${K}/${J}`;delete Z[s0];let U=await Pf(k,R,Z);if(!Object.hasOwn(U,s0))await t0(k,R,Q,J),await F(k,R,Q,J),delete n0[s0],delete a0[s0],await z.write(k,R,H);else throw new Error(`Library '${J}' not removed. This library is a dependency of other libraries.`)}M.uninstallDependency=p;async function m(k,R){try{let K=(await ro(px.Utils.joinPath(k,mt),R)).workspaces;if(Array.isArray(K)&&K.every(H=>typeof H=="string")&&K.length>0)return K;let J=K?.packages;return Array.isArray(J)&&J.every(H=>typeof H=="string")&&J.length>0?J:null}catch{return null}}M.readNpmWorkspacePatterns=m;function w(k,R){let Q=J=>J.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/$/,""),K=Q(k);return R.some(J=>{let H=Q(J);return H===K||(0,eo.minimatch)(K,H)})}M.isPathInWorkspaces=w;function j(k,R){if(!R)return{rootInstall:!1,partInstalls:k.map(J=>J.workingPath)};let Q=[],K=!1;for(let J of k)w(J.workingPath,R)?K=!0:Q.push(J.workingPath);return{rootInstall:K,partInstalls:Q}}M.planNpmInstalls=j;async function S(k,R,Q){let K=await z.read(k,R),J=new Set([...Object.keys(K.libraryDependencies||{}),...Object.keys(K.libraryDevDependencies||{})].map(A)),H=new Set,a0=[...J];for(;a0.length>0;){let n0=a0.shift();if(H.has(n0))continue;H.add(n0);let Z=px.Utils.joinPath(k,le,n0);try{let s0=px.Utils.joinPath(Z,z.fileName);if(!await R.stat(s0))continue;let U=await z.readRaw(Z,R);await $r.normalizeLibraryParts(Z,R,U,Q),a0.push(...[...Object.keys(U.libraryDependencies||{}),...Object.keys(U.libraryDevDependencies||{})].map(A))}catch(s0){Q.warn(`Could not normalize library parts for "${n0}": ${s0}`)}}}M.normalizeInstalledLibraryParts=S;async function P(k,R,Q){let K=await z.read(k,R),J=await $f(k,R,Q,K);if(!J)return;let H=K.engines?.backend;if(!H||z.compareBackendVersion(J.backend,H)>0){let a0=H?`"${H}"`:"none",n0=z.isLibrary(K)?"library":"application",Z=z.isLibrary(K)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${J.requiredBy}" requires "engines.backend" >= "${J.backend}" but the ${n0} "${K.publisher}/${K.name}" declares ${a0}. Raise "engines.backend" in studio.json to at least "${J.backend}".${Z}`)}}M.validateMinimumBackendVersion=P;async function N(k,R,Q){await S(k,R,Q);let K=await z.read(k,R),J=[];K.pov?.details?.workingPath&&J.push({name:"pov",workingPath:K.pov.details.workingPath}),K.blo?.workingPath&&J.push({name:"blo",workingPath:K.blo.workingPath});let H=[];for(let s0 of J){let U=px.Utils.joinPath(k,s0.workingPath),v0=px.Utils.joinPath(U,mt);await R.stat(v0)&&H.push(s0)}if(H.length===0)return;let a0=await m(k,R),{rootInstall:n0,partInstalls:Z}=j(H,a0);if(n0){let s0=H.filter(U=>!Z.includes(U.workingPath)).map(U=>U.workingPath).join(", ");Q.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${s0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await sn(k,"npm install --no-audit --no-fund",Q)}for(let s0 of H){if(!Z.includes(s0.workingPath))continue;a0?Q.warn(`${s0.workingPath} (${s0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):Q.info(`Installing npm dependencies for ${s0.name} (${s0.workingPath})...`);let U=px.Utils.joinPath(k,s0.workingPath);await If(U,R,Q)}}M.installNpmInApmParts=N;async function O(k,R,Q){let K=await z.read(k,R),J=await x(K),H=[],a0=r0.filePaths[Q].path,n0=Q===u0.Part.dlo?"inc":"dfiles";for(let Z in J){let s0=M.dependencyToPath(k,Z),U=M.dependencyIdToName(Z),v0=px.Utils.joinPath(s0,a0,`${U}.${n0}`);await R.stat(v0)&&H.push({name:U,path:v0})}if(z.isLibrary(K)){let Z=px.Utils.joinPath(k,a0,`${K.name}.${n0}`);await R.stat(Z)&&H.push({name:K.name,path:Z})}return H}M.getApmPartDependencies=O;async function L(k,R,Q,K,J){let H=await z.read(k,R),a0=[{partName:"blo",partDistPath:"blo",workingPath:H.blo?.workingPath},{partName:"pov",partDistPath:"pov/details",workingPath:H.pov?.details?.workingPath}];for(let{partName:n0,partDistPath:Z,workingPath:s0}of a0){if(!s0)continue;let U=px.Utils.joinPath(k,le,K,"dist",...Z.split("/"),mt);if(await R.stat(U))try{let c0=await Za(k,R,s0),B0=J?"devDependencies":"dependencies";c0[B0]=c0[B0]||{};let d0=s0.split("/").length,$0=Array(d0).fill("..").join("/");c0[B0][K]=`file:${$0}/${le}/${K}/dist/${Z}`,await xo(k,R,s0,c0),Q.info(`Linked ${K} to ${n0} (${s0})`)}catch(c0){Q.warn(`Could not link ${K} to ${n0}: ${c0}`)}}}M.linkLibraryApmParts=L;async function t0(k,R,Q,K){let J=await z.read(k,R),H=[{partName:"blo",workingPath:J.blo?.workingPath},{partName:"pov",workingPath:J.pov?.details?.workingPath}];for(let{partName:a0,workingPath:n0}of H)if(n0)try{let Z=await Za(k,R,n0),s0=!1;Z.dependencies?.[K]?.startsWith("file:")&&(delete Z.dependencies[K],s0=!0),Z.devDependencies?.[K]?.startsWith("file:")&&(delete Z.devDependencies[K],s0=!0),s0&&(await xo(k,R,n0,Z),Q.info(`Unlinked ${K} from ${a0}`))}catch(Z){Q.warn(`Could not unlink ${K} from ${a0}: ${Z}`)}}M.unlinkLibraryApmParts=t0})(ex||={});async function ro(x,A){let e=await A.readFile(x);return JSON.parse(j0.convertBlobToString(e))}function Za(x,A,e){return ro(px.Utils.joinPath(x,e,mt),A)}async function xo(x,A,e,r){let t=px.Utils.joinPath(x,e,mt),s=JSON.stringify(r,null," ")+`
2209
- `;await A.writeFile(t,s)}async function Tf(x,A){return await Fx.fetchCustomContent(x,A,!0)}async function Pf(x,A,e){let r={};function t(E,u,p,m=!1){let w=r[E],j=ex.rangeToVersion(p),S=ex.rangeToVersion(p);(!w||JA.gt(j,S))&&(r[E]={publisherId:u,version:p,installed:m})}let s=Object.entries(e).map(([E,u])=>{let[p,m]=E.split("/");return t(m,p,u,!0),m}),n={};for(let E of s)try{let u=await qf(x,A,E);n[E]=Object.entries(u).map(([p,m])=>{let[w,j]=p.split("/");return t(j,w,m),j}),s.push(...n[E])}catch{let p=r[E];throw new Error(`Please import "${p.publisherId}/${E}" first.`)}let F=[];for(;;){let E=s.filter(u=>F.includes(u)?!1:(n[u]||[]).every(m=>F.includes(m)));if(F.push(...E),s.length===F.length||!E.length)break}let v={};return[...new Set(F)].forEach(E=>{let{version:u,publisherId:p}=r[E],m=Nf(p,E,u);v[m.libraryId]=m.libraryVersion}),v}async function qf(x,A,e){let r=px.Utils.joinPath(x,le,e);return(await z.read(r,A))?.libraryDependencies||{}}function Nf(x,A,e){return{libraryName:A,publisherId:x,libraryVersion:e[0]==="^"?e:"^"+e,libraryId:`${x}/${A}`}}function sn(x,A,e){return new Promise((r,t)=>{Ao.exec(A,{cwd:x.fsPath,env:process.env},(s,n,F)=>{if(n&&e.log(n),F&&e.error(F),s){t(new Error(`${s.message}
2206
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(t0||={});var to=U0(require("node:child_process")),no=require("minimatch");var wi=require("vscode-uri");var xo=U0(require("semver")),Df="package.json",pf=["peerDependencies","dependencies","optionalDependencies"],bf=" ",Tr;(r=>{r.PART_DIST_PATHS=[t0.filePaths.dist.bloPath,t0.filePaths.dist.povDetailsPath];async function A(t,i,n,F){let v=wi.Utils.joinPath(t,Df),E=`${n.name}/${kf(t)}`;if(!await i.stat(v))return!1;let D=await mf(i,v,E,F);if(!D)return!1;let m=D.pkg;if(typeof m!="object"||m===null||Array.isArray(m))return F.warn(`"${E}/package.json" does not contain a JSON object - skipped normalizing it.`),!1;if(!xo.valid(n.version))return F.warn(`Library manifest version "${n.version}" is not a valid semantic version - skipped normalizing "${E}/package.json".`),!1;hf(m,n,E,F);let w=jf(m,n.version);m=w.pkg;let j=w.changed;j&&F.warn(`Patched version "${w.oldVersion??"<none>"}" -> "${n.version}" in "${E}/package.json" (studio.json is the source of truth).`);let S=yf(n);if(gf(m,S,E,F)&&(j=!0),!j)return!1;let P=wf(D.raw),N=D.raw.endsWith(`
2207
+ `),R=JSON.stringify(m,null,P)+(N?`
2208
+ `:"");try{await i.writeFile(v,R)}catch(O){return F.warn(`Could not write "${E}/package.json": ${O}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,i,n,F){for(let v of r.PART_DIST_PATHS){let E=wi.Utils.joinPath(t,v);await A(E,i,n,F)}}r.normalizeLibraryParts=e})(Tr||={});async function mf(x,A,e,r){try{let t=await x.readFile(A),i=j0.convertBlobToString(t),n=JSON.parse(i);return{raw:i,pkg:n}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function hf(x,A,e,r){x.name!==void 0&&x.name!==A.name&&r.warn(`"${e}/package.json" name "${x.name}" does not match library name "${A.name}".`)}function jf(x,A){if(x.version===A)return{pkg:x,changed:!1,oldVersion:x.version};let e=x.version;if(x.version===void 0&&Object.hasOwn(x,"name")){let{name:r,...t}=x;x={name:r,version:A,...t}}else x.version=A;return{pkg:x,changed:!0,oldVersion:e}}function gf(x,A,e,r){let t=!1;for(let i of pf){let n=x[i];if(!n)continue;let F=!1;for(let v of Object.keys(n)){if(!A.has(v))continue;let E=n[v];if(typeof E!="string"||E.startsWith("npm:")||E.includes("://")){r.warn(`Left "${v}" in ${i} of ${e}/package.json untouched - its value "${E}" does not look like a Studio library reference.`);continue}delete n[v],F=!0,t=!0,r.warn(`Removed "${v}" from ${i} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}F&&Object.keys(n).length===0&&delete x[i]}return t}function yf(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function kf(x){let A=x.path.replace(/\\/g,"/");for(let e of Tr.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function wf(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:bf}var _f=require("tinytar-fix"),Sf=require("pako"),ce=".studio/libdeps",mt="package.json",$f="package-lock.json";function Ao(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(ex.dependencyIdToName)}async function Tf(x,A,e,r){let t=px.Utils.joinPath(x,ce,r);try{return await A.stat(px.Utils.joinPath(t,K.fileName))?await K.readRaw(t,A):null}catch(i){return e.warn(`Could not read manifest for library "${r}": ${i}`),null}}async function Pf(x,A,e,r){let t=new Set,i=Ao(r),n=null;for(;i.length>0;){let F=i.shift();if(t.has(F))continue;t.add(F);let v=await Tf(x,A,e,F);if(!v)continue;let E=v.engines?.backend;E&&(!n||K.compareBackendVersion(E,n.backend)>0)&&(n={backend:E,requiredBy:`${v.publisher}/${v.name}`}),i.push(...Ao(v))}return n}var ex;(I=>{async function x(k,L=!1){let Z=k.libraryDependencies||{};return L||Object.assign(Z,k.libraryDevDependencies||{}),Z}I.getAll=x;function A(k){return k.split("/")[1]}I.dependencyIdToName=A;function e(k,L){let Z=A(L);return px.Utils.joinPath(k,ce,Z)}I.dependencyToPath=e;function r(k){return isNaN(k.split("")[0])?k.substring(1):k}I.rangeToVersion=r;function t(k,L,Z){if(!KA.satisfies(L,Z,{includePrerelease:!0}))throw new Error(`${k}, version ${L} does not satisfy required constraint ${Z}`)}I.satisfiesSemverRange=t;async function i(k,L,Z={},W=!1){let U=await K.read(k,L),J=U.libraryDependencies||{};W&&Object.assign(J,U.libraryDevDependencies);let a0=Object.keys(Z);for(let i0 of a0)if(Object.hasOwn(J,i0)){let Q=Z[i0],s0=J[i0],H=r(Q),v0=r(s0),l0=KA.compare(H,v0);l0===1?(J[i0]=Q,t(i0,H,s0)):l0===-1&&(J[i0]=s0,t(i0,v0,Q))}else J[i0]=Z[i0];return J}I.validateDependencyTree=i;async function n(k,L,Z,W,U){let J=r(U),a0=px.Utils.joinPath(k,ce,W);try{let i0=await K.read(a0,L);return KA.gte(i0.version,J)&&i0.publisher.toLowerCase()===Z.toLowerCase()}catch{return!1}}I.isDependencyInstalled=n;async function F(k,L,Z,W){let U=px.Utils.joinPath(k,ce,W);await L.rm(U).catch(J=>{Z.error("removeExisting",J)})}I.removeExisting=F;async function v(k,L,Z,W,U){let J=_f.untar(Sf.ungzip(U));await F(k,L,Z,W);for(let a0 of J.values())try{let i0=px.Utils.joinPath(k,ce,W,a0.name);await L.writeFile(i0,a0.data)}catch(i0){Z.error("Extracting lib",i0)}}I.extractLibraryContent=v;async function E(k,L,Z,W,U,J,a0,i0=!1){let[Q,s0]=J.split("/");if(a0&&await n(k,L,Q,s0,a0))return;await F(k,L,Z,s0);let H=await Fx.getLibraryProfile(U,Q,s0,W),v0=a0?H.versions?.find(tx=>KA.eq(tx.name,I.rangeToVersion(a0))):H.versions[0];if(!v0)throw new Error(`Library ${J} with version ${a0} does not exist!`);let l0=v0.files.find(tx=>tx.name==="studio.json"),d0=(await qf(U,l0.downloadUrl)).libraryDependencies||{},$0={...d0};$0[J]=`^${v0.name}`,await i(k,L,$0,i0);for(let[tx,nA]of Object.entries(d0))await E(k,L,Z,W,U,tx,nA,i0);let q0=v0.files.find(tx=>tx.name==="library.tar.gz");if(!q0)throw new Error(`Library ${J} has no content!`);let Ex=await Fx.fetchCustomContent(U,q0.downloadUrl);await v(k,L,Z,s0,Ex),await O(k,L,Z,s0,i0);let Qx=await K.read(k,L),PA=Qx.libraryDependencies||{},qA=Qx.libraryDevDependencies||{},lx=i0?qA:PA;lx[J]=`^${v0.name}`,Qx.libraryDependencies=PA,Qx.libraryDevDependencies=qA,await K.write(k,L,Qx)}I.installDependency=E;async function u(k,L,Z,W,U){let J=await K.read(k,L),a0=J.libraryDependencies||{},i0=J.libraryDevDependencies||{},Q=Object.assign(a0,i0);for(let[s0,H]of Object.entries(Q)){let v0=Object.hasOwn(i0,s0);await E(k,L,Z,W,U,s0,H,v0)}for(let[s0]of Object.entries(Q)){let H=A(s0),v0=Object.hasOwn(i0,s0);await O(k,L,Z,H,v0)}Z.done(`Installed ${Object.entries(Q).length} dependencies`)}I.installDependencies=u;async function D(k,L,Z,W,U){let J=await K.read(k,L),a0=J.libraryDependencies||{},i0=J.libraryDevDependencies||{},Q=Object.assign(a0,i0),s0=`${W}/${U}`;delete Q[s0];let H=await Nf(k,L,Q);if(!Object.hasOwn(H,s0))await e0(k,L,Z,U),await F(k,L,Z,U),delete i0[s0],delete a0[s0],await K.write(k,L,J);else throw new Error(`Library '${U}' not removed. This library is a dependency of other libraries.`)}I.uninstallDependency=D;async function m(k,L){try{let W=(await io(px.Utils.joinPath(k,mt),L)).workspaces;if(Array.isArray(W)&&W.every(J=>typeof J=="string")&&W.length>0)return W;let U=W?.packages;return Array.isArray(U)&&U.every(J=>typeof J=="string")&&U.length>0?U:null}catch{return null}}I.readNpmWorkspacePatterns=m;function w(k,L){let Z=U=>U.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/$/,""),W=Z(k);return L.some(U=>{let J=Z(U);return J===W||(0,no.minimatch)(W,J)})}I.isPathInWorkspaces=w;function j(k,L){if(!L)return{rootInstall:!1,partInstalls:k.map(U=>U.workingPath)};let Z=[],W=!1;for(let U of k)w(U.workingPath,L)?W=!0:Z.push(U.workingPath);return{rootInstall:W,partInstalls:Z}}I.planNpmInstalls=j;async function S(k,L,Z){let W=await K.read(k,L),U=new Set([...Object.keys(W.libraryDependencies||{}),...Object.keys(W.libraryDevDependencies||{})].map(A)),J=new Set,a0=[...U];for(;a0.length>0;){let i0=a0.shift();if(J.has(i0))continue;J.add(i0);let Q=px.Utils.joinPath(k,ce,i0);try{let s0=px.Utils.joinPath(Q,K.fileName);if(!await L.stat(s0))continue;let H=await K.readRaw(Q,L);await Tr.normalizeLibraryParts(Q,L,H,Z),a0.push(...[...Object.keys(H.libraryDependencies||{}),...Object.keys(H.libraryDevDependencies||{})].map(A))}catch(s0){Z.warn(`Could not normalize library parts for "${i0}": ${s0}`)}}}I.normalizeInstalledLibraryParts=S;async function P(k,L,Z){let W=await K.read(k,L),U=await Pf(k,L,Z,W);if(!U)return;let J=W.engines?.backend;if(!J||K.compareBackendVersion(U.backend,J)>0){let a0=J?`"${J}"`:"none",i0=K.isLibrary(W)?"library":"application",Q=K.isLibrary(W)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${U.requiredBy}" requires "engines.backend" >= "${U.backend}" but the ${i0} "${W.publisher}/${W.name}" declares ${a0}. Raise "engines.backend" in studio.json to at least "${U.backend}".${Q}`)}}I.validateMinimumBackendVersion=P;async function N(k,L,Z){await S(k,L,Z);let W=await K.read(k,L),U=[];W.pov?.details?.workingPath&&U.push({name:"pov",workingPath:W.pov.details.workingPath}),W.blo?.workingPath&&U.push({name:"blo",workingPath:W.blo.workingPath});let J=[];for(let s0 of U){let H=px.Utils.joinPath(k,s0.workingPath),v0=px.Utils.joinPath(H,mt);await L.stat(v0)&&J.push(s0)}if(J.length===0)return;let a0=await m(k,L),{rootInstall:i0,partInstalls:Q}=j(J,a0);if(i0){let s0=J.filter(H=>!Q.includes(H.workingPath)).map(H=>H.workingPath).join(", ");Z.info(`npm workspaces detected in root package.json - installing dependencies once at the project root (${s0}) using 'npm install' (an in-sync package-lock.json is installed as-is and left unchanged)`),await an(k,"npm install --no-audit --no-fund",Z)}for(let s0 of J){if(!Q.includes(s0.workingPath))continue;a0?Z.warn(`${s0.workingPath} (${s0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):Z.info(`Installing npm dependencies for ${s0.name} (${s0.workingPath})...`);let H=px.Utils.joinPath(k,s0.workingPath);await Lf(H,L,Z)}}I.installNpmInApmParts=N;async function R(k,L,Z){let W=await K.read(k,L),U=await x(W),J=[],a0=t0.filePaths[Z].path,i0=Z===u0.Part.dlo?"inc":"dfiles";for(let Q in U){let s0=I.dependencyToPath(k,Q),H=I.dependencyIdToName(Q),v0=px.Utils.joinPath(s0,a0,`${H}.${i0}`);await L.stat(v0)&&J.push({name:H,path:v0})}if(K.isLibrary(W)){let Q=px.Utils.joinPath(k,a0,`${W.name}.${i0}`);await L.stat(Q)&&J.push({name:W.name,path:Q})}return J}I.getApmPartDependencies=R;async function O(k,L,Z,W,U){let J=await K.read(k,L),a0=[{partName:"blo",partDistPath:"blo",workingPath:J.blo?.workingPath},{partName:"pov",partDistPath:"pov/details",workingPath:J.pov?.details?.workingPath}];for(let{partName:i0,partDistPath:Q,workingPath:s0}of a0){if(!s0)continue;let H=px.Utils.joinPath(k,ce,W,"dist",...Q.split("/"),mt);if(await L.stat(H))try{let l0=await eo(k,L,s0),B0=U?"devDependencies":"dependencies";l0[B0]=l0[B0]||{};let d0=s0.split("/").length,$0=Array(d0).fill("..").join("/");l0[B0][W]=`file:${$0}/${ce}/${W}/dist/${Q}`,await ro(k,L,s0,l0),Z.info(`Linked ${W} to ${i0} (${s0})`)}catch(l0){Z.warn(`Could not link ${W} to ${i0}: ${l0}`)}}}I.linkLibraryApmParts=O;async function e0(k,L,Z,W){let U=await K.read(k,L),J=[{partName:"blo",workingPath:U.blo?.workingPath},{partName:"pov",workingPath:U.pov?.details?.workingPath}];for(let{partName:a0,workingPath:i0}of J)if(i0)try{let Q=await eo(k,L,i0),s0=!1;Q.dependencies?.[W]?.startsWith("file:")&&(delete Q.dependencies[W],s0=!0),Q.devDependencies?.[W]?.startsWith("file:")&&(delete Q.devDependencies[W],s0=!0),s0&&(await ro(k,L,i0,Q),Z.info(`Unlinked ${W} from ${a0}`))}catch(Q){Z.warn(`Could not unlink ${W} from ${a0}: ${Q}`)}}I.unlinkLibraryApmParts=e0})(ex||={});async function io(x,A){let e=await A.readFile(x);return JSON.parse(j0.convertBlobToString(e))}function eo(x,A,e){return io(px.Utils.joinPath(x,e,mt),A)}async function ro(x,A,e,r){let t=px.Utils.joinPath(x,e,mt),i=JSON.stringify(r,null," ")+`
2209
+ `;await A.writeFile(t,i)}async function qf(x,A){return await Fx.fetchCustomContent(x,A,!0)}async function Nf(x,A,e){let r={};function t(E,u,D,m=!1){let w=r[E],j=ex.rangeToVersion(D),S=ex.rangeToVersion(D);(!w||KA.gt(j,S))&&(r[E]={publisherId:u,version:D,installed:m})}let i=Object.entries(e).map(([E,u])=>{let[D,m]=E.split("/");return t(m,D,u,!0),m}),n={};for(let E of i)try{let u=await If(x,A,E);n[E]=Object.entries(u).map(([D,m])=>{let[w,j]=D.split("/");return t(j,w,m),j}),i.push(...n[E])}catch{let D=r[E];throw new Error(`Please import "${D.publisherId}/${E}" first.`)}let F=[];for(;;){let E=i.filter(u=>F.includes(u)?!1:(n[u]||[]).every(m=>F.includes(m)));if(F.push(...E),i.length===F.length||!E.length)break}let v={};return[...new Set(F)].forEach(E=>{let{version:u,publisherId:D}=r[E],m=Mf(D,E,u);v[m.libraryId]=m.libraryVersion}),v}async function If(x,A,e){let r=px.Utils.joinPath(x,ce,e);return(await K.read(r,A))?.libraryDependencies||{}}function Mf(x,A,e){return{libraryName:A,publisherId:x,libraryVersion:e[0]==="^"?e:"^"+e,libraryId:`${x}/${A}`}}function an(x,A,e){return new Promise((r,t)=>{to.exec(A,{cwd:x.fsPath,env:process.env},(i,n,F)=>{if(n&&e.log(n),F&&e.error(F),i){t(new Error(`${i.message}
2210
2210
  ${n}
2211
- ${F}`));return}r()})})}async function If(x,A,e){let r=px.Utils.joinPath(x,_f);if(!await A.stat(r)){e.warn(`No package-lock.json found in ${x.fsPath} - running 'npm install' instead of 'npm ci'.`),await sn(x,"npm install",e);return}try{await sn(x,"npm ci",e)}catch{e.warn(`'npm ci' failed in ${x.fsPath} - falling back to 'npm install'. If package-lock.json changed afterwards, commit it.`),await sn(x,"npm install",e)}}var so=U0(require("ini"));var Mf=j0.convertBlobToString,Lf=r0.filePaths.dlo.path,vx;(t=>{let x;(v=>(v.lucky="lucky",v.wynni="wynni",v.production="production"))(x=t.ENV||={});async function A(s,n,F){let v=await z.read(s,n),E=await ex.getAll(v),u={},p={},m={};for(let O in E){let L=ex.dependencyToPath(s,O),t0=ex.dependencyIdToName(O),M=Te.Utils.joinPath(L,Lf,`${t0}.ini`);await Tr(n,M,u,p,m,t0);let k=Te.Utils.joinPath(L,r0.filePaths.defaultsIni);await Tr(n,k,u,p,m,t0)}if(z.isLibrary(v)){let O=Te.Utils.joinPath(s,r0.filePaths.dlo.path,`${v.name}.ini`);F&&await n.stat(O)&&F.warn(`dlo/${v.name}.ini is deprecated. Please migrate your defines to defaults.ini in the project root.`),await Tr(n,O,u,p,m,v.name)}let w=v.dlo?.iniFile||r0.filePaths.dlo.mainINI,j=Te.Utils.joinPath(s,w);F&&await n.stat(j)&&F.warn(`${w} is deprecated. Please migrate your defines to app.ini in the project root.`);let S=Uf(w);if(await Tr(n,j,u,p,m,S),z.isLibrary(v)){let O=Te.Utils.joinPath(s,r0.filePaths.defaultsIni);await Tr(n,O,u,p,m,"defaults")}let P=Rf(v,u,p,m),N=Te.Utils.joinPath(s,r0.filePaths.appIni);return await Tr(n,N,u,p,m,"app"),{flat:u,sections:p,definesWithSource:m,defaultsOnly:P}}t.read=A;async function e(s,n,F,v){let E=Object.entries(F.flat),u=[];for(let[w,j]of E){let S=F.definesWithSource[w];if(S?.comment){let N=to(S.comment);for(let O of N.split(`
2212
- `))u.push(` ${O}`)}let P=no(j)?"number":"string";u.push(` ${w}: ${P};`)}let p=["// Auto-generated by @microtronics/studio-cli \u2014 DO NOT EDIT","declare global {"," interface StudioDefines {",...u," }"," var STUDIO_DEFINES: StudioDefines;","}","","globalThis.STUDIO_DEFINES ??= {} as StudioDefines;",""];for(let[w,j]of E){let S=F.definesWithSource[w];if(S?.comment&&p.push(to(S.comment)),no(j))p.push(`globalThis.STUDIO_DEFINES['${w}'] = ${Number(j)};`);else{let P=j.replace(/\\/g,"\\\\").replace(/'/g,"\\'");p.push(`globalThis.STUDIO_DEFINES['${w}'] = '${P}';`)}}p.push(""),p.push("export {};"),p.push("");let m=Te.Utils.joinPath(s,v??r0.filePaths.dist.definesTs);await n.writeFile(m,p.join(`
2213
- `))}t.exportDefinesTs=e;function r(s,n){let F=[];return{result:s.replace(/\{\{([^}]+)\}\}/g,(E,u)=>{let p=u.trim();return Object.hasOwn(n,p)?n[p]:(F.push(p),E)}),unresolvedKeys:F}}t.replaceDefineTemplates=r})(vx||={});function Rf(x,A,e,r){if(z.isLibrary(x))return{flat:{...A},sections:structuredClone(e),definesWithSource:{...r}}}function Of(x){if(x==="")return{kind:"empty"};if(x.startsWith("#")||x.startsWith(";"))return{kind:"comment",text:x.replace(/^[#;]\s?/,"")};if(x.startsWith("[")&&x.endsWith("]"))return{kind:"section",name:x.slice(1,-1)};let A=x.indexOf("=");return A>0?{kind:"keyValue",key:x.slice(0,A).trim()}:{kind:"other"}}function Gf(x){let A={},e=x.split(/\r?\n/),r=[],t=null;for(let s of e){let n=Of(s.trim());if(n.kind==="empty"||n.kind==="other"){r=[];continue}if(n.kind==="comment"){r.push(n.text);continue}if(n.kind==="section"){t=n.name;continue}let F=t?`${t}_${n.key}`:n.key;r.length>0&&(A[F]=r.join(`
2214
- `)),r=[]}return A}function to(x){let A=x.split(`
2211
+ ${F}`));return}r()})})}async function Lf(x,A,e){let r=px.Utils.joinPath(x,$f);if(!await A.stat(r)){e.warn(`No package-lock.json found in ${x.fsPath} - running 'npm install' instead of 'npm ci'.`),await an(x,"npm install",e);return}try{await an(x,"npm ci",e)}catch{e.warn(`'npm ci' failed in ${x.fsPath} - falling back to 'npm install'. If package-lock.json changed afterwards, commit it.`),await an(x,"npm install",e)}}var oo=U0(require("ini"));var Rf=j0.convertBlobToString,Of=t0.filePaths.dlo.path,vx;(t=>{let x;(v=>(v.lucky="lucky",v.wynni="wynni",v.production="production"))(x=t.ENV||={});async function A(i,n,F){let v=await K.read(i,n),E=await ex.getAll(v),u={},D={},m={};for(let R in E){let O=ex.dependencyToPath(i,R),e0=ex.dependencyIdToName(R),I=Pe.Utils.joinPath(O,Of,`${e0}.ini`);await Pr(n,I,u,D,m,e0);let k=Pe.Utils.joinPath(O,t0.filePaths.defaultsIni);await Pr(n,k,u,D,m,e0)}if(K.isLibrary(v)){let R=Pe.Utils.joinPath(i,t0.filePaths.dlo.path,`${v.name}.ini`);F&&await n.stat(R)&&F.warn(`dlo/${v.name}.ini is deprecated. Please migrate your defines to defaults.ini in the project root.`),await Pr(n,R,u,D,m,v.name)}let w=v.dlo?.iniFile||t0.filePaths.dlo.mainINI,j=Pe.Utils.joinPath(i,w);F&&await n.stat(j)&&F.warn(`${w} is deprecated. Please migrate your defines to app.ini in the project root.`);let S=Jf(w);if(await Pr(n,j,u,D,m,S),K.isLibrary(v)){let R=Pe.Utils.joinPath(i,t0.filePaths.defaultsIni);await Pr(n,R,u,D,m,"defaults")}let P=Gf(v,u,D,m),N=Pe.Utils.joinPath(i,t0.filePaths.appIni);return await Pr(n,N,u,D,m,"app"),{flat:u,sections:D,definesWithSource:m,defaultsOnly:P}}t.read=A;async function e(i,n,F,v){let E=Object.entries(F.flat),u=[];for(let[w,j]of E){let S=F.definesWithSource[w];if(S?.comment){let N=so(S.comment);for(let R of N.split(`
2212
+ `))u.push(` ${R}`)}let P=ao(j)?"number":"string";u.push(` ${w}: ${P};`)}let D=["// Auto-generated by @microtronics/studio-cli \u2014 DO NOT EDIT","declare global {"," interface StudioDefines {",...u," }"," var STUDIO_DEFINES: StudioDefines;","}","","globalThis.STUDIO_DEFINES ??= {} as StudioDefines;",""];for(let[w,j]of E){let S=F.definesWithSource[w];if(S?.comment&&D.push(so(S.comment)),ao(j))D.push(`globalThis.STUDIO_DEFINES['${w}'] = ${Number(j)};`);else{let P=j.replace(/\\/g,"\\\\").replace(/'/g,"\\'");D.push(`globalThis.STUDIO_DEFINES['${w}'] = '${P}';`)}}D.push(""),D.push("export {};"),D.push("");let m=Pe.Utils.joinPath(i,v??t0.filePaths.dist.definesTs);await n.writeFile(m,D.join(`
2213
+ `))}t.exportDefinesTs=e;function r(i,n){let F=[];return{result:i.replace(/\{\{([^}]+)\}\}/g,(E,u)=>{let D=u.trim();return Object.hasOwn(n,D)?n[D]:(F.push(D),E)}),unresolvedKeys:F}}t.replaceDefineTemplates=r})(vx||={});function Gf(x,A,e,r){if(K.isLibrary(x))return{flat:{...A},sections:structuredClone(e),definesWithSource:{...r}}}function Uf(x){if(x==="")return{kind:"empty"};if(x.startsWith("#")||x.startsWith(";"))return{kind:"comment",text:x.replace(/^[#;]\s?/,"")};if(x.startsWith("[")&&x.endsWith("]"))return{kind:"section",name:x.slice(1,-1)};let A=x.indexOf("=");return A>0?{kind:"keyValue",key:x.slice(0,A).trim()}:{kind:"other"}}function Hf(x){let A={},e=x.split(/\r?\n/),r=[],t=null;for(let i of e){let n=Uf(i.trim());if(n.kind==="empty"||n.kind==="other"){r=[];continue}if(n.kind==="comment"){r.push(n.text);continue}if(n.kind==="section"){t=n.name;continue}let F=t?`${t}_${n.key}`:n.key;r.length>0&&(A[F]=r.join(`
2214
+ `)),r=[]}return A}function so(x){let A=x.split(`
2215
2215
  `);return A.length===1?`/** ${A[0]} */`:`/**
2216
2216
  ${A.map(r=>` * ${r}`).join(`
2217
2217
  `)}
2218
- */`}function no(x){return x!==""&&!isNaN(Number(x))}function Uf(x){return(x.split("/").pop()||x).replace(/\.ini$/i,"")}function io(x,A,e){let r=A?`${e}: ${A}`:void 0;return x&&r?`${x}
2219
- ${r}`:r||x}function ao(x,A,e,r,t,s,n){let F=t?`${t}_${r}`:r,v={value:x,sourceUri:A,sourceLine:Jf(e,r,t)};return s[F]&&(v.comment=`${n}: ${s[F]}`),v}function Hf(x,A,e,r,t,s,n,F,v){r[x]||(r[x]={});for(let[E,u]of Object.entries(A)){let p=`${x}_${E}`,m=F[p],w=`${u}`;e[p]=w,r[x][E]=w;let j=ao(w,s,n,E,x,F,v);j.comment=io(t[p]?.comment,m,v),t[p]=j}}async function Tr(x,A,e,r,t,s){if(!await x.stat(A))return;let n=await x.readFile(A),F=Mf(n),v=so.parse(F),E=A.toString(),u=F.split(/\r?\n/),p=Gf(F);for(let[m,w]of Object.entries(v))if(typeof w=="object"&&w!==null)Hf(m,w,e,r,t,E,u,p,s);else{let j=p[m],S=`${w}`;e[m]=S;let P=ao(S,E,u,m,null,p,s);P.comment=io(t[m]?.comment,j,s),t[m]=P}}function Jf(x,A,e){let r=e===null,t=e?`[${e}]`:null,s=new RegExp(`^\\s*${Kf(A)}\\s*=`);for(let n=0;n<x.length;n++){let F=x[n].trim();if(t&&F===t){r=!0;continue}if(r&&F.startsWith("[")&&F.endsWith("]")&&e!==null){r=!1;continue}if(r&&s.test(x[n]))return n}return 0}function Kf(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var on=U0(require("semver/preload")),{GET:ws,POST:an,PUT:oo}=(0,Fo.default)();function vA(x){if(x)return{authorization:`Bearer ${x}`}}var Fx;(w=>{w.getAPIUrl=j=>{let S="https://api.registry.microtronics.com";return j===vx.ENV.lucky?S="https://api.registry.lucky.ci.microtronics.com":j===vx.ENV.wynni&&(S="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:S+"/v1"}};async function A(j,S,P,N){let{data:O,error:L}=await ws("/publisher/{publisherId}/libraries/{libraryId}",{...(0,w.getAPIUrl)(N),headers:{...vA(j)},params:{path:{publisherId:S,libraryId:P}}});if(L)throw new Error(L.reason);return O}w.getLibraryProfile=A;async function e(j,S,P=!1){let N=await fetch(S,{headers:{...vA(j),...m(!0)}});if(N.status===200)return P?await N.json():await N.arrayBuffer();throw new Error("Failed to fetch the library content")}w.fetchCustomContent=e;async function r(j,S,P){try{let{data:N,error:O}=await ws("/publisher/{publisherId}",{...(0,w.getAPIUrl)(P),headers:{...vA(j)},params:{path:{publisherId:S}}});return O?(console.error(O),null):N}catch(N){return console.error(N),null}}w.getPublisher=r;async function t(j,S,P,N){try{let{data:O,error:L}=await an("/packages/{publisherId}/applications",{...(0,w.getAPIUrl)(N),headers:{...vA(j),...m(!0)},params:{path:{publisherId:S}},body:{...P}});if(L)throw new Error(L.reason);return O.id}catch{return null}}w.createNewApplication=t;async function s(j,S,P,N){let{data:O,error:L}=await ws("/publisher/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(N),headers:{...vA(j),...m(!0)},params:{path:{publisherId:S,applicationId:P}}});if(L)throw new Error(L.reason);return O}w.getExistingApplication=s;async function n(j,S,P,N,O){try{let{error:L}=await oo("/packages/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(O),headers:{...vA(j),...m(!0)},params:{path:{publisherId:S,applicationId:P}},body:{...N}});if(L)throw new Error(L.reason);return}catch{return null}}w.updateExistingApplication=n;async function F(j,S,P,N,O,L){let t0=!!on.default.valid(N);try{let{error:M}=await oo("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(L),headers:{...vA(j),...m(t0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:N}},body:{...O}});if(M)throw new Error(M.reason);return}catch{return null}}w.updateExistingApplicationVersion=F;async function v(j,S,P,N,O,L){let t0=!!on.default.valid(N),{data:M,error:k}=await an("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(L),headers:{...vA(j),...m(t0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:N}},body:{},bodySerializer(){return O}});if(k)throw new Error(k.reason||k.err||k);return M}w.publishApplicationVersion=v;let E={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function u(j,S,P,N,O,L){try{let{error:t0}=await an("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,w.getAPIUrl)(L),headers:{...vA(j),...m(!0)},params:{path:{publisherId:S,libraryId:P,libraryVersion:N}},body:{...O},bodySerializer(M){let k=new FormData;for(let[R,Q]of Object.entries(M))Q!==void 0&&k.append(R,new Blob([Q],{type:E[R]}),R);return k}});if(t0)throw new Error(t0.reason)}catch(t0){throw console.error(t0),t0}}w.publishLibraryVersion=u;async function p(j,S,P,N,O,L,t0){let M=!!on.default.valid(N),{error:k}=await an("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,w.getAPIUrl)(t0),headers:{...vA(j),...m(M),"Content-Type":"application/octet-stream"},params:{path:{publisherId:S,applicationId:P,applicationVersion:N,applicationFileName:O}},body:{},bodySerializer(){return L}});if(k)throw new Error(k.reason)}w.updateApplicationFile=p;function m(j=!1){return j?{"X-Semver":"true"}:{}}w.injectSemverHeader=m})(Fx||={});var Eo=U0(require("semver/preload"));var Bo=require("deepmerge-ts"),zf=j0.isNumeric,vo="52v007",lo="53v001",Vf="54v001",Wf="56v001",lA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,Bo.deepmerge)(structuredClone(this._manifest),lA._overwrites||{})},set manifest(x){this._manifest=x},set overwrites(x){this._overwrites=x},get stat(){return this._stat},set stat(x){this._stat=x},clear(){this._stat=null,this._manifest=null}},z;(s0=>{let x=j0.convertBlobToString;s0.fileName="studio.json";let e;(L0=>(L0.m22x="m22x",L0.m23x="m23x",L0.nrf91="nrf91",L0.m2blegw="m2blegw",L0.m2easyv3="m2easyv3",L0.m2easyiot="m2easyiot"))(e=s0.DeviceProfiles||={});let r;(d0=>(d0.app="app",d0.library="library",d0.addon="addon",d0.analytics="analytics"))(r=s0.ProjectTypes||={});let t;(c0=>(c0.restricted="restricted",c0.global="global"))(t=s0.BloAccessLevel||={});let s;(c0=>(c0.embedded="$embedded",c0.pure="$pure"))(s=s0.PovLocation||={});function n(U){lA.overwrites=U}s0.setOverwrites=n;function F(){lA.overwrites=null}s0.clearOverwrites=F;async function v(U,v0){let c0=Pr.Utils.joinPath(U,s0.fileName),B0=await v0.stat(c0);if(lA.manifest===null||c0?.fsPath!==lA.stat?.path.fsPath||B0?.ctime!==lA.stat?.ctime||B0?.mtime!==lA.stat?.mtime||B0?.size!==lA.stat?.size){let d0=await v0.readFile(c0),$0=x(d0);lA.manifest=JSON.parse($0),lA.stat={...B0,path:c0}}return lA.manifest}s0.read=v;async function E(U,v0){return await v0.readFile(Pr.Utils.joinPath(U,s0.fileName))}s0.readAsBlob=E;async function u(U,v0){let c0=Pr.Utils.joinPath(U,s0.fileName),B0=await v0.readFile(c0),d0=x(B0);return JSON.parse(d0)}s0.readRaw=u;async function p(U,v0,c0){return lA.clear(),eE(c0),v0.writeFile(Pr.Utils.joinPath(U,s0.fileName),JSON.stringify(c0,null," "))}s0.write=p;function m(U){return U.library!==void 0?U.library:U.type==="library"}s0.isLibrary=m;function w(U){return U.type==="addon"}s0.isAddon=w;function j(U){return U.type===void 0&&!m(U)?!0:U.type==="app"}s0.isApp=j;function S(U){return U.type===void 0?!0:U.type==="app"}s0.isIotApp=S;function P(U){return U.type==="analytics"}s0.isAnalytics=P;async function N(U,v0,c0){c0||(c0=await v(U,v0)),AE(c0),Xf(c0),Yf(c0),xE(c0)}s0.validateBasicManifest=N;function O(U){let v0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(U.match(/^[a-z0-9-_]+$/)){let B0=["-","_"];if(B0.includes(U[0])||B0.includes(U[U.length-1]))return v0}else return v0;return U.length<3||U.length>20?"The library name is beyond permissible length of 20 characters.":null}s0.validateLibraryName=O;function L(U,v0){if(v0)return O(U);{let c0="Project name can only contain 'A' through 'Z', 'a' through 'z', '0' through '9', ' ', '_' and '-'. The Project name must start with an alphabetic or numeric character.";if(!U.match(/^([a-zA-Z0-9 _-]+)$/))return c0;if(U.length<3||U.length>40)return"The project name is beyond permissible length of 40 characters.";let d0=["-","_"," "];return d0.includes(U[0])||d0.includes(U[U.length-1])?c0:null}}s0.validateProjectName=L;function t0(U){return U.length<5?"The description must have at least 5 characters.":null}s0.validateDescription=t0;function M(U){if(!U)return"No publisher set yet";let v0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(U.match(/^[a-zA-Z0-9-]+$/)){let B0=["_"];if(B0.includes(U[0])||B0.includes(U[U.length-1]))return v0}else return v0;return null}s0.validatePublisherId=M;async function k(U,v0,c0){return await Fx.getPublisher(U,v0,c0)?null:`Publisher '${v0}' does not exist.`}s0.validatePublisherOnline=k;let R=/^(((?!-))(xn--)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9-]{1,61}|[a-z0-9-]{1,30})\.[a-z]{2,}$/;async function Q(U){if(U===void 0)return"Allowed backends not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let v0=U?.includes(";")?U.split(";"):U;for(let c0 of v0)if(!c0.match(R))return`Domain "${c0}" is invalid`}else if(!U?.match(R)&&U!=="*")return'Invalid value for "allowedBackends"';return null}s0.validateRegistryAllowedBackends=Q;let K=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;async function J(U){if(U===void 0)return"Allowed applications not specified yet";if(U===null)return null;if(Array.isArray(U)||U?.includes(";")){let v0=U?.includes(";")?U.split(";"):U;for(let c0 of v0)if(!c0.match(K))return`Application id "${c0}" is invalid`}else if(!U?.match(K)&&U!=="*")return'Invalid value for "allowedApplications"';return null}s0.validateRegistryAllowedApplications=J;async function H(U,v0,c0){let B0=c0.icon;if(!B0)throw new Error("App icon is required for publishing an application!");let d0=Pr.Utils.joinPath(U,B0);if(!await v0.stat(d0))throw new Error(`Could not load icon "${B0}"`);let L0=await v0.readFile(d0),Ex=(0,co.imageDimensionsFromData)(L0);if(!Ex)throw new Error("App icon could not be validated!");if(Ex?.width!==Ex?.height)throw new Error("App icon has to be a square!");if(Ex.width>512||Ex.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,fo.isPNG)(L0))throw new Error("App icon has to be of type PNG!")}s0.validateApplicationIcon=H;function a0(U){let{engines:v0}=U;if(v0?.backend&&!v0.backend.match(/(^[5-9][2-9]|[6-9]\d+|\d{3,})v(0(0[0-9]|[1-9]\d)|[1-9]\d{2}|[1-9]\d{3,})$/))throw new Error('Setting "engines.backend" is invalid');Qf(U),Zf(U)}s0.validateEngineSettings=a0;function n0(U,v0){let c0=$0=>{let L0=/^(\d+)v(\d+)$/.exec($0);return L0?[Number(L0[1]),Number(L0[2])]:null},B0=c0(U),d0=c0(v0);return B0&&d0?B0[0]-d0[0]||B0[1]-d0[1]:U===v0?0:U<v0?-1:1}s0.compareBackendVersion=n0;async function Z(U,v0,c0,B0){B0||(B0=await s0.read(U,v0));let d0=s0.isAddon(B0),$0=s0.isAnalytics(B0);switch(c0){case u0.Part.dlo:return!!B0?.dlo?.mainFile&&!d0&&!$0;case u0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case u0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case u0.Part.dde:case u0.Part.dfiles:return!0;default:return!1}}s0.isApmPartEnabled=Z})(z||={});function Xf(x){let{pov:A}=x;if(A&&A.details){if(!Object.hasOwn(A.details,"buildCommand"))throw new Error('Setting "pov.details.buildCommand" missing!');if(!Object.hasOwn(A.details,"workingPath"))throw new Error('Setting "pov.details.workingPath" missing!')}}function Yf(x){let{blo:A}=x;if(A){if(!Object.hasOwn(A,"buildCommand"))throw new Error('Setting "blo.buildCommand" missing!');if(!Object.hasOwn(A,"workingPath"))throw new Error('Setting "blo.workingPath" missing!');if(A.accessLevel&&!["restricted","global"].includes(A.accessLevel))throw new Error('Only "restricted" or "global" are allowed as value for "blo.accessLevel"!')}}function Qf(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(z.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=vo){if(r&&e)throw new Error('Only "engines.hwfw" or "engines.productId" is allowed!"')}else if(e)throw new Error(`"engines.productId" requires "engines.backend" to be "${vo}"`)}function Zf(x){if(!z.isAddon(x)&&!z.isAnalytics(x))return;let{backend:A}=x.engines,e=z.isAddon(x)?Vf:Wf;if(!A||A<e)throw new Error(`Project type "${x.type}" requires "engines.backend" to be ">=${e}"`);if(x.dlo)throw new Error(`For project type "${x.type}", "dlo" is not supported!"`);if(x.dpid)throw new Error(`For project type "${x.type}", "dpid" is not supported!"`)}function xE(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(z.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!z.isAddon(x))throw new Error('Property "maxInstancesPerSite" is only allowed for addon projects!');if(!Number.isInteger(A))throw new Error('Property "maxInstancesPerSite" must be an integer!');if(A<1||A>100)throw new Error('Property "maxInstancesPerSite" must be between 1 and 100!')}function AE(x){if((x.engines?.backend||"00v000")>=lo||z.isLibrary(x)){if(!Eo.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${lo} onwards "version" has to be a semantic version string!"`)}else if(!zf(x.version))throw new Error('"version" has to be a number!')}function eE(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var fr=require("vscode-uri");var hx=require("vscode-uri");var Ol=U0(require("ajv")),Gl=U0(require("ajv-formats"));var Co={$schema:"http://json-schema.org/draft-07/schema#",title:"Dynamic DDE Schema",description:"Describe your data structure for Microtronics IoT devices",type:"object",additionalProperties:!1,properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value.",markdownDescription:`Version of the DDE schema.
2218
+ */`}function ao(x){return x!==""&&!isNaN(Number(x))}function Jf(x){return(x.split("/").pop()||x).replace(/\.ini$/i,"")}function Fo(x,A,e){let r=A?`${e}: ${A}`:void 0;return x&&r?`${x}
2219
+ ${r}`:r||x}function vo(x,A,e,r,t,i,n){let F=t?`${t}_${r}`:r,v={value:x,sourceUri:A,sourceLine:zf(e,r,t)};return i[F]&&(v.comment=`${n}: ${i[F]}`),v}function Kf(x,A,e,r,t,i,n,F,v){r[x]||(r[x]={});for(let[E,u]of Object.entries(A)){let D=`${x}_${E}`,m=F[D],w=`${u}`;e[D]=w,r[x][E]=w;let j=vo(w,i,n,E,x,F,v);j.comment=Fo(t[D]?.comment,m,v),t[D]=j}}async function Pr(x,A,e,r,t,i){if(!await x.stat(A))return;let n=await x.readFile(A),F=Rf(n),v=oo.parse(F),E=A.toString(),u=F.split(/\r?\n/),D=Hf(F);for(let[m,w]of Object.entries(v))if(typeof w=="object"&&w!==null)Kf(m,w,e,r,t,E,u,D,i);else{let j=D[m],S=`${w}`;e[m]=S;let P=vo(S,E,u,m,null,D,i);P.comment=Fo(t[m]?.comment,j,i),t[m]=P}}function zf(x,A,e){let r=e===null,t=e?`[${e}]`:null,i=new RegExp(`^\\s*${Vf(A)}\\s*=`);for(let n=0;n<x.length;n++){let F=x[n].trim();if(t&&F===t){r=!0;continue}if(r&&F.startsWith("[")&&F.endsWith("]")&&e!==null){r=!1;continue}if(r&&i.test(x[n]))return n}return 0}function Vf(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Fn=U0(require("semver/preload")),{GET:_i,POST:on,PUT:lo}=(0,co.default)();function lA(x){if(x)return{authorization:`Bearer ${x}`}}var Fx;(w=>{w.getAPIUrl=j=>{let S="https://api.registry.microtronics.com";return j===vx.ENV.lucky?S="https://api.registry.lucky.ci.microtronics.com":j===vx.ENV.wynni&&(S="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:S+"/v1"}};async function A(j,S,P,N){let{data:R,error:O}=await _i("/publisher/{publisherId}/libraries/{libraryId}",{...(0,w.getAPIUrl)(N),headers:{...lA(j)},params:{path:{publisherId:S,libraryId:P}}});if(O)throw new Error(O.reason);return R}w.getLibraryProfile=A;async function e(j,S,P=!1){let N=await fetch(S,{headers:{...lA(j),...m(!0)}});if(N.status===200)return P?await N.json():await N.arrayBuffer();throw new Error("Failed to fetch the library content")}w.fetchCustomContent=e;async function r(j,S,P){try{let{data:N,error:R}=await _i("/publisher/{publisherId}",{...(0,w.getAPIUrl)(P),headers:{...lA(j)},params:{path:{publisherId:S}}});return R?(console.error(R),null):N}catch(N){return console.error(N),null}}w.getPublisher=r;async function t(j,S,P,N){try{let{data:R,error:O}=await on("/packages/{publisherId}/applications",{...(0,w.getAPIUrl)(N),headers:{...lA(j),...m(!0)},params:{path:{publisherId:S}},body:{...P}});if(O)throw new Error(O.reason);return R.id}catch{return null}}w.createNewApplication=t;async function i(j,S,P,N){let{data:R,error:O}=await _i("/publisher/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(N),headers:{...lA(j),...m(!0)},params:{path:{publisherId:S,applicationId:P}}});if(O)throw new Error(O.reason);return R}w.getExistingApplication=i;async function n(j,S,P,N,R){try{let{error:O}=await lo("/packages/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(R),headers:{...lA(j),...m(!0)},params:{path:{publisherId:S,applicationId:P}},body:{...N}});if(O)throw new Error(O.reason);return}catch{return null}}w.updateExistingApplication=n;async function F(j,S,P,N,R,O){let e0=!!Fn.default.valid(N);try{let{error:I}=await lo("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(O),headers:{...lA(j),...m(e0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:N}},body:{...R}});if(I)throw new Error(I.reason);return}catch{return null}}w.updateExistingApplicationVersion=F;async function v(j,S,P,N,R,O){let e0=!!Fn.default.valid(N),{data:I,error:k}=await on("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(O),headers:{...lA(j),...m(e0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:N}},body:{},bodySerializer(){return R}});if(k)throw new Error(k.reason||k.err||k);return I}w.publishApplicationVersion=v;let E={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function u(j,S,P,N,R,O){try{let{error:e0}=await on("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,w.getAPIUrl)(O),headers:{...lA(j),...m(!0)},params:{path:{publisherId:S,libraryId:P,libraryVersion:N}},body:{...R},bodySerializer(I){let k=new FormData;for(let[L,Z]of Object.entries(I))Z!==void 0&&k.append(L,new Blob([Z],{type:E[L]}),L);return k}});if(e0)throw new Error(e0.reason)}catch(e0){throw console.error(e0),e0}}w.publishLibraryVersion=u;async function D(j,S,P,N,R,O,e0){let I=!!Fn.default.valid(N),{error:k}=await on("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,w.getAPIUrl)(e0),headers:{...lA(j),...m(I),"Content-Type":"application/octet-stream"},params:{path:{publisherId:S,applicationId:P,applicationVersion:N,applicationFileName:R}},body:{},bodySerializer(){return O}});if(k)throw new Error(k.reason)}w.updateApplicationFile=D;function m(j=!1){return j?{"X-Semver":"true"}:{}}w.injectSemverHeader=m})(Fx||={});var uo=U0(require("semver/preload"));var Do=require("deepmerge-ts"),Wf=j0.isNumeric,fo="52v007",Eo="53v001",Xf="54v001",Yf="56v001",cA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,Do.deepmerge)(structuredClone(this._manifest),cA._overwrites||{})},set manifest(x){this._manifest=x},set overwrites(x){this._overwrites=x},get stat(){return this._stat},set stat(x){this._stat=x},clear(){this._stat=null,this._manifest=null}},K;(s0=>{let x=j0.convertBlobToString;s0.fileName="studio.json";let e;(q0=>(q0.m22x="m22x",q0.m23x="m23x",q0.nrf91="nrf91",q0.m2blegw="m2blegw",q0.m2easyv3="m2easyv3",q0.m2easyiot="m2easyiot"))(e=s0.DeviceProfiles||={});let r;(d0=>(d0.app="app",d0.library="library",d0.addon="addon",d0.analytics="analytics"))(r=s0.ProjectTypes||={});let t;(l0=>(l0.restricted="restricted",l0.global="global"))(t=s0.BloAccessLevel||={});let i;(l0=>(l0.embedded="$embedded",l0.pure="$pure"))(i=s0.PovLocation||={});function n(H){cA.overwrites=H}s0.setOverwrites=n;function F(){cA.overwrites=null}s0.clearOverwrites=F;async function v(H,v0){let l0=qr.Utils.joinPath(H,s0.fileName),B0=await v0.stat(l0);if(cA.manifest===null||l0?.fsPath!==cA.stat?.path.fsPath||B0?.ctime!==cA.stat?.ctime||B0?.mtime!==cA.stat?.mtime||B0?.size!==cA.stat?.size){let d0=await v0.readFile(l0),$0=x(d0);cA.manifest=JSON.parse($0),cA.stat={...B0,path:l0}}return cA.manifest}s0.read=v;async function E(H,v0){return await v0.readFile(qr.Utils.joinPath(H,s0.fileName))}s0.readAsBlob=E;async function u(H,v0){let l0=qr.Utils.joinPath(H,s0.fileName),B0=await v0.readFile(l0),d0=x(B0);return JSON.parse(d0)}s0.readRaw=u;async function D(H,v0,l0){return cA.clear(),tE(l0),v0.writeFile(qr.Utils.joinPath(H,s0.fileName),JSON.stringify(l0,null," "))}s0.write=D;function m(H){return H.library!==void 0?H.library:H.type==="library"}s0.isLibrary=m;function w(H){return H.type==="addon"}s0.isAddon=w;function j(H){return H.type===void 0&&!m(H)?!0:H.type==="app"}s0.isApp=j;function S(H){return H.type===void 0?!0:H.type==="app"}s0.isIotApp=S;function P(H){return H.type==="analytics"}s0.isAnalytics=P;async function N(H,v0,l0){l0||(l0=await v(H,v0)),rE(l0),Qf(l0),Zf(l0),eE(l0)}s0.validateBasicManifest=N;function R(H){let v0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(H.match(/^[a-z0-9-_]+$/)){let B0=["-","_"];if(B0.includes(H[0])||B0.includes(H[H.length-1]))return v0}else return v0;return H.length<3||H.length>20?"The library name is beyond permissible length of 20 characters.":null}s0.validateLibraryName=R;function O(H,v0){if(v0)return R(H);{let l0="Project name can only contain 'A' through 'Z', 'a' through 'z', '0' through '9', ' ', '_' and '-'. The Project name must start with an alphabetic or numeric character.";if(!H.match(/^([a-zA-Z0-9 _-]+)$/))return l0;if(H.length<3||H.length>40)return"The project name is beyond permissible length of 40 characters.";let d0=["-","_"," "];return d0.includes(H[0])||d0.includes(H[H.length-1])?l0:null}}s0.validateProjectName=O;function e0(H){return H.length<5?"The description must have at least 5 characters.":null}s0.validateDescription=e0;function I(H){if(!H)return"No publisher set yet";let v0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(H.match(/^[a-zA-Z0-9-]+$/)){let B0=["_"];if(B0.includes(H[0])||B0.includes(H[H.length-1]))return v0}else return v0;return null}s0.validatePublisherId=I;async function k(H,v0,l0){return await Fx.getPublisher(H,v0,l0)?null:`Publisher '${v0}' does not exist.`}s0.validatePublisherOnline=k;let L=/^(((?!-))(xn--)?[a-z0-9\-_]{0,61}[a-z0-9]{1,1}\.)*(xn--)?([a-z0-9-]{1,61}|[a-z0-9-]{1,30})\.[a-z]{2,}$/;async function Z(H){if(H===void 0)return"Allowed backends not specified yet";if(H===null)return null;if(Array.isArray(H)||H?.includes(";")){let v0=H?.includes(";")?H.split(";"):H;for(let l0 of v0)if(!l0.match(L))return`Domain "${l0}" is invalid`}else if(!H?.match(L)&&H!=="*")return'Invalid value for "allowedBackends"';return null}s0.validateRegistryAllowedBackends=Z;let W=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;async function U(H){if(H===void 0)return"Allowed applications not specified yet";if(H===null)return null;if(Array.isArray(H)||H?.includes(";")){let v0=H?.includes(";")?H.split(";"):H;for(let l0 of v0)if(!l0.match(W))return`Application id "${l0}" is invalid`}else if(!H?.match(W)&&H!=="*")return'Invalid value for "allowedApplications"';return null}s0.validateRegistryAllowedApplications=U;async function J(H,v0,l0){let B0=l0.icon;if(!B0)throw new Error("App icon is required for publishing an application!");let d0=qr.Utils.joinPath(H,B0);if(!await v0.stat(d0))throw new Error(`Could not load icon "${B0}"`);let q0=await v0.readFile(d0),Ex=(0,Bo.imageDimensionsFromData)(q0);if(!Ex)throw new Error("App icon could not be validated!");if(Ex?.width!==Ex?.height)throw new Error("App icon has to be a square!");if(Ex.width>512||Ex.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,Co.isPNG)(q0))throw new Error("App icon has to be of type PNG!")}s0.validateApplicationIcon=J;function a0(H){let{engines:v0}=H;if(v0?.backend&&!v0.backend.match(/(^[5-9][2-9]|[6-9]\d+|\d{3,})v(0(0[0-9]|[1-9]\d)|[1-9]\d{2}|[1-9]\d{3,})$/))throw new Error('Setting "engines.backend" is invalid');xE(H),AE(H)}s0.validateEngineSettings=a0;function i0(H,v0){let l0=$0=>{let q0=/^(\d+)v(\d+)$/.exec($0);return q0?[Number(q0[1]),Number(q0[2])]:null},B0=l0(H),d0=l0(v0);return B0&&d0?B0[0]-d0[0]||B0[1]-d0[1]:H===v0?0:H<v0?-1:1}s0.compareBackendVersion=i0;async function Q(H,v0,l0,B0){B0||(B0=await s0.read(H,v0));let d0=s0.isAddon(B0),$0=s0.isAnalytics(B0);switch(l0){case u0.Part.dlo:return!!B0?.dlo?.mainFile&&!d0&&!$0;case u0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case u0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case u0.Part.dde:case u0.Part.dfiles:return!0;default:return!1}}s0.isApmPartEnabled=Q})(K||={});function Qf(x){let{pov:A}=x;if(A&&A.details){if(!Object.hasOwn(A.details,"buildCommand"))throw new Error('Setting "pov.details.buildCommand" missing!');if(!Object.hasOwn(A.details,"workingPath"))throw new Error('Setting "pov.details.workingPath" missing!')}}function Zf(x){let{blo:A}=x;if(A){if(!Object.hasOwn(A,"buildCommand"))throw new Error('Setting "blo.buildCommand" missing!');if(!Object.hasOwn(A,"workingPath"))throw new Error('Setting "blo.workingPath" missing!');if(A.accessLevel&&!["restricted","global"].includes(A.accessLevel))throw new Error('Only "restricted" or "global" are allowed as value for "blo.accessLevel"!')}}function xE(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(K.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=fo){if(r&&e)throw new Error('Only "engines.hwfw" or "engines.productId" is allowed!"')}else if(e)throw new Error(`"engines.productId" requires "engines.backend" to be "${fo}"`)}function AE(x){if(!K.isAddon(x)&&!K.isAnalytics(x))return;let{backend:A}=x.engines,e=K.isAddon(x)?Xf:Yf;if(!A||A<e)throw new Error(`Project type "${x.type}" requires "engines.backend" to be ">=${e}"`);if(x.dlo)throw new Error(`For project type "${x.type}", "dlo" is not supported!"`);if(x.dpid)throw new Error(`For project type "${x.type}", "dpid" is not supported!"`)}function eE(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(K.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!K.isAddon(x))throw new Error('Property "maxInstancesPerSite" is only allowed for addon projects!');if(!Number.isInteger(A))throw new Error('Property "maxInstancesPerSite" must be an integer!');if(A<1||A>100)throw new Error('Property "maxInstancesPerSite" must be between 1 and 100!')}function rE(x){if((x.engines?.backend||"00v000")>=Eo||K.isLibrary(x)){if(!uo.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${Eo} onwards "version" has to be a semantic version string!"`)}else if(!Wf(x.version))throw new Error('"version" has to be a number!')}function tE(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var Er=require("vscode-uri");var hx=require("vscode-uri");var Ul=U0(require("ajv")),Hl=U0(require("ajv-formats"));var po={$schema:"http://json-schema.org/draft-07/schema#",title:"Dynamic DDE Schema",description:"Describe your data structure for Microtronics IoT devices",type:"object",additionalProperties:!1,properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value.",markdownDescription:`Version of the DDE schema.
2220
2220
 
2221
- \u26A0\uFE0F **Do not modify this value.**`},cloudProject:{type:"boolean",description:"Indicates whether this is a cloud project.",markdownDescription:"Indicates whether this is a cloud project.\n\nWhen set to `false`, certain containers and top-level custom containers are restricted."},constants:{type:"object",description:"Declare constants that can be used across the YAML file.",markdownDescription:"Declare constants that can be referenced and used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",markdownDescription:"Define time-series data channels for recording measurements.\n\n**Limits:** Maximum 9 fields.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",markdownDescription:`Special container to transport **live data** during put-into-operation procedures.
2221
+ \u26A0\uFE0F **Do not modify this value.**`},cloudProject:{type:"boolean",description:"Indicates whether this is a cloud project.",markdownDescription:"Indicates whether this is a cloud project.\n\nWhen set to `false`, certain containers and top-level custom containers are restricted."},flexibleContainers:{type:"object",additionalProperties:!1,description:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length up/down.",markdownDescription:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length `up`/`down`.",properties:{timeseries:{type:"boolean",description:"Use up+ for timeseries (histdata) containers so records can be transferred with a dynamic length.",markdownDescription:"Use `up+` for timeseries (histdata) containers so records can be transferred with a dynamic length."},config:{type:"boolean",description:"Use up+/down+ for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions.",markdownDescription:"Use `up+`/`down+` for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions."}}},constants:{type:"object",description:"Declare constants that can be used across the YAML file.",markdownDescription:"Declare constants that can be referenced and used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",markdownDescription:"Define time-series data channels for recording measurements.\n\n**Limits:** Maximum 9 fields.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",markdownDescription:`Special container to transport **live data** during put-into-operation procedures.
2222
2222
 
2223
- Used for real-time data exchange between device and server during commissioning.`,$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)(?!(dde|cloudProject|constants|state|result|volatile|timeseries|aloha|setting|command|storage|relations))[a-zA-Z_][0-9a-zA-Z_]*$":{type:"object",description:"Custom configuration container. Field names must start with a letter or underscore and may contain letters, digits, and underscores.",$ref:"#/$defs/configurationFields"}},allOf:[{if:{properties:{cloudProject:{const:!1}}},then:{type:"object",additionalProperties:!1,errorMessage:{additionalProperties:"Non-cloud projects only allow standard containers (state, result, volatile, timeseries, aloha, setting, command, storage, relations). Set 'cloudProject' to true to use custom top-level containers."},properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value."},cloudProject:{type:"boolean"},constants:{type:"object",description:"Declare constants that can be used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}}}}],$defs:{stateContainer:{type:"object",title:"state - Transferred from the device",description:"Use this container for low-frequency state changes. Data is transferred from the device to the server.",markdownDescription:`**state** \u2013 Transferred from the device
2223
+ Used for real-time data exchange between device and server during commissioning.`,$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)(?!(dde|cloudProject|flexibleContainers|constants|state|result|volatile|timeseries|aloha|setting|command|storage|relations))[a-zA-Z_][0-9a-zA-Z_]*$":{type:"object",description:"Custom configuration container. Field names must start with a letter or underscore and may contain letters, digits, and underscores.",$ref:"#/$defs/configurationFields"}},allOf:[{if:{properties:{cloudProject:{const:!1}}},then:{type:"object",additionalProperties:!1,errorMessage:{additionalProperties:"Non-cloud projects only allow standard containers (state, result, volatile, timeseries, aloha, setting, command, storage, relations). Set 'cloudProject' to true to use custom top-level containers."},properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value."},cloudProject:{type:"boolean"},flexibleContainers:{type:"object",additionalProperties:!1,description:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length up/down.",markdownDescription:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length `up`/`down`.",properties:{timeseries:{type:"boolean",description:"Use up+ for timeseries (histdata) containers so records can be transferred with a dynamic length.",markdownDescription:"Use `up+` for timeseries (histdata) containers so records can be transferred with a dynamic length."},config:{type:"boolean",description:"Use up+/down+ for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions.",markdownDescription:"Use `up+`/`down+` for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions."}}},constants:{type:"object",description:"Declare constants that can be used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}}}}],$defs:{stateContainer:{type:"object",title:"state - Transferred from the device",description:"Use this container for low-frequency state changes. Data is transferred from the device to the server.",markdownDescription:`**state** \u2013 Transferred from the device
2224
2224
 
2225
2225
  Use this container for **low-frequency state changes**.
2226
2226
 
@@ -2314,41 +2314,41 @@ Accepts a number (\u2265 0) or a relation link (\`@container.field\`).`,minimum:
2314
2314
 
2315
2315
  \u26A0\uFE0F **Important:** This does not activate any alarming. Alarming must be implemented in the DLO.
2316
2316
 
2317
- Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var os=require("yaml");var Oe=require("yaml");var Fn;(A=>A.CODE={ddeFieldLength:"field_name_length"})(Fn||={});var H0;(J=>{let x;(B0=>(B0.state="state",B0.result="result",B0.aloha="aloha",B0.volatile="volatile",B0.setting="setting",B0.command="command",B0.storage="storage",B0.relations="relations"))(x=J.DDEContainerName||={});let A;(l0=>(l0.configA="configA",l0.configB="configB",l0.configC="configC",l0.config0="config0",l0.config1="config1",l0.config2="config2",l0.config3="config3",l0.config4="config4",l0.config5="config5",l0.config6="config6",l0.config7="config7",l0.config8="config8",l0.config9="config9",l0.histdata0="histdata0",l0.histdata1="histdata1",l0.histdata2="histdata2",l0.histdata3="histdata3",l0.histdata4="histdata4",l0.histdata5="histdata5",l0.histdata6="histdata6",l0.histdata7="histdata7",l0.histdata8="histdata8",l0.histdata9="histdata9",l0.aloha="aloha",l0.alerts="alerts",l0.applog="applog"))(A=J.ContainerName||={});let e;(U=>(U.cx="cx",U.hx="hx",U.cb="cb",U.aloha="aloha",U.applog="applog"))(e=J.ContainerType||={});let r;($0=>($0.up="up",$0.down="down",$0.upPlus="up+",$0.downPlus="down+",$0.none="none",$0.backendOnly="backend-only",$0.deviceOnly="device-only",$0.both="both",$0.bothPlus="both+",$0.noneBackend="none-be"))(r=J.TransferDirection||={});function t(H,a0){return H==="cx"&&!["backend-only"].includes(a0)?"DDE_CID_CONFIG":H==="hx"?"DDE_CID_HISTDATA":H==="aloha"?"DDE_CID_ALOHA":null}J.CONTAINER_DEF_DLO_CID_BASE=t;let s=["up","up+","down","down+","both","none","both+","backend-only","device-only"],n=["up","up+","backend-only"];J.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:s},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:s},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:s},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:s},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:s},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:s},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:s},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:s},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:s},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:s},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:n},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:n},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:n},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:n},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:n},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:n},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:n},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:n},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:n},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:n},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},J.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],J.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],J.SERVER_CONTAINER=["configA","configB","configC"],J.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let m=["astring","nstring","cstring","wstring","ustring"],w=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];J.allowedRelationTypes={title:m,unit:m,chartMinimum:w,chartMaximum:w,scale:w,offset:w,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:w,chartAlarmHigh:w,chartWarningLow:w,chartWarningHigh:w,chartHysteresis:w,chartTriggerThreshold:w,chartTriggerRelation:w,chartSetPoint:w};function S(H,a0,n0){let Z=a0[H];if(Z!==void 0)if(J.regexRelation.exec(`${Z}`)){let s0=H==="chartSetPoint",[U,...v0]=Z.split("."),[,c0]=U.split("@"),B0=Object.values(n0.containers).find(Ex=>Ex.title===c0),d0=v0.join("."),$0=s0?";":"%",L0=(s0?"":"%")+(B0?.name||c0)+$0;if(L0=L0+`${d0}`,s0){let Ex=n0.setPointList[a0.name];L0=L0+`;actual_output_value_${Ex}`}return L0}else return Z}J.parseXMLValueWithRelation=S;function P(H){let{bitmask:a0}=H;if(!a0)return;let n0="$",Z=a0.replaceAll(" ","");if(a0.startsWith("0x"))n0+=Z.substring(2);else if(Z.startsWith("0b")){let s0=Z.substring(2).replaceAll(" ","");n0+=parseInt(s0,2).toString(16).toUpperCase()}return n0}J.parseXMLBitmask=P;function N(H){return H.type==="binary"?H.defaultValue.substring(2):H.defaultValue==="NaN"?"NAN":H.defaultValue}J.parseXMLDefaultValue=N,J.TDEF_NUMBER={xmlOut(H,a0,n0){H.decpl=S("decimalPlaces",a0,n0),H.decpl===void 0&&(H.decpl=0),H.vscale=S("scale",a0,n0),H.vofs=S("offset",a0,n0),H.min=S("chartMinimum",a0,n0),H.max=S("chartMaximum",a0,n0)}};let L={isBlob:1,xmlOut(H,a0){H.max=a0.byteSize}},t0={xmlOut(H){H.decpl=-1,H.param0="local",H.units="UTC"}};J.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...J.TDEF_NUMBER,rdef:1,xml:{type:"u8"},pwn:{rwfunc:"u8",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u16:{dde:"uint16",dim:1,len:2,...J.TDEF_NUMBER,rdef:1,xml:{type:"u16"},pwn:{rwfunc:"u16",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u32:{dde:"uint32",dim:1,len:4,...J.TDEF_NUMBER,rdef:1,xml:{type:"u32"},pwn:{rwfunc:"u32",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},s8:{dde:"int8",dim:1,len:1,...J.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...J.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...J.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...J.TDEF_NUMBER,rdef:1,xml:{type:"s64"},pwn:{rwfunc:"s64",rwp:"%n{%l}",htype:"{%l}",printf:"%d"},openApi:{type:"number"}},f16:{dde:"float16",dim:1,len:2,...J.TDEF_NUMBER,rdef:1,xml:{type:"floatm16"},pwn:{rwfunc:"f16",rwp:"Float:%n",htype:"f32",printf:"%f"},openApi:{type:"number"}},f32:{dde:"float32",dim:1,len:4,...J.TDEF_NUMBER,rdef:1,xml:{type:"f32"},pwn:{rwfunc:"f32",rwp:"Float:%n",printf:"%f"},openApi:{type:"number"}},f64:{dde:"float64",dim:0,len:8,...J.TDEF_NUMBER,rdef:0,xml:{type:"f64"},pwn:{rwfunc:"f64",rwp:"%n{%l}",htype:"{%l}",printf:"%f"},openApi:{type:"number"}},stamp32:{dde:"stamp32",dim:1,len:4,...t0,rdef:0,xml:{type:"stamp4"},pwn:{rwfunc:"stamp32",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},stamp40:{dde:"stamp40",dim:0,len:5,...t0,rdef:0,xml:{type:"stamp"},pwn:{rwfunc:"stamp40",rwp:"%n{%l}",htype:"{%l}",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},bin:{dde:"binary",dim:0,...L,rdef:0,lenUnits:"byte",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"bin",rwlen:1,rwp:"%n{%l}",htype:"{%l}",printf:null,printfFormat:"memtostr"},openApi:{type:"string",description:"HEX string"}},astr:{dde:"astring",dim:0,...L,rdef:1,lenUnits:"char",xml:{type:"string",param1:"nocodepage"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},nstr:{dde:"nstring",dim:0,...L,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"nstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},wstr:{dde:"wstring",dim:0,...L,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"wstr",rwlen:1,rwp:"%n[%l+1]",htype:"[%l+1]",printf:"%s"},openApi:{type:"string"}},ustr:{dde:"ustring",dim:0,...L,rdef:0,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"ustr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},cstr:{dde:"cstring",dim:0,...L,rdef:1,lenUnits:"char",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"cstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},_siteref:{dim:0,len:80,rdef:0,xml:{type:"string",max:"80",editmask:"%QUERY%all_sites;-name;!id;class;name;%EMPTY%"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}"},js:{rwfunc:"String"}}},J.fieldTypeDefinitions={uint8:J.TYPE_DEFS.u8,uint16:J.TYPE_DEFS.u16,uint32:J.TYPE_DEFS.u32,int8:J.TYPE_DEFS.s8,int16:J.TYPE_DEFS.s16,int32:J.TYPE_DEFS.s32,int64:J.TYPE_DEFS.s64,float16:J.TYPE_DEFS.f16,float32:J.TYPE_DEFS.f32,float64:J.TYPE_DEFS.f64,stamp32:J.TYPE_DEFS.stamp32,stamp40:J.TYPE_DEFS.stamp40,binary:J.TYPE_DEFS.bin,astring:J.TYPE_DEFS.astr,nstring:J.TYPE_DEFS.nstr,wstring:J.TYPE_DEFS.wstr,ustring:J.TYPE_DEFS.ustr,cstring:J.TYPE_DEFS.cstr};let R=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function Q(H){let a0=H.toLowerCase();return R.includes(a0)||/^field\d+$/.test(a0)||/^ch\d+$/.test(a0)}J.checkForReservedFieldName=Q;function K(H){return!!H.fields.find(a0=>a0.library===null&&a0.type!=="shadow")}J.hasContainerAppFields=K})(H0||={});var qr={DP_registry_sz:1024,DP_config_sz:4e3,DP_histdata_sz:1024,DP_DISPLAY_CNT:0,DP_LED_CNT:0,DP_BUTTON_CNT:0,DP_GPIO_CNT:0,DP_IRQ_CNT:0,DP_DIGOUT_CNT:0,DP_UIN_CNT:0,DP_TEMP_CNT:0,DP_I2C_CNT:0,DP_SPI_CNT:0,DP_UART_CNT:0,DP_RS485_CNT:0,DP_RS232_CNT:0,DP_WIFI_CNT:0,DP_BLE_CNT:0,DP_LORA_CNT:0,DP_NBIOT_CNT:0},_s={max_size:1e5,max_fields:1e3},KA={max_size:4e3,max_fields:1e3},yA={max_size:1024,max_fields:1e3},Nr={configA:_s,configB:_s,configC:_s,config0:KA,config1:KA,config2:KA,config3:KA,config4:KA,config5:KA,config6:KA,config7:KA,config8:KA,config9:KA,histdata0:yA,histdata1:yA,histdata2:yA,histdata3:yA,histdata4:yA,histdata5:yA,histdata6:yA,histdata7:yA,histdata8:yA,histdata9:yA,aloha:{...yA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},Ss={m22x:{name:"M22x",dpid:"m22x",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M M2 HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Nr,auto_inc:{...qr,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:2,DP_WIFI_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m23x:{name:"M23x",dpid:"m23x",interface:{type:"usb",filter:{vendorId:1155},fileChunk:4096},usb_ids:["rapidM2M M23 HW2.0","rapidM2M M23 HW1.0"],alt_ids:[],generation:"M23",prog_mem:8*1024*1024,data_mem:8*1024*1024,total_mem:8*1024*1024,hw_reqd:!1,dde:Nr,auto_inc:{...qr,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:1,DP_WIFI_CNT:1},usbcaps:{dbgItfMayHangFixed:"99v999"},dlo:{compileRestrictions:{}}},nrf91:{name:"NRF91",dpid:"nrf91",interface:{type:"usb",filter:{vendorId:9540},fileChunk:2048},usb_ids:["rapidM2M NRF91 HW1.0","ONE NRF91 HW1.0","rapidM2M Evolve HW1.0"],alt_ids:[],generation:"NRF91",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Nr,auto_inc:{...qr,DP_LED_CNT:1,DP_GPIO_CNT:32,DP_IRQ_CNT:6,DP_I2C_CNT:2,DP_SPI_CNT:2,DP_UART_CNT:2,DP_AIN_CNT:8,DP_PWM_CNT:3},usbcaps:{}},m2blegw:{name:"BLE Gateway",dpid:"m2blegw",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M BLEGW HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Nr,auto_inc:{...qr,DP_DISPLAY_CNT:1,DP_DISPLAY_TYPE:"xc",DP_BUTTON_CNT:1,DP_BLE_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyv3:{name:"myDatalogEasy V3",dpid:"m2easyv3",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M Easy HW3.0"],alt_ids:["rapidM2M EasyIoT HW1.0","rapidM2M M220 HW1.0"],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Nr,auto_inc:{...qr,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyiot:{name:"myDatalogEasy IoT",dpid:"m2easyiot",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M EasyIoT HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Nr,auto_inc:{...qr,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}}};var $s=require("vscode-uri");var Ir=class{dloFileMap={};rootUri=$s.URI.parse("");constructor(){}set workspacePath(A){this.rootUri=A}getSequenceForFile(A){let e=A.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();e=A.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,e))return this.dloFileMap[e];let r=j0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?$s.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var po=require("vscode-uri");var tE=/^(?:\s*#options\s+)(.*)(?:\s*)$/,nE=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,sE=/^(?:\s*#ifdef\s+)(.*)$/,iE=/^(?:\s*#ifndef\s+)(.*)$/,aE=/^(?:\s*#elseifdef\s+)(.*)$/,oE=/^(?:\s*#elseifndef\s+)(.*)$/,bo=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,mo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,ho=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,jo=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,go=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,FE=/^\s*#include\s*</,vE=/^\s*#endinput\s*/,lE=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,yo=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,ko=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function uo(x,A=""){let e=" ",r=x;return A.length?e={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[A]||null:["!","?","~","$","\xA7"].includes(x.substring(1,1))&&(e=x.substring(1,1),r=`"${x.substring(2,x.length-1)}"`),{priority:`'${e}'`,code:r}}var wo=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,_o=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(_o||{}),cE=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,fE=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,EE=/^(.*)(^|\s*)onUplinkEvent/,BE=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,CE=/^\s*#callback\s+\w+\s*\(/;function Do(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let s=x[t];if(e){if(s==="\\"){t++;continue}s===r&&(e=!1);continue}if(s==='"'||s==="'"){e=!0,r=s;continue}s==="("?A++:s===")"&&A--}return A}function So(x){return bo.test(x)||jo.test(x)||mo.test(x)||ho.test(x)||go.test(x)||yo.test(x)||ko.test(x)||wo.test(x)}function dE(x,A,e){if(!(BE.test(e)||CE.test(e)))return null;let t=Do(e);if(t<=0)return null;let s=t,n=[x[A]],F=[e],v=A+1,E=100;for(;s>0&&v<x.length&&v-A<E;){let m=x[v],w=m.split("//",1)[0];n.push(m),F.push(w),s+=Do(w),v++}if(n.length<=1||s>0)return null;let u=n.map((m,w)=>w===0?m:m.trim()).join(" "),p=F.map((m,w)=>w===0?m:m.trim()).join(" ");return So(p)?{joinedOriginal:u,joinedStripped:p,extraLineCount:n.length-1}:null}var Mr=class{pragmaDynamic=null;dloFileSequencer=new Ir;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,s){this.dloFileSequencer.workspacePath=A;let n=[],F=t.path,v=!1,E=po.Utils.basename(t);if(F.includes(r0.filePaths.studio.auto.dlo.path)){let j=E.substring(0,E.length-8);!["app","main"].includes(j)&&E.endsWith("-dde.inc")&&(v=j0.generateHashForLibraryName(j))}else if(F.includes(r0.filePaths.studio.libdeps)){let j=F.split("libdeps/")[1],[S]=j.split("/");["dlo-core"].includes(S)||(v=j0.generateHashForLibraryName(S))}else z.isLibrary(r)&&(E.endsWith(".dlo")||F.includes("/dlo/examples/")||F.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",E):v=j0.generateHashForLibraryName(r.name));if(F.endsWith(".auto/default.inc"))return{data:s.join(`
2318
- `),diagnostics:n};let u=[],p=this.dloFileSequencer.getSequenceForFile(F);u.push(`stock static __file{} = "${p}";`),u.push(`stock static __refid{} = "${p}";`),u.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),u.push("#line 0");let w=0;for(let j=0;j<s.length;j++){let S=s[j],P=S.split("//",1)[0],N=null,O=0;if(!So(P)){let L=dE(s,j,P);L&&(S=L.joinedOriginal,P=L.joinedStripped,O=L.extraLineCount)}if(N=tE.exec(P))S="// "+S,n.push({file:t,level:"error",line:j,message:"#options is not supported here. Use the DLO settings instead."});else if(N=nE.exec(P))S="// "+S,n.push({file:t,level:"error",line:j,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(N=lE.exec(P)){let L=Number(N[1].startsWith("(")?N[1].substring(1,N[1].length-1):N[1]);!Number.isInteger(L)||L<64?n.push({file:t,level:"error",line:j,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||L>this.pragmaDynamic)&&(this.pragmaDynamic=L)}else if(N=sE.exec(P))S=S.replace("#ifdef ","#if defined ");else if(N=iE.exec(P))S=S.replace("#ifndef ","#if !defined ");else if(N=aE.exec(P))S=S.replace("#elseifdef ","#elseif defined ");else if(N=oE.exec(P))S=S.replace("#elseifndef ","#elseif !defined ");else if(N=bo.exec(P)){let[,L,t0,M,k]=N;S=`${L}#define ${t0} _catch_funcidx( "___${t0}")
2319
- forward ___${t0}( ${M});
2317
+ Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var Fi=require("yaml");var Ge=require("yaml");var vn;(A=>A.CODE={ddeFieldLength:"field_name_length"})(vn||={});var H0;(U=>{let x;(B0=>(B0.state="state",B0.result="result",B0.aloha="aloha",B0.volatile="volatile",B0.setting="setting",B0.command="command",B0.storage="storage",B0.relations="relations"))(x=U.DDEContainerName||={});let A;(c0=>(c0.configA="configA",c0.configB="configB",c0.configC="configC",c0.config0="config0",c0.config1="config1",c0.config2="config2",c0.config3="config3",c0.config4="config4",c0.config5="config5",c0.config6="config6",c0.config7="config7",c0.config8="config8",c0.config9="config9",c0.histdata0="histdata0",c0.histdata1="histdata1",c0.histdata2="histdata2",c0.histdata3="histdata3",c0.histdata4="histdata4",c0.histdata5="histdata5",c0.histdata6="histdata6",c0.histdata7="histdata7",c0.histdata8="histdata8",c0.histdata9="histdata9",c0.aloha="aloha",c0.alerts="alerts",c0.applog="applog"))(A=U.ContainerName||={});let e;(H=>(H.cx="cx",H.hx="hx",H.cb="cb",H.aloha="aloha",H.applog="applog"))(e=U.ContainerType||={});let r;($0=>($0.up="up",$0.down="down",$0.upPlus="up+",$0.downPlus="down+",$0.none="none",$0.backendOnly="backend-only",$0.deviceOnly="device-only",$0.both="both",$0.bothPlus="both+",$0.noneBackend="none-be"))(r=U.TransferDirection||={});function t(J,a0){return J==="cx"&&!["backend-only"].includes(a0)?"DDE_CID_CONFIG":J==="hx"?"DDE_CID_HISTDATA":J==="aloha"?"DDE_CID_ALOHA":null}U.CONTAINER_DEF_DLO_CID_BASE=t;let i=["up","up+","down","down+","both","none","both+","backend-only","device-only"],n=["up","up+","backend-only"];U.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:i},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:i},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:i},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:i},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:i},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:i},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:i},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:i},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:i},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:i},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:n},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:n},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:n},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:n},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:n},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:n},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:n},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:n},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:n},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:n},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},U.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],U.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],U.SERVER_CONTAINER=["configA","configB","configC"],U.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let m=["astring","nstring","cstring","wstring","ustring"],w=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];U.allowedRelationTypes={title:m,unit:m,chartMinimum:w,chartMaximum:w,scale:w,offset:w,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:w,chartAlarmHigh:w,chartWarningLow:w,chartWarningHigh:w,chartHysteresis:w,chartTriggerThreshold:w,chartTriggerRelation:w,chartSetPoint:w};function S(J,a0,i0){let Q=a0[J];if(Q!==void 0)if(U.regexRelation.exec(`${Q}`)){let s0=J==="chartSetPoint",[H,...v0]=Q.split("."),[,l0]=H.split("@"),B0=Object.values(i0.containers).find(Ex=>Ex.title===l0),d0=v0.join("."),$0=s0?";":"%",q0=(s0?"":"%")+(B0?.name||l0)+$0;if(q0=q0+`${d0}`,s0){let Ex=i0.setPointList[a0.name];q0=q0+`;actual_output_value_${Ex}`}return q0}else return Q}U.parseXMLValueWithRelation=S;function P(J){let{bitmask:a0}=J;if(!a0)return;let i0="$",Q=a0.replaceAll(" ","");if(a0.startsWith("0x"))i0+=Q.substring(2);else if(Q.startsWith("0b")){let s0=Q.substring(2).replaceAll(" ","");i0+=parseInt(s0,2).toString(16).toUpperCase()}return i0}U.parseXMLBitmask=P;function N(J){return J.type==="binary"?J.defaultValue.substring(2):J.defaultValue==="NaN"?"NAN":J.defaultValue}U.parseXMLDefaultValue=N,U.TDEF_NUMBER={xmlOut(J,a0,i0){J.decpl=S("decimalPlaces",a0,i0),J.decpl===void 0&&(J.decpl=0),J.vscale=S("scale",a0,i0),J.vofs=S("offset",a0,i0),J.min=S("chartMinimum",a0,i0),J.max=S("chartMaximum",a0,i0)}};let O={isBlob:1,xmlOut(J,a0){J.max=a0.byteSize}},e0={xmlOut(J){J.decpl=-1,J.param0="local",J.units="UTC"}};U.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...U.TDEF_NUMBER,rdef:1,xml:{type:"u8"},pwn:{rwfunc:"u8",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u16:{dde:"uint16",dim:1,len:2,...U.TDEF_NUMBER,rdef:1,xml:{type:"u16"},pwn:{rwfunc:"u16",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},u32:{dde:"uint32",dim:1,len:4,...U.TDEF_NUMBER,rdef:1,xml:{type:"u32"},pwn:{rwfunc:"u32",htype:"s32",printf:"%d"},openApi:{type:"number",minimum:0}},s8:{dde:"int8",dim:1,len:1,...U.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...U.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...U.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...U.TDEF_NUMBER,rdef:1,xml:{type:"s64"},pwn:{rwfunc:"s64",rwp:"%n{%l}",htype:"{%l}",printf:"%d"},openApi:{type:"number"}},f16:{dde:"float16",dim:1,len:2,...U.TDEF_NUMBER,rdef:1,xml:{type:"floatm16"},pwn:{rwfunc:"f16",rwp:"Float:%n",htype:"f32",printf:"%f"},openApi:{type:"number"}},f32:{dde:"float32",dim:1,len:4,...U.TDEF_NUMBER,rdef:1,xml:{type:"f32"},pwn:{rwfunc:"f32",rwp:"Float:%n",printf:"%f"},openApi:{type:"number"}},f64:{dde:"float64",dim:0,len:8,...U.TDEF_NUMBER,rdef:0,xml:{type:"f64"},pwn:{rwfunc:"f64",rwp:"%n{%l}",htype:"{%l}",printf:"%f"},openApi:{type:"number"}},stamp32:{dde:"stamp32",dim:1,len:4,...e0,rdef:0,xml:{type:"stamp4"},pwn:{rwfunc:"stamp32",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},stamp40:{dde:"stamp40",dim:0,len:5,...e0,rdef:0,xml:{type:"stamp"},pwn:{rwfunc:"stamp40",rwp:"%n{%l}",htype:"{%l}",printf:"%s",printfFormat:"stampToISOString"},openApi:{type:"string",format:"YYYYMMDDhhmmssSSS",description:"UTC"}},bin:{dde:"binary",dim:0,...O,rdef:0,lenUnits:"byte",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"bin",rwlen:1,rwp:"%n{%l}",htype:"{%l}",printf:null,printfFormat:"memtostr"},openApi:{type:"string",description:"HEX string"}},astr:{dde:"astring",dim:0,...O,rdef:1,lenUnits:"char",xml:{type:"string",param1:"nocodepage"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},nstr:{dde:"nstring",dim:0,...O,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"nstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},wstr:{dde:"wstring",dim:0,...O,rdef:1,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"wstr",rwlen:1,rwp:"%n[%l+1]",htype:"[%l+1]",printf:"%s"},openApi:{type:"string"}},ustr:{dde:"ustring",dim:0,...O,rdef:0,lenUnits:"byte",xml:{type:"string"},pwn:{rwfunc:"ustr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},cstr:{dde:"cstring",dim:0,...O,rdef:1,lenUnits:"char",xml:{type:"string",editmask:"%HEX%"},pwn:{rwfunc:"cstr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}",printf:"%s"},openApi:{type:"string"}},_siteref:{dim:0,len:80,rdef:0,xml:{type:"string",max:"80",editmask:"%QUERY%all_sites;-name;!id;class;name;%EMPTY%"},pwn:{rwfunc:"astr",rwlen:1,rwp:"%n{%l+1}",htype:"{%l+1}"},js:{rwfunc:"String"}}},U.fieldTypeDefinitions={uint8:U.TYPE_DEFS.u8,uint16:U.TYPE_DEFS.u16,uint32:U.TYPE_DEFS.u32,int8:U.TYPE_DEFS.s8,int16:U.TYPE_DEFS.s16,int32:U.TYPE_DEFS.s32,int64:U.TYPE_DEFS.s64,float16:U.TYPE_DEFS.f16,float32:U.TYPE_DEFS.f32,float64:U.TYPE_DEFS.f64,stamp32:U.TYPE_DEFS.stamp32,stamp40:U.TYPE_DEFS.stamp40,binary:U.TYPE_DEFS.bin,astring:U.TYPE_DEFS.astr,nstring:U.TYPE_DEFS.nstr,wstring:U.TYPE_DEFS.wstr,ustring:U.TYPE_DEFS.ustr,cstring:U.TYPE_DEFS.cstr};let L=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function Z(J){let a0=J.toLowerCase();return L.includes(a0)||/^field\d+$/.test(a0)||/^ch\d+$/.test(a0)}U.checkForReservedFieldName=Z;function W(J){return!!J.fields.find(a0=>a0.library===null&&a0.type!=="shadow")}U.hasContainerAppFields=W})(H0||={});var Nr={DP_registry_sz:1024,DP_config_sz:4e3,DP_histdata_sz:1024,DP_DISPLAY_CNT:0,DP_LED_CNT:0,DP_BUTTON_CNT:0,DP_GPIO_CNT:0,DP_IRQ_CNT:0,DP_DIGOUT_CNT:0,DP_UIN_CNT:0,DP_TEMP_CNT:0,DP_I2C_CNT:0,DP_SPI_CNT:0,DP_UART_CNT:0,DP_RS485_CNT:0,DP_RS232_CNT:0,DP_WIFI_CNT:0,DP_BLE_CNT:0,DP_LORA_CNT:0,DP_NBIOT_CNT:0},Si={max_size:1e5,max_fields:1e3},zA={max_size:4e3,max_fields:1e3},kA={max_size:1024,max_fields:1e3},Ir={configA:Si,configB:Si,configC:Si,config0:zA,config1:zA,config2:zA,config3:zA,config4:zA,config5:zA,config6:zA,config7:zA,config8:zA,config9:zA,histdata0:kA,histdata1:kA,histdata2:kA,histdata3:kA,histdata4:kA,histdata5:kA,histdata6:kA,histdata7:kA,histdata8:kA,histdata9:kA,aloha:{...kA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},$i={m22x:{name:"M22x",dpid:"m22x",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M M2 HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:2,DP_WIFI_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m23x:{name:"M23x",dpid:"m23x",interface:{type:"usb",filter:{vendorId:1155},fileChunk:4096},usb_ids:["rapidM2M M23 HW2.0","rapidM2M M23 HW1.0"],alt_ids:[],generation:"M23",prog_mem:8*1024*1024,data_mem:8*1024*1024,total_mem:8*1024*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:1,DP_WIFI_CNT:1},usbcaps:{dbgItfMayHangFixed:"99v999"},dlo:{compileRestrictions:{}}},nrf91:{name:"NRF91",dpid:"nrf91",interface:{type:"usb",filter:{vendorId:9540},fileChunk:2048},usb_ids:["rapidM2M NRF91 HW1.0","ONE NRF91 HW1.0","rapidM2M Evolve HW1.0"],alt_ids:[],generation:"NRF91",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_LED_CNT:1,DP_GPIO_CNT:32,DP_IRQ_CNT:6,DP_I2C_CNT:2,DP_SPI_CNT:2,DP_UART_CNT:2,DP_AIN_CNT:8,DP_PWM_CNT:3},usbcaps:{}},m2blegw:{name:"BLE Gateway",dpid:"m2blegw",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M BLEGW HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_DISPLAY_CNT:1,DP_DISPLAY_TYPE:"xc",DP_BUTTON_CNT:1,DP_BLE_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyv3:{name:"myDatalogEasy V3",dpid:"m2easyv3",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M Easy HW3.0"],alt_ids:["rapidM2M EasyIoT HW1.0","rapidM2M M220 HW1.0"],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyiot:{name:"myDatalogEasy IoT",dpid:"m2easyiot",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M EasyIoT HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}}};var Ti=require("vscode-uri");var Mr=class{dloFileMap={};rootUri=Ti.URI.parse("");constructor(){}set workspacePath(A){this.rootUri=A}getSequenceForFile(A){let e=A.substring(this.rootUri.path.length||0);if(this.rootUri.scheme!=="file"){let t=this.rootUri.toString();e=A.substring(t.length+1)}if(Object.hasOwn(this.dloFileMap,e))return this.dloFileMap[e];let r=j0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?Ti.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var ho=require("vscode-uri");var iE=/^(?:\s*#options\s+)(.*)(?:\s*)$/,sE=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,aE=/^(?:\s*#ifdef\s+)(.*)$/,oE=/^(?:\s*#ifndef\s+)(.*)$/,FE=/^(?:\s*#elseifdef\s+)(.*)$/,vE=/^(?:\s*#elseifndef\s+)(.*)$/,jo=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,go=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,yo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,ko=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,wo=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,lE=/^\s*#include\s*</,cE=/^\s*#endinput\s*/,fE=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,_o=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,So=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function bo(x,A=""){let e=" ",r=x;return A.length?e={fatal:"\xA7",alarm:"!",warning:"?",debug:"~",ok:"$"}[A]||null:["!","?","~","$","\xA7"].includes(x.substring(1,1))&&(e=x.substring(1,1),r=`"${x.substring(2,x.length-1)}"`),{priority:`'${e}'`,code:r}}var $o=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,To=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(To||{}),EE=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,BE=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,CE=/^(.*)(^|\s*)onUplinkEvent/,dE=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,uE=/^\s*#callback\s+\w+\s*\(/;function mo(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let i=x[t];if(e){if(i==="\\"){t++;continue}i===r&&(e=!1);continue}if(i==='"'||i==="'"){e=!0,r=i;continue}i==="("?A++:i===")"&&A--}return A}function Po(x){return jo.test(x)||ko.test(x)||go.test(x)||yo.test(x)||wo.test(x)||_o.test(x)||So.test(x)||$o.test(x)}function DE(x,A,e){if(!(dE.test(e)||uE.test(e)))return null;let t=mo(e);if(t<=0)return null;let i=t,n=[x[A]],F=[e],v=A+1,E=100;for(;i>0&&v<x.length&&v-A<E;){let m=x[v],w=m.split("//",1)[0];n.push(m),F.push(w),i+=mo(w),v++}if(n.length<=1||i>0)return null;let u=n.map((m,w)=>w===0?m:m.trim()).join(" "),D=F.map((m,w)=>w===0?m:m.trim()).join(" ");return Po(D)?{joinedOriginal:u,joinedStripped:D,extraLineCount:n.length-1}:null}var Lr=class{pragmaDynamic=null;dloFileSequencer=new Mr;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,i){this.dloFileSequencer.workspacePath=A;let n=[],F=t.path,v=!1,E=ho.Utils.basename(t);if(F.includes(t0.filePaths.studio.auto.dlo.path)){let j=E.substring(0,E.length-8);!["app","main"].includes(j)&&E.endsWith("-dde.inc")&&(v=j0.generateHashForLibraryName(j))}else if(F.includes(t0.filePaths.studio.libdeps)){let j=F.split("libdeps/")[1],[S]=j.split("/");["dlo-core"].includes(S)||(v=j0.generateHashForLibraryName(S))}else K.isLibrary(r)&&(E.endsWith(".dlo")||F.includes("/dlo/examples/")||F.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",E):v=j0.generateHashForLibraryName(r.name));if(F.endsWith(".auto/default.inc"))return{data:i.join(`
2318
+ `),diagnostics:n};let u=[],D=this.dloFileSequencer.getSequenceForFile(F);u.push(`stock static __file{} = "${D}";`),u.push(`stock static __refid{} = "${D}";`),u.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),u.push("#line 0");let w=0;for(let j=0;j<i.length;j++){let S=i[j],P=S.split("//",1)[0],N=null,R=0;if(!Po(P)){let O=DE(i,j,P);O&&(S=O.joinedOriginal,P=O.joinedStripped,R=O.extraLineCount)}if(N=iE.exec(P))S="// "+S,n.push({file:t,level:"error",line:j,message:"#options is not supported here. Use the DLO settings instead."});else if(N=sE.exec(P))S="// "+S,n.push({file:t,level:"error",line:j,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(N=fE.exec(P)){let O=Number(N[1].startsWith("(")?N[1].substring(1,N[1].length-1):N[1]);!Number.isInteger(O)||O<64?n.push({file:t,level:"error",line:j,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||O>this.pragmaDynamic)&&(this.pragmaDynamic=O)}else if(N=aE.exec(P))S=S.replace("#ifdef ","#if defined ");else if(N=oE.exec(P))S=S.replace("#ifndef ","#if !defined ");else if(N=FE.exec(P))S=S.replace("#elseifdef ","#elseif defined ");else if(N=vE.exec(P))S=S.replace("#elseifndef ","#elseif !defined ");else if(N=jo.exec(P)){let[,O,e0,I,k]=N;S=`${O}#define ${e0} _catch_funcidx( "___${e0}")
2319
+ forward ___${e0}( ${I});
2320
2320
  #line
2321
2321
  ${w}
2322
- public ___${t0}( ${M})${k}`}else if(N=jo.exec(P)){let[,L,t0]=N;S=`${L}${t0}{_log_string="";_assert(__refid,__line);}`}else if(N=mo.exec(P)){let[,L,t0,M,k]=N;S=`${L}${t0}{ if (!(${M})) { sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(N=ho.exec(P)){let[,L,t0,M]=N;S=`${L}${t0}{ if (!(${M})) { _log_string="";_assert(__refid,__line); }}`}else if(N=go.exec(P)){let[,L,t0,M]=N;S=`${L}${t0}_catch(__refid,__line,${M});`}else if(N=yo.exec(P)){let[,L,t0,M,k,R]=N,{priority:Q,code:K}=uo(k,M.substring(1));Q!==null&&(S=`${L}${t0}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${R});DDE_applog_write(${Q}, ${K}, params_str, __applog_src_id);}`)}else if(N=ko.exec(P)){let[,L,t0,M,k]=N,{priority:R,code:Q}=uo(k,M.substring(1));R!==null&&(S=`${L}${t0}DDE_applog_write(${R}, ${Q}, "", __applog_src_id);`)}else if(N=wo.exec(P)){let[,L,t0,M,k]=N,R=M.substring(1),Q=_o[R];S=`${L}${t0}{ if(_log_level <= ${Q}){ sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")}); _log${M}(__refid,__line); }}`}else(N=FE.exec(P))&&!F.includes(r0.filePaths.studio.auto.path)?(F.includes(r0.filePaths.studio.libdeps)||n.push({file:t,level:"warning",line:j,message:"Libraries are included automatically - remove this #include line"}),S="// Libraries are included automatically! - "+P):(N=vE.exec(P))&&(n.push({file:t,level:"error",line:j,message:"#endinput is not supported - use #if/#endif instead"}),S=P);v&&!r.legacyProject&&(cE.exec(P)&&(S=S.replaceAll("DDE_",`_${v}`)),fE.exec(P)&&(S=S.replace("onUplink",`_${v}`)),EE.exec(P)&&(S=S.replace("onUplink",`_${v}Uplink`))),u.push(S),w++;for(let L=0;L<O;L++)u.push(""),w++,j++}if(E!=="main.dlo"){let j=E.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),S=`_inc_${j}`.substring(0,31),P=`_inc_${j}_inc`.substring(0,31);u.push(`#if defined ${S}`),u.push(`#undef ${S}`),u.push("#endif"),u.push(`#if defined ${P}`),u.push(`#undef ${P}`),u.push("#endif")}return{data:u.join(`
2323
- `),diagnostics:n}}};var zA=require("vscode-uri");var P0=U0(require("fs")),ix=require("vscode-uri");var qo=U0(require("iconv-lite")),uE=j0.convertBlobToStringArray,No=16384,Io=511,Ts=No|Io,DE=32768,pE=438,$o=DE|pE,bE=new Mr,Lr={};function Mo(){let x=[];for(let A of Object.keys(Lr))x.push(...Lr[A].diagnostics);return x}var vn=!!process.env.DLO_PROFILE,ce={precompileCount:0,cacheHits:0,precompileMs:0};function Lo(x){vn&&(x.log(`[DLO_PROFILE] precompile: ${ce.precompileCount} runs, ${ce.cacheHits} cache hits, ${ce.precompileMs.toFixed(1)}ms`),ce.precompileCount=0,ce.cacheHits=0,ce.precompileMs=0)}var Ps=(x,A,e,r)=>{let t={getattr(n){let F=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n)),v=F.fsPath;if(!P0.existsSync(v))throw new x.ErrnoError(44);let E=Po(A,r,e,F),u=P0.statSync(v),p=E?.length||u.size;return{mode:u.isDirectory()?Ts:$o,size:p,atime:u.atime,mtime:u.mtime,ctime:u.ctime}},setattr(n,F){let v=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;if(!P0.existsSync(v))throw new x.ErrnoError(44);if(typeof F.size=="number"&&P0.truncateSync(v,F.size),typeof F.mode=="number"&&P0.chmodSync(v,F.mode),F.atime||F.mtime){let E=P0.statSync(v);P0.utimesSync(v,F.atime??E.atime,F.mtime??E.mtime)}},lookup(n,F){let E=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;if(!P0.existsSync(E))throw new x.ErrnoError(44);let u=P0.statSync(E),p=x.createNode(n,F,u.isDirectory()?Ts:$o,0);return p.node_ops=n.node_ops,p.stream_ops=n.stream_ops,p},readdir(n){let F=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;return[".","..",...P0.readdirSync(F)]},mknod(n,F,v,E){let u=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.writeFileSync(u,"");let p=x.createNode(n,F,v,E);return p.node_ops=n.node_ops,p.stream_ops=n.stream_ops,p},unlink(n,F){let v=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.unlinkSync(v)},mkdir(n,F,v){let E=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.mkdirSync(E,{mode:v});let u=x.createNode(n,F,v|Ts,0);return u.node_ops=n.node_ops,u.stream_ops=n.stream_ops,u},rmdir(n,F){let v=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.rmdirSync(v)},rename(n,F,v){let E=ix.Utils.joinPath(ix.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath,u=ix.Utils.joinPath(ix.URI.parse(F.mount.opts.root),x.getPath(F),v).fsPath;P0.renameSync(E,u)}},s={open(n){let F=ix.Utils.joinPath(ix.URI.parse(n.node.mount.opts.root),x.getPath(n.node));n.modifiedContent=Po(A,r,e,F),n.modifiedContent||(n.nfd=P0.openSync(F.fsPath,To(n.flags)))},close(n){n.nfd&&P0.closeSync(n.nfd)},read(n,F,v,E,u){if(!n.modifiedContent)return P0.readSync(n.nfd,F,v,E,u);let p=n.modifiedContent;if(u>=p.length)return 0;let m=p.length-u,w=Math.min(E,m);return mE(p,F,v,u,u+w),w},write(n,F,v,E,u){return P0.writeSync(n.nfd,F,v,E,u)},flagsToMode:To,llseek(n,F,v){let E=F;if(v===1)E+=n.position;else if(v===2){let u=P0.fstatSync(n.nfd);E+=u.size}if(E<0)throw new x.ErrnoError(28);return n.position=E,E}};return{mount(){let n=fe(A),F=x.createNode(null,n,No|Io,0);return F.node_ops=t,F.stream_ops=s,F},node_ops:t,stream_ops:s}};function To(x){let A=x&2097155;if(A===0)return"r";if(A===1)return"r+";if(A===65)return"w";if(A===577)return"w+";if(A===1089)return"a";if(A===1217)return"a+";throw new Error(`Unknown file open flags: ${x}`)}function mE(x,A,e,r,t){if(Buffer.isBuffer(x)&&Buffer.isBuffer(A))x.copy(A,e,r,t);else{let s=x.subarray(r,t);Buffer.isBuffer(A)?Uint8Array.prototype.set.call(A,s,e):A.set(s,e)}}function Po(x,A,e,r){let t=r.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let s=hE(t);if(!s){delete Lr[t];return}let n=Lr[t];if(n&&n.mtimeMs===s.mtimeMs&&n.size===s.size)return vn&&ce.cacheHits++,n.buffer;let F=vn?performance.now():0,v=jE(x,A,e,r);return vn&&(ce.precompileCount++,ce.precompileMs+=performance.now()-F),Lr[t]={buffer:v.buffer,mtimeMs:s.mtimeMs,size:s.size,diagnostics:v.diagnostics},Lr[t].buffer}function hE(x){try{return P0.statSync(x)}catch{return null}}function jE(x,A,e,r){let t=P0.readFileSync(r.fsPath),s=uE(t),n=bE.preCompileDloFile(x,A,e,r,s);return{buffer:qo.encode(n.data,"cp1252"),diagnostics:n.diagnostics}}function fe(x){return x.fsPath.replace(/\\/g,"/")}function ht(x,A){let e=fe(x);return fe(A).replace(e,"")}var zo=Ko(),gt=zo.createPawnCC,Vo=zo.createPawnDbg;var Rr=class{constructor(A,e,r){this.cwd=A;this.fs=e;this.logger=r;this.dloCC=null}cwd;fs;logger;dloCC;stdout=[];stderr=[];async initDloCC(A=!1){this.stdout.length=0,this.stderr.length=0,this.dloCC=await gt({noExitRuntime:A,print:n=>{let F=qs(this.cwd,n);this.logger.log(F?F.message:n),this.stdout.push(n)},printErr:n=>{let F=qs(this.cwd,n);n.includes(": warning")?this.logger.warn(F?F.message:n):this.logger.error(F?F.message:n),this.stderr.push(n),this.stdout.push(n)}});let e=fe(this.cwd),[r]=e.split("/"),t=this.dloCC.FS,s=await z.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=Ps(t,this.cwd,s,this.logger),t.mkdir(r),t.mount(t.filesystems.NODEFS_TS,{root:"/"},r),t.chdir(fe(this.cwd))}async compile(A,e){let r=await z.read(A,e);if(!await z.isApmPartEnabled(A,e,u0.Part.dlo,r))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await e.mkdir(zA.Utils.joinPath(A,"dist/dlo"));let t=zA.Utils.joinPath(A,r.dlo?.mainFile||r0.filePaths.dlo.mainDLO),s=[],n=zA.Utils.joinPath(A,r0.filePaths.studio.auto.dlo.cfg),F=ht(A,n);s.push(`-T.${F}`);let v=0;try{let E=`.${ht(A,t)}`;v=await this.dloCC.callMain([E,...s])}catch(E){this.logger.error(E)}return{code:v,stdout:this.stdout,stderr:this.stderr,diagnostics:[...Mo(),...Ns(A,this.stderr,t)]}}async getDloSymbols(A,e){let r=e.map(u=>{let p=u.substring(0,2);return["-D","-e","-i","-o","-p","-r","-T"].includes(p)?`${p}.${u.substring(2)}`:u}),t=!!process.env.DLO_PROFILE,s=t?performance.now():0,{compiler:n,print:F}=await this.getSymbolCompiler(),v=t?performance.now()-s:0,E=t?performance.now():0;try{if(await n.callMain(["."+A,...r,"-R"]))return null}catch(u){if(u.stack?.startsWith("RuntimeError"))return null;throw u}finally{if(t){let u=performance.now()-E;this.logger.log(`[DLO_PROFILE] instantiate: ${v.toFixed(1)}ms, callMain: ${u.toFixed(1)}ms`),Lo(this.logger)}}return[...F.stdout,...F.stderr]}async getSymbolCompiler(){let A={stdout:[],stderr:[]},e=await gt({noExitRuntime:!1,print:F=>{A.stdout.push(F)},printErr:F=>{A.stderr.push(F)}}),r=fe(this.cwd),[t]=r.split("/"),s=e.FS,n=await z.read(this.cwd,this.fs);return s.filesystems.NODEFS_TS=Ps(s,this.cwd,n,this.logger),s.mkdir(t),s.mount(s.filesystems.NODEFS_TS,{root:"/"},t),{compiler:e,print:A}}};function Ns(x,A,e){let r=[],t=A.filter(s=>!!s.trim());for(let s of t){if((s.includes("Assertion failed:")||s.includes("Compilation aborted."))&&e){r.push({file:e,level:"error",line:0,message:s});continue}let n=qs(x,s);n&&r.push({file:zA.URI.parse(`file:///${n?.posixPath}`),level:n.level,line:Number(n.lineNumber)-1,message:n.msg})}return r}function qs(x,A){let e=A.indexOf(" : "),r=A.indexOf(": ",e+3),t=A.substring(0,e).trim(),s=A.substring(e+3,r).trim(),n=A.substring(r+2).trim();if(!t||!s||!n)return null;let[F,v]=t.split(/[()(-)]/),E=s.split(" "),u=E[E.length-2],m=zA.Utils.joinPath(x,F).fsPath.replace(/\\/g,"/");m.startsWith("/")&&(m=m.substring(1));let w=A.replace(F,m);return{level:u,msg:n,posixPath:m,lineNumber:v,message:w}}async function Wo(x,A,e){let r=["-M","-v2"],t=zA.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.defaultInc);r.push(`-p.${ht(x,t)}`);let s=await ex.getApmPartDependencies(x,A,u0.Part.dlo);for(let F of s){let v=zA.Utils.dirname(F.path);r.push(`-i.${ht(x,v)}`)}let n=e.dlo;return n&&r.push(...n.compileOptions),r.push("-o./dist/dlo/main.amx"),{path:zA.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.cfg),data:r.join(`
2324
- `)}}var ln;(v=>{v.createPawnCC=gt,v.createPawnDbg=Vo,v.FileSequencer=Ir,v.PreCompiler=Mr,v.Compiler=Rr,v.uriToMemFs=fe,v.parseCompilerWarningsAndErrors=Ns;async function F(E,u,p){let m=await z.read(E,u),w=await Wo(E,u,m);await u.writeFile(w.path,w.data),p.log("Generated",r0.filePaths.studio.auto.dlo.cfg)}v.exportDloConfig=F})(ln||={});var Yo=require("vscode-uri");var Ms=require("minimatch");var Qo=require("@gera2ld/tarjs"),RE=j0.convertBlobToString,OE=require("pako"),Zo=".studioignore",xF=[".vscodeignore","package-lock.json","npm-debug.log","yarn.lock","yarn-error.log","npm-shrinkwrap.json",".editorconfig",".npmrc",".yarnrc",".gitattributes","*.todo","tslint.yaml",".eslintrc*",".babelrc*",".prettierrc*",".cz-config.js",".commitlintrc*","webpack.config.js","ISSUE_TEMPLATE.md","CONTRIBUTING.md","PULL_REQUEST_TEMPLATE.md","CODE_OF_CONDUCT.md",".github",".travis.yml","appveyor.yml","**/.git","**/.git/**","**/*.vsix","**/.DS_Store","**/*.vsixmanifest","**/.vscode-test/**","**/.vscode-test-web/**"];xF.push("**/.studio/**","**/node_modules/**",Zo,"dist/defines.app.ts");var Xo={dot:!0},Or;(r=>{async function x(t,s){let n=new Qo.TarWriter;(await A(t,s)).forEach(E=>{n.addFile(E.name,E.data)});let v=await n.write();return OE.gzip(await v.arrayBuffer())}r.createArchive=x;async function A(t,s){let n=[],{ignore:F,negate:v}=await GE(t,s),u=(await s.findFiles(t,"**/*")).filter(({path:p})=>{let m=p.slice(t.path.length+1);return!F.some(w=>(0,Ms.minimatch)(m,w,Xo))||v.some(w=>(0,Ms.minimatch)(m,w.slice(1),Xo))});for(let p of u){let m=p.path.slice(t.path.length+1),[w,j]=await Promise.all([s.stat(p),s.readFile(p)]);w&&n.push({name:m,data:j,modifyTime:new Date(w.mtime)})}return n}r.getFilesForArchive=A;async function e(t,s,n,F=vx.ENV.production){let{publisher:v,name:E,version:u}=s,p=await mx.readFilesFromTarGz(n,["CHANGELOG.md","README.md","studio.json"]),m={"CHANGELOG.md":await Is(p["CHANGELOG.md"]),"README.md":await Is(p["README.md"]),"studio.json":await Is(p["studio.json"]),"library.tar.gz":n};return await Fx.publishLibraryVersion(t,v,E,u,m,F)}r.publishPackage=e})(Or||={});async function GE(x,A){let e=["!studio.json","!README.md"],t=(await UE(x,A)).split(/[\n\r]/).map(E=>E.trim()).filter(E=>!!E).filter(E=>!/^\s*#/.test(E)),s=[...t,...t.filter(E=>!/(^|\/)[^/]*\*[^/]*$/.test(E)).map(E=>/\/$/.test(E)?`${E}**`:`${E}/**`)],n=[...xF,...s,...e],[F,v]=n.reduce((E,u)=>/^\s*!/.test(u)?[E[0],[...E[1],u]]:[[...E[0],u],E[1]],[[],[]]);return{ignore:F,negate:v}}async function UE(x,A){let e=Yo.Utils.joinPath(x,Zo);if(await A.stat(e)){let t=await A.readFile(e);return RE(t)}else return""}async function Is(x){return new Uint8Array(await x.arrayBuffer())}var VA=require("vscode-uri");var Pe=require("yaml");var HE=j0.convertBlobToString,cn=j0.yamlRangeToLineInformation,fn;(n=>{let x;(u=>(u.static="static",u.dynamic="dynamic",u.appDynamic="app-dynamic"))(x=n.Type||={});let A;(p=>(p.crcStamp="crc_stamp",p.stampOnly="stamp_only",p.onlyDown="only_down",p.onlyUp="only_up"))(A=n.SyncLogic||={});let e;(u=>(u.down="down",u.up="up",u.off="off"))(e=n.Force||={});async function r(F,v,E){let{properties:u,diagnostics:p,libraryFiles:m}=await t(F,v),w=VA.Utils.joinPath(F,r0.filePaths.dist.dfilesPath);await v.stat(w)&&await v.rm(w);for(let[j,S]of Object.entries(u))await KE(F,v,j,S,m);return Object.keys(u).length&&(E.done(`${Object.keys(u).length} dfiles processed.`),await v.writeFile(VA.Utils.joinPath(F,r0.filePaths.dist.dfilesProperties),JSON.stringify(u,null," "))),p}n.process=r;async function t(F,v){let E=[],u={},p=await ex.getApmPartDependencies(F,v,u0.Part.dfiles);for(let j of p){let{properties:S,diagnostics:P}=await s(v,j.path,j.name);Object.assign(u,S),E.push(...P)}let{properties:m,diagnostics:w}=await s(v,VA.Utils.joinPath(F,r0.filePaths.dfiles.mainDFILES),null);return Object.assign(u,m),E.push(...w),{properties:u,diagnostics:E,libraryFiles:p}}n.parseDfile=t;async function s(F,v,E){let u=[],p={};if(!await F.stat(v))return{properties:p,diagnostics:u};let m=await F.readFile(v),w=HE(m),j=new Pe.LineCounter,P=(0,Pe.parseDocument)(w,{lineCounter:j}).contents||new Pe.YAMLMap;for(let N of P.items){let O=N.key.value,L=(0,Pe.isMap)(N.value)?N.value:null,t0=cn(j,N.key.range),M=L?L.has("syncMode"):!1,k=M?L.get("syncMode"):"crc_stamp";if(M){let H=Object.values(n.SyncLogic);if(!H.includes(k)){let a0=L.items.find(Z=>Z.key.value==="syncMode"),n0=cn(j,a0.key.range);u.push({file:v,code:"",message:`Property syncMode does not match any of "${H.join(", ")}"`,line:n0.line,startCharacter:n0.startCharacter,endCharacter:n0.endCharacter,level:"error"})}}else u.push({file:v,code:"",message:'Property "syncMode" missing',line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"});let R=L?L.has("type"):!1,Q=R?L.get("type"):"static";if(R){let H=Object.values(n.Type);if(!H.includes(Q)){let a0=L.items.find(Z=>Z.key.value==="type"),n0=cn(j,a0.key.range);u.push({file:v,code:"",message:`Property type does not match any of "${H.join(", ")}"`,line:n0.line,startCharacter:n0.startCharacter,endCharacter:n0.endCharacter,level:"error"})}}O.match(/^[a-z0-9._-]*$/)||u.push({file:v,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"});let K=VA.Utils.joinPath(VA.Utils.dirname(v),O),J=await JE(F,K);if(J)p[O]={crc:J.crc,force:"off",readable:!1,size:J.size,stamp:J.stamp,sync_logic:k,type:Q,library:E};else{let H=cn(j,N.key.range);u.push({file:v,code:"",message:`Could not find file "${O}"`,line:H.line,startCharacter:H.startCharacter,endCharacter:H.endCharacter,level:"error"})}}return{properties:p,diagnostics:u}}n.parseYamlFile=s})(fn||={});async function JE(x,A){let e=await x.stat(A);if(!e)return null;let r=await x.readFile(A);return{size:e.size,stamp:Math.trunc(e.ctime),crc:j0.generateCRC32ForFileContent(r)}}async function KE(x,A,e,r,t){let n=r.library!==null?VA.Utils.dirname(t.find(E=>E.name===r.library).path):VA.Utils.joinPath(x,r0.filePaths.dfiles.path),F=VA.Utils.joinPath(x,r0.filePaths.dist.dfilesPath,e),v=VA.Utils.joinPath(n,e);await A.copy(v,F)}var AF=U0(require("dotenv")),eF=require("vscode-uri");var zE=".env.local",rF;(A=>{async function x(e,r){let t=eF.Utils.joinPath(e,zE);if(await r.stat(t)){let s=await r.readFile(t);return AF.default.parse(j0.convertBlobToString(s))}return{}}A.read=x})(rF||={});var Gr=U0(require("chalk")),WA;(r=>{let x;(u=>(u[u.log=0]="log",u[u.done=1]="done",u[u.info=2]="info",u[u.warning=3]="warning",u[u.error=4]="error",u[u.debug=5]="debug"))(x=r.LogMessageType||={}),r.LOG_PREFIX={1:Gr.default.bgGreen.black(" DONE "),0:"",2:Gr.default.bgBlueBright.black(" INFO "),3:Gr.default.bgYellow.black(" WARNING "),4:Gr.default.bgRed.black(" ERROR "),5:Gr.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(s=console){this._logHandler=s}_log(s,n,...F){this._silent&&s!==4||(F=[r.LOG_PREFIX[s],n,...F],this._logHandler.log(...F))}set silent(s){this._silent=s}set output(s){this._logHandler=s}log(s,...n){this._log(0,s,...n)}debug(s,...n){this._debugEnabled&&this._log(5,s,...n)}set debugEnabled(s){this._debugEnabled=s}error(s,...n){this._log(4,s,...n)}info(s,...n){this._log(2,s,...n)}warn(s,...n){this._log(3,s,...n)}done(s,...n){this._log(1,s,...n)}}r.Logger=e})(WA||={});var ca=require("node:child_process"),ol=require("node:fs"),Fl=U0(require("node:path")),Yr=require("vscode-uri");var Iv=require("node:events"),Zi=require("vscode-uri"),rx=U0(Me());var Wx=U0(Me());var Xi=U0(Me()),pv=2e3;function BD(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function CD(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var On=class{interface="usb";#A=new Set;#e;#r;#s;#t;#x=!1;#n;constructor(A,e){this.#e=A;let t=A.configuration.interfaces[e].alternate.endpoints;this.#r=t.find(s=>s.direction==="in"),this.#s=t.find(s=>s.direction==="out"),this.#t=CD(A,e)}async write(A){await this.#e.transferOut(this.#s.endpointNumber,A)}onData(A){let e={cb:A};return this.#A.add(e),this.#x||this.#i(),()=>{this.#A.delete(e)}}#i(){this.#x=!0;let A=this.#t;if(!A){this.#n=this.#a();return}A.on("data",e=>{if(e.byteLength===0)return;let r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let t of this.#A)t.cb(r)}),A.on("error",()=>{}),A.startPoll(1,this.#r.packetSize)}async#a(){for(;this.#x&&this.#e.opened;)try{let A=await this.#e.transferIn(this.#r.endpointNumber,this.#r.packetSize);if(A.data&&A.data.byteLength>0)for(let e of this.#A)e.cb(A.data.buffer)}catch{break}}async stop(){if(!this.#x)return;this.#x=!1;let A=this.#t;A?.pollActive?await new Promise(e=>{let r=setTimeout(e,pv);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,BD(pv)])}},Gn=class extends On{constructor(A){super(A,Xi.USB_CONFIGURATION.utoInterface)}},Un=class extends On{constructor(A){super(A,Xi.USB_CONFIGURATION.debugInterface)}};var dD=9540,Yi;function bv(){if(!Yi){let{WebUSB:x}=require("usb");Yi=new x({allowedDevices:[{vendorId:dD}]})}return Yi}async function uD(){return(await bv().getDevices()).map(A=>({productName:A.productName,serialNumber:A.serialNumber||A.productName?.split(" ").pop(),vendorId:A.vendorId,productId:A.productId}))}async function mv(x){let A=await uD();if(A.length===0){x.info("No USB devices found.");return}x.info("Available USB devices:"),A.forEach((e,r)=>{let t=e.productName||`Unknown Device (VID: 0x${e.vendorId.toString(16)}, PID: 0x${e.productId.toString(16)})`,s=e.serialNumber?` [${e.serialNumber}]`:"";x.log(` ${r+1}. ${t}${s}`)})}async function Qi(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await bv().getDevices();for(let r of e)if((r.serialNumber||r.productName?.split(" ").pop())?.toLowerCase()===x.toLowerCase())return A.info(`Device found: ${r.productName}`),r;return null}function Jn(x){return`Device not found with serial number: ${x}`}var DD=500;function pD(x){if(x instanceof Hn)return!0;let A=x instanceof Error?x.message:String(x);return/LIBUSB_ERROR_(ACCESS|BUSY|NO_DEVICE|NOT_FOUND|IO)/.test(A)||A.startsWith(Jn(""))}var Hn=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function bD(x,A){try{return{uto:new Gn(x),debug:A?new Un(x):void 0}}catch(e){throw new Hn("Device descriptors not ready",e)}}function mD(x){return async(A,e=!0)=>{let r=await Qi(A,x);if(!r)throw new Error(Jn(A));try{await r.open(),await r.selectConfiguration(Wx.USB_CONFIGURATION.configurationNumber),await r.claimInterface(Wx.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(Wx.USB_CONFIGURATION.debugInterface);let{uto:t,debug:s}=bD(r,e);return{uto:t,debug:s,async close(){await t.stop(),await s?.stop(),r.opened&&(await r.releaseInterface(Wx.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(Wx.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function hD(x){return new Promise(A=>setTimeout(A,x))}async function jD(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(s){if(!pD(s)||Date.now()>=t)throw s;await hD(DD)}}function vr(x){return{debug:(A,...e)=>x.debug(A,...e),info:(A,...e)=>x.debug(A,...e),warn:(A,...e)=>x.warn(A,...e),error:(A,...e)=>x.error(A,...e)}}async function Kn(x,A={}){let e=A.logger??new WA.Logger,r=A.transportFactory??mD(e),t=A.needDebug!==!1,s=await jD(r,x,t,A.retryMs??0),n=t?s.debug:void 0,F=vr(e),v=n?new Wx.AtCommandHandler(n,F):void 0,E=new Wx.UtoMaster(s.uto,F);return{utoMaster:E,atHandler:v,transports:s,serial:x,close:async()=>{try{await E.dispose(v)}catch{}v?.dispose(),await s.close()}}}async function Wr(x,A,e,r,t=!1,s=0,n){if(!await e.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let v=await e.readFile(A),E;try{E=await Kn(x,{logger:r,debug:t,needDebug:!1,retryMs:s,transportFactory:n});let{utoMaster:u}=E;if(t){u.on("mdnCom",m=>{r.debug("mdnCom",m)}),u.on("mdnComError",m=>{r.debug("mdnComError",m)});let p=-1;u.on("installing",m=>{m&&m!==p&&(p=m,r.info(`Upload progress: ${m}%`))})}return await u.init(),await u.requestDeviceInfo(),r.info("Device connected, starting upload..."),await u.sendFile(Wx.UtoFileType.pawn,new Uint8Array(v.buffer,v.byteOffset,v.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(u){let p=u instanceof Error?u.message:String(u);return{success:!1,message:p===Jn(x)?p:`Upload failed: ${p}`}}finally{await E?.close()}}async function hv(x,A,e=!1){let r,t;try{r=await Kn(x,{logger:A,debug:e});let{atHandler:s,transports:n}=r;if(!s)throw new Error("The debug interface is required for a sync");t=new Wx.SyncManager(n.uto,s,A),t.on("syncError",v=>A.error(`Sync error: ${v.message}`)),e&&(t.on("syncStart",({mode:v})=>A.log(`Sync mode: ${v}`)),t.on("syncPhase",({phase:v})=>A.log(`Sync phase: ${v}`)),t.on("syncComplete",v=>A.info(`Sync complete (mode: ${v.mode}, messages: ${v.serverMessageCount})`))),A.info("Syncing device...");let F=new AbortController;return await t.sync({serialNumber:x,signal:F.signal}),{success:!0,message:"Sync completed successfully"}}catch(s){let n=s instanceof Error?s.message:String(s);return{success:!1,message:n===Jn(x)?n:`Sync failed: ${n}`}}finally{t?.dispose(),await r?.close()}}var jv=require("vscode-uri"),zn=U0(Me());var Vn=class x{constructor(A,e,r,t,s){this.fs=r;this.persist=t;this.logger=s;this.storage=A,this.file=e}fs;persist;logger;storage;file;lastSerialized=null;static async create(A,e,r={}){let t=jv.Utils.joinPath(A,r0.filePaths.studio.dev.mirror),s=new zn.MemoryStorage;if(r.persist&&await e.stat(t))try{let n=new TextDecoder().decode(await e.readFile(t));s=zn.MemoryStorage.fromJSON(JSON.parse(n))}catch(n){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${n instanceof Error?n.message:n}`),s=new zn.MemoryStorage}return new x(s,t,e,r.persist===!0,r.logger)}async save(){if(!this.persist)return;let A=JSON.stringify(this.storage.toJSON());if(A!==this.lastSerialized)try{await this.fs.writeFile(this.file,A),this.lastSerialized=A}catch(e){this.logger?.warn(`Could not write dev mirror snapshot: ${e instanceof Error?e.message:e}`)}}};var kv=require("node:events"),Wn=require("node:fs/promises"),wv=require("node:path"),_v=U0(require("iconv-lite")),lr=U0(Me());var gD=5e3,gv=500;function yv(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function yD(x){let A=x.level===lr.DebugLogLevel.info?"":`${lr.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function kD(x){if(x.length===0)return!1;let A=0,e=0;for(let r of x){e++;let t=r.codePointAt(0)??0;(t===9||t===10||t===13||t>=32&&t!==127)&&A++}return A/e>.8}var Xr=class extends kv.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??gD,this.logFile=A.logFile,this.logger=A.logger}push(A,e,r){let t={seq:++this.seq,ts:Date.now(),source:A,text:e};return r&&(t.raw=Buffer.from(r).toString("base64")),this.buffer.push(t),this.buffer.length>this.capacity&&this.buffer.splice(0,this.buffer.length-this.capacity),this.emit("record",t),this.appendToFile(t),t}appendToFile(A){let e=this.logFile;e&&(this.logDirReady??=(0,Wn.mkdir)((0,wv.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,Wn.appendFile)(e,`${JSON.stringify(A)}
2325
- `,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=gv){let r=e>0?e:gv;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==lr.UtoTag.LOG||!r.data)return;let t=new Uint8Array(r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength));this.pushDecoded("rm2mlog",t)};A.on("utoFrame",e),this.disposers.push(()=>A.off("utoFrame",e))}attachAtHandler(A){let e=new lr.DebugMaster(A,vr(this.logger??new WA.Logger));e.on("message",r=>{let t=yD(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[yv(_v.default.decode(Buffer.from(e),"win1252")),yv(Buffer.from(e).toString("utf8"))].find(kD);if(t){this.push(A,t);return}let s=Buffer.from(e.subarray(0,32)).toString("hex");this.push(A,`<${e.length} bytes> ${s}${e.length>32?"\u2026":""}`,e)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var $v=require("node:events"),kA=U0(Me()),wD=1e3,_D=1e4,SD=200,Sv=new Set([kA.UtoTag.HISTDATA_RAW,kA.UtoTag.LOG,kA.UtoTag.ALERTS]),Xn=class extends $v.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(A){super(),this.opts=A;for(let e of A.model.containers){let r=(0,kA.resolveTagForContainer)(e);r!==null&&this.containerByTag.set(r,e)}}get utoMaster(){let A=this.opts.utoMaster();if(!A)throw new Error("Device not connected");return A}async refreshTagMap(){let A=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),A&&A.utos.forEach((e,r)=>{this.tagMap.set(e.wTag,{index:r,sTag:e.sTag,historic:e.flags.historic}),(this.containerByTag.has(e.wTag)||Sv.has(e.wTag))&&this.relevantTags.add(e.wTag)})}start(){this.opts.intervalMs<=0||(this.stopped=!1,this.schedule(this.opts.intervalMs))}stop(){this.stopped=!0,this.clearTimer()}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}pause(){this.paused=!0}resume(){this.paused=!1}status(){return{intervalMs:this.opts.intervalMs,lastTick:this.lastTickAt,lastChange:this.lastChangeAt,errors:this.errorCount,paused:this.paused}}deviceStamp(A){return this.deviceStamps.get(A)??null}knowsTag(A){return this.tagMap.has(A)}async refreshStamps(){try{let A=await this.utoMaster.requestStamps();if(!A)return;for(let[e,r]of this.tagMap)r.index<A.stamps.length&&this.deviceStamps.set(e,A.stamps[r.index])}catch(A){this.opts.logger?.warn(`Stamp refresh failed: ${A instanceof Error?A.message:String(A)}`)}}schedule(A){this.stopped||(this.clearTimer(),this.timer=setTimeout(()=>{this.tick().then(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs)).catch(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs))},A),this.timer.unref?.())}async tick(){if(this.stopped||this.paused||this.opts.session.busy||this.inFlight)return[];this.inFlight=!0;try{let A=await this.utoMaster.requestStamps();return this.lastTickAt=Date.now(),this.backoffMs=0,A?this.pullAdvancedTags(A.stamps):[]}catch(A){return this.errorCount++,this.backoffMs=Math.min(this.backoffMs>0?this.backoffMs*2:wD,_D),this.opts.logger?.warn(`Stamp poll failed: ${A instanceof Error?A.message:String(A)}`),this.emit("error",A instanceof Error?A:new Error(String(A))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(A){let e=[];for(let r of this.relevantTags){let t=await this.pullIfAdvanced(r,A);t&&e.push(t)}if(e.length>0){this.lastChangeAt=Date.now();for(let r of e)this.emit("container-changed",r)}return e}async pullIfAdvanced(A,e){let r=this.tagMap.get(A);if(!r||r.index>=e.length)return null;let t=e[r.index],s=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let n=await this.mirrorStamp(A);return(s===void 0?t>n:t!==s)?this.pull(A,r,n,t):null}async pullTags(A){let e=[];for(let r of A){let t=this.tagMap.get(r)??{index:-1,sTag:`0x${r.toString(16)}`,historic:!1},s=await this.mirrorStamp(r),n=await this.pull(r,t,t.historic?s:0,this.deviceStamp(r)??0);n&&(e.push(r),this.emit("container-changed",n))}return e}async mirrorStamp(A){let e=await this.opts.storage.getLatestStampForTag(A);return e?(0,kA.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||Sv.has(A)?this.pullHistoric(A,r,t):this.pullSingle(A,t)}async pullSingle(A,e){let r=await this.utoMaster.requestUto(A,0);if(!r)return null;let t=await this.opts.storage.getRowForTag(A);return await this.opts.storage.replaceUtoRow({tag:A,stamp:(0,kA.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?$D(r.data):null}),this.describeChange(A,r.stamp||e)}async pullHistoric(A,e,r){let t=await this.opts.storage.getRowForTag(A),s=0,n=e,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>(n=Math.max(n,u.stamp40),{tag:A,stamp:(0,kA.stamp40ToDbHex)(u.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:u.data}));await this.opts.storage.insertHistoricRows(E),s+=E.length};return await this.utoMaster.requestHistoricUtos(A,e,void 0,void 0,SD,F),s===0?null:this.describeChange(A,n||r)}async describeChange(A,e){let r=this.containerByTag.get(A);if(!r)return{tag:A,container:null,stamp:e};let t=null;try{t=await this.opts.mapper.readContainer(r.name)}catch{}return{tag:A,container:r.name,alias:r.alias,stamp:e,decoded:t}}};function $D(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var Q0=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},TD=2e3,PD=3e3,qD=3e4,ND=1e4,ID=3e4,MD=1e3,xa="dev",Tv=`/api/1/sites/${xa}`,Pv="local",Yn="Device not connected",qv="device_id",Aa=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(A,e){this.depth++;let r=this.tail,t=()=>{};this.tail=new Promise(s=>{t=s});try{await LD(r,e)}catch(s){throw this.depth--,r.then(t,t),s}try{return await A()}finally{this.depth--,t()}}};function LD(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new Q0(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var Le=class extends Iv.EventEmitter{logStream;opts;logger;timeSource;device;mirror;model;mapper;apiHandler;poller;stateManager;localData;offlineSync;buildState={running:!1,ok:null,at:null};lastSyncAt=null;firmwareVersion=null;mirrorSaveTimer;stopped=!1;lock=new Aa;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??rx.systemTimeSource,this.logStream=new Xr({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",e=>this.emit("log",e))}get serial(){return this.opts.serial}get connected(){return this.device!==void 0}get busy(){return this.lock.busy}get ddeModel(){if(!this.model)throw new Q0("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new Q0("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let A=await this.build();if(A.ok===!1)throw new Q0(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await Vn.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new rx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new Q0(A.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let A=Zi.Utils.joinPath(this.opts.cwd,r0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new Q0(`No DDE model at ${r0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,rx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await Kn(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let s=t instanceof Error?t.message:String(t);throw new Q0(`Could not open device ${this.opts.serial}: ${s}`,/not found/i.test(s)?2:3)}let{utoMaster:A,atHandler:e}=this.device;if(!e)throw new Q0(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(A),this.logStream.attachAtHandler(e),A.on("utoFrame",t=>this.emit("uto",t));try{await A.init();let t=await A.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null,await this.storage.getMetadataValue(qv)===null&&await this.storage.setMetadataValue(qv,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new Q0(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=vr(this.logger);this.stateManager=new rx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new rx.LocalDataManager(e,r),this.offlineSync=new rx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new Xn({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??TD,logger:this.logger}),this.poller.on("container-changed",A=>{this.emit("container-changed",A),this.logStream.push("uto",`${A.alias??A.container??this.tagLabel(A.tag)} changed`)}),this.poller.on("error",A=>this.emit("error",A)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(A){return`0x${A.toString(16)}`}get utoMaster(){if(!this.device)throw new Q0(Yn,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new Q0(Yn,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,s)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(rx.UtoCommand.DATA,r,t,s))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:xa,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,rx.createSiteInfoFromDde)(this.ddeModel,{siteUid:xa,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:Pv}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,rx.createLocalApiHandler)(e)}buildBlueprint(){let A={};for(let e of this.ddeModel.containers){let r={};for(let t of e.fields){let s=t.alias??t.name;r[s.toLowerCase()]={alias:s}}A[e.name.toLowerCase()]=r}return A}async handleApi(A){if(!this.apiHandler)throw new Q0("Session not started",7);let e=this.writtenTag(A),r=await this.apiHandler(A);if(e===null||r.status>=400)return r;let t=await this.mirrorStamp(e);return await this.awaitDeviceStamp(e,t)||(r.headers={...r.headers,"x-mt-mirror":"stale"}),r}writtenTag(A){let e=A.method.toUpperCase();if(e!=="PUT"&&e!=="POST")return null;let[r,t=""]=A.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let s=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(r);if(!s)return null;let n=(0,rx.resolveTagInModel)(this.ddeModel,decodeURIComponent(s[1]));return n===null||!(0,rx.isDevicePushableTag)(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??PD,t=this.poller;if(r<=0||!t)return!0;let s=Date.now()+r;for(;;){let F=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(F!==null&&F>=e)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=s)return!1;await Nv(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await z.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await mx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??vx.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:A}}catch(A){this.buildState={running:!1,ok:!1,at:Date.now(),message:A instanceof Error?A.message:String(A),diagnostics:A instanceof mx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=Zi.Utils.joinPath(this.opts.cwd,A??r0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??Wr)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,ND,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+ID;for(let e=0;;e++)try{await this.connect(),this.stopped&&await this.closeDevice();return}catch(r){if(await this.closeDevice(),this.stopped||Date.now()>=A){this.reportReconnectFailure(r);return}e===0&&this.logger.info(`Waiting for device ${this.opts.serial} to come back after the flash...`),await Nv(MD)}}reportReconnectFailure(A){let e=A instanceof Error?A.message:String(A);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${e}`),this.stopped||this.emit("error",A instanceof Error?A:new Error(e))}async sync(A){let e=await this.withLink(async()=>{this.poller?.pause();try{return A&&A.length>0?await this.poller.pullTags(A):(await this.offlineSync.sync()).tags.filter(s=>s.outcome==="upload").map(s=>s.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let r={tags:e,at:this.lastSyncAt};return this.emit("sync",r),r}async at(A){return this.withLink(async()=>(this.logStream.push("at",`> ${A}`),this.atHandler.sendRaw(A)))}async state(){let A=this.stateManager;if(!A)throw new Q0(Yn,3);return A.getLastState()??await A.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let A=this.localData;if(!A)throw new Q0(Yn,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:Pv,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,rx.resolveTagInModel)(this.ddeModel,A.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}configContainers(){return this.ddeModel.containers.filter(A=>A.kind==="config")}async configs(){let A={},e=[];for(let r of this.configContainers()){let t=r.alias??r.name;e.push(t);let s=await this.handleApi({path:`${Tv}/containers/${encodeURIComponent(r.name)}`,method:"GET"});A[t]=s.status<400&&s.body?JSON.parse(s.body):{}}return{configs:A,order:e}}async applyConfigs(A){let e={};for(let[r,t]of Object.entries(A)){let s=this.ddeModel.byNameOrAlias(r);if(!s||s.kind!=="config"){e[r]={ok:!1,err:`E_NOT_FOUND ?ddeMapper.unknown-container."${r}"`};continue}let n=await this.handleApi({path:`${Tv}/containers/${encodeURIComponent(s.name)}`,method:"PUT",body:JSON.stringify(t)});e[r]=n.status>=400?{ok:!1,err:RD(n.body)}:n.headers?.["x-mt-mirror"]==="stale"?{ok:!0,stale:!0}:{ok:!0}}return e}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(A){let e=await this.storage.getLatestStampForTag(A);return e?(0,rx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??qD)}async closeDevice(){let A=this.device;this.device=void 0,this.stateManager?.dispose(),this.stateManager=void 0,await this.localData?.stopPolling(),this.localData?.dispose(),this.localData=void 0,this.offlineSync=void 0,await A?.close()}async stop(){if(!this.stopped){this.stopped=!0,this.mirrorSaveTimer&&clearInterval(this.mirrorSaveTimer),this.poller?.stop();try{await this.mirror?.save(),await this.logStream.dispose()}finally{await this.closeDevice(),this.removeAllListeners()}}}};function Nv(x){return new Promise(A=>setTimeout(A,x))}function RD(x){try{return JSON.parse(x).err??x}catch{return x}}var Uv=U0(require("node:http")),Hv=require("vscode-uri"),Jv=U0(require("yaml"));var Kv=["log","state","sync","build","uto","container-changed","error"],OD=15e3,Mv=4*1024*1024,GD="127.0.0.1",UD=8765,zv="no-store",Vv="E_NOT_FOUND",Lv="E_BAD_REQUEST",HD=2e3,JD=20;function cr(x,A){return JSON.stringify({err:`${x} ${A}`})}function ZA(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":zv,...r}),x.end(e)}function KD(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function zD(x,A){if(!(KD(A)||x.token)){if(!x.allowRemote)throw new Error(`Refusing to bind to ${A} without --bearer: the device API would be reachable from the network. Pass --bearer <token>, or --allow-remote to bind unauthenticated anyway.`);x.logger.warn(`Serving the unauthenticated device API on ${A} \u2014 anyone who can reach this port can write to and flash the device.`)}}function VD(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function WD(x,A){let e=x.headers.origin;typeof e=="string"&&VD(e)&&(A.setHeader("access-control-allow-origin",e),A.setHeader("access-control-allow-credentials","true"),A.setHeader("vary","origin")),A.setHeader("access-control-allow-methods","GET,POST,PUT,DELETE,OPTIONS"),A.setHeader("access-control-allow-headers","authorization,content-type"),A.setHeader("access-control-expose-headers","x-mt-mirror, x-mt-backfill"),A.setHeader("access-control-max-age","600")}function XD(x,A,e){if(!A)return!0;let r=x.headers.authorization,t=typeof r=="string"?r.replace(/^Bearer\s+/i,"").trim():(e??"").trim();if(t==="")return!1;let s=process.env.MYDATANET_TOKEN;return t===A||s!==void 0&&s!==""&&t===s}var Re=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function Wv(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>Mv)throw x.pause(),new Re(413,"E_TOO_LARGE",`request body exceeds ${Mv} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function Xv(x){return x!=="GET"&&x!=="HEAD"}function Rv(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new Re(400,Lv,"malformed JSON body")}if(typeof A!="object"||A===null)throw new Re(400,Lv,"JSON body must be an object");return A}function Ov(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function YD(x,A){let e=x[A];if(!Array.isArray(e))return;let r=e.map(Number).filter(t=>Number.isFinite(t));return r.length>0?r:void 0}function Gv(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var ea=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
2322
+ public ___${e0}( ${I})${k}`}else if(N=ko.exec(P)){let[,O,e0]=N;S=`${O}${e0}{_log_string="";_assert(__refid,__line);}`}else if(N=go.exec(P)){let[,O,e0,I,k]=N;S=`${O}${e0}{ if (!(${I})) { sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(N=yo.exec(P)){let[,O,e0,I]=N;S=`${O}${e0}{ if (!(${I})) { _log_string="";_assert(__refid,__line); }}`}else if(N=wo.exec(P)){let[,O,e0,I]=N;S=`${O}${e0}_catch(__refid,__line,${I});`}else if(N=_o.exec(P)){let[,O,e0,I,k,L]=N,{priority:Z,code:W}=bo(k,I.substring(1));Z!==null&&(S=`${O}${e0}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${L});DDE_applog_write(${Z}, ${W}, params_str, __applog_src_id);}`)}else if(N=So.exec(P)){let[,O,e0,I,k]=N,{priority:L,code:Z}=bo(k,I.substring(1));L!==null&&(S=`${O}${e0}DDE_applog_write(${L}, ${Z}, "", __applog_src_id);`)}else if(N=$o.exec(P)){let[,O,e0,I,k]=N,L=I.substring(1),Z=To[L];S=`${O}${e0}{ if(_log_level <= ${Z}){ sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")}); _log${I}(__refid,__line); }}`}else(N=lE.exec(P))&&!F.includes(t0.filePaths.studio.auto.path)?(F.includes(t0.filePaths.studio.libdeps)||n.push({file:t,level:"warning",line:j,message:"Libraries are included automatically - remove this #include line"}),S="// Libraries are included automatically! - "+P):(N=cE.exec(P))&&(n.push({file:t,level:"error",line:j,message:"#endinput is not supported - use #if/#endif instead"}),S=P);v&&!r.legacyProject&&(EE.exec(P)&&(S=S.replaceAll("DDE_",`_${v}`)),BE.exec(P)&&(S=S.replace("onUplink",`_${v}`)),CE.exec(P)&&(S=S.replace("onUplink",`_${v}Uplink`))),u.push(S),w++;for(let O=0;O<R;O++)u.push(""),w++,j++}if(E!=="main.dlo"){let j=E.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),S=`_inc_${j}`.substring(0,31),P=`_inc_${j}_inc`.substring(0,31);u.push(`#if defined ${S}`),u.push(`#undef ${S}`),u.push("#endif"),u.push(`#if defined ${P}`),u.push(`#undef ${P}`),u.push("#endif")}return{data:u.join(`
2323
+ `),diagnostics:n}}};var VA=require("vscode-uri");var P0=U0(require("fs")),sx=require("vscode-uri");var Mo=U0(require("iconv-lite")),pE=j0.convertBlobToStringArray,Lo=16384,Ro=511,Pi=Lo|Ro,bE=32768,mE=438,qo=bE|mE,hE=new Lr,Rr={};function Oo(){let x=[];for(let A of Object.keys(Rr))x.push(...Rr[A].diagnostics);return x}var ln=!!process.env.DLO_PROFILE,fe={precompileCount:0,cacheHits:0,precompileMs:0};function Go(x){ln&&(x.log(`[DLO_PROFILE] precompile: ${fe.precompileCount} runs, ${fe.cacheHits} cache hits, ${fe.precompileMs.toFixed(1)}ms`),fe.precompileCount=0,fe.cacheHits=0,fe.precompileMs=0)}var qi=(x,A,e,r)=>{let t={getattr(n){let F=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n)),v=F.fsPath;if(!P0.existsSync(v))throw new x.ErrnoError(44);let E=Io(A,r,e,F),u=P0.statSync(v),D=E?.length||u.size;return{mode:u.isDirectory()?Pi:qo,size:D,atime:u.atime,mtime:u.mtime,ctime:u.ctime}},setattr(n,F){let v=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;if(!P0.existsSync(v))throw new x.ErrnoError(44);if(typeof F.size=="number"&&P0.truncateSync(v,F.size),typeof F.mode=="number"&&P0.chmodSync(v,F.mode),F.atime||F.mtime){let E=P0.statSync(v);P0.utimesSync(v,F.atime??E.atime,F.mtime??E.mtime)}},lookup(n,F){let E=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;if(!P0.existsSync(E))throw new x.ErrnoError(44);let u=P0.statSync(E),D=x.createNode(n,F,u.isDirectory()?Pi:qo,0);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},readdir(n){let F=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;return[".","..",...P0.readdirSync(F)]},mknod(n,F,v,E){let u=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.writeFileSync(u,"");let D=x.createNode(n,F,v,E);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},unlink(n,F){let v=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.unlinkSync(v)},mkdir(n,F,v){let E=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.mkdirSync(E,{mode:v});let u=x.createNode(n,F,v|Pi,0);return u.node_ops=n.node_ops,u.stream_ops=n.stream_ops,u},rmdir(n,F){let v=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;P0.rmdirSync(v)},rename(n,F,v){let E=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath,u=sx.Utils.joinPath(sx.URI.parse(F.mount.opts.root),x.getPath(F),v).fsPath;P0.renameSync(E,u)}},i={open(n){let F=sx.Utils.joinPath(sx.URI.parse(n.node.mount.opts.root),x.getPath(n.node));n.modifiedContent=Io(A,r,e,F),n.modifiedContent||(n.nfd=P0.openSync(F.fsPath,No(n.flags)))},close(n){n.nfd&&P0.closeSync(n.nfd)},read(n,F,v,E,u){if(!n.modifiedContent)return P0.readSync(n.nfd,F,v,E,u);let D=n.modifiedContent;if(u>=D.length)return 0;let m=D.length-u,w=Math.min(E,m);return jE(D,F,v,u,u+w),w},write(n,F,v,E,u){return P0.writeSync(n.nfd,F,v,E,u)},flagsToMode:No,llseek(n,F,v){let E=F;if(v===1)E+=n.position;else if(v===2){let u=P0.fstatSync(n.nfd);E+=u.size}if(E<0)throw new x.ErrnoError(28);return n.position=E,E}};return{mount(){let n=Ee(A),F=x.createNode(null,n,Lo|Ro,0);return F.node_ops=t,F.stream_ops=i,F},node_ops:t,stream_ops:i}};function No(x){let A=x&2097155;if(A===0)return"r";if(A===1)return"r+";if(A===65)return"w";if(A===577)return"w+";if(A===1089)return"a";if(A===1217)return"a+";throw new Error(`Unknown file open flags: ${x}`)}function jE(x,A,e,r,t){if(Buffer.isBuffer(x)&&Buffer.isBuffer(A))x.copy(A,e,r,t);else{let i=x.subarray(r,t);Buffer.isBuffer(A)?Uint8Array.prototype.set.call(A,i,e):A.set(i,e)}}function Io(x,A,e,r){let t=r.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let i=gE(t);if(!i){delete Rr[t];return}let n=Rr[t];if(n&&n.mtimeMs===i.mtimeMs&&n.size===i.size)return ln&&fe.cacheHits++,n.buffer;let F=ln?performance.now():0,v=yE(x,A,e,r);return ln&&(fe.precompileCount++,fe.precompileMs+=performance.now()-F),Rr[t]={buffer:v.buffer,mtimeMs:i.mtimeMs,size:i.size,diagnostics:v.diagnostics},Rr[t].buffer}function gE(x){try{return P0.statSync(x)}catch{return null}}function yE(x,A,e,r){let t=P0.readFileSync(r.fsPath),i=pE(t),n=hE.preCompileDloFile(x,A,e,r,i);return{buffer:Mo.encode(n.data,"cp1252"),diagnostics:n.diagnostics}}function Ee(x){return x.fsPath.replace(/\\/g,"/")}function ht(x,A){let e=Ee(x);return Ee(A).replace(e,"")}var Xo=Wo(),gt=Xo.createPawnCC,Yo=Xo.createPawnDbg;var Or=class{constructor(A,e,r){this.cwd=A;this.fs=e;this.logger=r;this.dloCC=null}cwd;fs;logger;dloCC;stdout=[];stderr=[];async initDloCC(A=!1){this.stdout.length=0,this.stderr.length=0,this.dloCC=await gt({noExitRuntime:A,print:n=>{let F=Ni(this.cwd,n);this.logger.log(F?F.message:n),this.stdout.push(n)},printErr:n=>{let F=Ni(this.cwd,n);n.includes(": warning")?this.logger.warn(F?F.message:n):this.logger.error(F?F.message:n),this.stderr.push(n),this.stdout.push(n)}});let e=Ee(this.cwd),[r]=e.split("/"),t=this.dloCC.FS,i=await K.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=qi(t,this.cwd,i,this.logger),t.mkdir(r),t.mount(t.filesystems.NODEFS_TS,{root:"/"},r),t.chdir(Ee(this.cwd))}async compile(A,e){let r=await K.read(A,e);if(!await K.isApmPartEnabled(A,e,u0.Part.dlo,r))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await e.mkdir(VA.Utils.joinPath(A,"dist/dlo"));let t=VA.Utils.joinPath(A,r.dlo?.mainFile||t0.filePaths.dlo.mainDLO),i=[],n=VA.Utils.joinPath(A,t0.filePaths.studio.auto.dlo.cfg),F=ht(A,n);i.push(`-T.${F}`);let v=0;try{let E=`.${ht(A,t)}`;v=await this.dloCC.callMain([E,...i])}catch(E){this.logger.error(E)}return{code:v,stdout:this.stdout,stderr:this.stderr,diagnostics:[...Oo(),...Ii(A,this.stderr,t)]}}async getDloSymbols(A,e){let r=e.map(u=>{let D=u.substring(0,2);return["-D","-e","-i","-o","-p","-r","-T"].includes(D)?`${D}.${u.substring(2)}`:u}),t=!!process.env.DLO_PROFILE,i=t?performance.now():0,{compiler:n,print:F}=await this.getSymbolCompiler(),v=t?performance.now()-i:0,E=t?performance.now():0;try{if(await n.callMain(["."+A,...r,"-R"]))return null}catch(u){if(u.stack?.startsWith("RuntimeError"))return null;throw u}finally{if(t){let u=performance.now()-E;this.logger.log(`[DLO_PROFILE] instantiate: ${v.toFixed(1)}ms, callMain: ${u.toFixed(1)}ms`),Go(this.logger)}}return[...F.stdout,...F.stderr]}async getSymbolCompiler(){let A={stdout:[],stderr:[]},e=await gt({noExitRuntime:!1,print:F=>{A.stdout.push(F)},printErr:F=>{A.stderr.push(F)}}),r=Ee(this.cwd),[t]=r.split("/"),i=e.FS,n=await K.read(this.cwd,this.fs);return i.filesystems.NODEFS_TS=qi(i,this.cwd,n,this.logger),i.mkdir(t),i.mount(i.filesystems.NODEFS_TS,{root:"/"},t),{compiler:e,print:A}}};function Ii(x,A,e){let r=[],t=A.filter(i=>!!i.trim());for(let i of t){if((i.includes("Assertion failed:")||i.includes("Compilation aborted."))&&e){r.push({file:e,level:"error",line:0,message:i});continue}let n=Ni(x,i);n&&r.push({file:VA.URI.parse(`file:///${n?.posixPath}`),level:n.level,line:Number(n.lineNumber)-1,message:n.msg})}return r}function Ni(x,A){let e=A.indexOf(" : "),r=A.indexOf(": ",e+3),t=A.substring(0,e).trim(),i=A.substring(e+3,r).trim(),n=A.substring(r+2).trim();if(!t||!i||!n)return null;let[F,v]=t.split(/[()(-)]/),E=i.split(" "),u=E[E.length-2],m=VA.Utils.joinPath(x,F).fsPath.replace(/\\/g,"/");m.startsWith("/")&&(m=m.substring(1));let w=A.replace(F,m);return{level:u,msg:n,posixPath:m,lineNumber:v,message:w}}async function Qo(x,A,e){let r=["-M","-v2"],t=VA.Utils.joinPath(x,t0.filePaths.studio.auto.dlo.defaultInc);r.push(`-p.${ht(x,t)}`);let i=await ex.getApmPartDependencies(x,A,u0.Part.dlo);for(let F of i){let v=VA.Utils.dirname(F.path);r.push(`-i.${ht(x,v)}`)}let n=e.dlo;return n&&r.push(...n.compileOptions),r.push("-o./dist/dlo/main.amx"),{path:VA.Utils.joinPath(x,t0.filePaths.studio.auto.dlo.cfg),data:r.join(`
2324
+ `)}}var cn;(v=>{v.createPawnCC=gt,v.createPawnDbg=Yo,v.FileSequencer=Mr,v.PreCompiler=Lr,v.Compiler=Or,v.uriToMemFs=Ee,v.parseCompilerWarningsAndErrors=Ii;async function F(E,u,D){let m=await K.read(E,u),w=await Qo(E,u,m);await u.writeFile(w.path,w.data),D.log("Generated",t0.filePaths.studio.auto.dlo.cfg)}v.exportDloConfig=F})(cn||={});var xF=require("vscode-uri");var Li=require("minimatch");var AF=require("@gera2ld/tarjs"),GE=j0.convertBlobToString,UE=require("pako"),eF=".studioignore",rF=[".vscodeignore","package-lock.json","npm-debug.log","yarn.lock","yarn-error.log","npm-shrinkwrap.json",".editorconfig",".npmrc",".yarnrc",".gitattributes","*.todo","tslint.yaml",".eslintrc*",".babelrc*",".prettierrc*",".cz-config.js",".commitlintrc*","webpack.config.js","ISSUE_TEMPLATE.md","CONTRIBUTING.md","PULL_REQUEST_TEMPLATE.md","CODE_OF_CONDUCT.md",".github",".travis.yml","appveyor.yml","**/.git","**/.git/**","**/*.vsix","**/.DS_Store","**/*.vsixmanifest","**/.vscode-test/**","**/.vscode-test-web/**"];rF.push("**/.studio/**","**/node_modules/**",eF,"dist/defines.app.ts");var Zo={dot:!0},Gr;(r=>{async function x(t,i){let n=new AF.TarWriter;(await A(t,i)).forEach(E=>{n.addFile(E.name,E.data)});let v=await n.write();return UE.gzip(await v.arrayBuffer())}r.createArchive=x;async function A(t,i){let n=[],{ignore:F,negate:v}=await HE(t,i),u=(await i.findFiles(t,"**/*")).filter(({path:D})=>{let m=D.slice(t.path.length+1);return!F.some(w=>(0,Li.minimatch)(m,w,Zo))||v.some(w=>(0,Li.minimatch)(m,w.slice(1),Zo))});for(let D of u){let m=D.path.slice(t.path.length+1),[w,j]=await Promise.all([i.stat(D),i.readFile(D)]);w&&n.push({name:m,data:j,modifyTime:new Date(w.mtime)})}return n}r.getFilesForArchive=A;async function e(t,i,n,F=vx.ENV.production){let{publisher:v,name:E,version:u}=i,D=await mx.readFilesFromTarGz(n,["CHANGELOG.md","README.md","studio.json"]),m={"CHANGELOG.md":await Mi(D["CHANGELOG.md"]),"README.md":await Mi(D["README.md"]),"studio.json":await Mi(D["studio.json"]),"library.tar.gz":n};return await Fx.publishLibraryVersion(t,v,E,u,m,F)}r.publishPackage=e})(Gr||={});async function HE(x,A){let e=["!studio.json","!README.md"],t=(await JE(x,A)).split(/[\n\r]/).map(E=>E.trim()).filter(E=>!!E).filter(E=>!/^\s*#/.test(E)),i=[...t,...t.filter(E=>!/(^|\/)[^/]*\*[^/]*$/.test(E)).map(E=>/\/$/.test(E)?`${E}**`:`${E}/**`)],n=[...rF,...i,...e],[F,v]=n.reduce((E,u)=>/^\s*!/.test(u)?[E[0],[...E[1],u]]:[[...E[0],u],E[1]],[[],[]]);return{ignore:F,negate:v}}async function JE(x,A){let e=xF.Utils.joinPath(x,eF);if(await A.stat(e)){let t=await A.readFile(e);return GE(t)}else return""}async function Mi(x){return new Uint8Array(await x.arrayBuffer())}var WA=require("vscode-uri");var qe=require("yaml");var KE=j0.convertBlobToString,fn=j0.yamlRangeToLineInformation,En;(n=>{let x;(u=>(u.static="static",u.dynamic="dynamic",u.appDynamic="app-dynamic"))(x=n.Type||={});let A;(D=>(D.crcStamp="crc_stamp",D.stampOnly="stamp_only",D.onlyDown="only_down",D.onlyUp="only_up"))(A=n.SyncLogic||={});let e;(u=>(u.down="down",u.up="up",u.off="off"))(e=n.Force||={});async function r(F,v,E){let{properties:u,diagnostics:D,libraryFiles:m}=await t(F,v),w=WA.Utils.joinPath(F,t0.filePaths.dist.dfilesPath);await v.stat(w)&&await v.rm(w);for(let[j,S]of Object.entries(u))await VE(F,v,j,S,m);return Object.keys(u).length&&(E.done(`${Object.keys(u).length} dfiles processed.`),await v.writeFile(WA.Utils.joinPath(F,t0.filePaths.dist.dfilesProperties),JSON.stringify(u,null," "))),D}n.process=r;async function t(F,v){let E=[],u={},D=await ex.getApmPartDependencies(F,v,u0.Part.dfiles);for(let j of D){let{properties:S,diagnostics:P}=await i(v,j.path,j.name);Object.assign(u,S),E.push(...P)}let{properties:m,diagnostics:w}=await i(v,WA.Utils.joinPath(F,t0.filePaths.dfiles.mainDFILES),null);return Object.assign(u,m),E.push(...w),{properties:u,diagnostics:E,libraryFiles:D}}n.parseDfile=t;async function i(F,v,E){let u=[],D={};if(!await F.stat(v))return{properties:D,diagnostics:u};let m=await F.readFile(v),w=KE(m),j=new qe.LineCounter,P=(0,qe.parseDocument)(w,{lineCounter:j}).contents||new qe.YAMLMap;for(let N of P.items){let R=N.key.value,O=(0,qe.isMap)(N.value)?N.value:null,e0=fn(j,N.key.range),I=O?O.has("syncMode"):!1,k=I?O.get("syncMode"):"crc_stamp";if(I){let J=Object.values(n.SyncLogic);if(!J.includes(k)){let a0=O.items.find(Q=>Q.key.value==="syncMode"),i0=fn(j,a0.key.range);u.push({file:v,code:"",message:`Property syncMode does not match any of "${J.join(", ")}"`,line:i0.line,startCharacter:i0.startCharacter,endCharacter:i0.endCharacter,level:"error"})}}else u.push({file:v,code:"",message:'Property "syncMode" missing',line:e0.line,startCharacter:e0.startCharacter,endCharacter:e0.endCharacter,level:"error"});let L=O?O.has("type"):!1,Z=L?O.get("type"):"static";if(L){let J=Object.values(n.Type);if(!J.includes(Z)){let a0=O.items.find(Q=>Q.key.value==="type"),i0=fn(j,a0.key.range);u.push({file:v,code:"",message:`Property type does not match any of "${J.join(", ")}"`,line:i0.line,startCharacter:i0.startCharacter,endCharacter:i0.endCharacter,level:"error"})}}R.match(/^[a-z0-9._-]*$/)||u.push({file:v,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:e0.line,startCharacter:e0.startCharacter,endCharacter:e0.endCharacter,level:"error"});let W=WA.Utils.joinPath(WA.Utils.dirname(v),R),U=await zE(F,W);if(U)D[R]={crc:U.crc,force:"off",readable:!1,size:U.size,stamp:U.stamp,sync_logic:k,type:Z,library:E};else{let J=fn(j,N.key.range);u.push({file:v,code:"",message:`Could not find file "${R}"`,line:J.line,startCharacter:J.startCharacter,endCharacter:J.endCharacter,level:"error"})}}return{properties:D,diagnostics:u}}n.parseYamlFile=i})(En||={});async function zE(x,A){let e=await x.stat(A);if(!e)return null;let r=await x.readFile(A);return{size:e.size,stamp:Math.trunc(e.ctime),crc:j0.generateCRC32ForFileContent(r)}}async function VE(x,A,e,r,t){let n=r.library!==null?WA.Utils.dirname(t.find(E=>E.name===r.library).path):WA.Utils.joinPath(x,t0.filePaths.dfiles.path),F=WA.Utils.joinPath(x,t0.filePaths.dist.dfilesPath,e),v=WA.Utils.joinPath(n,e);await A.copy(v,F)}var tF=U0(require("dotenv")),nF=require("vscode-uri");var WE=".env.local",iF;(A=>{async function x(e,r){let t=nF.Utils.joinPath(e,WE);if(await r.stat(t)){let i=await r.readFile(t);return tF.default.parse(j0.convertBlobToString(i))}return{}}A.read=x})(iF||={});var Ur=U0(require("chalk")),XA;(r=>{let x;(u=>(u[u.log=0]="log",u[u.done=1]="done",u[u.info=2]="info",u[u.warning=3]="warning",u[u.error=4]="error",u[u.debug=5]="debug"))(x=r.LogMessageType||={}),r.LOG_PREFIX={1:Ur.default.bgGreen.black(" DONE "),0:"",2:Ur.default.bgBlueBright.black(" INFO "),3:Ur.default.bgYellow.black(" WARNING "),4:Ur.default.bgRed.black(" ERROR "),5:Ur.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(i=console){this._logHandler=i}_log(i,n,...F){this._silent&&i!==4||(F=[r.LOG_PREFIX[i],n,...F],this._logHandler.log(...F))}set silent(i){this._silent=i}set output(i){this._logHandler=i}log(i,...n){this._log(0,i,...n)}debug(i,...n){this._debugEnabled&&this._log(5,i,...n)}set debugEnabled(i){this._debugEnabled=i}error(i,...n){this._log(4,i,...n)}info(i,...n){this._log(2,i,...n)}warn(i,...n){this._log(3,i,...n)}done(i,...n){this._log(1,i,...n)}}r.Logger=e})(XA||={});var fa=require("node:child_process"),ll=require("node:fs"),cl=U0(require("node:path")),Qr=require("vscode-uri");var Rv=require("node:events"),xa=require("vscode-uri"),rx=U0(Le());var Xx=U0(Le());var Ys=U0(Le()),hv=2e3;function dD(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function uD(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var Gn=class{interface="usb";#A=new Set;#e;#r;#i;#t;#x=!1;#n;constructor(A,e){this.#e=A;let t=A.configuration.interfaces[e].alternate.endpoints;this.#r=t.find(i=>i.direction==="in"),this.#i=t.find(i=>i.direction==="out"),this.#t=uD(A,e)}async write(A){await this.#e.transferOut(this.#i.endpointNumber,A)}onData(A){let e={cb:A};return this.#A.add(e),this.#x||this.#s(),()=>{this.#A.delete(e)}}#s(){this.#x=!0;let A=this.#t;if(!A){this.#n=this.#a();return}A.on("data",e=>{if(e.byteLength===0)return;let r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let t of this.#A)t.cb(r)}),A.on("error",()=>{}),A.startPoll(1,this.#r.packetSize)}async#a(){for(;this.#x&&this.#e.opened;)try{let A=await this.#e.transferIn(this.#r.endpointNumber,this.#r.packetSize);if(A.data&&A.data.byteLength>0)for(let e of this.#A)e.cb(A.data.buffer)}catch{break}}async stop(){if(!this.#x)return;this.#x=!1;let A=this.#t;A?.pollActive?await new Promise(e=>{let r=setTimeout(e,hv);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,dD(hv)])}},Un=class extends Gn{constructor(A){super(A,Ys.USB_CONFIGURATION.utoInterface)}},Hn=class extends Gn{constructor(A){super(A,Ys.USB_CONFIGURATION.debugInterface)}};var DD=9540,Qs;function jv(){if(!Qs){let{WebUSB:x}=require("usb");Qs=new x({allowedDevices:[{vendorId:DD}]})}return Qs}async function pD(){return(await jv().getDevices()).map(A=>({productName:A.productName,serialNumber:A.serialNumber||A.productName?.split(" ").pop(),vendorId:A.vendorId,productId:A.productId}))}async function gv(x){let A=await pD();if(A.length===0){x.info("No USB devices found.");return}x.info("Available USB devices:"),A.forEach((e,r)=>{let t=e.productName||`Unknown Device (VID: 0x${e.vendorId.toString(16)}, PID: 0x${e.productId.toString(16)})`,i=e.serialNumber?` [${e.serialNumber}]`:"";x.log(` ${r+1}. ${t}${i}`)})}async function Zs(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await jv().getDevices();for(let r of e)if((r.serialNumber||r.productName?.split(" ").pop())?.toLowerCase()===x.toLowerCase())return A.info(`Device found: ${r.productName}`),r;return null}function Kn(x){return`Device not found with serial number: ${x}`}var bD=500;function mD(x){if(x instanceof Jn)return!0;let A=x instanceof Error?x.message:String(x);return/LIBUSB_ERROR_(ACCESS|BUSY|NO_DEVICE|NOT_FOUND|IO)/.test(A)||A.startsWith(Kn(""))}var Jn=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function hD(x,A){try{return{uto:new Un(x),debug:A?new Hn(x):void 0}}catch(e){throw new Jn("Device descriptors not ready",e)}}function jD(x){return async(A,e=!0)=>{let r=await Zs(A,x);if(!r)throw new Error(Kn(A));try{await r.open(),await r.selectConfiguration(Xx.USB_CONFIGURATION.configurationNumber),await r.claimInterface(Xx.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(Xx.USB_CONFIGURATION.debugInterface);let{uto:t,debug:i}=hD(r,e);return{uto:t,debug:i,async close(){await t.stop(),await i?.stop(),r.opened&&(await r.releaseInterface(Xx.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(Xx.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function gD(x){return new Promise(A=>setTimeout(A,x))}async function yD(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(i){if(!mD(i)||Date.now()>=t)throw i;await gD(bD)}}function lr(x){return{debug:(A,...e)=>x.debug(A,...e),info:(A,...e)=>x.debug(A,...e),warn:(A,...e)=>x.warn(A,...e),error:(A,...e)=>x.error(A,...e)}}async function zn(x,A={}){let e=A.logger??new XA.Logger,r=A.transportFactory??jD(e),t=A.needDebug!==!1,i=await yD(r,x,t,A.retryMs??0),n=t?i.debug:void 0,F=lr(e),v=n?new Xx.AtCommandHandler(n,F):void 0,E=new Xx.UtoMaster(i.uto,F);return{utoMaster:E,atHandler:v,transports:i,serial:x,close:async()=>{try{await E.dispose(v)}catch{}v?.dispose(),await i.close()}}}async function Xr(x,A,e,r,t=!1,i=0,n){if(!await e.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let v=await e.readFile(A),E;try{E=await zn(x,{logger:r,debug:t,needDebug:!1,retryMs:i,transportFactory:n});let{utoMaster:u}=E;if(t){u.on("mdnCom",m=>{r.debug("mdnCom",m)}),u.on("mdnComError",m=>{r.debug("mdnComError",m)});let D=-1;u.on("installing",m=>{m&&m!==D&&(D=m,r.info(`Upload progress: ${m}%`))})}return await u.init(),await u.requestDeviceInfo(),r.info("Device connected, starting upload..."),await u.sendFile(Xx.UtoFileType.pawn,new Uint8Array(v.buffer,v.byteOffset,v.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(u){let D=u instanceof Error?u.message:String(u);return{success:!1,message:D===Kn(x)?D:`Upload failed: ${D}`}}finally{await E?.close()}}async function yv(x,A,e=!1){let r,t;try{r=await zn(x,{logger:A,debug:e});let{atHandler:i,transports:n}=r;if(!i)throw new Error("The debug interface is required for a sync");t=new Xx.SyncManager(n.uto,i,A),t.on("syncError",v=>A.error(`Sync error: ${v.message}`)),e&&(t.on("syncStart",({mode:v})=>A.log(`Sync mode: ${v}`)),t.on("syncPhase",({phase:v})=>A.log(`Sync phase: ${v}`)),t.on("syncComplete",v=>A.info(`Sync complete (mode: ${v.mode}, messages: ${v.serverMessageCount})`))),A.info("Syncing device...");let F=new AbortController;return await t.sync({serialNumber:x,signal:F.signal}),{success:!0,message:"Sync completed successfully"}}catch(i){let n=i instanceof Error?i.message:String(i);return{success:!1,message:n===Kn(x)?n:`Sync failed: ${n}`}}finally{t?.dispose(),await r?.close()}}var kv=require("vscode-uri"),Vn=U0(Le());var Wn=class x{constructor(A,e,r,t,i){this.fs=r;this.persist=t;this.logger=i;this.storage=A,this.file=e}fs;persist;logger;storage;file;lastSerialized=null;static async create(A,e,r={}){let t=kv.Utils.joinPath(A,t0.filePaths.studio.dev.mirror),i=new Vn.MemoryStorage;if(r.persist&&await e.stat(t))try{let n=new TextDecoder().decode(await e.readFile(t));i=Vn.MemoryStorage.fromJSON(JSON.parse(n))}catch(n){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${n instanceof Error?n.message:n}`),i=new Vn.MemoryStorage}return new x(i,t,e,r.persist===!0,r.logger)}async save(){if(!this.persist)return;let A=JSON.stringify(this.storage.toJSON());if(A!==this.lastSerialized)try{await this.fs.writeFile(this.file,A),this.lastSerialized=A}catch(e){this.logger?.warn(`Could not write dev mirror snapshot: ${e instanceof Error?e.message:e}`)}}};var Sv=require("node:events"),Xn=require("node:fs/promises"),$v=require("node:path"),Tv=U0(require("iconv-lite")),cr=U0(Le());var kD=5e3,wv=500;function _v(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function wD(x){let A=x.level===cr.DebugLogLevel.info?"":`${cr.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function _D(x){if(x.length===0)return!1;let A=0,e=0;for(let r of x){e++;let t=r.codePointAt(0)??0;(t===9||t===10||t===13||t>=32&&t!==127)&&A++}return A/e>.8}var Yr=class extends Sv.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??kD,this.logFile=A.logFile,this.logger=A.logger}push(A,e,r){let t={seq:++this.seq,ts:Date.now(),source:A,text:e};return r&&(t.raw=Buffer.from(r).toString("base64")),this.buffer.push(t),this.buffer.length>this.capacity&&this.buffer.splice(0,this.buffer.length-this.capacity),this.emit("record",t),this.appendToFile(t),t}appendToFile(A){let e=this.logFile;e&&(this.logDirReady??=(0,Xn.mkdir)((0,$v.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,Xn.appendFile)(e,`${JSON.stringify(A)}
2325
+ `,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=wv){let r=e>0?e:wv;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==cr.UtoTag.LOG||!r.data)return;let t=new Uint8Array(r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength));this.pushDecoded("rm2mlog",t)};A.on("utoFrame",e),this.disposers.push(()=>A.off("utoFrame",e))}attachAtHandler(A){let e=new cr.DebugMaster(A,lr(this.logger??new XA.Logger));e.on("message",r=>{let t=wD(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[_v(Tv.default.decode(Buffer.from(e),"win1252")),_v(Buffer.from(e).toString("utf8"))].find(_D);if(t){this.push(A,t);return}let i=Buffer.from(e.subarray(0,32)).toString("hex");this.push(A,`<${e.length} bytes> ${i}${e.length>32?"\u2026":""}`,e)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var qv=require("node:events"),wA=U0(Le()),SD=1e3,$D=1e4,TD=200,Pv=new Set([wA.UtoTag.HISTDATA_RAW,wA.UtoTag.LOG,wA.UtoTag.ALERTS]),Yn=class extends qv.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(A){super(),this.opts=A;for(let e of A.model.containers){let r=(0,wA.resolveTagForContainer)(e);r!==null&&this.containerByTag.set(r,e)}}get utoMaster(){let A=this.opts.utoMaster();if(!A)throw new Error("Device not connected");return A}async refreshTagMap(){let A=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),A&&A.utos.forEach((e,r)=>{this.tagMap.set(e.wTag,{index:r,sTag:e.sTag,historic:e.flags.historic}),(this.containerByTag.has(e.wTag)||Pv.has(e.wTag))&&this.relevantTags.add(e.wTag)})}start(){this.opts.intervalMs<=0||(this.stopped=!1,this.schedule(this.opts.intervalMs))}stop(){this.stopped=!0,this.clearTimer()}clearTimer(){this.timer&&(clearTimeout(this.timer),this.timer=void 0)}pause(){this.paused=!0}resume(){this.paused=!1}status(){return{intervalMs:this.opts.intervalMs,lastTick:this.lastTickAt,lastChange:this.lastChangeAt,errors:this.errorCount,paused:this.paused}}deviceStamp(A){return this.deviceStamps.get(A)??null}knowsTag(A){return this.tagMap.has(A)}async refreshStamps(){try{let A=await this.utoMaster.requestStamps();if(!A)return;for(let[e,r]of this.tagMap)r.index<A.stamps.length&&this.deviceStamps.set(e,A.stamps[r.index])}catch(A){this.opts.logger?.warn(`Stamp refresh failed: ${A instanceof Error?A.message:String(A)}`)}}schedule(A){this.stopped||(this.clearTimer(),this.timer=setTimeout(()=>{this.tick().then(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs)).catch(()=>this.schedule(this.backoffMs>0?this.backoffMs:this.opts.intervalMs))},A),this.timer.unref?.())}async tick(){if(this.stopped||this.paused||this.opts.session.busy||this.inFlight)return[];this.inFlight=!0;try{let A=await this.utoMaster.requestStamps();return this.lastTickAt=Date.now(),this.backoffMs=0,A?this.pullAdvancedTags(A.stamps):[]}catch(A){return this.errorCount++,this.backoffMs=Math.min(this.backoffMs>0?this.backoffMs*2:SD,$D),this.opts.logger?.warn(`Stamp poll failed: ${A instanceof Error?A.message:String(A)}`),this.emit("error",A instanceof Error?A:new Error(String(A))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(A){let e=[];for(let r of this.relevantTags){let t=await this.pullIfAdvanced(r,A);t&&e.push(t)}if(e.length>0){this.lastChangeAt=Date.now();for(let r of e)this.emit("container-changed",r)}return e}async pullIfAdvanced(A,e){let r=this.tagMap.get(A);if(!r||r.index>=e.length)return null;let t=e[r.index],i=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let n=await this.mirrorStamp(A);return(i===void 0?t>n:t!==i)?this.pull(A,r,n,t):null}async pullTags(A){let e=[];for(let r of A){let t=this.tagMap.get(r)??{index:-1,sTag:`0x${r.toString(16)}`,historic:!1},i=await this.mirrorStamp(r),n=await this.pull(r,t,t.historic?i:0,this.deviceStamp(r)??0);n&&(e.push(r),this.emit("container-changed",n))}return e}async mirrorStamp(A){let e=await this.opts.storage.getLatestStampForTag(A);return e?(0,wA.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||Pv.has(A)?this.pullHistoric(A,r,t):this.pullSingle(A,t)}async pullSingle(A,e){let r=await this.utoMaster.requestUto(A,0);if(!r)return null;let t=await this.opts.storage.getRowForTag(A);return await this.opts.storage.replaceUtoRow({tag:A,stamp:(0,wA.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?PD(r.data):null}),this.describeChange(A,r.stamp||e)}async pullHistoric(A,e,r){let t=await this.opts.storage.getRowForTag(A),i=0,n=e,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>(n=Math.max(n,u.stamp40),{tag:A,stamp:(0,wA.stamp40ToDbHex)(u.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:u.data}));await this.opts.storage.insertHistoricRows(E),i+=E.length};return await this.utoMaster.requestHistoricUtos(A,e,void 0,void 0,TD,F),i===0?null:this.describeChange(A,n||r)}async describeChange(A,e){let r=this.containerByTag.get(A);if(!r)return{tag:A,container:null,stamp:e};let t=null;try{t=await this.opts.mapper.readContainer(r.name)}catch{}return{tag:A,container:r.name,alias:r.alias,stamp:e,decoded:t}}};function PD(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var Q0=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},qD=2e3,ND=3e3,ID=3e4,MD=1e4,LD=3e4,RD=1e3,Aa="dev",Nv=`/api/1/sites/${Aa}`,Iv="local",Qn="Device not connected",Mv="device_id",ea=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(A,e){this.depth++;let r=this.tail,t=()=>{};this.tail=new Promise(i=>{t=i});try{await OD(r,e)}catch(i){throw this.depth--,r.then(t,t),i}try{return await A()}finally{this.depth--,t()}}};function OD(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new Q0(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var Re=class extends Rv.EventEmitter{logStream;opts;logger;timeSource;device;mirror;model;mapper;apiHandler;poller;stateManager;localData;offlineSync;buildState={running:!1,ok:null,at:null};lastSyncAt=null;firmwareVersion=null;mirrorSaveTimer;stopped=!1;lock=new ea;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??rx.systemTimeSource,this.logStream=new Yr({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",e=>this.emit("log",e))}get serial(){return this.opts.serial}get connected(){return this.device!==void 0}get busy(){return this.lock.busy}get ddeModel(){if(!this.model)throw new Q0("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new Q0("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let A=await this.build();if(A.ok===!1)throw new Q0(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await Wn.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new rx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new Q0(A.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let A=xa.Utils.joinPath(this.opts.cwd,t0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new Q0(`No DDE model at ${t0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,rx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await zn(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let i=t instanceof Error?t.message:String(t);throw new Q0(`Could not open device ${this.opts.serial}: ${i}`,/not found/i.test(i)?2:3)}let{utoMaster:A,atHandler:e}=this.device;if(!e)throw new Q0(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(A),this.logStream.attachAtHandler(e),A.on("utoFrame",t=>this.emit("uto",t));try{await A.init();let t=await A.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null,await this.storage.getMetadataValue(Mv)===null&&await this.storage.setMetadataValue(Mv,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new Q0(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=lr(this.logger);this.stateManager=new rx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new rx.LocalDataManager(e,r),this.offlineSync=new rx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new Yn({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??qD,logger:this.logger}),this.poller.on("container-changed",A=>{this.emit("container-changed",A),this.logStream.push("uto",`${A.alias??A.container??this.tagLabel(A.tag)} changed`)}),this.poller.on("error",A=>this.emit("error",A)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(A){return`0x${A.toString(16)}`}get utoMaster(){if(!this.device)throw new Q0(Qn,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new Q0(Qn,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,i)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(rx.UtoCommand.DATA,r,t,i))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:Aa,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,rx.createSiteInfoFromDde)(this.ddeModel,{siteUid:Aa,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:Iv}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,rx.createLocalApiHandler)(e)}buildBlueprint(){let A={};for(let e of this.ddeModel.containers){let r={};for(let t of e.fields){let i=t.alias??t.name;r[i.toLowerCase()]={alias:i}}A[e.name.toLowerCase()]=r}return A}async handleApi(A){if(!this.apiHandler)throw new Q0("Session not started",7);let e=this.writtenTag(A),r=await this.apiHandler(A);if(e===null||r.status>=400)return r;let t=await this.mirrorStamp(e);return await this.awaitDeviceStamp(e,t)||(r.headers={...r.headers,"x-mt-mirror":"stale"}),r}writtenTag(A){let e=A.method.toUpperCase();if(e!=="PUT"&&e!=="POST")return null;let[r,t=""]=A.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let i=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(r);if(!i)return null;let n=(0,rx.resolveTagInModel)(this.ddeModel,decodeURIComponent(i[1]));return n===null||!(0,rx.isDevicePushableTag)(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??ND,t=this.poller;if(r<=0||!t)return!0;let i=Date.now()+r;for(;;){let F=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(F!==null&&F>=e)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=i)return!1;await Lv(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await K.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await mx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??vx.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:A}}catch(A){this.buildState={running:!1,ok:!1,at:Date.now(),message:A instanceof Error?A.message:String(A),diagnostics:A instanceof mx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=xa.Utils.joinPath(this.opts.cwd,A??t0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??Xr)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,MD,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+LD;for(let e=0;;e++)try{await this.connect(),this.stopped&&await this.closeDevice();return}catch(r){if(await this.closeDevice(),this.stopped||Date.now()>=A){this.reportReconnectFailure(r);return}e===0&&this.logger.info(`Waiting for device ${this.opts.serial} to come back after the flash...`),await Lv(RD)}}reportReconnectFailure(A){let e=A instanceof Error?A.message:String(A);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${e}`),this.stopped||this.emit("error",A instanceof Error?A:new Error(e))}async sync(A){let e=await this.withLink(async()=>{this.poller?.pause();try{return A&&A.length>0?await this.poller.pullTags(A):(await this.offlineSync.sync()).tags.filter(i=>i.outcome==="upload").map(i=>i.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let r={tags:e,at:this.lastSyncAt};return this.emit("sync",r),r}async at(A){return this.withLink(async()=>(this.logStream.push("at",`> ${A}`),this.atHandler.sendRaw(A)))}async state(){let A=this.stateManager;if(!A)throw new Q0(Qn,3);return A.getLastState()??await A.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let A=this.localData;if(!A)throw new Q0(Qn,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:Iv,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,rx.resolveTagInModel)(this.ddeModel,A.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}configContainers(){return this.ddeModel.containers.filter(A=>A.kind==="config")}async configs(){let A={},e=[];for(let r of this.configContainers()){let t=r.alias??r.name;e.push(t);let i=await this.handleApi({path:`${Nv}/containers/${encodeURIComponent(r.name)}`,method:"GET"});A[t]=i.status<400&&i.body?JSON.parse(i.body):{}}return{configs:A,order:e}}async applyConfigs(A){let e={};for(let[r,t]of Object.entries(A)){let i=this.ddeModel.byNameOrAlias(r);if(!i||i.kind!=="config"){e[r]={ok:!1,err:`E_NOT_FOUND ?ddeMapper.unknown-container."${r}"`};continue}let n=await this.handleApi({path:`${Nv}/containers/${encodeURIComponent(i.name)}`,method:"PUT",body:JSON.stringify(t)});e[r]=n.status>=400?{ok:!1,err:GD(n.body)}:n.headers?.["x-mt-mirror"]==="stale"?{ok:!0,stale:!0}:{ok:!0}}return e}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(A){let e=await this.storage.getLatestStampForTag(A);return e?(0,rx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??ID)}async closeDevice(){let A=this.device;this.device=void 0,this.stateManager?.dispose(),this.stateManager=void 0,await this.localData?.stopPolling(),this.localData?.dispose(),this.localData=void 0,this.offlineSync=void 0,await A?.close()}async stop(){if(!this.stopped){this.stopped=!0,this.mirrorSaveTimer&&clearInterval(this.mirrorSaveTimer),this.poller?.stop();try{await this.mirror?.save(),await this.logStream.dispose()}finally{await this.closeDevice(),this.removeAllListeners()}}}};function Lv(x){return new Promise(A=>setTimeout(A,x))}function GD(x){try{return JSON.parse(x).err??x}catch{return x}}var Kv=U0(require("node:http")),zv=require("vscode-uri"),Vv=U0(require("yaml"));var Wv=["log","state","sync","build","uto","container-changed","error"],UD=15e3,Ov=4*1024*1024,HD="127.0.0.1",JD=8765,Xv="no-store",Yv="E_NOT_FOUND",Gv="E_BAD_REQUEST",KD=2e3,zD=20;function fr(x,A){return JSON.stringify({err:`${x} ${A}`})}function xe(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":Xv,...r}),x.end(e)}function VD(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function WD(x,A){if(!(VD(A)||x.token)){if(!x.allowRemote)throw new Error(`Refusing to bind to ${A} without --bearer: the device API would be reachable from the network. Pass --bearer <token>, or --allow-remote to bind unauthenticated anyway.`);x.logger.warn(`Serving the unauthenticated device API on ${A} \u2014 anyone who can reach this port can write to and flash the device.`)}}function XD(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function YD(x,A){let e=x.headers.origin;typeof e=="string"&&XD(e)&&(A.setHeader("access-control-allow-origin",e),A.setHeader("access-control-allow-credentials","true"),A.setHeader("vary","origin")),A.setHeader("access-control-allow-methods","GET,POST,PUT,DELETE,OPTIONS"),A.setHeader("access-control-allow-headers","authorization,content-type"),A.setHeader("access-control-expose-headers","x-mt-mirror, x-mt-backfill"),A.setHeader("access-control-max-age","600")}function QD(x,A,e){if(!A)return!0;let r=x.headers.authorization,t=typeof r=="string"?r.replace(/^Bearer\s+/i,"").trim():(e??"").trim();if(t==="")return!1;let i=process.env.MYDATANET_TOKEN;return t===A||i!==void 0&&i!==""&&t===i}var Oe=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function Qv(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>Ov)throw x.pause(),new Oe(413,"E_TOO_LARGE",`request body exceeds ${Ov} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function Zv(x){return x!=="GET"&&x!=="HEAD"}function Uv(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new Oe(400,Gv,"malformed JSON body")}if(typeof A!="object"||A===null)throw new Oe(400,Gv,"JSON body must be an object");return A}function Hv(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function ZD(x,A){let e=x[A];if(!Array.isArray(e))return;let r=e.map(Number).filter(t=>Number.isFinite(t));return r.length>0?r:void 0}function Jv(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var ra=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
2326
2326
 
2327
- `),OD),this.heartbeat.unref?.()}broadcast(A,e){let r=`event: ${A}
2327
+ `),UD),this.heartbeat.unref?.()}broadcast(A,e){let r=`event: ${A}
2328
2328
  data: ${JSON.stringify(e)}
2329
2329
 
2330
- `;for(let t of this.clients)(!t.types||t.types.has(A))&&this.write(t,r)}writeAll(A){for(let e of this.clients)this.write(e,A)}write(A,e){if(A.res.writableEnded||A.res.destroyed){this.clients.delete(A);return}try{if(A.res.write(e)){A.stalled=0;return}}catch{this.clients.delete(A);return}A.stalled++,A.stalled>=JD&&(this.clients.delete(A),A.res.destroy())}subscribe(A,e,r){let t=new URLSearchParams(r).get("types"),s=t?new Set(t.split(",").map(F=>F.trim()).filter(F=>Kv.includes(F))):null;e.writeHead(200,{"content-type":"text/event-stream","cache-control":zv,connection:"keep-alive"}),e.write(`: connected
2330
+ `;for(let t of this.clients)(!t.types||t.types.has(A))&&this.write(t,r)}writeAll(A){for(let e of this.clients)this.write(e,A)}write(A,e){if(A.res.writableEnded||A.res.destroyed){this.clients.delete(A);return}try{if(A.res.write(e)){A.stalled=0;return}}catch{this.clients.delete(A);return}A.stalled++,A.stalled>=zD&&(this.clients.delete(A),A.res.destroy())}subscribe(A,e,r){let t=new URLSearchParams(r).get("types"),i=t?new Set(t.split(",").map(F=>F.trim()).filter(F=>Wv.includes(F))):null;e.writeHead(200,{"content-type":"text/event-stream","cache-control":Xv,connection:"keep-alive"}),e.write(`: connected
2331
2331
 
2332
- `);let n={res:e,types:s,stalled:0};this.clients.add(n),A.on("close",()=>this.clients.delete(n)),e.on("close",()=>this.clients.delete(n)),e.on("error",()=>this.clients.delete(n))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function QD(x,A,e,r){let t=A.method??"GET",s={path:r,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([F,v])=>[F,Array.isArray(v)?v.join(","):v??""])),body:Xv(t)?await Wv(A):null},n=await x.handleApi(s);ZA(e,n.status,n.body,n.headers)}async function ZD(x,A,e,r){let{session:t}=x;switch(A){case"GET /dev/status":return t.status();case"POST /dev/build":return t.build();case"POST /dev/flash":return t.flash(Ov(r,"file"));case"POST /dev/sync":return t.sync(YD(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(Gv(e,"since",0),Gv(e,"limit",500))};case"POST /dev/at":return x6(t,Ov(r,"cmd"));case"GET /dev/state":return t.state();case"GET /dev/localdata":return t.localDataSnapshot();case"POST /dev/localdata/measure":return t.measure();case"GET /dev/openapi.json":return n6(x);case"GET /dev/configs":return t.configs();default:return}}async function x6(x,A){if(!A)throw new Re(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function A6(x,A,e,r){let[t,s=""]=r.split("?"),n=A.method??"GET",F=Xv(n)?await Wv(A):"";try{if(n==="PUT"&&t==="/dev/configs"){let E=await x.session.applyConfigs(Rv(F)),u=Object.values(E).every(p=>p.ok);ZA(e,u?200:400,JSON.stringify({results:E}));return}let v=await ZD(x,`${n} ${t}`,new URLSearchParams(s),Rv(F));if(v===void 0){ZA(e,404,cr(Vv,`no route for ${n} ${t}`));return}ZA(e,200,JSON.stringify(v))}catch(v){if(v instanceof Re){ZA(e,v.status,cr(v.code,v.message));return}ZA(e,500,cr("E_DEV",v instanceof Error?v.message:String(v)))}}async function e6(x,A,e,r){if(WD(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",s=t.split("?")[1]??"",n=t==="/events"||t.startsWith("/events?"),F=n?new URLSearchParams(s).get("token")??void 0:void 0;if(!XD(e,x.token,F)){ZA(r,401,cr("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await QD(x.session,e,r,t):n?A.subscribe(e,r,s):t.startsWith("/dev/")?await A6(x,e,r,t):ZA(r,404,cr(Vv,`no route for ${t}`))}catch(v){if(v instanceof Re&&!r.headersSent){ZA(r,v.status,cr(v.code,v.message),{connection:"close"});return}throw v}}async function ra(x){let{session:A,logger:e}=x,r=x.host??GD;zD(x,r);let t=new ea;for(let F of Kv)A.on(F,v=>t.broadcast(F,v));let s=Uv.default.createServer((F,v)=>{e6(x,t,F,v).catch(E=>{let u=E instanceof Error?E.message:String(E);e.error(`Dev server error: ${u}`),v.headersSent||ZA(v,500,cr("E_INTERNAL",u))})});try{await new Promise((F,v)=>{s.once("error",v),s.listen(x.port??UD,r,()=>{s.off("error",v),F()})})}catch(F){throw t.close(),F}s.on("error",F=>e.error(`Dev server socket error: ${F.message}`));let n=s.address().port;return{url:`http://${r}:${n}`,port:n,async close(){t.close(),s.closeIdleConnections(),s.closeAllConnections(),await Promise.race([new Promise(F=>s.close(()=>F())),r6(HD)])}}}function r6(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var t6={"/dev/status":{get:{summary:"Session, model and poll status"}},"/dev/build":{post:{summary:"Build the project, returns diagnostics"}},"/dev/flash":{post:{summary:"Upload an AMX to the device"}},"/dev/sync":{post:{summary:"Pull selected/all tags into the mirror"}},"/dev/logs":{get:{summary:"Device log ring buffer (?since, ?limit)"}},"/dev/at":{post:{summary:"Run one AT command"}},"/dev/state":{get:{summary:"Last rm2m state"}},"/dev/localdata":{get:{summary:"Live local-data values"}},"/dev/localdata/measure":{post:{summary:"Trigger a measurement"}},"/dev/configs":{get:{summary:"Every config-class container, decoded (settings/config0..9/configA..C)"},put:{summary:"Apply partial writes to one or more config-class containers"}},"/dev/openapi.json":{get:{summary:"This document"}},"/events":{get:{summary:"SSE event stream (?types= filters)"}}};async function n6(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=Hv.Utils.joinPath(x.cwd,r0.filePaths.dist.ddeApi);if(await x.fs.stat(e))try{let r=new TextDecoder().decode(await x.fs.readFile(e)),t=Jv.default.parse(r);typeof t=="object"&&t!==null&&Object.assign(A,t)}catch(r){let t=r instanceof Error?r.message:String(r);x.logger.warn(`Could not parse ${r0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...t6},A}var Lt=require("node:fs"),Yv=require("node:path"),Qv=require("vscode-uri");var s6=300,i6=new Set([r0.fileNames.projectSettings,r0.filePaths.appIni]);function ta(x){return x instanceof Error?x.message:String(x)}function a6(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function o6(x){let A=[],e=r=>{A.push(r);for(let t of(0,Lt.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,Yv.join)(r,t.name))};try{e(x)}catch{}return A}function Zv(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??s6,s=[],n,F=!1,v=!1,E=async()=>{if(F){v=!0;return}F=!0;try{let w=await e.build();if(w.ok!==!0){r.error(`Rebuild failed: ${w.message??"see diagnostics"}`);return}if(x.flash!==!1){let j=await e.flash();if(!j.success){r.error(j.message);return}}await e.sync()}catch(w){r.error(`Watch cycle failed: ${w instanceof Error?w.message:String(w)}`)}finally{F=!1,v&&(v=!1,u())}};function u(){n&&clearTimeout(n),n=setTimeout(()=>{E()},t),n.unref?.()}let p=w=>(j,S)=>{let P=typeof S=="string"?S.replace(/\\/g,"/"):null;(!w||P!==null&&w(P))&&u()},m=(w,j,S)=>{let P=Qv.Utils.joinPath(A,w);try{s.push((0,Lt.watch)(P.fsPath,{recursive:j},p(S)))}catch(N){if(a6(N))return;if(j){r.warn(`Recursive file watching is not available on this platform (${ta(N)}) \u2014 watching every directory under ${w} individually.`);for(let O of o6(P.fsPath))try{s.push((0,Lt.watch)(O,{recursive:!1},p(S)))}catch(L){r.warn(`Could not watch ${O}: ${ta(L)}`)}return}r.warn(`Could not watch ${w}: ${ta(N)}`)}};return m(r0.filePaths.dlo.path,!0),m(r0.filePaths.dde.path,!0),m(".",!1,w=>i6.has(w)),{close(){n&&clearTimeout(n);for(let w of s)w.close()}}}var F6=new Set(["uto-meta","state","console","command","recorder-drop"]),v6=".ndjson",l6=[".db",".sqlite",".sqlite3"];function Al(x,A,e,r){if(!F6.has(x))return{ts:r,type:x,owner:e??null,bytes:A};try{return{ts:r,type:x,owner:e??null,json:JSON.parse(new TextDecoder().decode(A))}}catch{return{ts:r,type:x,owner:e??null,bytes:A}}}function c6(x){let A=x.split(/\r?\n/).filter(e=>e.trim()!=="");if(A.length===0)throw new Error("flight recording: no content lines in NDJSON input");return A}function f6(x){let A=JSON.parse(x[0]),e=new Map;for(let r of x.slice(1)){let t=JSON.parse(r),s=new Uint8Array(Buffer.from(t.data,"base64")),n=Al(t.type,s,t.owner,t.ts),F=e.get(t.sessionId);F?F.push(n):e.set(t.sessionId,[n])}return{manifest:A,recordsBySession:e}}function E6(x){if(x.length===0)return;let A=x[0].ts,e=x[0].ts;for(let r of x)r.ts<A&&(A=r.ts),r.ts>e&&(e=r.ts);return{min:A,max:e}}function B6(x,A){return(x.sessionIds.length>0?x.sessionIds:[...A.keys()]).map(r=>{let t=x.sessions.find(F=>F.sessionId===r),s=A.get(r)??[],n=E6(s);return{id:r,serial:t?.serial??null,deviceId:t?.deviceId??null,startedTs:n?.min??x.exportedTs,endedTs:n?.max??null,appVersion:x.appVersion,platform:x.platform,recordCount:s.length}})}async function C6(x,A){let e=new TextDecoder().decode(await A.readFile(x)),{manifest:r,recordsBySession:t}=f6(c6(e));return{sessions:B6(r,t),recordsFor:n=>(t.get(n)??[]).slice().sort((F,v)=>F.ts-v.ts),warnings:[]}}async function d6(){let nodeRequire=eval("require"),initSqlJs=(()=>{try{return nodeRequire("sql.js")}catch(x){throw new Error(`sql.js is not available in this runtime \u2014 replay a .db recording with the studio CLI itself (${x instanceof Error?x.message:x})`)}})();return initSqlJs({locateFile:()=>nodeRequire.resolve("sql.js/dist/sql-wasm.wasm")})}function xl(x,A){let e=x.prepare(A),r=[];try{for(;e.step();)r.push(e.getAsObject())}finally{e.free()}return r}function Rt(x){return x==null?null:String(x)}function na(x){return typeof x=="number"?x:Number(x)}function u6(x,A,e){return x instanceof Uint8Array?x:typeof x=="string"?new TextEncoder().encode(x):(e.push(`flight recording: ${A} has a non-BLOB 'data' column (${typeof x}) \u2014 treated as empty`),new Uint8Array(0))}async function D6(x,A){let e=await d6(),r=await A.readFile(x),t=new e.Database(r);try{let s=[],n=new Map;for(let v of xl(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let E=String(v.session_id),u=String(v.type),p=na(v.ts),m=u6(v.data,`${u}@${p} (session ${E})`,s),w=Al(u,m,Rt(v.owner),p),j=n.get(E);j?j.push(w):n.set(E,[w])}return{sessions:xl(t,"SELECT session_id, started_ts, ended_ts, device_id, serial, platform, app_version FROM sessions").map(v=>{let E=String(v.session_id);return{id:E,serial:Rt(v.serial),deviceId:Rt(v.device_id),startedTs:na(v.started_ts),endedTs:v.ended_ts===null||v.ended_ts===void 0?null:na(v.ended_ts),appVersion:Rt(v.app_version),platform:Rt(v.platform),recordCount:(n.get(E)??[]).length}}),recordsFor:v=>n.get(v)??[],warnings:s}}finally{t.close()}}async function sa(x,A){let e=x.path.toLowerCase();if(e.endsWith(v6))return C6(x,A);if(l6.some(r=>e.endsWith(r)))return D6(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function ia(x,A){if(A){let e=x.sessions.find(r=>r.id===A);if(!e){let r=x.sessions.map(t=>t.id).join(", ")||"(none)";throw new Error(`No session '${A}' in this recording. Known sessions: ${r}`)}return e}if(x.sessions.length===0)throw new Error("Flight recording contains no sessions");return x.sessions.reduce((e,r)=>r.recordCount>e.recordCount?r:e)}var nl=require("node:events"),sl=U0(Me());var el="at-tx",aa="at-rx",p6=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function b6(x){let A="";for(let e=0;e<x.length;e++)A+=String.fromCharCode(x[e]);return A}function rl(x){let A=p6.exec(b6(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function m6(x,A){if(x.length!==A.length)return!1;for(let e=0;e<x.length;e++)if(x[e]!==A[e])return!1;return!0}function h6(x,A){if(m6(x,A))return!0;let e=rl(x),r=rl(A);return e!==null&&r!==null&&e===r}function j6(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function g6(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function oa(x){return`hex[${j6(x)}] ascii["${g6(x)}"]`}function y6(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function Fa(x){return x===void 0?1:x==="max"||x<=0?0:x}var Qn=class{interface="usb";entries;speed;baseTs;onWarning;callbacks=new Set;timers=[];matchCursor=0;started=!1;constructor(A,e={}){this.entries=A.filter(r=>r.type===el||r.type===aa).slice().sort((r,t)=>r.ts-t.ts).map(r=>({record:r,consumed:!1})),this.speed=Fa(e.speed),this.onWarning=e.onWarning??(()=>{}),this.baseTs=e.baseTs??this.entries[0]?.record.ts??0}onData(A){return this.callbacks.add(A),()=>this.callbacks.delete(A)}start(){if(!this.started){this.started=!0;for(let A of this.entries){if(A.record.type!==aa)continue;let e=this.speed>0?Math.max(0,(A.record.ts-this.baseTs)/this.speed):0,r=setTimeout(()=>{A.timer=void 0,this.emitEntry(A)},e);r.unref?.(),A.timer=r,this.timers.push(r)}}}stop(){for(let A of this.timers)clearTimeout(A);this.timers.length=0}advanceToNextTx(){for(;this.entries[this.matchCursor]&&this.entries[this.matchCursor].record.type!==el;)this.matchCursor++;return this.entries[this.matchCursor]}async write(A){let e=new Uint8Array(A),r=this.advanceToNextTx();if(!r){this.onWarning(`replay: unmatched AT command \u2014 recording exhausted, no at-tx left to match. actual: ${oa(e)}`);return}let t=r.record.bytes??new Uint8Array(0);if(!h6(t,e)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${oa(t)} actual: ${oa(e)}`);return}for(r.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===aa;)this.emitEntry(this.entries[this.matchCursor],!0),this.matchCursor++}emitEntry(A,e=!1){if(A.consumed&&!e)return;A.timer&&(clearTimeout(A.timer),A.timer=void 0),A.consumed=!0;let r=y6(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(r)}};var Zn="state",la="console",il="command",al="uto-meta",va="at",k6=new Set([Zn,la,il,al]),w6="not available in replay mode",tl="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function _6(x){return x===Zn?"state":x===la?"console":x===al?"uto":va}function S6(x,A){return x===la&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===il&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var Ot=class extends nl.EventEmitter{logStream;meta;file;speed;transport;atHandler;timers=[];lastState=null;started=!1;stopped=!1;constructor(A){super(),this.meta=A.session,this.file=A.file,this.speed=A.speed??1,this.logStream=new Xr({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",t=>this.emit("log",t));let e=A.recording.recordsFor(A.session.id),r=e.length>0?e[0].ts:0;this.transport=new Qn(e,{speed:A.speed,baseTs:r,onWarning:t=>this.logStream.push(va,t)}),this.atHandler=new sl.AtCommandHandler(this.transport,vr(A.logger)),this.logStream.attachAtHandler(this.atHandler),this.scheduleAnnotations(e,r)}get serial(){return this.meta.serial??this.meta.id}scheduleAnnotations(A,e){let r=Fa(this.speed);for(let t of A){if(!k6.has(t.type))continue;let s=r>0?Math.max(0,(t.ts-e)/r):0,n=setTimeout(()=>this.emitAnnotation(t),s);n.unref?.(),this.timers.push(n)}}emitAnnotation(A){A.type===Zn&&(this.lastState=A.json??null,this.emit(Zn,this.lastState)),this.logStream.push(_6(A.type),S6(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:tl})}}status(){return{serial:this.serial,connected:!0,apmId:"local",firmwareVersion:null,model:{containers:[]},lastSync:null,buildState:{running:!1,ok:null,at:null},poll:{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0},replay:{mode:"replay",file:this.file,session:this.meta.id,serial:this.meta.serial,deviceId:this.meta.deviceId,appVersion:this.meta.appVersion,platform:this.meta.platform,recordCount:this.meta.recordCount,startedTs:this.meta.startedTs,endedTs:this.meta.endedTs,speed:this.speed}}}unavailable(){throw new Q0(w6,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(va,`> ${A}`),this.atHandler.sendRaw(A)}async state(){return this.lastState}localDataSnapshot(){return null}async configs(){return{configs:{},order:[]}}async applyConfigs(A){let e={};for(let r of Object.keys(A))e[r]={ok:!1,err:tl};return e}async stop(){if(!this.stopped){this.stopped=!0;for(let A of this.timers)clearTimeout(A);this.transport.stop(),this.atHandler.dispose(),await this.logStream.dispose(),this.removeAllListeners()}}};var $6="details";function T6(){return[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles]}async function fa(x,A,e){let r=e.logger??new WA.Logger;if(e.replay){if(e.serial)throw new Error("--replay cannot be combined with --serial");return q6(x,A,e,r)}if(!e.serial)throw new Error("--serial is required unless --replay is given");let t=new Le({cwd:x,fs:A,serial:e.serial,transportFactory:e.transportFactory,createDevice:e.createDevice,pollIntervalMs:e.pollIntervalMs,flash:e.flash!==!1,build:e.build!==!1,part:e.part??T6(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",E=>r.warn(E instanceof Error?E.message:String(E)));try{await t.start()}catch(E){throw await t.stop(),E}let s,n,F;try{s=await ra({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=Zv({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=vl(x,t,s.url,e.pov,r))}catch(E){throw await s?.close(),await t.stop(),E}let v=s;return{url:v.url,port:v.port,session:t,apmId:t.status().apmId,async close(){n?.close(),ll(F,r),await v.close(),await t.stop()}}}function P6(x,A){return Fl.isAbsolute(A)?Yr.URI.file(A):Yr.Utils.joinPath(x,A)}async function q6(x,A,e,r){let t=P6(x,e.replay),s=await sa(t,A);for(let p of s.warnings)r.warn(p);let n=ia(s,e.session),F=new Ot({file:t.fsPath,recording:s,session:n,speed:e.speed,logger:r,logFile:e.logFile});F.on("error",p=>r.warn(p instanceof Error?p.message:String(p))),F.start();let v,E;try{v=await ra({session:F,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.pov&&(E=vl(x,F,v.url,e.pov,r))}catch(p){throw await v?.close(),await F.stop(),p}let u=v;return{url:u.url,port:u.port,session:F,apmId:F.status().apmId,async close(){ll(E,r),await u.close(),await F.stop()}}}function vl(x,A,e,r,t){let s=typeof r=="string"&&r.length>0?r:$6,n=Yr.Utils.joinPath(x,"pov",s);if(!(0,ol.existsSync)(Yr.Utils.joinPath(n,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${n.fsPath}`);return}let F=(0,ca.spawn)("npm",["run","dev"],{cwd:n.fsPath,env:{...process.env,MYDATANET_HOST:e},shell:process.platform==="win32",detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),v=E=>{for(let u of E.toString("utf8").split(/\r?\n/)){let p=u.trim();p&&A.logStream.push("pov",p)}};return F.stdout?.on("data",v),F.stderr?.on("data",v),F.on("error",E=>t.error(`POV dev server failed: ${E.message}`)),t.info(`POV dev server: npm run dev in ${n.fsPath} (MYDATANET_HOST=${e})`),F}function ll(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,ca.spawn)("taskkill",["/PID",String(x.pid),"/T","/F"],{stdio:"ignore",windowsHide:!0});return}process.kill(-x.pid,"SIGTERM")}catch(e){A.debug(`Could not stop the POV dev server: ${e instanceof Error?e.message:String(e)}`),x.kill()}}var cl=require("uuid"),N6="b4baec47-0ba4-4e37-b237-8f9cde42b8dd";var Gt=class{domain;auth;logger;userInfo=null;constructor(A,e,r){if(typeof A=="object"){let{serverUrl:t,apiToken:s,authHeader:n,logger:F}=A;this.domain=this.normalizeServerUrl(t),this.auth=n||(s?`Bearer ${s}`:""),this.logger=F}else this.domain=this.normalizeServerUrl(A),typeof e=="string"?(this.auth=`Bearer ${e}`,this.logger=r):(this.auth="",this.logger=e)}setAuth(A){this.auth=A}getDomain(){return this.domain}normalizeServerUrl(A){return!A.startsWith("http://")&&!A.startsWith("https://")?`https://${A}`:A}trimDomain(A){return A.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(A,e,r){let t=`${this.domain}${e}`,s={Authorization:this.auth},n={method:A,headers:s};r&&(r instanceof FormData?n.body=r:(s["Content-Type"]="application/json",n.body=JSON.stringify(r)));let F=await fetch(t,n);if(!F.ok){let v=await F.text().catch(()=>"Unknown error");throw new Error(`HTTP ${F.status}: ${v}`)}return F.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:A,customers:e}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:A.name,email:A.email,group:A.group,customers:e},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(A){throw new Error(`Authentication failed: ${A instanceof Error?A.message:String(A)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(A,e){this.logger?.info(`Uploading development tag ${A}...`);let{applid:r}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${A}`,e);return this.logger?.info(`Development tag uploaded, application ID: ${r}`),r}async getCustomer(A){let{_uid:e,name:r}=await this.fetchJSON("GET",`/api/1/customers/${A}`);return{_uid:e,name:r}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}/site`)}catch{return null}}async getDevice(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}`)}catch{return null}}async getSite(A,e){try{return await this.fetchJSON("GET",`/api/1/customers/${A}/sites/${e}`)}catch{return null}}async createDevelopmentSite(A,e,r){if(this.logger?.info(`Creating development site "${e.name}"...`),e.serialNumber){let s=await this.getSite(A,e.name.toLowerCase());if(s)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${s._uid}/cn-attach-device`,{device_id:e.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${s._uid}`),s._uid}catch(n){if(n.message&&!n.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${n.message}`);else return s._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${A}/sites`,{name:e.name,create:!0,force:!0,note:"This is a Studio development site",applid:e.applicationId,device_id:e.serialNumber,reg_code:r,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(A,e){try{await this.fetchJSON("PUT",`/api/1/sites/${A}`,{name:e})}catch{}}};function fl(x){return(0,cl.v5)(x,N6)}async function Ea(x,A,e,r,t,s,n){let F=await z.read(x,A),v=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),E=F.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),u=await z.isApmPartEnabled(x,A,u0.Part.dlo,F),p=u&&r,m=p?r.toUpperCase():`${E}_${v}`,w=p?r:m,j=n||m;return j.length>50&&(e.warn(`Site name "${j}" is too long. Truncating to 50 characters.`),j=j.substring(0,50)),{apmId:fl(w),applicationId:null,name:j,version:1,serialNumber:u?r:void 0,siteUid:null,customerUid:s}}async function El(x,A,e,r,t,s,n=!1){if(s.length>0)for(let F of s){let[v,E]=F.split("@");await ex.installDependency(x,A,e,r,t,v,E||null,n)}else await ex.installDependencies(x,A,e,r,t);await ex.installNpmInApmParts(x,A,e)}async function Bl(x,A,e,r,t=null,s=!0,n){return await z.validateBasicManifest(x,A,null),mx.buildAll(x,A,e,r,t,s,n)}async function I6(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await z.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function Cl(x,A,e,r,t,s,n,F){e.info("Publishing package...");let v=await I6(s);if(F)await mx.publishArchive(x,A,e,t,r,F,n,v);else return await mx.validatePublishSettings(x,A,t,r),mx.release(x,A,e,r,t,n,v)}async function dl(x,A,e,r,t,s){return mx.pack(x,A,e,r,t,s)}var Ce=H0.DDEContainerName,ul=H0.allowedRelationTypes,M6=H0.regexRelation,L6=H0.ContainerType,R6=H0.checkForReservedFieldName,As=H0.ContainerName,Dl=H0.CONTAINER_DEFS,O6=H0.SERVER_CONTAINER,G6=H0.HISTDATA_CONTAINER,U6=H0.CONFIG_CONTAINER,Qr=H0.TransferDirection,pl=H0.fieldTypeDefinitions,AA=j0.yamlRangeToLineInformation,es;(A=>{class x{constructor(r,t,s){this.manifest=r;this.libraryFiles=t;this.ddeHistory=s}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:s,diagnostics:n,parsedYaml:F}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...n),this.libraryDDE.push(s),this.libraryYaml[t.libraryName]=F}),r}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(r){let t=this.previousVersion,s=r.startsWith("timeseries_")?r.substring(11):r;return Object.values(t.containers).find(n=>n.title===s)||null}parseMainDDE(r,t){let{parsedDDE:s,diagnostics:n}=this.parseYamlFile(r,t);return n.find(E=>E.level==="error")?{ddeJSON:null,diagnostics:n}:{ddeJSON:this.mergeAndFormat(s),diagnostics:n}}parseYamlFile(r,t,s){this.fileDiagnostics.length=0;let n=new Oe.LineCounter,F=(0,Oe.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null};let v=F.contents||new Oe.YAMLMap;return this.validateContainerDefinition(v.items).forEach(u=>{this.validateAllowedContainer(r,u,n,s),this.validateContainerFields(F,r,u,n)}),{parsedDDE:this.yamlDocToDdeJson(F.toJS({mapAsMap:!0}),r,n,F,s),diagnostics:[...this.fileDiagnostics],parsedYaml:F}}yamlDocToDdeJson(r,t,s,n,F){let v={containers:{},setPointList:{}},E=new Map,u=[...Object.values(Ce)];if(r.get("cloudProject")){let m=Object.values(this.previousVersion.containers).map(S=>S.title),w=[...r.keys()].filter(S=>!this.reservedTopLevelKeys().has(S)),j=[...new Set([...u,...m,...w])];u.length=0,u.push(...j)}for(let m of u)r.has(m)&&E.set(m,r.get(m));let p=r.get("timeseries");if(p)for(let[m,w]of p)E.set(m,w);for(let[m,w]of E){let{realContainer:j,transferDirection:S,legacyTitle:P}=this.getRealContainerInformation(m);if(!j){let t0=this.findContainerKeyRange(n,m);this.fileDiagnostics.push({file:t,level:"error",message:`Container "${m}" could not be placed - no free container slot available.`,...t0?AA(s,t0):{line:0,startCharacter:0,endCharacter:0}});continue}let N=Dl[j],O=m.includes("timeseries_")?m.replace("timeseries_",""):m,L={name:j,title:O,previousTitle:P,containerType:N.ctype,volatile:m===Ce.volatile,transferDirection:S,fieldCount:w.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};F&&L.libraries.push(F);for(let[t0,M]of w){let k=[],R=M.get("type"),Q=pl[R];if(!(!Q&&R!=="array")){if(R==="array"){let K=[],J=M.get("length"),H=M.get("fields"),a0={name:t0,length:J,library:F||null,fields:[]};L.arrays[t0]=a0;for(let n0=0;n0<J;n0++){let Z={name:t0,index:n0};for(let[s0,U]of H){let v0=pl[U.get("type")];if(!v0)continue;a0.fields?.find($0=>$0.name===s0)||a0.fields.push({name:s0,type:U.get("type"),byteSize:v0.len||U.get("bytes")||U.get("length")});let c0=`${t0}[${n0}].${s0}`,{fields:B0,shadowInfo:d0}=this.createDDEJsonFields(c0,F,v0,U);B0.forEach($0=>{$0.arrayRef=Z}),d0&&(L.shadows[d0.name]=d0),K.push(...B0)}}k.push(...K)}else{let{arrayInfo:K,fields:J,shadowInfo:H}=this.createDDEJsonFields(t0,F,Q,M);K&&(L.arrays[K.name]=K),H&&(L.shadows[H.name]=H),k.push(...J)}k.forEach(K=>{K.index=++L.fieldIndex,L.fields.push(K),L.size+=K.byteSize})}}v.containers[j]=L}return v}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants","timeseries",...Object.values(Ce)])}getRealContainerInformation(r){let t,s,n;if(this.previousVersion){let F=r.startsWith("timeseries_")?r.substring(11):r,{name:v,direction:E,previousTitle:u}=this.findPreviousUsedContainer(F);t=v,s=E,n=u}if(!t){let F=Object.entries(this.usedContainerNames).find(([,v])=>v===r);F&&(t=F[0])}return t||(t=this.findNextFreeContainer(r)),t&&(this.usedContainerNames[t]=r),s||(s=[Ce.setting,Ce.command].includes(r)?Qr.down:Qr.up),s===Qr.up&&t&&Dl[t].xmits.includes(Qr.upPlus)&&(s=Qr.upPlus),t&&[As.configA,As.configB].includes(t)&&(s=Qr.backendOnly),{realContainer:t,transferDirection:s,legacyTitle:n}}findContainerKeyRange(r,t){let s=r.contents;return s?.items?t.startsWith("timeseries_")?s.items.find(u=>u.key.value==="timeseries")?.value?.items.find(u=>u.key.value===t)?.key.range:s.items.find(F=>F.key.value===t)?.key.range:void 0}findNextFreeContainer(r){if(r===As.aloha)return As.aloha;let t=U6;r.startsWith("timeseries_")?t=G6:[Ce.relations,Ce.storage].includes(r)&&(t=O6);let s=this.previousVersion?.containers;return s&&(t=t.filter(n=>!Object.hasOwn(s,n))),t.find(n=>!Object.hasOwn(this.usedContainerNames,n))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,s=Object.values(t).find(n=>n.title===r);return{name:s?.name,direction:s?.transferDirection,previousTitle:s?.previousTitle}}createDDEJsonFields(r,t,s,n){let F=n.get("array"),v=[],E,u;if(F){E={name:r,library:t||null,length:F};for(let p=0;p<F;p++){let m=`${r.toLowerCase()}[${p}]`;v.push(this.buildDDEJsonField(m,n,{name:r,index:p},s,t,null))}}else{let p=this.buildDDEJsonField(r,n,null,s,t,null);v.push(p);let m=n.get("shadowFields");if(m){u={name:p.name,byteSize:p.byteSize,byteOffset:p.byteOffset};for(let[w,j]of m){let S=w;r.includes(".")&&(S=r.split(".")[0]+`.${w}`),v.push(this.buildDDEJsonField(S,j,null,s,t,p.name))}}}return{arrayInfo:E,shadowInfo:u,fields:v}}buildDDEJsonField(r,t,s,n,F,v){return{id:r.toLowerCase(),name:r,index:0,library:F||null,byteOffset:0,byteSize:n.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:s,shadowRef:v,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(r,t){return(0,Oe.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(s=>{let F=s.key.value;F==="timeseries"?s.value.items.forEach(v=>{v.key.value=`timeseries_${v.key}`,t.push(v)}):["dde","cloudProject","constants"].includes(F)||t.push(s)}),t}parseUserLevel(r){if(r==="read-only")return 99;if(r?.startsWith("UL"))return Number(r.substring(2))}parseChannelMode(r){if(r)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[r]??r}parseTriggerUndershoot(r){if(r)return{"greater-or-equal":0,"less-or-equal":1}[r]??r}validateAllowedContainer(r,t,s,n){if(!t.value)return;let v=t.key.value;if(n&&(v.startsWith("aloha")||v.startsWith("timeseries"))){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within a library`,...AA(s,t.key.range)})}if(z.isAnalytics(this.manifest)&&![Ce.relations,Ce.storage].includes(v)){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...AA(s,t.key.range)})}}validateContainerFields(r,t,s,n){let F=s.value;if(!F)return;let v=s.key.value;Object.hasOwn(this.fieldNamesPerContainer,v)||(this.fieldNamesPerContainer[v]=[]);let E=this.getContainerOfPreviousVersion(v);F.items.forEach(u=>{let m=u.key.value;this.checkForContainerRelation(u,r,t,n),this.validateFieldName(u,v,t,n),this.checkFieldNameLength(u,v,t,n);let w=E?.fields.find(L=>L.id===m.toLowerCase()),j=u.value,S=j.get("type",!0),P=this.resolvePossibleAlias(r,S),N=j.get("bytes",!0),O=this.resolvePossibleAlias(r,N);w&&(S&&P&&w.type!==P&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${w.type}" to "${P}".
2333
- Changing the type of an existing field can result in data loss or unexpected behaviour.`,...AA(n,S.range)}),N&&O&&w.byteSize!==O&&this.fileDiagnostics.push({file:t,level:"warning",message:`Byte size changed from '${w.byteSize}' to '${O}'.
2334
- Changing the size of an existing field can result in data loss or unexpected behaviour.`,...AA(n,N.range)}))})}checkForContainerRelation(r,t,s,n){let F=r.value.get("fields");F&&F.items.forEach(E=>{this.checkForContainerRelation(E,t,s,n)}),r.value.items.forEach(E=>{let u=E.value;if(u?.value&&M6.exec(`${u.value}`)){let p=E.key.value;if(p){if(!Object.hasOwn(ul,p))return this.fileDiagnostics.push({file:s,level:"error",message:`Property "${p}" does not allow relations.`,...AA(n,u.range)});if(["scale","offset"].includes(p))return this.fileDiagnostics.push({file:s,level:"warning",message:`Container relations for "${p}" are not available within the dlo source.`,...AA(n,u.range)})}return this.validateContainerRelation(p,u,t,s,n)}})}validateFieldName(r,t,s,n){let F=this.fieldNamesPerContainer[t],v=r.key,E=v.value;R6(E)&&this.fileDiagnostics.push({file:s,level:"error",message:`Reserved property "${E}" is not allowed.`,...AA(n,v.range)});let u=r.value.get("shadowFields");u&&u.items.forEach(p=>{this.validateFieldName(p,t,s,n)}),F.includes(E.toLowerCase())?this.fileDiagnostics.push({file:s,level:"error",message:`Field name "${E}" is already occupied`,...AA(n,v.range)}):F.push(E.toLowerCase())}checkFieldNameLength(r,t,s,n){let F=r.key,v=F.value,u=`DDE_${t.startsWith("timeseries")?t.substring(10):t}_`,p=31-u.length;u.length+v.length>31&&this.fileDiagnostics.push({file:s,level:"error",code:Fn.CODE.ddeFieldLength,message:`Field name "${v}" to long. ${p} characters allowed for this field/container.`,...AA(n,F.range)})}validateContainerRelation(r,t,s,n,F){let[v,E,u]=t.value.split(".",3),[p,m]=v.split("@"),w=p?p.split(":")[1]:null,S=(w&&this.libraryYaml[w]?this.libraryYaml[w]:s).contents?.get(m),P=E.split("[")[0],N=null;if(S){let O=S.get(P);if(O)if(u){let L=O.get("fields");L&&L.get(u)&&(N=L.get(u))}else N=O;else N=this.findRelatedShadowField(S,P)}if(N){let O=ul[r],L=N.get("type");O.includes(L)||this.fileDiagnostics.push({file:n,level:"error",message:`Related field type "${L}" is not allowed for attribute "${r}".`,...AA(F,t.range)})}else w&&!this.libraryYaml[w]?this.fileDiagnostics.push({file:n,level:"error",message:`Related library "${w}" does not exist.`,...AA(F,t.range)}):this.fileDiagnostics.push({file:n,level:"error",message:`Related field "${t.value}" does not exist.`,...AA(F,t.range)})}findRelatedShadowField(r,t){for(let s of r.items){let F=s.value.get("shadowFields");if(!F)continue;let v=F.get(t);if(v)return v}}mergeAndFormat(r){let t={containers:{},setPointList:{}};for(let s of this.libraryDDE)this.combineDDE(t,s);return this.combineDDE(t,r),this.sortContainerFields(t),this.generateSetPointList(t),t}combineDDE(r,t){for(let[s,n]of Object.entries(t.containers)){let F=r.containers[s];F?(F.title=n.title,F.knownNames.unshift(n.title),F.libraries.push(...n.libraries),F.fields.push(...n.fields),F.arrays={...F.arrays,...n.arrays},F.shadows={...F.shadows,...n.shadows}):(F=r.containers[s]=structuredClone(n),F.knownNames.unshift(n.title),F.fieldCount=F.fields.length,F.fieldIndex=0);let v=this.initialContainerByteOffset(F);for(let[E,u]of F.fields.entries()){if(u.shadowRef){let p=F.shadows[u.shadowRef];u.byteOffset=p.byteOffset}else u.byteOffset=v,this.updateShadowFieldInformation(r.containers[s],u),v+=u.byteSize||0;E>F.fieldCount-1&&(u.index+=F.fieldIndex)}F.fieldIndex+=n.fieldIndex,F.knownNames=[...new Set(F.knownNames)],F.libraries=[...new Set(F.libraries)],F.fieldCount=F.fields.length}}initialContainerByteOffset(r){return r.containerType===L6.hx?1:0}updateShadowFieldInformation(r,t){t&&Object.hasOwn(r.shadows,t.name)&&(r.shadows[t.name].byteOffset=t.byteOffset)}sortContainerFields(r){for(let t of Object.values(r.containers)){let{sortedFields:s,containerSize:n}=this.sortFields(t);t.fields=s,t.size=n,t.fieldCount=t.fields.length}}sortFields(r){let t=r.fields.filter(p=>!p.shadowRef),s=r.fields.filter(p=>p.shadowRef),n=[],F=r.name;if(this.previousVersion.containers[F]){let p=this.sortPreviousContainerFields(r,t);n.push(...p)}else n.push(...t);n.forEach(p=>{this.updateShadowFieldInformation(r,p)});let E=n[n.length-1],u=E.byteSize+E.byteOffset;return s.forEach(p=>{p.byteOffset=r.shadows[p.shadowRef].byteOffset,n.push(p)}),{sortedFields:n,containerSize:u}}sortPreviousContainerFields(r,t){let s=r.name,n=this.previousVersion.containers[s],F=[],v=this.initialContainerByteOffset(r);for(let E of n.fields){if(E.shadowRef)continue;let u=t.findIndex(m=>E.id===m.name?.toLowerCase());if(u===-1){v=E.byteOffset+E.byteSize;continue}let p=t[u];if(E.type!==p.type&&E.byteSize!==p.byteSize){v=E.byteOffset+E.byteSize;continue}p.byteOffset=E.byteOffset,t.splice(u,1),F.push(p),v=this.initialContainerByteOffset(r)}if(v>this.initialContainerByteOffset(r)){let E=t.shift();F.push(...this.generatePlaceholderFieldIfNeeded(v,E)),this.updateShadowFieldInformation(r,E)}for(let E of t){if(E.shadowRef)E.byteOffset=r.shadows[E.shadowRef].byteOffset;else{this.updateShadowFieldInformation(r,E);let u=F[F.length-1];u.shadowRef&&(u=r.shadows[u.shadowRef]),E.byteOffset=u.byteOffset+u.byteSize}F.push(E)}return F}generatePlaceholderFieldIfNeeded(r,t){let s=[];if(t)t.byteOffset=r,s.push(t);else{let n={byteOffset:r,byteSize:0,id:"_shadow",library:null,name:"_shadow",type:"shadow",arrayRef:null,shadowRef:null,title:null,index:0};s.push(n)}return s}generateSetPointList(r){r.setPointList={...this.previousVersion.setPointList||{}};for(let t of Object.values(r.containers))for(let s of t.fields)s.chartSetPoint&&(Object.hasOwn(r.setPointList,s.name)||(r.setPointList[s.name]=this.getNextSetpointValue(r.setPointList)))}getNextSetpointValue(r){let t=[...Object.values(r),0];return Math.max(...t)+1}}A.PreCompiler=x})(es||={});var eA=H0.TransferDirection,_A=H0.parseXMLValueWithRelation,H6=H0.parseXMLBitmask,J6=H0.parseXMLDefaultValue,K6=H0.fieldTypeDefinitions;function Ba(x,A){let r=[];function t(F,v=!0){if(v){if(Array.isArray(F)){r.push.apply(r,F);return}r.push(""+F)}}function s(F,v){F!=="mergeofs"&&t(`${F}=${v}`)}t("// DDE STRUCTURE created by Microtronics Studio");let n="source=rm2mraw";for(let[F,v]of Object.entries(A.containers)){F.startsWith("histdata")&&v.transferDirection!==eA.deviceOnly&&(t("<split>"),t(n),t("target="+F),t("key=0"+F.substr(-1,1)),t("</split>")),t("<table>"),s("name",F),s("alias",v.title),s("title",v.title.replace("_"," "));let E={};[eA.none,eA.backendOnly,eA.deviceOnly,eA.down,eA.downPlus].includes(v.transferDirection)&&s("upload","0"),[eA.none,eA.backendOnly,eA.deviceOnly,eA.up,eA.upPlus].includes(v.transferDirection)&&s("download","0"),(z.isIotApp(x)||z.isLibrary(x))&&[eA.up,eA.upPlus].includes(v.transferDirection)&&s("edit","99");for(let u of v.fields){if(u.type==="shadow")continue;let p=z6(u),m=K6[p.type],w=_A("title",p,A)||p.name;!w.startsWith("%")&&p.library&&(w=`${p.library}: ${w}`);let j={title:w,alias:p.name,index:u.index,...E};j.byteofs=`${p.byteOffset}`;for(let[S,P]of Object.entries(m.xml))j[S]=P;Object.hasOwn(m,"xmlOut")&&m.xmlOut(j,p,A),j.units=_A("unit",p,A),j.chmode=_A("channelMode",p,A),j.ialarm_high=_A("chartAlarmHigh",p,A),j.ialarm_low=_A("chartAlarmLow",p,A),j.iwarn_high=_A("chartWarningHigh",p,A),j.iwarn_low=_A("chartWarningLow",p,A),j.hysterese=_A("chartHysteresis",p,A),j.itrigger=_A("chartTriggerThreshold",p,A),j.itriggerus=_A("chartTriggerRelation",p,A),j.setpoint=_A("chartSetPoint",p,A),j.bitmask=H6(p),p.hex&&(j.editmask="%HEX%"),p.readPermission&&(j.view=p.readPermission),p.writePermission&&(j.edit=p.writePermission),p.defaultValue!==void 0&&(j.default=J6(p)),p.utilsTransferInterval===!0&&(j.param0="%FFFF0005%transfer_interval"),t("<field>"),p.library&&t(`// declared by ${p.library} library`,!0);for(let[S,P]of Object.entries(j))P!==void 0&&s(S,`${P}`);t("</field>")}["alerts","applog"].includes(F)||(t("</table>"),t("// "+v.size+" bytes total size"))}return t("<split>"),t(n),t("target=alarm0"),t("key=20"),t("</split>"),t("<split>"),t(n),t("target=applog0"),t("key=28"),t("</split>"),r.join(`
2335
- `)}function z6(x){let A=structuredClone(x),e=x.arrayRef?.index;if(e===void 0)return A;for(let[r,t]of Object.entries(A))A[r]=j0.patchValueWithArrayInfo(t,e);return A}var xe=U0(require("semver"));var SA=U0(require("semver"));var ua=require("vscode-uri");var Px=H0.ContainerType,M0=H0.TransferDirection,Ut=H0.regexRelation,V6=H0.CONFIG_CONTAINER,da=H0.CONTAINER_DEF_DLO_CID_BASE,Kt=H0.CONTAINER_DEFS,Jt=H0.fieldTypeDefinitions,ml=j0.isNumeric;function BA(x){let A=Jt[x.type];return A.pwn.rwp||(A.pwn.rwp="%n"),A.pwn.htype||(A.pwn.htype=A.pwn.rwfunc),A.pwn}var rs="Microtronics/dlo-core";function Da(x){return z.isLibrary(x)&&x.name==="dlo-core"?x.version:x.libraryDependencies&&Object.hasOwn(x.libraryDependencies,rs)?ex.rangeToVersion(x.libraryDependencies[rs]):x.libraryDevDependencies&&Object.hasOwn(x.libraryDevDependencies,rs)?ex.rangeToVersion(x.libraryDevDependencies[rs]):null}function W6(x){let A=Da(x);return A===null||SA.gte(A,"0.3.0")?SA.valid(x.version)?x.version:SA.coerce(`${x.version}`):SA.coerce(x.version)?.major}function Ca(x){let A=Da(x);if(A===null)return!1;let e=SA.coerce(A);return SA.gte(e,"1.1.0")}function X6(x){let A=Da(x);if(A===null)return!1;let e=SA.coerce(A);return SA.gte(e,"1.15.0")}var Y6=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function Q6(x){if(x.type==="ustring")return!1;if(x.defaultValue!=="NaN")return!0;let A=BA(x);return!A||A==="skip"?!1:Y6.includes(`${A.rwfunc}`)}function Z6(x,A,e){x("PROJECT META");let{dpid:r,registry:t}=e;if(!r)throw new Error('Setting "dpid" is required to generate dlo files');let{auto_inc:s}=Ss[r];A("APM_DPID",`${r}`),A(`APM_DPID_${r}`,"1"),A(`APM_DPID_${r.toUpperCase()}`,"1"),A("APM_ID",t?.id||"");let n=W6(e);A("APM_VERSION",`${n}`),A("APM_NAME",`${e.name}`),A("APM_AUTHOR",`${e.publisher}`);for(let[F,v]of Object.entries(s))ml(v)?A(F,`${v}`):A(F,`"${v}"`)}function x7(x,A,e,r){let t=r.flat,{definesWithSource:s}=r;A("GLOBAL DEFINES");for(let[n,F]of Object.entries(t)){let v=s[n]?.comment;if(v){let u=v.split(`
2336
- `);if(u.length===1)x(`/** ${u[0]} */`);else{x("/**");for(let p of u)x(` * ${p}`);x(" */")}}let E=Object.hasOwn(t,F);e(n,`${F}`,E)}}function A7(x,A,e,r){let t=parseInt(x.substring(6)),s=1<<t;e[t]=A.size,r.cx_isupm|=[M0.both,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(A.transferDirection)?s:0,r.cx_isvolatilem|=A.volatile?s:0,r.cx_isdnm|=[M0.both,M0.none,M0.deviceOnly,M0.down,M0.downPlus].includes(A.transferDirection)?s:0,r.cx_isvlm|=[M0.bothPlus,M0.upPlus,M0.downPlus].includes(A.transferDirection)?s:0}function e7(x,A,e,r){let t=parseInt(x.substring(8));e[t]=A.size,r.hx_isvlm|=[M0.upPlus].includes(A.transferDirection)?1<<t:0}function r7(x){return[M0.upPlus].includes(x.transferDirection)}function t7(x,A,e){let r=0,t=Array(10).fill(0),s={cx_isupm:0,cx_isvolatilem:0,cx_isdnm:0,cx_isvlm:0},n=0,F=Array(10).fill(0),v={hx_isvlm:0},E;for(let[p,m]of Object.entries(e.containers))m.containerType===Px.cx&&m.transferDirection!==M0.backendOnly?(A7(p,m,t,s),r=Math.max(r,m.size)):m.containerType===Px.hx?(e7(p,m,F,v),r=Math.max(r,m.size)):m.containerType===Px.aloha&&(E=r7(m),r=Math.max(r,m.size));A("DDE CORE"),x(`#define _DDE_BUF_BYTES (${r}+10)`),x(""),x("// c0 c1 c2 c3 c4 c5 c6 c7 c8 c9"),x(`stock _DDE_CONFIGS_size[] =[ ${t.join(", ")}];`),x(`#define _DDE_CONFIGS_upm 0b${s.cx_isupm.toString(2)} // ..is tolerant when reading back container with under-length`),x(`#define _DDE_CONFIGS_volatilem 0b${s.cx_isvolatilem.toString(2)} // inits container as volatile`),x(`#define _DDE_CONFIGS_downm 0b${s.cx_isdnm.toString(2)} // reading the container expects strict length`),x(`#define _DDE_CONFIGS_varlenm 0b${s.cx_isvlm.toString(2)} // allow partial write (dde_wxxx)`),x(`#define _DDE_CONFIGS_rdef 0b${n.toString(2)} // ..apply defaults reading a container with under-length`),x(""),x("// h0 h1 h2 h3 h4 h5 h6 h7 h8 h9"),x(`stock _DDE_HISTS_size[] =[ ${F.join(", ")}];`),x(`#define _DDE_HISTS_varlenm 0b${v.hx_isvlm.toString(2)} // allow partial write (dde_wxxx)`);let u=[...F];Object.hasOwn(e,"applog")&&u.push(125),Object.hasOwn(e,"alerts")&&u.push(13),x(`#define _DDE_HISTS_maxsize ${Math.max(...u)}`),x(""),E!==void 0&&(x(`#define _DDE_ALOHA_varlen ${E?1:0}`),x(""))}function n7(x,A,e){for(let[r,t]of Object.entries(e.containers)){if(t.containerType==="applog")continue;A(`${t.title.toUpperCase()} - ${t.transferDirection} via #${r}`);let s=da(t.containerType,t.transferDirection);if(!s){x("// ... container not available in DLO");continue}let n=`DDE_${t.containerType===Px.aloha?Px.aloha:t.title}`,F=Kt[r];x(`// ${n}_id - container identifier required for ${n}_read/_write operations`),x(`#define ${n}_id (${s}+${F.cnum||0})`),x(`// ${n}_sz - [byte] container total size`),x(`#define ${n}_sz ${t.size}`),F.cnum!==void 0&&(x(`// ${n}_idx - 0+ container index number`),x(`#define ${n}_idx ${F.cnum}`))}}function hl(x,A,e){let r=[],t=r.push.bind(r);function s(F){t(`
2332
+ `);let n={res:e,types:i,stalled:0};this.clients.add(n),A.on("close",()=>this.clients.delete(n)),e.on("close",()=>this.clients.delete(n)),e.on("error",()=>this.clients.delete(n))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function x6(x,A,e,r){let t=A.method??"GET",i={path:r,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([F,v])=>[F,Array.isArray(v)?v.join(","):v??""])),body:Zv(t)?await Qv(A):null},n=await x.handleApi(i);xe(e,n.status,n.body,n.headers)}async function A6(x,A,e,r){let{session:t}=x;switch(A){case"GET /dev/status":return t.status();case"POST /dev/build":return t.build();case"POST /dev/flash":return t.flash(Hv(r,"file"));case"POST /dev/sync":return t.sync(ZD(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(Jv(e,"since",0),Jv(e,"limit",500))};case"POST /dev/at":return e6(t,Hv(r,"cmd"));case"GET /dev/state":return t.state();case"GET /dev/localdata":return t.localDataSnapshot();case"POST /dev/localdata/measure":return t.measure();case"GET /dev/openapi.json":return s6(x);case"GET /dev/configs":return t.configs();default:return}}async function e6(x,A){if(!A)throw new Oe(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function r6(x,A,e,r){let[t,i=""]=r.split("?"),n=A.method??"GET",F=Zv(n)?await Qv(A):"";try{if(n==="PUT"&&t==="/dev/configs"){let E=await x.session.applyConfigs(Uv(F)),u=Object.values(E).every(D=>D.ok);xe(e,u?200:400,JSON.stringify({results:E}));return}let v=await A6(x,`${n} ${t}`,new URLSearchParams(i),Uv(F));if(v===void 0){xe(e,404,fr(Yv,`no route for ${n} ${t}`));return}xe(e,200,JSON.stringify(v))}catch(v){if(v instanceof Oe){xe(e,v.status,fr(v.code,v.message));return}xe(e,500,fr("E_DEV",v instanceof Error?v.message:String(v)))}}async function t6(x,A,e,r){if(YD(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",i=t.split("?")[1]??"",n=t==="/events"||t.startsWith("/events?"),F=n?new URLSearchParams(i).get("token")??void 0:void 0;if(!QD(e,x.token,F)){xe(r,401,fr("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await x6(x.session,e,r,t):n?A.subscribe(e,r,i):t.startsWith("/dev/")?await r6(x,e,r,t):xe(r,404,fr(Yv,`no route for ${t}`))}catch(v){if(v instanceof Oe&&!r.headersSent){xe(r,v.status,fr(v.code,v.message),{connection:"close"});return}throw v}}async function ta(x){let{session:A,logger:e}=x,r=x.host??HD;WD(x,r);let t=new ra;for(let F of Wv)A.on(F,v=>t.broadcast(F,v));let i=Kv.default.createServer((F,v)=>{t6(x,t,F,v).catch(E=>{let u=E instanceof Error?E.message:String(E);e.error(`Dev server error: ${u}`),v.headersSent||xe(v,500,fr("E_INTERNAL",u))})});try{await new Promise((F,v)=>{i.once("error",v),i.listen(x.port??JD,r,()=>{i.off("error",v),F()})})}catch(F){throw t.close(),F}i.on("error",F=>e.error(`Dev server socket error: ${F.message}`));let n=i.address().port;return{url:`http://${r}:${n}`,port:n,async close(){t.close(),i.closeIdleConnections(),i.closeAllConnections(),await Promise.race([new Promise(F=>i.close(()=>F())),n6(KD)])}}}function n6(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var i6={"/dev/status":{get:{summary:"Session, model and poll status"}},"/dev/build":{post:{summary:"Build the project, returns diagnostics"}},"/dev/flash":{post:{summary:"Upload an AMX to the device"}},"/dev/sync":{post:{summary:"Pull selected/all tags into the mirror"}},"/dev/logs":{get:{summary:"Device log ring buffer (?since, ?limit)"}},"/dev/at":{post:{summary:"Run one AT command"}},"/dev/state":{get:{summary:"Last rm2m state"}},"/dev/localdata":{get:{summary:"Live local-data values"}},"/dev/localdata/measure":{post:{summary:"Trigger a measurement"}},"/dev/configs":{get:{summary:"Every config-class container, decoded (settings/config0..9/configA..C)"},put:{summary:"Apply partial writes to one or more config-class containers"}},"/dev/openapi.json":{get:{summary:"This document"}},"/events":{get:{summary:"SSE event stream (?types= filters)"}}};async function s6(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=zv.Utils.joinPath(x.cwd,t0.filePaths.dist.ddeApi);if(await x.fs.stat(e))try{let r=new TextDecoder().decode(await x.fs.readFile(e)),t=Vv.default.parse(r);typeof t=="object"&&t!==null&&Object.assign(A,t)}catch(r){let t=r instanceof Error?r.message:String(r);x.logger.warn(`Could not parse ${t0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...i6},A}var Lt=require("node:fs"),xl=require("node:path"),Al=require("vscode-uri");var a6=300,o6=new Set([t0.fileNames.projectSettings,t0.filePaths.appIni]);function na(x){return x instanceof Error?x.message:String(x)}function F6(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function v6(x){let A=[],e=r=>{A.push(r);for(let t of(0,Lt.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,xl.join)(r,t.name))};try{e(x)}catch{}return A}function el(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??a6,i=[],n,F=!1,v=!1,E=async()=>{if(F){v=!0;return}F=!0;try{let w=await e.build();if(w.ok!==!0){r.error(`Rebuild failed: ${w.message??"see diagnostics"}`);return}if(x.flash!==!1){let j=await e.flash();if(!j.success){r.error(j.message);return}}await e.sync()}catch(w){r.error(`Watch cycle failed: ${w instanceof Error?w.message:String(w)}`)}finally{F=!1,v&&(v=!1,u())}};function u(){n&&clearTimeout(n),n=setTimeout(()=>{E()},t),n.unref?.()}let D=w=>(j,S)=>{let P=typeof S=="string"?S.replace(/\\/g,"/"):null;(!w||P!==null&&w(P))&&u()},m=(w,j,S)=>{let P=Al.Utils.joinPath(A,w);try{i.push((0,Lt.watch)(P.fsPath,{recursive:j},D(S)))}catch(N){if(F6(N))return;if(j){r.warn(`Recursive file watching is not available on this platform (${na(N)}) \u2014 watching every directory under ${w} individually.`);for(let R of v6(P.fsPath))try{i.push((0,Lt.watch)(R,{recursive:!1},D(S)))}catch(O){r.warn(`Could not watch ${R}: ${na(O)}`)}return}r.warn(`Could not watch ${w}: ${na(N)}`)}};return m(t0.filePaths.dlo.path,!0),m(t0.filePaths.dde.path,!0),m(".",!1,w=>o6.has(w)),{close(){n&&clearTimeout(n);for(let w of i)w.close()}}}var l6=new Set(["uto-meta","state","console","command","recorder-drop"]),c6=".ndjson",f6=[".db",".sqlite",".sqlite3"];function tl(x,A,e,r){if(!l6.has(x))return{ts:r,type:x,owner:e??null,bytes:A};try{return{ts:r,type:x,owner:e??null,json:JSON.parse(new TextDecoder().decode(A))}}catch{return{ts:r,type:x,owner:e??null,bytes:A}}}function E6(x){let A=x.split(/\r?\n/).filter(e=>e.trim()!=="");if(A.length===0)throw new Error("flight recording: no content lines in NDJSON input");return A}function B6(x){let A=JSON.parse(x[0]),e=new Map;for(let r of x.slice(1)){let t=JSON.parse(r),i=new Uint8Array(Buffer.from(t.data,"base64")),n=tl(t.type,i,t.owner,t.ts),F=e.get(t.sessionId);F?F.push(n):e.set(t.sessionId,[n])}return{manifest:A,recordsBySession:e}}function C6(x){if(x.length===0)return;let A=x[0].ts,e=x[0].ts;for(let r of x)r.ts<A&&(A=r.ts),r.ts>e&&(e=r.ts);return{min:A,max:e}}function d6(x,A){return(x.sessionIds.length>0?x.sessionIds:[...A.keys()]).map(r=>{let t=x.sessions.find(F=>F.sessionId===r),i=A.get(r)??[],n=C6(i);return{id:r,serial:t?.serial??null,deviceId:t?.deviceId??null,startedTs:n?.min??x.exportedTs,endedTs:n?.max??null,appVersion:x.appVersion,platform:x.platform,recordCount:i.length}})}async function u6(x,A){let e=new TextDecoder().decode(await A.readFile(x)),{manifest:r,recordsBySession:t}=B6(E6(e));return{sessions:d6(r,t),recordsFor:n=>(t.get(n)??[]).slice().sort((F,v)=>F.ts-v.ts),warnings:[]}}async function D6(){let nodeRequire=eval("require"),initSqlJs=(()=>{try{return nodeRequire("sql.js")}catch(x){throw new Error(`sql.js is not available in this runtime \u2014 replay a .db recording with the studio CLI itself (${x instanceof Error?x.message:x})`)}})();return initSqlJs({locateFile:()=>nodeRequire.resolve("sql.js/dist/sql-wasm.wasm")})}function rl(x,A){let e=x.prepare(A),r=[];try{for(;e.step();)r.push(e.getAsObject())}finally{e.free()}return r}function Rt(x){return x==null?null:String(x)}function ia(x){return typeof x=="number"?x:Number(x)}function p6(x,A,e){return x instanceof Uint8Array?x:typeof x=="string"?new TextEncoder().encode(x):(e.push(`flight recording: ${A} has a non-BLOB 'data' column (${typeof x}) \u2014 treated as empty`),new Uint8Array(0))}async function b6(x,A){let e=await D6(),r=await A.readFile(x),t=new e.Database(r);try{let i=[],n=new Map;for(let v of rl(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let E=String(v.session_id),u=String(v.type),D=ia(v.ts),m=p6(v.data,`${u}@${D} (session ${E})`,i),w=tl(u,m,Rt(v.owner),D),j=n.get(E);j?j.push(w):n.set(E,[w])}return{sessions:rl(t,"SELECT session_id, started_ts, ended_ts, device_id, serial, platform, app_version FROM sessions").map(v=>{let E=String(v.session_id);return{id:E,serial:Rt(v.serial),deviceId:Rt(v.device_id),startedTs:ia(v.started_ts),endedTs:v.ended_ts===null||v.ended_ts===void 0?null:ia(v.ended_ts),appVersion:Rt(v.app_version),platform:Rt(v.platform),recordCount:(n.get(E)??[]).length}}),recordsFor:v=>n.get(v)??[],warnings:i}}finally{t.close()}}async function sa(x,A){let e=x.path.toLowerCase();if(e.endsWith(c6))return u6(x,A);if(f6.some(r=>e.endsWith(r)))return b6(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function aa(x,A){if(A){let e=x.sessions.find(r=>r.id===A);if(!e){let r=x.sessions.map(t=>t.id).join(", ")||"(none)";throw new Error(`No session '${A}' in this recording. Known sessions: ${r}`)}return e}if(x.sessions.length===0)throw new Error("Flight recording contains no sessions");return x.sessions.reduce((e,r)=>r.recordCount>e.recordCount?r:e)}var al=require("node:events"),ol=U0(Le());var nl="at-tx",oa="at-rx",m6=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function h6(x){let A="";for(let e=0;e<x.length;e++)A+=String.fromCharCode(x[e]);return A}function il(x){let A=m6.exec(h6(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function j6(x,A){if(x.length!==A.length)return!1;for(let e=0;e<x.length;e++)if(x[e]!==A[e])return!1;return!0}function g6(x,A){if(j6(x,A))return!0;let e=il(x),r=il(A);return e!==null&&r!==null&&e===r}function y6(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function k6(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function Fa(x){return`hex[${y6(x)}] ascii["${k6(x)}"]`}function w6(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function va(x){return x===void 0?1:x==="max"||x<=0?0:x}var Zn=class{interface="usb";entries;speed;baseTs;onWarning;callbacks=new Set;timers=[];matchCursor=0;started=!1;constructor(A,e={}){this.entries=A.filter(r=>r.type===nl||r.type===oa).slice().sort((r,t)=>r.ts-t.ts).map(r=>({record:r,consumed:!1})),this.speed=va(e.speed),this.onWarning=e.onWarning??(()=>{}),this.baseTs=e.baseTs??this.entries[0]?.record.ts??0}onData(A){return this.callbacks.add(A),()=>this.callbacks.delete(A)}start(){if(!this.started){this.started=!0;for(let A of this.entries){if(A.record.type!==oa)continue;let e=this.speed>0?Math.max(0,(A.record.ts-this.baseTs)/this.speed):0,r=setTimeout(()=>{A.timer=void 0,this.emitEntry(A)},e);r.unref?.(),A.timer=r,this.timers.push(r)}}}stop(){for(let A of this.timers)clearTimeout(A);this.timers.length=0}advanceToNextTx(){for(;this.entries[this.matchCursor]&&this.entries[this.matchCursor].record.type!==nl;)this.matchCursor++;return this.entries[this.matchCursor]}async write(A){let e=new Uint8Array(A),r=this.advanceToNextTx();if(!r){this.onWarning(`replay: unmatched AT command \u2014 recording exhausted, no at-tx left to match. actual: ${Fa(e)}`);return}let t=r.record.bytes??new Uint8Array(0);if(!g6(t,e)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${Fa(t)} actual: ${Fa(e)}`);return}for(r.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===oa;)this.emitEntry(this.entries[this.matchCursor],!0),this.matchCursor++}emitEntry(A,e=!1){if(A.consumed&&!e)return;A.timer&&(clearTimeout(A.timer),A.timer=void 0),A.consumed=!0;let r=w6(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(r)}};var xi="state",ca="console",Fl="command",vl="uto-meta",la="at",_6=new Set([xi,ca,Fl,vl]),S6="not available in replay mode",sl="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function $6(x){return x===xi?"state":x===ca?"console":x===vl?"uto":la}function T6(x,A){return x===ca&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===Fl&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var Ot=class extends al.EventEmitter{logStream;meta;file;speed;transport;atHandler;timers=[];lastState=null;started=!1;stopped=!1;constructor(A){super(),this.meta=A.session,this.file=A.file,this.speed=A.speed??1,this.logStream=new Yr({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",t=>this.emit("log",t));let e=A.recording.recordsFor(A.session.id),r=e.length>0?e[0].ts:0;this.transport=new Zn(e,{speed:A.speed,baseTs:r,onWarning:t=>this.logStream.push(la,t)}),this.atHandler=new ol.AtCommandHandler(this.transport,lr(A.logger)),this.logStream.attachAtHandler(this.atHandler),this.scheduleAnnotations(e,r)}get serial(){return this.meta.serial??this.meta.id}scheduleAnnotations(A,e){let r=va(this.speed);for(let t of A){if(!_6.has(t.type))continue;let i=r>0?Math.max(0,(t.ts-e)/r):0,n=setTimeout(()=>this.emitAnnotation(t),i);n.unref?.(),this.timers.push(n)}}emitAnnotation(A){A.type===xi&&(this.lastState=A.json??null,this.emit(xi,this.lastState)),this.logStream.push($6(A.type),T6(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:sl})}}status(){return{serial:this.serial,connected:!0,apmId:"local",firmwareVersion:null,model:{containers:[]},lastSync:null,buildState:{running:!1,ok:null,at:null},poll:{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0},replay:{mode:"replay",file:this.file,session:this.meta.id,serial:this.meta.serial,deviceId:this.meta.deviceId,appVersion:this.meta.appVersion,platform:this.meta.platform,recordCount:this.meta.recordCount,startedTs:this.meta.startedTs,endedTs:this.meta.endedTs,speed:this.speed}}}unavailable(){throw new Q0(S6,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(la,`> ${A}`),this.atHandler.sendRaw(A)}async state(){return this.lastState}localDataSnapshot(){return null}async configs(){return{configs:{},order:[]}}async applyConfigs(A){let e={};for(let r of Object.keys(A))e[r]={ok:!1,err:sl};return e}async stop(){if(!this.stopped){this.stopped=!0;for(let A of this.timers)clearTimeout(A);this.transport.stop(),this.atHandler.dispose(),await this.logStream.dispose(),this.removeAllListeners()}}};var P6="details";function q6(){return[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles]}async function Ea(x,A,e){let r=e.logger??new XA.Logger;if(e.replay){if(e.serial)throw new Error("--replay cannot be combined with --serial");return I6(x,A,e,r)}if(!e.serial)throw new Error("--serial is required unless --replay is given");let t=new Re({cwd:x,fs:A,serial:e.serial,transportFactory:e.transportFactory,createDevice:e.createDevice,pollIntervalMs:e.pollIntervalMs,flash:e.flash!==!1,build:e.build!==!1,part:e.part??q6(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",E=>r.warn(E instanceof Error?E.message:String(E)));try{await t.start()}catch(E){throw await t.stop(),E}let i,n,F;try{i=await ta({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=el({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=fl(x,t,i.url,e.pov,r))}catch(E){throw await i?.close(),await t.stop(),E}let v=i;return{url:v.url,port:v.port,session:t,apmId:t.status().apmId,async close(){n?.close(),El(F,r),await v.close(),await t.stop()}}}function N6(x,A){return cl.isAbsolute(A)?Qr.URI.file(A):Qr.Utils.joinPath(x,A)}async function I6(x,A,e,r){let t=N6(x,e.replay),i=await sa(t,A);for(let D of i.warnings)r.warn(D);let n=aa(i,e.session),F=new Ot({file:t.fsPath,recording:i,session:n,speed:e.speed,logger:r,logFile:e.logFile});F.on("error",D=>r.warn(D instanceof Error?D.message:String(D))),F.start();let v,E;try{v=await ta({session:F,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.pov&&(E=fl(x,F,v.url,e.pov,r))}catch(D){throw await v?.close(),await F.stop(),D}let u=v;return{url:u.url,port:u.port,session:F,apmId:F.status().apmId,async close(){El(E,r),await u.close(),await F.stop()}}}function fl(x,A,e,r,t){let i=typeof r=="string"&&r.length>0?r:P6,n=Qr.Utils.joinPath(x,"pov",i);if(!(0,ll.existsSync)(Qr.Utils.joinPath(n,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${n.fsPath}`);return}let F=(0,fa.spawn)("npm",["run","dev"],{cwd:n.fsPath,env:{...process.env,MYDATANET_HOST:e},shell:process.platform==="win32",detached:process.platform!=="win32",stdio:["ignore","pipe","pipe"]}),v=E=>{for(let u of E.toString("utf8").split(/\r?\n/)){let D=u.trim();D&&A.logStream.push("pov",D)}};return F.stdout?.on("data",v),F.stderr?.on("data",v),F.on("error",E=>t.error(`POV dev server failed: ${E.message}`)),t.info(`POV dev server: npm run dev in ${n.fsPath} (MYDATANET_HOST=${e})`),F}function El(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,fa.spawn)("taskkill",["/PID",String(x.pid),"/T","/F"],{stdio:"ignore",windowsHide:!0});return}process.kill(-x.pid,"SIGTERM")}catch(e){A.debug(`Could not stop the POV dev server: ${e instanceof Error?e.message:String(e)}`),x.kill()}}var Bl=require("uuid"),M6="b4baec47-0ba4-4e37-b237-8f9cde42b8dd";var Gt=class{domain;auth;logger;userInfo=null;constructor(A,e,r){if(typeof A=="object"){let{serverUrl:t,apiToken:i,authHeader:n,logger:F}=A;this.domain=this.normalizeServerUrl(t),this.auth=n||(i?`Bearer ${i}`:""),this.logger=F}else this.domain=this.normalizeServerUrl(A),typeof e=="string"?(this.auth=`Bearer ${e}`,this.logger=r):(this.auth="",this.logger=e)}setAuth(A){this.auth=A}getDomain(){return this.domain}normalizeServerUrl(A){return!A.startsWith("http://")&&!A.startsWith("https://")?`https://${A}`:A}trimDomain(A){return A.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(A,e,r){let t=`${this.domain}${e}`,i={Authorization:this.auth},n={method:A,headers:i};r&&(r instanceof FormData?n.body=r:(i["Content-Type"]="application/json",n.body=JSON.stringify(r)));let F=await fetch(t,n);if(!F.ok){let v=await F.text().catch(()=>"Unknown error");throw new Error(`HTTP ${F.status}: ${v}`)}return F.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:A,customers:e}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:A.name,email:A.email,group:A.group,customers:e},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(A){throw new Error(`Authentication failed: ${A instanceof Error?A.message:String(A)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(A,e){this.logger?.info(`Uploading development tag ${A}...`);let{applid:r}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${A}`,e);return this.logger?.info(`Development tag uploaded, application ID: ${r}`),r}async getCustomer(A){let{_uid:e,name:r}=await this.fetchJSON("GET",`/api/1/customers/${A}`);return{_uid:e,name:r}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}/site`)}catch{return null}}async getDevice(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}`)}catch{return null}}async getSite(A,e){try{return await this.fetchJSON("GET",`/api/1/customers/${A}/sites/${e}`)}catch{return null}}async createDevelopmentSite(A,e,r){if(this.logger?.info(`Creating development site "${e.name}"...`),e.serialNumber){let i=await this.getSite(A,e.name.toLowerCase());if(i)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${i._uid}/cn-attach-device`,{device_id:e.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${i._uid}`),i._uid}catch(n){if(n.message&&!n.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${n.message}`);else return i._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${A}/sites`,{name:e.name,create:!0,force:!0,note:"This is a Studio development site",applid:e.applicationId,device_id:e.serialNumber,reg_code:r,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(A,e){try{await this.fetchJSON("PUT",`/api/1/sites/${A}`,{name:e})}catch{}}};function Cl(x){return(0,Bl.v5)(x,M6)}async function Ba(x,A,e,r,t,i,n){let F=await K.read(x,A),v=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),E=F.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),u=await K.isApmPartEnabled(x,A,u0.Part.dlo,F),D=u&&r,m=D?r.toUpperCase():`${E}_${v}`,w=D?r:m,j=n||m;return j.length>50&&(e.warn(`Site name "${j}" is too long. Truncating to 50 characters.`),j=j.substring(0,50)),{apmId:Cl(w),applicationId:null,name:j,version:1,serialNumber:u?r:void 0,siteUid:null,customerUid:i}}async function dl(x,A,e,r,t,i,n=!1){if(i.length>0)for(let F of i){let[v,E]=F.split("@");await ex.installDependency(x,A,e,r,t,v,E||null,n)}else await ex.installDependencies(x,A,e,r,t);await ex.installNpmInApmParts(x,A,e)}async function ul(x,A,e,r,t=null,i=!0,n){return await K.validateBasicManifest(x,A,null),mx.buildAll(x,A,e,r,t,i,n)}async function L6(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await K.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function Dl(x,A,e,r,t,i,n,F){e.info("Publishing package...");let v=await L6(i);if(F)await mx.publishArchive(x,A,e,t,r,F,n,v);else return await mx.validatePublishSettings(x,A,t,r),mx.release(x,A,e,r,t,n,v)}async function pl(x,A,e,r,t,i){return mx.pack(x,A,e,r,t,i)}var de=H0.DDEContainerName,bl=H0.allowedRelationTypes,R6=H0.regexRelation,Ut=H0.ContainerType,O6=H0.checkForReservedFieldName,ei=H0.ContainerName,Ca=H0.CONTAINER_DEFS,G6=H0.SERVER_CONTAINER,U6=H0.HISTDATA_CONTAINER,H6=H0.CONFIG_CONTAINER,Sx=H0.TransferDirection,ml=H0.fieldTypeDefinitions,Yx=j0.yamlRangeToLineInformation,da="flexibleContainers",ri;(A=>{class x{constructor(r,t,i){this.manifest=r;this.libraryFiles=t;this.ddeHistory=i}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};flexibleContainers={timeseries:!1,config:!1};historyPlusDirectionContainers=new Set;parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:i,diagnostics:n,parsedYaml:F}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...n),this.libraryDDE.push(i),this.libraryYaml[t.libraryName]=F}),r}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(r){let t=this.previousVersion,i=r.startsWith("timeseries_")?r.substring(11):r;return Object.values(t.containers).find(n=>n.title===i)||null}parseMainDDE(r,t){let{parsedDDE:i,diagnostics:n,parsedYaml:F,lineCounter:v}=this.parseYamlFile(r,t);return n.find(D=>D.level==="error")?{ddeJSON:null,diagnostics:n}:{ddeJSON:this.mergeAndFormat(i,r,v,F),diagnostics:[...this.fileDiagnostics]}}parseYamlFile(r,t,i){this.fileDiagnostics.length=0;let n=new Ge.LineCounter,F=(0,Ge.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null,lineCounter:n};let v=F.contents||new Ge.YAMLMap;return this.validateContainerDefinition(v.items).forEach(u=>{this.validateAllowedContainer(r,u,n,i),this.validateContainerFields(F,r,u,n)}),{parsedDDE:this.yamlDocToDdeJson(F.toJS({mapAsMap:!0}),r,n,F,i),diagnostics:[...this.fileDiagnostics],parsedYaml:F,lineCounter:n}}yamlDocToDdeJson(r,t,i,n,F){F||(this.flexibleContainers=this.readFlexibleContainers(r.get(da)));let v={containers:{},setPointList:{}},E=new Map,u=[...Object.values(de)];if(r.get("cloudProject")){let m=Object.values(this.previousVersion.containers).map(S=>S.title),w=[...r.keys()].filter(S=>!this.reservedTopLevelKeys().has(S)),j=[...new Set([...u,...m,...w])];u.length=0,u.push(...j)}for(let m of u)r.has(m)&&E.set(m,r.get(m));let D=r.get("timeseries");if(D)for(let[m,w]of D)E.set(m,w);for(let[m,w]of E){let{realContainer:j,transferDirection:S,legacyTitle:P,directionFromHistory:N}=this.getRealContainerInformation(m);if(!j){let I=this.findContainerKeyRange(n,m);this.fileDiagnostics.push({file:t,level:"error",message:`Container "${m}" could not be placed - no free container slot available.`,...I?Yx(i,I):{line:0,startCharacter:0,endCharacter:0}});continue}N&&this.isPlusDirection(S)&&this.historyPlusDirectionContainers.add(j);let R=Ca[j],O=m.includes("timeseries_")?m.replace("timeseries_",""):m,e0={name:j,title:O,previousTitle:P,containerType:R.ctype,volatile:m===de.volatile,transferDirection:S,fieldCount:w.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};F&&e0.libraries.push(F);for(let[I,k]of w){let L=[],Z=k.get("type"),W=ml[Z];if(!(!W&&Z!=="array")){if(Z==="array"){let U=[],J=k.get("length"),a0=k.get("fields"),i0={name:I,length:J,library:F||null,fields:[]};e0.arrays[I]=i0;for(let Q=0;Q<J;Q++){let s0={name:I,index:Q};for(let[H,v0]of a0){let l0=ml[v0.get("type")];if(!l0)continue;i0.fields?.find(q0=>q0.name===H)||i0.fields.push({name:H,type:v0.get("type"),byteSize:l0.len||v0.get("bytes")||v0.get("length")});let B0=`${I}[${Q}].${H}`,{fields:d0,shadowInfo:$0}=this.createDDEJsonFields(B0,F,l0,v0);d0.forEach(q0=>{q0.arrayRef=s0}),$0&&(e0.shadows[$0.name]=$0),U.push(...d0)}}L.push(...U)}else{let{arrayInfo:U,fields:J,shadowInfo:a0}=this.createDDEJsonFields(I,F,W,k);U&&(e0.arrays[U.name]=U),a0&&(e0.shadows[a0.name]=a0),L.push(...J)}L.forEach(U=>{U.index=++e0.fieldIndex,e0.fields.push(U),e0.size+=U.byteSize})}}v.containers[j]=e0}return v}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants",da,"timeseries",...Object.values(de)])}getRealContainerInformation(r){let t,i,n,F=!1;if(this.previousVersion){let v=r.startsWith("timeseries_")?r.substring(11):r,{name:E,direction:u,previousTitle:D}=this.findPreviousUsedContainer(v);t=E,i=u,n=D,F=i!==void 0}if(!t){let v=Object.entries(this.usedContainerNames).find(([,E])=>E===r);v&&(t=v[0])}return t||(t=this.findNextFreeContainer(r)),t&&(this.usedContainerNames[t]=r),i||(i=[de.setting,de.command].includes(r)?Sx.down:Sx.up),t&&[ei.configA,ei.configB].includes(t)&&(i=Sx.backendOnly,F=!1),{realContainer:t,transferDirection:i,legacyTitle:n,directionFromHistory:F}}findContainerKeyRange(r,t){let i=r.contents;return i?.items?t.startsWith("timeseries_")?i.items.find(u=>u.key.value==="timeseries")?.value?.items.find(u=>u.key.value===t)?.key.range:i.items.find(F=>F.key.value===t)?.key.range:void 0}findNextFreeContainer(r){if(r===ei.aloha)return ei.aloha;let t=H6;r.startsWith("timeseries_")?t=U6:[de.relations,de.storage].includes(r)&&(t=G6);let i=this.previousVersion?.containers;return i&&(t=t.filter(n=>!Object.hasOwn(i,n))),t.find(n=>!Object.hasOwn(this.usedContainerNames,n))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,i=Object.values(t).find(n=>n.title===r);return{name:i?.name,direction:i?.transferDirection,previousTitle:i?.previousTitle}}createDDEJsonFields(r,t,i,n){let F=n.get("array"),v=[],E,u;if(F){E={name:r,library:t||null,length:F};for(let D=0;D<F;D++){let m=`${r.toLowerCase()}[${D}]`;v.push(this.buildDDEJsonField(m,n,{name:r,index:D},i,t,null))}}else{let D=this.buildDDEJsonField(r,n,null,i,t,null);v.push(D);let m=n.get("shadowFields");if(m){u={name:D.name,byteSize:D.byteSize,byteOffset:D.byteOffset};for(let[w,j]of m){let S=w;r.includes(".")&&(S=r.split(".")[0]+`.${w}`),v.push(this.buildDDEJsonField(S,j,null,i,t,D.name))}}}return{arrayInfo:E,shadowInfo:u,fields:v}}buildDDEJsonField(r,t,i,n,F,v){return{id:r.toLowerCase(),name:r,index:0,library:F||null,byteOffset:0,byteSize:n.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:i,shadowRef:v,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(r,t){return(0,Ge.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(i=>{let F=i.key.value;F==="timeseries"?i.value.items.forEach(v=>{v.key.value=`timeseries_${v.key}`,t.push(v)}):["dde","cloudProject","constants",da].includes(F)||t.push(i)}),t}parseUserLevel(r){if(r==="read-only")return 99;if(r?.startsWith("UL"))return Number(r.substring(2))}parseChannelMode(r){if(r)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[r]??r}parseTriggerUndershoot(r){if(r)return{"greater-or-equal":0,"less-or-equal":1}[r]??r}validateAllowedContainer(r,t,i,n){if(!t.value)return;let v=t.key.value;if(n&&(v.startsWith("aloha")||v.startsWith("timeseries"))){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within a library`,...Yx(i,t.key.range)})}if(K.isAnalytics(this.manifest)&&![de.relations,de.storage].includes(v)){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...Yx(i,t.key.range)})}}validateContainerFields(r,t,i,n){let F=i.value;if(!F)return;let v=i.key.value;Object.hasOwn(this.fieldNamesPerContainer,v)||(this.fieldNamesPerContainer[v]=[]);let E=this.getContainerOfPreviousVersion(v);F.items.forEach(u=>{let m=u.key.value;this.checkForContainerRelation(u,r,t,n),this.validateFieldName(u,v,t,n),this.checkFieldNameLength(u,v,t,n);let w=E?.fields.find(O=>O.id===m.toLowerCase()),j=u.value,S=j.get("type",!0),P=this.resolvePossibleAlias(r,S),N=j.get("bytes",!0),R=this.resolvePossibleAlias(r,N);w&&(S&&P&&w.type!==P&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${w.type}" to "${P}".
2333
+ Changing the type of an existing field can result in data loss or unexpected behaviour.`,...Yx(n,S.range)}),N&&R&&w.byteSize!==R&&this.fileDiagnostics.push({file:t,level:"warning",message:`Byte size changed from '${w.byteSize}' to '${R}'.
2334
+ Changing the size of an existing field can result in data loss or unexpected behaviour.`,...Yx(n,N.range)}))})}checkForContainerRelation(r,t,i,n){let F=r.value.get("fields");F&&F.items.forEach(E=>{this.checkForContainerRelation(E,t,i,n)}),r.value.items.forEach(E=>{let u=E.value;if(u?.value&&R6.exec(`${u.value}`)){let D=E.key.value;if(D){if(!Object.hasOwn(bl,D))return this.fileDiagnostics.push({file:i,level:"error",message:`Property "${D}" does not allow relations.`,...Yx(n,u.range)});if(["scale","offset"].includes(D))return this.fileDiagnostics.push({file:i,level:"warning",message:`Container relations for "${D}" are not available within the dlo source.`,...Yx(n,u.range)})}return this.validateContainerRelation(D,u,t,i,n)}})}validateFieldName(r,t,i,n){let F=this.fieldNamesPerContainer[t],v=r.key,E=v.value;O6(E)&&this.fileDiagnostics.push({file:i,level:"error",message:`Reserved property "${E}" is not allowed.`,...Yx(n,v.range)});let u=r.value.get("shadowFields");u&&u.items.forEach(D=>{this.validateFieldName(D,t,i,n)}),F.includes(E.toLowerCase())?this.fileDiagnostics.push({file:i,level:"error",message:`Field name "${E}" is already occupied`,...Yx(n,v.range)}):F.push(E.toLowerCase())}checkFieldNameLength(r,t,i,n){let F=r.key,v=F.value,u=`DDE_${t.startsWith("timeseries")?t.substring(10):t}_`,D=31-u.length;u.length+v.length>31&&this.fileDiagnostics.push({file:i,level:"error",code:vn.CODE.ddeFieldLength,message:`Field name "${v}" to long. ${D} characters allowed for this field/container.`,...Yx(n,F.range)})}validateContainerRelation(r,t,i,n,F){let[v,E,u]=t.value.split(".",3),[D,m]=v.split("@"),w=D?D.split(":")[1]:null,S=(w&&this.libraryYaml[w]?this.libraryYaml[w]:i).contents?.get(m),P=E.split("[")[0],N=null;if(S){let R=S.get(P);if(R)if(u){let O=R.get("fields");O&&O.get(u)&&(N=O.get(u))}else N=R;else N=this.findRelatedShadowField(S,P)}if(N){let R=bl[r],O=N.get("type");R.includes(O)||this.fileDiagnostics.push({file:n,level:"error",message:`Related field type "${O}" is not allowed for attribute "${r}".`,...Yx(F,t.range)})}else w&&!this.libraryYaml[w]?this.fileDiagnostics.push({file:n,level:"error",message:`Related library "${w}" does not exist.`,...Yx(F,t.range)}):this.fileDiagnostics.push({file:n,level:"error",message:`Related field "${t.value}" does not exist.`,...Yx(F,t.range)})}findRelatedShadowField(r,t){for(let i of r.items){let F=i.value.get("shadowFields");if(!F)continue;let v=F.get(t);if(v)return v}}mergeAndFormat(r,t,i,n){let F={containers:{},setPointList:{}};for(let v of this.libraryDDE)this.combineDDE(F,v);this.combineDDE(F,r);for(let v of Object.values(F.containers)){let E=v.transferDirection;v.transferDirection=this.normalizeTransferDirection(v.name,E),this.warnIfHistoryDirectionNarrowed(v,E,t,i,n)}return this.sortContainerFields(F),this.generateSetPointList(F),F}readFlexibleContainers(r){let t=i=>r instanceof Map?r.get(i)===!0:r&&typeof r=="object"?r[i]===!0:!1;return{timeseries:t("timeseries"),config:t("config")}}flexibleSwitchGroupFor(r){let t=Ca[r]?.ctype;if(t===Ut.hx)return"timeseries";if(t===Ut.cx||t===Ut.aloha)return"config"}flexibleSwitchFor(r){let t=this.flexibleSwitchGroupFor(r);return t?this.flexibleContainers[t]:void 0}isPlusDirection(r){return r===Sx.upPlus||r===Sx.downPlus||r===Sx.bothPlus}normalizeTransferDirection(r,t){let i=Ca[r]?.xmits,n=this.flexibleSwitchFor(r);if(!i||n===void 0)return t;let v=(n?[[Sx.up,Sx.upPlus],[Sx.down,Sx.downPlus],[Sx.both,Sx.bothPlus]]:[[Sx.upPlus,Sx.up],[Sx.downPlus,Sx.down],[Sx.bothPlus,Sx.both]]).find(([E,u])=>t===E&&i.includes(u));return v?v[1]:t}warnIfHistoryDirectionNarrowed(r,t,i,n,F){if(!this.historyPlusDirectionContainers.has(r.name)||!this.isPlusDirection(t)||r.transferDirection===t)return;let v=this.flexibleSwitchGroupFor(r.name),E=r.containerType===Ut.hx?`timeseries_${r.title}`:r.title,u=F?this.findContainerKeyRange(F,E):void 0;this.fileDiagnostics.push({file:i,level:"warning",message:`Container "${r.title}" was transferred with variable length ("${t}") in a previous build but "flexibleContainers.${v}" is not enabled - it now uses fixed-length "${r.transferDirection}". Enable the switch to keep variable-length transfer.`,...u?Yx(n,u):{line:0,startCharacter:0,endCharacter:0}})}combineDDE(r,t){for(let[i,n]of Object.entries(t.containers)){let F=r.containers[i];F?(F.title=n.title,F.knownNames.unshift(n.title),F.libraries.push(...n.libraries),F.fields.push(...n.fields),F.arrays={...F.arrays,...n.arrays},F.shadows={...F.shadows,...n.shadows}):(F=r.containers[i]=structuredClone(n),F.knownNames.unshift(n.title),F.fieldCount=F.fields.length,F.fieldIndex=0);let v=this.initialContainerByteOffset(F);for(let[E,u]of F.fields.entries()){if(u.shadowRef){let D=F.shadows[u.shadowRef];u.byteOffset=D.byteOffset}else u.byteOffset=v,this.updateShadowFieldInformation(r.containers[i],u),v+=u.byteSize||0;E>F.fieldCount-1&&(u.index+=F.fieldIndex)}F.fieldIndex+=n.fieldIndex,F.knownNames=[...new Set(F.knownNames)],F.libraries=[...new Set(F.libraries)],F.fieldCount=F.fields.length}}initialContainerByteOffset(r){return r.containerType===Ut.hx?1:0}updateShadowFieldInformation(r,t){t&&Object.hasOwn(r.shadows,t.name)&&(r.shadows[t.name].byteOffset=t.byteOffset)}sortContainerFields(r){for(let t of Object.values(r.containers)){let{sortedFields:i,containerSize:n}=this.sortFields(t);t.fields=i,t.size=n,t.fieldCount=t.fields.length}}sortFields(r){let t=r.fields.filter(D=>!D.shadowRef),i=r.fields.filter(D=>D.shadowRef),n=[],F=r.name;if(this.previousVersion.containers[F]){let D=this.sortPreviousContainerFields(r,t);n.push(...D)}else n.push(...t);n.forEach(D=>{this.updateShadowFieldInformation(r,D)});let E=n[n.length-1],u=E.byteSize+E.byteOffset;return i.forEach(D=>{D.byteOffset=r.shadows[D.shadowRef].byteOffset,n.push(D)}),{sortedFields:n,containerSize:u}}sortPreviousContainerFields(r,t){let i=r.name,n=this.previousVersion.containers[i],F=[],v=this.initialContainerByteOffset(r);for(let E of n.fields){if(E.shadowRef)continue;let u=t.findIndex(m=>E.id===m.name?.toLowerCase());if(u===-1){v=E.byteOffset+E.byteSize;continue}let D=t[u];if(E.type!==D.type&&E.byteSize!==D.byteSize){v=E.byteOffset+E.byteSize;continue}D.byteOffset=E.byteOffset,t.splice(u,1),F.push(D),v=this.initialContainerByteOffset(r)}if(v>this.initialContainerByteOffset(r)){let E=t.shift();F.push(...this.generatePlaceholderFieldIfNeeded(v,E)),this.updateShadowFieldInformation(r,E)}for(let E of t){if(E.shadowRef)E.byteOffset=r.shadows[E.shadowRef].byteOffset;else{this.updateShadowFieldInformation(r,E);let u=F[F.length-1];u.shadowRef&&(u=r.shadows[u.shadowRef]),E.byteOffset=u.byteOffset+u.byteSize}F.push(E)}return F}generatePlaceholderFieldIfNeeded(r,t){let i=[];if(t)t.byteOffset=r,i.push(t);else{let n={byteOffset:r,byteSize:0,id:"_shadow",library:null,name:"_shadow",type:"shadow",arrayRef:null,shadowRef:null,title:null,index:0};i.push(n)}return i}generateSetPointList(r){r.setPointList={...this.previousVersion.setPointList||{}};for(let t of Object.values(r.containers))for(let i of t.fields)i.chartSetPoint&&(Object.hasOwn(r.setPointList,i.name)||(r.setPointList[i.name]=this.getNextSetpointValue(r.setPointList)))}getNextSetpointValue(r){let t=[...Object.values(r),0];return Math.max(...t)+1}}A.PreCompiler=x})(ri||={});var rA=H0.TransferDirection,SA=H0.parseXMLValueWithRelation,J6=H0.parseXMLBitmask,K6=H0.parseXMLDefaultValue,z6=H0.fieldTypeDefinitions;function ua(x,A){let r=[];function t(F,v=!0){if(v){if(Array.isArray(F)){r.push.apply(r,F);return}r.push(""+F)}}function i(F,v){F!=="mergeofs"&&t(`${F}=${v}`)}t("// DDE STRUCTURE created by Microtronics Studio");let n="source=rm2mraw";for(let[F,v]of Object.entries(A.containers)){F.startsWith("histdata")&&v.transferDirection!==rA.deviceOnly&&(t("<split>"),t(n),t("target="+F),t("key=0"+F.substr(-1,1)),t("</split>")),t("<table>"),i("name",F),i("alias",v.title),i("title",v.title.replace("_"," "));let E={};[rA.none,rA.backendOnly,rA.deviceOnly,rA.down,rA.downPlus].includes(v.transferDirection)&&i("upload","0"),[rA.none,rA.backendOnly,rA.deviceOnly,rA.up,rA.upPlus].includes(v.transferDirection)&&i("download","0"),(K.isIotApp(x)||K.isLibrary(x))&&[rA.up,rA.upPlus].includes(v.transferDirection)&&i("edit","99");for(let u of v.fields){if(u.type==="shadow")continue;let D=V6(u),m=z6[D.type],w=SA("title",D,A)||D.name;!w.startsWith("%")&&D.library&&(w=`${D.library}: ${w}`);let j={title:w,alias:D.name,index:u.index,...E};j.byteofs=`${D.byteOffset}`;for(let[S,P]of Object.entries(m.xml))j[S]=P;Object.hasOwn(m,"xmlOut")&&m.xmlOut(j,D,A),j.units=SA("unit",D,A),j.chmode=SA("channelMode",D,A),j.ialarm_high=SA("chartAlarmHigh",D,A),j.ialarm_low=SA("chartAlarmLow",D,A),j.iwarn_high=SA("chartWarningHigh",D,A),j.iwarn_low=SA("chartWarningLow",D,A),j.hysterese=SA("chartHysteresis",D,A),j.itrigger=SA("chartTriggerThreshold",D,A),j.itriggerus=SA("chartTriggerRelation",D,A),j.setpoint=SA("chartSetPoint",D,A),j.bitmask=J6(D),D.hex&&(j.editmask="%HEX%"),D.readPermission&&(j.view=D.readPermission),D.writePermission&&(j.edit=D.writePermission),D.defaultValue!==void 0&&(j.default=K6(D)),D.utilsTransferInterval===!0&&(j.param0="%FFFF0005%transfer_interval"),t("<field>"),D.library&&t(`// declared by ${D.library} library`,!0);for(let[S,P]of Object.entries(j))P!==void 0&&i(S,`${P}`);t("</field>")}["alerts","applog"].includes(F)||(t("</table>"),t("// "+v.size+" bytes total size"))}return t("<split>"),t(n),t("target=alarm0"),t("key=20"),t("</split>"),t("<split>"),t(n),t("target=applog0"),t("key=28"),t("</split>"),r.join(`
2335
+ `)}function V6(x){let A=structuredClone(x),e=x.arrayRef?.index;if(e===void 0)return A;for(let[r,t]of Object.entries(A))A[r]=j0.patchValueWithArrayInfo(t,e);return A}var Ae=U0(require("semver"));var $A=U0(require("semver"));var ba=require("vscode-uri");var qx=H0.ContainerType,L0=H0.TransferDirection,Ht=H0.regexRelation,W6=H0.CONFIG_CONTAINER,pa=H0.CONTAINER_DEF_DLO_CID_BASE,zt=H0.CONTAINER_DEFS,Kt=H0.fieldTypeDefinitions,jl=j0.isNumeric;function CA(x){let A=Kt[x.type];return A.pwn.rwp||(A.pwn.rwp="%n"),A.pwn.htype||(A.pwn.htype=A.pwn.rwfunc),A.pwn}var ti="Microtronics/dlo-core";function ma(x){return K.isLibrary(x)&&x.name==="dlo-core"?x.version:x.libraryDependencies&&Object.hasOwn(x.libraryDependencies,ti)?ex.rangeToVersion(x.libraryDependencies[ti]):x.libraryDevDependencies&&Object.hasOwn(x.libraryDevDependencies,ti)?ex.rangeToVersion(x.libraryDevDependencies[ti]):null}function X6(x){let A=ma(x);return A===null||$A.gte(A,"0.3.0")?$A.valid(x.version)?x.version:$A.coerce(`${x.version}`):$A.coerce(x.version)?.major}function Da(x){let A=ma(x);if(A===null)return!1;let e=$A.coerce(A);return $A.gte(e,"1.1.0")}function Y6(x){let A=ma(x);if(A===null)return!1;let e=$A.coerce(A);return $A.gte(e,"1.15.0")}var Q6=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function Z6(x){if(x.type==="ustring")return!1;if(x.defaultValue!=="NaN")return!0;let A=CA(x);return!A||A==="skip"?!1:Q6.includes(`${A.rwfunc}`)}function x7(x,A,e){x("PROJECT META");let{dpid:r,registry:t}=e;if(!r)throw new Error('Setting "dpid" is required to generate dlo files');let{auto_inc:i}=$i[r];A("APM_DPID",`${r}`),A(`APM_DPID_${r}`,"1"),A(`APM_DPID_${r.toUpperCase()}`,"1"),A("APM_ID",t?.id||"");let n=X6(e);A("APM_VERSION",`${n}`),A("APM_NAME",`${e.name}`),A("APM_AUTHOR",`${e.publisher}`);for(let[F,v]of Object.entries(i))jl(v)?A(F,`${v}`):A(F,`"${v}"`)}function A7(x,A,e,r){let t=r.flat,{definesWithSource:i}=r;A("GLOBAL DEFINES");for(let[n,F]of Object.entries(t)){let v=i[n]?.comment;if(v){let u=v.split(`
2336
+ `);if(u.length===1)x(`/** ${u[0]} */`);else{x("/**");for(let D of u)x(` * ${D}`);x(" */")}}let E=Object.hasOwn(t,F);e(n,`${F}`,E)}}function e7(x,A,e,r){let t=parseInt(x.substring(6)),i=1<<t;e[t]=A.size,r.cx_isupm|=[L0.both,L0.none,L0.deviceOnly,L0.up,L0.upPlus].includes(A.transferDirection)?i:0,r.cx_isvolatilem|=A.volatile?i:0,r.cx_isdnm|=[L0.both,L0.none,L0.deviceOnly,L0.down,L0.downPlus].includes(A.transferDirection)?i:0,r.cx_isvlm|=[L0.bothPlus,L0.upPlus,L0.downPlus].includes(A.transferDirection)?i:0}function r7(x,A,e,r){let t=parseInt(x.substring(8));e[t]=A.size,r.hx_isvlm|=[L0.upPlus].includes(A.transferDirection)?1<<t:0}function t7(x){return[L0.upPlus].includes(x.transferDirection)}function n7(x,A,e){let r=0,t=Array(10).fill(0),i={cx_isupm:0,cx_isvolatilem:0,cx_isdnm:0,cx_isvlm:0},n=0,F=Array(10).fill(0),v={hx_isvlm:0},E;for(let[D,m]of Object.entries(e.containers))m.containerType===qx.cx&&m.transferDirection!==L0.backendOnly?(e7(D,m,t,i),r=Math.max(r,m.size)):m.containerType===qx.hx?(r7(D,m,F,v),r=Math.max(r,m.size)):m.containerType===qx.aloha&&(E=t7(m),r=Math.max(r,m.size));A("DDE CORE"),x(`#define _DDE_BUF_BYTES (${r}+10)`),x(""),x("// c0 c1 c2 c3 c4 c5 c6 c7 c8 c9"),x(`stock _DDE_CONFIGS_size[] =[ ${t.join(", ")}];`),x(`#define _DDE_CONFIGS_upm 0b${i.cx_isupm.toString(2)} // ..is tolerant when reading back container with under-length`),x(`#define _DDE_CONFIGS_volatilem 0b${i.cx_isvolatilem.toString(2)} // inits container as volatile`),x(`#define _DDE_CONFIGS_downm 0b${i.cx_isdnm.toString(2)} // reading the container expects strict length`),x(`#define _DDE_CONFIGS_varlenm 0b${i.cx_isvlm.toString(2)} // allow partial write (dde_wxxx)`),x(`#define _DDE_CONFIGS_rdef 0b${n.toString(2)} // ..apply defaults reading a container with under-length`),x(""),x("// h0 h1 h2 h3 h4 h5 h6 h7 h8 h9"),x(`stock _DDE_HISTS_size[] =[ ${F.join(", ")}];`),x(`#define _DDE_HISTS_varlenm 0b${v.hx_isvlm.toString(2)} // allow partial write (dde_wxxx)`);let u=[...F];Object.hasOwn(e,"applog")&&u.push(125),Object.hasOwn(e,"alerts")&&u.push(13),x(`#define _DDE_HISTS_maxsize ${Math.max(...u)}`),x(""),E!==void 0&&(x(`#define _DDE_ALOHA_varlen ${E?1:0}`),x(""))}function i7(x,A,e){for(let[r,t]of Object.entries(e.containers)){if(t.containerType==="applog")continue;A(`${t.title.toUpperCase()} - ${t.transferDirection} via #${r}`);let i=pa(t.containerType,t.transferDirection);if(!i){x("// ... container not available in DLO");continue}let n=`DDE_${t.containerType===qx.aloha?qx.aloha:t.title}`,F=zt[r];x(`// ${n}_id - container identifier required for ${n}_read/_write operations`),x(`#define ${n}_id (${i}+${F.cnum||0})`),x(`// ${n}_sz - [byte] container total size`),x(`#define ${n}_sz ${t.size}`),F.cnum!==void 0&&(x(`// ${n}_idx - 0+ container index number`),x(`#define ${n}_idx ${F.cnum}`))}}function gl(x,A,e){let r=[],t=r.push.bind(r);function i(F){t(`
2337
2337
  // === ${F} ===
2338
- `)}function n(F,v,E=!1){let u=ml(v)?"":'"';E&&(u=""),t(`#define ${F} ${u}${v}${u}`)}return Z6(s,n,e),x7(t,s,n,A),t7(t,s,x),n7(t,s,x),r.join(`
2339
- `)}var zt=class{constructor(A,e,r){this.manifest=A;this.ddeMap=e;this.context=r;this.sourceType="pawnSource"}manifest;ddeMap;context;globalVariables=[];pawnGlobalSource=[];pawnHelperSource=[];timeSeriesSource=[];readWriteSource=[];definesSource=[];defaultDefinesSource=[];knownDefines=[];pawnIndent=0;sourceType;pawn(A,e){e&&A==="<"&&this.pawnIndent--,{pawnSource:this.pawnGlobalSource,globalVariables:this.globalVariables,timeseries:this.timeSeriesSource,readWrite:this.readWriteSource,defines:this.definesSource,defaultDefines:this.defaultDefinesSource}[this.sourceType].push(" ".repeat(this.pawnIndent)+(e||A)),e&&A===">"&&this.pawnIndent++}generate(){for(let[A,e]of Object.entries(this.ddeMap.containers))this.context&&!e.libraries.includes(this.context)||!da(e.containerType,e.transferDirection)||!e.fields||!this.context&&!H0.hasContainerAppFields(e)||Kt[A].ctype!==Px.cx&&this.context||(this.generateGlobalVarsForContainer(e),this.generateReadWriteFunctions(e));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,e,r=""){this.sourceType="globalVariables";let t=e?this.variableNameForPawnDefinition(A,e):A;if(e){let s=this.generateCommentForField(e);s&&(Array.isArray(s)?(this.pawn("/**"),s.forEach(n=>{this.pawn(` * ${n}`)}),this.pawn(" */")):this.pawn(`// ${s}`))}this.pawn(`stock ${t}${e?this.initialiserForGlobalVar(e):r};`)}initialiserForGlobalVar(A){return A.defaultDloDefine===void 0||A.arrayRef||!this.isPlainCellField(A)?"":` = ${A.defaultDloDefine}`}insertSection(A){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${A}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(A){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${A.title.replace("_"," ")}'`),this.pawn("");let e=`DDE_${A.title}`,r=this.createFieldDefaultDefines(e,A);this.generateArrayDefines(e,A,r);for(let t of A.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context||t.arrayRef!==null)continue;let s=this.generateFieldVariableName(e,t);this.createGlobalVar(`${s}`,t)}}createFieldDefaultDefines(A,e){let r=new Map;for(let t of e.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context)continue;if(t.arrayRef===null){this.createDefaultDefineForField(`${A}_${t.name}`,t);continue}let s=e.arrays[t.arrayRef.name],n=`${A}_${t.arrayRef.name}`,F="";s.fields?.length&&(F=t.name.split(".")[1],n+=`_${F}`),this.createDefaultDefineForField(n,t),t.defaultDloDefine!==void 0&&(r.has(t.arrayRef.name)||r.set(t.arrayRef.name,new Map),r.get(t.arrayRef.name).set(F,t))}return r}isPlainCellField(A){if(A.type==="struct"||!Jt[A.type])return!1;let e=BA(A);return!e||e==="skip"?!1:!`${e.rwp||""}`.includes("%l")}simpleArrayInitialiser(A){let e=A?.get("");return e?.defaultDloDefine===void 0||!this.isPlainCellField(e)?"":` = [ ${e.defaultDloDefine}, ... ]`}structuredArrayInitialiser(A,e){if(!e?.size||!A.fields?.length)return"";let r=[];for(let s of A.fields){let n=e.get(s.name);if(n!==void 0&&!this.isPlainCellField(n)||!this.isPlainCellField({type:s.type}))return"";r.push(n?.defaultDloDefine??"0")}let t=`[ ${r.join(", ")} ]`;return` = [ ${new Array(A.length).fill(t).join(", ")} ]`}generateArrayDefines(A,e,r){for(let t of Object.values(e.arrays)){if(this.context!==t.library)continue;let s=`${A}_${t.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${s} ${t.length}`),t.fields){for(let v of t.fields)Jt[v.type]?.isBlob&&v.byteSize&&this.addDefine(`${A}_${t.name}_${v.name}_dim`,v.byteSize);let n={...e};n.fields=[],t.fields.forEach(v=>{n.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:v.byteSize,id:v.name,library:t.library,name:v.name,type:v.type,title:null,index:0})});let F=`${A}_${t.name}_def`;this.generateTypeDefinitions(n,F),this.createGlobalVar(`${A}_${t.name}[${s}][${F}]`,void 0,this.structuredArrayInitialiser(t,r.get(t.name)))}else this.createGlobalVar(`${A}_${t.name}[${s}]`,void 0,this.simpleArrayInitialiser(r.get(t.name)))}}generateCommentForField(A){let e=[`@type ${A.type}`];if(A.description&&e.unshift(A.description),A.defaultValue!==void 0){let{value:r,reason:t}=this.parseFieldDefault(A);e.push(`@default ${r} ${t||""}`)}return e}generateFieldVariableName(A,e){let r=`${A}_${e.name}`,t=Object.hasOwn(Jt,e.type)&&Jt[e.type].isBlob,s=e.byteSize;return s&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${e.name}_dim ${s}`),this.pawn(`#define ${A}_${e.name}_iter() for(new i=0;i<${s};i++)`)),this.sourceType="globalVariables",r}generateTypeDefinitions(A,e){this.sourceType="defines";let r=A.fields;if(!r)return;let t=[];this.pawn(">",`#define ${e} [`);for(let s of r){let n=this.generateFieldTypeDefinition(s,A,t,e);n!==null&&this.pawn(n)}this.pawn("<","]")}handleArrayFieldDedup(A,e,r,t){let s=A.arrayRef;if(s){let v=e.arrays[s.name];if(!r.includes(s.name)&&!v.fields)r.push(s.name);else return null}let n=A.arrayRef?A.arrayRef.name:A.name,F=A.arrayRef?`[${t}_${n}_dim]`:"";return{fieldName:n,fld_dim:F}}generateFieldTypeDefinition(A,e,r,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let s=this.handleArrayFieldDedup(A,e,r,t);if(s===null)return null;let{fieldName:n,fld_dim:F}=s,v="";if(A.type==="struct")v="// ."+n+F;else{let E=BA(A);if(!E)return null;E==="skip"?v=`// skipped - .${n}${F}`:v+=E.rwp.replace("%n",`.${n}${F}`).replace("%l",A.byteSize)}return v+=",",A.library&&(v+=` // declared by ${A.library} library`),v}variableNameForPawnDefinition(A,e){let r=BA(e);return r&&r!=="skip"?r.rwp.replace("%n",`${A}`).replace("%l",e.byteSize):A}createDefaultDefineForField(A,e){if(this.sourceType="defaultDefines",e.scale!==void 0&&this.addDefine(`${A}_scale`,e.scale),e.offset!==void 0&&this.addDefine(`${A}_offset`,e.offset),e.defaultValue!==void 0&&Q6(e)){let{value:r,reason:t}=this.parseFieldDefault(e),s=`${A}_default`;this.addDefine(s,r,t)&&(e.defaultDloDefine=s)}}addDefine(A,e,r){return Ut.exec(`${e}`)?!1:(this.knownDefines.includes(A)||(r&&this.pawn(`// ${r}`),this.pawn(`#define ${A} ${e}`),this.knownDefines.push(A)),!0)}generateReadWriteFunctions(A){let e=A.name,r=Kt[e],t=`DDE_${A.containerType===Px.aloha?Px.aloha:A.title}`;[M0.both,M0.bothPlus,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===Px.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[Px.hx,Px.aloha].includes(e.containerType),s=e.containerType===Px.hx,n=e.containerType===Px.aloha,F=`_${A}_write`,v=Ca(this.manifest)?", flags":"",E=s?`stamp${v}`:"",u=Ca(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${s?u:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?Px.aloha:e.title}_id);`),this.generateRWFunctionBody(A,e,"dde_w"),t&&this.pawn(`return dde_wend(${E});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let p=`${A}_transfer`,m=`${A}_persist`,w=this.functionArgumentsForDdeWrite(s,t);if(this.pawn(">",`${this.context?"stock ":""}${p}(${w}) {`),t)this.pawn(`${F}(${E});`);else{let j=e.name.slice(-1);this.pawn(`dde_flush(${j}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${m}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=Ca(this.manifest)?", const flags=0":"";return A?`const stamp=0${r}`:e?"":"bool:immediate=false"}generateReadMethod(A,e){this.sourceType="readWrite";let r=`_${A}_read`;this.pawn(">",`stock ${r}() {`),this.generateRWFunctionBody(A,e,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(A){return A.type==="shadow"||!!A.shadowRef||A.library!==this.context}emitFieldRW(A,e,r,t,s,n,F){if(!e.arrayRef)return this.emitSingleField(A,e,r,t,F);let v=e.arrayRef.name,E=s.get(v);return E?n.has(v)?F:(n.add(v),this.emitArrayLoop(A,E,r)):this.emitSingleField(A,e,r,t,F)}generateRWFunctionBody(A,e,r){let t=e.fields,s=this.analyzeArrayGroups(t,A,e),n=new Set,F=-1;for(let v of t){if(this.isFieldSkipped(v))continue;let E=BA(v);!E||E==="skip"||(F=this.emitFieldRW(A,v,r,E,s,n,F))}}defaultArgumentFor(A,e){return A.defaultDloDefine===void 0?"":e==="dde_r"||X6(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,e,r,t,s){e.byteOffset!==s&&this.pawn(`_dde_idx = ${e.byteOffset};`);let n="";n+=r,n+=t.rwfunc;let F=`${A}_${e.name}`;return n+=`(${F}`,t.rwlen&&(n+=`, ${e.byteSize}`),n+=this.defaultArgumentFor(e,r),this.pawn(n+");"),e.byteOffset+e.byteSize}emitArrayLoop(A,e,r){this.pawn(">",`for (new _i = 0; _i < ${e.dimDefine}; _i++) {`);let t=-1;for(let s of e.templateFields){let n=BA(s);if(!n||n==="skip")continue;let F=s.byteOffset;F!==t&&this.pawn(`_dde_idx = ${F} + (_i * ${e.stride});`),t=F+s.byteSize;let v=`${A}_${s.name.replace(/\[\d+\]/,"[_i]")}`,E=`${r}${n.rwfunc}(${v}`;n.rwlen&&(E+=`, ${s.byteSize}`),E+=this.defaultArgumentFor(s,r),this.pawn(E+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(A,e,r){let t=this.collectArrayFieldsByIndex(A);return this.buildArrayGroups(t,e,r)}collectArrayFieldsByIndex(A){let e=new Map;for(let r of A){if(this.isFieldSkipped(r)||!r.arrayRef)continue;let t=BA(r);if(!t||t==="skip")continue;let{name:s,index:n}=r.arrayRef;e.has(s)||e.set(s,new Map);let F=e.get(s);F.has(n)||F.set(n,[]),F.get(n).push(r)}return e}validateArrayStride(A,e){let r=e[0].byteOffset-A[0].byteOffset;if(r<=0)return null;for(let t=0;t<A.length;t++)if(e[t].byteOffset-A[t].byteOffset!==r)return null;return r}buildArrayGroups(A,e,r){let t=new Map;for(let[s,n]of A){let F=r.arrays[s];if(!F||F.length<2)continue;let v=n.get(0),E=n.get(1);if(!v||!E||v.length===0||E.length===0||v.length!==E.length)continue;let u=this.validateArrayStride(v,E);u!==null&&t.set(s,{arrayName:s,dimDefine:`${e}_${s}_dim`,stride:u,templateFields:v})}return t}parseFieldDefault(A){let e=BA(A),r=A.defaultValue;function t(n,F){return{value:n,reason:F}}switch(A.type){case"astring":case"nstring":case"cstring":return t(`"${r}"`);case"wstring":return t(`''${r}''`);case"ustring":return t(`/* default not supported: ${r} */`);case"binary":{let F=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(F)}}if(r==="NaN"){let n=e.rwfunc;return t(`${n}_NaN`.toUpperCase())}let s=this.parseFieldScaleOffset(A);return s?t(s.calculated,s.reason):(r!==void 0&&!Ut.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!Ut.exec(`${A.offset}`)||!!Ut.exec(`${A.scale}`)||!!Ut.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,s=A.scale!==void 0?Number(A.scale):1;if(s===0)return null;let n=(Number(e)-t)/s,F=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${s}`;return A.type.startsWith("float")?n%1===0&&(n=n.toFixed(1)):(n=Math.round(n),F=`Rounded value of: ${F}`),{calculated:n,reason:F}}return null}};function s7(x){return`${`onUplinkApply_${x}()`};`}function jl(x,A,e){A.libraries.forEach(r=>{let t=j0.generateHashForLibraryName(r);x(` #ifdef _${t}${e}_${A.title}`),x(` _${t}${e}_${A.title}(); // ${r}`),x(" #endif")})}function i7(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(e=>{let t=`_${j0.generateHashForLibraryName(e)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function a7(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))Kt[r].ctype===Px.cx&&([M0.up,M0.upPlus,M0.deviceOnly].includes(t.transferDirection)&&e.push(t),[M0.bothPlus,M0.both,M0.downPlus,M0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:e}}function o7(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkRestore_${r}();`)}),x(""),x(`stock restoreUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),jl(x,e,"Restore"),H0.hasContainerAppFields(e)&&x(` onUplinkRestore_${e.title}();`),x("}");if(x("#pragma warning push"),x("stock _onUplinkRestore(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: restoreUplink${e.name}(); // ${e.name}`);x(" }")}else x(" #pragma warning disable 203"),x(" // no containers to restore");x("}"),x("#pragma warning pop")}function F7(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkApply_${r}();`)}),x(""),x(`stock applyUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),jl(x,e,"Apply"),H0.hasContainerAppFields(e)&&x(` ${s7(e.title)}`),x(" return(OK);"),x("}");if(x("#pragma warning push"),x("stock _onUplinkApply(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: return applyUplink${e.name}(); // ${e.name}`);x(" }"),x(" return ERROR;")}else x(" #pragma warning disable 203"),x(" // no containers to apply"),x(" return OK;");x("}"),x("#pragma warning pop")}function gl(x,A){let e=[],r=e.push.bind(e);i7(r,A);let{containerApply:t,containerRestore:s}=a7(x);return o7(r,s),F7(r,t),e.join(`
2340
- `)}var v7=V6.map(x=>`_DDE_${x}_write`);function yl(x){let A=[],e=A.push.bind(A),r=[...v7];for(let[t,s]of Object.entries(x.containers)){let n=da(s.containerType,s.transferDirection),F=Kt[t];if(!n||!s.fields||F.ctype!==Px.cx)continue;let v=`DDE_${s.name}`,E=`DDE_${s.title}_id`;if([M0.both,M0.bothPlus,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(s.transferDirection)){let u=`_${v}_write`;e(`stock ${u}() {`),e(` dde_wbegin(${E});`),bl(e,s,"write"),e(" return dde_wend();"),e("}"),r.splice(r.indexOf(u),1)}if(F.ctype===Px.cx){let u=`_${v}_read`;e(`stock ${u}() {`),e(` if (dde_rbegin(${E})) return ERROR;`),bl(e,s,"read"),e(" dde_rend();"),e(" return OK;"),e("}")}}if(r.length){e(""),e("// Dummy functions needed by the dde library");for(let t of r)e(`stock ${t}() { return OK; }`)}return A.join(`
2341
- `)}function bl(x,A,e){A.libraries.forEach(r=>{let t=j0.generateHashForLibraryName(r);x(` #ifdef __${t}${A.title}_${e}`),x(` __${t}${A.title}_${e}();`),x(" #endif")}),H0.hasContainerAppFields(A)&&(x(` #ifdef _DDE_${A.title}_${e}`),x(` _DDE_${A.title}_${e}();`),x(" #endif"))}async function kl(x,A){let e=[],r=await ex.getApmPartDependencies(x,A,u0.Part.dlo);await Ht(x,A,e,r0.fileNames.autoInc);let t=await l7(x,A,r);for(let s of r)s.name==="local-data-interface"&&await Ht(x,A,e,r0.fileNames.autoLocalDataInc),e.push(`#include <${s.name}>`),s.name==="dlo-core"&&(e.push(...t),await Ht(x,A,e,r0.fileNames.autoDdeInc.replace("X","app")),await Ht(x,A,e,r0.fileNames.autoDdeInc.replace("X","main")));return r.some(s=>s.name==="dlo-core")&&await Ht(x,A,e,r0.fileNames.autoUplinkInc),e.join(`
2342
- `)}async function l7(x,A,e){let r=[];for(let t of e){let s=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(ua.Utils.joinPath(x,s))&&r.push(`#include "${r0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function Ht(x,A,e,r){let t=ua.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var _l=U0(require("semver")),Sl=require("yaml");var CA=H0.ContainerType,ns=H0.TransferDirection,c7=H0.fieldTypeDefinitions,Zr={$ref:"#/components/parameters/contextId"},f7={$ref:"#/components/parameters/addonId"},E7={$ref:"#/components/parameters/appId"},wl={$ref:"#/components/schemas/histdataResponse"},B7={$ref:"#/components/schemas/histdataRequest"},ss={$ref:"#/components/schemas/rapidM2MStamp"},C7={$ref:"#/components/schemas/timeseriesRequestBase"},ts="rapidM2M Stamp",$A={description:"Successful operation"},$l={parameters:{contextId:{name:"siteUid",in:"path",description:"The site uid",schema:{type:"string"},required:!0},appId:{name:"appUid",in:"path",description:"The app uid",schema:{type:"string"},required:!0}},schemas:{rapidM2MStamp:{type:"string",format:"YYYYMMDDhhmmssSSS",description:'Special format of an UTC timestamp. Important: The trailing 0 are truncated. eg.: "2024-02-10" -> "2024021"'}}},Tl={...structuredClone($l)};Object.assign(Tl.schemas,{histdataResponse:{type:"array",description:"Array of histdata records. Array starts with the youngest record",items:{type:"array",description:'First item is always the rapidM2M timestamp of the record. All following values are in the order of the "select" array.',items:{anyOf:[ss,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:ts,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:ts,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until."},count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set."},offset:{type:"integer",description:"skips the given number of records in the result set."}}},timeseriesRequestBase:{type:"object",additionalProperties:!1,properties:{count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set.",minimum:-1e3,maximum:1e3,default:1e3},from:{type:"string",format:ts,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:ts,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until"},offset:{type:"integer",description:"Skips the given number of records in the result set",minimum:0,default:0}}}});var Vt={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},Ge={401:{description:"Permission denied",...Vt},403:{description:"Forbidden",...Vt},404:{description:"Resource not found",...Vt},500:{description:"Internal error",...Vt}};function pa(x,A,e=null){let r=_l.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:r||""},tags:[],paths:{},components:{parameters:{},schemas:{}}};e?Object.assign(t.components,structuredClone($l)):Object.assign(t.components,structuredClone(Tl));let s=z.isAddon(A),n=z.isAnalytics(A);s&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let F of Object.values(x.containers))e&&(!F.libraries.includes(e)||F.containerType===CA.hx)||!e&&!H0.hasContainerAppFields(F)||F.containerType===CA.aloha||(d7(t,F),D7(t,F,e),m7(t,F,s,n),!s&&!n&&(u7(t,F,e),b7(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,Sl.stringify)(t)}function d7(x,A){x.tags.push({name:rA(A.title),description:`Transfer direction ${A.transferDirection}`})}function rA(x){return x.split("_").join(" ")}function u7(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},s=[];A.containerType===CA.hx&&(r+="Select",s.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let n of A.fields)n.library!==e||n.type==="shadow"||(A.containerType===CA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=Pl(n),!n.readPermission&&!n.writePermission&&s.push(n.id)));t.required=s.length?s:void 0,x.components.schemas[r]=t}function D7(x,A,e=null){let r=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},s=[],n=A.containerType===CA.hx;for(let v of A.fields)v.library!==e||v.type==="shadow"||(t.properties[v.name]=Pl(v),!v.readPermission&&!v.writePermission&&s.push(v.name));t.required=s.length?s:void 0,x.components.schemas[r]=t;let F=t.properties;if(n){t.required=t.required?.map(E=>E.toLowerCase());let v={};for(let[E,u]of Object.entries(t.properties))v[E.toLowerCase()]=u;t.properties=v}if(n){let v={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(F)}}}};x.components.schemas[`${r}RequestSingle`]=v,x.components.schemas[`${r}Request`]={allOf:[C7,v]},t.properties.stamp=ss,s.push("stamp")}}function Pl(x){let e={...c7[x.type].openApi},r=p7(x);return e.default=r,e.example=r,e.description=x.description,e}function p7(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function b7(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([CA.cx,CA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[rA(A.title)],summary:`Retrieve the data of the "${rA(A.title)}" container`,parameters:[Zr],responses:{200:{...$A,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:ss}},{$ref:`#/components/schemas/${A.name}`}]}}}},...Ge}},[ns.down,ns.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[rA(A.title)],summary:`Modify the data of the "${rA(A.title)}" container`,parameters:[Zr],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...$A},204:{...$A},...Ge}});else if(A.containerType===CA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[rA(A.title)],summary:`Retrieve the youngest data of the "${rA(A.title)}" container`,parameters:[Zr,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...$A,content:{"application/json":{schema:wl}}},...Ge}},x.paths[t]={get:{deprecated:!0,tags:[rA(A.title)],summary:`Get the historical data of the "${rA(A.title)}" container.`,parameters:[Zr,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},B7]}}],responses:{200:{...$A,content:{"application/json":{schema:wl}}},...Ge}}}}x.paths[e]=r}function m7(x,A,e=!1,r=!1){let s=A.containerType===CA.hx?"timeseries":"containers",n=[],F=rA(A.title);r||n.push({path:`/api/1/sites/{siteUid}/${s}/${A.title}`,params:[Zr],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${s}/${A.title}`,params:[Zr,f7],tags:[F]}]);let v={path:`/api/1/app-center/apps/{appUid}/${s}/${A.title}`,params:[E7],tags:["app-center"]};r&&v.tags.push(F),n.push(v);let E={get:void 0,put:void 0,post:void 0},u={tags:[],summary:`Retrieve the data of the "${rA(A.title)}" container`,parameters:[],responses:{200:{...$A,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:ss}},{$ref:`#/components/schemas/${A.title}`}]}}}},...Ge}};if([CA.cx,CA.cb].includes(A.containerType)&&(E.get=u,[ns.down,ns.backendOnly].includes(A.transferDirection)&&(E.put={tags:[],summary:`Modify the data of the "${rA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...$A},204:{...$A},...Ge}}),n.forEach(p=>{let m=structuredClone(E);Object.values(m).forEach(w=>{w?.parameters?.unshift(...p.params),w?.tags?.unshift(...p.tags)}),x.paths[p.path]=m})),A.containerType===CA.hx){E.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...$A,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...Ge}},e&&(E.post={tags:[],summary:`Insert data into the "${rA(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...$A},400:{description:"Bad request",...Vt},...Ge}});let p=n[0],m=structuredClone(E);Object.values(m).forEach(L=>{L?.parameters?.unshift(...p.params),L?.tags?.unshift(...p.tags)}),x.paths[p.path]=m;let w={...$A,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},j=`${p.path}/youngest`,S={get:structuredClone(m.get)};S.get.summary=`Get the youngest record of "${A.title}" container`,S.get.responses[200]=w;let P=e?2:1;S.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[j]=S;let N=`${p.path}/oldest`,O={get:structuredClone(m.get)};O.get.summary=`Get the oldest record of "${A.title}" container`,O.get.responses[200]=w,O.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[N]=O}}var Nl=H0.TransferDirection,is=" new szTemp{64};",as=" return strcat(aData, szTemp, sizeof(szTemp));";function Il(x){if(!x.printf&&x.printfFormat==="memtostr")return"bin";if(!x.printf)return null;let A=x.rwp||"%n",e=A.includes("["),t=A.includes("{")||e;if(x.printfFormat==="stampToISOString")return t?null:"stamp";switch(x.printf){case"%d":return t?null:"d";case"%f":return t?null:"f";case"%s":return e?null:"s";default:return null}}function ba(x){if(x.type==="shadow"||x.shadowRef)return null;let A=BA(x);return!A||A==="skip"?null:Il(A)}function Ml(x){return[H0.ContainerType.hx,H0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==Nl.backendOnly}function h7(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=BA(x);return!!A&&A!=="skip"}function j7(x,A,e){let r=x.name.indexOf("]"),t=r>=0?x.name.substring(r+1):"",s=`${x.arrayRef.name}|${t}|${A}`;e.has(s)||e.set(s,{fields:[],formatType:A}),e.get(s).fields.push(x)}function g7(x){let A=[],e=new Map,r=new Set,t=!1;for(let s of x){if(!h7(s))continue;let n=ba(s);s.arrayRef&&n?j7(s,n,e):(A.push(s),n?r.add(n):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function y7(x,A,e){e.sort((E,u)=>E.arrayRef.index-u.arrayRef.index);let r=e.map(E=>E.byteOffset),t=r[1]-r[0];if(!(t>0&&r.every((E,u)=>u===0||E-r[u-1]===t)))return null;let[n,F]=A.split("|"),v=e[0].library?`_${j0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:n,subField:F,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:ba(e[0]),pawnVarBase:`${v}${x}_${n}`}}function k7(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:s}=g7(A),n=[];for(let[F,v]of r){let{fields:E,formatType:u}=v;if(E.length<2){e.push(...E),t.add(u);continue}let p=y7(x,F,E);p?(t.add(u),n.push(p)):(e.push(...E),t.add(u))}return e.sort((F,v)=>F.byteOffset-v.byteOffset),{arrayGroups:n,standaloneFields:e,usedFormats:t,hasInlineFields:s}}function w7(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(Ml(e))for(let r of e.fields){let t=ba(r);t&&A.add(t)}return A}function _7(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(is),x(' sprintf(szTemp, _, "%d", value);'),x(as),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(is),x(' sprintf(szTemp, _, "%.3f", value);'),x(as),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(is),x(' sprintf(szTemp, _, "%s", value);'),x(as),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(is),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(as),x("}")),A.has("bin")&&(x(""),x("stock _DDE_fmt_bin(aData{}, mem{}, dim) {"),x(" #pragma warning disable 224"),x(" memtostr(aData, mem, 0, dim);"),x(" #pragma warning disable 224"),x(" return dim;"),x("}"))}function S7(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function $7(x,A,e){let r=`idx >= ${x} && idx <= ${A}`;if(e===1)return r;let t=x===0?`idx % ${e} == 0`:`(idx - ${x}) % ${e} == 0`;return`${r} && ${t}`}function T7(x,A){let{startOffset:e,endOffset:r,step:t,formatType:s,pawnVarBase:n,subField:F}=A,v=S7(e,t),E=$7(e,r,t);if(x(` if (${E}) {`),s==="bin"){let u=`${n}[${v}]${F}`,p=F?F.substring(1):"",m=p?`${n}_${p}_dim`:`${n}_dim`;x(` return _DDE_fmt_bin(aData, ${u}, ${m});`)}else x(` return _DDE_fmt_${s}(aData, ${n}[${v}]${F});`);x(" }")}function P7(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=BA(e);if(!r||r==="skip")return;let s=`${e.library?`_${j0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,n=Il(r);if(n==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${s}, ${s}_dim);`);else if(n)x(` case ${e.byteOffset}: return _DDE_fmt_${n}(aData, ${s});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let F=s;r.printfFormat&&(F=`(${r.printfFormat}(${F}))`),x(` sprintf(szTemp, _, "${r.printf}", ${F});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function q7(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function ql(x,A,e){let r=e===H0.ContainerType.cx?"c":"h",t=e===H0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[s,n]of Object.entries(A.containers))e===n.containerType&&s.startsWith(t)&&n.transferDirection!==Nl.backendOnly&&q7(x,s,n);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function N7(x,A){let e=k7(A.title,A.fields);x(""),x(`stock _DDE_local_${A.title}(aData{}, idx) {`),e.hasInlineFields&&x(" new szTemp{64};");for(let r of e.arrayGroups)T7(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)P7(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function I7(x,A){for(let[,e]of Object.entries(A.containers))Ml(e)&&N7(x,e)}function Ll(x){let A=[],e=A.push.bind(A),r=w7(x);return _7(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),ql(e,x,H0.ContainerType.cx),ql(e,x,H0.ContainerType.hx),e(" return OK;"),e("}"),I7(e,x),A.join(`
2343
- `)}var Ul=j0.yamlRangeToLineInformation,Wt=r0.filePaths.dde.path,wA;(t0=>{let x=H0.DDEJson,A=j0.convertBlobToString;t0.DDE_SCHEMA=Co;async function r(M,k){let R=await k.readFile(M);return A(R)}t0.readYamlFile=r;async function t(M,k,R=r0.fileNames.mainDDE,Q){let K=[],J=await z.read(M,k),H=await Rl(M,k,J);if(Q)for(let Z of H){let{result:s0,unresolvedKeys:U}=vx.replaceDefineTemplates(Z.yaml,Q);Z.yaml=s0;for(let v0 of U)K.push({file:Z.path,level:"error",message:`Unresolved define template: {{${v0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let Z of H)K.push(...v(Z.path,Z.yaml));let a0=hx.Utils.joinPath(M,Wt,R),n0=await r(a0,k);if(Q){let{result:Z,unresolvedKeys:s0}=vx.replaceDefineTemplates(n0,Q);n0=Z;for(let U of s0)K.push({file:a0,level:"error",message:`Unresolved define template: {{${U}}}`,line:0,startCharacter:0,endCharacter:0})}return K.push(...v(a0,n0)),{manifest:J,libraryFiles:H,main:{path:a0,yaml:n0},diagnostics:K}}t0.validate=t;async function s(M,k,R,Q=r0.fileNames.mainDDE){let K=await z.read(M,k),J=await vx.read(M,k,R),H=await t(M,k,Q,J.flat);if(H.diagnostics.filter(B0=>B0.level==="error").length>0)return{ddeJSON:null,diagnostics:H.diagnostics};let n0=await w(M,k,R),Z=new es.PreCompiler(K,H.libraryFiles,n0),s0=Z.parseLibraries();if(s0.find(B0=>B0.level==="error"))return{ddeJSON:null,diagnostics:[...H.diagnostics,...s0]};let{ddeJSON:v0,diagnostics:c0}=Z.parseMainDDE(H.main.path,H.main.yaml);return{ddeJSON:v0,diagnostics:[...H.diagnostics,...c0]}}t0.compileDDE=s;let n=new Ol.default({strict:!1,allErrors:!0,verbose:!0});(0,Gl.default)(n);let F=n.compile(t0.DDE_SCHEMA);function v(M,k){let R=new os.LineCounter,Q=(0,os.parseDocument)(k,{lineCounter:R,keepSourceTokens:!0}),K=[];for(let a0 of Q.errors){let n0=a0.pos?Ul(R,[a0.pos[0],a0.pos[1],a0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};K.push({file:M,level:"error",message:a0.message,...n0})}if(K.length>0)return K;let J=Q.toJSON();if(!F(J)){let n0=(F.errors||[]).filter(s0=>s0.keyword!=="if"),Z=new Set;for(let s0 of n0){let U=R7(s0);if(Z.has(U))continue;Z.add(U);let v0=G7(Q,R,s0);K.push({file:M,level:"error",message:U,...v0})}}return K}t0.validateJsonSchema=v,t0.PreCompiler=(M,k,R)=>new es.PreCompiler(M,k,R);function u(M,k){return Ba(M,k)}t0.generateMyDatanetXML=u;async function p(M,k,R,Q){let K=await z.read(M,k),J=Ba(K,Q),H=hx.Utils.joinPath(M,r0.filePaths.dist.ddeXmlPath);await k.writeFile(H,J),R.log("Generated",r0.filePaths.dist.ddeXmlPath)}t0.exportMyDatanetXML=p;async function m(M,k,R,Q,K){let J=hx.Utils.joinPath(M,r0.filePaths.studio.auto.dde.historyJson);await k.rm(J).catch(console.error);let H=await z.read(M,k);if(!z.isApp(H)||!H.registry?.id)return;if(!K){R.warn("Could not fetch dde of previous version: No API token provided.");return}let a0=xe.coerce(H.version);try{let s0=(await Fx.getExistingApplication(K,H.publisher,H.registry.id,Q)).versions.find(B0=>!xe.prerelease(B0.version)&&xe.lte(B0.version,a0)),U=s0?.files.find(B0=>B0.name==="dde.json");if(!U){R.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let v0=await fetch(U.downloadUrl,{headers:{...vA(K),...Fx.injectSemverHeader(!0)}});if(v0.status!==200){R.warn(`Could not fetch the dde.json of version "${s0?.version}"`);return}let c0=await v0.text();await k.writeFile(J,c0),R.log(`Saved history.json of previous app version ${s0.version}`)}catch(n0){R.error("Failed to fetch the dde of previous version",n0)}}t0.fetchPreviousHistoryJson=m;async function w(M,k,R){try{let Q=hx.Utils.joinPath(M,r0.filePaths.studio.auto.dde.historyJson);if(await k.stat(Q)){let J=await k.readFile(Q);return JSON.parse(A(J))}let K=hx.Utils.joinPath(M,Wt,"history.json");if(await k.stat(K)){R.warn(`"${r0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${Wt}history.json"`);let J=await k.readFile(K),H=JSON.parse(A(J)),a0=await z.read(M,k),n0=xe.coerce(a0.version)?.version,Z=Object.keys(H||{}).sort(xe.rcompare).find(U=>U!==n0);if(!Z)return null;let s0=H[Z];return{version:Z,...s0}}}catch(Q){R.error("Failed to read history.json",Q)}return R.warn("history.json does not exist"),null}t0.getHistoryJson=w;function j(M,k){return{version:xe.coerce(k.version)?.version||"1.0.0",...structuredClone(M)}}t0.buildHistoryJson=j;async function S(M,k,R,Q){let K=await z.read(M,k),J=j(Q,K),H=hx.Utils.joinPath(M,r0.filePaths.dist.historyJson);await k.writeFile(H,JSON.stringify(J,null," ")),R.log("Generated",r0.filePaths.dist.historyJson)}t0.exportHistoryJson=S;async function P(M,k){return k.rm(hx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.path))}t0.clearAutoDloDir=P;async function N(M,k,R,Q){await P(M,k);let K=await z.read(M,k),J=await Rl(M,k,K),H=await vx.read(M,k,R),a0=hl(Q,H,K),Z=new zt(K,Q,null).generate();for(let Ex of J){let Xx=new zt(K,Q,Ex.libraryName),{globals:TA,helper:PA}=Xx.generate(),lx=[...TA,...PA].join(`\r
2344
- `),tx=r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",Ex.libraryName),tA=hx.Utils.joinPath(M,tx);lx.length&&(R.log("Generated",tx),await k.writeFile(tA,lx))}let s0=yl(Q),U=gl(Q,J.map(Ex=>Ex.libraryName)),v0=Ll(Q),c0=hx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoInc);await k.writeFile(c0,a0),R.log("Generated",r0.filePaths.studio.auto.dlo.autoInc);let B0=hx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoUplinkInc);await k.writeFile(B0,U),R.log("Generated",r0.filePaths.studio.auto.dlo.autoUplinkInc);let d0=hx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoLocalDataInc);await k.writeFile(d0,v0),R.log("Generated",r0.filePaths.studio.auto.dlo.autoLocalDataInc);let $0=hx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await k.writeFile($0,[...Z.globals,...Z.helper].join(`
2345
- `)),R.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let L0=hx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(L0,s0),R.log("Generated",r0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await L(M,k,R)}t0.exportAutoDloFiles=N;async function O(M,k,R,Q){let K=await z.read(M,k),J=z.isLibrary(K),H=hx.Utils.joinPath(M,r0.filePaths.dist.path,"dde-api.yaml");await k.rm(H).catch(()=>{});let a0=hx.Utils.joinPath(M,r0.filePaths.dist.ddeApi);if(await k.writeFile(a0,pa(Q,K)),R.log("Generated",r0.filePaths.dist.ddeApi),J){let n0=hx.Utils.joinPath(M,r0.filePaths.dist.ddeApiPath,`${K.name}.yaml`),Z=pa(Q,K,K.name);Z.length&&(await k.writeFile(n0,Z),R.log("Generated",r0.filePaths.dist.ddeApiPath+`${K.name}.yaml`))}}t0.exportOpenApi=O;async function L(M,k,R){let Q=hx.Utils.joinPath(M,r0.filePaths.studio.auto.dlo.defaultInc),K=await kl(M,k);await k.writeFile(Q,K),R.log("Generated",r0.filePaths.studio.auto.dlo.defaultInc)}t0.exportDefaultInc=L})(wA||={});async function Rl(x,A,e){let r=[],t=await ex.getAll(e);for(let s in t){let n=ex.dependencyToPath(x,s),F=ex.dependencyIdToName(s),v=hx.Utils.joinPath(n,`${Wt}/${F}.dde`);await A.stat(v)&&r.push({libraryName:F,path:v,yaml:await wA.readYamlFile(v,A)})}if(z.isLibrary(e)){let s=hx.Utils.joinPath(x,`/${Wt}/${e.name}.dde`);await A.stat(s)&&r.push({libraryName:e.name,path:s,yaml:await wA.readYamlFile(s,A)})}return r}function M7(x,A,e){if(typeof x=="string")return x;if(typeof x!="object"||x===null)return"";let r=x[A];if(typeof r=="string")return r;if(typeof r!="object"||r===null)return"";let t=e?.missingProperty;return t?r[t]??"":""}function L7(x,A,e,r){let s={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[x];return s?s():e}function R7(x){let A=x.instancePath||"/",e=x.parentSchema,r=M7(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${L7(x.keyword,x.params,t,e)}`}function O7(x,A){let e=A.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),s=x.getIn(t,!0);if(s?.range)return s.range}return null}function G7(x,A,e){let r=O7(x,e.instancePath||"");return r?Ul(A,r):{line:0,startCharacter:0,endCharacter:0}}var ma=require("vscode-uri");var Jl=U0(require("node:child_process"));var Fs;(e=>{async function x(r,t,s){let n=await z.read(r,t);if(await z.isApmPartEnabled(r,t,u0.Part.pov)){s.info("Executing POV build script",n.pov?.details.buildCommand);let{buildCommand:F,workingPath:v}=n.pov.details,E=ma.Utils.joinPath(r,v);try{await Hl(E,F,s)}catch(u){throw u.code?new Error(`APM part '${u0.Part.pov}' has errors. Aborted.`):u}}}e.tryBuildPov=x;async function A(r,t,s){let n=await z.read(r,t);if(await z.isApmPartEnabled(r,t,u0.Part.blo,n)){s.info("Executing BLO build script",n.blo?.buildCommand);let{buildCommand:F,workingPath:v}=n.blo,E=ma.Utils.joinPath(r,v);try{await Hl(E,F,s)}catch(u){throw u.code?new Error(`APM part '${u0.Part.blo}' has errors. Aborted.`):u}}}e.tryBuildBlo=A})(Fs||={});async function Hl(x,A,e){return new Promise((r,t)=>{Jl.exec(A,{cwd:x.fsPath,env:process.env},(s,n,F)=>{e.log(n),F&&e.error(F),s&&t(s),r(null)})})}var Xt=require("@gera2ld/tarjs"),Kl=j0.convertBlobToString,ha=require("pako"),mx;(p=>{class x extends Error{_mergedDiagnostics;constructor(w,j){super(w),this.name="BuildError",this._mergedDiagnostics=j}get mergedDiagnostics(){return this._mergedDiagnostics}}p.BuildError=x;async function A(m,w,j,S,P,N=!0,O){N=U7(j,N),await H7(m,w,j,S,P,N);try{let M=await vx.read(m,w,j);await J7(m,w,j,M)}catch(M){j.warn("Could not generate defines.ts:",M)}let L={[u0.Part.dde]:[],[u0.Part.dlo]:[],[u0.Part.dfiles]:[]},t0={[u0.Part.dde]:K7,[u0.Part.dlo]:z7,[u0.Part.dfiles]:V7};try{for(let M of[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles])if(N.includes(M)&&(j.info(`Building ${M.toUpperCase()}...`),await Q7(j,M,t0[M],L[M],m,w)))return L}catch(M){throw O?new x(M?.message,L):M}return N.includes(u0.Part.pov)?await Fs.tryBuildPov(m,w,j):j.info("Skipping pov build"),N.includes(u0.Part.blo)?await Fs.tryBuildBlo(m,w,j):j.info("Skipping blo build"),await W7(m,w,j),await X7(m,w,j),j.done("Project build completed."),L}p.buildAll=A;async function e(m,w,j,S,P,N,O){let L=await z.read(m,w);return z.isLibrary(L)?(j.info("Library project detected. Publishing library..."),s(m,w,j,P,S)):(j.info("App project detected. Publishing app..."),t(m,w,j,P,N,O,S))}p.release=e;async function r(m,w,j,S,P,N){let O=await z.read(m,w),L=`${O.name}-${O.version}.tar.gz`,t0=null;if(z.isLibrary(O))j.info("Library project detected. Packing library..."),t0=await zl(m,w,j,P,S);else{j.info("App project detected. Packing app...");let k=await Vl(m,w,j,P,N,S);t0=await xp(k)}let M=fr.Utils.joinPath(m,L);t0!==null?(await w.writeFile(M,t0),j.done(`Packaged: ${M.fsPath}`)):j.error(`Could not create archive: ${M.fsPath}`)}p.pack=r;async function t(m,w,j,S,P,N=null,O){if(!await u0.validateAccess(m,w,S,!1,O))throw new Error("Could not validate access to application");let t0=await Vl(m,w,j,S,P,O);await u0.updateProfile(m,w,S,O);let M=await u0.publishTag(m,w,S,t0,O);if(N!==null){let k=await z.read(m,w);await Fx.updateExistingApplicationVersion(S,k.publisher,k.registry?.id,k.version,{allowedBackends:N},O),j.info(`Tag "${M.version}" with phase "${M.phase}" shared with ${[...N].join(";")}!`)}j.done(`Tag "${M.version}" with phase "${M.phase}" published!`)}p.releaseAPM=t;async function s(m,w,j,S,P){let N=await z.read(m,w),O=await zl(m,w,j,S,P);await Or.publishPackage(S,N,O,P),j.done(`Library "${N.publisher}/${N.name}" with version "${N.version}" published!`)}p.releaseLibrary=s;async function n(m,w,j,S,P,N,O,L=null){if(N==="*"){let J=await z.read(m,w);N=`${J.name}-${J.version}.tar.gz`,j.info(`Publishing detected archive package "${N}"...`)}let t0=fr.Utils.joinPath(m,N);if(!await w.stat(t0))throw new Error(`Archive package not found: ${t0.fsPath}`);let M=await w.readFile(t0),k=await Ap(M),{publisher:R,registry:Q,version:K}=k;z.isLibrary(k)?(await Or.publishPackage(S,k,M,P),j.done(`Library "${R}/${k.name}" with version "${k.version}" published!`)):(await Fx.updateApplicationFile(S,R,Q.id,K,"app.tar.gz",M,P),await Fx.updateExistingApplicationVersion(S,R,Q?.id,K,{allowedBackends:L||void 0,phase:O||void 0},P),j.info(`Tag "${K}" with phase "${O}" shared with ${[...L||""].join(";")}!`),j.done(`Tag "${K}" with phase "${O}" published!`))}p.publishArchive=n;async function F(m,w,j){let S;try{S=await w.readFile(fr.Utils.joinPath(m,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(Kl(S)===r0.readme(j))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}p.getReadmeFile=F;async function v(m,w){let j;try{j=await w.readFile(fr.Utils.joinPath(m,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(Kl(j)===r0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return j}p.getChangelogFile=v;async function E(m,w,j,S){let P=await z.read(m,w),{name:N,publisher:O,description:L}=P,t0=z.validateProjectName(N,z.isLibrary(P));if(t0)throw new Error(`name: ${t0}`);let M=z.validateDescription(L);if(M)throw new Error(`description: ${M}`);let k=z.validatePublisherId(O)||await z.validatePublisherOnline(j,O,S);if(k)throw new Error(`publisher: ${k}`);if(!z.isLibrary(P)&&(await z.validateApplicationIcon(m,w,P),z.validateEngineSettings(P),z.isApp(P)&&await z.isApmPartEnabled(m,w,u0.Part.dlo,P)&&(!P.dpid||!Object.values(z.DeviceProfiles).includes(P.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}p.validatePublishSettings=E;async function u(m,w){let j=ha.ungzip(m),S=await Xt.TarReader.load(j),P={};for(let N of S.fileInfos)w.includes(N.name)&&(P[N.name]=S.getFileBlob(N.name));return P}p.readFilesFromTarGz=u})(mx||={});function U7(x,A){let e=Object.values(u0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function H7(x,A,e,r,t,s){await ex.validateMinimumBackendVersion(x,A,e),s.includes(u0.Part.dde)&&await wA.fetchPreviousHistoryJson(x,A,e,r,t)}async function J7(x,A,e,r){r.defaultsOnly?(await vx.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",r0.filePaths.dist.definesTs,"(defaults only)"),await vx.exportDefinesTs(x,A,r,r0.filePaths.dist.definesAppTs),e.log("Generated",r0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await vx.exportDefinesTs(x,A,r),e.log("Generated",r0.filePaths.dist.definesTs))}async function K7(x,A,e){let r=await wA.compileDDE(x,A,e);if(r.ddeJSON){await wA.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await z.read(x,A);z.isLibrary(t)||await wA.exportHistoryJson(x,A,e,r.ddeJSON),await wA.exportOpenApi(x,A,e,r.ddeJSON),await z.isApmPartEnabled(x,A,u0.Part.dlo,t)&&(await wA.exportAutoDloFiles(x,A,e,r.ddeJSON),await ln.exportDloConfig(x,A,e))}return r.diagnostics}async function z7(x,A,e){let r=new Rr(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function V7(x,A,e){return await fn.process(x,A,e)}async function W7(x,A,e){let r=await z.read(x,A);z.isLibrary(r)&&await $r.normalizeLibraryParts(x,A,r,e)}async function X7(x,A,e){let r=fr.Utils.joinPath(x,r0.fileNames.reportTemplate);if(await A.stat(r)){let t=fr.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${r0.fileNames.reportTemplate}" to dist folder.`)}}function Y7(x,A,e){A!==u0.Part.dlo&&Z7(x,e);let r=e.some(t=>t.level==="error");if(r){let t=`APM part "${A}" has errors. Aborted.`;throw new Error(t)}return r}async function Q7(x,A,e,r,t,s){let n=await e(t,s,x);return r.push(...n),Y7(x,A,n)}function Z7(x,A){A.forEach(e=>{let r=e.startCharacter?`:${e.startCharacter+1}`:"",t=`${e.file.path}:${e.line+1}${r} - ${e.message}`;e.level==="error"?x.error(t):e.level==="warning"?x.warn(t):x.log(t)})}async function zl(x,A,e,r,t){let s=await z.read(x,A);return await z.validateBasicManifest(x,A,s),await mx.buildAll(x,A,e,t,r),await Or.createArchive(x,A)}async function Vl(x,A,e,r,t,s){if(!Object.values(u0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await z.validateBasicManifest(x,A,null),await mx.buildAll(x,A,e,s,r),await u0.createTag(x,A,t)}async function xp(x){let A=new Xt.TarWriter;for(let[r,t]of x.entries())if(r==="tag"){let s=t;A.addFile(r,s)}else{let s=t;A.addFile(r,await s.arrayBuffer())}let e=await A.write();return ha.gzip(await e.arrayBuffer())}async function Ap(x){let A=await ep(x,["studio.json","src/studio.json"]);if(!A)throw new Error('Could not find "studio.json" in archive');return JSON.parse(await A.text())}async function ep(x,A){let e=ha.ungzip(x),r=await Xt.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var rp=j0.bufferToBase64;var u0;(u=>{let x;(O=>(O.alpha="alpha",O.beta="beta",O.rc="rc",O.release="release",O.stage="stage",O.passive="passive",O.withdrawn="withdrawn"))(x=u.TagPhase||={});let A;(P=>(P.dde="dde",P.dlo="dlo",P.pov="pov",P.blo="blo",P.dfiles="dfiles"))(A=u.Part||={});function e(p){let{description:m,name:w,pov:j,engines:S,blo:P,publisher:N,type:O}=p,L=O||z.ProjectTypes.app,t0={name:w,abstract:m,author:N||"",pov_location:z.PovLocation.embedded,pov_details_lowlevel:!1,required_be:S?.backend,required_hwfw:S?.hwfw?.join(";"),required_productcode:S?.productId?.join(";"),blo_level:P?.accessLevel||z.BloAccessLevel.restricted,pip_id:""};return j&&j.details&&(t0.pov_location=z.PovLocation.pure,t0.pov_details_lowlevel=!!j.details.lowLevel),L==="addon"&&(t0.required_hwfw=void 0,t0.required_productcode=void 0,t0.addon_max_sources=1,t0.addon_max_per_site=p.maxInstancesPerSite),t0}u.createBaseTagHeader=e;async function r(p,m,w){let j=await z.read(p,m),S=e(j),P={version:j.version,...S,phase:w};return await s(p,m,j,P)}u.createTag=r;async function t(p,m){let w=await z.read(p,m),S={...e(w),blo_autostart:!1};return s(p,m,w,S)}u.createDevTag=t;async function s(p,m,w,j){let S=new FormData;S.append("tag",JSON.stringify(j)),S.append(`src/${z.fileName}`,new Blob([await z.readAsBlob(p,m)]));let P=new Blob([await m.readFile(de.Utils.joinPath(p,r0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",P),w.icon){let O=await m.readFile(de.Utils.joinPath(p,w.icon)),L=rp(O);S.append("previews/00.png",new Blob([`data:image/png;base64,${L}`]))}if(Object.hasOwn(j,"phase")){let O=await mx.getReadmeFile(p,m,j.name),L=await mx.getChangelogFile(p,m);S.append("previews/README.md",new Blob([O])),S.append("previews/CHANGELOG.md",new Blob([L]))}if(await z.isApmPartEnabled(p,m,"dlo")){let O=new Blob([await m.readFile(de.Utils.joinPath(p,r0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",O)}if(await z.isApmPartEnabled(p,m,"pov",w)){await Wl(p,m,S,r0.filePaths.dist.povDetailsPath,"bin/pov/details");let O=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');S.append("bin/pov/list/index.html",new Blob([O]))}let N=await m.findFiles(p,`${r0.filePaths.dist.dfilesPath}/*`);for(let O of N){let L=new Blob([await m.readFile(O)]);S.append(`bin/dfiles/${de.Utils.basename(O)}`,L)}return await z.isApmPartEnabled(p,m,"blo",w)&&await Wl(p,m,S,r0.filePaths.dist.bloPath,"bin/blo"),await tp(p,m,S),S}u.createBuffer=s;async function n(p,m,w,j,S){let P=await z.read(p,m);j||await mx.validatePublishSettings(p,m,w,S);let{registry:N}=P,O=N?.id;if(!O&&!j&&(O=await F(p,m,w,P,S)),O){let{publisher:L}=P;if(!L)return null;try{return{id:O,...await Fx.getExistingApplication(w,L,O,S)}}catch(t0){if(t0?.message==="Could not find given application")return O=await F(p,m,w,P,S),{id:O,...await Fx.getExistingApplication(w,L,O,S)}}}return null}u.validateAccess=n;async function F(p,m,w,j,S){let P="myDatanet",{publisher:N,name:O,description:L,registry:t0}=j,M={id:t0?.id,type:j.type||z.ProjectTypes.app,name:O,targetSystem:P,description:L||"",allowedBackends:null};z.isAddon(j)&&(M.allowedApplications=null);let k=await Fx.createNewApplication(w,N,M,S);if(!k)throw new Error("Failed to initialize application");return j.registry={id:k},await z.write(p,m,j),k}u.registerNew=F;async function v(p,m,w,j){let{name:S,publisher:P,description:N,registry:O}=await z.read(p,m),L=O?.id;await Fx.updateExistingApplication(w,P,L,{description:N,name:S,targetSystem:"myDatanet"},j)}u.updateProfile=v;async function E(p,m,w,j,S){let{publisher:P,registry:N,version:O}=await z.read(p,m);return await Fx.publishApplicationVersion(w,P,N?.id,O,j,S)}u.publishTag=E})(u0||={});async function Wl(x,A,e,r,t){let s=await A.findFiles(x,`${r}/**`);for(let n of s){let F=de.Utils.joinPath(x,r),v=n.path.substring(F.path.length+1),E=new Blob([await A.readFile(de.Utils.joinPath(x,`${r}/${v}`))]);e.append(`${t}/${v}`,E)}}async function tp(x,A,e){let r=de.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);if(await A.stat(r)){let s=new Blob([await A.readFile(r)]);e.append("bin/pov/mdn_report_template.json",s)}let t=de.Utils.joinPath(x,r0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var cc=U0(require("update-notifier"));function np(x,A,e){let r=A.split(".").filter(Boolean),t=x;for(let s=0;s<r.length;s++){let n=r[s];s===r.length-1?t[n]=e:((typeof t[n]!="object"||t[n]===null||Array.isArray(t[n]))&&(t[n]={}),t=t[n])}}function Xl(x){let A=x.args,e={};for(let r=0;r<A.length;r++){let t=A[r];if(!t||!t.startsWith("--"))continue;let[s,n]=t.split("=",2),F=s.slice(2),v=!0;if(n!==void 0)v=n;else{let E=A[r+1];E&&!E.startsWith("-")&&(v=E,r++)}F.includes(".")?np(e,F,v):e[F]=v}return e}var Yl=require("vscode-uri");function ls(x){return x instanceof Error?x.message:String(x)}function ue(x,A){return{success:!1,errorCode:x,message:A}}async function ip(x){let{cwd:A,fs:e,logger:r,env:t,apiToken:s,options:n}=x;r.info("[1/5] Building project...");try{let F=n.part?n.part:!0;return await z.validateBasicManifest(A,e,null),await mx.buildAll(A,e,r,t,s,F,!0),r.done("Build completed successfully"),null}catch(F){return ue(1,`Build failed: ${ls(F)}`)}}async function ap(x){let{logger:A,options:e}=x,{serial:r}=e;A.info(`[2/5] Searching for USB device with serial: ${r}...`);let t=await Qi(r,A);return t||ue(2,`USB device not found with serial number: ${r}`)}async function op(x){let{cwd:A,fs:e,logger:r,options:t}=x,{serial:s,debug:n}=t;r.info("[3/5] Uploading binary to USB device...");let F=Yl.Utils.joinPath(A,r0.filePaths.dist.mainAmxPath),v=await Wr(s,F,e,r,n);return v.success?(r.done("USB upload completed"),null):ue(3,`USB upload failed: ${v.message}`)}async function Fp(x,A){A.info("[4/5] Connecting to myDatanet server...");try{return await x.authenticate()}catch(e){return ue(4,`myDatanet authentication failed: ${ls(e)}`)}}async function vp(x,A,e){if(A)try{let s=await x.getCustomer(A);return e.info(`Using customer: ${s.name} (${s._uid})`),s._uid}catch{return ue(6,`Customer "${A}" not found`)}let r=await x.getCustomers();if(r.length===0)return ue(6,"No customers available. Please specify --customer or set MYDATANET_CUSTOMER");if(r.length===1)return e.info(`Using customer: ${r[0].name} (${r[0]._uid})`),r[0]._uid;let t=r.map(s=>s.name).join(", ");return ue(6,`Multiple customers available. Please specify --customer or set MYDATANET_CUSTOMER. Available: ${t}`)}async function lp(x,A,e,r){let t=await x.getDeviceSite(A);t&&(t.app.phase==="dev"&&(e.apmId=t.app.apmid,e.applicationId=t.app.appl_id),e.siteUid=t._uid,e.siteName=t.name,e.customerUid=t.customer_uid,r.info(`Found existing site: ${t.name}`))}async function cp(x,A,e){let{cwd:r,fs:t,logger:s}=x;s.info("Creating development APM tag...");try{let n=await u0.createDevTag(r,t),F=await A.uploadDevTag(e.apmId,n);return e.applicationId=F,s.done("Development tag uploaded"),null}catch(n){return ue(5,`Development tag upload failed: ${ls(n)}`)}}async function fp(x,A,e,r){r.info("[5/5] Creating development site...");try{return e.siteUid?(e.siteName!==e.name&&await x.updateSiteName(e.siteUid,e.name),r.info(`Reusing existing site: ${e.siteUid}`),{siteUid:e.siteUid,siteName:e.name}):{siteUid:await x.createDevelopmentSite(A,e),siteName:e.name}}catch(t){return ue(6,`Site creation failed: ${ls(t)}`)}}function Ql(x,A,e=!1){if(e){x.log(JSON.stringify({siteUid:A.siteUid,siteName:A.siteName,apmId:A.apmId}));return}x.done("Development deployment completed successfully!"),x.info(""),x.info("=== Deployment Summary ==="),x.info(`Site UID: ${A.siteUid}`),x.info(`Site Name: ${A.siteName}`),x.info(`APM ID: ${A.apmId}`),x.info("==========================")}function vs(x){return typeof x=="object"&&x!==null&&"errorCode"in x}async function Zl(x,A,e,r,t,s){let n={cwd:x,fs:A,logger:e,env:r,apiToken:t,options:s},{serial:F,server:v,customer:E,mdnToken:u}=s;e.info("Starting development deployment...");let p=await ip(n);if(p)return p;let m=await ap(n);if(vs(m))return m;let w=await op(n);if(w)return w;let j=new Gt(v,u,e),S=await Fp(j,e);if(vs(S))return S;let P=S,N=await vp(j,E,e);if(vs(N))return N;let O=N,L=await Ea(x,A,e,F,P.name,O,s.siteName);await lp(j,F,L,e);let t0=await cp(n,j,L);if(t0)return t0;let M=await fp(j,O,L,e);return vs(M)?M:{success:!0,siteUid:M.siteUid,siteName:M.siteName,apmId:L.apmId,message:"Development deployment completed successfully"}}var ga="/api/1/sites/dev";function Ep(x){let A=x.toUpperCase();return A!=="GET"&&A!=="HEAD"}function ya(x,A){let e=x;try{e=JSON.parse(x).err??x}catch{}let r=/E_NOT_FOUND|E_BAD_REQUEST/.test(e)?8:/E_FORBIDDEN|E_METHOD_NOT_ALLOWED/.test(e)?9:3;return new Q0(`${e} (HTTP ${A})`,r)}function Bp(x,A){let e=x.replace(/\/+$/,""),r={"content-type":"application/json"};A&&(r.authorization=`Bearer ${A}`);let t=async(s,n,F)=>fetch(`${e}${n}`,{method:s,headers:r,body:F===void 0?void 0:JSON.stringify(F)});return{async api(s){let n=Ep(s.method)&&s.body?JSON.parse(s.body):void 0,F=await t(s.method,s.path,n),v={};return F.headers.forEach((E,u)=>{v[u]=E}),{status:F.status,headers:v,body:await F.text()}},async dev(s,n,F){let v=await t(s,n,F),E=await v.text();if(!v.ok)throw ya(E,v.status);return E?JSON.parse(E):null},async close(){}}}async function Cp(x){if(!x.serial)throw new Q0("--serial is required unless --url is given",2);let A=new Le({cwd:x.cwd,fs:x.fs,serial:x.serial,logger:x.logger,build:!1,flash:!1,pollIntervalMs:0,waitMs:x.waitMs,env:x.env,apiToken:x.apiToken,debug:x.debug,createDevice:x.createDevice,transportFactory:x.transportFactory});A.on("error",e=>x.logger.warn(e instanceof Error?e.message:String(e)));try{await A.start()}catch(e){throw await A.stop(),e}return{api:e=>A.handleApi(e),async dev(e,r,t){return dp(A,e,r,t)},close:()=>A.stop()}}function xc(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}async function dp(x,A,e,r){let t=r??{},[s,n=""]=e.split("?"),F=new URLSearchParams(n);switch(`${A} ${s}`){case"GET /dev/status":return x.status();case"GET /dev/state":return x.state();case"POST /dev/at":return{cmd:t.cmd,response:await x.at(String(t.cmd))};case"POST /dev/flash":return x.flash(typeof t.file=="string"?t.file:void 0);case"POST /dev/sync":return x.sync(Array.isArray(t.tags)?t.tags:void 0);case"GET /dev/logs":return{lastSeq:x.logStream.lastSeq,records:x.logStream.since(xc(F,"since",0),xc(F,"limit",500))};default:throw new Q0(`unsupported route ${A} ${s}`,3)}}async function up(x){return x.url?Bp(x.url,x.token):Cp(x)}async function De(x,A){let e=await up(x);try{return await A(e)}finally{await e.close()}}function ka(x){if(x.status>=400)throw ya(x.body,x.status);return x.status===204||x.body===""?null:JSON.parse(x.body)}async function Ac(x){return De(x,A=>A.dev("GET","/dev/status"))}async function ec(x,A){let[e,r]=gp(A);return De(x,async t=>{let s=ka(await t.api({path:`${ga}/containers/${encodeURIComponent(e)}`,method:"GET"}));if(!r)return s;let n=s??{},F=Object.keys(n).find(v=>v.toLowerCase()===r.toLowerCase());if(F===void 0)throw new Q0(`unknown field '${r}' in container '${e}'`,8);return{[F]:n[F]}})}async function rc(x,A,e){let r;try{r=JSON.parse(e)}catch(t){throw new Q0(`values are not valid JSON: ${t instanceof Error?t.message:String(t)}`,8)}return De(x,async t=>{let s=`${ga}/containers/${encodeURIComponent(A)}`,n=await t.api({path:s,method:"PUT",body:JSON.stringify(r)});if(n.status>=400)throw ya(n.body,n.status);let F=n.headers["x-mt-mirror"]==="stale";return{container:A,written:r,stale:F,record:ka(await t.api({path:s,method:"GET"}))}})}async function tc(x,A,e){let r={count:-(e.limit??100)};e.from&&(r.from=e.from),e.to&&(r.until=e.to);let t=`${ga}/timeseries/${encodeURIComponent(A)}?json=${encodeURIComponent(JSON.stringify(r))}`;return De(x,async s=>ka(await s.api({path:t,method:"GET"})))}async function nc(x,A){return De(x,e=>e.dev("POST","/dev/at",{cmd:A}))}async function sc(x){return De(x,A=>A.dev("GET","/dev/state"))}async function ic(x,A){return De(x,e=>e.dev("POST","/dev/flash",A?{file:A}:{}))}async function ac(x,A){return De(x,e=>e.dev("POST","/dev/sync",A?{tags:A}:{}))}var Dp={marker:"live"};function oc(x){return typeof x=="object"&&x!==null&&x.marker==="live"}async function pp(x){return(await x.dev("GET","/dev/logs?since=0&limit=1")).lastSeq}function bp(x,A){let e=x.filter?new RegExp(x.filter):null,r=x.sinceMs!==void 0?Date.now()-x.sinceMs:void 0;return t=>{let s=t;r!==void 0&&(s.ts??0)<r||(!e||e.test(s.text??""))&&A(t)}}var ja=500;async function Fc(x,A,e){return await x.dev("GET",`/dev/logs?since=${A}&limit=${e}`)}function vc(x,A,e){let r=A;for(let t of x)r=Math.max(r,t.seq),e(t);return r}async function mp(x,A,e){let r=await Fc(x,A,ja);return vc(r.records,A,e)}async function hp(x,A,e){let r=ja;for(;;){let t=await Fc(x,A,r);if(t.records.length<r)return vc(t.records,A,e);r+=ja}}async function jp(x,A,e,r){let t=A;for(;Date.now()<e;)await new Promise(s=>setTimeout(s,500)),t=await mp(x,t,r)}async function lc(x,A,e){let r=bp(A,e);await De(x,async t=>{let s=A.follow===!0,n=A.replay===!0||A.sinceMs!==void 0,F=s&&!n?await pp(t):0,v=await hp(t,F,r);s&&n&&e(Dp),s&&await jp(t,v,Date.now()+(A.durationMs??3e4),r)})}function gp(x){let A=x.indexOf(".");return A<0?[x,void 0]:[x.slice(0,A),x.slice(A+1)]}var uA=new J0.Command,cs=(0,cc.default)({pkg:js}),g0=new WA.Logger,yp=()=>process.env.NODE_ENV==="local-dev-app"?"./dev/pets-demo":process.env.NODE_ENV==="local-dev-lib"?"./dev/modbus-master":process.env.NODE_ENV==="local-dev-addon"?"./dev/addon":process.env.NODE_ENV==="local-dev-analytics"?"./dev/analytics":"",pe=xt.Utils.joinPath(xt.URI.file(process.cwd()),yp());uA.version(js.version).usage("<command>");uA.description(`This tool is used to manage the project dependencies, build, package and publish the project.
2338
+ `)}function n(F,v,E=!1){let u=jl(v)?"":'"';E&&(u=""),t(`#define ${F} ${u}${v}${u}`)}return x7(i,n,e),A7(t,i,n,A),n7(t,i,x),i7(t,i,x),r.join(`
2339
+ `)}var Vt=class{constructor(A,e,r){this.manifest=A;this.ddeMap=e;this.context=r;this.sourceType="pawnSource"}manifest;ddeMap;context;globalVariables=[];pawnGlobalSource=[];pawnHelperSource=[];timeSeriesSource=[];readWriteSource=[];definesSource=[];defaultDefinesSource=[];knownDefines=[];pawnIndent=0;sourceType;pawn(A,e){e&&A==="<"&&this.pawnIndent--,{pawnSource:this.pawnGlobalSource,globalVariables:this.globalVariables,timeseries:this.timeSeriesSource,readWrite:this.readWriteSource,defines:this.definesSource,defaultDefines:this.defaultDefinesSource}[this.sourceType].push(" ".repeat(this.pawnIndent)+(e||A)),e&&A===">"&&this.pawnIndent++}generate(){for(let[A,e]of Object.entries(this.ddeMap.containers))this.context&&!e.libraries.includes(this.context)||!pa(e.containerType,e.transferDirection)||!e.fields||!this.context&&!H0.hasContainerAppFields(e)||zt[A].ctype!==qx.cx&&this.context||(this.generateGlobalVarsForContainer(e),this.generateReadWriteFunctions(e));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,e,r=""){this.sourceType="globalVariables";let t=e?this.variableNameForPawnDefinition(A,e):A;if(e){let i=this.generateCommentForField(e);i&&(Array.isArray(i)?(this.pawn("/**"),i.forEach(n=>{this.pawn(` * ${n}`)}),this.pawn(" */")):this.pawn(`// ${i}`))}this.pawn(`stock ${t}${e?this.initialiserForGlobalVar(e):r};`)}initialiserForGlobalVar(A){return A.defaultDloDefine===void 0||A.arrayRef||!this.isPlainCellField(A)?"":` = ${A.defaultDloDefine}`}insertSection(A){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${A}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(A){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${A.title.replace("_"," ")}'`),this.pawn("");let e=`DDE_${A.title}`,r=this.createFieldDefaultDefines(e,A);this.generateArrayDefines(e,A,r);for(let t of A.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context||t.arrayRef!==null)continue;let i=this.generateFieldVariableName(e,t);this.createGlobalVar(`${i}`,t)}}createFieldDefaultDefines(A,e){let r=new Map;for(let t of e.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context)continue;if(t.arrayRef===null){this.createDefaultDefineForField(`${A}_${t.name}`,t);continue}let i=e.arrays[t.arrayRef.name],n=`${A}_${t.arrayRef.name}`,F="";i.fields?.length&&(F=t.name.split(".")[1],n+=`_${F}`),this.createDefaultDefineForField(n,t),t.defaultDloDefine!==void 0&&(r.has(t.arrayRef.name)||r.set(t.arrayRef.name,new Map),r.get(t.arrayRef.name).set(F,t))}return r}isPlainCellField(A){if(A.type==="struct"||!Kt[A.type])return!1;let e=CA(A);return!e||e==="skip"?!1:!`${e.rwp||""}`.includes("%l")}simpleArrayInitialiser(A){let e=A?.get("");return e?.defaultDloDefine===void 0||!this.isPlainCellField(e)?"":` = [ ${e.defaultDloDefine}, ... ]`}structuredArrayInitialiser(A,e){if(!e?.size||!A.fields?.length)return"";let r=[];for(let i of A.fields){let n=e.get(i.name);if(n!==void 0&&!this.isPlainCellField(n)||!this.isPlainCellField({type:i.type}))return"";r.push(n?.defaultDloDefine??"0")}let t=`[ ${r.join(", ")} ]`;return` = [ ${new Array(A.length).fill(t).join(", ")} ]`}generateArrayDefines(A,e,r){for(let t of Object.values(e.arrays)){if(this.context!==t.library)continue;let i=`${A}_${t.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${i} ${t.length}`),t.fields){for(let v of t.fields)Kt[v.type]?.isBlob&&v.byteSize&&this.addDefine(`${A}_${t.name}_${v.name}_dim`,v.byteSize);let n={...e};n.fields=[],t.fields.forEach(v=>{n.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:v.byteSize,id:v.name,library:t.library,name:v.name,type:v.type,title:null,index:0})});let F=`${A}_${t.name}_def`;this.generateTypeDefinitions(n,F),this.createGlobalVar(`${A}_${t.name}[${i}][${F}]`,void 0,this.structuredArrayInitialiser(t,r.get(t.name)))}else this.createGlobalVar(`${A}_${t.name}[${i}]`,void 0,this.simpleArrayInitialiser(r.get(t.name)))}}generateCommentForField(A){let e=[`@type ${A.type}`];if(A.description&&e.unshift(A.description),A.defaultValue!==void 0){let{value:r,reason:t}=this.parseFieldDefault(A);e.push(`@default ${r} ${t||""}`)}return e}generateFieldVariableName(A,e){let r=`${A}_${e.name}`,t=Object.hasOwn(Kt,e.type)&&Kt[e.type].isBlob,i=e.byteSize;return i&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${e.name}_dim ${i}`),this.pawn(`#define ${A}_${e.name}_iter() for(new i=0;i<${i};i++)`)),this.sourceType="globalVariables",r}generateTypeDefinitions(A,e){this.sourceType="defines";let r=A.fields;if(!r)return;let t=[];this.pawn(">",`#define ${e} [`);for(let i of r){let n=this.generateFieldTypeDefinition(i,A,t,e);n!==null&&this.pawn(n)}this.pawn("<","]")}handleArrayFieldDedup(A,e,r,t){let i=A.arrayRef;if(i){let v=e.arrays[i.name];if(!r.includes(i.name)&&!v.fields)r.push(i.name);else return null}let n=A.arrayRef?A.arrayRef.name:A.name,F=A.arrayRef?`[${t}_${n}_dim]`:"";return{fieldName:n,fld_dim:F}}generateFieldTypeDefinition(A,e,r,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let i=this.handleArrayFieldDedup(A,e,r,t);if(i===null)return null;let{fieldName:n,fld_dim:F}=i,v="";if(A.type==="struct")v="// ."+n+F;else{let E=CA(A);if(!E)return null;E==="skip"?v=`// skipped - .${n}${F}`:v+=E.rwp.replace("%n",`.${n}${F}`).replace("%l",A.byteSize)}return v+=",",A.library&&(v+=` // declared by ${A.library} library`),v}variableNameForPawnDefinition(A,e){let r=CA(e);return r&&r!=="skip"?r.rwp.replace("%n",`${A}`).replace("%l",e.byteSize):A}createDefaultDefineForField(A,e){if(this.sourceType="defaultDefines",e.scale!==void 0&&this.addDefine(`${A}_scale`,e.scale),e.offset!==void 0&&this.addDefine(`${A}_offset`,e.offset),e.defaultValue!==void 0&&Z6(e)){let{value:r,reason:t}=this.parseFieldDefault(e),i=`${A}_default`;this.addDefine(i,r,t)&&(e.defaultDloDefine=i)}}addDefine(A,e,r){return Ht.exec(`${e}`)?!1:(this.knownDefines.includes(A)||(r&&this.pawn(`// ${r}`),this.pawn(`#define ${A} ${e}`),this.knownDefines.push(A)),!0)}generateReadWriteFunctions(A){let e=A.name,r=zt[e],t=`DDE_${A.containerType===qx.aloha?qx.aloha:A.title}`;[L0.both,L0.bothPlus,L0.none,L0.deviceOnly,L0.up,L0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===qx.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[qx.hx,qx.aloha].includes(e.containerType),i=e.containerType===qx.hx,n=e.containerType===qx.aloha,F=`_${A}_write`,v=Da(this.manifest)?", flags":"",E=i?`stamp${v}`:"",u=Da(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${i?u:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?qx.aloha:e.title}_id);`),this.generateRWFunctionBody(A,e,"dde_w"),t&&this.pawn(`return dde_wend(${E});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let D=`${A}_transfer`,m=`${A}_persist`,w=this.functionArgumentsForDdeWrite(i,t);if(this.pawn(">",`${this.context?"stock ":""}${D}(${w}) {`),t)this.pawn(`${F}(${E});`);else{let j=e.name.slice(-1);this.pawn(`dde_flush(${j}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${m}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=Da(this.manifest)?", const flags=0":"";return A?`const stamp=0${r}`:e?"":"bool:immediate=false"}generateReadMethod(A,e){this.sourceType="readWrite";let r=`_${A}_read`;this.pawn(">",`stock ${r}() {`),this.generateRWFunctionBody(A,e,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(A){return A.type==="shadow"||!!A.shadowRef||A.library!==this.context}emitFieldRW(A,e,r,t,i,n,F){if(!e.arrayRef)return this.emitSingleField(A,e,r,t,F);let v=e.arrayRef.name,E=i.get(v);return E?n.has(v)?F:(n.add(v),this.emitArrayLoop(A,E,r)):this.emitSingleField(A,e,r,t,F)}generateRWFunctionBody(A,e,r){let t=e.fields,i=this.analyzeArrayGroups(t,A,e),n=new Set,F=-1;for(let v of t){if(this.isFieldSkipped(v))continue;let E=CA(v);!E||E==="skip"||(F=this.emitFieldRW(A,v,r,E,i,n,F))}}defaultArgumentFor(A,e){return A.defaultDloDefine===void 0?"":e==="dde_r"||Y6(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,e,r,t,i){e.byteOffset!==i&&this.pawn(`_dde_idx = ${e.byteOffset};`);let n="";n+=r,n+=t.rwfunc;let F=`${A}_${e.name}`;return n+=`(${F}`,t.rwlen&&(n+=`, ${e.byteSize}`),n+=this.defaultArgumentFor(e,r),this.pawn(n+");"),e.byteOffset+e.byteSize}emitArrayLoop(A,e,r){this.pawn(">",`for (new _i = 0; _i < ${e.dimDefine}; _i++) {`);let t=-1;for(let i of e.templateFields){let n=CA(i);if(!n||n==="skip")continue;let F=i.byteOffset;F!==t&&this.pawn(`_dde_idx = ${F} + (_i * ${e.stride});`),t=F+i.byteSize;let v=`${A}_${i.name.replace(/\[\d+\]/,"[_i]")}`,E=`${r}${n.rwfunc}(${v}`;n.rwlen&&(E+=`, ${i.byteSize}`),E+=this.defaultArgumentFor(i,r),this.pawn(E+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(A,e,r){let t=this.collectArrayFieldsByIndex(A);return this.buildArrayGroups(t,e,r)}collectArrayFieldsByIndex(A){let e=new Map;for(let r of A){if(this.isFieldSkipped(r)||!r.arrayRef)continue;let t=CA(r);if(!t||t==="skip")continue;let{name:i,index:n}=r.arrayRef;e.has(i)||e.set(i,new Map);let F=e.get(i);F.has(n)||F.set(n,[]),F.get(n).push(r)}return e}validateArrayStride(A,e){let r=e[0].byteOffset-A[0].byteOffset;if(r<=0)return null;for(let t=0;t<A.length;t++)if(e[t].byteOffset-A[t].byteOffset!==r)return null;return r}buildArrayGroups(A,e,r){let t=new Map;for(let[i,n]of A){let F=r.arrays[i];if(!F||F.length<2)continue;let v=n.get(0),E=n.get(1);if(!v||!E||v.length===0||E.length===0||v.length!==E.length)continue;let u=this.validateArrayStride(v,E);u!==null&&t.set(i,{arrayName:i,dimDefine:`${e}_${i}_dim`,stride:u,templateFields:v})}return t}parseFieldDefault(A){let e=CA(A),r=A.defaultValue;function t(n,F){return{value:n,reason:F}}switch(A.type){case"astring":case"nstring":case"cstring":return t(`"${r}"`);case"wstring":return t(`''${r}''`);case"ustring":return t(`/* default not supported: ${r} */`);case"binary":{let F=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(F)}}if(r==="NaN"){let n=e.rwfunc;return t(`${n}_NaN`.toUpperCase())}let i=this.parseFieldScaleOffset(A);return i?t(i.calculated,i.reason):(r!==void 0&&!Ht.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!Ht.exec(`${A.offset}`)||!!Ht.exec(`${A.scale}`)||!!Ht.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,i=A.scale!==void 0?Number(A.scale):1;if(i===0)return null;let n=(Number(e)-t)/i,F=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${i}`;return A.type.startsWith("float")?n%1===0&&(n=n.toFixed(1)):(n=Math.round(n),F=`Rounded value of: ${F}`),{calculated:n,reason:F}}return null}};function s7(x){return`${`onUplinkApply_${x}()`};`}function yl(x,A,e){A.libraries.forEach(r=>{let t=j0.generateHashForLibraryName(r);x(` #ifdef _${t}${e}_${A.title}`),x(` _${t}${e}_${A.title}(); // ${r}`),x(" #endif")})}function a7(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(e=>{let t=`_${j0.generateHashForLibraryName(e)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function o7(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))zt[r].ctype===qx.cx&&([L0.up,L0.upPlus,L0.deviceOnly].includes(t.transferDirection)&&e.push(t),[L0.bothPlus,L0.both,L0.downPlus,L0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:e}}function F7(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkRestore_${r}();`)}),x(""),x(`stock restoreUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),yl(x,e,"Restore"),H0.hasContainerAppFields(e)&&x(` onUplinkRestore_${e.title}();`),x("}");if(x("#pragma warning push"),x("stock _onUplinkRestore(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: restoreUplink${e.name}(); // ${e.name}`);x(" }")}else x(" #pragma warning disable 203"),x(" // no containers to restore");x("}"),x("#pragma warning pop")}function v7(x,A){A.length&&x("");for(let e of A)e.knownNames.forEach(r=>{x(`forward onUplinkApply_${r}();`)}),x(""),x(`stock applyUplink${e.name}() {`),x(` _DDE_${e.name}_read();`),yl(x,e,"Apply"),H0.hasContainerAppFields(e)&&x(` ${s7(e.title)}`),x(" return(OK);"),x("}");if(x("#pragma warning push"),x("stock _onUplinkApply(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: return applyUplink${e.name}(); // ${e.name}`);x(" }"),x(" return ERROR;")}else x(" #pragma warning disable 203"),x(" // no containers to apply"),x(" return OK;");x("}"),x("#pragma warning pop")}function kl(x,A){let e=[],r=e.push.bind(e);a7(r,A);let{containerApply:t,containerRestore:i}=o7(x);return F7(r,i),v7(r,t),e.join(`
2340
+ `)}var l7=W6.map(x=>`_DDE_${x}_write`);function wl(x){let A=[],e=A.push.bind(A),r=[...l7];for(let[t,i]of Object.entries(x.containers)){let n=pa(i.containerType,i.transferDirection),F=zt[t];if(!n||!i.fields||F.ctype!==qx.cx)continue;let v=`DDE_${i.name}`,E=`DDE_${i.title}_id`;if([L0.both,L0.bothPlus,L0.none,L0.deviceOnly,L0.up,L0.upPlus].includes(i.transferDirection)){let u=`_${v}_write`;e(`stock ${u}() {`),e(` dde_wbegin(${E});`),hl(e,i,"write"),e(" return dde_wend();"),e("}"),r.splice(r.indexOf(u),1)}if(F.ctype===qx.cx){let u=`_${v}_read`;e(`stock ${u}() {`),e(` if (dde_rbegin(${E})) return ERROR;`),hl(e,i,"read"),e(" dde_rend();"),e(" return OK;"),e("}")}}if(r.length){e(""),e("// Dummy functions needed by the dde library");for(let t of r)e(`stock ${t}() { return OK; }`)}return A.join(`
2341
+ `)}function hl(x,A,e){A.libraries.forEach(r=>{let t=j0.generateHashForLibraryName(r);x(` #ifdef __${t}${A.title}_${e}`),x(` __${t}${A.title}_${e}();`),x(" #endif")}),H0.hasContainerAppFields(A)&&(x(` #ifdef _DDE_${A.title}_${e}`),x(` _DDE_${A.title}_${e}();`),x(" #endif"))}async function _l(x,A){let e=[],r=await ex.getApmPartDependencies(x,A,u0.Part.dlo);await Jt(x,A,e,t0.fileNames.autoInc);let t=await c7(x,A,r);for(let i of r)i.name==="local-data-interface"&&await Jt(x,A,e,t0.fileNames.autoLocalDataInc),e.push(`#include <${i.name}>`),i.name==="dlo-core"&&(e.push(...t),await Jt(x,A,e,t0.fileNames.autoDdeInc.replace("X","app")),await Jt(x,A,e,t0.fileNames.autoDdeInc.replace("X","main")));return r.some(i=>i.name==="dlo-core")&&await Jt(x,A,e,t0.fileNames.autoUplinkInc),e.join(`
2342
+ `)}async function c7(x,A,e){let r=[];for(let t of e){let i=t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(ba.Utils.joinPath(x,i))&&r.push(`#include "${t0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function Jt(x,A,e,r){let t=ba.Utils.joinPath(x,t0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var $l=U0(require("semver")),Tl=require("yaml");var dA=H0.ContainerType,ii=H0.TransferDirection,f7=H0.fieldTypeDefinitions,Zr={$ref:"#/components/parameters/contextId"},E7={$ref:"#/components/parameters/addonId"},B7={$ref:"#/components/parameters/appId"},Sl={$ref:"#/components/schemas/histdataResponse"},C7={$ref:"#/components/schemas/histdataRequest"},si={$ref:"#/components/schemas/rapidM2MStamp"},d7={$ref:"#/components/schemas/timeseriesRequestBase"},ni="rapidM2M Stamp",TA={description:"Successful operation"},Pl={parameters:{contextId:{name:"siteUid",in:"path",description:"The site uid",schema:{type:"string"},required:!0},appId:{name:"appUid",in:"path",description:"The app uid",schema:{type:"string"},required:!0}},schemas:{rapidM2MStamp:{type:"string",format:"YYYYMMDDhhmmssSSS",description:'Special format of an UTC timestamp. Important: The trailing 0 are truncated. eg.: "2024-02-10" -> "2024021"'}}},ql={...structuredClone(Pl)};Object.assign(ql.schemas,{histdataResponse:{type:"array",description:"Array of histdata records. Array starts with the youngest record",items:{type:"array",description:'First item is always the rapidM2M timestamp of the record. All following values are in the order of the "select" array.',items:{anyOf:[si,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:ni,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:ni,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until."},count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set."},offset:{type:"integer",description:"skips the given number of records in the result set."}}},timeseriesRequestBase:{type:"object",additionalProperties:!1,properties:{count:{type:"integer",description:"limits the number of returned records, negative values will count the records from the end of the result set.",minimum:-1e3,maximum:1e3,default:1e3},from:{type:"string",format:ni,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:ni,description:"items to include must be younger, UTC w/o time saving. Reply set is limited like that: from <= item.stamp < until"},offset:{type:"integer",description:"Skips the given number of records in the result set",minimum:0,default:0}}}});var Wt={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},Ue={401:{description:"Permission denied",...Wt},403:{description:"Forbidden",...Wt},404:{description:"Resource not found",...Wt},500:{description:"Internal error",...Wt}};function ha(x,A,e=null){let r=$l.coerce(A.version)?.version,t={openapi:"3.0.3",info:{description:A.description,title:A.name,version:r||""},tags:[],paths:{},components:{parameters:{},schemas:{}}};e?Object.assign(t.components,structuredClone(Pl)):Object.assign(t.components,structuredClone(ql));let i=K.isAddon(A),n=K.isAnalytics(A);i&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let F of Object.values(x.containers))e&&(!F.libraries.includes(e)||F.containerType===dA.hx)||!e&&!H0.hasContainerAppFields(F)||F.containerType===dA.aloha||(u7(t,F),p7(t,F,e),h7(t,F,i,n),!i&&!n&&(D7(t,F,e),m7(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,Tl.stringify)(t)}function u7(x,A){x.tags.push({name:tA(A.title),description:`Transfer direction ${A.transferDirection}`})}function tA(x){return x.split("_").join(" ")}function D7(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},i=[];A.containerType===dA.hx&&(r+="Select",i.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let n of A.fields)n.library!==e||n.type==="shadow"||(A.containerType===dA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=Nl(n),!n.readPermission&&!n.writePermission&&i.push(n.id)));t.required=i.length?i:void 0,x.components.schemas[r]=t}function p7(x,A,e=null){let r=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},i=[],n=A.containerType===dA.hx;for(let v of A.fields)v.library!==e||v.type==="shadow"||(t.properties[v.name]=Nl(v),!v.readPermission&&!v.writePermission&&i.push(v.name));t.required=i.length?i:void 0,x.components.schemas[r]=t;let F=t.properties;if(n){t.required=t.required?.map(E=>E.toLowerCase());let v={};for(let[E,u]of Object.entries(t.properties))v[E.toLowerCase()]=u;t.properties=v}if(n){let v={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(F)}}}};x.components.schemas[`${r}RequestSingle`]=v,x.components.schemas[`${r}Request`]={allOf:[d7,v]},t.properties.stamp=si,i.push("stamp")}}function Nl(x){let e={...f7[x.type].openApi},r=b7(x);return e.default=r,e.example=r,e.description=x.description,e}function b7(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function m7(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([dA.cx,dA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[tA(A.title)],summary:`Retrieve the data of the "${tA(A.title)}" container`,parameters:[Zr],responses:{200:{...TA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:si}},{$ref:`#/components/schemas/${A.name}`}]}}}},...Ue}},[ii.down,ii.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[tA(A.title)],summary:`Modify the data of the "${tA(A.title)}" container`,parameters:[Zr],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...TA},204:{...TA},...Ue}});else if(A.containerType===dA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[tA(A.title)],summary:`Retrieve the youngest data of the "${tA(A.title)}" container`,parameters:[Zr,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...TA,content:{"application/json":{schema:Sl}}},...Ue}},x.paths[t]={get:{deprecated:!0,tags:[tA(A.title)],summary:`Get the historical data of the "${tA(A.title)}" container.`,parameters:[Zr,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},C7]}}],responses:{200:{...TA,content:{"application/json":{schema:Sl}}},...Ue}}}}x.paths[e]=r}function h7(x,A,e=!1,r=!1){let i=A.containerType===dA.hx?"timeseries":"containers",n=[],F=tA(A.title);r||n.push({path:`/api/1/sites/{siteUid}/${i}/${A.title}`,params:[Zr],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${i}/${A.title}`,params:[Zr,E7],tags:[F]}]);let v={path:`/api/1/app-center/apps/{appUid}/${i}/${A.title}`,params:[B7],tags:["app-center"]};r&&v.tags.push(F),n.push(v);let E={get:void 0,put:void 0,post:void 0},u={tags:[],summary:`Retrieve the data of the "${tA(A.title)}" container`,parameters:[],responses:{200:{...TA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:si}},{$ref:`#/components/schemas/${A.title}`}]}}}},...Ue}};if([dA.cx,dA.cb].includes(A.containerType)&&(E.get=u,[ii.down,ii.backendOnly].includes(A.transferDirection)&&(E.put={tags:[],summary:`Modify the data of the "${tA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...TA},204:{...TA},...Ue}}),n.forEach(D=>{let m=structuredClone(E);Object.values(m).forEach(w=>{w?.parameters?.unshift(...D.params),w?.tags?.unshift(...D.tags)}),x.paths[D.path]=m})),A.containerType===dA.hx){E.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...TA,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...Ue}},e&&(E.post={tags:[],summary:`Insert data into the "${tA(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...TA},400:{description:"Bad request",...Wt},...Ue}});let D=n[0],m=structuredClone(E);Object.values(m).forEach(O=>{O?.parameters?.unshift(...D.params),O?.tags?.unshift(...D.tags)}),x.paths[D.path]=m;let w={...TA,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},j=`${D.path}/youngest`,S={get:structuredClone(m.get)};S.get.summary=`Get the youngest record of "${A.title}" container`,S.get.responses[200]=w;let P=e?2:1;S.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[j]=S;let N=`${D.path}/oldest`,R={get:structuredClone(m.get)};R.get.summary=`Get the oldest record of "${A.title}" container`,R.get.responses[200]=w,R.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[N]=R}}var Ml=H0.TransferDirection,ai=" new szTemp{64};",oi=" return strcat(aData, szTemp, sizeof(szTemp));";function Ll(x){if(!x.printf&&x.printfFormat==="memtostr")return"bin";if(!x.printf)return null;let A=x.rwp||"%n",e=A.includes("["),t=A.includes("{")||e;if(x.printfFormat==="stampToISOString")return t?null:"stamp";switch(x.printf){case"%d":return t?null:"d";case"%f":return t?null:"f";case"%s":return e?null:"s";default:return null}}function ja(x){if(x.type==="shadow"||x.shadowRef)return null;let A=CA(x);return!A||A==="skip"?null:Ll(A)}function Rl(x){return[H0.ContainerType.hx,H0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==Ml.backendOnly}function j7(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=CA(x);return!!A&&A!=="skip"}function g7(x,A,e){let r=x.name.indexOf("]"),t=r>=0?x.name.substring(r+1):"",i=`${x.arrayRef.name}|${t}|${A}`;e.has(i)||e.set(i,{fields:[],formatType:A}),e.get(i).fields.push(x)}function y7(x){let A=[],e=new Map,r=new Set,t=!1;for(let i of x){if(!j7(i))continue;let n=ja(i);i.arrayRef&&n?g7(i,n,e):(A.push(i),n?r.add(n):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function k7(x,A,e){e.sort((E,u)=>E.arrayRef.index-u.arrayRef.index);let r=e.map(E=>E.byteOffset),t=r[1]-r[0];if(!(t>0&&r.every((E,u)=>u===0||E-r[u-1]===t)))return null;let[n,F]=A.split("|"),v=e[0].library?`_${j0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:n,subField:F,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:ja(e[0]),pawnVarBase:`${v}${x}_${n}`}}function w7(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:i}=y7(A),n=[];for(let[F,v]of r){let{fields:E,formatType:u}=v;if(E.length<2){e.push(...E),t.add(u);continue}let D=k7(x,F,E);D?(t.add(u),n.push(D)):(e.push(...E),t.add(u))}return e.sort((F,v)=>F.byteOffset-v.byteOffset),{arrayGroups:n,standaloneFields:e,usedFormats:t,hasInlineFields:i}}function _7(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(Rl(e))for(let r of e.fields){let t=ja(r);t&&A.add(t)}return A}function S7(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(ai),x(' sprintf(szTemp, _, "%d", value);'),x(oi),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(ai),x(' sprintf(szTemp, _, "%.3f", value);'),x(oi),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(ai),x(' sprintf(szTemp, _, "%s", value);'),x(oi),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(ai),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(oi),x("}")),A.has("bin")&&(x(""),x("stock _DDE_fmt_bin(aData{}, mem{}, dim) {"),x(" #pragma warning disable 224"),x(" memtostr(aData, mem, 0, dim);"),x(" #pragma warning disable 224"),x(" return dim;"),x("}"))}function $7(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function T7(x,A,e){let r=`idx >= ${x} && idx <= ${A}`;if(e===1)return r;let t=x===0?`idx % ${e} == 0`:`(idx - ${x}) % ${e} == 0`;return`${r} && ${t}`}function P7(x,A){let{startOffset:e,endOffset:r,step:t,formatType:i,pawnVarBase:n,subField:F}=A,v=$7(e,t),E=T7(e,r,t);if(x(` if (${E}) {`),i==="bin"){let u=`${n}[${v}]${F}`,D=F?F.substring(1):"",m=D?`${n}_${D}_dim`:`${n}_dim`;x(` return _DDE_fmt_bin(aData, ${u}, ${m});`)}else x(` return _DDE_fmt_${i}(aData, ${n}[${v}]${F});`);x(" }")}function q7(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=CA(e);if(!r||r==="skip")return;let i=`${e.library?`_${j0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,n=Ll(r);if(n==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${i}, ${i}_dim);`);else if(n)x(` case ${e.byteOffset}: return _DDE_fmt_${n}(aData, ${i});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let F=i;r.printfFormat&&(F=`(${r.printfFormat}(${F}))`),x(` sprintf(szTemp, _, "${r.printf}", ${F});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function N7(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function Il(x,A,e){let r=e===H0.ContainerType.cx?"c":"h",t=e===H0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[i,n]of Object.entries(A.containers))e===n.containerType&&i.startsWith(t)&&n.transferDirection!==Ml.backendOnly&&N7(x,i,n);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function I7(x,A){let e=w7(A.title,A.fields);x(""),x(`stock _DDE_local_${A.title}(aData{}, idx) {`),e.hasInlineFields&&x(" new szTemp{64};");for(let r of e.arrayGroups)P7(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)q7(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function M7(x,A){for(let[,e]of Object.entries(A.containers))Rl(e)&&I7(x,e)}function Ol(x){let A=[],e=A.push.bind(A),r=_7(x);return S7(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),Il(e,x,H0.ContainerType.cx),Il(e,x,H0.ContainerType.hx),e(" return OK;"),e("}"),M7(e,x),A.join(`
2343
+ `)}var Jl=j0.yamlRangeToLineInformation,Xt=t0.filePaths.dde.path,_A;(e0=>{let x=H0.DDEJson,A=j0.convertBlobToString;e0.DDE_SCHEMA=po;async function r(I,k){let L=await k.readFile(I);return A(L)}e0.readYamlFile=r;async function t(I,k,L=t0.fileNames.mainDDE,Z){let W=[],U=await K.read(I,k),J=await Gl(I,k,U);if(Z)for(let Q of J){let{result:s0,unresolvedKeys:H}=vx.replaceDefineTemplates(Q.yaml,Z);Q.yaml=s0;for(let v0 of H)W.push({file:Q.path,level:"error",message:`Unresolved define template: {{${v0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let Q of J)W.push(...v(Q.path,Q.yaml));let a0=hx.Utils.joinPath(I,Xt,L),i0=await r(a0,k);if(Z){let{result:Q,unresolvedKeys:s0}=vx.replaceDefineTemplates(i0,Z);i0=Q;for(let H of s0)W.push({file:a0,level:"error",message:`Unresolved define template: {{${H}}}`,line:0,startCharacter:0,endCharacter:0})}return W.push(...v(a0,i0)),{manifest:U,libraryFiles:J,main:{path:a0,yaml:i0},diagnostics:W}}e0.validate=t;async function i(I,k,L,Z=t0.fileNames.mainDDE){let W=await K.read(I,k),U=await vx.read(I,k,L),J=await t(I,k,Z,U.flat);if(J.diagnostics.filter(B0=>B0.level==="error").length>0)return{ddeJSON:null,diagnostics:J.diagnostics};let i0=await w(I,k,L),Q=new ri.PreCompiler(W,J.libraryFiles,i0),s0=Q.parseLibraries();if(s0.find(B0=>B0.level==="error"))return{ddeJSON:null,diagnostics:[...J.diagnostics,...s0]};let{ddeJSON:v0,diagnostics:l0}=Q.parseMainDDE(J.main.path,J.main.yaml);return{ddeJSON:v0,diagnostics:[...J.diagnostics,...l0]}}e0.compileDDE=i;let n=new Ul.default({strict:!1,allErrors:!0,verbose:!0});(0,Hl.default)(n);let F=n.compile(e0.DDE_SCHEMA);function v(I,k){let L=new Fi.LineCounter,Z=(0,Fi.parseDocument)(k,{lineCounter:L,keepSourceTokens:!0}),W=[];for(let a0 of Z.errors){let i0=a0.pos?Jl(L,[a0.pos[0],a0.pos[1],a0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};W.push({file:I,level:"error",message:a0.message,...i0})}if(W.length>0)return W;let U=Z.toJSON();if(!F(U)){let i0=(F.errors||[]).filter(s0=>s0.keyword!=="if"),Q=new Set;for(let s0 of i0){let H=O7(s0);if(Q.has(H))continue;Q.add(H);let v0=U7(Z,L,s0);W.push({file:I,level:"error",message:H,...v0})}}return W}e0.validateJsonSchema=v,e0.PreCompiler=(I,k,L)=>new ri.PreCompiler(I,k,L);function u(I,k){return ua(I,k)}e0.generateMyDatanetXML=u;async function D(I,k,L,Z){let W=await K.read(I,k),U=ua(W,Z),J=hx.Utils.joinPath(I,t0.filePaths.dist.ddeXmlPath);await k.writeFile(J,U),L.log("Generated",t0.filePaths.dist.ddeXmlPath)}e0.exportMyDatanetXML=D;async function m(I,k,L,Z,W){let U=hx.Utils.joinPath(I,t0.filePaths.studio.auto.dde.historyJson);await k.rm(U).catch(console.error);let J=await K.read(I,k);if(!K.isApp(J)||!J.registry?.id)return;if(!W){L.warn("Could not fetch dde of previous version: No API token provided.");return}let a0=Ae.coerce(J.version);try{let s0=(await Fx.getExistingApplication(W,J.publisher,J.registry.id,Z)).versions.find(B0=>!Ae.prerelease(B0.version)&&Ae.lte(B0.version,a0)),H=s0?.files.find(B0=>B0.name==="dde.json");if(!H){L.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let v0=await fetch(H.downloadUrl,{headers:{...lA(W),...Fx.injectSemverHeader(!0)}});if(v0.status!==200){L.warn(`Could not fetch the dde.json of version "${s0?.version}"`);return}let l0=await v0.text();await k.writeFile(U,l0),L.log(`Saved history.json of previous app version ${s0.version}`)}catch(i0){L.error("Failed to fetch the dde of previous version",i0)}}e0.fetchPreviousHistoryJson=m;async function w(I,k,L){try{let Z=hx.Utils.joinPath(I,t0.filePaths.studio.auto.dde.historyJson);if(await k.stat(Z)){let U=await k.readFile(Z);return JSON.parse(A(U))}let W=hx.Utils.joinPath(I,Xt,"history.json");if(await k.stat(W)){L.warn(`"${t0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${Xt}history.json"`);let U=await k.readFile(W),J=JSON.parse(A(U)),a0=await K.read(I,k),i0=Ae.coerce(a0.version)?.version,Q=Object.keys(J||{}).sort(Ae.rcompare).find(H=>H!==i0);if(!Q)return null;let s0=J[Q];return{version:Q,...s0}}}catch(Z){L.error("Failed to read history.json",Z)}return L.warn("history.json does not exist"),null}e0.getHistoryJson=w;function j(I,k){return{version:Ae.coerce(k.version)?.version||"1.0.0",...structuredClone(I)}}e0.buildHistoryJson=j;async function S(I,k,L,Z){let W=await K.read(I,k),U=j(Z,W),J=hx.Utils.joinPath(I,t0.filePaths.dist.historyJson);await k.writeFile(J,JSON.stringify(U,null," ")),L.log("Generated",t0.filePaths.dist.historyJson)}e0.exportHistoryJson=S;async function P(I,k){return k.rm(hx.Utils.joinPath(I,t0.filePaths.studio.auto.dlo.path))}e0.clearAutoDloDir=P;async function N(I,k,L,Z){await P(I,k);let W=await K.read(I,k),U=await Gl(I,k,W),J=await vx.read(I,k,L),a0=gl(Z,J,W),Q=new Vt(W,Z,null).generate();for(let Ex of U){let Qx=new Vt(W,Z,Ex.libraryName),{globals:PA,helper:qA}=Qx.generate(),lx=[...PA,...qA].join(`\r
2344
+ `),tx=t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",Ex.libraryName),nA=hx.Utils.joinPath(I,tx);lx.length&&(L.log("Generated",tx),await k.writeFile(nA,lx))}let s0=wl(Z),H=kl(Z,U.map(Ex=>Ex.libraryName)),v0=Ol(Z),l0=hx.Utils.joinPath(I,t0.filePaths.studio.auto.dlo.autoInc);await k.writeFile(l0,a0),L.log("Generated",t0.filePaths.studio.auto.dlo.autoInc);let B0=hx.Utils.joinPath(I,t0.filePaths.studio.auto.dlo.autoUplinkInc);await k.writeFile(B0,H),L.log("Generated",t0.filePaths.studio.auto.dlo.autoUplinkInc);let d0=hx.Utils.joinPath(I,t0.filePaths.studio.auto.dlo.autoLocalDataInc);await k.writeFile(d0,v0),L.log("Generated",t0.filePaths.studio.auto.dlo.autoLocalDataInc);let $0=hx.Utils.joinPath(I,t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await k.writeFile($0,[...Q.globals,...Q.helper].join(`
2345
+ `)),L.log("Generated",t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let q0=hx.Utils.joinPath(I,t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(q0,s0),L.log("Generated",t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await O(I,k,L)}e0.exportAutoDloFiles=N;async function R(I,k,L,Z){let W=await K.read(I,k),U=K.isLibrary(W),J=hx.Utils.joinPath(I,t0.filePaths.dist.path,"dde-api.yaml");await k.rm(J).catch(()=>{});let a0=hx.Utils.joinPath(I,t0.filePaths.dist.ddeApi);if(await k.writeFile(a0,ha(Z,W)),L.log("Generated",t0.filePaths.dist.ddeApi),U){let i0=hx.Utils.joinPath(I,t0.filePaths.dist.ddeApiPath,`${W.name}.yaml`),Q=ha(Z,W,W.name);Q.length&&(await k.writeFile(i0,Q),L.log("Generated",t0.filePaths.dist.ddeApiPath+`${W.name}.yaml`))}}e0.exportOpenApi=R;async function O(I,k,L){let Z=hx.Utils.joinPath(I,t0.filePaths.studio.auto.dlo.defaultInc),W=await _l(I,k);await k.writeFile(Z,W),L.log("Generated",t0.filePaths.studio.auto.dlo.defaultInc)}e0.exportDefaultInc=O})(_A||={});async function Gl(x,A,e){let r=[],t=await ex.getAll(e);for(let i in t){let n=ex.dependencyToPath(x,i),F=ex.dependencyIdToName(i),v=hx.Utils.joinPath(n,`${Xt}/${F}.dde`);await A.stat(v)&&r.push({libraryName:F,path:v,yaml:await _A.readYamlFile(v,A)})}if(K.isLibrary(e)){let i=hx.Utils.joinPath(x,`/${Xt}/${e.name}.dde`);await A.stat(i)&&r.push({libraryName:e.name,path:i,yaml:await _A.readYamlFile(i,A)})}return r}function L7(x,A,e){if(typeof x=="string")return x;if(typeof x!="object"||x===null)return"";let r=x[A];if(typeof r=="string")return r;if(typeof r!="object"||r===null)return"";let t=e?.missingProperty;return t?r[t]??"":""}function R7(x,A,e,r){let i={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[x];return i?i():e}function O7(x){let A=x.instancePath||"/",e=x.parentSchema,r=L7(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${R7(x.keyword,x.params,t,e)}`}function G7(x,A){let e=A.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),i=x.getIn(t,!0);if(i?.range)return i.range}return null}function U7(x,A,e){let r=G7(x,e.instancePath||"");return r?Jl(A,r):{line:0,startCharacter:0,endCharacter:0}}var ga=require("vscode-uri");var zl=U0(require("node:child_process"));var vi;(e=>{async function x(r,t,i){let n=await K.read(r,t);if(await K.isApmPartEnabled(r,t,u0.Part.pov)){i.info("Executing POV build script",n.pov?.details.buildCommand);let{buildCommand:F,workingPath:v}=n.pov.details,E=ga.Utils.joinPath(r,v);try{await Kl(E,F,i)}catch(u){throw u.code?new Error(`APM part '${u0.Part.pov}' has errors. Aborted.`):u}}}e.tryBuildPov=x;async function A(r,t,i){let n=await K.read(r,t);if(await K.isApmPartEnabled(r,t,u0.Part.blo,n)){i.info("Executing BLO build script",n.blo?.buildCommand);let{buildCommand:F,workingPath:v}=n.blo,E=ga.Utils.joinPath(r,v);try{await Kl(E,F,i)}catch(u){throw u.code?new Error(`APM part '${u0.Part.blo}' has errors. Aborted.`):u}}}e.tryBuildBlo=A})(vi||={});async function Kl(x,A,e){return new Promise((r,t)=>{zl.exec(A,{cwd:x.fsPath,env:process.env},(i,n,F)=>{e.log(n),F&&e.error(F),i&&t(i),r(null)})})}var Yt=require("@gera2ld/tarjs"),Vl=j0.convertBlobToString,ya=require("pako"),mx;(D=>{class x extends Error{_mergedDiagnostics;constructor(w,j){super(w),this.name="BuildError",this._mergedDiagnostics=j}get mergedDiagnostics(){return this._mergedDiagnostics}}D.BuildError=x;async function A(m,w,j,S,P,N=!0,R){N=H7(j,N),await J7(m,w,j,S,P,N);try{let I=await vx.read(m,w,j);await K7(m,w,j,I)}catch(I){j.warn("Could not generate defines.ts:",I)}let O={[u0.Part.dde]:[],[u0.Part.dlo]:[],[u0.Part.dfiles]:[]},e0={[u0.Part.dde]:z7,[u0.Part.dlo]:V7,[u0.Part.dfiles]:W7};try{for(let I of[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles])if(N.includes(I)&&(j.info(`Building ${I.toUpperCase()}...`),await Z7(j,I,e0[I],O[I],m,w)))return O}catch(I){throw R?new x(I?.message,O):I}return N.includes(u0.Part.pov)?await vi.tryBuildPov(m,w,j):j.info("Skipping pov build"),N.includes(u0.Part.blo)?await vi.tryBuildBlo(m,w,j):j.info("Skipping blo build"),await X7(m,w,j),await Y7(m,w,j),j.done("Project build completed."),O}D.buildAll=A;async function e(m,w,j,S,P,N,R){let O=await K.read(m,w);return K.isLibrary(O)?(j.info("Library project detected. Publishing library..."),i(m,w,j,P,S)):(j.info("App project detected. Publishing app..."),t(m,w,j,P,N,R,S))}D.release=e;async function r(m,w,j,S,P,N){let R=await K.read(m,w),O=`${R.name}-${R.version}.tar.gz`,e0=null;if(K.isLibrary(R))j.info("Library project detected. Packing library..."),e0=await Wl(m,w,j,P,S);else{j.info("App project detected. Packing app...");let k=await Xl(m,w,j,P,N,S);e0=await Ap(k)}let I=Er.Utils.joinPath(m,O);e0!==null?(await w.writeFile(I,e0),j.done(`Packaged: ${I.fsPath}`)):j.error(`Could not create archive: ${I.fsPath}`)}D.pack=r;async function t(m,w,j,S,P,N=null,R){if(!await u0.validateAccess(m,w,S,!1,R))throw new Error("Could not validate access to application");let e0=await Xl(m,w,j,S,P,R);await u0.updateProfile(m,w,S,R);let I=await u0.publishTag(m,w,S,e0,R);if(N!==null){let k=await K.read(m,w);await Fx.updateExistingApplicationVersion(S,k.publisher,k.registry?.id,k.version,{allowedBackends:N},R),j.info(`Tag "${I.version}" with phase "${I.phase}" shared with ${[...N].join(";")}!`)}j.done(`Tag "${I.version}" with phase "${I.phase}" published!`)}D.releaseAPM=t;async function i(m,w,j,S,P){let N=await K.read(m,w),R=await Wl(m,w,j,S,P);await Gr.publishPackage(S,N,R,P),j.done(`Library "${N.publisher}/${N.name}" with version "${N.version}" published!`)}D.releaseLibrary=i;async function n(m,w,j,S,P,N,R,O=null){if(N==="*"){let U=await K.read(m,w);N=`${U.name}-${U.version}.tar.gz`,j.info(`Publishing detected archive package "${N}"...`)}let e0=Er.Utils.joinPath(m,N);if(!await w.stat(e0))throw new Error(`Archive package not found: ${e0.fsPath}`);let I=await w.readFile(e0),k=await ep(I),{publisher:L,registry:Z,version:W}=k;K.isLibrary(k)?(await Gr.publishPackage(S,k,I,P),j.done(`Library "${L}/${k.name}" with version "${k.version}" published!`)):(await Fx.updateApplicationFile(S,L,Z.id,W,"app.tar.gz",I,P),await Fx.updateExistingApplicationVersion(S,L,Z?.id,W,{allowedBackends:O||void 0,phase:R||void 0},P),j.info(`Tag "${W}" with phase "${R}" shared with ${[...O||""].join(";")}!`),j.done(`Tag "${W}" with phase "${R}" published!`))}D.publishArchive=n;async function F(m,w,j){let S;try{S=await w.readFile(Er.Utils.joinPath(m,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(Vl(S)===t0.readme(j))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}D.getReadmeFile=F;async function v(m,w){let j;try{j=await w.readFile(Er.Utils.joinPath(m,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(Vl(j)===t0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return j}D.getChangelogFile=v;async function E(m,w,j,S){let P=await K.read(m,w),{name:N,publisher:R,description:O}=P,e0=K.validateProjectName(N,K.isLibrary(P));if(e0)throw new Error(`name: ${e0}`);let I=K.validateDescription(O);if(I)throw new Error(`description: ${I}`);let k=K.validatePublisherId(R)||await K.validatePublisherOnline(j,R,S);if(k)throw new Error(`publisher: ${k}`);if(!K.isLibrary(P)&&(await K.validateApplicationIcon(m,w,P),K.validateEngineSettings(P),K.isApp(P)&&await K.isApmPartEnabled(m,w,u0.Part.dlo,P)&&(!P.dpid||!Object.values(K.DeviceProfiles).includes(P.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}D.validatePublishSettings=E;async function u(m,w){let j=ya.ungzip(m),S=await Yt.TarReader.load(j),P={};for(let N of S.fileInfos)w.includes(N.name)&&(P[N.name]=S.getFileBlob(N.name));return P}D.readFilesFromTarGz=u})(mx||={});function H7(x,A){let e=Object.values(u0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function J7(x,A,e,r,t,i){await ex.validateMinimumBackendVersion(x,A,e),i.includes(u0.Part.dde)&&await _A.fetchPreviousHistoryJson(x,A,e,r,t)}async function K7(x,A,e,r){r.defaultsOnly?(await vx.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",t0.filePaths.dist.definesTs,"(defaults only)"),await vx.exportDefinesTs(x,A,r,t0.filePaths.dist.definesAppTs),e.log("Generated",t0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await vx.exportDefinesTs(x,A,r),e.log("Generated",t0.filePaths.dist.definesTs))}async function z7(x,A,e){let r=await _A.compileDDE(x,A,e);if(r.ddeJSON){await _A.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await K.read(x,A);K.isLibrary(t)||await _A.exportHistoryJson(x,A,e,r.ddeJSON),await _A.exportOpenApi(x,A,e,r.ddeJSON),await K.isApmPartEnabled(x,A,u0.Part.dlo,t)&&(await _A.exportAutoDloFiles(x,A,e,r.ddeJSON),await cn.exportDloConfig(x,A,e))}return r.diagnostics}async function V7(x,A,e){let r=new Or(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function W7(x,A,e){return await En.process(x,A,e)}async function X7(x,A,e){let r=await K.read(x,A);K.isLibrary(r)&&await Tr.normalizeLibraryParts(x,A,r,e)}async function Y7(x,A,e){let r=Er.Utils.joinPath(x,t0.fileNames.reportTemplate);if(await A.stat(r)){let t=Er.Utils.joinPath(x,t0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${t0.fileNames.reportTemplate}" to dist folder.`)}}function Q7(x,A,e){A!==u0.Part.dlo&&xp(x,e);let r=e.some(t=>t.level==="error");if(r){let t=`APM part "${A}" has errors. Aborted.`;throw new Error(t)}return r}async function Z7(x,A,e,r,t,i){let n=await e(t,i,x);return r.push(...n),Q7(x,A,n)}function xp(x,A){A.forEach(e=>{let r=e.startCharacter?`:${e.startCharacter+1}`:"",t=`${e.file.path}:${e.line+1}${r} - ${e.message}`;e.level==="error"?x.error(t):e.level==="warning"?x.warn(t):x.log(t)})}async function Wl(x,A,e,r,t){let i=await K.read(x,A);return await K.validateBasicManifest(x,A,i),await mx.buildAll(x,A,e,t,r),await Gr.createArchive(x,A)}async function Xl(x,A,e,r,t,i){if(!Object.values(u0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await K.validateBasicManifest(x,A,null),await mx.buildAll(x,A,e,i,r),await u0.createTag(x,A,t)}async function Ap(x){let A=new Yt.TarWriter;for(let[r,t]of x.entries())if(r==="tag"){let i=t;A.addFile(r,i)}else{let i=t;A.addFile(r,await i.arrayBuffer())}let e=await A.write();return ya.gzip(await e.arrayBuffer())}async function ep(x){let A=await rp(x,["studio.json","src/studio.json"]);if(!A)throw new Error('Could not find "studio.json" in archive');return JSON.parse(await A.text())}async function rp(x,A){let e=ya.ungzip(x),r=await Yt.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var tp=j0.bufferToBase64;var u0;(u=>{let x;(R=>(R.alpha="alpha",R.beta="beta",R.rc="rc",R.release="release",R.stage="stage",R.passive="passive",R.withdrawn="withdrawn"))(x=u.TagPhase||={});let A;(P=>(P.dde="dde",P.dlo="dlo",P.pov="pov",P.blo="blo",P.dfiles="dfiles"))(A=u.Part||={});function e(D){let{description:m,name:w,pov:j,engines:S,blo:P,publisher:N,type:R}=D,O=R||K.ProjectTypes.app,e0={name:w,abstract:m,author:N||"",pov_location:K.PovLocation.embedded,pov_details_lowlevel:!1,required_be:S?.backend,required_hwfw:S?.hwfw?.join(";"),required_productcode:S?.productId?.join(";"),blo_level:P?.accessLevel||K.BloAccessLevel.restricted,pip_id:""};return j&&j.details&&(e0.pov_location=K.PovLocation.pure,e0.pov_details_lowlevel=!!j.details.lowLevel),O==="addon"&&(e0.required_hwfw=void 0,e0.required_productcode=void 0,e0.addon_max_sources=1,e0.addon_max_per_site=D.maxInstancesPerSite),e0}u.createBaseTagHeader=e;async function r(D,m,w){let j=await K.read(D,m),S=e(j),P={version:j.version,...S,phase:w};return await i(D,m,j,P)}u.createTag=r;async function t(D,m){let w=await K.read(D,m),S={...e(w),blo_autostart:!1};return i(D,m,w,S)}u.createDevTag=t;async function i(D,m,w,j){let S=new FormData;S.append("tag",JSON.stringify(j)),S.append(`src/${K.fileName}`,new Blob([await K.readAsBlob(D,m)]));let P=new Blob([await m.readFile(ue.Utils.joinPath(D,t0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",P),w.icon){let R=await m.readFile(ue.Utils.joinPath(D,w.icon)),O=tp(R);S.append("previews/00.png",new Blob([`data:image/png;base64,${O}`]))}if(Object.hasOwn(j,"phase")){let R=await mx.getReadmeFile(D,m,j.name),O=await mx.getChangelogFile(D,m);S.append("previews/README.md",new Blob([R])),S.append("previews/CHANGELOG.md",new Blob([O]))}if(await K.isApmPartEnabled(D,m,"dlo")){let R=new Blob([await m.readFile(ue.Utils.joinPath(D,t0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",R)}if(await K.isApmPartEnabled(D,m,"pov",w)){await Yl(D,m,S,t0.filePaths.dist.povDetailsPath,"bin/pov/details");let R=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');S.append("bin/pov/list/index.html",new Blob([R]))}let N=await m.findFiles(D,`${t0.filePaths.dist.dfilesPath}/*`);for(let R of N){let O=new Blob([await m.readFile(R)]);S.append(`bin/dfiles/${ue.Utils.basename(R)}`,O)}return await K.isApmPartEnabled(D,m,"blo",w)&&await Yl(D,m,S,t0.filePaths.dist.bloPath,"bin/blo"),await np(D,m,S),S}u.createBuffer=i;async function n(D,m,w,j,S){let P=await K.read(D,m);j||await mx.validatePublishSettings(D,m,w,S);let{registry:N}=P,R=N?.id;if(!R&&!j&&(R=await F(D,m,w,P,S)),R){let{publisher:O}=P;if(!O)return null;try{return{id:R,...await Fx.getExistingApplication(w,O,R,S)}}catch(e0){if(e0?.message==="Could not find given application")return R=await F(D,m,w,P,S),{id:R,...await Fx.getExistingApplication(w,O,R,S)}}}return null}u.validateAccess=n;async function F(D,m,w,j,S){let P="myDatanet",{publisher:N,name:R,description:O,registry:e0}=j,I={id:e0?.id,type:j.type||K.ProjectTypes.app,name:R,targetSystem:P,description:O||"",allowedBackends:null};K.isAddon(j)&&(I.allowedApplications=null);let k=await Fx.createNewApplication(w,N,I,S);if(!k)throw new Error("Failed to initialize application");return j.registry={id:k},await K.write(D,m,j),k}u.registerNew=F;async function v(D,m,w,j){let{name:S,publisher:P,description:N,registry:R}=await K.read(D,m),O=R?.id;await Fx.updateExistingApplication(w,P,O,{description:N,name:S,targetSystem:"myDatanet"},j)}u.updateProfile=v;async function E(D,m,w,j,S){let{publisher:P,registry:N,version:R}=await K.read(D,m);return await Fx.publishApplicationVersion(w,P,N?.id,R,j,S)}u.publishTag=E})(u0||={});async function Yl(x,A,e,r,t){let i=await A.findFiles(x,`${r}/**`);for(let n of i){let F=ue.Utils.joinPath(x,r),v=n.path.substring(F.path.length+1),E=new Blob([await A.readFile(ue.Utils.joinPath(x,`${r}/${v}`))]);e.append(`${t}/${v}`,E)}}async function np(x,A,e){let r=ue.Utils.joinPath(x,t0.filePaths.dist.reportTemplate);if(await A.stat(r)){let i=new Blob([await A.readFile(r)]);e.append("bin/pov/mdn_report_template.json",i)}let t=ue.Utils.joinPath(x,t0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var Ec=U0(require("update-notifier"));function ip(x,A,e){let r=A.split(".").filter(Boolean),t=x;for(let i=0;i<r.length;i++){let n=r[i];i===r.length-1?t[n]=e:((typeof t[n]!="object"||t[n]===null||Array.isArray(t[n]))&&(t[n]={}),t=t[n])}}function Ql(x){let A=x.args,e={};for(let r=0;r<A.length;r++){let t=A[r];if(!t||!t.startsWith("--"))continue;let[i,n]=t.split("=",2),F=i.slice(2),v=!0;if(n!==void 0)v=n;else{let E=A[r+1];E&&!E.startsWith("-")&&(v=E,r++)}F.includes(".")?ip(e,F,v):e[F]=v}return e}var Zl=require("vscode-uri");function ci(x){return x instanceof Error?x.message:String(x)}function De(x,A){return{success:!1,errorCode:x,message:A}}async function ap(x){let{cwd:A,fs:e,logger:r,env:t,apiToken:i,options:n}=x;r.info("[1/5] Building project...");try{let F=n.part?n.part:!0;return await K.validateBasicManifest(A,e,null),await mx.buildAll(A,e,r,t,i,F,!0),r.done("Build completed successfully"),null}catch(F){return De(1,`Build failed: ${ci(F)}`)}}async function op(x){let{logger:A,options:e}=x,{serial:r}=e;A.info(`[2/5] Searching for USB device with serial: ${r}...`);let t=await Zs(r,A);return t||De(2,`USB device not found with serial number: ${r}`)}async function Fp(x){let{cwd:A,fs:e,logger:r,options:t}=x,{serial:i,debug:n}=t;r.info("[3/5] Uploading binary to USB device...");let F=Zl.Utils.joinPath(A,t0.filePaths.dist.mainAmxPath),v=await Xr(i,F,e,r,n);return v.success?(r.done("USB upload completed"),null):De(3,`USB upload failed: ${v.message}`)}async function vp(x,A){A.info("[4/5] Connecting to myDatanet server...");try{return await x.authenticate()}catch(e){return De(4,`myDatanet authentication failed: ${ci(e)}`)}}async function lp(x,A,e){if(A)try{let i=await x.getCustomer(A);return e.info(`Using customer: ${i.name} (${i._uid})`),i._uid}catch{return De(6,`Customer "${A}" not found`)}let r=await x.getCustomers();if(r.length===0)return De(6,"No customers available. Please specify --customer or set MYDATANET_CUSTOMER");if(r.length===1)return e.info(`Using customer: ${r[0].name} (${r[0]._uid})`),r[0]._uid;let t=r.map(i=>i.name).join(", ");return De(6,`Multiple customers available. Please specify --customer or set MYDATANET_CUSTOMER. Available: ${t}`)}async function cp(x,A,e,r){let t=await x.getDeviceSite(A);t&&(t.app.phase==="dev"&&(e.apmId=t.app.apmid,e.applicationId=t.app.appl_id),e.siteUid=t._uid,e.siteName=t.name,e.customerUid=t.customer_uid,r.info(`Found existing site: ${t.name}`))}async function fp(x,A,e){let{cwd:r,fs:t,logger:i}=x;i.info("Creating development APM tag...");try{let n=await u0.createDevTag(r,t),F=await A.uploadDevTag(e.apmId,n);return e.applicationId=F,i.done("Development tag uploaded"),null}catch(n){return De(5,`Development tag upload failed: ${ci(n)}`)}}async function Ep(x,A,e,r){r.info("[5/5] Creating development site...");try{return e.siteUid?(e.siteName!==e.name&&await x.updateSiteName(e.siteUid,e.name),r.info(`Reusing existing site: ${e.siteUid}`),{siteUid:e.siteUid,siteName:e.name}):{siteUid:await x.createDevelopmentSite(A,e),siteName:e.name}}catch(t){return De(6,`Site creation failed: ${ci(t)}`)}}function xc(x,A,e=!1){if(e){x.log(JSON.stringify({siteUid:A.siteUid,siteName:A.siteName,apmId:A.apmId}));return}x.done("Development deployment completed successfully!"),x.info(""),x.info("=== Deployment Summary ==="),x.info(`Site UID: ${A.siteUid}`),x.info(`Site Name: ${A.siteName}`),x.info(`APM ID: ${A.apmId}`),x.info("==========================")}function li(x){return typeof x=="object"&&x!==null&&"errorCode"in x}async function Ac(x,A,e,r,t,i){let n={cwd:x,fs:A,logger:e,env:r,apiToken:t,options:i},{serial:F,server:v,customer:E,mdnToken:u}=i;e.info("Starting development deployment...");let D=await ap(n);if(D)return D;let m=await op(n);if(li(m))return m;let w=await Fp(n);if(w)return w;let j=new Gt(v,u,e),S=await vp(j,e);if(li(S))return S;let P=S,N=await lp(j,E,e);if(li(N))return N;let R=N,O=await Ba(x,A,e,F,P.name,R,i.siteName);await cp(j,F,O,e);let e0=await fp(n,j,O);if(e0)return e0;let I=await Ep(j,R,O,e);return li(I)?I:{success:!0,siteUid:I.siteUid,siteName:I.siteName,apmId:O.apmId,message:"Development deployment completed successfully"}}var wa="/api/1/sites/dev";function Bp(x){let A=x.toUpperCase();return A!=="GET"&&A!=="HEAD"}function _a(x,A){let e=x;try{e=JSON.parse(x).err??x}catch{}let r=/E_NOT_FOUND|E_BAD_REQUEST/.test(e)?8:/E_FORBIDDEN|E_METHOD_NOT_ALLOWED/.test(e)?9:3;return new Q0(`${e} (HTTP ${A})`,r)}function Cp(x,A){let e=x.replace(/\/+$/,""),r={"content-type":"application/json"};A&&(r.authorization=`Bearer ${A}`);let t=async(i,n,F)=>fetch(`${e}${n}`,{method:i,headers:r,body:F===void 0?void 0:JSON.stringify(F)});return{async api(i){let n=Bp(i.method)&&i.body?JSON.parse(i.body):void 0,F=await t(i.method,i.path,n),v={};return F.headers.forEach((E,u)=>{v[u]=E}),{status:F.status,headers:v,body:await F.text()}},async dev(i,n,F){let v=await t(i,n,F),E=await v.text();if(!v.ok)throw _a(E,v.status);return E?JSON.parse(E):null},async close(){}}}async function dp(x){if(!x.serial)throw new Q0("--serial is required unless --url is given",2);let A=new Re({cwd:x.cwd,fs:x.fs,serial:x.serial,logger:x.logger,build:!1,flash:!1,pollIntervalMs:0,waitMs:x.waitMs,env:x.env,apiToken:x.apiToken,debug:x.debug,createDevice:x.createDevice,transportFactory:x.transportFactory});A.on("error",e=>x.logger.warn(e instanceof Error?e.message:String(e)));try{await A.start()}catch(e){throw await A.stop(),e}return{api:e=>A.handleApi(e),async dev(e,r,t){return up(A,e,r,t)},close:()=>A.stop()}}function ec(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}async function up(x,A,e,r){let t=r??{},[i,n=""]=e.split("?"),F=new URLSearchParams(n);switch(`${A} ${i}`){case"GET /dev/status":return x.status();case"GET /dev/state":return x.state();case"POST /dev/at":return{cmd:t.cmd,response:await x.at(String(t.cmd))};case"POST /dev/flash":return x.flash(typeof t.file=="string"?t.file:void 0);case"POST /dev/sync":return x.sync(Array.isArray(t.tags)?t.tags:void 0);case"GET /dev/logs":return{lastSeq:x.logStream.lastSeq,records:x.logStream.since(ec(F,"since",0),ec(F,"limit",500))};default:throw new Q0(`unsupported route ${A} ${i}`,3)}}async function Dp(x){return x.url?Cp(x.url,x.token):dp(x)}async function pe(x,A){let e=await Dp(x);try{return await A(e)}finally{await e.close()}}function Sa(x){if(x.status>=400)throw _a(x.body,x.status);return x.status===204||x.body===""?null:JSON.parse(x.body)}async function rc(x){return pe(x,A=>A.dev("GET","/dev/status"))}async function tc(x,A){let[e,r]=yp(A);return pe(x,async t=>{let i=Sa(await t.api({path:`${wa}/containers/${encodeURIComponent(e)}`,method:"GET"}));if(!r)return i;let n=i??{},F=Object.keys(n).find(v=>v.toLowerCase()===r.toLowerCase());if(F===void 0)throw new Q0(`unknown field '${r}' in container '${e}'`,8);return{[F]:n[F]}})}async function nc(x,A,e){let r;try{r=JSON.parse(e)}catch(t){throw new Q0(`values are not valid JSON: ${t instanceof Error?t.message:String(t)}`,8)}return pe(x,async t=>{let i=`${wa}/containers/${encodeURIComponent(A)}`,n=await t.api({path:i,method:"PUT",body:JSON.stringify(r)});if(n.status>=400)throw _a(n.body,n.status);let F=n.headers["x-mt-mirror"]==="stale";return{container:A,written:r,stale:F,record:Sa(await t.api({path:i,method:"GET"}))}})}async function ic(x,A,e){let r={count:-(e.limit??100)};e.from&&(r.from=e.from),e.to&&(r.until=e.to);let t=`${wa}/timeseries/${encodeURIComponent(A)}?json=${encodeURIComponent(JSON.stringify(r))}`;return pe(x,async i=>Sa(await i.api({path:t,method:"GET"})))}async function sc(x,A){return pe(x,e=>e.dev("POST","/dev/at",{cmd:A}))}async function ac(x){return pe(x,A=>A.dev("GET","/dev/state"))}async function oc(x,A){return pe(x,e=>e.dev("POST","/dev/flash",A?{file:A}:{}))}async function Fc(x,A){return pe(x,e=>e.dev("POST","/dev/sync",A?{tags:A}:{}))}var pp={marker:"live"};function vc(x){return typeof x=="object"&&x!==null&&x.marker==="live"}async function bp(x){return(await x.dev("GET","/dev/logs?since=0&limit=1")).lastSeq}function mp(x,A){let e=x.filter?new RegExp(x.filter):null,r=x.sinceMs!==void 0?Date.now()-x.sinceMs:void 0;return t=>{let i=t;r!==void 0&&(i.ts??0)<r||(!e||e.test(i.text??""))&&A(t)}}var ka=500;async function lc(x,A,e){return await x.dev("GET",`/dev/logs?since=${A}&limit=${e}`)}function cc(x,A,e){let r=A;for(let t of x)r=Math.max(r,t.seq),e(t);return r}async function hp(x,A,e){let r=await lc(x,A,ka);return cc(r.records,A,e)}async function jp(x,A,e){let r=ka;for(;;){let t=await lc(x,A,r);if(t.records.length<r)return cc(t.records,A,e);r+=ka}}async function gp(x,A,e,r){let t=A;for(;Date.now()<e;)await new Promise(i=>setTimeout(i,500)),t=await hp(x,t,r)}async function fc(x,A,e){let r=mp(A,e);await pe(x,async t=>{let i=A.follow===!0,n=A.replay===!0||A.sinceMs!==void 0,F=i&&!n?await bp(t):0,v=await jp(t,F,r);i&&n&&e(pp),i&&await gp(t,v,Date.now()+(A.durationMs??3e4),r)})}function yp(x){let A=x.indexOf(".");return A<0?[x,void 0]:[x.slice(0,A),x.slice(A+1)]}var DA=new J0.Command,fi=(0,Ec.default)({pkg:gi}),g0=new XA.Logger,kp=()=>process.env.NODE_ENV==="local-dev-app"?"./dev/pets-demo":process.env.NODE_ENV==="local-dev-lib"?"./dev/modbus-master":process.env.NODE_ENV==="local-dev-addon"?"./dev/addon":process.env.NODE_ENV==="local-dev-analytics"?"./dev/analytics":"",be=xt.Utils.joinPath(xt.URI.file(process.cwd()),kp());DA.version(gi.version).usage("<command>");DA.description(`This tool is used to manage the project dependencies, build, package and publish the project.
2346
2346
  The manifest options can be overwritten with the --option=value syntax.
2347
2347
  Example: "studio build --dlo.mainFile="./dlo/test.dlo" will overwrite the dlo.mainFile option of the manifest.
2348
2348
 
2349
- Use "studio --help" for more information.`);function jx(x,A){let e=Xl(x);return z.setOverwrites(e),A.catch(r=>{g0.error(r instanceof Error?r.message:r),process.exit(1)}).finally(()=>{cs.notify()})}function kp(x){return process.env.STUDIO_ENV=x||vx.ENV.production,x&&x!==vx.ENV.production&&g0.log(`Using STUDIO_ENV=${x}`),process.env.STUDIO_ENV}function wp(x){return x?.token||null}function Er(x){return(x.silent||x.json)&&(g0.silent=!0),x.debug&&(g0.debugEnabled=!0),{env:kp(x.env),token:wp(x)}}var Br=new J0.Option("-e, --env <environment>","CLI target environment (defaults to STUDIO_ENV environment variable)").default(process.env.STUDIO_ENV).choices(Object.values(vx.ENV)),Cr=new J0.Option("--token <API-token>","API Access Token (defaults to STUDIO_TOKEN environment variable)").default(process.env.STUDIO_TOKEN),_p=new J0.Option("--allowedBackends <null|*|server.xz;server.yz>","specify the allowedBackends deployment for this version.").default(null),Sp=Object.values(u0.TagPhase),fc=new J0.Option("-ph --phase <release phase>","specify a release phase").choices(Sp).default("release"),wa=new J0.Option("-p --part <APM part>","APM part that should be built").choices(Object.values(u0.Part));function Qt(x=!1){return new J0.Option("-s, --serial <serial>","Device serial number (16 characters hex)").makeOptionMandatory(x)}var Zt=new J0.Option("--debug","Enable debug logging").default(!1),_a=new J0.Option("--silent","Suppress intermediate progress output. Only the final result and errors are printed.").default(!1),$p=new J0.Option("--siteName <name>","Override the auto-generated development site name (max 50 characters)."),Sa=new J0.Option("--json",'Print the deployment result as a JSON object instead of the human-readable summary. Format: {"siteUid", "siteName", "apmId"}. Best combined with --silent for machine-readable output.').default(!1),Tp=new J0.Option("--server <url>","myDatanet instance URL (https:// prefix optional)").default(process.env.MYDATANET_HOST),Pp=new J0.Option("--customer <customerId>","myDatanet customer UID or ID").default(process.env.MYDATANET_CUSTOMER),qp=new J0.Option("--mdn-token <token>","myDatanet API token").default(process.env.MYDATANET_TOKEN);function At(x,A,e=Number.MAX_SAFE_INTEGER){return r=>{let t=r.trim()===""?Number.NaN:Number(r);if(!Number.isInteger(t)||t<A||t>e)throw new J0.InvalidArgumentError(`${x} must be an integer between ${A} and ${e}, got '${r}'`);return t}}var Np={s:1e3,m:6e4,h:36e5};function Ip(x){return A=>{let e=/^(\d+)(s|m|h)$/.exec(A.trim());if(!e)throw new J0.InvalidArgumentError(`${x} must be a duration like '30s', '5m' or '1h', got '${A}'`);return Number(e[1])*Np[e[2]]}}var Mp=new J0.Option("--port <port>","Port the local device API server listens on").default(8765).argParser(At("--port",0,65535)),Lp=new J0.Option("--host <host>","Address the local device API server binds to").default("127.0.0.1"),Rp=new J0.Option("--allow-remote","Allow a non-loopback --host without --bearer (the device API is then unauthenticated)"),Op=new J0.Option("--poll-interval <ms>","Stamp-poll interval in ms (0 disables polling)").default(2e3).argParser(At("--poll-interval",0)),Ec=new J0.Option("--wait <ms>","How long a write waits for the device to confirm, in ms").default(3e3).argParser(At("--wait",0)),Gp=new J0.Option("--log-file [path]","Append every device log record to this JSONL file"),Bc=new J0.Option("--bearer <token>","Bearer token required by the local device API server (--token is the Studio API token)"),Up=new J0.Option("--replay <file>","Replay a companion-app flight-recorder export (.ndjson or .db) instead of a live device"),Hp=new J0.Option("--session <id>","Recording session id to replay (default: the session with the most records)"),Jp=new J0.Option("--speed <n|max>","Replay speed: a multiplier, or `max` for no recorded delays").default(1).argParser(x=>x==="max"?"max":At("--speed",0)(x)),Kp=new J0.Option("--url <url>","Run against a running `studio dev` server instead of opening USB");function Ue(x,A){g0.silent=!1,A?g0.log(JSON.stringify(x)):g0.log(JSON.stringify(x,null,2)),process.exitCode=0}function Cc(x){return x instanceof Q0?x.exitCode:1}function dA(x){g0.silent=!1,g0.error(x instanceof Error?x.message:String(x)),cs.notify(),process.exitCode=Cc(x)}function be(x){let{env:A,token:e}=Er(x);return{cwd:pe,fs:ve,logger:g0,serial:x.serial,url:x.url,token:x.bearer,debug:x.debug,env:A,apiToken:e,waitMs:x.wait}}function me(x,A,e){return x.command(A).description(e).addOption(Qt()).addOption(Kp).addOption(Bc).addOption(Zt).addOption(_a).addOption(Sa).addOption(Br).addOption(Cr)}uA.command("install").aliases(["i"]).description("install all the dependencies in your project").arguments("[dependency...]").allowExcessArguments(!0).addOption(Br).addOption(Cr).allowUnknownOption(!0).action((x,A,e)=>{let{env:r,token:t}=Er(A);jx(e,El(pe,ve,g0,r,t,x))});uA.command("build").addOption(wa).allowExcessArguments(!0).addOption(Br).addOption(Cr).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Er(x);jx(A,Bl(pe,ve,g0,e,r,x.part))});uA.command("publish").addOption(fc).addOption(_p).addOption(Br).addOption(Cr).allowUnknownOption(!0).option("-i, --packagePath <path>",'Publish the provided library or app package. Use "*" for autodetection.').action(async(x,A)=>{let{env:e,token:r}=Er(x);jx(A,Cl(pe,ve,g0,e,r,x.allowedBackends,x.phase,x.packagePath))});uA.command("package").alias("pack").description("Package the project").addOption(fc).addOption(Br).addOption(Cr).allowUnknownOption(!0).action(async(x,A)=>{let{env:e,token:r}=Er(x);jx(A,dl(pe,ve,g0,e,r,x.phase))});uA.command("run").description("Build, upload to USB device, and create development site on myDatanet").addOption(Qt(!0)).addOption(Tp).addOption(Pp).addOption(qp).addOption(wa).addOption(Br).addOption(Cr).addOption(Zt).addOption(_a).addOption(Sa).addOption($p).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Er(x),t=x.mdnToken,s=x.server;t||(g0.error("MYDATANET_TOKEN is required. Set via --mdn-token or MYDATANET_TOKEN environment variable"),cs.notify(),process.exit(4)),s||(g0.error("Server URL is required. Set via --server or MYDATANET_HOST environment variable"),cs.notify(),process.exit(4)),jx(A,Zl(pe,ve,g0,e,r,{serial:x.serial,server:s,customer:x.customer,mdnToken:t,debug:x.debug,part:x.part?[x.part]:void 0,siteName:x.siteName||void 0}).then(n=>{g0.silent=!1,n.success?(Ql(g0,n,x.json),process.exit(0)):(g0.error(n.message),process.exit(n.errorCode||1))}))});var $a=uA.command("usb").description("USB device management commands");$a.command("list").description("List available USB devices").action((x,A)=>{jx(A,mv(g0))});$a.command("upload").description("Upload an AMX binary to a USB device").addOption(Qt(!0)).requiredOption("-f, --file <path>","Path to the AMX file (relative to current directory)").addOption(Zt).action((x,A)=>{let e=xt.Utils.joinPath(pe,x.file);g0.debugEnabled=x.debug===!0,jx(A,Wr(x.serial,e,ve,g0,x.debug).then(r=>{r.success?process.exit(0):(g0.error(r.message),process.exit(1))}))});$a.command("sync").description("Sync a USB device with the myDatanet server").addOption(Qt(!0)).addOption(Zt).action((x,A)=>{g0.debugEnabled=x.debug===!0,jx(A,hv(x.serial,g0,x.debug).then(e=>{e.success?process.exit(0):(g0.error(e.message),process.exit(1))}))});uA.command("dev").description("Build, flash and serve the myDatanet-compatible device API on localhost").addOption(Qt()).addOption(Mp).addOption(Lp).addOption(Rp).option("--watch","Rebuild, flash and sync when a source file changes",!1).option("--no-build","Skip the initial build").option("--no-flash","Skip flashing dist/dlo/main.amx").addOption(Op).addOption(Ec).addOption(Gp).addOption(Bc).addOption(Up).addOption(Hp).addOption(Jp).option("--pov [name]","Also start the project POV dev server against this server").addOption(wa).addOption(Br).addOption(Cr).addOption(Zt).addOption(_a).addOption(Sa).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Er(x);return!x.serial&&!x.replay?jx(A,Promise.reject(new Error("One of --serial or --replay is required")).catch(dA)):x.serial&&x.replay?jx(A,Promise.reject(new Error("--serial and --replay are mutually exclusive")).catch(dA)):(x.json&&(g0.output={log:(...t)=>console.error(...t)},g0.silent=x.silent===!0),jx(A,Vp(x,e,r).catch(dA)))});function zp(x,A,e){let r=x.logFile===!0?xt.Utils.joinPath(pe,r0.filePaths.studio.dev.deviceLog).fsPath:x.logFile,t=typeof x.replay=="string";return{serial:x.serial,host:x.host,port:x.port,allowRemote:x.allowRemote===!0,watch:t?!1:x.watch,build:t?!1:x.build,flash:t?!1:x.flash,pollIntervalMs:x.pollInterval,waitMs:x.wait,logFile:typeof r=="string"?r:void 0,token:x.bearer,pov:x.pov,part:x.part?[x.part]:void 0,debug:x.debug,env:A,apiToken:e,logger:g0,replay:x.replay,session:x.session,speed:x.speed}}async function Vp(x,A,e){let r=await fa(pe,ve,zp(x,A,e));x.json?Wp(r):Xp(r),await new Promise(t=>{let s=!1,n=()=>{s||(s=!0,r.close().catch(F=>g0.error(F instanceof Error?F.message:String(F))).finally(()=>{process.exitCode=0,process.stdin.pause(),t()}))};process.once("SIGINT",n),process.once("SIGTERM",n),x.json||Yp(r,n)})}function Wp(x){process.stdout.write(`${JSON.stringify({url:x.url,serial:x.session.serial,apmId:x.apmId,port:x.port})}
2349
+ Use "studio --help" for more information.`);function jx(x,A){let e=Ql(x);return K.setOverwrites(e),A.catch(r=>{g0.error(r instanceof Error?r.message:r),process.exit(1)}).finally(()=>{fi.notify()})}function wp(x){return process.env.STUDIO_ENV=x||vx.ENV.production,x&&x!==vx.ENV.production&&g0.log(`Using STUDIO_ENV=${x}`),process.env.STUDIO_ENV}function _p(x){return x?.token||null}function Br(x){return(x.silent||x.json)&&(g0.silent=!0),x.debug&&(g0.debugEnabled=!0),{env:wp(x.env),token:_p(x)}}var Cr=new J0.Option("-e, --env <environment>","CLI target environment (defaults to STUDIO_ENV environment variable)").default(process.env.STUDIO_ENV).choices(Object.values(vx.ENV)),dr=new J0.Option("--token <API-token>","API Access Token (defaults to STUDIO_TOKEN environment variable)").default(process.env.STUDIO_TOKEN),Sp=new J0.Option("--allowedBackends <null|*|server.xz;server.yz>","specify the allowedBackends deployment for this version.").default(null),$p=Object.values(u0.TagPhase),Bc=new J0.Option("-ph --phase <release phase>","specify a release phase").choices($p).default("release"),$a=new J0.Option("-p --part <APM part>","APM part that should be built").choices(Object.values(u0.Part));function Zt(x=!1){return new J0.Option("-s, --serial <serial>","Device serial number (16 characters hex)").makeOptionMandatory(x)}var xn=new J0.Option("--debug","Enable debug logging").default(!1),Ta=new J0.Option("--silent","Suppress intermediate progress output. Only the final result and errors are printed.").default(!1),Tp=new J0.Option("--siteName <name>","Override the auto-generated development site name (max 50 characters)."),Pa=new J0.Option("--json",'Print the deployment result as a JSON object instead of the human-readable summary. Format: {"siteUid", "siteName", "apmId"}. Best combined with --silent for machine-readable output.').default(!1),Pp=new J0.Option("--server <url>","myDatanet instance URL (https:// prefix optional)").default(process.env.MYDATANET_HOST),qp=new J0.Option("--customer <customerId>","myDatanet customer UID or ID").default(process.env.MYDATANET_CUSTOMER),Np=new J0.Option("--mdn-token <token>","myDatanet API token").default(process.env.MYDATANET_TOKEN);function At(x,A,e=Number.MAX_SAFE_INTEGER){return r=>{let t=r.trim()===""?Number.NaN:Number(r);if(!Number.isInteger(t)||t<A||t>e)throw new J0.InvalidArgumentError(`${x} must be an integer between ${A} and ${e}, got '${r}'`);return t}}var Ip={s:1e3,m:6e4,h:36e5};function Mp(x){return A=>{let e=/^(\d+)(s|m|h)$/.exec(A.trim());if(!e)throw new J0.InvalidArgumentError(`${x} must be a duration like '30s', '5m' or '1h', got '${A}'`);return Number(e[1])*Ip[e[2]]}}var Lp=new J0.Option("--port <port>","Port the local device API server listens on").default(8765).argParser(At("--port",0,65535)),Rp=new J0.Option("--host <host>","Address the local device API server binds to").default("127.0.0.1"),Op=new J0.Option("--allow-remote","Allow a non-loopback --host without --bearer (the device API is then unauthenticated)"),Gp=new J0.Option("--poll-interval <ms>","Stamp-poll interval in ms (0 disables polling)").default(2e3).argParser(At("--poll-interval",0)),Cc=new J0.Option("--wait <ms>","How long a write waits for the device to confirm, in ms").default(3e3).argParser(At("--wait",0)),Up=new J0.Option("--log-file [path]","Append every device log record to this JSONL file"),dc=new J0.Option("--bearer <token>","Bearer token required by the local device API server (--token is the Studio API token)"),Hp=new J0.Option("--replay <file>","Replay a companion-app flight-recorder export (.ndjson or .db) instead of a live device"),Jp=new J0.Option("--session <id>","Recording session id to replay (default: the session with the most records)"),Kp=new J0.Option("--speed <n|max>","Replay speed: a multiplier, or `max` for no recorded delays").default(1).argParser(x=>x==="max"?"max":At("--speed",0)(x)),zp=new J0.Option("--url <url>","Run against a running `studio dev` server instead of opening USB");function He(x,A){g0.silent=!1,A?g0.log(JSON.stringify(x)):g0.log(JSON.stringify(x,null,2)),process.exitCode=0}function uc(x){return x instanceof Q0?x.exitCode:1}function uA(x){g0.silent=!1,g0.error(x instanceof Error?x.message:String(x)),fi.notify(),process.exitCode=uc(x)}function me(x){let{env:A,token:e}=Br(x);return{cwd:be,fs:le,logger:g0,serial:x.serial,url:x.url,token:x.bearer,debug:x.debug,env:A,apiToken:e,waitMs:x.wait}}function he(x,A,e){return x.command(A).description(e).addOption(Zt()).addOption(zp).addOption(dc).addOption(xn).addOption(Ta).addOption(Pa).addOption(Cr).addOption(dr)}DA.command("install").aliases(["i"]).description("install all the dependencies in your project").arguments("[dependency...]").allowExcessArguments(!0).addOption(Cr).addOption(dr).allowUnknownOption(!0).action((x,A,e)=>{let{env:r,token:t}=Br(A);jx(e,dl(be,le,g0,r,t,x))});DA.command("build").addOption($a).allowExcessArguments(!0).addOption(Cr).addOption(dr).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Br(x);jx(A,ul(be,le,g0,e,r,x.part))});DA.command("publish").addOption(Bc).addOption(Sp).addOption(Cr).addOption(dr).allowUnknownOption(!0).option("-i, --packagePath <path>",'Publish the provided library or app package. Use "*" for autodetection.').action(async(x,A)=>{let{env:e,token:r}=Br(x);jx(A,Dl(be,le,g0,e,r,x.allowedBackends,x.phase,x.packagePath))});DA.command("package").alias("pack").description("Package the project").addOption(Bc).addOption(Cr).addOption(dr).allowUnknownOption(!0).action(async(x,A)=>{let{env:e,token:r}=Br(x);jx(A,pl(be,le,g0,e,r,x.phase))});DA.command("run").description("Build, upload to USB device, and create development site on myDatanet").addOption(Zt(!0)).addOption(Pp).addOption(qp).addOption(Np).addOption($a).addOption(Cr).addOption(dr).addOption(xn).addOption(Ta).addOption(Pa).addOption(Tp).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Br(x),t=x.mdnToken,i=x.server;t||(g0.error("MYDATANET_TOKEN is required. Set via --mdn-token or MYDATANET_TOKEN environment variable"),fi.notify(),process.exit(4)),i||(g0.error("Server URL is required. Set via --server or MYDATANET_HOST environment variable"),fi.notify(),process.exit(4)),jx(A,Ac(be,le,g0,e,r,{serial:x.serial,server:i,customer:x.customer,mdnToken:t,debug:x.debug,part:x.part?[x.part]:void 0,siteName:x.siteName||void 0}).then(n=>{g0.silent=!1,n.success?(xc(g0,n,x.json),process.exit(0)):(g0.error(n.message),process.exit(n.errorCode||1))}))});var qa=DA.command("usb").description("USB device management commands");qa.command("list").description("List available USB devices").action((x,A)=>{jx(A,gv(g0))});qa.command("upload").description("Upload an AMX binary to a USB device").addOption(Zt(!0)).requiredOption("-f, --file <path>","Path to the AMX file (relative to current directory)").addOption(xn).action((x,A)=>{let e=xt.Utils.joinPath(be,x.file);g0.debugEnabled=x.debug===!0,jx(A,Xr(x.serial,e,le,g0,x.debug).then(r=>{r.success?process.exit(0):(g0.error(r.message),process.exit(1))}))});qa.command("sync").description("Sync a USB device with the myDatanet server").addOption(Zt(!0)).addOption(xn).action((x,A)=>{g0.debugEnabled=x.debug===!0,jx(A,yv(x.serial,g0,x.debug).then(e=>{e.success?process.exit(0):(g0.error(e.message),process.exit(1))}))});DA.command("dev").description("Build, flash and serve the myDatanet-compatible device API on localhost").addOption(Zt()).addOption(Lp).addOption(Rp).addOption(Op).option("--watch","Rebuild, flash and sync when a source file changes",!1).option("--no-build","Skip the initial build").option("--no-flash","Skip flashing dist/dlo/main.amx").addOption(Gp).addOption(Cc).addOption(Up).addOption(dc).addOption(Hp).addOption(Jp).addOption(Kp).option("--pov [name]","Also start the project POV dev server against this server").addOption($a).addOption(Cr).addOption(dr).addOption(xn).addOption(Ta).addOption(Pa).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Br(x);return!x.serial&&!x.replay?jx(A,Promise.reject(new Error("One of --serial or --replay is required")).catch(uA)):x.serial&&x.replay?jx(A,Promise.reject(new Error("--serial and --replay are mutually exclusive")).catch(uA)):(x.json&&(g0.output={log:(...t)=>console.error(...t)},g0.silent=x.silent===!0),jx(A,Wp(x,e,r).catch(uA)))});function Vp(x,A,e){let r=x.logFile===!0?xt.Utils.joinPath(be,t0.filePaths.studio.dev.deviceLog).fsPath:x.logFile,t=typeof x.replay=="string";return{serial:x.serial,host:x.host,port:x.port,allowRemote:x.allowRemote===!0,watch:t?!1:x.watch,build:t?!1:x.build,flash:t?!1:x.flash,pollIntervalMs:x.pollInterval,waitMs:x.wait,logFile:typeof r=="string"?r:void 0,token:x.bearer,pov:x.pov,part:x.part?[x.part]:void 0,debug:x.debug,env:A,apiToken:e,logger:g0,replay:x.replay,session:x.session,speed:x.speed}}async function Wp(x,A,e){let r=await Ea(be,le,Vp(x,A,e));x.json?Xp(r):Yp(r),await new Promise(t=>{let i=!1,n=()=>{i||(i=!0,r.close().catch(F=>g0.error(F instanceof Error?F.message:String(F))).finally(()=>{process.exitCode=0,process.stdin.pause(),t()}))};process.once("SIGINT",n),process.once("SIGTERM",n),x.json||Qp(r,n)})}function Xp(x){process.stdout.write(`${JSON.stringify({url:x.url,serial:x.session.serial,apmId:x.apmId,port:x.port})}
2350
2350
  `);for(let A of["log","build","sync","state","container-changed"])x.session.on(A,e=>process.stdout.write(`${JSON.stringify({event:A,payload:e})}
2351
- `))}function Xp(x){g0.done(`Device API server: ${x.url} (serial ${x.session.serial})`),g0.info("Commands: `at <cmd>`, `sync`, `flash`, `build`, `q` to quit"),x.session.on("log",A=>g0.log(`${Yt.default.dim(A.source)} ${A.text}`)),x.session.on("container-changed",A=>g0.log(`${Yt.default.cyan(A.container??"uto")} ${JSON.stringify(A.decoded??null)}`)),x.session.on("build",A=>{A.ok===!0?g0.done("Build completed"):A.ok===!1&&g0.error(A.message??"Build failed")})}function Yp(x,A){process.stdin.isTTY&&(process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{Qp(x,String(e).trim(),A).catch(r=>g0.error(r instanceof Error?r.message:String(r)))}))}async function Qp(x,A,e){A==="q"?e():A==="sync"?g0.log(JSON.stringify(await x.session.sync())):A==="flash"?g0.log(JSON.stringify(await x.session.flash())):A==="build"?await x.session.build():A.startsWith("at ")?g0.log(await x.session.at(A.slice(3).trim())):A&&g0.warn(`Unknown command: ${A}`)}var Ta="<container>",Pa="Container name or alias",he=uA.command("device").description("One-shot device commands (USB or a running `studio dev`)");me(he,"info","Print DEVINFO/STAMPS/model status").action((x,A)=>jx(A,Ac(be(x)).then(e=>Ue(e,x.json)).catch(dA)));me(he,"get","Read a container, decoded via the project DDE").argument(Ta,`${Pa}, optionally \`container.field\``).action((x,A,e)=>jx(e,ec(be(A),x).then(r=>Ue(r,A.json)).catch(dA)));me(he,"set","Write a container: encode, push and re-read").argument(Ta,Pa).argument("<values>","JSON object of field values").addOption(Ec).action((x,A,e,r)=>jx(r,rc(be(e),x,A).then(t=>Ue(t,e.json)).catch(dA)));me(he,"timeseries","Read a histdata window, decoded via the project DDE").argument(Ta,`Histdata ${Pa.toLowerCase()}`).option("--from <stamp>","Inclusive lower bound (API stamp)").option("--to <stamp>","Exclusive upper bound (API stamp)").option("--limit <n>","Number of records (youngest first)",At("--limit",1),100).action((x,A,e)=>jx(e,tc(be(A),x,{from:A.from,to:A.to,limit:A.limit}).then(r=>Ue(r,A.json)).catch(dA)));me(he,"logs","Print the device log ring buffer").option("--follow","Keep printing new records",!1).option("--duration <ms>","How long --follow runs",At("--duration",0),3e4).option("--filter <regex>","Only print records whose text matches").option("--replay","With --follow, drain the full buffered history from the start first",!1).option("--since <duration>","With --follow, emit buffered records newer than this first, e.g. '30s', '5m', '1h'",Ip("--since")).action((x,A)=>jx(A,lc(be(x),{follow:x.follow,durationMs:x.duration,filter:x.filter,replay:x.replay,sinceMs:x.since},e=>Zp(e,x.json)).then(()=>{process.exitCode=0}).catch(dA)));function Zp(x,A){if(g0.silent=!1,oc(x)){A||g0.log(Yt.default.dim("--- live ---"));return}if(A){g0.log(JSON.stringify(x));return}let e=x;g0.log(`${Yt.default.dim(e.source)} ${e.text}`)}me(he,"at","Run one AT command").argument("<cmd>",'AT command, e.g. "at+rm2mstate"').action((x,A,e)=>jx(e,nc(be(A),x).then(r=>Ue(r,A.json)).catch(dA)));me(he,"state","Print the last rm2m state").action((x,A)=>jx(A,sc(be(x)).then(e=>Ue(e,x.json)).catch(dA)));me(he,"flash","Upload an AMX (defaults to dist/dlo/main.amx)").option("-f, --file <path>","AMX file to upload, relative to the project root").action((x,A)=>jx(A,ic(be(x),x.file).then(e=>Ue(e,x.json)).catch(dA)));me(he,"sync","Pull the device data into the mirror").action((x,A)=>jx(A,ac(be(x)).then(e=>Ue(e,x.json)).catch(dA)));function dc(x){uA.parse(x)}0&&(module.exports={deviceExitCode,program});
2351
+ `))}function Yp(x){g0.done(`Device API server: ${x.url} (serial ${x.session.serial})`),g0.info("Commands: `at <cmd>`, `sync`, `flash`, `build`, `q` to quit"),x.session.on("log",A=>g0.log(`${Qt.default.dim(A.source)} ${A.text}`)),x.session.on("container-changed",A=>g0.log(`${Qt.default.cyan(A.container??"uto")} ${JSON.stringify(A.decoded??null)}`)),x.session.on("build",A=>{A.ok===!0?g0.done("Build completed"):A.ok===!1&&g0.error(A.message??"Build failed")})}function Qp(x,A){process.stdin.isTTY&&(process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{Zp(x,String(e).trim(),A).catch(r=>g0.error(r instanceof Error?r.message:String(r)))}))}async function Zp(x,A,e){A==="q"?e():A==="sync"?g0.log(JSON.stringify(await x.session.sync())):A==="flash"?g0.log(JSON.stringify(await x.session.flash())):A==="build"?await x.session.build():A.startsWith("at ")?g0.log(await x.session.at(A.slice(3).trim())):A&&g0.warn(`Unknown command: ${A}`)}var Na="<container>",Ia="Container name or alias",je=DA.command("device").description("One-shot device commands (USB or a running `studio dev`)");he(je,"info","Print DEVINFO/STAMPS/model status").action((x,A)=>jx(A,rc(me(x)).then(e=>He(e,x.json)).catch(uA)));he(je,"get","Read a container, decoded via the project DDE").argument(Na,`${Ia}, optionally \`container.field\``).action((x,A,e)=>jx(e,tc(me(A),x).then(r=>He(r,A.json)).catch(uA)));he(je,"set","Write a container: encode, push and re-read").argument(Na,Ia).argument("<values>","JSON object of field values").addOption(Cc).action((x,A,e,r)=>jx(r,nc(me(e),x,A).then(t=>He(t,e.json)).catch(uA)));he(je,"timeseries","Read a histdata window, decoded via the project DDE").argument(Na,`Histdata ${Ia.toLowerCase()}`).option("--from <stamp>","Inclusive lower bound (API stamp)").option("--to <stamp>","Exclusive upper bound (API stamp)").option("--limit <n>","Number of records (youngest first)",At("--limit",1),100).action((x,A,e)=>jx(e,ic(me(A),x,{from:A.from,to:A.to,limit:A.limit}).then(r=>He(r,A.json)).catch(uA)));he(je,"logs","Print the device log ring buffer").option("--follow","Keep printing new records",!1).option("--duration <ms>","How long --follow runs",At("--duration",0),3e4).option("--filter <regex>","Only print records whose text matches").option("--replay","With --follow, drain the full buffered history from the start first",!1).option("--since <duration>","With --follow, emit buffered records newer than this first, e.g. '30s', '5m', '1h'",Mp("--since")).action((x,A)=>jx(A,fc(me(x),{follow:x.follow,durationMs:x.duration,filter:x.filter,replay:x.replay,sinceMs:x.since},e=>xb(e,x.json)).then(()=>{process.exitCode=0}).catch(uA)));function xb(x,A){if(g0.silent=!1,vc(x)){A||g0.log(Qt.default.dim("--- live ---"));return}if(A){g0.log(JSON.stringify(x));return}let e=x;g0.log(`${Qt.default.dim(e.source)} ${e.text}`)}he(je,"at","Run one AT command").argument("<cmd>",'AT command, e.g. "at+rm2mstate"').action((x,A,e)=>jx(e,sc(me(A),x).then(r=>He(r,A.json)).catch(uA)));he(je,"state","Print the last rm2m state").action((x,A)=>jx(A,ac(me(x)).then(e=>He(e,x.json)).catch(uA)));he(je,"flash","Upload an AMX (defaults to dist/dlo/main.amx)").option("-f, --file <path>","AMX file to upload, relative to the project root").action((x,A)=>jx(A,oc(me(x),x.file).then(e=>He(e,x.json)).catch(uA)));he(je,"sync","Pull the device data into the mirror").action((x,A)=>jx(A,Fc(me(x)).then(e=>He(e,x.json)).catch(uA)));function Dc(x){DA.parse(x)}0&&(module.exports={deviceExitCode,program});
2352
2352
  /*! Bundled license information:
2353
2353
 
2354
2354
  @microtronics/device-master/dist/cjs/index.cjs: