@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 +52 -52
- package/dist/studio-cli.d.ts +46 -1
- package/out/api.js +50 -50
- package/out/studio-cli.d.ts +46 -1
- package/package.json +1 -1
package/out/api.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var Xl=Object.create;var Mt=Object.defineProperty;var Yl=Object.getOwnPropertyDescriptor;var Ql=Object.getOwnPropertyNames;var Zl=Object.getPrototypeOf,xf=Object.prototype.hasOwnProperty;var va=(x,A)=>()=>(A||x((A={exports:{}}).exports,A),A.exports),Af=(x,A)=>{for(var e in A)Mt(x,e,{get:A[e],enumerable:!0})},la=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of Ql(A))!xf.call(x,t)&&t!==e&&Mt(x,t,{get:()=>A[t],enumerable:!(r=Yl(A,t))||r.enumerable});return x};var W0=(x,A,e)=>(e=x!=null?Xl(Zl(x)):{},la(A||!x||!x.__esModule?Mt(e,"default",{value:x,enumerable:!0}):e,x)),ef=x=>la(Mt({},"__esModule",{value:!0}),x);var po=va((bp,Do)=>{"use strict";var Oc=Object.create,lt=Object.defineProperty,Gc=Object.getOwnPropertyDescriptor,co=Object.getOwnPropertyNames,Uc=Object.getPrototypeOf,Hc=Object.prototype.hasOwnProperty,Jc=(x,A,e)=>A in x?lt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,Eo=(x,A)=>function(){return A||(0,x[co(x)[0]])((A={exports:{}}).exports,A),A.exports},Kc=(x,A)=>{for(var e in A)lt(x,e,{get:A[e],enumerable:!0})},Bo=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of co(A))!Hc.call(x,t)&&t!==e&<(x,t,{get:()=>A[t],enumerable:!(r=Gc(A,t))||r.enumerable});return x},Co=(x,A,e)=>(e=x!=null?Oc(Uc(x)):{},Bo(A||!x||!x.__esModule?lt(e,"default",{value:x,enumerable:!0}):e,x)),zc=x=>Bo(lt({},"__esModule",{value:!0}),x),Dx=(x,A,e)=>Jc(x,typeof A!="symbol"?A+"":A,e),Vc=Eo({"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=[],D="./this.program",m=(i,l)=>{throw l};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var _="",h,S;if(E){var P=require("fs");_=__dirname+"/",S=i=>{i=k(i)?new URL(i):i;var l=P.readFileSync(i);return l},h=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&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(i,l)=>{throw process.exitCode=i,l}}else if(F||v){try{_=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)}),h=async i=>{if(k(i))return new Promise((B,p)=>{var j=new XMLHttpRequest;j.open("GET",i,!0),j.responseType="arraybuffer",j.onload=()=>{if(j.status==200||j.status==0&&j.response){B(j.response);return}p(j.status)},j.onerror=p,j.send(null)});var l=await fetch(i,{credentials:"same-origin"});if(l.ok)return l.arrayBuffer();throw new Error(l.status+" : "+l.url)}}var I=console.log.bind(console),R=console.error.bind(console),G,r0=!1,M,k=i=>i.startsWith("file://");class L{}class Z extends L{}function W(i){for(var l=0,B=i.length,p=new Uint8Array(B),j;l<B;++l)j=i.charCodeAt(l),p[l]=~j>>8&j;return p}var U,J,a0=!1,s0=!1;function Q(){var i=I0.buffer;ox=new Int8Array(i),J0=new Int16Array(i),rA=new Uint8Array(i),Mr=new Uint16Array(i),O0=new Int32Array(i),f0=new Uint32Array(i),Nr=new Float32Array(i),Ir=new Float64Array(i),K0=new BigInt64Array(i),Lr=new BigUint64Array(i)}function i0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)tr(n.preRun.shift());wA(Wx)}function H(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),ex.init(),Me.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function l0(){y(),o.quit(),ex.shutdown(),s0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)rr(n.postRun.shift());wA(SA)}function d0(i){n.onAbort?.(i),i=`Aborted(${i})`,R(i),r0=!0,i+=". Build with -sASSERTIONS for more info.";var l=new WebAssembly.RuntimeError(i);throw J?.(l),l}var S0;function P0(){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 vx(i){return i}async function
|
|
1162
|
-
`));if(!i)return null;Ox=WA(i,!0)}return Ox.shift()},ex={ttys:[],init(){},shutdown(){},register(i,f){ex.ttys[i]={input:[],output:[],ops:f},o.registerDevice(i,ex.stream_ops)},stream_ops:{open(i){var f=ex.ttys[i.node.rdev];if(!f)throw new o.ErrnoError(43);i.tty=f,i.seekable=!1},close(i){i.tty.ops.fsync(i.tty)},fsync(i){i.tty.ops.fsync(i.tty)},read(i,f,B,D,j){if(!i.tty||!i.tty.ops.get_char)throw new o.ErrnoError(60);for(var w=0,N=0;N<D;N++){var z;try{z=i.tty.ops.get_char(i.tty)}catch{throw new o.ErrnoError(29)}if(z===void 0&&w===0)throw new o.ErrnoError(6);if(z==null)break;w++,f[B+N]=z}return w&&(i.node.atime=Date.now()),w},write(i,f,B,D,j){if(!i.tty||!i.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var w=0;w<D;w++)i.tty.ops.put_char(i.tty,f[B+w])}catch{throw new o.ErrnoError(29)}return D&&(i.node.mtime=i.node.ctime=Date.now()),w}},default_tty_ops:{get_char(i){return Or()},put_char(i,f){f===null||f===10?(M(BA(i.output)),i.output=[]):f!=0&&i.output.push(f)},fsync(i){i.output?.length>0&&(M(BA(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,f,B){return 0},ioctl_tiocgwinsz(i){return[24,80]}},default_tty1_ops:{put_char(i,f){f===null||f===10?(R(BA(i.output)),i.output=[]):f!=0&&i.output.push(f)},fsync(i){i.output?.length>0&&(R(BA(i.output)),i.output=[])}}},$A=i=>{d0()},i0={ops_table:null,mount(i){return i0.createNode(null,"/",16895,0)},createNode(i,f,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 j=o.createNode(i,f,B,D);return o.isDir(j.mode)?(j.node_ops=i0.ops_table.dir.node,j.stream_ops=i0.ops_table.dir.stream,j.contents={}):o.isFile(j.mode)?(j.node_ops=i0.ops_table.file.node,j.stream_ops=i0.ops_table.file.stream,j.usedBytes=0,j.contents=i0.emptyFileContents??(i0.emptyFileContents=new Uint8Array(0))):o.isLink(j.mode)?(j.node_ops=i0.ops_table.link.node,j.stream_ops=i0.ops_table.link.stream):o.isChrdev(j.mode)&&(j.node_ops=i0.ops_table.chrdev.node,j.stream_ops=i0.ops_table.chrdev.stream),j.atime=j.mtime=j.ctime=Date.now(),i&&(i.contents[f]=j,i.atime=i.mtime=i.ctime=j.atime),j},getFileDataAsTypedArray(i){return i.contents.subarray(0,i.usedBytes)},expandFileStorage(i,f){var B=i.contents.length;if(!(B>=f)){var D=1024*1024;f=Math.max(f,B*(B<D?2:1.125)>>>0),B&&(f=Math.max(f,256));var j=i0.getFileDataAsTypedArray(i);i.contents=new Uint8Array(f),i.contents.set(j)}},resizeFileStorage(i,f){if(i.usedBytes!=f){var B=i.contents;i.contents=new Uint8Array(f),i.contents.set(B.subarray(0,Math.min(f,i.usedBytes))),i.usedBytes=f}},node_ops:{getattr(i){var f={};return f.dev=o.isChrdev(i.mode)?i.id:1,f.ino=i.id,f.mode=i.mode,f.nlink=1,f.uid=0,f.gid=0,f.rdev=i.rdev,o.isDir(i.mode)?f.size=4096:o.isFile(i.mode)?f.size=i.usedBytes:o.isLink(i.mode)?f.size=i.link.length:f.size=0,f.atime=new Date(i.atime),f.mtime=new Date(i.mtime),f.ctime=new Date(i.ctime),f.blksize=4096,f.blocks=Math.ceil(f.size/f.blksize),f},setattr(i,f){for(let B of["mode","atime","mtime","ctime"])f[B]!=null&&(i[B]=f[B]);f.size!==void 0&&i0.resizeFileStorage(i,f.size)},lookup(i,f){throw i0.doesNotExistError||(i0.doesNotExistError=new o.ErrnoError(44),i0.doesNotExistError.stack="<generic error, no stack>"),i0.doesNotExistError},mknod(i,f,B,D){return i0.createNode(i,f,B,D)},rename(i,f,B){var D;try{D=o.lookupNode(f,B)}catch{}if(D){if(o.isDir(i.mode))for(var j in D.contents)throw new o.ErrnoError(55);o.hashRemoveNode(D)}delete i.parent.contents[i.name],f.contents[B]=i,i.name=B,f.ctime=f.mtime=i.parent.ctime=i.parent.mtime=Date.now()},unlink(i,f){delete i.contents[f],i.ctime=i.mtime=Date.now()},rmdir(i,f){var B=o.lookupNode(i,f);for(var D in B.contents)throw new o.ErrnoError(55);delete i.contents[f],i.ctime=i.mtime=Date.now()},readdir(i){return[".","..",...Object.keys(i.contents)]},symlink(i,f,B){var D=i0.createNode(i,f,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,f,B,D,j){var w=i.node.contents;if(j>=i.node.usedBytes)return 0;var N=Math.min(i.node.usedBytes-j,D);return f.set(w.subarray(j,j+N),B),N},write(i,f,B,D,j,w){if(f.buffer===ox.buffer&&(w=!1),!D)return 0;var N=i.node;return N.mtime=N.ctime=Date.now(),w?(N.contents=f.subarray(B,B+D),N.usedBytes=D):N.usedBytes===0&&j===0?(N.contents=f.slice(B,B+D),N.usedBytes=D):(i0.expandFileStorage(N,j+D),N.contents.set(f.subarray(B,B+D),j),N.usedBytes=Math.max(N.usedBytes,j+D)),D},llseek(i,f,B){var D=f;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,f,B,D,j){if(!o.isFile(i.node.mode))throw new o.ErrnoError(43);var w,N,z=i.node.contents;if(!(j&2)&&z.buffer===ox.buffer)N=!1,w=z.byteOffset;else{if(N=!0,w=$A(f),!w)throw new o.ErrnoError(48);z&&((B>0||B+f<z.length)&&(z.subarray?z=z.subarray(B,B+f):z=Array.prototype.slice.call(z,B,B+f)),ox.set(z,w))}return{ptr:w,allocated:N}},msync(i,f,B,D,j){return i0.stream_ops.write(i,f,0,D,B,!1),0}}},TA=i=>{if(typeof i!="string")return i;var f={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},B=f[i];if(typeof B>"u")throw new Error(`Unknown file open mode: ${i}`);return B},Vx=i=>(typeof i=="string"&&(i=WA(i,!0)),i.subarray||(i=new Uint8Array(i)),i),nA=(i,f)=>{var B=0;return i&&(B|=365),f&&(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},y0={mount(i){return y0.createNode(null,"/",i.opts.fs.lstat(i.opts.root).mode,0)},createNode(i,f,B,D){if(!o.isDir(B)&&!o.isFile(B)&&!o.isLink(B))throw new o.ErrnoError(q0.EINVAL);var j=o.createNode(i,f,B);return j.node_ops=y0.node_ops,j.stream_ops=y0.stream_ops,j},realPath(i){for(var f=[];i.parent!==i;)f.push(i.name),i=i.parent;return f.push(i.mount.opts.root),f.reverse(),c0.join(...f)},node_ops:{getattr(i){var f=y0.realPath(i),B;try{B=i.mount.opts.fs.lstat(f)}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,f){var B=y0.realPath(i);try{if(f.mode!==void 0&&(i.mount.opts.fs.chmod(B,f.mode),i.mode=f.mode),f.atime||f.mtime){var D=new Date(f.atime||f.mtime),j=new Date(f.mtime||f.atime);i.mount.opts.fs.utime(B,D,j)}f.size!==void 0&&i.mount.opts.fs.truncate(B,f.size)}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},lookup(i,f){try{var B=c0.join2(y0.realPath(i),f),D=i.mount.opts.fs.lstat(B).mode,j=y0.createNode(i,f,D);return j}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},mknod(i,f,B,D){var j=y0.createNode(i,f,B,D),w=y0.realPath(j);try{o.isDir(j.mode)?j.mount.opts.fs.mkdir(w,j.mode):j.mount.opts.fs.writeFile(w,"",{mode:j.mode})}catch(N){throw N.code?new o.ErrnoError(q0[N.code]):N}return j},rename(i,f,B){var D=y0.realPath(i),j=c0.join2(y0.realPath(f),B);try{i.mount.opts.fs.rename(D,j),i.name=B}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},unlink(i,f){var B=c0.join2(y0.realPath(i),f);try{i.mount.opts.fs.unlink(B)}catch(D){throw D.code?new o.ErrnoError(q0[D.code]):D}},rmdir(i,f){var B=c0.join2(y0.realPath(i),f);try{i.mount.opts.fs.rmdir(B)}catch(D){throw D.code?new o.ErrnoError(q0[D.code]):D}},readdir(i){var f=y0.realPath(i);try{return i.mount.opts.fs.readdir(f)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}},symlink(i,f,B){var D=c0.join2(y0.realPath(i),f);try{i.mount.opts.fs.symlink(B,D)}catch(j){throw j.code?new o.ErrnoError(q0[j.code]):j}},readlink(i){var f=y0.realPath(i);try{return i.mount.opts.fs.readlink(f)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}}},stream_ops:{open(i){var f=y0.realPath(i.node);try{i.nfd=i.node.mount.opts.fs.open(f,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(f){throw f.code?new o.ErrnoError(q0[f.code]):f}},read(i,f,B,D,j){try{return i.node.mount.opts.fs.read(i.nfd,f,B,D,j)}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},write(i,f,B,D,j){try{return i.node.mount.opts.fs.write(i.nfd,f,B,D,j)}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},llseek(i,f,B){var D=f;if(B===1)D+=i.position;else if(B===2&&o.isFile(i.node.mode))try{var j=i.node.node_ops.getattr(i.node);D+=j.size}catch(w){throw new o.ErrnoError(q0[w.code])}if(D<0)throw new o.ErrnoError(q0.EINVAL);return D}}},CA=async i=>{var f=await h(i);return new Uint8Array(f)},Se=(...i)=>o.createDataFile(...i),Bx=i=>i,fx=0,b0=null,$e=i=>{if(fx--,n.monitorRunDependencies?.(fx),fx==0&&b0){var f=b0;b0=null,f()}},$x=i=>{fx++,n.monitorRunDependencies?.(fx)},le=[],dA=async(i,f)=>{typeof Browser<"u"&&Browser.init();for(var B of le)if(B.canHandle(f))return B.handle(i,f);return i},qA=async(i,f,B,D,j,w,N,z)=>{var F0=f?Ex.resolve(c0.join2(i,f)):i,_0=Bx(`cp ${F0}`);$x(_0);try{var Y0=B;typeof B=="string"&&(Y0=await CA(B)),Y0=await dA(Y0,F0),z?.(),w||Se(i,f,Y0,D,j,N)}finally{$e(_0)}},Gr=(i,f,B,D,j,w,N,z,F0,_0)=>{qA(i,f,B,D,j,z,F0,_0).then(w).catch(N)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(i){Dx(this,"name","ErrnoError"),this.errno=i}},FSStream:class{constructor(){Dx(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,f,B,D){Dx(this,"node_ops",{}),Dx(this,"stream_ops",{}),Dx(this,"readMode",365),Dx(this,"writeMode",146),Dx(this,"mounted",null),i||(i=this),this.parent=i,this.mount=i.mount,this.id=o.nextInode++,this.name=f,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,f={}){if(!i)throw new o.ErrnoError(44);f.follow_mount??(f.follow_mount=!0),c0.isAbs(i)||(i=o.cwd()+"/"+i);x:for(var B=0;B<40;B++){for(var D=i.split("/").filter(_0=>!!_0),j=o.root,w="/",N=0;N<D.length;N++){var z=N===D.length-1;if(z&&f.parent)break;if(D[N]!=="."){if(D[N]===".."){if(w=c0.dirname(w),o.isRoot(j)){i=w+"/"+D.slice(N+1).join("/"),B--;continue x}else j=j.parent;continue}w=c0.join2(w,D[N]);try{j=o.lookupNode(j,D[N])}catch(_0){if(_0?.errno===44&&z&&f.noent_okay)return{path:w};throw _0}if(o.isMountpoint(j)&&(!z||f.follow_mount)&&(j=j.mounted.root),o.isLink(j.mode)&&(!z||f.follow)){if(!j.node_ops.readlink)throw new o.ErrnoError(52);var F0=j.node_ops.readlink(j);c0.isAbs(F0)||(F0=c0.dirname(w)+"/"+F0),i=F0+"/"+D.slice(N+1).join("/");continue x}}}return{path:w,node:j}}throw new o.ErrnoError(32)},getPath(i){for(var f;;){if(o.isRoot(i)){var B=i.mount.mountpoint;return f?B[B.length-1]!=="/"?`${B}/${f}`:B+f:B}f=f?`${i.name}/${f}`:i.name,i=i.parent}},hashName(i,f){for(var B=0,D=0;D<f.length;D++)B=(B<<5)-B+f.charCodeAt(D)|0;return(i+B>>>0)%o.nameTable.length},hashAddNode(i){var f=o.hashName(i.parent.id,i.name);i.name_next=o.nameTable[f],o.nameTable[f]=i},hashRemoveNode(i){var f=o.hashName(i.parent.id,i.name);if(o.nameTable[f]===i)o.nameTable[f]=i.name_next;else for(var B=o.nameTable[f];B;){if(B.name_next===i){B.name_next=i.name_next;break}B=B.name_next}},lookupNode(i,f){var B=o.mayLookup(i);if(B)throw new o.ErrnoError(B);for(var D=o.hashName(i.id,f),j=o.nameTable[D];j;j=j.name_next){var w=j.name;if(j.parent.id===i.id&&w===f)return j}return o.lookup(i,f)},createNode(i,f,B,D){var j=new o.FSNode(i,f,B,D);return o.hashAddNode(j),j},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 f=["r","w","rw"][i&3];return i&512&&(f+="w"),f},nodePermissions(i,f){return o.ignorePermissions?0:f.includes("r")&&!(i.mode&292)||f.includes("w")&&!(i.mode&146)||f.includes("x")&&!(i.mode&73)?2:0},mayLookup(i){if(!o.isDir(i.mode))return 54;var f=o.nodePermissions(i,"x");return f||(i.node_ops.lookup?0:2)},mayCreate(i,f){if(!o.isDir(i.mode))return 54;try{var B=o.lookupNode(i,f);return 20}catch{}return o.nodePermissions(i,"wx")},mayDelete(i,f,B){var D;try{D=o.lookupNode(i,f)}catch(w){return w.errno}var j=o.nodePermissions(i,"wx");if(j)return j;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,f){if(!i)return 44;if(o.isLink(i.mode))return 32;var B=o.flagsToPermissionString(f);return o.isDir(i.mode)&&(B!=="r"||f&576)?31:o.nodePermissions(i,B)},checkOpExists(i,f){if(!i)throw new o.ErrnoError(f);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 f=o.getStream(i);if(!f)throw new o.ErrnoError(8);return f},getStream:i=>o.streams[i],createStream(i,f=-1){return i=Object.assign(new o.FSStream,i),f==-1&&(f=o.nextfd()),i.fd=f,o.streams[f]=i,i},closeStream(i){o.streams[i]=null},dupStream(i,f=-1){var B=o.createStream(i,f);return B.stream_ops?.dup?.(B),B},doSetAttr(i,f,B){var D=i?.stream_ops.setattr,j=D?i:f;D??(D=f.node_ops.setattr),o.checkOpExists(D,63);try{D(j,B)}catch(w){throw w instanceof RangeError?new o.ErrnoError(22):w}},chrdev_stream_ops:{open(i){var f=o.getDevice(i.node.rdev);i.stream_ops=f.stream_ops,i.stream_ops.open?.(i)},llseek(){throw new o.ErrnoError(70)}},major:i=>i>>8,minor:i=>i&255,makedev:(i,f)=>i<<8|f,registerDevice(i,f){o.devices[i]={stream_ops:f}},getDevice:i=>o.devices[i],getMounts(i){for(var f=[],B=[i];B.length;){var D=B.pop();f.push(D),B.push(...D.mounts)}return f},syncfs(i,f){typeof i=="function"&&(f=i,i=!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),D=0;function j(z){return o.syncFSRequests--,f(z)}function w(z){if(z)return w.errored?void 0:(w.errored=!0,j(z));++D>=B.length&&j(null)}for(var N of B)N.type.syncfs?N.type.syncfs(N,i,w):w(null)},mount(i,f,B){var D=B==="/",j=!B,w;if(D&&o.root)throw new o.ErrnoError(10);if(!D&&!j){var N=o.lookupPath(B,{follow_mount:!1});if(B=N.path,w=N.node,o.isMountpoint(w))throw new o.ErrnoError(10);if(!o.isDir(w.mode))throw new o.ErrnoError(54)}var z={type:i,opts:f,mountpoint:B,mounts:[]},F0=i.mount(z);return F0.mount=z,z.root=F0,D?o.root=F0:w&&(w.mounted=z,w.mount&&w.mount.mounts.push(z)),F0},unmount(i){var f=o.lookupPath(i,{follow_mount:!1});if(!o.isMountpoint(f.node))throw new o.ErrnoError(28);var B=f.node,D=B.mounted,j=o.getMounts(D);for(var[w,N]of Object.entries(o.nameTable))for(;N;){var z=N.name_next;j.includes(N.mount)&&o.destroyNode(N),N=z}B.mounted=null;var F0=B.mount.mounts.indexOf(D);B.mount.mounts.splice(F0,1)},lookup(i,f){return i.node_ops.lookup(i,f)},mknod(i,f,B){var D=o.lookupPath(i,{parent:!0}),j=D.node,w=c0.basename(i);if(!w)throw new o.ErrnoError(28);if(w==="."||w==="..")throw new o.ErrnoError(20);var N=o.mayCreate(j,w);if(N)throw new o.ErrnoError(N);if(!j.node_ops.mknod)throw new o.ErrnoError(63);return j.node_ops.mknod(j,w,f,B)},statfs(i){return o.statfsNode(o.lookupPath(i,{follow:!0}).node)},statfsStream(i){return o.statfsNode(i.node)},statfsNode(i){var f={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(f,i.node_ops.statfs(i.mount.opts.root)),f},create(i,f=438){return f&=4095,f|=32768,o.mknod(i,f,0)},mkdir(i,f=511){return f&=1023,f|=16384,o.mknod(i,f,0)},mkdirTree(i,f){var B=i.split("/"),D="";for(var j of B)if(j){(D||c0.isAbs(i))&&(D+="/"),D+=j;try{o.mkdir(D,f)}catch(w){if(w.errno!=20)throw w}}},mkdev(i,f,B){return typeof B>"u"&&(B=f,f=438),f|=8192,o.mknod(i,f,B)},symlink(i,f){if(!Ex.resolve(i))throw new o.ErrnoError(44);var B=o.lookupPath(f,{parent:!0}),D=B.node;if(!D)throw new o.ErrnoError(44);var j=c0.basename(f),w=o.mayCreate(D,j);if(w)throw new o.ErrnoError(w);if(!D.node_ops.symlink)throw new o.ErrnoError(63);return D.node_ops.symlink(D,j,i)},rename(i,f){var B=c0.dirname(i),D=c0.dirname(f),j=c0.basename(i),w=c0.basename(f),N,z,F0;if(N=o.lookupPath(i,{parent:!0}),z=N.node,N=o.lookupPath(f,{parent:!0}),F0=N.node,!z||!F0)throw new o.ErrnoError(44);if(z.mount!==F0.mount)throw new o.ErrnoError(75);var _0=o.lookupNode(z,j),Y0=Ex.relative(i,D);if(Y0.charAt(0)!==".")throw new o.ErrnoError(28);if(Y0=Ex.relative(f,B),Y0.charAt(0)!==".")throw new o.ErrnoError(55);var L0;try{L0=o.lookupNode(F0,w)}catch{}if(_0!==L0){var P0=o.isDir(_0.mode),h0=o.mayDelete(z,j,P0);if(h0)throw new o.ErrnoError(h0);if(h0=L0?o.mayDelete(F0,w,P0):o.mayCreate(F0,w),h0)throw new o.ErrnoError(h0);if(!z.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(_0)||L0&&o.isMountpoint(L0))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,w),_0.parent=F0}catch(lx){throw lx}finally{o.hashAddNode(_0)}}},rmdir(i){var f=o.lookupPath(i,{parent:!0}),B=f.node,D=c0.basename(i),j=o.lookupNode(B,D),w=o.mayDelete(B,D,!0);if(w)throw new o.ErrnoError(w);if(!B.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(j))throw new o.ErrnoError(10);B.node_ops.rmdir(B,D),o.destroyNode(j)},readdir(i){var f=o.lookupPath(i,{follow:!0}),B=f.node,D=o.checkOpExists(B.node_ops.readdir,54);return D(B)},unlink(i){var f=o.lookupPath(i,{parent:!0}),B=f.node;if(!B)throw new o.ErrnoError(44);var D=c0.basename(i),j=o.lookupNode(B,D),w=o.mayDelete(B,D,!1);if(w)throw new o.ErrnoError(w);if(!B.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(j))throw new o.ErrnoError(10);B.node_ops.unlink(B,D),o.destroyNode(j)},readlink(i){var f=o.lookupPath(i),B=f.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,f){var B=o.lookupPath(i,{follow:!f}),D=B.node,j=o.checkOpExists(D.node_ops.getattr,63);return j(D)},fstat(i){var f=o.getStreamChecked(i),B=f.node,D=f.stream_ops.getattr,j=D?f:B;return D??(D=B.node_ops.getattr),o.checkOpExists(D,63),D(j)},lstat(i){return o.stat(i,!0)},doChmod(i,f,B,D){o.doSetAttr(i,f,{mode:B&4095|f.mode&-4096,ctime:Date.now(),dontFollow:D})},chmod(i,f,B){var D;if(typeof i=="string"){var j=o.lookupPath(i,{follow:!B});D=j.node}else D=i;o.doChmod(null,D,f,B)},lchmod(i,f){o.chmod(i,f,!0)},fchmod(i,f){var B=o.getStreamChecked(i);o.doChmod(B,B.node,f,!1)},doChown(i,f,B){o.doSetAttr(i,f,{timestamp:Date.now(),dontFollow:B})},chown(i,f,B,D){var j;if(typeof i=="string"){var w=o.lookupPath(i,{follow:!D});j=w.node}else j=i;o.doChown(null,j,D)},lchown(i,f,B){o.chown(i,f,B,!0)},fchown(i,f,B){var D=o.getStreamChecked(i);o.doChown(D,D.node,!1)},doTruncate(i,f,B){if(o.isDir(f.mode))throw new o.ErrnoError(31);if(!o.isFile(f.mode))throw new o.ErrnoError(28);var D=o.nodePermissions(f,"w");if(D)throw new o.ErrnoError(D);o.doSetAttr(i,f,{size:B,timestamp:Date.now()})},truncate(i,f){if(f<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,f)},ftruncate(i,f){var B=o.getStreamChecked(i);if(f<0||(B.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(B,B.node,f)},utime(i,f,B){var D=o.lookupPath(i,{follow:!0}),j=D.node,w=o.checkOpExists(j.node_ops.setattr,63);w(j,{atime:f,mtime:B})},open(i,f,B=438){if(i==="")throw new o.ErrnoError(44);f=TA(f),f&64?B=B&4095|32768:B=0;var D,j;if(typeof i=="object")D=i;else{j=i.endsWith("/");var w=o.lookupPath(i,{follow:!(f&131072),noent_okay:!0});D=w.node,i=w.path}var N=!1;if(f&64)if(D){if(f&128)throw new o.ErrnoError(20)}else{if(j)throw new o.ErrnoError(31);D=o.mknod(i,B|511,0),N=!0}if(!D)throw new o.ErrnoError(44);if(o.isChrdev(D.mode)&&(f&=-513),f&65536&&!o.isDir(D.mode))throw new o.ErrnoError(54);if(!N){var z=o.mayOpen(D,f);if(z)throw new o.ErrnoError(z)}f&512&&!N&&o.truncate(D,0),f&=-131713;var F0=o.createStream({node:D,path:o.getPath(D),flags:f,seekable:!0,position:0,stream_ops:D.stream_ops,ungotten:[],error:!1});return F0.stream_ops.open&&F0.stream_ops.open(F0),N&&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(f){throw f}finally{o.closeStream(i.fd)}i.fd=null},isClosed(i){return i.fd===null},llseek(i,f,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,f,B),i.ungotten=[],i.position},read(i,f,B,D,j){if(D<0||j<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 w=typeof j<"u";if(!w)j=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var N=i.stream_ops.read(i,f,B,D,j);return w||(i.position+=N),N},write(i,f,B,D,j,w){if(D<0||j<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 N=typeof j<"u";if(!N)j=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var z=i.stream_ops.write(i,f,B,D,j,w);return N||(i.position+=z),z},mmap(i,f,B,D,j){if((D&2)!==0&&(j&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(!f)throw new o.ErrnoError(28);return i.stream_ops.mmap(i,f,B,D,j)},msync(i,f,B,D,j){return i.stream_ops.msync?i.stream_ops.msync(i,f,B,D,j):0},ioctl(i,f,B){if(!i.stream_ops.ioctl)throw new o.ErrnoError(59);return i.stream_ops.ioctl(i,f,B)},readFile(i,f={}){f.flags=f.flags||0,f.encoding=f.encoding||"binary",f.encoding!=="utf8"&&f.encoding!=="binary"&&d0(`Invalid encoding type "${f.encoding}"`);var B=o.open(i,f.flags),D=o.stat(i),j=D.size,w=new Uint8Array(j);return o.read(B,w,0,j,0),f.encoding==="utf8"&&(w=BA(w)),o.close(B),w},writeFile(i,f,B={}){B.flags=B.flags||577;var D=o.open(i,B.flags,B.mode);f=Vx(f),o.write(D,f,0,f.byteLength,void 0,B.canOwn),o.close(D)},cwd:()=>o.currentPath,chdir(i){var f=o.lookupPath(i,{follow:!0});if(f.node===null)throw new o.ErrnoError(44);if(!o.isDir(f.node.mode))throw new o.ErrnoError(54);var B=o.nodePermissions(f.node,"x");if(B)throw new o.ErrnoError(B);o.currentPath=f.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,j,w,N,z)=>N,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),ex.register(o.makedev(5,0),ex.default_tty_ops),ex.register(o.makedev(6,0),ex.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var i=new Uint8Array(1024),f=0,B=()=>(f===0&&(_e(i),f=i.byteLength),i[--f]);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 f=o.createNode(i,"fd",16895,73);return f.stream_ops={llseek:i0.stream_ops.llseek},f.node_ops={lookup(B,D){var j=+D,w=o.getStreamChecked(j),N={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>w.path},id:j+1};return N.parent=N,N},readdir(){return Array.from(o.streams.entries()).filter(([B,D])=>D).map(([B,D])=>B.toString())}},f}},{},"/proc/self/fd")},createStandardStreams(i,f,B){i?o.createDevice("/dev","stdin",i):o.symlink("/dev/tty","/dev/stdin"),f?o.createDevice("/dev","stdout",null,f):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),j=o.open("/dev/stdout",1),w=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:y0}},init(i,f,B){o.initialized=!0,i??(i=n.stdin),f??(f=n.stdout),B??(B=n.stderr),o.createStandardStreams(i,f,B)},quit(){o.initialized=!1,b(0);for(var i of o.streams)i&&o.close(i)},findObject(i,f){var B=o.analyzePath(i,f);return B.exists?B.object:null},analyzePath(i,f){try{var B=o.lookupPath(i,{follow:!f});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=c0.basename(i),B=o.lookupPath(i,{follow:!f}),D.exists=!0,D.path=B.path,D.object=B.node,D.name=B.node.name,D.isRoot=B.path==="/"}catch(j){D.error=j.errno}return D},createPath(i,f,B,D){i=typeof i=="string"?i:o.getPath(i);for(var j=f.split("/").reverse();j.length;){var w=j.pop();if(w){var N=c0.join2(i,w);try{o.mkdir(N)}catch(z){if(z.errno!=20)throw z}i=N}}return N},createFile(i,f,B,D,j){var w=c0.join2(typeof i=="string"?i:o.getPath(i),f),N=nA(D,j);return o.create(w,N)},createDataFile(i,f,B,D,j,w){var N=f;i&&(i=typeof i=="string"?i:o.getPath(i),N=f?c0.join2(i,f):i);var z=nA(D,j),F0=o.create(N,z);if(B){B=Vx(B),o.chmod(F0,z|146);var _0=o.open(F0,577);o.write(_0,B,0,B.length,0,w),o.close(_0),o.chmod(F0,z)}},createDevice(i,f,B,D){var j,w=c0.join2(typeof i=="string"?i:o.getPath(i),f),N=nA(!!B,!!D);(j=o.createDevice).major??(j.major=64);var z=o.makedev(o.createDevice.major++,0);return o.registerDevice(z,{open(F0){F0.seekable=!1},close(F0){D?.buffer?.length&&D(10)},read(F0,_0,Y0,L0,P0){for(var h0=0,lx=0;lx<L0;lx++){var kx;try{kx=B()}catch{throw new o.ErrnoError(29)}if(kx===void 0&&h0===0)throw new o.ErrnoError(6);if(kx==null)break;h0++,_0[Y0+lx]=kx}return h0&&(F0.node.atime=Date.now()),h0},write(F0,_0,Y0,L0,P0){for(var h0=0;h0<L0;h0++)try{D(_0[Y0+h0])}catch{throw new o.ErrnoError(29)}return L0&&(F0.node.mtime=F0.node.ctime=Date.now()),h0}}),o.mkdev(w,N,z)},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,f,B,D,j){class w{constructor(){Dx(this,"lengthKnown",!1),Dx(this,"chunks",[])}get(P0){if(!(P0>this.length-1||P0<0)){var h0=P0%this.chunkSize,lx=P0/this.chunkSize|0;return this.getter(lx)[h0]}}setDataGetter(P0){this.getter=P0}cacheLength(){var P0=new XMLHttpRequest;P0.open("HEAD",B,!1),P0.send(null),P0.status>=200&&P0.status<300||P0.status===304||d0("Couldn't load "+B+". Status: "+P0.status);var h0=Number(P0.getResponseHeader("Content-length")),lx,kx=(lx=P0.getResponseHeader("Accept-Ranges"))&&lx==="bytes",Ux=(lx=P0.getResponseHeader("Content-Encoding"))&&lx==="gzip",Wx=1024*1024;kx||(Wx=h0);var Xx=(sA,ue)=>{sA>ue&&d0("invalid range ("+sA+", "+ue+") or no bytes requested!"),ue>h0-1&&d0("only "+h0+" bytes available! programmer error!");var jx=new XMLHttpRequest;return jx.open("GET",B,!1),h0!==Wx&&jx.setRequestHeader("Range","bytes="+sA+"-"+ue),jx.responseType="arraybuffer",jx.overrideMimeType&&jx.overrideMimeType("text/plain; charset=x-user-defined"),jx.send(null),jx.status>=200&&jx.status<300||jx.status===304||d0("Couldn't load "+B+". Status: "+jx.status),jx.response!==void 0?new Uint8Array(jx.response||[]):WA(jx.responseText||"",!0)},Ie=this;Ie.setDataGetter(sA=>{var ue=sA*Wx,jx=(sA+1)*Wx-1;return jx=Math.min(jx,h0-1),typeof Ie.chunks[sA]>"u"&&(Ie.chunks[sA]=Xx(ue,jx)),typeof Ie.chunks[sA]>"u"&&d0("doXHR failed!"),Ie.chunks[sA]}),(Ux||!h0)&&(Wx=h0=1,h0=this.getter(0).length,Wx=h0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=h0,this._chunkSize=Wx,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 N=new w,z={isDevice:!1,contents:N}}else var z={isDevice:!1,url:B};var F0=o.createFile(i,f,z,D,j);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[L0,P0]of Object.entries(F0.stream_ops))_0[L0]=(...h0)=>(o.forceLoadFile(F0),P0(...h0));function Y0(L0,P0,h0,lx,kx){var Ux=L0.node.contents;if(kx>=Ux.length)return 0;var Wx=Math.min(Ux.length-kx,lx);if(Ux.slice)for(var Xx=0;Xx<Wx;Xx++)P0[h0+Xx]=Ux[kx+Xx];else for(var Xx=0;Xx<Wx;Xx++)P0[h0+Xx]=Ux.get(kx+Xx);return Wx}return _0.read=(L0,P0,h0,lx,kx)=>(o.forceLoadFile(F0),Y0(L0,P0,h0,lx,kx)),_0.mmap=(L0,P0,h0,lx,kx)=>{o.forceLoadFile(F0);var Ux=$A(P0);if(!Ux)throw new o.ErrnoError(48);return Y0(L0,ox,Ux,P0,h0),{ptr:Ux,allocated:!0}},F0.stream_ops=_0,F0}},k0={currentUmask:18,calculateAt(i,f,B){if(c0.isAbs(f))return f;var D;if(i===-100)D=o.cwd();else{var j=k0.getStreamFromFD(i);D=j.path}if(f.length==0){if(!B)throw new o.ErrnoError(44);return D}return D+"/"+f},writeStat(i,f){f0[i>>2]=f.dev,f0[i+4>>2]=f.mode,f0[i+8>>2]=f.nlink,f0[i+12>>2]=f.uid,f0[i+16>>2]=f.gid,f0[i+20>>2]=f.rdev,K0[i+24>>3]=BigInt(f.size),O0[i+32>>2]=4096,O0[i+36>>2]=f.blocks;var B=f.atime.getTime(),D=f.mtime.getTime(),j=f.ctime.getTime();return K0[i+40>>3]=BigInt(Math.floor(B/1e3)),f0[i+48>>2]=B%1e3*1e3*1e3,K0[i+56>>3]=BigInt(Math.floor(D/1e3)),f0[i+64>>2]=D%1e3*1e3*1e3,K0[i+72>>3]=BigInt(Math.floor(j/1e3)),f0[i+80>>2]=j%1e3*1e3*1e3,K0[i+88>>3]=BigInt(f.ino),0},writeStatFs(i,f){f0[i+4>>2]=f.bsize,f0[i+60>>2]=f.bsize,K0[i+8>>3]=BigInt(f.blocks),K0[i+16>>3]=BigInt(f.bfree),K0[i+24>>3]=BigInt(f.bavail),K0[i+32>>3]=BigInt(f.files),K0[i+40>>3]=BigInt(f.ffree),f0[i+48>>2]=f.fsid,f0[i+64>>2]=f.flags,f0[i+56>>2]=f.namelen},doMsync(i,f,B,D,j){if(!o.isFile(f.node.mode))throw new o.ErrnoError(43);if(D&2)return 0;var w=eA.slice(i,i+B);o.msync(f,w,j,B,D)},getStreamFromFD(i){var f=o.getStreamChecked(i);return f},varargs:void 0,getStr(i){var f=tA(i);return f}};function Te(i,f,B,D){try{if(f=k0.getStr(f),f=k0.calculateAt(i,f),B&-8)return-28;var j=o.lookupPath(f,{follow:!0}),w=j.node;if(!w)return-44;var N="";return B&4&&(N+="r"),B&2&&(N+="w"),B&1&&(N+="x"),N&&o.nodePermissions(w,N)?-2:0}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}var PA=()=>{var i=O0[+k0.varargs>>2];return k0.varargs+=4,i},uA=PA;function Ur(i,f,B){k0.varargs=B;try{var D=k0.getStreamFromFD(i);switch(f){case 0:{var j=PA();if(j<0)return-28;for(;o.streams[j];)j++;var w;return w=o.dupStream(D,j),w.fd}case 1:case 2:return 0;case 3:return D.flags;case 4:{var j=PA(),N=289792;return D.flags=D.flags&~N|j&N,0}case 12:{var j=uA(),z=0;return J0[j+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 ce=(i,f,B)=>we(i,eA,f,B);function tr(i,f){try{if(f===0)return-28;var B=o.cwd(),D=VA(B)+1;return f<D?-68:(ce(B,i,f),D)}catch(j){if(typeof o>"u"||j.name!=="ErrnoError")throw j;return-j.errno}}function nr(i,f,B){k0.varargs=B;try{var D=k0.getStreamFromFD(i);switch(f){case 21509:return D.tty?0:-59;case 21505:{if(!D.tty)return-59;if(D.tty.ops.ioctl_tcgets){var j=D.tty.ops.ioctl_tcgets(D),w=uA();O0[w>>2]=j.c_iflag||0,O0[w+4>>2]=j.c_oflag||0,O0[w+8>>2]=j.c_cflag||0,O0[w+12>>2]=j.c_lflag||0;for(var N=0;N<32;N++)ox[w+N+17]=j.c_cc[N]||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 w=uA(),z=O0[w>>2],F0=O0[w+4>>2],_0=O0[w+8>>2],Y0=O0[w+12>>2],L0=[],N=0;N<32;N++)L0.push(ox[w+N+17]);return D.tty.ops.ioctl_tcsets(D.tty,f,{c_iflag:z,c_oflag:F0,c_cflag:_0,c_lflag:Y0,c_cc:L0})}return 0}case 21519:{if(!D.tty)return-59;var w=uA();return O0[w>>2]=0,0}case 21520:return D.tty?-28:-59;case 21537:case 21531:{var w=uA();return o.ioctl(D,f,w)}case 21523:{if(!D.tty)return-59;if(D.tty.ops.ioctl_tiocgwinsz){var P0=D.tty.ops.ioctl_tiocgwinsz(D.tty),w=uA();J0[w>>1]=P0[0],J0[w+2>>1]=P0[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 Hr(i,f,B,D){k0.varargs=D;try{f=k0.getStr(f),f=k0.calculateAt(i,f);var j=D?PA():0;return B&64&&(j&=~k0.currentUmask),o.open(f,B,j).fd}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return-w.errno}}function Jr(i,f,B,D){try{if(f=k0.getStr(f),f=k0.calculateAt(i,f),D<=0)return-28;var j=o.readlink(f),w=Math.min(D,VA(j)),N=ox[B+w];return ce(j,B,D+1),ox[B+w]=N,w}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}function Kr(i,f,B,D){try{return f=k0.getStr(f),D=k0.getStr(D),f=k0.calculateAt(i,f),D=k0.calculateAt(B,D),o.rename(f,D),0}catch(j){if(typeof o>"u"||j.name!=="ErrnoError")throw j;return-j.errno}}function Ee(i){try{return i=k0.getStr(i),o.rmdir(i),0}catch(f){if(typeof o>"u"||f.name!=="ErrnoError")throw f;return-f.errno}}function sr(i,f,B){try{if(f=k0.getStr(f),f=k0.calculateAt(i,f),!B)o.unlink(f);else if(B===512)o.rmdir(f);else return-28;return 0}catch(D){if(typeof o>"u"||D.name!=="ErrnoError")throw D;return-D.errno}}var XA=()=>{throw new Q},Be=()=>performance.now(),zr=()=>Date.now(),ir=1,Vr=i=>i>=0&&i<=3,YA=9007199254740992,qe=-9007199254740992,ar=i=>i<qe||i>YA?NaN:Number(i);function or(i,f,B){if(f=ar(f),!Vr(i))return 28;var D;if(i===0)D=zr();else if(ir)D=Be();else return 52;var j=Math.round(D*1e3*1e3);return K0[B>>3]=BigInt(j),0}var Wr=()=>2147483648,Fr=(i,f)=>Math.ceil(i/f)*f,Xr=i=>{var f=N0.buffer.byteLength,B=(i-f+65535)/65536|0;try{return N0.grow(B),Z(),1}catch{}},Yr=i=>{var f=eA.length;i>>>=0;var B=Wr();if(i>B)return!1;for(var D=1;D<=4;D*=2){var j=f*(1+.2/D);j=Math.min(j,i+100663296);var w=Math.min(B,Fr(Math.max(i,j),65536)),N=Xr(w);if(N)return!0}return!1};function Ce(i){try{var f=k0.getStreamFromFD(i);return o.close(f),0}catch(B){if(typeof o>"u"||B.name!=="ErrnoError")throw B;return B.errno}}var Qr=(i,f,B,D)=>{for(var j=0,w=0;w<B;w++){var N=f0[f>>2],z=f0[f+4>>2];f+=8;var F0=o.read(i,ox,N,z,D);if(F0<0)return-1;if(j+=F0,F0<z)break;typeof D<"u"&&(D+=F0)}return j};function Zr(i,f,B,D){try{var j=k0.getStreamFromFD(i),w=Qr(j,f,B);return f0[D>>2]=w,0}catch(N){if(typeof o>"u"||N.name!=="ErrnoError")throw N;return N.errno}}function vr(i,f,B,D){f=ar(f);try{if(isNaN(f))return 22;var j=k0.getStreamFromFD(i);return o.llseek(j,f,B),K0[D>>3]=BigInt(j.position),j.getdents&&f===0&&B===0&&(j.getdents=null),0}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return w.errno}}var fr=(i,f,B,D)=>{for(var j=0,w=0;w<B;w++){var N=f0[f>>2],z=f0[f+4>>2];f+=8;var F0=o.write(i,ox,N,z,D);if(F0<0)return-1;if(j+=F0,F0<z)break;typeof D<"u"&&(D+=F0)}return j};function QA(i,f,B,D){try{var j=k0.getStreamFromFD(i),w=fr(j,f,B);return f0[D>>2]=w,0}catch(N){if(typeof o>"u"||N.name!=="ErrnoError")throw N;return N.errno}}var lr=0,ZA=()=>fe||lr>0,Pe=i=>{I=i,ZA()||(n.onExit?.(i),t0=!0),m(i,new AA(i))},Tx=(i,f)=>{I=i,ZA()||l0(),Pe(i)},xt=i=>{if(i instanceof AA||i=="unwind")return I;m(1,i)},NA=i=>W(i),xe=i=>{var f=VA(i)+1,B=NA(f);return ce(i,B,f),B},Ne=[],Cx=i=>{var f=Ne[i];return f||(Ne[i]=f=$0.get(i)),f},de=(...i)=>o.createPath(...i),Ae=(...i)=>o.unlink(...i),a=(...i)=>o.createLazyFile(...i),l=(...i)=>o.createDevice(...i);if(o.createPreloadedFile=Gr,o.preloadFile=qA,o.staticInit(),n.noExitRuntime&&(fe=n.noExitRuntime),n.preloadPlugins&&(le=n.preloadPlugins),n.print&&(M=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(O=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=Pt,n.addRunDependency=$x,n.removeRunDependency=$e,n.FS_preloadFile=qA,n.FS_unlink=Ae,n.FS_createPath=de,n.FS_createDevice=l,n.FS=o,n.FS_createDataFile=Se,n.FS_createLazyFile=a,n.PROXYFS=y0;var d,b,y,$,G,W,o0,u0,z0,N0,$0;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,u0=N0=i.memory,z0=$0=i.__indirect_function_table}var rx={__assert_fail:SA,__syscall_faccessat:Te,__syscall_fcntl64:Ur,__syscall_getcwd:tr,__syscall_ioctl:nr,__syscall_openat:Hr,__syscall_readlinkat:Jr,__syscall_renameat:Kr,__syscall_rmdir:Ee,__syscall_unlinkat:sr,_emscripten_throw_longjmp:XA,clock_time_get:or,emscripten_resize_heap:Yr,fd_close:Ce,fd_read:Zr,fd_seek:vr,fd_write:QA,invoke_i:ee,invoke_ii:Ix,invoke_iii:Lx,invoke_iiid:Gn,invoke_iiii:Gx,invoke_iiiii:Fx,invoke_iiiiii:Un,invoke_iijii:Rn,invoke_v:mx,invoke_vi:On,invoke_vii:qx,invoke_viii:qt,invoke_viiii:DA,invoke_viiiii:Tt};function mx(i){var f=g0();try{Cx(i)()}catch(B){if(ix(f),!(B instanceof L))throw B;$(1,0)}}function qx(i,f,B){var D=g0();try{Cx(i)(f,B)}catch(j){if(ix(D),!(j instanceof L))throw j;$(1,0)}}function Ix(i,f){var B=g0();try{return Cx(i)(f)}catch(D){if(ix(B),!(D instanceof L))throw D;$(1,0)}}function Lx(i,f,B){var D=g0();try{return Cx(i)(f,B)}catch(j){if(ix(D),!(j instanceof L))throw j;$(1,0)}}function ee(i){var f=g0();try{return Cx(i)()}catch(B){if(ix(f),!(B instanceof L))throw B;$(1,0)}}function Gx(i,f,B,D){var j=g0();try{return Cx(i)(f,B,D)}catch(w){if(ix(j),!(w instanceof L))throw w;$(1,0)}}function DA(i,f,B,D,j){var w=g0();try{Cx(i)(f,B,D,j)}catch(N){if(ix(w),!(N instanceof L))throw N;$(1,0)}}function Fx(i,f,B,D,j){var w=g0();try{return Cx(i)(f,B,D,j)}catch(N){if(ix(w),!(N instanceof L))throw N;$(1,0)}}function Tt(i,f,B,D,j,w){var N=g0();try{Cx(i)(f,B,D,j,w)}catch(z){if(ix(N),!(z instanceof L))throw z;$(1,0)}}function Rn(i,f,B,D,j){var w=g0();try{return Cx(i)(f,B,D,j)}catch(N){if(ix(w),!(N instanceof L))throw N;$(1,0)}}function On(i,f){var B=g0();try{Cx(i)(f)}catch(D){if(ix(B),!(D instanceof L))throw D;$(1,0)}}function qt(i,f,B,D){var j=g0();try{Cx(i)(f,B,D)}catch(w){if(ix(j),!(w instanceof L))throw w;$(1,0)}}function Gn(i,f,B,D){var j=g0();try{return Cx(i)(f,B,D)}catch(w){if(ix(j),!(w instanceof L))throw w;$(1,0)}}function Un(i,f,B,D,j,w){var N=g0();try{return Cx(i)(f,B,D,j,w)}catch(z){if(ix(N),!(z instanceof L))throw z;$(1,0)}}function Pt(i=[]){var f=d;i.unshift(p);var B=i.length,D=NA((B+1)*4),j=D;for(var w of i)f0[j>>2]=xe(w),j+=4;f0[j>>2]=0;try{var N=f(B,D);return Tx(N,!0),N}catch(z){return xt(z)}}function At(i=u){if(fx>0){b0=At;return}if(s0(),fx>0){b0=At;return}function f(){if(n.calledRun=!0,!t0){U(),J?.(n),n.onRuntimeInitialized?.();var B=n.noInitialRun||!0;B||Pt(i),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),f()},1)):f()}var Me;return Me=await Ax(),At(),a0?s=n:s=new Promise((i,f)=>{J=i,H=f}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),Vc=lo({"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,l)=>{throw l};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var _="",h,S;if(E){var q=require("fs");_=__dirname+"/",S=a=>{a=k(a)?new URL(a):a;var l=q.readFileSync(a);return l},h=async(a,l=!0)=>{a=k(a)?new URL(a):a;var d=q.readFileSync(a,l?void 0:"utf8");return d},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(a,l)=>{throw process.exitCode=a,l}}else if(F||v){try{_=new URL(".",r).href}catch{}v&&(S=a=>{var l=new XMLHttpRequest;return l.open("GET",a,!1),l.responseType="arraybuffer",l.send(null),new Uint8Array(l.response)}),h=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 l=await fetch(a,{credentials:"same-origin"});if(l.ok)return l.arrayBuffer();throw new Error(l.status+" : "+l.url)}}var M=console.log.bind(console),R=console.error.bind(console),O,t0=!1,I,k=a=>a.startsWith("file://");class L{}class Q extends L{}function K(a){for(var l=0,d=a.length,b=new Uint8Array(d),y;l<d;++l)y=a.charCodeAt(l),b[l]=~y>>8&y;return b}var J,H,a0=!1,n0=!1;function Z(){var a=NA.buffer;ox=new Int8Array(a),J0=new Int16Array(a),eA=new Uint8Array(a),Ir=new Uint16Array(a),O0=new Int32Array(a),f0=new Uint32Array(a),Nr=new Float32Array(a),Mr=new Float64Array(a),K0=new BigInt64Array(a),Lr=new BigUint64Array(a)}function s0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)rr(n.preRun.shift());_A(zx)}function U(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),ex.init(),Ae.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function l0(){fr(),o.quit(),ex.shutdown(),n0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)er(n.postRun.shift());_A(wA)}function d0(a){n.onAbort?.(a),a=`Aborted(${a})`,R(a),t0=!0,a+=". Build with -sASSERTIONS for more info.";var l=new WebAssembly.RuntimeError(a);throw H?.(l),l}var S0;function I0(){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 vx(i){return i}async function Vx(i){return i}async function kA(i,l){try{var B=await Vx(i),p=await WebAssembly.instantiate(B,l);return p}catch(j){R(`failed to asynchronously prepare wasm: ${j}`),d0(j)}}async function _A(i,l,B){return kA(l,B)}function ax(){var i={env:rx,wasi_snapshot_preview1:rx};return i}async function Ax(){function i(w,N){return Me=w.exports,m0(Me),Q(),Me}function l(w){return i(w.instance)}var B=ax();if(n.instantiateWasm)return new Promise((w,N)=>{n.instantiateWasm(B,(K,F0)=>{w(i(K,F0))})});S0??(S0=P0());var p=await _A(G,S0,B),j=l(p);return j}class eA{constructor(l){Dx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${l})`,this.status=l}}var J0,O0,K0,ox,Nr,Ir,Mr,f0,Lr,rA,wA=i=>{for(;i.length>0;)i.shift()(n)},SA=[],rr=i=>SA.push(i),Wx=[],tr=i=>Wx.push(i),fe=!1,ix=i=>O(i),g0=()=>o0(),tA=globalThis.TextDecoder&&new TextDecoder,bx=(i,l,B,p)=>{var j=l+B;if(p)return j;for(;i[l]&&!(l>=j);)++l;return l},CA=(i,l=0,B,p)=>{var j=bx(i,l,B,p);if(j-l>16&&i.buffer&&tA)return tA.decode(i.subarray(l,j));for(var w="";l<j;){var N=i[l++];if(!(N&128)){w+=String.fromCharCode(N);continue}var K=i[l++]&63;if((N&224)==192){w+=String.fromCharCode((N&31)<<6|K);continue}var F0=i[l++]&63;if((N&240)==224?N=(N&15)<<12|K<<6|F0:N=(N&7)<<18|K<<12|F0<<6|i[l++]&63,N<65536)w+=String.fromCharCode(N);else{var _0=N-65536;w+=String.fromCharCode(55296|_0>>10,56320|_0&1023)}}return w},nA=(i,l,B)=>i?CA(rA,i,l,B):"",$A=(i,l,B,p)=>d0(`Assertion failed: ${nA(i)}, at: `+[l?nA(l):"unknown filename",B,p?nA(p):"unknown function"]),c0={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,p=i.length-1;p>=0;p--){var j=i[p];j==="."?i.splice(p,1):j===".."?(i.splice(p,1),B++):B&&(i.splice(p,1),B--)}if(l)for(;B;B--)i.unshift("..");return i},normalize:i=>{var l=c0.isAbs(i),B=i.slice(-1)==="/";return i=c0.normalizeArray(i.split("/").filter(p=>!!p),!l).join("/"),!i&&!l&&(i="."),i&&B&&(i+="/"),(l?"/":"")+i},dirname:i=>{var l=c0.splitPath(i),B=l[0],p=l[1];return!B&&!p?".":(p&&(p=p.slice(0,-1)),B+p)},basename:i=>i&&i.match(/([^\/]+|\/)\/*$/)[1],join:(...i)=>c0.normalize(i.join("/")),join2:(i,l)=>c0.normalize(i+"/"+l)},Rr=()=>{if(E){var i=require("crypto");return l=>i.randomFillSync(l)}return l=>(crypto.getRandomValues(l),0)},we=i=>(we=Rr())(i),Ex={resolve:(...i)=>{for(var l="",B=!1,p=i.length-1;p>=-1&&!B;p--){var j=p>=0?i[p]:o.cwd();if(typeof j!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!j)return"";l=j+"/"+l,B=c0.isAbs(j)}return l=c0.normalizeArray(l.split("/").filter(w=>!!w),!B).join("/"),(B?"/":"")+l||"."},relative:(i,l)=>{i=Ex.resolve(i).slice(1),l=Ex.resolve(l).slice(1);function B(_0){for(var Y0=0;Y0<_0.length&&_0[Y0]==="";Y0++);for(var L0=_0.length-1;L0>=0&&_0[L0]==="";L0--);return Y0>L0?[]:_0.slice(Y0,L0-Y0+1)}for(var p=B(i.split("/")),j=B(l.split("/")),w=Math.min(p.length,j.length),N=w,K=0;K<w;K++)if(p[K]!==j[K]){N=K;break}for(var F0=[],K=N;K<p.length;K++)F0.push("..");return F0=F0.concat(j.slice(N)),F0.join("/")}},Gx=[],WA=i=>{for(var l=0,B=0;B<i.length;++B){var p=i.charCodeAt(B);p<=127?l++:p<=2047?l+=2:p>=55296&&p<=57343?(l+=4,++B):l+=3}return l},Se=(i,l,B,p)=>{if(!(p>0))return 0;for(var j=B,w=B+p-1,N=0;N<i.length;++N){var K=i.codePointAt(N);if(K<=127){if(B>=w)break;l[B++]=K}else if(K<=2047){if(B+1>=w)break;l[B++]=192|K>>6,l[B++]=128|K&63}else if(K<=65535){if(B+2>=w)break;l[B++]=224|K>>12,l[B++]=128|K>>6&63,l[B++]=128|K&63}else{if(B+3>=w)break;l[B++]=240|K>>18,l[B++]=128|K>>12&63,l[B++]=128|K>>6&63,l[B++]=128|K&63,N++}}return l[B]=0,B-j},XA=(i,l,B)=>{var p=B>0?B:WA(i)+1,j=new Array(p),w=Se(i,j,0,j.length);return l&&(j.length=w),j},Or=()=>{if(!Gx.length){var i=null;if(E){var l=256,B=Buffer.alloc(l),p=0,j=process.stdin.fd;try{p=P.readSync(j,B,0,l)}catch(w){if(w.toString().includes("EOF"))p=0;else throw w}p>0&&(i=B.slice(0,p).toString("utf-8"))}else globalThis.window?.prompt&&(i=window.prompt("Input: "),i!==null&&(i+=`
|
|
1162
|
+
`));if(!i)return null;Gx=XA(i,!0)}return Gx.shift()},ex={ttys:[],init(){},shutdown(){},register(i,l){ex.ttys[i]={input:[],output:[],ops:l},o.registerDevice(i,ex.stream_ops)},stream_ops:{open(i){var l=ex.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,p,j){if(!i.tty||!i.tty.ops.get_char)throw new o.ErrnoError(60);for(var w=0,N=0;N<p;N++){var K;try{K=i.tty.ops.get_char(i.tty)}catch{throw new o.ErrnoError(29)}if(K===void 0&&w===0)throw new o.ErrnoError(6);if(K==null)break;w++,l[B+N]=K}return w&&(i.node.atime=Date.now()),w},write(i,l,B,p,j){if(!i.tty||!i.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var w=0;w<p;w++)i.tty.ops.put_char(i.tty,l[B+w])}catch{throw new o.ErrnoError(29)}return p&&(i.node.mtime=i.node.ctime=Date.now()),w}},default_tty_ops:{get_char(i){return Or()},put_char(i,l){l===null||l===10?(I(CA(i.output)),i.output=[]):l!=0&&i.output.push(l)},fsync(i){i.output?.length>0&&(I(CA(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?(R(CA(i.output)),i.output=[]):l!=0&&i.output.push(l)},fsync(i){i.output?.length>0&&(R(CA(i.output)),i.output=[])}}},TA=i=>{d0()},n0={ops_table:null,mount(i){return n0.createNode(null,"/",16895,0)},createNode(i,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 j=o.createNode(i,l,B,p);return o.isDir(j.mode)?(j.node_ops=n0.ops_table.dir.node,j.stream_ops=n0.ops_table.dir.stream,j.contents={}):o.isFile(j.mode)?(j.node_ops=n0.ops_table.file.node,j.stream_ops=n0.ops_table.file.stream,j.usedBytes=0,j.contents=n0.emptyFileContents??(n0.emptyFileContents=new Uint8Array(0))):o.isLink(j.mode)?(j.node_ops=n0.ops_table.link.node,j.stream_ops=n0.ops_table.link.stream):o.isChrdev(j.mode)&&(j.node_ops=n0.ops_table.chrdev.node,j.stream_ops=n0.ops_table.chrdev.stream),j.atime=j.mtime=j.ctime=Date.now(),i&&(i.contents[l]=j,i.atime=i.mtime=i.ctime=j.atime),j},getFileDataAsTypedArray(i){return i.contents.subarray(0,i.usedBytes)},expandFileStorage(i,l){var B=i.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 j=n0.getFileDataAsTypedArray(i);i.contents=new Uint8Array(l),i.contents.set(j)}},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&&n0.resizeFileStorage(i,l.size)},lookup(i,l){throw n0.doesNotExistError||(n0.doesNotExistError=new o.ErrnoError(44),n0.doesNotExistError.stack="<generic error, no stack>"),n0.doesNotExistError},mknod(i,l,B,p){return n0.createNode(i,l,B,p)},rename(i,l,B){var p;try{p=o.lookupNode(l,B)}catch{}if(p){if(o.isDir(i.mode))for(var j in p.contents)throw new o.ErrnoError(55);o.hashRemoveNode(p)}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 p 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 p=n0.createNode(i,l,41471,0);return p.link=B,p},readlink(i){if(!o.isLink(i.mode))throw new o.ErrnoError(28);return i.link}},stream_ops:{read(i,l,B,p,j){var w=i.node.contents;if(j>=i.node.usedBytes)return 0;var N=Math.min(i.node.usedBytes-j,p);return l.set(w.subarray(j,j+N),B),N},write(i,l,B,p,j,w){if(l.buffer===ox.buffer&&(w=!1),!p)return 0;var N=i.node;return N.mtime=N.ctime=Date.now(),w?(N.contents=l.subarray(B,B+p),N.usedBytes=p):N.usedBytes===0&&j===0?(N.contents=l.slice(B,B+p),N.usedBytes=p):(n0.expandFileStorage(N,j+p),N.contents.set(l.subarray(B,B+p),j),N.usedBytes=Math.max(N.usedBytes,j+p)),p},llseek(i,l,B){var p=l;if(B===1?p+=i.position:B===2&&o.isFile(i.node.mode)&&(p+=i.node.usedBytes),p<0)throw new o.ErrnoError(28);return p},mmap(i,l,B,p,j){if(!o.isFile(i.node.mode))throw new o.ErrnoError(43);var w,N,K=i.node.contents;if(!(j&2)&&K.buffer===ox.buffer)N=!1,w=K.byteOffset;else{if(N=!0,w=TA(l),!w)throw new o.ErrnoError(48);K&&((B>0||B+l<K.length)&&(K.subarray?K=K.subarray(B,B+l):K=Array.prototype.slice.call(K,B,B+l)),ox.set(K,w))}return{ptr:w,allocated:N}},msync(i,l,B,p,j){return n0.stream_ops.write(i,l,0,p,B,!1),0}}},PA=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},Xx=i=>(typeof i=="string"&&(i=XA(i,!0)),i.subarray||(i=new Uint8Array(i)),i),sA=(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},y0={mount(i){return y0.createNode(null,"/",i.opts.fs.lstat(i.opts.root).mode,0)},createNode(i,l,B,p){if(!o.isDir(B)&&!o.isFile(B)&&!o.isLink(B))throw new o.ErrnoError(q0.EINVAL);var j=o.createNode(i,l,B);return j.node_ops=y0.node_ops,j.stream_ops=y0.stream_ops,j},realPath(i){for(var l=[];i.parent!==i;)l.push(i.name),i=i.parent;return l.push(i.mount.opts.root),l.reverse(),c0.join(...l)},node_ops:{getattr(i){var l=y0.realPath(i),B;try{B=i.mount.opts.fs.lstat(l)}catch(p){throw p.code?new o.ErrnoError(q0[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(i,l){var B=y0.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 p=new Date(l.atime||l.mtime),j=new Date(l.mtime||l.atime);i.mount.opts.fs.utime(B,p,j)}l.size!==void 0&&i.mount.opts.fs.truncate(B,l.size)}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},lookup(i,l){try{var B=c0.join2(y0.realPath(i),l),p=i.mount.opts.fs.lstat(B).mode,j=y0.createNode(i,l,p);return j}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},mknod(i,l,B,p){var j=y0.createNode(i,l,B,p),w=y0.realPath(j);try{o.isDir(j.mode)?j.mount.opts.fs.mkdir(w,j.mode):j.mount.opts.fs.writeFile(w,"",{mode:j.mode})}catch(N){throw N.code?new o.ErrnoError(q0[N.code]):N}return j},rename(i,l,B){var p=y0.realPath(i),j=c0.join2(y0.realPath(l),B);try{i.mount.opts.fs.rename(p,j),i.name=B}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},unlink(i,l){var B=c0.join2(y0.realPath(i),l);try{i.mount.opts.fs.unlink(B)}catch(p){throw p.code?new o.ErrnoError(q0[p.code]):p}},rmdir(i,l){var B=c0.join2(y0.realPath(i),l);try{i.mount.opts.fs.rmdir(B)}catch(p){throw p.code?new o.ErrnoError(q0[p.code]):p}},readdir(i){var l=y0.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 p=c0.join2(y0.realPath(i),l);try{i.mount.opts.fs.symlink(B,p)}catch(j){throw j.code?new o.ErrnoError(q0[j.code]):j}},readlink(i){var l=y0.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=y0.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,p,j){try{return i.node.mount.opts.fs.read(i.nfd,l,B,p,j)}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},write(i,l,B,p,j){try{return i.node.mount.opts.fs.write(i.nfd,l,B,p,j)}catch(w){throw w.code?new o.ErrnoError(q0[w.code]):w}},llseek(i,l,B){var p=l;if(B===1)p+=i.position;else if(B===2&&o.isFile(i.node.mode))try{var j=i.node.node_ops.getattr(i.node);p+=j.size}catch(w){throw new o.ErrnoError(q0[w.code])}if(p<0)throw new o.ErrnoError(q0.EINVAL);return p}}},dA=async i=>{var l=await h(i);return new Uint8Array(l)},$e=(...i)=>o.createDataFile(...i),Bx=i=>i,lx=0,b0=null,Te=i=>{if(lx--,n.monitorRunDependencies?.(lx),lx==0&&b0){var l=b0;b0=null,l()}},Tx=i=>{lx++,n.monitorRunDependencies?.(lx)},ce=[],uA=async(i,l)=>{typeof Browser<"u"&&Browser.init();for(var B of ce)if(B.canHandle(l))return B.handle(i,l);return i},qA=async(i,l,B,p,j,w,N,K)=>{var F0=l?Ex.resolve(c0.join2(i,l)):i,_0=Bx(`cp ${F0}`);Tx(_0);try{var Y0=B;typeof B=="string"&&(Y0=await dA(B)),Y0=await uA(Y0,F0),K?.(),w||$e(i,l,Y0,p,j,N)}finally{Te(_0)}},Gr=(i,l,B,p,j,w,N,K,F0,_0)=>{qA(i,l,B,p,j,K,F0,_0).then(w).catch(N)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(i){Dx(this,"name","ErrnoError"),this.errno=i}},FSStream:class{constructor(){Dx(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,p){Dx(this,"node_ops",{}),Dx(this,"stream_ops",{}),Dx(this,"readMode",365),Dx(this,"writeMode",146),Dx(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=p,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),c0.isAbs(i)||(i=o.cwd()+"/"+i);x:for(var B=0;B<40;B++){for(var p=i.split("/").filter(_0=>!!_0),j=o.root,w="/",N=0;N<p.length;N++){var K=N===p.length-1;if(K&&l.parent)break;if(p[N]!=="."){if(p[N]===".."){if(w=c0.dirname(w),o.isRoot(j)){i=w+"/"+p.slice(N+1).join("/"),B--;continue x}else j=j.parent;continue}w=c0.join2(w,p[N]);try{j=o.lookupNode(j,p[N])}catch(_0){if(_0?.errno===44&&K&&l.noent_okay)return{path:w};throw _0}if(o.isMountpoint(j)&&(!K||l.follow_mount)&&(j=j.mounted.root),o.isLink(j.mode)&&(!K||l.follow)){if(!j.node_ops.readlink)throw new o.ErrnoError(52);var F0=j.node_ops.readlink(j);c0.isAbs(F0)||(F0=c0.dirname(w)+"/"+F0),i=F0+"/"+p.slice(N+1).join("/");continue x}}}return{path:w,node:j}}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,p=0;p<l.length;p++)B=(B<<5)-B+l.charCodeAt(p)|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 p=o.hashName(i.id,l),j=o.nameTable[p];j;j=j.name_next){var w=j.name;if(j.parent.id===i.id&&w===l)return j}return o.lookup(i,l)},createNode(i,l,B,p){var j=new o.FSNode(i,l,B,p);return o.hashAddNode(j),j},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 p;try{p=o.lookupNode(i,l)}catch(w){return w.errno}var j=o.nodePermissions(i,"wx");if(j)return j;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(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 p=i?.stream_ops.setattr,j=p?i:l;p??(p=l.node_ops.setattr),o.checkOpExists(p,63);try{p(j,B)}catch(w){throw w instanceof RangeError?new o.ErrnoError(22):w}},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 p=B.pop();l.push(p),B.push(...p.mounts)}return l},syncfs(i,l){typeof i=="function"&&(l=i,i=!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 j(K){return o.syncFSRequests--,l(K)}function w(K){if(K)return w.errored?void 0:(w.errored=!0,j(K));++p>=B.length&&j(null)}for(var N of B)N.type.syncfs?N.type.syncfs(N,i,w):w(null)},mount(i,l,B){var p=B==="/",j=!B,w;if(p&&o.root)throw new o.ErrnoError(10);if(!p&&!j){var N=o.lookupPath(B,{follow_mount:!1});if(B=N.path,w=N.node,o.isMountpoint(w))throw new o.ErrnoError(10);if(!o.isDir(w.mode))throw new o.ErrnoError(54)}var K={type:i,opts:l,mountpoint:B,mounts:[]},F0=i.mount(K);return F0.mount=K,K.root=F0,p?o.root=F0:w&&(w.mounted=K,w.mount&&w.mount.mounts.push(K)),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,p=B.mounted,j=o.getMounts(p);for(var[w,N]of Object.entries(o.nameTable))for(;N;){var K=N.name_next;j.includes(N.mount)&&o.destroyNode(N),N=K}B.mounted=null;var F0=B.mount.mounts.indexOf(p);B.mount.mounts.splice(F0,1)},lookup(i,l){return i.node_ops.lookup(i,l)},mknod(i,l,B){var p=o.lookupPath(i,{parent:!0}),j=p.node,w=c0.basename(i);if(!w)throw new o.ErrnoError(28);if(w==="."||w==="..")throw new o.ErrnoError(20);var N=o.mayCreate(j,w);if(N)throw new o.ErrnoError(N);if(!j.node_ops.mknod)throw new o.ErrnoError(63);return j.node_ops.mknod(j,w,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("/"),p="";for(var j of B)if(j){(p||c0.isAbs(i))&&(p+="/"),p+=j;try{o.mkdir(p,l)}catch(w){if(w.errno!=20)throw w}}},mkdev(i,l,B){return typeof B>"u"&&(B=l,l=438),l|=8192,o.mknod(i,l,B)},symlink(i,l){if(!Ex.resolve(i))throw new o.ErrnoError(44);var B=o.lookupPath(l,{parent:!0}),p=B.node;if(!p)throw new o.ErrnoError(44);var j=c0.basename(l),w=o.mayCreate(p,j);if(w)throw new o.ErrnoError(w);if(!p.node_ops.symlink)throw new o.ErrnoError(63);return p.node_ops.symlink(p,j,i)},rename(i,l){var B=c0.dirname(i),p=c0.dirname(l),j=c0.basename(i),w=c0.basename(l),N,K,F0;if(N=o.lookupPath(i,{parent:!0}),K=N.node,N=o.lookupPath(l,{parent:!0}),F0=N.node,!K||!F0)throw new o.ErrnoError(44);if(K.mount!==F0.mount)throw new o.ErrnoError(75);var _0=o.lookupNode(K,j),Y0=Ex.relative(i,p);if(Y0.charAt(0)!==".")throw new o.ErrnoError(28);if(Y0=Ex.relative(l,B),Y0.charAt(0)!==".")throw new o.ErrnoError(55);var L0;try{L0=o.lookupNode(F0,w)}catch{}if(_0!==L0){var N0=o.isDir(_0.mode),h0=o.mayDelete(K,j,N0);if(h0)throw new o.ErrnoError(h0);if(h0=L0?o.mayDelete(F0,w,N0):o.mayCreate(F0,w),h0)throw new o.ErrnoError(h0);if(!K.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(_0)||L0&&o.isMountpoint(L0))throw new o.ErrnoError(10);if(F0!==K&&(h0=o.nodePermissions(K,"w"),h0))throw new o.ErrnoError(h0);o.hashRemoveNode(_0);try{K.node_ops.rename(_0,F0,w),_0.parent=F0}catch(fx){throw fx}finally{o.hashAddNode(_0)}}},rmdir(i){var l=o.lookupPath(i,{parent:!0}),B=l.node,p=c0.basename(i),j=o.lookupNode(B,p),w=o.mayDelete(B,p,!0);if(w)throw new o.ErrnoError(w);if(!B.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(j))throw new o.ErrnoError(10);B.node_ops.rmdir(B,p),o.destroyNode(j)},readdir(i){var l=o.lookupPath(i,{follow:!0}),B=l.node,p=o.checkOpExists(B.node_ops.readdir,54);return p(B)},unlink(i){var l=o.lookupPath(i,{parent:!0}),B=l.node;if(!B)throw new o.ErrnoError(44);var p=c0.basename(i),j=o.lookupNode(B,p),w=o.mayDelete(B,p,!1);if(w)throw new o.ErrnoError(w);if(!B.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(j))throw new o.ErrnoError(10);B.node_ops.unlink(B,p),o.destroyNode(j)},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}),p=B.node,j=o.checkOpExists(p.node_ops.getattr,63);return j(p)},fstat(i){var l=o.getStreamChecked(i),B=l.node,p=l.stream_ops.getattr,j=p?l:B;return p??(p=B.node_ops.getattr),o.checkOpExists(p,63),p(j)},lstat(i){return o.stat(i,!0)},doChmod(i,l,B,p){o.doSetAttr(i,l,{mode:B&4095|l.mode&-4096,ctime:Date.now(),dontFollow:p})},chmod(i,l,B){var p;if(typeof i=="string"){var j=o.lookupPath(i,{follow:!B});p=j.node}else p=i;o.doChmod(null,p,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,p){var j;if(typeof i=="string"){var w=o.lookupPath(i,{follow:!p});j=w.node}else j=i;o.doChown(null,j,p)},lchown(i,l,B){o.chown(i,l,B,!0)},fchown(i,l,B){var p=o.getStreamChecked(i);o.doChown(p,p.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 p=o.nodePermissions(l,"w");if(p)throw new o.ErrnoError(p);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 p=o.lookupPath(i,{follow:!0});B=p.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 p=o.lookupPath(i,{follow:!0}),j=p.node,w=o.checkOpExists(j.node_ops.setattr,63);w(j,{atime:l,mtime:B})},open(i,l,B=438){if(i==="")throw new o.ErrnoError(44);l=PA(l),l&64?B=B&4095|32768:B=0;var p,j;if(typeof i=="object")p=i;else{j=i.endsWith("/");var w=o.lookupPath(i,{follow:!(l&131072),noent_okay:!0});p=w.node,i=w.path}var N=!1;if(l&64)if(p){if(l&128)throw new o.ErrnoError(20)}else{if(j)throw new o.ErrnoError(31);p=o.mknod(i,B|511,0),N=!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(!N){var K=o.mayOpen(p,l);if(K)throw new o.ErrnoError(K)}l&512&&!N&&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),N&&o.chmod(p,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,p,j){if(p<0||j<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 w=typeof j<"u";if(!w)j=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var N=i.stream_ops.read(i,l,B,p,j);return w||(i.position+=N),N},write(i,l,B,p,j,w){if(p<0||j<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 N=typeof j<"u";if(!N)j=i.position;else if(!i.seekable)throw new o.ErrnoError(70);var K=i.stream_ops.write(i,l,B,p,j,w);return N||(i.position+=K),K},mmap(i,l,B,p,j){if((p&2)!==0&&(j&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,p,j)},msync(i,l,B,p,j){return i.stream_ops.msync?i.stream_ops.msync(i,l,B,p,j):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),p=o.stat(i),j=p.size,w=new Uint8Array(j);return o.read(B,w,0,j,0),l.encoding==="utf8"&&(w=CA(w)),o.close(B),w},writeFile(i,l,B={}){B.flags=B.flags||577;var p=o.open(i,B.flags,B.mode);l=Xx(l),o.write(p,l,0,l.byteLength,void 0,B.canOwn),o.close(p)},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:(p,j,w,N,K)=>N,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),ex.register(o.makedev(5,0),ex.default_tty_ops),ex.register(o.makedev(6,0),ex.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&&(we(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:n0.stream_ops.llseek},l.node_ops={lookup(B,p){var j=+p,w=o.getStreamChecked(j),N={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>w.path},id:j+1};return N.parent=N,N},readdir(){return Array.from(o.streams.entries()).filter(([B,p])=>p).map(([B,p])=>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 p=o.open("/dev/stdin",0),j=o.open("/dev/stdout",1),w=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:y0}},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 p={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});p.parentExists=!0,p.parentPath=B.path,p.parentObject=B.node,p.name=c0.basename(i),B=o.lookupPath(i,{follow:!l}),p.exists=!0,p.path=B.path,p.object=B.node,p.name=B.node.name,p.isRoot=B.path==="/"}catch(j){p.error=j.errno}return p},createPath(i,l,B,p){i=typeof i=="string"?i:o.getPath(i);for(var j=l.split("/").reverse();j.length;){var w=j.pop();if(w){var N=c0.join2(i,w);try{o.mkdir(N)}catch(K){if(K.errno!=20)throw K}i=N}}return N},createFile(i,l,B,p,j){var w=c0.join2(typeof i=="string"?i:o.getPath(i),l),N=sA(p,j);return o.create(w,N)},createDataFile(i,l,B,p,j,w){var N=l;i&&(i=typeof i=="string"?i:o.getPath(i),N=l?c0.join2(i,l):i);var K=sA(p,j),F0=o.create(N,K);if(B){B=Xx(B),o.chmod(F0,K|146);var _0=o.open(F0,577);o.write(_0,B,0,B.length,0,w),o.close(_0),o.chmod(F0,K)}},createDevice(i,l,B,p){var j,w=c0.join2(typeof i=="string"?i:o.getPath(i),l),N=sA(!!B,!!p);(j=o.createDevice).major??(j.major=64);var K=o.makedev(o.createDevice.major++,0);return o.registerDevice(K,{open(F0){F0.seekable=!1},close(F0){p?.buffer?.length&&p(10)},read(F0,_0,Y0,L0,N0){for(var h0=0,fx=0;fx<L0;fx++){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[Y0+fx]=_x}return h0&&(F0.node.atime=Date.now()),h0},write(F0,_0,Y0,L0,N0){for(var h0=0;h0<L0;h0++)try{p(_0[Y0+h0])}catch{throw new o.ErrnoError(29)}return L0&&(F0.node.mtime=F0.node.ctime=Date.now()),h0}}),o.mkdev(w,N,K)},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,p,j){class w{constructor(){Dx(this,"lengthKnown",!1),Dx(this,"chunks",[])}get(N0){if(!(N0>this.length-1||N0<0)){var h0=N0%this.chunkSize,fx=N0/this.chunkSize|0;return this.getter(fx)[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")),fx,_x=(fx=N0.getResponseHeader("Accept-Ranges"))&&fx==="bytes",Hx=(fx=N0.getResponseHeader("Content-Encoding"))&&fx==="gzip",Yx=1024*1024;_x||(Yx=h0);var Qx=(iA,De)=>{iA>De&&d0("invalid range ("+iA+", "+De+") or no bytes requested!"),De>h0-1&&d0("only "+h0+" bytes available! programmer error!");var jx=new XMLHttpRequest;return jx.open("GET",B,!1),h0!==Yx&&jx.setRequestHeader("Range","bytes="+iA+"-"+De),jx.responseType="arraybuffer",jx.overrideMimeType&&jx.overrideMimeType("text/plain; charset=x-user-defined"),jx.send(null),jx.status>=200&&jx.status<300||jx.status===304||d0("Couldn't load "+B+". Status: "+jx.status),jx.response!==void 0?new Uint8Array(jx.response||[]):XA(jx.responseText||"",!0)},Le=this;Le.setDataGetter(iA=>{var De=iA*Yx,jx=(iA+1)*Yx-1;return jx=Math.min(jx,h0-1),typeof Le.chunks[iA]>"u"&&(Le.chunks[iA]=Qx(De,jx)),typeof Le.chunks[iA]>"u"&&d0("doXHR failed!"),Le.chunks[iA]}),(Hx||!h0)&&(Yx=h0=1,h0=this.getter(0).length,Yx=h0,I("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=h0,this._chunkSize=Yx,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 N=new w,K={isDevice:!1,contents:N}}else var K={isDevice:!1,url:B};var F0=o.createFile(i,l,K,p,j);K.contents?F0.contents=K.contents:K.url&&(F0.contents=null,F0.url=K.url),Object.defineProperties(F0,{usedBytes:{get:function(){return this.contents.length}}});var _0={};for(let[L0,N0]of Object.entries(F0.stream_ops))_0[L0]=(...h0)=>(o.forceLoadFile(F0),N0(...h0));function Y0(L0,N0,h0,fx,_x){var Hx=L0.node.contents;if(_x>=Hx.length)return 0;var Yx=Math.min(Hx.length-_x,fx);if(Hx.slice)for(var Qx=0;Qx<Yx;Qx++)N0[h0+Qx]=Hx[_x+Qx];else for(var Qx=0;Qx<Yx;Qx++)N0[h0+Qx]=Hx.get(_x+Qx);return Yx}return _0.read=(L0,N0,h0,fx,_x)=>(o.forceLoadFile(F0),Y0(L0,N0,h0,fx,_x)),_0.mmap=(L0,N0,h0,fx,_x)=>{o.forceLoadFile(F0);var Hx=TA(N0);if(!Hx)throw new o.ErrnoError(48);return Y0(L0,ox,Hx,N0,h0),{ptr:Hx,allocated:!0}},F0.stream_ops=_0,F0}},k0={currentUmask:18,calculateAt(i,l,B){if(c0.isAbs(l))return l;var p;if(i===-100)p=o.cwd();else{var j=k0.getStreamFromFD(i);p=j.path}if(l.length==0){if(!B)throw new o.ErrnoError(44);return p}return p+"/"+l},writeStat(i,l){f0[i>>2]=l.dev,f0[i+4>>2]=l.mode,f0[i+8>>2]=l.nlink,f0[i+12>>2]=l.uid,f0[i+16>>2]=l.gid,f0[i+20>>2]=l.rdev,K0[i+24>>3]=BigInt(l.size),O0[i+32>>2]=4096,O0[i+36>>2]=l.blocks;var B=l.atime.getTime(),p=l.mtime.getTime(),j=l.ctime.getTime();return K0[i+40>>3]=BigInt(Math.floor(B/1e3)),f0[i+48>>2]=B%1e3*1e3*1e3,K0[i+56>>3]=BigInt(Math.floor(p/1e3)),f0[i+64>>2]=p%1e3*1e3*1e3,K0[i+72>>3]=BigInt(Math.floor(j/1e3)),f0[i+80>>2]=j%1e3*1e3*1e3,K0[i+88>>3]=BigInt(l.ino),0},writeStatFs(i,l){f0[i+4>>2]=l.bsize,f0[i+60>>2]=l.bsize,K0[i+8>>3]=BigInt(l.blocks),K0[i+16>>3]=BigInt(l.bfree),K0[i+24>>3]=BigInt(l.bavail),K0[i+32>>3]=BigInt(l.files),K0[i+40>>3]=BigInt(l.ffree),f0[i+48>>2]=l.fsid,f0[i+64>>2]=l.flags,f0[i+56>>2]=l.namelen},doMsync(i,l,B,p,j){if(!o.isFile(l.node.mode))throw new o.ErrnoError(43);if(p&2)return 0;var w=rA.slice(i,i+B);o.msync(l,w,j,B,p)},getStreamFromFD(i){var l=o.getStreamChecked(i);return l},varargs:void 0,getStr(i){var l=nA(i);return l}};function Pe(i,l,B,p){try{if(l=k0.getStr(l),l=k0.calculateAt(i,l),B&-8)return-28;var j=o.lookupPath(l,{follow:!0}),w=j.node;if(!w)return-44;var N="";return B&4&&(N+="r"),B&2&&(N+="w"),B&1&&(N+="x"),N&&o.nodePermissions(w,N)?-2:0}catch(K){if(typeof o>"u"||K.name!=="ErrnoError")throw K;return-K.errno}}var NA=()=>{var i=O0[+k0.varargs>>2];return k0.varargs+=4,i},DA=NA;function Ur(i,l,B){k0.varargs=B;try{var p=k0.getStreamFromFD(i);switch(l){case 0:{var j=NA();if(j<0)return-28;for(;o.streams[j];)j++;var w;return w=o.dupStream(p,j),w.fd}case 1:case 2:return 0;case 3:return p.flags;case 4:{var j=NA(),N=289792;return p.flags=p.flags&~N|j&N,0}case 12:{var j=DA(),K=0;return J0[j+K>>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 Ee=(i,l,B)=>Se(i,rA,l,B);function nr(i,l){try{if(l===0)return-28;var B=o.cwd(),p=WA(B)+1;return l<p?-68:(Ee(B,i,l),p)}catch(j){if(typeof o>"u"||j.name!=="ErrnoError")throw j;return-j.errno}}function sr(i,l,B){k0.varargs=B;try{var p=k0.getStreamFromFD(i);switch(l){case 21509:return p.tty?0:-59;case 21505:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcgets){var j=p.tty.ops.ioctl_tcgets(p),w=DA();O0[w>>2]=j.c_iflag||0,O0[w+4>>2]=j.c_oflag||0,O0[w+8>>2]=j.c_cflag||0,O0[w+12>>2]=j.c_lflag||0;for(var N=0;N<32;N++)ox[w+N+17]=j.c_cc[N]||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 w=DA(),K=O0[w>>2],F0=O0[w+4>>2],_0=O0[w+8>>2],Y0=O0[w+12>>2],L0=[],N=0;N<32;N++)L0.push(ox[w+N+17]);return p.tty.ops.ioctl_tcsets(p.tty,l,{c_iflag:K,c_oflag:F0,c_cflag:_0,c_lflag:Y0,c_cc:L0})}return 0}case 21519:{if(!p.tty)return-59;var w=DA();return O0[w>>2]=0,0}case 21520:return p.tty?-28:-59;case 21537:case 21531:{var w=DA();return o.ioctl(p,l,w)}case 21523:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tiocgwinsz){var N0=p.tty.ops.ioctl_tiocgwinsz(p.tty),w=DA();J0[w>>1]=N0[0],J0[w+2>>1]=N0[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 Hr(i,l,B,p){k0.varargs=p;try{l=k0.getStr(l),l=k0.calculateAt(i,l);var j=p?NA():0;return B&64&&(j&=~k0.currentUmask),o.open(l,B,j).fd}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return-w.errno}}function Jr(i,l,B,p){try{if(l=k0.getStr(l),l=k0.calculateAt(i,l),p<=0)return-28;var j=o.readlink(l),w=Math.min(p,WA(j)),N=ox[B+w];return Ee(j,B,p+1),ox[B+w]=N,w}catch(K){if(typeof o>"u"||K.name!=="ErrnoError")throw K;return-K.errno}}function Kr(i,l,B,p){try{return l=k0.getStr(l),p=k0.getStr(p),l=k0.calculateAt(i,l),p=k0.calculateAt(B,p),o.rename(l,p),0}catch(j){if(typeof o>"u"||j.name!=="ErrnoError")throw j;return-j.errno}}function Be(i){try{return i=k0.getStr(i),o.rmdir(i),0}catch(l){if(typeof o>"u"||l.name!=="ErrnoError")throw l;return-l.errno}}function ir(i,l,B){try{if(l=k0.getStr(l),l=k0.calculateAt(i,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 YA=()=>{throw new Z},Ce=()=>performance.now(),zr=()=>Date.now(),ar=1,Vr=i=>i>=0&&i<=3,QA=9007199254740992,qe=-9007199254740992,or=i=>i<qe||i>QA?NaN:Number(i);function Fr(i,l,B){if(l=or(l),!Vr(i))return 28;var p;if(i===0)p=zr();else if(ar)p=Ce();else return 52;var j=Math.round(p*1e3*1e3);return K0[B>>3]=BigInt(j),0}var Wr=()=>2147483648,vr=(i,l)=>Math.ceil(i/l)*l,Xr=i=>{var l=I0.buffer.byteLength,B=(i-l+65535)/65536|0;try{return I0.grow(B),Q(),1}catch{}},Yr=i=>{var l=rA.length;i>>>=0;var B=Wr();if(i>B)return!1;for(var p=1;p<=4;p*=2){var j=l*(1+.2/p);j=Math.min(j,i+100663296);var w=Math.min(B,vr(Math.max(i,j),65536)),N=Xr(w);if(N)return!0}return!1};function de(i){try{var l=k0.getStreamFromFD(i);return o.close(l),0}catch(B){if(typeof o>"u"||B.name!=="ErrnoError")throw B;return B.errno}}var Qr=(i,l,B,p)=>{for(var j=0,w=0;w<B;w++){var N=f0[l>>2],K=f0[l+4>>2];l+=8;var F0=o.read(i,ox,N,K,p);if(F0<0)return-1;if(j+=F0,F0<K)break;typeof p<"u"&&(p+=F0)}return j};function Zr(i,l,B,p){try{var j=k0.getStreamFromFD(i),w=Qr(j,l,B);return f0[p>>2]=w,0}catch(N){if(typeof o>"u"||N.name!=="ErrnoError")throw N;return N.errno}}function lr(i,l,B,p){l=or(l);try{if(isNaN(l))return 22;var j=k0.getStreamFromFD(i);return o.llseek(j,l,B),K0[p>>3]=BigInt(j.position),j.getdents&&l===0&&B===0&&(j.getdents=null),0}catch(w){if(typeof o>"u"||w.name!=="ErrnoError")throw w;return w.errno}}var fr=(i,l,B,p)=>{for(var j=0,w=0;w<B;w++){var N=f0[l>>2],K=f0[l+4>>2];l+=8;var F0=o.write(i,ox,N,K,p);if(F0<0)return-1;if(j+=F0,F0<K)break;typeof p<"u"&&(p+=F0)}return j};function ZA(i,l,B,p){try{var j=k0.getStreamFromFD(i),w=fr(j,l,B);return f0[p>>2]=w,0}catch(N){if(typeof o>"u"||N.name!=="ErrnoError")throw N;return N.errno}}var cr=0,xe=()=>fe||cr>0,Ne=i=>{M=i,xe()||(n.onExit?.(i),r0=!0),m(i,new eA(i))},Px=(i,l)=>{M=i,xe()||l0(),Ne(i)},xt=i=>{if(i instanceof eA||i=="unwind")return M;m(1,i)},IA=i=>V(i),Ae=i=>{var l=WA(i)+1,B=IA(l);return Ee(i,B,l),B},Ie=[],Cx=i=>{var l=Ie[i];return l||(Ie[i]=l=$0.get(i)),l},ue=(...i)=>o.createPath(...i),ee=(...i)=>o.unlink(...i),a=(...i)=>o.createLazyFile(...i),f=(...i)=>o.createDevice(...i);if(o.createPreloadedFile=Gr,o.preloadFile=qA,o.staticInit(),n.noExitRuntime&&(fe=n.noExitRuntime),n.preloadPlugins&&(ce=n.preloadPlugins),n.print&&(I=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(G=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=Nt,n.addRunDependency=Tx,n.removeRunDependency=Te,n.FS_preloadFile=qA,n.FS_unlink=ee,n.FS_createPath=ue,n.FS_createDevice=f,n.FS=o,n.FS_createDataFile=$e,n.FS_createLazyFile=a,n.PROXYFS=y0;var d,b,y,$,O,V,o0,u0,z0,I0,$0;function m0(i){d=n._main=i.__main_argc_argv,b=i.fflush,y=i.__funcs_on_exit,$=i.setThrew,O=i._emscripten_stack_restore,V=i._emscripten_stack_alloc,o0=i.emscripten_stack_get_current,u0=I0=i.memory,z0=$0=i.__indirect_function_table}var rx={__assert_fail:$A,__syscall_faccessat:Pe,__syscall_fcntl64:Ur,__syscall_getcwd:nr,__syscall_ioctl:sr,__syscall_openat:Hr,__syscall_readlinkat:Jr,__syscall_renameat:Kr,__syscall_rmdir:Be,__syscall_unlinkat:ir,_emscripten_throw_longjmp:YA,clock_time_get:Fr,emscripten_resize_heap:Yr,fd_close:de,fd_read:Zr,fd_seek:lr,fd_write:ZA,invoke_i:re,invoke_ii:Lx,invoke_iii:Rx,invoke_iiid:Un,invoke_iiii:Ux,invoke_iiiii:Fx,invoke_iiiiii:Hn,invoke_iijii:On,invoke_v:mx,invoke_vi:Gn,invoke_vii:qx,invoke_viii:qt,invoke_viiii:pA,invoke_viiiii:Pt};function mx(i){var l=g0();try{Cx(i)()}catch(B){if(ix(l),!(B instanceof L))throw B;$(1,0)}}function qx(i,l,B){var p=g0();try{Cx(i)(l,B)}catch(j){if(ix(p),!(j instanceof L))throw j;$(1,0)}}function Lx(i,l){var B=g0();try{return Cx(i)(l)}catch(p){if(ix(B),!(p instanceof L))throw p;$(1,0)}}function Rx(i,l,B){var p=g0();try{return Cx(i)(l,B)}catch(j){if(ix(p),!(j instanceof L))throw j;$(1,0)}}function re(i){var l=g0();try{return Cx(i)()}catch(B){if(ix(l),!(B instanceof L))throw B;$(1,0)}}function Ux(i,l,B,p){var j=g0();try{return Cx(i)(l,B,p)}catch(w){if(ix(j),!(w instanceof L))throw w;$(1,0)}}function pA(i,l,B,p,j){var w=g0();try{Cx(i)(l,B,p,j)}catch(N){if(ix(w),!(N instanceof L))throw N;$(1,0)}}function Fx(i,l,B,p,j){var w=g0();try{return Cx(i)(l,B,p,j)}catch(N){if(ix(w),!(N instanceof L))throw N;$(1,0)}}function Pt(i,l,B,p,j,w){var N=g0();try{Cx(i)(l,B,p,j,w)}catch(K){if(ix(N),!(K instanceof L))throw K;$(1,0)}}function On(i,l,B,p,j){var w=g0();try{return Cx(i)(l,B,p,j)}catch(N){if(ix(w),!(N instanceof L))throw N;$(1,0)}}function Gn(i,l){var B=g0();try{Cx(i)(l)}catch(p){if(ix(B),!(p instanceof L))throw p;$(1,0)}}function qt(i,l,B,p){var j=g0();try{Cx(i)(l,B,p)}catch(w){if(ix(j),!(w instanceof L))throw w;$(1,0)}}function Un(i,l,B,p){var j=g0();try{return Cx(i)(l,B,p)}catch(w){if(ix(j),!(w instanceof L))throw w;$(1,0)}}function Hn(i,l,B,p,j,w){var N=g0();try{return Cx(i)(l,B,p,j,w)}catch(K){if(ix(N),!(K instanceof L))throw K;$(1,0)}}function Nt(i=[]){var l=d;i.unshift(D);var B=i.length,p=IA((B+1)*4),j=p;for(var w of i)f0[j>>2]=Ae(w),j+=4;f0[j>>2]=0;try{var N=l(B,p);return Px(N,!0),N}catch(K){return xt(K)}}function At(i=u){if(lx>0){b0=At;return}if(i0(),lx>0){b0=At;return}function l(){if(n.calledRun=!0,!r0){H(),U?.(n),n.onRuntimeInitialized?.();var B=n.noInitialRun||!0;B||Nt(i),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l()}var Me;return Me=await Ax(),At(),a0?s=n:s=new Promise((i,l)=>{U=i,J=l}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),Wc=Eo({"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=[],D="./this.program",m=(a,f)=>{throw f};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var _="",h,S;if(E){var P=require("fs");_=__dirname+"/",S=a=>{a=k(a)?new URL(a):a;var f=P.readFileSync(a);return f},h=async(a,f=!0)=>{a=k(a)?new URL(a):a;var d=P.readFileSync(a,f?void 0:"utf8");return d},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(a,f)=>{throw process.exitCode=a,f}}else if(F||v){try{_=new URL(".",r).href}catch{}v&&(S=a=>{var f=new XMLHttpRequest;return f.open("GET",a,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),h=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 f=await fetch(a,{credentials:"same-origin"});if(f.ok)return f.arrayBuffer();throw new Error(f.status+" : "+f.url)}}var I=console.log.bind(console),R=console.error.bind(console),G,r0=!1,M,k=a=>a.startsWith("file://");class L{}class Z extends L{}function W(a){for(var f=0,d=a.length,b=new Uint8Array(d),y;f<d;++f)y=a.charCodeAt(f),b[f]=~y>>8&y;return b}var U,J,a0=!1,s0=!1;function Q(){var a=IA.buffer;ox=new Int8Array(a),J0=new Int16Array(a),rA=new Uint8Array(a),Mr=new Uint16Array(a),O0=new Int32Array(a),f0=new Uint32Array(a),Nr=new Float32Array(a),Ir=new Float64Array(a),K0=new BigInt64Array(a),Lr=new BigUint64Array(a)}function i0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)tr(n.preRun.shift());wA(Wx)}function H(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),ex.init(),ee.__wasm_call_ctors(),o.ignorePermissions=!1}function v0(){}function l0(){fr(),o.quit(),ex.shutdown(),s0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)rr(n.postRun.shift());wA(SA)}function d0(a){n.onAbort?.(a),a=`Aborted(${a})`,R(a),r0=!0,a+=". Build with -sASSERTIONS for more info.";var f=new WebAssembly.RuntimeError(a);throw J?.(f),f}var S0;function P0(){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 vx(a){return a}async function
|
|
1527
|
-
`));if(!a)return null;Ox=WA(a,!0)}return Ox.shift()},ex={ttys:[],init(){},shutdown(){},register(a,l){ex.ttys[a]={input:[],output:[],ops:l},o.registerDevice(a,ex.stream_ops)},stream_ops:{open(a){var l=ex.ttys[a.node.rdev];if(!l)throw new o.ErrnoError(43);a.tty=l,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,l,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;$++,l[d+G]=W}return $&&(a.node.atime=Date.now()),$},write(a,l,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,l[d+$])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),$}},default_tty_ops:{get_char(a){return Or()},put_char(a,l){l===null||l===10?(M(rA(a.output)),a.output=[]):l!=0&&a.output.push(l)},fsync(a){a.output?.length>0&&(M(rA(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,l,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,l){l===null||l===10?(R(rA(a.output)),a.output=[]):l!=0&&a.output.push(l)},fsync(a){a.output?.length>0&&(R(rA(a.output)),a.output=[])}}},$A=a=>{d0()},i0={ops_table:null,mount(a){return i0.createNode(null,"/",16895,0)},createNode(a,l,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,l,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[l]=y,a.atime=a.mtime=a.ctime=y.atime),y},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,l){var d=a.contents.length;if(!(d>=l)){var b=1024*1024;l=Math.max(l,d*(d<b?2:1.125)>>>0),d&&(l=Math.max(l,256));var y=i0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(l),a.contents.set(y)}},resizeFileStorage(a,l){if(a.usedBytes!=l){var d=a.contents;a.contents=new Uint8Array(l),a.contents.set(d.subarray(0,Math.min(l,a.usedBytes))),a.usedBytes=l}},node_ops:{getattr(a){var l={};return l.dev=o.isChrdev(a.mode)?a.id:1,l.ino=a.id,l.mode=a.mode,l.nlink=1,l.uid=0,l.gid=0,l.rdev=a.rdev,o.isDir(a.mode)?l.size=4096:o.isFile(a.mode)?l.size=a.usedBytes:o.isLink(a.mode)?l.size=a.link.length:l.size=0,l.atime=new Date(a.atime),l.mtime=new Date(a.mtime),l.ctime=new Date(a.ctime),l.blksize=4096,l.blocks=Math.ceil(l.size/l.blksize),l},setattr(a,l){for(let d of["mode","atime","mtime","ctime"])l[d]!=null&&(a[d]=l[d]);l.size!==void 0&&i0.resizeFileStorage(a,l.size)},lookup(a,l){throw i0.doesNotExistError||(i0.doesNotExistError=new o.ErrnoError(44),i0.doesNotExistError.stack="<generic error, no stack>"),i0.doesNotExistError},mknod(a,l,d,b){return i0.createNode(a,l,d,b)},rename(a,l,d){var b;try{b=o.lookupNode(l,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],l.contents[d]=a,a.name=d,l.ctime=l.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,l){delete a.contents[l],a.ctime=a.mtime=Date.now()},rmdir(a,l){var d=o.lookupNode(a,l);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[l],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,l,d){var b=i0.createNode(a,l,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,l,d,b,y){var $=a.node.contents;if(y>=a.node.usedBytes)return 0;var G=Math.min(a.node.usedBytes-y,b);return l.set($.subarray(y,y+G),d),G},write(a,l,d,b,y,$){if(l.buffer===ox.buffer&&($=!1),!b)return 0;var G=a.node;return G.mtime=G.ctime=Date.now(),$?(G.contents=l.subarray(d,d+b),G.usedBytes=b):G.usedBytes===0&&y===0?(G.contents=l.slice(d,d+b),G.usedBytes=b):(i0.expandFileStorage(G,y+b),G.contents.set(l.subarray(d,d+b),y),G.usedBytes=Math.max(G.usedBytes,y+b)),b},llseek(a,l,d){var b=l;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,l,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===ox.buffer)G=!1,$=W.byteOffset;else{if(G=!0,$=$A(l),!$)throw new o.ErrnoError(48);W&&((d>0||d+l<W.length)&&(W.subarray?W=W.subarray(d,d+l):W=Array.prototype.slice.call(W,d,d+l)),ox.set(W,$))}return{ptr:$,allocated:G}},msync(a,l,d,b,y){return i0.stream_ops.write(a,l,0,b,d,!1),0}}},TA=a=>{if(typeof a!="string")return a;var l={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=l[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},Vx=a=>(typeof a=="string"&&(a=WA(a,!0)),a.subarray||(a=new Uint8Array(a)),a),nA=(a,l)=>{var d=0;return a&&(d|=365),l&&(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},y0={mount(a){return y0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,l,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(q0.EINVAL);var y=o.createNode(a,l,d);return y.node_ops=y0.node_ops,y.stream_ops=y0.stream_ops,y},realPath(a){for(var l=[];a.parent!==a;)l.push(a.name),a=a.parent;return l.push(a.mount.opts.root),l.reverse(),c0.join(...l)},node_ops:{getattr(a){var l=y0.realPath(a),d;try{d=a.mount.opts.fs.lstat(l)}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,l){var d=y0.realPath(a);try{if(l.mode!==void 0&&(a.mount.opts.fs.chmod(d,l.mode),a.mode=l.mode),l.atime||l.mtime){var b=new Date(l.atime||l.mtime),y=new Date(l.mtime||l.atime);a.mount.opts.fs.utime(d,b,y)}l.size!==void 0&&a.mount.opts.fs.truncate(d,l.size)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},lookup(a,l){try{var d=c0.join2(y0.realPath(a),l),b=a.mount.opts.fs.lstat(d).mode,y=y0.createNode(a,l,b);return y}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},mknod(a,l,d,b){var y=y0.createNode(a,l,d,b),$=y0.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,l,d){var b=y0.realPath(a),y=c0.join2(y0.realPath(l),d);try{a.mount.opts.fs.rename(b,y),a.name=d}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},unlink(a,l){var d=c0.join2(y0.realPath(a),l);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},rmdir(a,l){var d=c0.join2(y0.realPath(a),l);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},readdir(a){var l=y0.realPath(a);try{return a.mount.opts.fs.readdir(l)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},symlink(a,l,d){var b=c0.join2(y0.realPath(a),l);try{a.mount.opts.fs.symlink(d,b)}catch(y){throw y.code?new o.ErrnoError(q0[y.code]):y}},readlink(a){var l=y0.realPath(a);try{return a.mount.opts.fs.readlink(l)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}}},stream_ops:{open(a){var l=y0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(l,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(l){throw l.code?new o.ErrnoError(q0[l.code]):l}},read(a,l,d,b,y){try{return a.node.mount.opts.fs.read(a.nfd,l,d,b,y)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},write(a,l,d,b,y){try{return a.node.mount.opts.fs.write(a.nfd,l,d,b,y)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},llseek(a,l,d){var b=l;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}}},CA=async a=>{var l=await h(a);return new Uint8Array(l)},Se=(...a)=>o.createDataFile(...a),Bx=a=>a,fx=0,b0=null,$e=a=>{if(fx--,n.monitorRunDependencies?.(fx),fx==0&&b0){var l=b0;b0=null,l()}},$x=a=>{fx++,n.monitorRunDependencies?.(fx)},le=[],dA=async(a,l)=>{typeof Browser<"u"&&Browser.init();for(var d of le)if(d.canHandle(l))return d.handle(a,l);return a},qA=async(a,l,d,b,y,$,G,W)=>{var o0=l?Ex.resolve(c0.join2(a,l)):a,u0=Bx(`cp ${o0}`);$x(u0);try{var z0=d;typeof d=="string"&&(z0=await CA(d)),z0=await dA(z0,o0),W?.(),$||Se(a,l,z0,b,y,G)}finally{$e(u0)}},Gr=(a,l,d,b,y,$,G,W,o0,u0)=>{qA(a,l,d,b,y,W,o0,u0).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){Dx(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){Dx(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,l,d,b){Dx(this,"node_ops",{}),Dx(this,"stream_ops",{}),Dx(this,"readMode",365),Dx(this,"writeMode",146),Dx(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=l,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,l={}){if(!a)throw new o.ErrnoError(44);l.follow_mount??(l.follow_mount=!0),c0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(u0=>!!u0),y=o.root,$="/",G=0;G<b.length;G++){var W=G===b.length-1;if(W&&l.parent)break;if(b[G]!=="."){if(b[G]===".."){if($=c0.dirname($),o.isRoot(y)){a=$+"/"+b.slice(G+1).join("/"),d--;continue x}else y=y.parent;continue}$=c0.join2($,b[G]);try{y=o.lookupNode(y,b[G])}catch(u0){if(u0?.errno===44&&W&&l.noent_okay)return{path:$};throw u0}if(o.isMountpoint(y)&&(!W||l.follow_mount)&&(y=y.mounted.root),o.isLink(y.mode)&&(!W||l.follow)){if(!y.node_ops.readlink)throw new o.ErrnoError(52);var o0=y.node_ops.readlink(y);c0.isAbs(o0)||(o0=c0.dirname($)+"/"+o0),a=o0+"/"+b.slice(G+1).join("/");continue x}}}return{path:$,node:y}}throw new o.ErrnoError(32)},getPath(a){for(var l;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return l?d[d.length-1]!=="/"?`${d}/${l}`:d+l:d}l=l?`${a.name}/${l}`:a.name,a=a.parent}},hashName(a,l){for(var d=0,b=0;b<l.length;b++)d=(d<<5)-d+l.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var l=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[l],o.nameTable[l]=a},hashRemoveNode(a){var l=o.hashName(a.parent.id,a.name);if(o.nameTable[l]===a)o.nameTable[l]=a.name_next;else for(var d=o.nameTable[l];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,l){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,l),y=o.nameTable[b];y;y=y.name_next){var $=y.name;if(y.parent.id===a.id&&$===l)return y}return o.lookup(a,l)},createNode(a,l,d,b){var y=new o.FSNode(a,l,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 l=["r","w","rw"][a&3];return a&512&&(l+="w"),l},nodePermissions(a,l){return o.ignorePermissions?0:l.includes("r")&&!(a.mode&292)||l.includes("w")&&!(a.mode&146)||l.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var l=o.nodePermissions(a,"x");return l||(a.node_ops.lookup?0:2)},mayCreate(a,l){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,l);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,l,d){var b;try{b=o.lookupNode(a,l)}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,l){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(l);return o.isDir(a.mode)&&(d!=="r"||l&576)?31:o.nodePermissions(a,d)},checkOpExists(a,l){if(!a)throw new o.ErrnoError(l);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 l=o.getStream(a);if(!l)throw new o.ErrnoError(8);return l},getStream:a=>o.streams[a],createStream(a,l=-1){return a=Object.assign(new o.FSStream,a),l==-1&&(l=o.nextfd()),a.fd=l,o.streams[l]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,l=-1){var d=o.createStream(a,l);return d.stream_ops?.dup?.(d),d},doSetAttr(a,l,d){var b=a?.stream_ops.setattr,y=b?a:l;b??(b=l.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 l=o.getDevice(a.node.rdev);a.stream_ops=l.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,l)=>a<<8|l,registerDevice(a,l){o.devices[a]={stream_ops:l}},getDevice:a=>o.devices[a],getMounts(a){for(var l=[],d=[a];d.length;){var b=d.pop();l.push(b),d.push(...b.mounts)}return l},syncfs(a,l){typeof a=="function"&&(l=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(W){return o.syncFSRequests--,l(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,l,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:l,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 l=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(l.node))throw new o.ErrnoError(28);var d=l.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,l){return a.node_ops.lookup(a,l)},mknod(a,l,d){var b=o.lookupPath(a,{parent:!0}),y=b.node,$=c0.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,$,l,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){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 a.node_ops.statfs&&Object.assign(l,a.node_ops.statfs(a.mount.opts.root)),l},create(a,l=438){return l&=4095,l|=32768,o.mknod(a,l,0)},mkdir(a,l=511){return l&=1023,l|=16384,o.mknod(a,l,0)},mkdirTree(a,l){var d=a.split("/"),b="";for(var y of d)if(y){(b||c0.isAbs(a))&&(b+="/"),b+=y;try{o.mkdir(b,l)}catch($){if($.errno!=20)throw $}}},mkdev(a,l,d){return typeof d>"u"&&(d=l,l=438),l|=8192,o.mknod(a,l,d)},symlink(a,l){if(!Ex.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(l,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var y=c0.basename(l),$=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,l){var d=c0.dirname(a),b=c0.dirname(l),y=c0.basename(a),$=c0.basename(l),G,W,o0;if(G=o.lookupPath(a,{parent:!0}),W=G.node,G=o.lookupPath(l,{parent:!0}),o0=G.node,!W||!o0)throw new o.ErrnoError(44);if(W.mount!==o0.mount)throw new o.ErrnoError(75);var u0=o.lookupNode(W,y),z0=Ex.relative(a,b);if(z0.charAt(0)!==".")throw new o.ErrnoError(28);if(z0=Ex.relative(l,d),z0.charAt(0)!==".")throw new o.ErrnoError(55);var N0;try{N0=o.lookupNode(o0,$)}catch{}if(u0!==N0){var $0=o.isDir(u0.mode),m0=o.mayDelete(W,y,$0);if(m0)throw new o.ErrnoError(m0);if(m0=N0?o.mayDelete(o0,$,$0):o.mayCreate(o0,$),m0)throw new o.ErrnoError(m0);if(!W.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(u0)||N0&&o.isMountpoint(N0))throw new o.ErrnoError(10);if(o0!==W&&(m0=o.nodePermissions(W,"w"),m0))throw new o.ErrnoError(m0);o.hashRemoveNode(u0);try{W.node_ops.rename(u0,o0,$),u0.parent=o0}catch(rx){throw rx}finally{o.hashAddNode(u0)}}},rmdir(a){var l=o.lookupPath(a,{parent:!0}),d=l.node,b=c0.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 l=o.lookupPath(a,{follow:!0}),d=l.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var l=o.lookupPath(a,{parent:!0}),d=l.node;if(!d)throw new o.ErrnoError(44);var b=c0.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 l=o.lookupPath(a),d=l.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,l){var d=o.lookupPath(a,{follow:!l}),b=d.node,y=o.checkOpExists(b.node_ops.getattr,63);return y(b)},fstat(a){var l=o.getStreamChecked(a),d=l.node,b=l.stream_ops.getattr,y=b?l:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(y)},lstat(a){return o.stat(a,!0)},doChmod(a,l,d,b){o.doSetAttr(a,l,{mode:d&4095|l.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,l,d){var b;if(typeof a=="string"){var y=o.lookupPath(a,{follow:!d});b=y.node}else b=a;o.doChmod(null,b,l,d)},lchmod(a,l){o.chmod(a,l,!0)},fchmod(a,l){var d=o.getStreamChecked(a);o.doChmod(d,d.node,l,!1)},doChown(a,l,d){o.doSetAttr(a,l,{timestamp:Date.now(),dontFollow:d})},chown(a,l,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,l,d){o.chown(a,l,d,!0)},fchown(a,l,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,l,d){if(o.isDir(l.mode))throw new o.ErrnoError(31);if(!o.isFile(l.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(l,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,l,{size:d,timestamp:Date.now()})},truncate(a,l){if(l<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,l)},ftruncate(a,l){var d=o.getStreamChecked(a);if(l<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,l)},utime(a,l,d){var b=o.lookupPath(a,{follow:!0}),y=b.node,$=o.checkOpExists(y.node_ops.setattr,63);$(y,{atime:l,mtime:d})},open(a,l,d=438){if(a==="")throw new o.ErrnoError(44);l=TA(l),l&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:!(l&131072),noent_okay:!0});b=$.node,a=$.path}var G=!1;if(l&64)if(b){if(l&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)&&(l&=-513),l&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!G){var W=o.mayOpen(b,l);if(W)throw new o.ErrnoError(W)}l&512&&!G&&o.truncate(b,0),l&=-131713;var o0=o.createStream({node:b,path:o.getPath(b),flags:l,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(l){throw l}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,l,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,l,d),a.ungotten=[],a.position},read(a,l,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,l,d,b,y);return $||(a.position+=G),G},write(a,l,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,l,d,b,y,$);return G||(a.position+=W),W},mmap(a,l,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(!l)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,l,d,b,y)},msync(a,l,d,b,y){return a.stream_ops.msync?a.stream_ops.msync(a,l,d,b,y):0},ioctl(a,l,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,l,d)},readFile(a,l={}){l.flags=l.flags||0,l.encoding=l.encoding||"binary",l.encoding!=="utf8"&&l.encoding!=="binary"&&d0(`Invalid encoding type "${l.encoding}"`);var d=o.open(a,l.flags),b=o.stat(a),y=b.size,$=new Uint8Array(y);return o.read(d,$,0,y,0),l.encoding==="utf8"&&($=rA($)),o.close(d),$},writeFile(a,l,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);l=Vx(l),o.write(b,l,0,l.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var l=o.lookupPath(a,{follow:!0});if(l.node===null)throw new o.ErrnoError(44);if(!o.isDir(l.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(l.node,"x");if(d)throw new o.ErrnoError(d);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:(b,y,$,G,W)=>G,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),ex.register(o.makedev(5,0),ex.default_tty_ops),ex.register(o.makedev(6,0),ex.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),l=0,d=()=>(l===0&&(_e(a),l=a.byteLength),a[--l]);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 l=o.createNode(a,"fd",16895,73);return l.stream_ops={llseek:i0.stream_ops.llseek},l.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())}},l}},{},"/proc/self/fd")},createStandardStreams(a,l,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),l?o.createDevice("/dev","stdout",null,l):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:y0}},init(a,l,d){o.initialized=!0,a??(a=n.stdin),l??(l=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,l,d)},quit(){o.initialized=!1,QA(0);for(var a of o.streams)a&&o.close(a)},findObject(a,l){var d=o.analyzePath(a,l);return d.exists?d.object:null},analyzePath(a,l){try{var d=o.lookupPath(a,{follow:!l});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=c0.basename(a),d=o.lookupPath(a,{follow:!l}),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,l,d,b){a=typeof a=="string"?a:o.getPath(a);for(var y=l.split("/").reverse();y.length;){var $=y.pop();if($){var G=c0.join2(a,$);try{o.mkdir(G)}catch(W){if(W.errno!=20)throw W}a=G}}return G},createFile(a,l,d,b,y){var $=c0.join2(typeof a=="string"?a:o.getPath(a),l),G=nA(b,y);return o.create($,G)},createDataFile(a,l,d,b,y,$){var G=l;a&&(a=typeof a=="string"?a:o.getPath(a),G=l?c0.join2(a,l):a);var W=nA(b,y),o0=o.create(G,W);if(d){d=Vx(d),o.chmod(o0,W|146);var u0=o.open(o0,577);o.write(u0,d,0,d.length,0,$),o.close(u0),o.chmod(o0,W)}},createDevice(a,l,d,b){var y,$=c0.join2(typeof a=="string"?a:o.getPath(a),l),G=nA(!!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,u0,z0,N0,$0){for(var m0=0,rx=0;rx<N0;rx++){var mx;try{mx=d()}catch{throw new o.ErrnoError(29)}if(mx===void 0&&m0===0)throw new o.ErrnoError(6);if(mx==null)break;m0++,u0[z0+rx]=mx}return m0&&(o0.node.atime=Date.now()),m0},write(o0,u0,z0,N0,$0){for(var m0=0;m0<N0;m0++)try{b(u0[z0+m0])}catch{throw new o.ErrnoError(29)}return N0&&(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,l,d,b,y){class ${constructor(){Dx(this,"lengthKnown",!1),Dx(this,"chunks",[])}get($0){if(!($0>this.length-1||$0<0)){var m0=$0%this.chunkSize,rx=$0/this.chunkSize|0;return this.getter(rx)[m0]}}setDataGetter($0){this.getter=$0}cacheLength(){var $0=new XMLHttpRequest;$0.open("HEAD",d,!1),$0.send(null),$0.status>=200&&$0.status<300||$0.status===304||d0("Couldn't load "+d+". Status: "+$0.status);var m0=Number($0.getResponseHeader("Content-length")),rx,mx=(rx=$0.getResponseHeader("Accept-Ranges"))&&rx==="bytes",qx=(rx=$0.getResponseHeader("Content-Encoding"))&&rx==="gzip",Ix=1024*1024;mx||(Ix=m0);var Lx=(Gx,DA)=>{Gx>DA&&d0("invalid range ("+Gx+", "+DA+") or no bytes requested!"),DA>m0-1&&d0("only "+m0+" bytes available! programmer error!");var Fx=new XMLHttpRequest;return Fx.open("GET",d,!1),m0!==Ix&&Fx.setRequestHeader("Range","bytes="+Gx+"-"+DA),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||[]):WA(Fx.responseText||"",!0)},ee=this;ee.setDataGetter(Gx=>{var DA=Gx*Ix,Fx=(Gx+1)*Ix-1;return Fx=Math.min(Fx,m0-1),typeof ee.chunks[Gx]>"u"&&(ee.chunks[Gx]=Lx(DA,Fx)),typeof ee.chunks[Gx]>"u"&&d0("doXHR failed!"),ee.chunks[Gx]}),(qx||!m0)&&(Ix=m0=1,m0=this.getter(0).length,Ix=m0,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=m0,this._chunkSize=Ix,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,l,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 u0={};for(let[N0,$0]of Object.entries(o0.stream_ops))u0[N0]=(...m0)=>(o.forceLoadFile(o0),$0(...m0));function z0(N0,$0,m0,rx,mx){var qx=N0.node.contents;if(mx>=qx.length)return 0;var Ix=Math.min(qx.length-mx,rx);if(qx.slice)for(var Lx=0;Lx<Ix;Lx++)$0[m0+Lx]=qx[mx+Lx];else for(var Lx=0;Lx<Ix;Lx++)$0[m0+Lx]=qx.get(mx+Lx);return Ix}return u0.read=(N0,$0,m0,rx,mx)=>(o.forceLoadFile(o0),z0(N0,$0,m0,rx,mx)),u0.mmap=(N0,$0,m0,rx,mx)=>{o.forceLoadFile(o0);var qx=$A($0);if(!qx)throw new o.ErrnoError(48);return z0(N0,ox,qx,$0,m0),{ptr:qx,allocated:!0}},o0.stream_ops=u0,o0}},k0={currentUmask:18,calculateAt(a,l,d){if(c0.isAbs(l))return l;var b;if(a===-100)b=o.cwd();else{var y=k0.getStreamFromFD(a);b=y.path}if(l.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+l},writeStat(a,l){f0[a>>2]=l.dev,f0[a+4>>2]=l.mode,f0[a+8>>2]=l.nlink,f0[a+12>>2]=l.uid,f0[a+16>>2]=l.gid,f0[a+20>>2]=l.rdev,K0[a+24>>3]=BigInt(l.size),O0[a+32>>2]=4096,O0[a+36>>2]=l.blocks;var d=l.atime.getTime(),b=l.mtime.getTime(),y=l.ctime.getTime();return K0[a+40>>3]=BigInt(Math.floor(d/1e3)),f0[a+48>>2]=d%1e3*1e3*1e3,K0[a+56>>3]=BigInt(Math.floor(b/1e3)),f0[a+64>>2]=b%1e3*1e3*1e3,K0[a+72>>3]=BigInt(Math.floor(y/1e3)),f0[a+80>>2]=y%1e3*1e3*1e3,K0[a+88>>3]=BigInt(l.ino),0},writeStatFs(a,l){f0[a+4>>2]=l.bsize,f0[a+60>>2]=l.bsize,K0[a+8>>3]=BigInt(l.blocks),K0[a+16>>3]=BigInt(l.bfree),K0[a+24>>3]=BigInt(l.bavail),K0[a+32>>3]=BigInt(l.files),K0[a+40>>3]=BigInt(l.ffree),f0[a+48>>2]=l.fsid,f0[a+64>>2]=l.flags,f0[a+56>>2]=l.namelen},doMsync(a,l,d,b,y){if(!o.isFile(l.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var $=eA.slice(a,a+d);o.msync(l,$,y,d,b)},getStreamFromFD(a){var l=o.getStreamChecked(a);return l},varargs:void 0,getStr(a){var l=bx(a);return l}};function Te(a,l,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(l){case 0:{var y=tA();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=tA(),G=289792;return b.flags=b.flags&~G|y&G,0}case 12:{var y=SA(),W=0;return J0[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 PA(a,l,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(l){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),$=SA();O0[$>>2]=y.c_iflag||0,O0[$+4>>2]=y.c_oflag||0,O0[$+8>>2]=y.c_cflag||0,O0[$+12>>2]=y.c_lflag||0;for(var G=0;G<32;G++)ox[$+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 $=SA(),W=O0[$>>2],o0=O0[$+4>>2],u0=O0[$+8>>2],z0=O0[$+12>>2],N0=[],G=0;G<32;G++)N0.push(ox[$+G+17]);return b.tty.ops.ioctl_tcsets(b.tty,l,{c_iflag:W,c_oflag:o0,c_cflag:u0,c_lflag:z0,c_cc:N0})}return 0}case 21519:{if(!b.tty)return-59;var $=SA();return O0[$>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var $=SA();return o.ioctl(b,l,$)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var $0=b.tty.ops.ioctl_tiocgwinsz(b.tty),$=SA();J0[$>>1]=$0[0],J0[$+2>>1]=$0[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 uA(a,l,d,b){k0.varargs=b;try{l=k0.getStr(l),l=k0.calculateAt(a,l);var y=b?tA():0;return d&64&&(y&=~k0.currentUmask),o.open(l,d,y).fd}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var Ur=()=>2147483648,ce=(a,l)=>Math.ceil(a/l)*l,tr=a=>{var l=NA.buffer.byteLength,d=(a-l+65535)/65536|0;try{return NA.grow(d),Z(),1}catch{}},nr=a=>{var l=eA.length;a>>>=0;var d=Ur();if(a>d)return!1;for(var b=1;b<=4;b*=2){var y=l*(1+.2/b);y=Math.min(y,a+100663296);var $=Math.min(d,ce(Math.max(a,y),65536)),G=tr($);if(G)return!0}return!1};function Hr(a){try{var l=k0.getStreamFromFD(a);return o.close(l),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var Jr=(a,l,d,b)=>{for(var y=0,$=0;$<d;$++){var G=f0[l>>2],W=f0[l+4>>2];l+=8;var o0=o.read(a,ox,G,W,b);if(o0<0)return-1;if(y+=o0,o0<W)break;typeof b<"u"&&(b+=o0)}return y};function Kr(a,l,d,b){try{var y=k0.getStreamFromFD(a),$=Jr(y,l,d);return f0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var Ee=9007199254740992,sr=-9007199254740992,XA=a=>a<sr||a>Ee?NaN:Number(a);function Be(a,l,d,b){l=XA(l);try{if(isNaN(l))return 22;var y=k0.getStreamFromFD(a);return o.llseek(y,l,d),K0[b>>3]=BigInt(y.position),y.getdents&&l===0&&d===0&&(y.getdents=null),0}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var zr=(a,l,d,b)=>{for(var y=0,$=0;$<d;$++){var G=f0[l>>2],W=f0[l+4>>2];l+=8;var o0=o.write(a,ox,G,W,b);if(o0<0)return-1;if(y+=o0,o0<W)break;typeof b<"u"&&(b+=o0)}return y};function ir(a,l,d,b){try{var y=k0.getStreamFromFD(a),$=zr(y,l,d);return f0[b>>2]=$,0}catch(G){if(typeof o>"u"||G.name!=="ErrnoError")throw G;return G.errno}}var Vr=0,YA=()=>fe||Vr>0,qe=a=>{I=a,YA()||(n.onExit?.(a),t0=!0),m(a,new AA(a))},ar=(a,l)=>{I=a,YA()||l0(),qe(a)},or=a=>{if(a instanceof AA||a=="unwind")return I;m(1,a)},Wr=(a,l,d)=>we(a,eA,l,d),Fr=a=>ZA(a),Xr=a=>{var l=VA(a)+1,d=Fr(l);return Wr(a,d,l),d},Yr=(...a)=>o.createPath(...a),Ce=(...a)=>o.unlink(...a),Qr=(...a)=>o.createLazyFile(...a),Zr=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=Gr,o.preloadFile=qA,o.staticInit(),n.noExitRuntime&&(fe=n.noExitRuntime),n.preloadPlugins&&(le=n.preloadPlugins),n.print&&(M=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(O=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=Cx,n.addRunDependency=$x,n.removeRunDependency=$e,n.FS_preloadFile=qA,n.FS_unlink=Ce,n.FS_createPath=Yr,n.FS_createDevice=Zr,n.FS=o,n.FS_createDataFile=Se,n.FS_createLazyFile=Qr,n.PROXYFS=y0;var vr,fr,QA,lr,ZA,Pe,Tx,xt,NA;function xe(a){vr=n._main=a.__main_argc_argv,fr=a.__funcs_on_exit,QA=a.fflush,lr=a._emscripten_stack_restore,ZA=a._emscripten_stack_alloc,Pe=a.emscripten_stack_get_current,Tx=NA=a.memory,xt=a.__indirect_function_table}var Ne={__assert_fail:BA,__syscall_fcntl64:Te,__syscall_ioctl:PA,__syscall_openat:uA,emscripten_resize_heap:nr,fd_close:Hr,fd_read:Kr,fd_seek:Be,fd_write:ir};function Cx(a=[]){var l=vr;a.unshift(p);var d=a.length,b=Fr((d+1)*4),y=b;for(var $ of a)f0[y>>2]=Xr($),y+=4;f0[y>>2]=0;try{var G=l(d,b);return ar(G,!0),G}catch(W){return or(W)}}function de(a=u){if(fx>0){b0=de;return}if(s0(),fx>0){b0=de;return}function l(){if(n.calledRun=!0,!t0){U(),J?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||Cx(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l()}var Ae;return Ae=await Ax(),de(),a0?s=n:s=new Promise((a,l)=>{J=a,H=l}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),Bo={};Jc(Bo,{createPawnCC:()=>Yc,createPawnDbg:()=>Qc});Co.exports=Kc(Bo);var Wc=Eo(zc(),1),Xc=Eo(Vc(),1),Yc=Wc.default,Qc=Xc.default});var ye=aa((xm,vv)=>{"use strict";var xB=Object.create,mt=Object.defineProperty,AB=Object.getOwnPropertyDescriptor,uF=Object.getOwnPropertyNames,eB=Object.getPrototypeOf,rB=Object.prototype.hasOwnProperty,tB=(x,A,e)=>A in x?mt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,nB=(x,A)=>function(){try{return A||(0,x[uF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},sB=(x,A)=>{for(var e in A)mt(x,e,{get:A[e],enumerable:!0})},DF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of uF(A))!rB.call(x,t)&&t!==e&&mt(x,t,{get:()=>A[t],enumerable:!(r=AB(A,t))||r.enumerable});return x},iB=(x,A,e)=>(e=x!=null?xB(eB(x)):{},DF(A||!x||!x.__esModule?mt(e,"default",{value:x,enumerable:!0}):e,x)),aB=x=>DF(mt({},"__esModule",{value:!0}),x),A0=(x,A,e)=>tB(x,typeof A!="symbol"?A+"":A,e),oB=nB({"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 c(e0){e0=e0.split("-")[0];for(var E0=e0.split(".").slice(0,3);E0.length<3;)E0.push("00");return E0=E0.map((D0,X0,V0)=>D0.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?c(process.versions.node):g;if(T<180300)throw new Error(`This emscripten-generated code requires node v${C(180300)} (detected v${C(T)})`);var P=typeof navigator<"u"&&navigator.userAgent;if(P){var Y=P.includes("Safari/")&&!P.includes("Chrome/")&&P.match(/Version\/(\d+\.?\d*\.?\d*)/)?c(P.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=P.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(P.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):g;if(X<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${X})`);var x0=P.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(P.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",_=(c,C)=>{throw C};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var h="",S,q;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 M=require("fs");h=__dirname+"/",q=C=>{C=L(C)?new URL(C):C;var g=M.readFileSync(C);return k(Buffer.isBuffer(g)),g},S=async(C,g=!0)=>{C=L(C)?new URL(C):C;var T=M.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),_=(C,g)=>{throw process.exitCode=C,g}}else if(!u)if(F||v){try{h=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&&(q=c=>{var C=new XMLHttpRequest;return C.open("GET",c,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),S=async c=>{if(L(c))return new Promise((g,T)=>{var P=new XMLHttpRequest;P.open("GET",c,!0),P.responseType="arraybuffer",P.onload=()=>{if(P.status==200||P.status==0&&P.response){g(P.response);return}T(P.status)},P.onerror=T,P.send(null)});var C=await fetch(c,{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 t0;globalThis.WebAssembly||O("no native wasm support detected");var I=!1;function k(c,C){c||ax("Assertion failed"+(C?": "+C:""))}var L=c=>c.startsWith("file://");function Q(){var c=Wn();k((c&3)==0),c==0&&(c+=4),g0[c>>2]=34821223,g0[c+4>>2]=2310721022,g0[0]=1668509029}function K(){if(!I){var c=Wn();c==0&&(c+=4);var C=g0[c>>2],g=g0[c+4>>2];(C!=34821223||g!=2310721022)&&ax(`Stack overflow! Stack cookie has been overwritten at ${Ex(c)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${Ex(g)} ${Ex(C)}`),g0[0]!=1668509029&&ax("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class J{}class H extends J{}var a0=!0;(()=>{var c=new Int16Array(1),C=new Int8Array(c.buffer);c[0]=25459,(C[0]!==115||C[1]!==99)&&ax("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function n0(c){Object.getOwnPropertyDescriptor(n,c)||Object.defineProperty(n,c,{configurable:!0,set(){ax(`Attempt to set \`Module.${c}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function Z(c){return()=>k(!1,`call to '${c}' via reference taken before Wasm module initialization`)}function s0(c){Object.getOwnPropertyDescriptor(n,c)&&ax(`\`Module.${c}\` was supplied but \`${c}\` not included in INCOMING_MODULE_JS_API`)}function U(c){return c==="FS_createPath"||c==="FS_createDataFile"||c==="FS_createPreloadedFile"||c==="FS_preloadFile"||c==="FS_unlink"||c==="addRunDependency"||c==="FS_createLazyFile"||c==="FS_createDevice"||c==="removeRunDependency"}function v0(c){l0(c)}function l0(c){Object.getOwnPropertyDescriptor(n,c)||Object.defineProperty(n,c,{configurable:!0,get(){var C=`'${c}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;U(c)&&(C+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),ax(C)}})}function B0(c){for(var C=0,g=c.length,T=new Uint8Array(g),P;C<g;++C)P=c.charCodeAt(C),T[C]=~P>>8&P;return T}var d0,S0,I0=!1;function vx(){var c=Nt.buffer;zx=new Int8Array(c),_A=new Int16Array(c),n.HEAPU8=bx=new Uint8Array(c),ix=new Uint16Array(c),wA=new Int32Array(c),g0=new Uint32Array(c),rr=new Float32Array(c),fe=new Float64Array(c),er=new BigInt64Array(c),rA=new BigUint64Array(c)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function Kx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)Rr(n.preRun.shift());n0("preRun"),BA(c0)}function yA(){k(!I0),I0=!0,K(),cr.__wasm_call_ctors()}function kA(){if(K(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)SA(n.postRun.shift());n0("postRun"),BA(tA)}function ax(c){n.onAbort?.(c),c=`Aborted(${c})`,O(c),I=!0;var C=new WebAssembly.RuntimeError(c);throw S0?.(C),C}function Ax(){ax("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 AA={init:Ax,createDataFile:Ax,createPreloadedFile:Ax,createLazyFile:Ax,open:Ax,mkdev:Ax,registerDevice:Ax,analyzePath:Ax,ErrnoError:Ax};function J0(c,C){return(...g)=>{k(I0,`native function \`${c}\` called before runtime initialization`);var T=cr[c];return k(T,`exported native function \`${c}\` not found`),k(g.length<=C,`native function \`${c}\` called with ${g.length} args but expects ${C}`),T(...g)}}var O0;function K0(){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 vx(a){return a}async function Vx(a){return a}async function kA(a,f){try{var d=await Vx(a),b=await WebAssembly.instantiate(d,f);return b}catch(y){R(`failed to asynchronously prepare wasm: ${y}`),d0(y)}}async function _A(a,f,d){return kA(f,d)}function ax(){var a={env:Ie,wasi_snapshot_preview1:Ie};return a}async function Ax(){function a($,O){return ee=$.exports,Ae(ee),Q(),ee}function f($){return a($.instance)}var d=ax();if(n.instantiateWasm)return new Promise(($,O)=>{n.instantiateWasm(d,(V,o0)=>{$(a(V,o0))})});S0??(S0=P0());var b=await _A(G,S0,d),y=f(b);return y}class eA{constructor(f){Dx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${f})`,this.status=f}}var J0,O0,K0,ox,Nr,Ir,Mr,f0,Lr,rA,wA=a=>{for(;a.length>0;)a.shift()(n)},SA=[],rr=a=>SA.push(a),Wx=[],tr=a=>Wx.push(a),fe=!1,ix=globalThis.TextDecoder&&new TextDecoder,g0=(a,f,d,b)=>{var y=f+d;if(b)return y;for(;a[f]&&!(f>=y);)++f;return f},tA=(a,f=0,d,b)=>{var y=g0(a,f,d,b);if(y-f>16&&a.buffer&&ix)return ix.decode(a.subarray(f,y));for(var $="";f<y;){var O=a[f++];if(!(O&128)){$+=String.fromCharCode(O);continue}var V=a[f++]&63;if((O&224)==192){$+=String.fromCharCode((O&31)<<6|V);continue}var o0=a[f++]&63;if((O&240)==224?O=(O&15)<<12|V<<6|o0:O=(O&7)<<18|V<<12|o0<<6|a[f++]&63,O<65536)$+=String.fromCharCode(O);else{var u0=O-65536;$+=String.fromCharCode(55296|u0>>10,56320|u0&1023)}}return $},bx=(a,f,d)=>a?tA(rA,a,f,d):"",CA=(a,f,d,b)=>d0(`Assertion failed: ${bx(a)}, at: `+[f?bx(f):"unknown filename",d,b?bx(b):"unknown function"]),nA=()=>{var a=O0[+k0.varargs>>2];return k0.varargs+=4,a},$A=nA,c0={isAbs:a=>a.charAt(0)==="/",splitPath:a=>{var f=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return f.exec(a).slice(1)},normalizeArray:(a,f)=>{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(f)for(;d;d--)a.unshift("..");return a},normalize:a=>{var f=c0.isAbs(a),d=a.slice(-1)==="/";return a=c0.normalizeArray(a.split("/").filter(b=>!!b),!f).join("/"),!a&&!f&&(a="."),a&&d&&(a+="/"),(f?"/":"")+a},dirname:a=>{var f=c0.splitPath(a),d=f[0],b=f[1];return!d&&!b?".":(b&&(b=b.slice(0,-1)),d+b)},basename:a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],join:(...a)=>c0.normalize(a.join("/")),join2:(a,f)=>c0.normalize(a+"/"+f)},Rr=()=>{if(E){var a=require("crypto");return f=>a.randomFillSync(f)}return f=>(crypto.getRandomValues(f),0)},we=a=>(we=Rr())(a),Ex={resolve:(...a)=>{for(var f="",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"";f=y+"/"+f,d=c0.isAbs(y)}return f=c0.normalizeArray(f.split("/").filter($=>!!$),!d).join("/"),(d?"/":"")+f||"."},relative:(a,f)=>{a=Ex.resolve(a).slice(1),f=Ex.resolve(f).slice(1);function d(u0){for(var z0=0;z0<u0.length&&u0[z0]==="";z0++);for(var I0=u0.length-1;I0>=0&&u0[I0]==="";I0--);return z0>I0?[]:u0.slice(z0,I0-z0+1)}for(var b=d(a.split("/")),y=d(f.split("/")),$=Math.min(b.length,y.length),O=$,V=0;V<$;V++)if(b[V]!==y[V]){O=V;break}for(var o0=[],V=O;V<b.length;V++)o0.push("..");return o0=o0.concat(y.slice(O)),o0.join("/")}},Gx=[],WA=a=>{for(var f=0,d=0;d<a.length;++d){var b=a.charCodeAt(d);b<=127?f++:b<=2047?f+=2:b>=55296&&b<=57343?(f+=4,++d):f+=3}return f},Se=(a,f,d,b)=>{if(!(b>0))return 0;for(var y=d,$=d+b-1,O=0;O<a.length;++O){var V=a.codePointAt(O);if(V<=127){if(d>=$)break;f[d++]=V}else if(V<=2047){if(d+1>=$)break;f[d++]=192|V>>6,f[d++]=128|V&63}else if(V<=65535){if(d+2>=$)break;f[d++]=224|V>>12,f[d++]=128|V>>6&63,f[d++]=128|V&63}else{if(d+3>=$)break;f[d++]=240|V>>18,f[d++]=128|V>>12&63,f[d++]=128|V>>6&63,f[d++]=128|V&63,O++}}return f[d]=0,d-y},XA=(a,f,d)=>{var b=d>0?d:WA(a)+1,y=new Array(b),$=Se(a,y,0,y.length);return f&&(y.length=$),y},Or=()=>{if(!Gx.length){var a=null;if(E){var f=256,d=Buffer.alloc(f),b=0,y=process.stdin.fd;try{b=P.readSync(y,d,0,f)}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;Gx=XA(a,!0)}return Gx.shift()},ex={ttys:[],init(){},shutdown(){},register(a,f){ex.ttys[a]={input:[],output:[],ops:f},o.registerDevice(a,ex.stream_ops)},stream_ops:{open(a){var f=ex.ttys[a.node.rdev];if(!f)throw new o.ErrnoError(43);a.tty=f,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,f,d,b,y){if(!a.tty||!a.tty.ops.get_char)throw new o.ErrnoError(60);for(var $=0,O=0;O<b;O++){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;$++,f[d+O]=V}return $&&(a.node.atime=Date.now()),$},write(a,f,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,f[d+$])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),$}},default_tty_ops:{get_char(a){return Or()},put_char(a,f){f===null||f===10?(I(tA(a.output)),a.output=[]):f!=0&&a.output.push(f)},fsync(a){a.output?.length>0&&(I(tA(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,f,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,f){f===null||f===10?(R(tA(a.output)),a.output=[]):f!=0&&a.output.push(f)},fsync(a){a.output?.length>0&&(R(tA(a.output)),a.output=[])}}},TA=a=>{d0()},n0={ops_table:null,mount(a){return n0.createNode(null,"/",16895,0)},createNode(a,f,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,f,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[f]=y,a.atime=a.mtime=a.ctime=y.atime),y},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,f){var d=a.contents.length;if(!(d>=f)){var b=1024*1024;f=Math.max(f,d*(d<b?2:1.125)>>>0),d&&(f=Math.max(f,256));var y=n0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(f),a.contents.set(y)}},resizeFileStorage(a,f){if(a.usedBytes!=f){var d=a.contents;a.contents=new Uint8Array(f),a.contents.set(d.subarray(0,Math.min(f,a.usedBytes))),a.usedBytes=f}},node_ops:{getattr(a){var f={};return f.dev=o.isChrdev(a.mode)?a.id:1,f.ino=a.id,f.mode=a.mode,f.nlink=1,f.uid=0,f.gid=0,f.rdev=a.rdev,o.isDir(a.mode)?f.size=4096:o.isFile(a.mode)?f.size=a.usedBytes:o.isLink(a.mode)?f.size=a.link.length:f.size=0,f.atime=new Date(a.atime),f.mtime=new Date(a.mtime),f.ctime=new Date(a.ctime),f.blksize=4096,f.blocks=Math.ceil(f.size/f.blksize),f},setattr(a,f){for(let d of["mode","atime","mtime","ctime"])f[d]!=null&&(a[d]=f[d]);f.size!==void 0&&n0.resizeFileStorage(a,f.size)},lookup(a,f){throw n0.doesNotExistError||(n0.doesNotExistError=new o.ErrnoError(44),n0.doesNotExistError.stack="<generic error, no stack>"),n0.doesNotExistError},mknod(a,f,d,b){return n0.createNode(a,f,d,b)},rename(a,f,d){var b;try{b=o.lookupNode(f,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],f.contents[d]=a,a.name=d,f.ctime=f.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,f){delete a.contents[f],a.ctime=a.mtime=Date.now()},rmdir(a,f){var d=o.lookupNode(a,f);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[f],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,f,d){var b=n0.createNode(a,f,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,f,d,b,y){var $=a.node.contents;if(y>=a.node.usedBytes)return 0;var O=Math.min(a.node.usedBytes-y,b);return f.set($.subarray(y,y+O),d),O},write(a,f,d,b,y,$){if(f.buffer===ox.buffer&&($=!1),!b)return 0;var O=a.node;return O.mtime=O.ctime=Date.now(),$?(O.contents=f.subarray(d,d+b),O.usedBytes=b):O.usedBytes===0&&y===0?(O.contents=f.slice(d,d+b),O.usedBytes=b):(n0.expandFileStorage(O,y+b),O.contents.set(f.subarray(d,d+b),y),O.usedBytes=Math.max(O.usedBytes,y+b)),b},llseek(a,f,d){var b=f;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,f,d,b,y){if(!o.isFile(a.node.mode))throw new o.ErrnoError(43);var $,O,V=a.node.contents;if(!(y&2)&&V.buffer===ox.buffer)O=!1,$=V.byteOffset;else{if(O=!0,$=TA(f),!$)throw new o.ErrnoError(48);V&&((d>0||d+f<V.length)&&(V.subarray?V=V.subarray(d,d+f):V=Array.prototype.slice.call(V,d,d+f)),ox.set(V,$))}return{ptr:$,allocated:O}},msync(a,f,d,b,y){return n0.stream_ops.write(a,f,0,b,d,!1),0}}},PA=a=>{if(typeof a!="string")return a;var f={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=f[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},Xx=a=>(typeof a=="string"&&(a=XA(a,!0)),a.subarray||(a=new Uint8Array(a)),a),sA=(a,f)=>{var d=0;return a&&(d|=365),f&&(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},y0={mount(a){return y0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,f,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(q0.EINVAL);var y=o.createNode(a,f,d);return y.node_ops=y0.node_ops,y.stream_ops=y0.stream_ops,y},realPath(a){for(var f=[];a.parent!==a;)f.push(a.name),a=a.parent;return f.push(a.mount.opts.root),f.reverse(),c0.join(...f)},node_ops:{getattr(a){var f=y0.realPath(a),d;try{d=a.mount.opts.fs.lstat(f)}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,f){var d=y0.realPath(a);try{if(f.mode!==void 0&&(a.mount.opts.fs.chmod(d,f.mode),a.mode=f.mode),f.atime||f.mtime){var b=new Date(f.atime||f.mtime),y=new Date(f.mtime||f.atime);a.mount.opts.fs.utime(d,b,y)}f.size!==void 0&&a.mount.opts.fs.truncate(d,f.size)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},lookup(a,f){try{var d=c0.join2(y0.realPath(a),f),b=a.mount.opts.fs.lstat(d).mode,y=y0.createNode(a,f,b);return y}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},mknod(a,f,d,b){var y=y0.createNode(a,f,d,b),$=y0.realPath(y);try{o.isDir(y.mode)?y.mount.opts.fs.mkdir($,y.mode):y.mount.opts.fs.writeFile($,"",{mode:y.mode})}catch(O){throw O.code?new o.ErrnoError(q0[O.code]):O}return y},rename(a,f,d){var b=y0.realPath(a),y=c0.join2(y0.realPath(f),d);try{a.mount.opts.fs.rename(b,y),a.name=d}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},unlink(a,f){var d=c0.join2(y0.realPath(a),f);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},rmdir(a,f){var d=c0.join2(y0.realPath(a),f);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},readdir(a){var f=y0.realPath(a);try{return a.mount.opts.fs.readdir(f)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},symlink(a,f,d){var b=c0.join2(y0.realPath(a),f);try{a.mount.opts.fs.symlink(d,b)}catch(y){throw y.code?new o.ErrnoError(q0[y.code]):y}},readlink(a){var f=y0.realPath(a);try{return a.mount.opts.fs.readlink(f)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}}},stream_ops:{open(a){var f=y0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(f,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(f){throw f.code?new o.ErrnoError(q0[f.code]):f}},read(a,f,d,b,y){try{return a.node.mount.opts.fs.read(a.nfd,f,d,b,y)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},write(a,f,d,b,y){try{return a.node.mount.opts.fs.write(a.nfd,f,d,b,y)}catch($){throw $.code?new o.ErrnoError(q0[$.code]):$}},llseek(a,f,d){var b=f;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}}},dA=async a=>{var f=await h(a);return new Uint8Array(f)},$e=(...a)=>o.createDataFile(...a),Bx=a=>a,lx=0,b0=null,Te=a=>{if(lx--,n.monitorRunDependencies?.(lx),lx==0&&b0){var f=b0;b0=null,f()}},Tx=a=>{lx++,n.monitorRunDependencies?.(lx)},ce=[],uA=async(a,f)=>{typeof Browser<"u"&&Browser.init();for(var d of ce)if(d.canHandle(f))return d.handle(a,f);return a},qA=async(a,f,d,b,y,$,O,V)=>{var o0=f?Ex.resolve(c0.join2(a,f)):a,u0=Bx(`cp ${o0}`);Tx(u0);try{var z0=d;typeof d=="string"&&(z0=await dA(d)),z0=await uA(z0,o0),V?.(),$||$e(a,f,z0,b,y,O)}finally{Te(u0)}},Gr=(a,f,d,b,y,$,O,V,o0,u0)=>{qA(a,f,d,b,y,V,o0,u0).then($).catch(O)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(a){Dx(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){Dx(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,f,d,b){Dx(this,"node_ops",{}),Dx(this,"stream_ops",{}),Dx(this,"readMode",365),Dx(this,"writeMode",146),Dx(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=f,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,f={}){if(!a)throw new o.ErrnoError(44);f.follow_mount??(f.follow_mount=!0),c0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(u0=>!!u0),y=o.root,$="/",O=0;O<b.length;O++){var V=O===b.length-1;if(V&&f.parent)break;if(b[O]!=="."){if(b[O]===".."){if($=c0.dirname($),o.isRoot(y)){a=$+"/"+b.slice(O+1).join("/"),d--;continue x}else y=y.parent;continue}$=c0.join2($,b[O]);try{y=o.lookupNode(y,b[O])}catch(u0){if(u0?.errno===44&&V&&f.noent_okay)return{path:$};throw u0}if(o.isMountpoint(y)&&(!V||f.follow_mount)&&(y=y.mounted.root),o.isLink(y.mode)&&(!V||f.follow)){if(!y.node_ops.readlink)throw new o.ErrnoError(52);var o0=y.node_ops.readlink(y);c0.isAbs(o0)||(o0=c0.dirname($)+"/"+o0),a=o0+"/"+b.slice(O+1).join("/");continue x}}}return{path:$,node:y}}throw new o.ErrnoError(32)},getPath(a){for(var f;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return f?d[d.length-1]!=="/"?`${d}/${f}`:d+f:d}f=f?`${a.name}/${f}`:a.name,a=a.parent}},hashName(a,f){for(var d=0,b=0;b<f.length;b++)d=(d<<5)-d+f.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var f=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[f],o.nameTable[f]=a},hashRemoveNode(a){var f=o.hashName(a.parent.id,a.name);if(o.nameTable[f]===a)o.nameTable[f]=a.name_next;else for(var d=o.nameTable[f];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,f){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,f),y=o.nameTable[b];y;y=y.name_next){var $=y.name;if(y.parent.id===a.id&&$===f)return y}return o.lookup(a,f)},createNode(a,f,d,b){var y=new o.FSNode(a,f,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 f=["r","w","rw"][a&3];return a&512&&(f+="w"),f},nodePermissions(a,f){return o.ignorePermissions?0:f.includes("r")&&!(a.mode&292)||f.includes("w")&&!(a.mode&146)||f.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var f=o.nodePermissions(a,"x");return f||(a.node_ops.lookup?0:2)},mayCreate(a,f){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,f);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,f,d){var b;try{b=o.lookupNode(a,f)}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,f){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(f);return o.isDir(a.mode)&&(d!=="r"||f&576)?31:o.nodePermissions(a,d)},checkOpExists(a,f){if(!a)throw new o.ErrnoError(f);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 f=o.getStream(a);if(!f)throw new o.ErrnoError(8);return f},getStream:a=>o.streams[a],createStream(a,f=-1){return a=Object.assign(new o.FSStream,a),f==-1&&(f=o.nextfd()),a.fd=f,o.streams[f]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,f=-1){var d=o.createStream(a,f);return d.stream_ops?.dup?.(d),d},doSetAttr(a,f,d){var b=a?.stream_ops.setattr,y=b?a:f;b??(b=f.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 f=o.getDevice(a.node.rdev);a.stream_ops=f.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,f)=>a<<8|f,registerDevice(a,f){o.devices[a]={stream_ops:f}},getDevice:a=>o.devices[a],getMounts(a){for(var f=[],d=[a];d.length;){var b=d.pop();f.push(b),d.push(...b.mounts)}return f},syncfs(a,f){typeof a=="function"&&(f=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--,f(V)}function $(V){if(V)return $.errored?void 0:($.errored=!0,y(V));++b>=d.length&&y(null)}for(var O of d)O.type.syncfs?O.type.syncfs(O,a,$):$(null)},mount(a,f,d){var b=d==="/",y=!d,$;if(b&&o.root)throw new o.ErrnoError(10);if(!b&&!y){var O=o.lookupPath(d,{follow_mount:!1});if(d=O.path,$=O.node,o.isMountpoint($))throw new o.ErrnoError(10);if(!o.isDir($.mode))throw new o.ErrnoError(54)}var V={type:a,opts:f,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 f=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(f.node))throw new o.ErrnoError(28);var d=f.node,b=d.mounted,y=o.getMounts(b);for(var[$,O]of Object.entries(o.nameTable))for(;O;){var V=O.name_next;y.includes(O.mount)&&o.destroyNode(O),O=V}d.mounted=null;var o0=d.mount.mounts.indexOf(b);d.mount.mounts.splice(o0,1)},lookup(a,f){return a.node_ops.lookup(a,f)},mknod(a,f,d){var b=o.lookupPath(a,{parent:!0}),y=b.node,$=c0.basename(a);if(!$)throw new o.ErrnoError(28);if($==="."||$==="..")throw new o.ErrnoError(20);var O=o.mayCreate(y,$);if(O)throw new o.ErrnoError(O);if(!y.node_ops.mknod)throw new o.ErrnoError(63);return y.node_ops.mknod(y,$,f,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){var f={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(f,a.node_ops.statfs(a.mount.opts.root)),f},create(a,f=438){return f&=4095,f|=32768,o.mknod(a,f,0)},mkdir(a,f=511){return f&=1023,f|=16384,o.mknod(a,f,0)},mkdirTree(a,f){var d=a.split("/"),b="";for(var y of d)if(y){(b||c0.isAbs(a))&&(b+="/"),b+=y;try{o.mkdir(b,f)}catch($){if($.errno!=20)throw $}}},mkdev(a,f,d){return typeof d>"u"&&(d=f,f=438),f|=8192,o.mknod(a,f,d)},symlink(a,f){if(!Ex.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(f,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var y=c0.basename(f),$=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,f){var d=c0.dirname(a),b=c0.dirname(f),y=c0.basename(a),$=c0.basename(f),O,V,o0;if(O=o.lookupPath(a,{parent:!0}),V=O.node,O=o.lookupPath(f,{parent:!0}),o0=O.node,!V||!o0)throw new o.ErrnoError(44);if(V.mount!==o0.mount)throw new o.ErrnoError(75);var u0=o.lookupNode(V,y),z0=Ex.relative(a,b);if(z0.charAt(0)!==".")throw new o.ErrnoError(28);if(z0=Ex.relative(f,d),z0.charAt(0)!==".")throw new o.ErrnoError(55);var I0;try{I0=o.lookupNode(o0,$)}catch{}if(u0!==I0){var $0=o.isDir(u0.mode),m0=o.mayDelete(V,y,$0);if(m0)throw new o.ErrnoError(m0);if(m0=I0?o.mayDelete(o0,$,$0):o.mayCreate(o0,$),m0)throw new o.ErrnoError(m0);if(!V.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(u0)||I0&&o.isMountpoint(I0))throw new o.ErrnoError(10);if(o0!==V&&(m0=o.nodePermissions(V,"w"),m0))throw new o.ErrnoError(m0);o.hashRemoveNode(u0);try{V.node_ops.rename(u0,o0,$),u0.parent=o0}catch(rx){throw rx}finally{o.hashAddNode(u0)}}},rmdir(a){var f=o.lookupPath(a,{parent:!0}),d=f.node,b=c0.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 f=o.lookupPath(a,{follow:!0}),d=f.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var f=o.lookupPath(a,{parent:!0}),d=f.node;if(!d)throw new o.ErrnoError(44);var b=c0.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 f=o.lookupPath(a),d=f.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,f){var d=o.lookupPath(a,{follow:!f}),b=d.node,y=o.checkOpExists(b.node_ops.getattr,63);return y(b)},fstat(a){var f=o.getStreamChecked(a),d=f.node,b=f.stream_ops.getattr,y=b?f:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(y)},lstat(a){return o.stat(a,!0)},doChmod(a,f,d,b){o.doSetAttr(a,f,{mode:d&4095|f.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,f,d){var b;if(typeof a=="string"){var y=o.lookupPath(a,{follow:!d});b=y.node}else b=a;o.doChmod(null,b,f,d)},lchmod(a,f){o.chmod(a,f,!0)},fchmod(a,f){var d=o.getStreamChecked(a);o.doChmod(d,d.node,f,!1)},doChown(a,f,d){o.doSetAttr(a,f,{timestamp:Date.now(),dontFollow:d})},chown(a,f,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,f,d){o.chown(a,f,d,!0)},fchown(a,f,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,f,d){if(o.isDir(f.mode))throw new o.ErrnoError(31);if(!o.isFile(f.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(f,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,f,{size:d,timestamp:Date.now()})},truncate(a,f){if(f<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,f)},ftruncate(a,f){var d=o.getStreamChecked(a);if(f<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,f)},utime(a,f,d){var b=o.lookupPath(a,{follow:!0}),y=b.node,$=o.checkOpExists(y.node_ops.setattr,63);$(y,{atime:f,mtime:d})},open(a,f,d=438){if(a==="")throw new o.ErrnoError(44);f=PA(f),f&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:!(f&131072),noent_okay:!0});b=$.node,a=$.path}var O=!1;if(f&64)if(b){if(f&128)throw new o.ErrnoError(20)}else{if(y)throw new o.ErrnoError(31);b=o.mknod(a,d|511,0),O=!0}if(!b)throw new o.ErrnoError(44);if(o.isChrdev(b.mode)&&(f&=-513),f&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!O){var V=o.mayOpen(b,f);if(V)throw new o.ErrnoError(V)}f&512&&!O&&o.truncate(b,0),f&=-131713;var o0=o.createStream({node:b,path:o.getPath(b),flags:f,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return o0.stream_ops.open&&o0.stream_ops.open(o0),O&&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(f){throw f}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,f,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,f,d),a.ungotten=[],a.position},read(a,f,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 O=a.stream_ops.read(a,f,d,b,y);return $||(a.position+=O),O},write(a,f,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 O=typeof y<"u";if(!O)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var V=a.stream_ops.write(a,f,d,b,y,$);return O||(a.position+=V),V},mmap(a,f,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(!f)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,f,d,b,y)},msync(a,f,d,b,y){return a.stream_ops.msync?a.stream_ops.msync(a,f,d,b,y):0},ioctl(a,f,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,f,d)},readFile(a,f={}){f.flags=f.flags||0,f.encoding=f.encoding||"binary",f.encoding!=="utf8"&&f.encoding!=="binary"&&d0(`Invalid encoding type "${f.encoding}"`);var d=o.open(a,f.flags),b=o.stat(a),y=b.size,$=new Uint8Array(y);return o.read(d,$,0,y,0),f.encoding==="utf8"&&($=tA($)),o.close(d),$},writeFile(a,f,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);f=Xx(f),o.write(b,f,0,f.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var f=o.lookupPath(a,{follow:!0});if(f.node===null)throw new o.ErrnoError(44);if(!o.isDir(f.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(f.node,"x");if(d)throw new o.ErrnoError(d);o.currentPath=f.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,$,O,V)=>O,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),ex.register(o.makedev(5,0),ex.default_tty_ops),ex.register(o.makedev(6,0),ex.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),f=0,d=()=>(f===0&&(we(a),f=a.byteLength),a[--f]);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 f=o.createNode(a,"fd",16895,73);return f.stream_ops={llseek:n0.stream_ops.llseek},f.node_ops={lookup(d,b){var y=+b,$=o.getStreamChecked(y),O={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>$.path},id:y+1};return O.parent=O,O},readdir(){return Array.from(o.streams.entries()).filter(([d,b])=>b).map(([d,b])=>d.toString())}},f}},{},"/proc/self/fd")},createStandardStreams(a,f,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),f?o.createDevice("/dev","stdout",null,f):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:y0}},init(a,f,d){o.initialized=!0,a??(a=n.stdin),f??(f=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,f,d)},quit(){o.initialized=!1,ZA(0);for(var a of o.streams)a&&o.close(a)},findObject(a,f){var d=o.analyzePath(a,f);return d.exists?d.object:null},analyzePath(a,f){try{var d=o.lookupPath(a,{follow:!f});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=c0.basename(a),d=o.lookupPath(a,{follow:!f}),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,f,d,b){a=typeof a=="string"?a:o.getPath(a);for(var y=f.split("/").reverse();y.length;){var $=y.pop();if($){var O=c0.join2(a,$);try{o.mkdir(O)}catch(V){if(V.errno!=20)throw V}a=O}}return O},createFile(a,f,d,b,y){var $=c0.join2(typeof a=="string"?a:o.getPath(a),f),O=sA(b,y);return o.create($,O)},createDataFile(a,f,d,b,y,$){var O=f;a&&(a=typeof a=="string"?a:o.getPath(a),O=f?c0.join2(a,f):a);var V=sA(b,y),o0=o.create(O,V);if(d){d=Xx(d),o.chmod(o0,V|146);var u0=o.open(o0,577);o.write(u0,d,0,d.length,0,$),o.close(u0),o.chmod(o0,V)}},createDevice(a,f,d,b){var y,$=c0.join2(typeof a=="string"?a:o.getPath(a),f),O=sA(!!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,u0,z0,I0,$0){for(var m0=0,rx=0;rx<I0;rx++){var mx;try{mx=d()}catch{throw new o.ErrnoError(29)}if(mx===void 0&&m0===0)throw new o.ErrnoError(6);if(mx==null)break;m0++,u0[z0+rx]=mx}return m0&&(o0.node.atime=Date.now()),m0},write(o0,u0,z0,I0,$0){for(var m0=0;m0<I0;m0++)try{b(u0[z0+m0])}catch{throw new o.ErrnoError(29)}return I0&&(o0.node.mtime=o0.node.ctime=Date.now()),m0}}),o.mkdev($,O,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,f,d,b,y){class ${constructor(){Dx(this,"lengthKnown",!1),Dx(this,"chunks",[])}get($0){if(!($0>this.length-1||$0<0)){var m0=$0%this.chunkSize,rx=$0/this.chunkSize|0;return this.getter(rx)[m0]}}setDataGetter($0){this.getter=$0}cacheLength(){var $0=new XMLHttpRequest;$0.open("HEAD",d,!1),$0.send(null),$0.status>=200&&$0.status<300||$0.status===304||d0("Couldn't load "+d+". Status: "+$0.status);var m0=Number($0.getResponseHeader("Content-length")),rx,mx=(rx=$0.getResponseHeader("Accept-Ranges"))&&rx==="bytes",qx=(rx=$0.getResponseHeader("Content-Encoding"))&&rx==="gzip",Lx=1024*1024;mx||(Lx=m0);var Rx=(Ux,pA)=>{Ux>pA&&d0("invalid range ("+Ux+", "+pA+") or no bytes requested!"),pA>m0-1&&d0("only "+m0+" bytes available! programmer error!");var Fx=new XMLHttpRequest;return Fx.open("GET",d,!1),m0!==Lx&&Fx.setRequestHeader("Range","bytes="+Ux+"-"+pA),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||[]):XA(Fx.responseText||"",!0)},re=this;re.setDataGetter(Ux=>{var pA=Ux*Lx,Fx=(Ux+1)*Lx-1;return Fx=Math.min(Fx,m0-1),typeof re.chunks[Ux]>"u"&&(re.chunks[Ux]=Rx(pA,Fx)),typeof re.chunks[Ux]>"u"&&d0("doXHR failed!"),re.chunks[Ux]}),(qx||!m0)&&(Lx=m0=1,m0=this.getter(0).length,Lx=m0,I("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=m0,this._chunkSize=Lx,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 O=new $,V={isDevice:!1,contents:O}}else var V={isDevice:!1,url:d};var o0=o.createFile(a,f,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 u0={};for(let[I0,$0]of Object.entries(o0.stream_ops))u0[I0]=(...m0)=>(o.forceLoadFile(o0),$0(...m0));function z0(I0,$0,m0,rx,mx){var qx=I0.node.contents;if(mx>=qx.length)return 0;var Lx=Math.min(qx.length-mx,rx);if(qx.slice)for(var Rx=0;Rx<Lx;Rx++)$0[m0+Rx]=qx[mx+Rx];else for(var Rx=0;Rx<Lx;Rx++)$0[m0+Rx]=qx.get(mx+Rx);return Lx}return u0.read=(I0,$0,m0,rx,mx)=>(o.forceLoadFile(o0),z0(I0,$0,m0,rx,mx)),u0.mmap=(I0,$0,m0,rx,mx)=>{o.forceLoadFile(o0);var qx=TA($0);if(!qx)throw new o.ErrnoError(48);return z0(I0,ox,qx,$0,m0),{ptr:qx,allocated:!0}},o0.stream_ops=u0,o0}},k0={currentUmask:18,calculateAt(a,f,d){if(c0.isAbs(f))return f;var b;if(a===-100)b=o.cwd();else{var y=k0.getStreamFromFD(a);b=y.path}if(f.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+f},writeStat(a,f){f0[a>>2]=f.dev,f0[a+4>>2]=f.mode,f0[a+8>>2]=f.nlink,f0[a+12>>2]=f.uid,f0[a+16>>2]=f.gid,f0[a+20>>2]=f.rdev,K0[a+24>>3]=BigInt(f.size),O0[a+32>>2]=4096,O0[a+36>>2]=f.blocks;var d=f.atime.getTime(),b=f.mtime.getTime(),y=f.ctime.getTime();return K0[a+40>>3]=BigInt(Math.floor(d/1e3)),f0[a+48>>2]=d%1e3*1e3*1e3,K0[a+56>>3]=BigInt(Math.floor(b/1e3)),f0[a+64>>2]=b%1e3*1e3*1e3,K0[a+72>>3]=BigInt(Math.floor(y/1e3)),f0[a+80>>2]=y%1e3*1e3*1e3,K0[a+88>>3]=BigInt(f.ino),0},writeStatFs(a,f){f0[a+4>>2]=f.bsize,f0[a+60>>2]=f.bsize,K0[a+8>>3]=BigInt(f.blocks),K0[a+16>>3]=BigInt(f.bfree),K0[a+24>>3]=BigInt(f.bavail),K0[a+32>>3]=BigInt(f.files),K0[a+40>>3]=BigInt(f.ffree),f0[a+48>>2]=f.fsid,f0[a+64>>2]=f.flags,f0[a+56>>2]=f.namelen},doMsync(a,f,d,b,y){if(!o.isFile(f.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var $=rA.slice(a,a+d);o.msync(f,$,y,d,b)},getStreamFromFD(a){var f=o.getStreamChecked(a);return f},varargs:void 0,getStr(a){var f=bx(a);return f}};function Pe(a,f,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(f){case 0:{var y=nA();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=nA(),O=289792;return b.flags=b.flags&~O|y&O,0}case 12:{var y=$A(),V=0;return J0[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 NA(a,f,d){k0.varargs=d;try{var b=k0.getStreamFromFD(a);switch(f){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),$=$A();O0[$>>2]=y.c_iflag||0,O0[$+4>>2]=y.c_oflag||0,O0[$+8>>2]=y.c_cflag||0,O0[$+12>>2]=y.c_lflag||0;for(var O=0;O<32;O++)ox[$+O+17]=y.c_cc[O]||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 $=$A(),V=O0[$>>2],o0=O0[$+4>>2],u0=O0[$+8>>2],z0=O0[$+12>>2],I0=[],O=0;O<32;O++)I0.push(ox[$+O+17]);return b.tty.ops.ioctl_tcsets(b.tty,f,{c_iflag:V,c_oflag:o0,c_cflag:u0,c_lflag:z0,c_cc:I0})}return 0}case 21519:{if(!b.tty)return-59;var $=$A();return O0[$>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var $=$A();return o.ioctl(b,f,$)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var $0=b.tty.ops.ioctl_tiocgwinsz(b.tty),$=$A();J0[$>>1]=$0[0],J0[$+2>>1]=$0[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 DA(a,f,d,b){k0.varargs=b;try{f=k0.getStr(f),f=k0.calculateAt(a,f);var y=b?nA():0;return d&64&&(y&=~k0.currentUmask),o.open(f,d,y).fd}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return-$.errno}}var Ur=()=>2147483648,Ee=(a,f)=>Math.ceil(a/f)*f,nr=a=>{var f=IA.buffer.byteLength,d=(a-f+65535)/65536|0;try{return IA.grow(d),Q(),1}catch{}},sr=a=>{var f=rA.length;a>>>=0;var d=Ur();if(a>d)return!1;for(var b=1;b<=4;b*=2){var y=f*(1+.2/b);y=Math.min(y,a+100663296);var $=Math.min(d,Ee(Math.max(a,y),65536)),O=nr($);if(O)return!0}return!1};function Hr(a){try{var f=k0.getStreamFromFD(a);return o.close(f),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var Jr=(a,f,d,b)=>{for(var y=0,$=0;$<d;$++){var O=f0[f>>2],V=f0[f+4>>2];f+=8;var o0=o.read(a,ox,O,V,b);if(o0<0)return-1;if(y+=o0,o0<V)break;typeof b<"u"&&(b+=o0)}return y};function Kr(a,f,d,b){try{var y=k0.getStreamFromFD(a),$=Jr(y,f,d);return f0[b>>2]=$,0}catch(O){if(typeof o>"u"||O.name!=="ErrnoError")throw O;return O.errno}}var Be=9007199254740992,ir=-9007199254740992,YA=a=>a<ir||a>Be?NaN:Number(a);function Ce(a,f,d,b){f=YA(f);try{if(isNaN(f))return 22;var y=k0.getStreamFromFD(a);return o.llseek(y,f,d),K0[b>>3]=BigInt(y.position),y.getdents&&f===0&&d===0&&(y.getdents=null),0}catch($){if(typeof o>"u"||$.name!=="ErrnoError")throw $;return $.errno}}var zr=(a,f,d,b)=>{for(var y=0,$=0;$<d;$++){var O=f0[f>>2],V=f0[f+4>>2];f+=8;var o0=o.write(a,ox,O,V,b);if(o0<0)return-1;if(y+=o0,o0<V)break;typeof b<"u"&&(b+=o0)}return y};function ar(a,f,d,b){try{var y=k0.getStreamFromFD(a),$=zr(y,f,d);return f0[b>>2]=$,0}catch(O){if(typeof o>"u"||O.name!=="ErrnoError")throw O;return O.errno}}var Vr=0,QA=()=>fe||Vr>0,qe=a=>{M=a,QA()||(n.onExit?.(a),r0=!0),m(a,new eA(a))},or=(a,f)=>{M=a,QA()||l0(),qe(a)},Fr=a=>{if(a instanceof eA||a=="unwind")return M;m(1,a)},Wr=(a,f,d)=>Se(a,rA,f,d),vr=a=>xe(a),Xr=a=>{var f=WA(a)+1,d=vr(f);return Wr(a,d,f),d},Yr=(...a)=>o.createPath(...a),de=(...a)=>o.unlink(...a),Qr=(...a)=>o.createLazyFile(...a),Zr=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=Gr,o.preloadFile=qA,o.staticInit(),n.noExitRuntime&&(fe=n.noExitRuntime),n.preloadPlugins&&(ce=n.preloadPlugins),n.print&&(I=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(G=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=Cx,n.addRunDependency=Tx,n.removeRunDependency=Te,n.FS_preloadFile=qA,n.FS_unlink=de,n.FS_createPath=Yr,n.FS_createDevice=Zr,n.FS=o,n.FS_createDataFile=$e,n.FS_createLazyFile=Qr,n.PROXYFS=y0;var lr,fr,ZA,cr,xe,Ne,Px,xt,IA;function Ae(a){lr=n._main=a.__main_argc_argv,fr=a.__funcs_on_exit,ZA=a.fflush,cr=a._emscripten_stack_restore,xe=a._emscripten_stack_alloc,Ne=a.emscripten_stack_get_current,Px=IA=a.memory,xt=a.__indirect_function_table}var Ie={__assert_fail:CA,__syscall_fcntl64:Pe,__syscall_ioctl:NA,__syscall_openat:DA,emscripten_resize_heap:sr,fd_close:Hr,fd_read:Kr,fd_seek:Ce,fd_write:ar};function Cx(a=[]){var f=lr;a.unshift(D);var d=a.length,b=vr((d+1)*4),y=b;for(var $ of a)f0[y>>2]=Xr($),y+=4;f0[y>>2]=0;try{var O=f(d,b);return or(O,!0),O}catch(V){return Fr(V)}}function ue(a=u){if(lx>0){b0=ue;return}if(i0(),lx>0){b0=ue;return}function f(){if(n.calledRun=!0,!r0){H(),U?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||Cx(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),f()},1)):f()}var ee;return ee=await Ax(),ue(),a0?s=n:s=new Promise((a,f)=>{U=a,J=f}),s}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),uo={};Kc(uo,{createPawnCC:()=>Qc,createPawnDbg:()=>Zc});Do.exports=zc(uo);var Xc=Co(Vc(),1),Yc=Co(Wc(),1),Qc=Xc.default,Zc=Yc.default});var ke=va((Am,fv)=>{"use strict";var AB=Object.create,jt=Object.defineProperty,eB=Object.getOwnPropertyDescriptor,pF=Object.getOwnPropertyNames,rB=Object.getPrototypeOf,tB=Object.prototype.hasOwnProperty,nB=(x,A,e)=>A in x?jt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,sB=(x,A)=>function(){try{return A||(0,x[pF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},iB=(x,A)=>{for(var e in A)jt(x,e,{get:A[e],enumerable:!0})},bF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of pF(A))!tB.call(x,t)&&t!==e&&jt(x,t,{get:()=>A[t],enumerable:!(r=eB(A,t))||r.enumerable});return x},aB=(x,A,e)=>(e=x!=null?AB(rB(x)):{},bF(A||!x||!x.__esModule?jt(e,"default",{value:x,enumerable:!0}):e,x)),oB=x=>bF(jt({},"__esModule",{value:!0}),x),A0=(x,A,e)=>nB(x,typeof A!="symbol"?A+"":A,e),FB=sB({"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 c(e0){e0=e0.split("-")[0];for(var E0=e0.split(".").slice(0,3);E0.length<3;)E0.push("00");return E0=E0.map((D0,X0,V0)=>D0.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?c(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*)/)?c(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",_=(c,C)=>{throw C};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var h="",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 I=require("fs");h=__dirname+"/",P=C=>{C=L(C)?new URL(C):C;var g=I.readFileSync(C);return k(Buffer.isBuffer(g)),g},S=async(C,g=!0)=>{C=L(C)?new URL(C):C;var T=I.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),_=(C,g)=>{throw process.exitCode=C,g}}else if(!u)if(F||v){try{h=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=c=>{var C=new XMLHttpRequest;return C.open("GET",c,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),S=async c=>{if(L(c))return new Promise((g,T)=>{var q=new XMLHttpRequest;q.open("GET",c,!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(c,{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),G=console.error.bind(console);k(!u,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var r0;globalThis.WebAssembly||G("no native wasm support detected");var M=!1;function k(c,C){c||ax("Assertion failed"+(C?": "+C:""))}var L=c=>c.startsWith("file://");function Z(){var c=Xn();k((c&3)==0),c==0&&(c+=4),g0[c>>2]=34821223,g0[c+4>>2]=2310721022,g0[0]=1668509029}function W(){if(!M){var c=Xn();c==0&&(c+=4);var C=g0[c>>2],g=g0[c+4>>2];(C!=34821223||g!=2310721022)&&ax(`Stack overflow! Stack cookie has been overwritten at ${Ex(c)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${Ex(g)} ${Ex(C)}`),g0[0]!=1668509029&&ax("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class U{}class J extends U{}var a0=!0;(()=>{var c=new Int16Array(1),C=new Int8Array(c.buffer);c[0]=25459,(C[0]!==115||C[1]!==99)&&ax("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function s0(c){Object.getOwnPropertyDescriptor(n,c)||Object.defineProperty(n,c,{configurable:!0,set(){ax(`Attempt to set \`Module.${c}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function Q(c){return()=>k(!1,`call to '${c}' via reference taken before Wasm module initialization`)}function i0(c){Object.getOwnPropertyDescriptor(n,c)&&ax(`\`Module.${c}\` was supplied but \`${c}\` not included in INCOMING_MODULE_JS_API`)}function H(c){return c==="FS_createPath"||c==="FS_createDataFile"||c==="FS_createPreloadedFile"||c==="FS_preloadFile"||c==="FS_unlink"||c==="addRunDependency"||c==="FS_createLazyFile"||c==="FS_createDevice"||c==="removeRunDependency"}function v0(c){l0(c)}function l0(c){Object.getOwnPropertyDescriptor(n,c)||Object.defineProperty(n,c,{configurable:!0,get(){var C=`'${c}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;H(c)&&(C+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),ax(C)}})}function B0(c){for(var C=0,g=c.length,T=new Uint8Array(g),q;C<g;++C)q=c.charCodeAt(C),T[C]=~q>>8&q;return T}var d0,S0,P0=!1;function vx(){var c=It.buffer;Wx=new Int8Array(c),wA=new Int16Array(c),n.HEAPU8=bx=new Uint8Array(c),ix=new Uint16Array(c),SA=new Int32Array(c),g0=new Uint32Array(c),tr=new Float32Array(c),fe=new Float64Array(c),rr=new BigInt64Array(c),tA=new BigUint64Array(c)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function Vx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)Rr(n.preRun.shift());s0("preRun"),CA(c0)}function kA(){k(!P0),P0=!0,W(),Er.__wasm_call_ctors()}function _A(){if(W(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)$A(n.postRun.shift());s0("postRun"),CA(nA)}function ax(c){n.onAbort?.(c),c=`Aborted(${c})`,G(c),M=!0;var C=new WebAssembly.RuntimeError(c);throw S0?.(C),C}function Ax(){ax("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 eA={init:Ax,createDataFile:Ax,createPreloadedFile:Ax,createLazyFile:Ax,open:Ax,mkdev:Ax,registerDevice:Ax,analyzePath:Ax,ErrnoError:Ax};function J0(c,C){return(...g)=>{k(P0,`native function \`${c}\` called before runtime initialization`);var T=Er[c];return k(T,`exported native function \`${c}\` not found`),k(g.length<=C,`native function \`${c}\` called with ${g.length} args but expects ${C}`),T(...g)}}var O0;function K0(){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,50 +2172,50 @@ 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 ox(c){return c}async function Nr(c){return c}async function
|
|
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 ox(c){return c}async function Nr(c){return c}async function Ir(c,C){try{var g=await Nr(c),T=await WebAssembly.instantiate(g,C);return T}catch(q){G(`failed to asynchronously prepare wasm: ${q}`),L(c)&&G(`warning: Loading from a file URI (${c}) 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`),ax(q)}}async function Mr(c,C,g){return Ir(C,g)}function f0(){var c={env:sa,wasi_snapshot_preview1:sa};return c}async function Lr(){function c(X,x0){return Er=X.exports,Kl(Er),vx(),Er}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,c(X.instance)}var T=f0();if(n.instantiateWasm)return new Promise((X,x0)=>{try{n.instantiateWasm(T,(e0,E0)=>{X(c(e0,E0))})}catch(e0){G(`Module.instantiateWasm callback failed with error: ${e0}`),x0(e0)}});O0??(O0=K0());var q=await Mr(r0,O0,T),Y=g(q);return Y}class rA{constructor(C){A0(this,"name","ExitStatus"),this.message=`Program terminated with exit(${C})`,this.status=C}}var wA,SA,rr,Wx,tr,fe,ix,g0,tA,bx,CA=c=>{for(;c.length>0;)c.shift()(n)},nA=[],$A=c=>nA.push(c),c0=[],Rr=c=>c0.push(c),we=!0;function Ex(c){return k(typeof c=="number",`ptrToString expects a number, got ${typeof c}`),c>>>=0,"0x"+c.toString(16).padStart(8,"0")}var Gx=c=>{Gx.shown||(Gx.shown={}),Gx.shown[c]||(Gx.shown[c]=1,E&&(c="warning: "+c),G(c))};class WA{constructor(C){this.excPtr=C,this.ptr=C-24}set_type(C){g0[this.ptr+4>>2]=C}get_type(){return g0[this.ptr+4>>2]}set_destructor(C){g0[this.ptr+8>>2]=C}get_destructor(){return g0[this.ptr+8>>2]}set_caught(C){C=C?1:0,Wx[this.ptr+12]=C}get_caught(){return Wx[this.ptr+12]!=0}set_rethrown(C){C=C?1:0,Wx[this.ptr+13]=C}get_rethrown(){return Wx[this.ptr+13]!=0}init(C,g){this.set_adjusted_ptr(0),this.set_type(C),this.set_destructor(g)}set_adjusted_ptr(C){g0[this.ptr+16>>2]=C}get_adjusted_ptr(){return g0[this.ptr+16>>2]}}var Se=0,XA=(c,C,g)=>{var T=new WA(c);T.init(C,g),Se++,k(!1,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")},Or=()=>ax("native code called abort()"),ex={},TA=c=>{for(;c.length;){var C=c.pop(),g=c.pop();g(C)}};function n0(c){return this.fromWireType(g0[c>>2])}var PA={},Xx={},sA={},q0=class extends Error{constructor(C){super(C),this.name="InternalError"}},y0=c=>{throw new q0(c)},dA=(c,C,g)=>{c.forEach(x0=>sA[x0]=C);function T(x0){var e0=g(x0);e0.length!==c.length&&y0("Mismatched type converter count");for(var E0=0;E0<c.length;++E0)Tx(c[E0],e0[E0])}var q=new Array(C.length),Y=[],X=0;for(let[x0,e0]of C.entries())Xx.hasOwnProperty(e0)?q[x0]=Xx[e0]:(Y.push(e0),PA.hasOwnProperty(e0)||(PA[e0]=[]),PA[e0].push(()=>{q[x0]=Xx[e0],++X,X===Y.length&&T(q)}));Y.length===0&&T(q)},$e=c=>{var C=ex[c];delete ex[c];var g=C.rawConstructor,T=C.rawDestructor,q=C.fields,Y=q.map(X=>X.getterReturnType).concat(q.map(X=>X.setterArgumentType));dA([c],Y,X=>{var x0={};for(var[e0,E0]of q.entries()){let D0=X[e0],X0=E0.getter,V0=E0.getterContext,Q0=X[e0+q.length],Nx=E0.setter,hx=E0.setterContext;x0[E0.fieldName]={read:aA=>D0.fromWireType(X0(V0,aA)),write:(aA,MA)=>{var bA=[];Nx(hx,aA,Q0.toWireType(bA,MA)),TA(bA)},optional:D0.optional}}return[{name:C.name,fromWireType:D0=>{var X0={};for(var V0 in x0)X0[V0]=x0[V0].read(D0);return T(D0),X0},toWireType:(D0,X0)=>{for(var V0 in x0)if(!(V0 in X0)&&!x0[V0].optional)throw new TypeError(`Missing field: "${V0}"`);var Q0=g();for(V0 in x0)x0[V0].write(Q0,X0[V0]);return D0!==null&&D0.push(T,Q0),Q0},readValueFromPointer:n0,destructorFunction:T}]})},Bx=c=>{for(var C="";;){var g=bx[c++];if(!g)return C;C+=String.fromCharCode(g)}},lx=class extends Error{constructor(C){super(C),this.name="BindingError"}},b0=c=>{throw new lx(c)};function Te(c,C,g={}){var T=C.name;if(c||b0(`type "${T}" must have a positive integer typeid pointer`),Xx.hasOwnProperty(c)){if(g.ignoreDuplicateRegistrations)return;b0(`Cannot register type '${T}' twice`)}if(Xx[c]=C,delete sA[c],PA.hasOwnProperty(c)){var q=PA[c];delete PA[c],q.forEach(Y=>Y())}}function Tx(c,C,g={}){return Te(c,C,g)}var ce=(c,C,g)=>{switch(C){case 1:return g?T=>Wx[T]:T=>bx[T];case 2:return g?T=>wA[T>>1]:T=>ix[T>>1];case 4:return g?T=>SA[T>>2]:T=>g0[T>>2];case 8:return g?T=>rr[T>>3]:T=>tA[T>>3];default:throw new TypeError(`invalid integer width (${C}): ${c}`)}},uA=c=>{if(c===null)return"null";var C=typeof c;return C==="object"||C==="array"||C==="function"?c.toString():""+c},qA=(c,C,g,T)=>{if(C<g||C>T)throw new TypeError(`Passing a number "${uA(C)}" from JS side to C/C++ side to an argument of type "${c}", which is outside the valid range [${g}, ${T}]!`)},Gr=(c,C,g,T,q)=>{C=Bx(C);let Y=T===0n,X=x0=>x0;if(Y){let x0=g*8;X=e0=>BigInt.asUintN(x0,e0),q=X(q)}Tx(c,{name:C,fromWireType:X,toWireType:(x0,e0)=>{if(typeof e0=="number")e0=BigInt(e0);else if(typeof e0!="bigint")throw new TypeError(`Cannot convert "${uA(e0)}" to ${C}`);return qA(C,e0,T,q),e0},readValueFromPointer:ce(C,g,!Y),destructorFunction:null})},o=(c,C,g,T)=>{C=Bx(C),Tx(c,{name:C,fromWireType:function(q){return!!q},toWireType:function(q,Y){return Y?g:T},readValueFromPointer:function(q){return this.fromWireType(bx[q])},destructorFunction:null})},k0=c=>({count:c.count,deleteScheduled:c.deleteScheduled,preservePointerOnDelete:c.preservePointerOnDelete,ptr:c.ptr,ptrType:c.ptrType,smartPtr:c.smartPtr,smartPtrType:c.smartPtrType}),Pe=c=>{function C(g){return g.$$.ptrType.registeredClass.name}b0(C(c)+" instance already deleted")},NA=!1,DA=c=>{},Ur=c=>{c.smartPtr?c.smartPtrType.rawDestructor(c.smartPtr):c.ptrType.registeredClass.rawDestructor(c.ptr)},Ee=c=>{c.count.value-=1;var C=c.count.value===0;C&&Ur(c)},nr=(c,C,g)=>{if(C===g)return c;if(g.baseClass===void 0)return null;var T=nr(c,C,g.baseClass);return T===null?null:g.downcast(T)},sr={},Hr={},Jr=(c,C)=>{for(C===void 0&&b0("ptr should not be undefined");c.baseClass;)C=c.upcast(C),c=c.baseClass;return C},Kr=(c,C)=>(C=Jr(c,C),Hr[C]),Be=(c,C)=>{(!C.ptrType||!C.ptr)&&y0("makeClassHandle requires ptr and ptrType");var g=!!C.smartPtrType,T=!!C.smartPtr;return g!==T&&y0("Both smartPtrType and smartPtr must be specified"),C.count={value:1},YA(Object.create(c,{$$:{value:C,writable:!0}}))};function ir(c){var C=this.getPointee(c);if(!C)return this.destructor(c),null;var g=Kr(this.registeredClass,C);if(g!==void 0){if(g.$$.count.value===0)return g.$$.ptr=C,g.$$.smartPtr=c,g.clone();var T=g.clone();return this.destructor(c),T}function q(){return this.isSmartPointer?Be(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:C,smartPtrType:this,smartPtr:c}):Be(this.registeredClass.instancePrototype,{ptrType:this,ptr:c})}var Y=this.registeredClass.getActualType(C),X=sr[Y];if(!X)return q.call(this);var x0;this.isConst?x0=X.constPointerType:x0=X.pointerType;var e0=nr(C,this.registeredClass,x0.registeredClass);return e0===null?q.call(this):this.isSmartPointer?Be(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:e0,smartPtrType:this,smartPtr:c}):Be(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:e0})}var YA=c=>globalThis.FinalizationRegistry?(NA=new FinalizationRegistry(C=>{console.warn(C.leakWarning),Ee(C.$$)}),YA=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} <${Ex(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,
|
|
2178
|
+
Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(X,ir),q.leakWarning=X.stack.replace(/^Error: /,""),NA.register(C,q,C)}return C},DA=C=>NA.unregister(C),YA(c)):(YA=C=>C,c),Ce=[],zr=()=>{for(;Ce.length;){var c=Ce.pop();c.$$.deleteScheduled=!1,c.delete()}},ar,Vr=()=>{let c=QA.prototype;Object.assign(c,{isAliasOf(g){if(!(this instanceof QA)||!(g instanceof QA))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||Pe(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var g=YA(Object.create(Object.getPrototypeOf(this),{$$:{value:k0(this.$$)}}));return g.$$.count.value+=1,g.$$.deleteScheduled=!1,g},delete(){this.$$.ptr||Pe(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),DA(this),Ee(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||Pe(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),Ce.push(this),Ce.length===1&&ar&&ar(zr),this.$$.deleteScheduled=!0,this}});let C=Symbol.dispose;C&&(c[C]=c.delete)};function QA(){}var qe=(c,C)=>Object.defineProperty(C,"name",{value:c}),or=(c,C,g)=>{if(c[C].overloadTable===void 0){var T=c[C];c[C]=function(...q){return c[C].overloadTable.hasOwnProperty(q.length)||b0(`Function '${g}' called with an invalid number of arguments (${q.length}) - expects one of (${c[C].overloadTable})!`),c[C].overloadTable[q.length].apply(this,q)},c[C].overloadTable=[],c[C].overloadTable[T.argCount]=T}},Fr=(c,C,g)=>{n.hasOwnProperty(c)?((g===void 0||n[c].overloadTable!==void 0&&n[c].overloadTable[g]!==void 0)&&b0(`Cannot register public name '${c}' twice`),or(n,c,c),n[c].overloadTable.hasOwnProperty(g)&&b0(`Cannot register multiple overloads of a function with the same number of arguments (${g})!`),n[c].overloadTable[g]=C):(n[c]=C,n[c].argCount=g)},Wr=48,vr=57,Xr=c=>{k(typeof c=="string"),c=c.replace(/[^a-zA-Z0-9_]/g,"$");var C=c.charCodeAt(0);return C>=Wr&&C<=vr?`_${c}`:c};function Yr(c,C,g,T,q,Y,X,x0){this.name=c,this.constructor=C,this.instancePrototype=g,this.rawDestructor=T,this.baseClass=q,this.getActualType=Y,this.upcast=X,this.downcast=x0,this.pureVirtualFunctions=[]}var de=(c,C,g)=>{for(;C!==g;)C.upcast||b0(`Expected null or instance of ${g.name}, got an instance of ${C.name}`),c=C.upcast(c),C=C.baseClass;return c};function Qr(c,C){if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;C.$$||b0(`Cannot pass "${uA(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=de(C.$$.ptr,g,this.registeredClass);return T}function Zr(c,C){var g;if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),this.isSmartPointer?(g=this.rawConstructor(),c!==null&&c.push(this.rawDestructor,g),g):0;(!C||!C.$$)&&b0(`Cannot pass "${uA(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=de(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,u0.toHandle(()=>q.delete())),c!==null&&c.push(this.rawDestructor,g)}break;default:b0("Unsupported sharing policy")}return g}function lr(c,C){if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;C.$$||b0(`Cannot pass "${uA(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=de(C.$$.ptr,g,this.registeredClass);return T}var fr=()=>{Object.assign(ZA.prototype,{getPointee(c){return this.rawGetPointee&&(c=this.rawGetPointee(c)),c},destructor(c){this.rawDestructor?.(c)},readValueFromPointer:n0,fromWireType:ir})};function ZA(c,C,g,T,q,Y,X,x0,e0,E0,D0){this.name=c,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=D0,!q&&C.baseClass===void 0?T?(this.toWireType=Qr,this.destructorFunction=null):(this.toWireType=lr,this.destructorFunction=null):this.toWireType=Zr}var cr=(c,C,g)=>{n.hasOwnProperty(c)||y0("Replacing nonexistent public symbol"),n[c].overloadTable!==void 0&&g!==void 0?n[c].overloadTable[g]=C:(n[c]=C,n[c].argCount=g)},xe=[],Ne=c=>{var C=xe[c];return C||(xe[c]=C=Oe.get(c)),k(Oe.get(c)==C,"table mirror is out of date"),C},Px=(c,C,g=!1)=>{k(!g,"async bindings are only supported with JSPI"),c=Bx(c);function T(){var Y=Ne(C);return Y}var q=T();return typeof q!="function"&&b0(`unknown function pointer with signature ${c}: ${C}`),q};class xt extends Error{}var IA=c=>{var C=ra(c),g=Bx(C);return te(C),g},Ae=(c,C)=>{var g=[],T={};function q(Y){if(!T[Y]&&!Xx[Y]){if(sA[Y]){sA[Y].forEach(q);return}g.push(Y),T[Y]=!0}}throw C.forEach(q),new xt(`${c}: `+g.map(IA).join([", "]))},Ie=(c,C,g,T,q,Y,X,x0,e0,E0,D0,X0,V0)=>{D0=Bx(D0),Y=Px(q,Y),x0&&(x0=Px(X,x0)),E0&&(E0=Px(e0,E0)),V0=Px(X0,V0);var Q0=Xr(D0);Fr(Q0,function(){Ae(`Cannot construct ${D0} due to unbound types`,[T])}),dA([c,C,g],T?[T]:[],Nx=>{var hx;Nx=Nx[0];var aA,MA;T?(aA=Nx.registeredClass,MA=aA.instancePrototype):MA=QA.prototype;var bA=qe(D0,function(...Yn){if(Object.getPrototypeOf(this)!==Br)throw new lx(`Use 'new' to construct ${D0}`);if(LA.constructor_body===void 0)throw new lx(`${D0} has no accessible constructor`);var Fa=LA.constructor_body[Yn.length];if(Fa===void 0)throw new lx(`Tried to invoke ctor of ${D0} with invalid number of parameters (${Yn.length}) - expected (${Object.keys(LA.constructor_body).toString()}) parameters instead!`);return Fa.apply(this,Yn)}),Br=Object.create(MA,{constructor:{value:bA}});bA.prototype=Br;var LA=new Yr(D0,bA,Br,V0,aA,Y,x0,E0);LA.baseClass&&((hx=LA.baseClass).__derivedClasses??(hx.__derivedClasses=[]),LA.baseClass.__derivedClasses.push(LA));var Wl=new ZA(D0,LA,!0,!1,!1),aa=new ZA(D0+"*",LA,!1,!1,!1),oa=new ZA(D0+" const*",LA,!1,!0,!1);return sr[c]={pointerType:aa,constPointerType:oa},cr(Q0,bA),[Wl,aa,oa]})},Cx=(c,C)=>{for(var g=[],T=0;T<c;T++)g.push(g0[C+T*4>>2]);return g};function ue(c){for(var C=1;C<c.length;++C)if(c[C]!==null&&c[C].destructorFunction===void 0)return!0;return!1}function ee(c,C,g,T,q){if(c<C||c>g){var Y=C==g?C:`${C} to ${g}`;q(`function ${T} called with ${c} arguments, expected ${Y}`)}}function a(c,C,g,T){var q=ue(c),Y=c.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}) {
|
|
2179
2179
|
`;E0+=`checkArgCount(arguments.length, minArgs, maxArgs, humanName, throwBindingError);
|
|
2180
|
-
`,
|
|
2181
|
-
`);var D0=
|
|
2180
|
+
`,q&&(E0+=`var destructors = [];
|
|
2181
|
+
`);var D0=q?"destructors":"null",X0=["humanName","throwBindingError","invoker","fn","runDestructors","fromRetWire","toClassParamWire"];C&&(E0+=`var thisWired = toClassParamWire(${D0}, this);
|
|
2182
2182
|
`);for(var e0=0;e0<Y;++e0){var V0=`toArg${e0}Wire`;E0+=`var arg${e0}Wired = ${V0}(${D0}, arg${e0});
|
|
2183
2183
|
`,X0.push(V0)}if(E0+=(g||T?"var rv = ":"")+`invoker(${x0});
|
|
2184
|
-
`,
|
|
2184
|
+
`,q)E0+=`runDestructors(destructors);
|
|
2185
2185
|
`;else for(var e0=C?1:2;e0<c.length;++e0){var Q0=e0===1?"thisWired":"arg"+(e0-2)+"Wired";c[e0].destructorFunction!==null&&(E0+=`${Q0}_dtor(${Q0});
|
|
2186
2186
|
`,X0.push(`${Q0}_dtor`))}return g&&(E0+=`var ret = fromRetWire(rv);
|
|
2187
2187
|
return ret;
|
|
2188
2188
|
`),E0+=`}
|
|
2189
2189
|
`,X0.push("checkArgCount","minArgs","maxArgs"),E0=`if (arguments.length !== ${X0.length}){ throw new Error(humanName + "Expected ${X0.length} closure arguments " + arguments.length + " given."); }
|
|
2190
|
-
${E0}`,new Function(X0,E0)}function
|
|
2190
|
+
${E0}`,new Function(X0,E0)}function f(c){for(var C=c.length-2,g=c.length-1;g>=2&&c[g].optional;--g)C--;return C}function d(c,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=ue(C),E0=!C[0].isVoid,D0=X-2,X0=f(C),V0=C[0],Q0=C[1],Nx=[c,b0,T,q,TA,V0.fromWireType.bind(V0),Q0?.toWireType.bind(Q0)],hx=2;hx<X;++hx){var aA=C[hx];Nx.push(aA.toWireType.bind(aA))}if(!e0)for(var hx=x0?1:2;hx<C.length;++hx)C[hx].destructorFunction!==null&&Nx.push(C[hx].destructorFunction);Nx.push(ee,X0,D0);var bA=a(C,x0,E0,Y)(...Nx);return qe(c,bA)}var b=(c,C,g,T,q,Y)=>{k(C>0);var X=Cx(C,g);q=Px(T,q),dA([],[c],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 lx(`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)},dA([],X,E0=>(E0.splice(1,0,null),x0.registeredClass.constructor_body[C-1]=d(e0,E0,null,q,Y),[])),[]})},y=(c,C,g)=>(c instanceof Object||b0(`${g} with invalid "this": ${c}`),c instanceof C.registeredClass.constructor||b0(`${g} incompatible with "this" of type ${c.constructor.name}`),c.$$.ptr||b0(`cannot call emscripten binding method ${g} on deleted object`),de(c.$$.ptr,c.$$.ptrType.registeredClass,C.registeredClass)),$=(c,C,g,T,q,Y,X,x0,e0,E0)=>{C=Bx(C),q=Px(T,q),dA([],[c],D0=>{D0=D0[0];var X0=`${D0.name}.${C}`,V0={get(){Ae(`Cannot access ${X0} due to unbound types`,[g,X])},enumerable:!0,configurable:!0};return e0?V0.set=()=>Ae(`Cannot access ${X0} due to unbound types`,[g,X]):V0.set=Q0=>b0(X0+" is a read-only property"),Object.defineProperty(D0.registeredClass.instancePrototype,C,V0),dA([],e0?[g,X]:[g],Q0=>{var Nx=Q0[0],hx={get(){var MA=y(this,D0,X0+" getter");return Nx.fromWireType(q(Y,MA))},enumerable:!0};if(e0){e0=Px(x0,e0);var aA=Q0[1];hx.set=function(MA){var bA=y(this,D0,X0+" setter"),Br=[];e0(E0,bA,aA.toWireType(Br,MA)),TA(Br)}}return Object.defineProperty(D0.registeredClass.instancePrototype,C,hx),[]}),[]})},O=[],V=[0,1,,1,null,1,!0,1,!1,1],o0=c=>{if(c>9&&--V[c+1]===0){k(V[c]!==void 0,"decref for unallocated handle");var C=V[c];V[c]=void 0,O.push(c)}},u0={toValue:c=>(c||b0(`Cannot use deleted val. handle = ${c}`),k(c===2||V[c]!==void 0&&c%2===0,`invalid handle: ${c}`),V[c]),toHandle:c=>{switch(c){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let C=O.pop()||V.length;return V[C]=c,V[C+1]=1,C}}}},z0={name:"emscripten::val",fromWireType:c=>{var C=u0.toValue(c);return o0(c),C},toWireType:(c,C)=>u0.toHandle(C),readValueFromPointer:n0,destructorFunction:null},I0=c=>Tx(c,z0),$0=(c,C)=>{switch(C){case 4:return function(g){return this.fromWireType(tr[g>>2])};case 8:return function(g){return this.fromWireType(fe[g>>3])};default:throw new TypeError(`invalid float width (${C}): ${c}`)}},m0=(c,C,g)=>{C=Bx(C),Tx(c,{name:C,fromWireType:T=>T,toWireType:(T,q)=>{if(typeof q!="number"&&typeof q!="boolean")throw new TypeError(`Cannot convert ${uA(q)} to ${C}`);return q},readValueFromPointer:$0(C,g),destructorFunction:null})},rx=c=>{c=c.trim();let C=c.indexOf("(");return C===-1?c:(k(c.endsWith(")"),"Parentheses for argument names should match."),c.slice(0,C))},mx=(c,C,g,T,q,Y,X,x0)=>{var e0=Cx(C,g);c=Bx(c),c=rx(c),q=Px(T,q,X),Fr(c,function(){Ae(`Cannot call ${c} due to unbound types`,e0)},C-1),dA([],e0,E0=>{var D0=[E0[0],null].concat(E0.slice(1));return cr(c,d(c,D0,null,q,Y,X),C-1),[]})},qx=(c,C,g,T,q)=>{C=Bx(C);let Y=T===0,X=e0=>e0;if(Y){var x0=32-8*g;X=e0=>e0<<x0>>>x0,q=X(q)}Tx(c,{name:C,fromWireType:X,toWireType:(e0,E0)=>{if(typeof E0!="number"&&typeof E0!="boolean")throw new TypeError(`Cannot convert "${uA(E0)}" to ${C}`);return qA(C,E0,T,q),E0},readValueFromPointer:ce(C,g,T!==0),destructorFunction:null})},Lx=(c,C,g)=>{var T=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],q=T[C];function Y(X){var x0=g0[X>>2],e0=g0[X+4>>2];return new q(Wx.buffer,e0,x0)}g=Bx(g),Tx(c,{name:g,fromWireType:Y,readValueFromPointer:Y},{ignoreDuplicateRegistrations:!0})},Rx=(c,C,g,T)=>{if(k(typeof c=="string",`stringToUTF8Array expects a string (got ${typeof c})`),!(T>0))return 0;for(var q=g,Y=g+T-1,X=0;X<c.length;++X){var x0=c.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&&Gx(`Invalid Unicode code point ${Ex(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},re=(c,C,g)=>(k(typeof g=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),Rx(c,bx,C,g)),Ux=c=>{for(var C=0,g=0;g<c.length;++g){var T=c.charCodeAt(g);T<=127?C++:T<=2047?C+=2:T>=55296&&T<=57343?(C+=4,++g):C+=3}return C},pA=globalThis.TextDecoder&&new TextDecoder,Fx=(c,C,g,T)=>{var q=C+g;if(T)return q;for(;c[C]&&!(C>=q);)++C;return C},Pt=(c,C=0,g,T)=>{var q=Fx(c,C,g,T);if(q-C>16&&c.buffer&&pA)return pA.decode(c.subarray(C,q));for(var Y="";C<q;){var X=c[C++];if(!(X&128)){Y+=String.fromCharCode(X);continue}var x0=c[C++]&63;if((X&224)==192){Y+=String.fromCharCode((X&31)<<6|x0);continue}var e0=c[C++]&63;if((X&240)==224?X=(X&15)<<12|x0<<6|e0:((X&248)!=240&&Gx(`Invalid UTF-8 leading byte ${Ex(X)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),X=(X&7)<<18|x0<<12|e0<<6|c[C++]&63),X<65536)Y+=String.fromCharCode(X);else{var E0=X-65536;Y+=String.fromCharCode(55296|E0>>10,56320|E0&1023)}}return Y},On=(c,C,g)=>(k(typeof c=="number",`UTF8ToString expects a number (got ${typeof c})`),c?Pt(bx,c,C,g):""),Gn=(c,C)=>{C=Bx(C);var g=!0;Tx(c,{name:C,fromWireType(T){var q=g0[T>>2],Y=T+4,X;if(g)X=On(Y,q,!0);else{X="";for(var x0=0;x0<q;++x0)X+=String.fromCharCode(bx[Y+x0])}return te(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=Ux(q):Y=q.length;var x0=Wn(4+Y+1),e0=x0+4;if(g0[x0>>2]=Y,X)if(g)re(q,e0,Y+1);else for(var E0=0;E0<Y;++E0){var D0=q.charCodeAt(E0);D0>255&&(te(x0),b0("String has UTF-16 code units that do not fit in 8 bits")),bx[e0+E0]=D0}else bx.set(q,e0);return T!==null&&T.push(te,x0),x0},readValueFromPointer:n0,destructorFunction(T){te(T)}})},qt=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Un=(c,C,g)=>{k(c%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var T=c>>1,q=Fx(ix,T,C/2,g);if(q-T>16&&qt)return qt.decode(ix.subarray(T,q));for(var Y="",X=T;X<q;++X){var x0=ix[X];Y+=String.fromCharCode(x0)}return Y},Hn=(c,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<c.length*2?g/2:c.length,Y=0;Y<q;++Y){var X=c.charCodeAt(Y);wA[C>>1]=X,C+=2}return wA[C>>1]=0,C-T},Nt=c=>c.length*2,At=(c,C,g)=>{k(c%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var T="",q=c>>2,Y=0;!(Y>=C/4);Y++){var X=g0[q+Y];if(!X&&!g)break;T+=String.fromCodePoint(X)}return T},Me=(c,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<c.length;++Y){var X=c.codePointAt(Y);if(X>65535&&Y++,SA[C>>2]=X,C+=4,C+4>q)break}return SA[C>>2]=0,C-T},i=c=>{for(var C=0,g=0;g<c.length;++g){var T=c.codePointAt(g);T>65535&&g++,C+=4}return C},l=(c,C,g)=>{g=Bx(g);var T,q,Y;C===2?(T=Un,q=Hn,Y=Nt):(k(C===4,"only 2-byte and 4-byte strings are currently supported"),T=At,q=Me,Y=i),Tx(c,{name:g,fromWireType:X=>{var x0=g0[X>>2],e0=T(X+4,x0*C,!0);return te(X),e0},toWireType:(X,x0)=>{typeof x0!="string"&&b0(`Cannot pass non-string to C++ string type ${g}`);var e0=Y(x0),E0=Wn(4+e0+C);return g0[E0>>2]=e0/C,q(x0,E0+4,e0+C),X!==null&&X.push(te,E0),E0},readValueFromPointer:n0,destructorFunction(X){te(X)}})},B=(c,C,g,T,q,Y)=>{ex[c]={name:Bx(C),rawConstructor:Px(g,T),rawDestructor:Px(q,Y),fields:[]}},p=(c,C,g,T,q,Y,X,x0,e0,E0)=>{ex[c].fields.push({fieldName:Bx(C),getterReturnType:g,getter:Px(T,q),getterContext:Y,setterArgumentType:X,setter:Px(x0,e0),setterContext:E0})},j=(c,C)=>{C=Bx(C),Tx(c,{isVoid:!0,name:C,fromWireType:()=>{},toWireType:(g,T)=>{}})},w=[],N=c=>{var C=w.length;return w.push(c),C},K=(c,C)=>{var g=Xx[c];return g===void 0&&b0(`${C} has unknown type ${IA(c)}`),g},F0=(c,C)=>{for(var g=new Array(c),T=0;T<c;++T)g[T]=K(g0[C+T*4>>2],`parameter ${T}`);return g},_0=(c,C,g)=>{var T=[],q=c(T,g);return T.length&&(g0[C>>2]=u0.toHandle(T)),q},Y0={},L0=c=>{var C=Y0[c];return C===void 0?Bx(c):C},N0=(c,C,g)=>{var T=8,[q,...Y]=F0(c,C),X=q.toWireType.bind(q),x0=Y.map(Q0=>Q0.readValueFromPointer.bind(Q0));c--;var e0={toValue:u0.toValue},E0=x0.map((Q0,Nx)=>{var hx=`argFromPtr${Nx}`;return e0[hx]=Q0,`${hx}(args${Nx?"+"+Nx*T:""})`}),D0;switch(g){case 0:D0="toValue(handle)";break;case 2:D0="new (toValue(handle))";break;case 3:D0="";break;case 1:e0.getStringOrSymbol=L0,D0="toValue(handle)[getStringOrSymbol(methodName)]";break}D0+=`(${E0})`,q.isVoid||(e0.toReturnWire=X,e0.emval_returnValue=_0,D0=`return emval_returnValue(toReturnWire, destructorsRef, ${D0})`),D0=`return function (handle, methodName, destructorsRef, args) {
|
|
2191
2191
|
${D0}
|
|
2192
|
-
}`;var X0=new Function(Object.keys(e0),D0)(...Object.values(e0)),V0=`methodCaller<(${Y.map(Q0=>Q0.name)}) => ${P.name}>`;return N(qe(V0,X0))},h0=c=>(c=L0(c),u0.toHandle(n[c])),lx=(c,C)=>(c=u0.toValue(c),C=u0.toValue(C),u0.toHandle(c[C])),kx=c=>{c>9&&(W[c+1]+=1)},Ux=(c,C,g,T,P)=>w[c](C,g,T,P),Wx=c=>u0.toHandle(L0(c)),Xx=c=>{var C=u0.toValue(c);$A(C),o0(c)},Ie=()=>2147483648,sA=(c,C)=>(k(C,"alignment argument is required"),Math.ceil(c/C)*C),ue=c=>{var C=Nt.buffer.byteLength,g=(c-C+65535)/65536|0;try{return Nt.grow(g),vx(),1}catch(T){O(`growMemory: Attempted to grow heap from ${C} bytes to ${c} bytes, but got error: ${T}`)}},jx=c=>{var C=bx.length;c>>>=0,k(c>C);var g=Ie();if(c>g)return O(`Cannot enlarge memory, requested ${c} bytes, but the limit is ${g} bytes!`),!1;for(var T=1;T<=4;T*=2){var P=C*(1+.2/T);P=Math.min(P,c+100663296);var Y=Math.min(g,sA(Math.max(c,P),65536)),X=ue(Y);if(X)return!0}return O(`Failed to grow the heap from ${C} bytes to ${Y} bytes, not enough memory!`),!1},nf=c=>{ax("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},sf=9007199254740992,af=-9007199254740992,of=c=>c<af||c>sf?NaN:Number(c);function Ff(c,C,g,T){return C=of(C),70}var Hn=[null,[],[]],Jn=(c,C)=>{var g=Hn[c];k(g),C===0||C===10?((c===1?R:O)(Tt(g)),g.length=0):g.push(C)},X6=()=>{Aa(0),Hn[1].length&&Jn(1,10),Hn[2].length&&Jn(2,10)},vf=(c,C,g,T)=>{for(var P=0,Y=0;Y<g;Y++){var X=g0[C>>2],x0=g0[C+4>>2];C+=8;for(var e0=0;e0<x0;e0++)Jn(c,bx[X+e0]);P+=x0}return g0[T>>2]=P,0},ff=()=>{if(E){var c=require("crypto");return C=>c.randomFillSync(C)}return C=>(crypto.getRandomValues(C),0)},Yi=c=>(Yi=ff())(c),lf=(c,C)=>Yi(bx.subarray(c,c+C)),cf=(c,C)=>{if(Le)for(var g=c;g<c+C;g++){var T=Pe(g);T&&Le.set(T,g)}},Le,Ef=c=>(Le||(Le=new WeakMap,cf(0,Re.length)),Le.get(c)||0),Kn=[],Bf=()=>{if(Kn.length)return Kn.pop();try{return Re.grow(1)}catch(c){if(!(c instanceof RangeError))throw c;ax("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},zn=(c,C)=>{Re.set(c,C),ZA[c]=Re.get(c)},Qi=c=>{let C=c.length;return k(C<16384),[C%128|128,C>>7,...c]},Cf={i:127,p:127,j:126,f:125,d:124,e:111},Zi=c=>Qi(Array.from(c,C=>{var g=Cf[C];return k(g,`invalid signature char: ${C}`),g})),df=(c,C)=>{var g=Uint8Array.of(0,97,115,109,1,0,0,0,1,...Qi([1,96,...Zi(C.slice(1)),...Zi(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),P=new WebAssembly.Instance(T,{e:{f:c}}),Y=P.exports.f;return Y},uf=(c,C)=>{k(typeof c<"u");var g=Ef(c);if(g)return g;var T=Bf();try{zn(T,c)}catch(Y){if(!(Y instanceof TypeError))throw Y;k(typeof C<"u","Missing signature argument to addFunction: "+c);var P=df(c,C);zn(T,P)}return Le.set(c,T),T},Df=c=>{Le.delete(Pe(c)),zn(c,null),Kn.push(c)};Vr(),fr(),k(W.length===10);{if(n.noExitRuntime&&(_e=n.noExitRuntime),n.print&&(R=n.print),n.printErr&&(O=n.printErr),n.wasmBinary&&(t0=n.wasmBinary),n.FS_createDataFile=AA.createDataFile,n.FS_createPreloadedFile=AA.createPreloadedFile,mf(),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=uf,n.removeFunction=Df;var pf=["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"];pf.forEach(v0);var bf=["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"];bf.forEach(l0);function mf(){s0("fetchSettings"),s0("logReadFiles"),s0("loadSplitModule"),s0("onMalloc"),s0("onRealloc"),s0("onFree"),s0("onSbrkGrow")}var xa=Z("___getTypeName"),Vn=Z("_malloc"),re=Z("_free"),jf=n._MdnCom_ESCHandler=Z("_MdnCom_ESCHandler"),hf=n._MdnCom_Free=Z("_MdnCom_Free"),gf=n._MdnCom_RawRx=Z("_MdnCom_RawRx"),yf=n._MdnCom_CryptoSelfTest=Z("_MdnCom_CryptoSelfTest"),kf=n._MdnCom_SetCompanionKeypair=Z("_MdnCom_SetCompanionKeypair"),_f=n._MdnCom_InitiateEcsHandshake=Z("_MdnCom_InitiateEcsHandshake"),wf=n._MdnCom_SetSecDebug=Z("_MdnCom_SetSecDebug"),Sf=n._MdnCom_GetEcsState=Z("_MdnCom_GetEcsState"),$f=n._MdnCom_ResetEcs=Z("_MdnCom_ResetEcs"),Tf=n._MdnCom_RegisterEcsHandshakeCallback=Z("_MdnCom_RegisterEcsHandshakeCallback"),qf=n._MdnCom_Init=Z("_MdnCom_Init"),Pf=n._SendUtoQuery=Z("_SendUtoQuery"),Nf=n._SendUtoCmdExt=Z("_SendUtoCmdExt"),Aa=Z("_fflush"),Wn=Z("_emscripten_stack_get_end"),Mf=Z("_emscripten_stack_get_base"),If=Z("_strerror"),ea=Z("_emscripten_stack_init"),Lf=Z("_emscripten_stack_get_free"),Rf=Z("__emscripten_stack_restore"),Of=Z("__emscripten_stack_alloc"),Gf=Z("_emscripten_stack_get_current"),Uf=Z("memory"),Hf=Z("__indirect_function_table"),Nt=Z("wasmMemory"),Re=Z("wasmTable");function Jf(c){k(typeof c.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof c.malloc<"u","missing Wasm export: malloc"),k(typeof c.free<"u","missing Wasm export: free"),k(typeof c.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof c.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof c.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof c.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof c.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof c.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof c.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof c.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof c.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof c.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof c.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof c.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof c.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof c.fflush<"u","missing Wasm export: fflush"),k(typeof c.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof c.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof c.strerror<"u","missing Wasm export: strerror"),k(typeof c.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof c.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof c._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof c._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof c.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof c.memory<"u","missing Wasm export: memory"),k(typeof c.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),xa=J0("__getTypeName",1),Vn=J0("malloc",1),re=J0("free",1),jf=n._MdnCom_ESCHandler=J0("MdnCom_ESCHandler",1),hf=n._MdnCom_Free=J0("MdnCom_Free",1),gf=n._MdnCom_RawRx=J0("MdnCom_RawRx",1),yf=n._MdnCom_CryptoSelfTest=J0("MdnCom_CryptoSelfTest",0),kf=n._MdnCom_SetCompanionKeypair=J0("MdnCom_SetCompanionKeypair",2),_f=n._MdnCom_InitiateEcsHandshake=J0("MdnCom_InitiateEcsHandshake",0),wf=n._MdnCom_SetSecDebug=J0("MdnCom_SetSecDebug",1),Sf=n._MdnCom_GetEcsState=J0("MdnCom_GetEcsState",0),$f=n._MdnCom_ResetEcs=J0("MdnCom_ResetEcs",0),Tf=n._MdnCom_RegisterEcsHandshakeCallback=J0("MdnCom_RegisterEcsHandshakeCallback",1),qf=n._MdnCom_Init=J0("MdnCom_Init",2),Pf=n._SendUtoQuery=J0("SendUtoQuery",2),Nf=n._SendUtoCmdExt=J0("SendUtoCmdExt",4),Aa=J0("fflush",1),Wn=c.emscripten_stack_get_end,Mf=c.emscripten_stack_get_base,If=J0("strerror",1),ea=c.emscripten_stack_init,Lf=c.emscripten_stack_get_free,Rf=c._emscripten_stack_restore,Of=c._emscripten_stack_alloc,Gf=c.emscripten_stack_get_current,Uf=Nt=c.memory,Hf=Re=c.__indirect_function_table}var ra={__cxa_throw:WA,_abort_js:Or,_embind_finalize_value_object:Se,_embind_register_bigint:Gr,_embind_register_bool:o,_embind_register_class:Ne,_embind_register_class_constructor:b,_embind_register_class_property:$,_embind_register_emval:N0,_embind_register_float:m0,_embind_register_function:mx,_embind_register_integer:qx,_embind_register_memory_view:Ix,_embind_register_std_string:On,_embind_register_std_wstring:f,_embind_register_value_object:B,_embind_register_value_object_field:D,_embind_register_void:j,_emval_create_invoker:P0,_emval_decref:o0,_emval_get_module_property:h0,_emval_get_property:lx,_emval_incref:kx,_emval_invoke:Ux,_emval_new_cstring:Wx,_emval_run_destructors:Xx,emscripten_resize_heap:jx,fd_close:nf,fd_seek:Ff,fd_write:vf,random_get:lf},ta;function Kf(){ea(),Q()}function zf(){Kf(),Kx();function c(){k(!ta),ta=!0,n.calledRun=!0,!I&&(yA(),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"]'),kA())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),c()},1)):c(),K()}var cr;cr=await Lr(),zf(),I0?s=n:s=new Promise((c,C)=>{d0=c,S0=C});for(let c of Object.keys(n))c in t||Object.defineProperty(t,c,{configurable:!0,get(){ax(`Access to module property ('${c}') 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)}}),pF={};sB(pF,{API_STAMP_UNBOUNDED:()=>x8,AT_COMMANDS:()=>yx,AT_COMMAND_TIMEOUT_MS:()=>Hx,ApiBadRequestError:()=>w0,ApiForbiddenError:()=>hn,ApiMethodNotAllowedError:()=>Di,ApiNotFoundError:()=>cA,AtCommandHandler:()=>Td,AtDeviceError:()=>ui,AtHandlerDisposedError:()=>Rx,BACKFILL_PENDING_HEADER:()=>X8,BACKFILL_PENDING_VALUE:()=>Y8,BLE_CONFIGURATION:()=>Au,BLE_SCAN_TIMEOUT_MS:()=>ru,COMPANION_AUTH_ERROR_I18N_KEYS:()=>Nd,COMPANION_CERT_PATH:()=>Is,COMPANION_PRIVATE_KEY_SIZE:()=>SF,COMPANION_PUBLIC_KEY_SIZE:()=>wF,CertApiError:()=>ut,CompanionAuthErrorKind:()=>_8,CompanionAuthManager:()=>Pd,CompanionCertError:()=>y8,DDE_FIELD_UNUSED_INDEX:()=>YF,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>qF,DEFAULT_RECONNECT_OPTIONS:()=>I8,DLO_FILENAME:()=>_r,DdeMapper:()=>Ed,DdeUnknownAliasError:()=>ai,DdeUnknownContainerError:()=>ge,DdeUnknownFieldError:()=>Ci,DdeWriteForbiddenError:()=>bt,DebugLogLevel:()=>VF,DebugMaster:()=>eC,DebugSync:()=>m8,DeviceManager:()=>Zd,DeviceState:()=>M8,FW_FILENAME:()=>ri,LIC_API_BASE_URL:()=>u8,LOCAL_API_LIFECYCLE_FLAGS:()=>Xe,LOCAL_API_SITE_MASK:()=>Ys,LOCAL_API_SITE_MASTER_KEYS:()=>kt,LegacySync:()=>p8,LocalDataManager:()=>T8,MANUFACTURER_CODE:()=>eu,MS_1999_12_31:()=>Ls,MemoryStorage:()=>tC,Mutex:()=>ni,OfflineSyncManager:()=>jd,RAW_TERMINAL_PATTERN:()=>h8,RESPONSE_PATTERNS:()=>U0,Rm2mStateManager:()=>Xd,SYNC_LOGIC_MASK:()=>UF,SyncManager:()=>Sd,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>j8,USB_CONFIGURATION:()=>xu,UplinkMode:()=>JF,UtoCommand:()=>NF,UtoESC:()=>HF,UtoFileFlag:()=>OF,UtoFileFlagInt:()=>GF,UtoFileType:()=>LF,UtoFlag:()=>RF,UtoMaster:()=>zF,UtoResult:()=>MF,UtoSplitTag:()=>IF,UtoTag:()=>ti,WebSocketBridge:()=>di,applyBlueprintNames:()=>C8,applyDecpl:()=>PC,assertValidRequestStamps:()=>Tr,base64ToBytes:()=>Ms,base64UrlToBytes:()=>PB,buildBlueprintNameMap:()=>Vs,bytesToBase64:()=>fn,bytesToBase64Url:()=>xi,checkDeviceCapabilities:()=>Rd,computeDisplayValue:()=>$8,computeDisplayValues:()=>Xs,consoleLogger:()=>KA,convertToString:()=>Rs,crc16Modbus:()=>OB,crc32Ethernet:()=>ei,createDebugBufferState:()=>g8,createLocalApiHandler:()=>lD,createLocalApiSession:()=>bi,createSiteInfoFromDde:()=>pD,dbStampToStamp40:()=>JA,decodeContainer:()=>Js,decodeFloatm16:()=>o8,decodeLifecycleFlags:()=>G8,decodeRm2mStateResponse:()=>N8,decodeUplinkState:()=>q8,deriveDeviceLifecycleMirror:()=>U8,encodeContainer:()=>zs,encodeFloatm16:()=>F8,encodeLifecycleFlags:()=>ji,encodeNulPaddedJson:()=>R8,encodeSerialNumber:()=>GB,extractBits:()=>Bn,formatApiStamp:()=>wr,generateCompanionKeypair:()=>Ns,getDeviceAssignment:()=>D8,isCertValid:()=>Ai,isDevicePushableTag:()=>QF,isUnusedField:()=>ve,isValidStamp:()=>pi,mapLocalApiError:()=>Fv,nullLogger:()=>ln,parseApiStamp:()=>$r,parseBlueprint:()=>Cd,parseDde:()=>SC,parseMetadataResponse:()=>w8,parseNulPaddedJson:()=>yt,parseRm2mStateParams:()=>P8,parseSerialNumberFromDataView:()=>UB,parseValuesResponse:()=>S8,requestCompanionCert:()=>PF,resolveAuthErrorKind:()=>Md,resolveBlueprintNameMap:()=>gt,resolveContainerTag:()=>En,resolveTagForContainer:()=>Ct,resolveTagInModel:()=>iC,routeLocalApiRequest:()=>av,spreadBits:()=>e8,stamp40ToDbHex:()=>lA,syncLogic:()=>cn,systemTimeSource:()=>ht,toHex:()=>he,toUint8Array:()=>Os,utoStack:()=>H0});vv.exports=aB(pF);var bF=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:on,n:sn,Gx:Wo,Gy:Xo,a:us,d:Ds,h:FB}=bF,dt=32,vB=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},Sx=(x="")=>{let A=new Error(x);throw vB(A,Sx),A},fB=x=>typeof x=="bigint",lB=x=>typeof x=="string",cB=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,Ye=(x,A,e="")=>{let r=cB(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},bn=x=>new Uint8Array(x),Qs=x=>Uint8Array.from(x),mF=(x,A)=>x.toString(16).padStart(A,"0"),jF=x=>Array.from(Ye(x)).map(A=>mF(A,2)).join(""),Fe={_0:48,_9:57,A:65,F:70,a:97,f:102},Yo=x=>{if(x>=Fe._0&&x<=Fe._9)return x-Fe._0;if(x>=Fe.A&&x<=Fe.F)return x-(Fe.A-10);if(x>=Fe.a&&x<=Fe.f)return x-(Fe.a-10)},hF=x=>{let A="hex invalid";if(!lB(x))return Sx(A);let e=x.length,r=e/2;if(e%2)return Sx(A);let t=bn(r);for(let s=0,n=0;s<r;s++,n+=2){let F=Yo(x.charCodeAt(n)),v=Yo(x.charCodeAt(n+1));if(F===void 0||v===void 0)return Sx(A);t[s]=F*16+v}return t},gF=()=>globalThis?.crypto,EB=()=>gF()?.subtle??Sx("crypto.subtle must be defined, consider polyfill"),yF=(...x)=>{let A=0;for(let t of x)A+=Ye(t).length;let e=bn(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},BB=(x=dt)=>gF().getRandomValues(bn(x)),Fn=BigInt,Je=(x,A,e,r="bad number: out of range")=>{if(!fB(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},sx=(x,A=on)=>{let e=x%A;return e>=0n?e:A+e},Qo=(1n<<255n)-1n,C0=x=>{x<0n&&Sx("negative coordinate");let A=(x>>255n)*19n+(x&Qo);return A=(A>>255n)*19n+(A&Qo),A%on},CB=x=>sx(x,sn),dB=(x,A)=>{(x===0n||A<=0n)&&Sx("no inverse n="+x+" mod="+A);let e=sx(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?sx(t,A):Sx("no inverse")},uB=x=>{let A=_B[x];return typeof A!="function"&&Sx("hashes."+x+" not set"),A},DB=x=>Ye(x,64,"digest"),ps=x=>x instanceof jt?x:Sx("Point expected"),qs=2n**256n,Zs=class Ke{constructor(A,e,r,t){A0(this,"X"),A0(this,"Y"),A0(this,"Z"),A0(this,"T");let s=qs;this.X=Je(A,0n,s),this.Y=Je(e,0n,s),this.Z=Je(r,1n,s),this.T=Je(t,0n,s),Object.freeze(this)}static CURVE(){return bF}static fromAffine(A){return new Ke(A.x,A.y,1n,C0(A.x*A.y))}static fromBytes(A,e=!1){let r=Ds,t=Qs(Ye(A,dt)),s=A[31];t[31]=s&-129;let n=kF(t);Je(n,0n,e?qs:on);let v=C0(n*n),E=sx(v-1n),u=C0(r*v+1n),{isValid:p,value:m}=mB(E,u);p||Sx("bad point: y not sqrt");let _=(m&1n)===1n,h=(s&128)!==0;return!e&&m===0n&&h&&Sx("bad point: x==0, isLastByteOdd"),h!==_&&(m=sx(-m)),new Ke(m,n,1n,C0(m*n))}static fromHex(A,e){return Ke.fromBytes(hF(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=us,e=Ds,r=this;if(r.is0())return Sx("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),_=C0(u*(m+E)),h=sx(p+C0(e*C0(v*E)));if(_!==h)return Sx("bad point: equation left != right (1)");let S=C0(t*s),q=C0(n*F);return S!==q?Sx("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:s,Y:n,Z:F}=ps(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(Ve)}negate(){return new Ke(sx(-this.X),this.Y,this.Z,sx(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=us,s=C0(A*A),n=C0(e*e),F=C0(2n*r*r),v=C0(t*s),E=sx(A+e),u=sx(C0(E*E)-s-n),p=sx(v+n),m=sx(p-F),_=sx(v-n),h=C0(u*m),S=C0(p*_),q=C0(u*_),M=C0(m*p);return new Ke(h,S,M,q)}add(A){let{X:e,Y:r,Z:t,T:s}=this,{X:n,Y:F,Z:v,T:E}=ps(A),u=us,p=Ds,m=C0(e*n),_=C0(r*F),h=C0(C0(s*p)*E),S=C0(t*v),q=sx(C0(sx(e+r)*sx(n+F))-m-_),M=sx(S-h),R=sx(S+h),O=sx(_-C0(u*m)),t0=C0(q*M),I=C0(R*O),k=C0(q*O),L=C0(M*R);return new Ke(t0,I,L,k)}subtract(A){return this.add(ps(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(Je(A,1n,sn),!e&&this.is0()))return Ve;if(A===1n)return this;if(this.equals(Sr))return qB(A).p;let r=Ve,t=Sr;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(Ve))return{x:0n,y:1n};let t=dB(r,on);C0(r*t)!==1n&&Sx("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=pB(e);return r[31]|=A&1n?128:0,r}toHex(){return jF(this.toBytes())}clearCofactor(){return this.multiply(Fn(FB),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(sn/2n,!1).double();return sn%2n&&(A=A.add(this)),A.is0()}};A0(Zs,"BASE");A0(Zs,"ZERO");var jt=Zs,Sr=new jt(Wo,Xo,1n,sx(Wo*Xo)),Ve=new jt(0n,1n,1n,0n);jt.BASE=Sr;jt.ZERO=Ve;var pB=x=>hF(mF(Je(x,0n,qs),64)).reverse(),kF=x=>Fn("0x"+jF(Qs(Ye(x)).reverse())),HA=(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(HA(e,2n)*e),t=C0(HA(r,1n)*x),s=C0(HA(t,5n)*t),n=C0(HA(s,10n)*s),F=C0(HA(n,20n)*n),v=C0(HA(F,40n)*F),E=C0(HA(v,80n)*v),u=C0(HA(E,80n)*v),p=C0(HA(u,10n)*s);return{pow_p_5_8:C0(HA(p,2n)*x),b2:e}},Zo=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,mB=(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*Zo),E=n===x,u=n===sx(-x),p=n===sx(-x*Zo);return E&&(s=F),(u||p)&&(s=v),(sx(s)&1n)===1n&&(s=sx(-s)),{isValid:E||u,value:s}},jB=x=>CB(kF(x)),hB=(...x)=>Promise.resolve(uB("sha512Async")(yF(...x))).then(DB),gB=x=>{let A=Qs(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=jB(e),s=Sr.multiply(t),n=s.toBytes();return{head:e,prefix:r,scalar:t,point:s,pointBytes:n}},yB=x=>hB(Ye(x,dt)).then(gB),kB=x=>yB(x).then(A=>A.pointBytes),_B={sha512Async:async x=>{let A=EB(),e=yF(x);return bn(await A.digest("SHA-512",e.buffer))},sha512:void 0},wB=x=>(x=x===void 0?BB(dt):x,Ye(x,dt)),SB=async x=>{let A=wB(x),e=await kB(A);return{secretKey:A,publicKey:e}},vn=8,$B=256,_F=Math.ceil($B/vn)+1,Ps=2**(vn-1),TB=()=>{let x=[],A=Sr,e=A;for(let r=0;r<_F;r++){e=A,x.push(e);for(let t=1;t<Ps;t++)e=e.add(A),x.push(e);A=e.double()}return x},xF=void 0,AF=(x,A)=>{let e=A.negate();return x?e:A},qB=x=>{let A=xF||(xF=TB()),e=Ve,r=Sr,t=2**vn,s=t,n=Fn(t-1),F=Fn(vn);for(let v=0;v<_F;v++){let E=Number(x&n);x>>=F,E>Ps&&(E-=s,x+=1n);let u=v*Ps,p=u,m=u+Math.abs(E)-1,_=v%2!==0,h=E<0;E===0?r=r.add(AF(_,A[p])):e=e.add(AF(h,A[m]))}return x!==0n&&Sx("invalid wnaf"),{p:e,f:r}},wF=32,SF=64;async function Ns(){let{secretKey:x,publicKey:A}=await SB(),e=new Uint8Array(SF);return e.set(x,0),e.set(A,wF),{publicKey:A,privateKey:e}}function fn(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function Ms(x,A="base64 value"){return TF($F(x,A))}function $F(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function xi(x){return fn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function PB(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return TF($F(r,A))}function TF(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var ut=class extends Error{constructor(x,A,e){super(e),A0(this,"httpStatus",x),A0(this,"code",A),this.name="CertApiError"}},Is="/api/1/companion/cert",qF=10080*60*1e3,eF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function PF(x,A){let e=x.apiHost.replace(/\/+$/,""),r=eF?Is:e+Is,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};eF&&e&&(t["x-target-host"]=e);let s=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:xi(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 ut(s.status,F,v)}let n=await s.json();if(!n.certificate||!n.notAfter)throw new ut(s.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function Ai(x,A=qF){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var NB=require("events"),MB=iB(oB(),1),An="[device-master]",KA={debug:(x,...A)=>console.debug(An,x,...A),info:(x,...A)=>console.info(An,x,...A),warn:(x,...A)=>console.warn(An,x,...A),error:(x,...A)=>console.error(An,x,...A)},ln={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},IB=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 ei(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^IB[(e^x[r])&255];return(e^-1)>>>0}var Ls=Date.UTC(1999,11,31,0,0,0);function Rs(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 he(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function Os(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 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]),RB=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 OB(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let s=(r^x[t])&255;r=(e^LB[s])&255,e=RB[s]}return 256*e|r}function GB(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 UB(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 HB=[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],JB=new Map(HB.map((x,A)=>[x,128+A]));function KB(x){return x<=127||x>=160&&x<=255?x:JB.get(x)??63}var _r="uto_script.dat",ri="uto_fw.dat",NF=(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))(NF||{}),MF=(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))(MF||{}),ti=(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))(ti||{}),IF=(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))(IF||{}),LF=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(LF||{}),RF=(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))(RF||{}),OF=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(OF||{}),GF=(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))(GF||{}),UF=97;function cn(x){return x&UF}var HF=(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))(HF||{}),JF=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(JF||{}),rF={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},zB=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"+he(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"+he(x,2)}tagToString(x){x|=0;let A=Object.entries(ti).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+he(x,4)}containerIdToTag(x,A){let e=rF[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(rF).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)+Ls}msToStamp40(x){let A=(x-Ls)/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=Os(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=Os(x);t.fill(0,A,A+e);for(let s=0;s<e&&s<r.length;s++)t[A+s]=KB(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=(he(s,8)+he(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:he(e,4),firmwareVersion:`${Rs(t>>8,2)}v${Rs(t&255,3,"0")}`,flags:he(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)}}}},H0=new zB,ht={nowMs:()=>Date.now()},ni=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()}}},tF=new WeakMap;function KF(x,A){let r=(tF.get(x)??Promise.resolve()).then(()=>VB(x,A));return tF.set(x,r.catch(()=>{})),r}async function VB(x,A){x.interface&&x.interface==="ble"?await WB(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function WB(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 nF=15e3,XB=500,YB=3,QB=1024;function sF(x){return x?.utos.find(e=>e.wTag===3)?.size||QB}var zF=class an extends NB.EventEmitter{constructor(A,e,r=ht){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",sF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new ni("UTO-Port"),this.transport=A,this.logger=e??KA,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,MB.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=KF(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:H0.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}=an.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??XB,s=r?.maxRetries??YB;return new Promise((n,F)=>{let v=0,E=!1,u=()=>{},p,m={resolve:h=>{E=!0,clearTimeout(p),this.removeListener("utoFrame",u),n(h)},reject:h=>{E=!0,clearTimeout(p),this.removeListener("utoFrame",u),F(h)}},_=async()=>{u=h=>A(h,m.resolve,m.reject),this.once("utoFrame",u);try{await e()}catch(h){if(E)return;this.removeListener("utoFrame",u),F(h);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})`),_()},t))};_()})}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=nF,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=q=>{if(_.arm(),q.bCmd===0){_.clear(),this.settleHistoricTransfer(q,E,n,p,F,v);return}if(q.wTagFull===A&&q.data&&(E.push({stamp40:q.stamp,data:this.copyDataView(q.data)}),r?.(++u),n&&s>0&&E.length>=s)){let M=E.splice(0);p=p.then(()=>n(M))}this.once("utoFrame",m)},_=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),_.arm();let h=Math.trunc(e/256),S=e&255;this.sendUto(A,{u32SysTime:h,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=nF){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(an.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);H0.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}=an.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?H0.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=sF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?H0.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,H0.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=H0.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?H0.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??_r,stamp:r===0?0:H0.msToStamp40(r??this.timeSource.nowMs()),size:s.length,_flags:11,crc32:ei(s)},F=H0.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 h=(u+p)/s.byteLength*100;this.emit("installing",h.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 H0.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"),VF=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(VF||{}),xC=5e3,AC=5e3,eC=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??KA,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+
|
|
2192
|
+
}`;var X0=new Function(Object.keys(e0),D0)(...Object.values(e0)),V0=`methodCaller<(${Y.map(Q0=>Q0.name)}) => ${q.name}>`;return N(qe(V0,X0))},h0=c=>(c=L0(c),u0.toHandle(n[c])),fx=(c,C)=>(c=u0.toValue(c),C=u0.toValue(C),u0.toHandle(c[C])),_x=c=>{c>9&&(V[c+1]+=1)},Hx=(c,C,g,T,q)=>w[c](C,g,T,q),Yx=c=>u0.toHandle(L0(c)),Qx=c=>{var C=u0.toValue(c);TA(C),o0(c)},Le=()=>2147483648,iA=(c,C)=>(k(C,"alignment argument is required"),Math.ceil(c/C)*C),De=c=>{var C=It.buffer.byteLength,g=(c-C+65535)/65536|0;try{return It.grow(g),vx(),1}catch(T){G(`growMemory: Attempted to grow heap from ${C} bytes to ${c} bytes, but got error: ${T}`)}},jx=c=>{var C=bx.length;c>>>=0,k(c>C);var g=Le();if(c>g)return G(`Cannot enlarge memory, requested ${c} 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,c+100663296);var Y=Math.min(g,iA(Math.max(c,q),65536)),X=De(Y);if(X)return!0}return G(`Failed to grow the heap from ${C} bytes to ${Y} bytes, not enough memory!`),!1},il=c=>{ax("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},al=9007199254740992,ol=-9007199254740992,Fl=c=>c<ol||c>al?NaN:Number(c);function vl(c,C,g,T){return C=Fl(C),70}var Jn=[null,[],[]],Kn=(c,C)=>{var g=Jn[c];k(g),C===0||C===10?((c===1?R:G)(Pt(g)),g.length=0):g.push(C)},Y6=()=>{ta(0),Jn[1].length&&Kn(1,10),Jn[2].length&&Kn(2,10)},ll=(c,C,g,T)=>{for(var q=0,Y=0;Y<g;Y++){var X=g0[C>>2],x0=g0[C+4>>2];C+=8;for(var e0=0;e0<x0;e0++)Kn(c,bx[X+e0]);q+=x0}return g0[T>>2]=q,0},fl=()=>{if(E){var c=require("crypto");return C=>c.randomFillSync(C)}return C=>(crypto.getRandomValues(C),0)},xa=c=>(xa=fl())(c),cl=(c,C)=>xa(bx.subarray(c,c+C)),El=(c,C)=>{if(Re)for(var g=c;g<c+C;g++){var T=Ne(g);T&&Re.set(T,g)}},Re,Bl=c=>(Re||(Re=new WeakMap,El(0,Oe.length)),Re.get(c)||0),zn=[],Cl=()=>{if(zn.length)return zn.pop();try{return Oe.grow(1)}catch(c){if(!(c instanceof RangeError))throw c;ax("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},Vn=(c,C)=>{Oe.set(c,C),xe[c]=Oe.get(c)},Aa=c=>{let C=c.length;return k(C<16384),[C%128|128,C>>7,...c]},dl={i:127,p:127,j:126,f:125,d:124,e:111},ea=c=>Aa(Array.from(c,C=>{var g=dl[C];return k(g,`invalid signature char: ${C}`),g})),ul=(c,C)=>{var g=Uint8Array.of(0,97,115,109,1,0,0,0,1,...Aa([1,96,...ea(C.slice(1)),...ea(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:c}}),Y=q.exports.f;return Y},Dl=(c,C)=>{k(typeof c<"u");var g=Bl(c);if(g)return g;var T=Cl();try{Vn(T,c)}catch(Y){if(!(Y instanceof TypeError))throw Y;k(typeof C<"u","Missing signature argument to addFunction: "+c);var q=ul(c,C);Vn(T,q)}return Re.set(c,T),T},pl=c=>{Re.delete(Ne(c)),Vn(c,null),zn.push(c)};Vr(),fr(),k(V.length===10);{if(n.noExitRuntime&&(we=n.noExitRuntime),n.print&&(R=n.print),n.printErr&&(G=n.printErr),n.wasmBinary&&(r0=n.wasmBinary),n.FS_createDataFile=eA.createDataFile,n.FS_createPreloadedFile=eA.createPreloadedFile,jl(),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()();s0("preInit")}n.addFunction=Dl,n.removeFunction=pl;var bl=["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"];bl.forEach(v0);var ml=["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"];ml.forEach(l0);function jl(){i0("fetchSettings"),i0("logReadFiles"),i0("loadSplitModule"),i0("onMalloc"),i0("onRealloc"),i0("onFree"),i0("onSbrkGrow")}var ra=Q("___getTypeName"),Wn=Q("_malloc"),te=Q("_free"),hl=n._MdnCom_ESCHandler=Q("_MdnCom_ESCHandler"),gl=n._MdnCom_Free=Q("_MdnCom_Free"),yl=n._MdnCom_RawRx=Q("_MdnCom_RawRx"),kl=n._MdnCom_CryptoSelfTest=Q("_MdnCom_CryptoSelfTest"),_l=n._MdnCom_SetCompanionKeypair=Q("_MdnCom_SetCompanionKeypair"),wl=n._MdnCom_InitiateEcsHandshake=Q("_MdnCom_InitiateEcsHandshake"),Sl=n._MdnCom_SetSecDebug=Q("_MdnCom_SetSecDebug"),$l=n._MdnCom_GetEcsState=Q("_MdnCom_GetEcsState"),Tl=n._MdnCom_ResetEcs=Q("_MdnCom_ResetEcs"),Pl=n._MdnCom_RegisterEcsHandshakeCallback=Q("_MdnCom_RegisterEcsHandshakeCallback"),ql=n._MdnCom_Init=Q("_MdnCom_Init"),Nl=n._SendUtoQuery=Q("_SendUtoQuery"),Il=n._SendUtoCmdExt=Q("_SendUtoCmdExt"),ta=Q("_fflush"),Xn=Q("_emscripten_stack_get_end"),Ml=Q("_emscripten_stack_get_base"),Ll=Q("_strerror"),na=Q("_emscripten_stack_init"),Rl=Q("_emscripten_stack_get_free"),Ol=Q("__emscripten_stack_restore"),Gl=Q("__emscripten_stack_alloc"),Ul=Q("_emscripten_stack_get_current"),Hl=Q("memory"),Jl=Q("__indirect_function_table"),It=Q("wasmMemory"),Oe=Q("wasmTable");function Kl(c){k(typeof c.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof c.malloc<"u","missing Wasm export: malloc"),k(typeof c.free<"u","missing Wasm export: free"),k(typeof c.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof c.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof c.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof c.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof c.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof c.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof c.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof c.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof c.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof c.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof c.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof c.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof c.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof c.fflush<"u","missing Wasm export: fflush"),k(typeof c.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof c.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof c.strerror<"u","missing Wasm export: strerror"),k(typeof c.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof c.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof c._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof c._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof c.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof c.memory<"u","missing Wasm export: memory"),k(typeof c.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),ra=J0("__getTypeName",1),Wn=J0("malloc",1),te=J0("free",1),hl=n._MdnCom_ESCHandler=J0("MdnCom_ESCHandler",1),gl=n._MdnCom_Free=J0("MdnCom_Free",1),yl=n._MdnCom_RawRx=J0("MdnCom_RawRx",1),kl=n._MdnCom_CryptoSelfTest=J0("MdnCom_CryptoSelfTest",0),_l=n._MdnCom_SetCompanionKeypair=J0("MdnCom_SetCompanionKeypair",2),wl=n._MdnCom_InitiateEcsHandshake=J0("MdnCom_InitiateEcsHandshake",0),Sl=n._MdnCom_SetSecDebug=J0("MdnCom_SetSecDebug",1),$l=n._MdnCom_GetEcsState=J0("MdnCom_GetEcsState",0),Tl=n._MdnCom_ResetEcs=J0("MdnCom_ResetEcs",0),Pl=n._MdnCom_RegisterEcsHandshakeCallback=J0("MdnCom_RegisterEcsHandshakeCallback",1),ql=n._MdnCom_Init=J0("MdnCom_Init",2),Nl=n._SendUtoQuery=J0("SendUtoQuery",2),Il=n._SendUtoCmdExt=J0("SendUtoCmdExt",4),ta=J0("fflush",1),Xn=c.emscripten_stack_get_end,Ml=c.emscripten_stack_get_base,Ll=J0("strerror",1),na=c.emscripten_stack_init,Rl=c.emscripten_stack_get_free,Ol=c._emscripten_stack_restore,Gl=c._emscripten_stack_alloc,Ul=c.emscripten_stack_get_current,Hl=It=c.memory,Jl=Oe=c.__indirect_function_table}var sa={__cxa_throw:XA,_abort_js:Or,_embind_finalize_value_object:$e,_embind_register_bigint:Gr,_embind_register_bool:o,_embind_register_class:Ie,_embind_register_class_constructor:b,_embind_register_class_property:$,_embind_register_emval:I0,_embind_register_float:m0,_embind_register_function:mx,_embind_register_integer:qx,_embind_register_memory_view:Lx,_embind_register_std_string:Gn,_embind_register_std_wstring:l,_embind_register_value_object:B,_embind_register_value_object_field:p,_embind_register_void:j,_emval_create_invoker:N0,_emval_decref:o0,_emval_get_module_property:h0,_emval_get_property:fx,_emval_incref:_x,_emval_invoke:Hx,_emval_new_cstring:Yx,_emval_run_destructors:Qx,emscripten_resize_heap:jx,fd_close:il,fd_seek:vl,fd_write:ll,random_get:cl},ia;function zl(){na(),Z()}function Vl(){zl(),Vx();function c(){k(!ia),ia=!0,n.calledRun=!0,!M&&(kA(),d0?.(n),n.onRuntimeInitialized?.(),s0("onRuntimeInitialized"),k(!n._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),_A())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),c()},1)):c(),W()}var Er;Er=await Lr(),Vl(),P0?s=n:s=new Promise((c,C)=>{d0=c,S0=C});for(let c of Object.keys(n))c in t||Object.defineProperty(t,c,{configurable:!0,get(){ax(`Access to module property ('${c}') 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)}}),mF={};iB(mF,{API_STAMP_UNBOUNDED:()=>e8,AT_COMMANDS:()=>kx,AT_COMMAND_TIMEOUT_MS:()=>Kx,ApiBadRequestError:()=>w0,ApiForbiddenError:()=>gn,ApiMethodNotAllowedError:()=>mi,ApiNotFoundError:()=>EA,AtCommandHandler:()=>Pd,AtDeviceError:()=>bi,AtHandlerDisposedError:()=>Ox,BACKFILL_PENDING_HEADER:()=>Q8,BACKFILL_PENDING_VALUE:()=>Z8,BLE_CONFIGURATION:()=>eu,BLE_SCAN_TIMEOUT_MS:()=>tu,COMPANION_AUTH_ERROR_I18N_KEYS:()=>Id,COMPANION_CERT_PATH:()=>Os,COMPANION_PRIVATE_KEY_SIZE:()=>TF,COMPANION_PUBLIC_KEY_SIZE:()=>$F,CertApiError:()=>Dt,CompanionAuthErrorKind:()=>S8,CompanionAuthManager:()=>Nd,CompanionCertError:()=>_8,DDE_FIELD_UNUSED_INDEX:()=>ZF,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>NF,DEFAULT_RECONNECT_OPTIONS:()=>R8,DLO_FILENAME:()=>_r,DdeMapper:()=>Bd,DdeUnknownAliasError:()=>vi,DdeUnknownContainerError:()=>ye,DdeUnknownFieldError:()=>Di,DdeWriteForbiddenError:()=>mt,DebugLogLevel:()=>XF,DebugMaster:()=>rC,DebugSync:()=>h8,DeviceManager:()=>xu,DeviceState:()=>L8,FW_FILENAME:()=>si,LIC_API_BASE_URL:()=>p8,LOCAL_API_LIFECYCLE_FLAGS:()=>Ye,LOCAL_API_SITE_MASK:()=>xi,LOCAL_API_SITE_MASTER_KEYS:()=>_t,LegacySync:()=>m8,LocalDataManager:()=>q8,MANUFACTURER_CODE:()=>ru,MS_1999_12_31:()=>Gs,MemoryStorage:()=>nC,Mutex:()=>ai,OfflineSyncManager:()=>hd,RAW_TERMINAL_PATTERN:()=>y8,RESPONSE_PATTERNS:()=>U0,Rm2mStateManager:()=>Yd,SYNC_LOGIC_MASK:()=>JF,SyncManager:()=>$d,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>g8,USB_CONFIGURATION:()=>Au,UplinkMode:()=>zF,UtoCommand:()=>MF,UtoESC:()=>KF,UtoFileFlag:()=>UF,UtoFileFlagInt:()=>HF,UtoFileType:()=>OF,UtoFlag:()=>GF,UtoMaster:()=>WF,UtoResult:()=>LF,UtoSplitTag:()=>RF,UtoTag:()=>ii,WebSocketBridge:()=>pi,applyBlueprintNames:()=>u8,applyDecpl:()=>NC,assertValidRequestStamps:()=>Tr,base64ToBytes:()=>Rs,base64UrlToBytes:()=>NB,buildBlueprintNameMap:()=>Ys,bytesToBase64:()=>fn,bytesToBase64Url:()=>ri,checkDeviceCapabilities:()=>Od,computeDisplayValue:()=>P8,computeDisplayValues:()=>Zs,consoleLogger:()=>zA,convertToString:()=>Us,crc16Modbus:()=>GB,crc32Ethernet:()=>ni,createDebugBufferState:()=>k8,createLocalApiHandler:()=>cD,createLocalApiSession:()=>hi,createSiteInfoFromDde:()=>bD,dbStampToStamp40:()=>KA,decodeContainer:()=>Vs,decodeFloatm16:()=>v8,decodeLifecycleFlags:()=>H8,decodeRm2mStateResponse:()=>M8,decodeUplinkState:()=>N8,deriveDeviceLifecycleMirror:()=>J8,encodeContainer:()=>Xs,encodeFloatm16:()=>l8,encodeLifecycleFlags:()=>yi,encodeNulPaddedJson:()=>G8,encodeSerialNumber:()=>UB,extractBits:()=>Cn,formatApiStamp:()=>wr,generateCompanionKeypair:()=>Ls,getDeviceAssignment:()=>b8,isCertValid:()=>ti,isDevicePushableTag:()=>x8,isUnusedField:()=>le,isValidStamp:()=>ji,mapLocalApiError:()=>lv,nullLogger:()=>cn,parseApiStamp:()=>$r,parseBlueprint:()=>dd,parseDde:()=>$C,parseMetadataResponse:()=>$8,parseNulPaddedJson:()=>kt,parseRm2mStateParams:()=>I8,parseSerialNumberFromDataView:()=>HB,parseValuesResponse:()=>T8,requestCompanionCert:()=>IF,resolveAuthErrorKind:()=>Md,resolveBlueprintNameMap:()=>yt,resolveContainerTag:()=>Bn,resolveTagForContainer:()=>dt,resolveTagInModel:()=>aC,routeLocalApiRequest:()=>Fv,spreadBits:()=>t8,stamp40ToDbHex:()=>cA,syncLogic:()=>En,systemTimeSource:()=>gt,toHex:()=>ge,toUint8Array:()=>Hs,utoStack:()=>H0});fv.exports=oB(mF);var jF=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:Fn,n:an,Gx:Yo,Gy:Qo,a:bs,d:ms,h:vB}=jF,ut=32,lB=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},$x=(x="")=>{let A=new Error(x);throw lB(A,$x),A},fB=x=>typeof x=="bigint",cB=x=>typeof x=="string",EB=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,Qe=(x,A,e="")=>{let r=EB(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},mn=x=>new Uint8Array(x),Ai=x=>Uint8Array.from(x),hF=(x,A)=>x.toString(16).padStart(A,"0"),gF=x=>Array.from(Qe(x)).map(A=>hF(A,2)).join(""),ve={_0:48,_9:57,A:65,F:70,a:97,f:102},Zo=x=>{if(x>=ve._0&&x<=ve._9)return x-ve._0;if(x>=ve.A&&x<=ve.F)return x-(ve.A-10);if(x>=ve.a&&x<=ve.f)return x-(ve.a-10)},yF=x=>{let A="hex invalid";if(!cB(x))return $x(A);let e=x.length,r=e/2;if(e%2)return $x(A);let t=mn(r);for(let s=0,n=0;s<r;s++,n+=2){let F=Zo(x.charCodeAt(n)),v=Zo(x.charCodeAt(n+1));if(F===void 0||v===void 0)return $x(A);t[s]=F*16+v}return t},kF=()=>globalThis?.crypto,BB=()=>kF()?.subtle??$x("crypto.subtle must be defined, consider polyfill"),_F=(...x)=>{let A=0;for(let t of x)A+=Qe(t).length;let e=mn(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},CB=(x=ut)=>kF().getRandomValues(mn(x)),vn=BigInt,Ke=(x,A,e,r="bad number: out of range")=>{if(!fB(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},sx=(x,A=Fn)=>{let e=x%A;return e>=0n?e:A+e},xF=(1n<<255n)-1n,C0=x=>{x<0n&&$x("negative coordinate");let A=(x>>255n)*19n+(x&xF);return A=(A>>255n)*19n+(A&xF),A%Fn},dB=x=>sx(x,an),uB=(x,A)=>{(x===0n||A<=0n)&&$x("no inverse n="+x+" mod="+A);let e=sx(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,D=s-F*v;r=e,e=E,t=n,s=F,n=u,F=D}return r===1n?sx(t,A):$x("no inverse")},DB=x=>{let A=wB[x];return typeof A!="function"&&$x("hashes."+x+" not set"),A},pB=x=>Qe(x,64,"digest"),js=x=>x instanceof ht?x:$x("Point expected"),Is=2n**256n,ei=class ze{constructor(A,e,r,t){A0(this,"X"),A0(this,"Y"),A0(this,"Z"),A0(this,"T");let s=Is;this.X=Ke(A,0n,s),this.Y=Ke(e,0n,s),this.Z=Ke(r,1n,s),this.T=Ke(t,0n,s),Object.freeze(this)}static CURVE(){return jF}static fromAffine(A){return new ze(A.x,A.y,1n,C0(A.x*A.y))}static fromBytes(A,e=!1){let r=ms,t=Ai(Qe(A,ut)),s=A[31];t[31]=s&-129;let n=wF(t);Ke(n,0n,e?Is:Fn);let v=C0(n*n),E=sx(v-1n),u=C0(r*v+1n),{isValid:D,value:m}=jB(E,u);D||$x("bad point: y not sqrt");let _=(m&1n)===1n,h=(s&128)!==0;return!e&&m===0n&&h&&$x("bad point: x==0, isLastByteOdd"),h!==_&&(m=sx(-m)),new ze(m,n,1n,C0(m*n))}static fromHex(A,e){return ze.fromBytes(yF(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=bs,e=ms,r=this;if(r.is0())return $x("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),D=C0(u*u),m=C0(v*A),_=C0(u*(m+E)),h=sx(D+C0(e*C0(v*E)));if(_!==h)return $x("bad point: equation left != right (1)");let S=C0(t*s),P=C0(n*F);return S!==P?$x("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:s,Y:n,Z:F}=js(A),v=C0(e*F),E=C0(s*t),u=C0(r*F),D=C0(n*t);return v===E&&u===D}is0(){return this.equals(We)}negate(){return new ze(sx(-this.X),this.Y,this.Z,sx(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=bs,s=C0(A*A),n=C0(e*e),F=C0(2n*r*r),v=C0(t*s),E=sx(A+e),u=sx(C0(E*E)-s-n),D=sx(v+n),m=sx(D-F),_=sx(v-n),h=C0(u*m),S=C0(D*_),P=C0(u*_),I=C0(m*D);return new ze(h,S,I,P)}add(A){let{X:e,Y:r,Z:t,T:s}=this,{X:n,Y:F,Z:v,T:E}=js(A),u=bs,D=ms,m=C0(e*n),_=C0(r*F),h=C0(C0(s*D)*E),S=C0(t*v),P=sx(C0(sx(e+r)*sx(n+F))-m-_),I=sx(S-h),R=sx(S+h),G=sx(_-C0(u*m)),r0=C0(P*I),M=C0(R*G),k=C0(P*G),L=C0(I*R);return new ze(r0,M,L,k)}subtract(A){return this.add(js(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(Ke(A,1n,an),!e&&this.is0()))return We;if(A===1n)return this;if(this.equals(Sr))return qB(A).p;let r=We,t=Sr;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(We))return{x:0n,y:1n};let t=uB(r,Fn);C0(r*t)!==1n&&$x("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=bB(e);return r[31]|=A&1n?128:0,r}toHex(){return gF(this.toBytes())}clearCofactor(){return this.multiply(vn(vB),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(an/2n,!1).double();return an%2n&&(A=A.add(this)),A.is0()}};A0(ei,"BASE");A0(ei,"ZERO");var ht=ei,Sr=new ht(Yo,Qo,1n,sx(Yo*Qo)),We=new ht(0n,1n,1n,0n);ht.BASE=Sr;ht.ZERO=We;var bB=x=>yF(hF(Ke(x,0n,Is),64)).reverse(),wF=x=>vn("0x"+gF(Ai(Qe(x)).reverse())),JA=(x,A)=>{let e=x;for(;A-- >0n;)e=C0(e*e);return e},mB=x=>{let A=C0(x*x),e=C0(A*x),r=C0(JA(e,2n)*e),t=C0(JA(r,1n)*x),s=C0(JA(t,5n)*t),n=C0(JA(s,10n)*s),F=C0(JA(n,20n)*n),v=C0(JA(F,40n)*F),E=C0(JA(v,80n)*v),u=C0(JA(E,80n)*v),D=C0(JA(u,10n)*s);return{pow_p_5_8:C0(JA(D,2n)*x),b2:e}},AF=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,jB=(x,A)=>{let e=C0(A*C0(A*A)),r=C0(C0(e*e)*A),t=mB(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===sx(-x),D=n===sx(-x*AF);return E&&(s=F),(u||D)&&(s=v),(sx(s)&1n)===1n&&(s=sx(-s)),{isValid:E||u,value:s}},hB=x=>dB(wF(x)),gB=(...x)=>Promise.resolve(DB("sha512Async")(_F(...x))).then(pB),yB=x=>{let A=Ai(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=hB(e),s=Sr.multiply(t),n=s.toBytes();return{head:e,prefix:r,scalar:t,point:s,pointBytes:n}},kB=x=>gB(Qe(x,ut)).then(yB),_B=x=>kB(x).then(A=>A.pointBytes),wB={sha512Async:async x=>{let A=BB(),e=_F(x);return mn(await A.digest("SHA-512",e.buffer))},sha512:void 0},SB=x=>(x=x===void 0?CB(ut):x,Qe(x,ut)),$B=async x=>{let A=SB(x),e=await _B(A);return{secretKey:A,publicKey:e}},ln=8,TB=256,SF=Math.ceil(TB/ln)+1,Ms=2**(ln-1),PB=()=>{let x=[],A=Sr,e=A;for(let r=0;r<SF;r++){e=A,x.push(e);for(let t=1;t<Ms;t++)e=e.add(A),x.push(e);A=e.double()}return x},eF=void 0,rF=(x,A)=>{let e=A.negate();return x?e:A},qB=x=>{let A=eF||(eF=PB()),e=We,r=Sr,t=2**ln,s=t,n=vn(t-1),F=vn(ln);for(let v=0;v<SF;v++){let E=Number(x&n);x>>=F,E>Ms&&(E-=s,x+=1n);let u=v*Ms,D=u,m=u+Math.abs(E)-1,_=v%2!==0,h=E<0;E===0?r=r.add(rF(_,A[D])):e=e.add(rF(h,A[m]))}return x!==0n&&$x("invalid wnaf"),{p:e,f:r}},$F=32,TF=64;async function Ls(){let{secretKey:x,publicKey:A}=await $B(),e=new Uint8Array(TF);return e.set(x,0),e.set(A,$F),{publicKey:A,privateKey:e}}function fn(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function Rs(x,A="base64 value"){return qF(PF(x,A))}function PF(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function ri(x){return fn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function NB(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return qF(PF(r,A))}function qF(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var Dt=class extends Error{constructor(x,A,e){super(e),A0(this,"httpStatus",x),A0(this,"code",A),this.name="CertApiError"}},Os="/api/1/companion/cert",NF=10080*60*1e3,tF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function IF(x,A){let e=x.apiHost.replace(/\/+$/,""),r=tF?Os:e+Os,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};tF&&e&&(t["x-target-host"]=e);let s=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:ri(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 Dt(s.status,F,v)}let n=await s.json();if(!n.certificate||!n.notAfter)throw new Dt(s.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function ti(x,A=NF){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var IB=require("events"),MB=aB(FB(),1),en="[device-master]",zA={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)},cn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},LB=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 ni(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^LB[(e^x[r])&255];return(e^-1)>>>0}var Gs=Date.UTC(1999,11,31,0,0,0);function Us(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 ge(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function Hs(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 RB=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]),OB=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 GB(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let s=(r^x[t])&255;r=(e^RB[s])&255,e=OB[s]}return 256*e|r}function UB(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 HB(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 JB=[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],KB=new Map(JB.map((x,A)=>[x,128+A]));function zB(x){return x<=127||x>=160&&x<=255?x:KB.get(x)??63}var _r="uto_script.dat",si="uto_fw.dat",MF=(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))(MF||{}),LF=(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))(LF||{}),ii=(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))(ii||{}),RF=(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))(RF||{}),OF=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(OF||{}),GF=(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))(GF||{}),UF=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(UF||{}),HF=(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))(HF||{}),JF=97;function En(x){return x&JF}var KF=(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))(KF||{}),zF=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(zF||{}),nF={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},VB=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"+ge(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"+ge(x,2)}tagToString(x){x|=0;let A=Object.entries(ii).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+ge(x,4)}containerIdToTag(x,A){let e=nF[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(nF).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)+Gs}msToStamp40(x){let A=(x-Gs)/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=Hs(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=Hs(x);t.fill(0,A,A+e);for(let s=0;s<e&&s<r.length;s++)t[A+s]=zB(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=(ge(s,8)+ge(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:ge(e,4),firmwareVersion:`${Us(t>>8,2)}v${Us(t&255,3,"0")}`,flags:ge(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)}}}},H0=new VB,gt={nowMs:()=>Date.now()},ai=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()}}},sF=new WeakMap;function VF(x,A){let r=(sF.get(x)??Promise.resolve()).then(()=>WB(x,A));return sF.set(x,r.catch(()=>{})),r}async function WB(x,A){x.interface&&x.interface==="ble"?await XB(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function XB(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 iF=15e3,YB=500,QB=3,ZB=1024;function aF(x){return x?.utos.find(e=>e.wTag===3)?.size||ZB}var WF=class on extends IB.EventEmitter{constructor(A,e,r=gt){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",aF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new ai("UTO-Port"),this.transport=A,this.logger=e??zA,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,MB.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=VF(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:H0.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}=on.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??YB,s=r?.maxRetries??QB;return new Promise((n,F)=>{let v=0,E=!1,u=()=>{},D,m={resolve:h=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),n(h)},reject:h=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),F(h)}},_=async()=>{u=h=>A(h,m.resolve,m.reject),this.once("utoFrame",u);try{await e()}catch(h){if(E)return;this.removeListener("utoFrame",u),F(h);return}E||(D=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})`),_()},t))};_()})}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=iF,s=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(_.arm(),P.bCmd===0){_.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&&s>0&&E.length>=s)){let I=E.splice(0);D=D.then(()=>n(I))}this.once("utoFrame",m)},_=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),_.arm();let h=Math.trunc(e/256),S=e&255;this.sendUto(A,{u32SysTime:h,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=iF){return await this.utoPortLock.requestLock(),new Promise((t,s)=>{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(on.concatChunks(n)):s(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,()=>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 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);H0.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}=on.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?H0.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=aF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?H0.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,H0.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=H0.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?H0.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??_r,stamp:r===0?0:H0.msToStamp40(r??this.timeSource.nowMs()),size:s.length,_flags:11,crc32:ni(s)},F=H0.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 D=Math.min(E,s.byteLength-u),m=new Uint8Array(s.buffer,s.byteOffset+u,D);await this.sendUTOCmdExt(3,3,m,u*256);let h=(u+D)/s.byteLength*100;this.emit("installing",h.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 H0.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}},xC=require("events"),XF=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(XF||{}),AC=5e3,eC=5e3,rC=class extends xC.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(" "),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+eC||s===`
|
|
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+
|
|
2195
|
+
`).forEach(v=>{this.onConsole(v)}),x=""}for(let F=r.length-1;F>=0;F--)Date.now()>r[F].start+AC&&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 KA(x){return parseInt(x.slice(6),16)}function cA(x){return"400000"+x.toString(16).toUpperCase().padStart(10,"0")}function YF(x){return x?new Uint8Array(x):null}function rn(x){return{...x,data:YF(x.data)}}function hs(x){return{...x,data:YF(x.data)}}var tC=/^400000[0-9A-F]{10}$/;function oF(x,A){if(!tC.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 nC=class QF{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:rn(this.utoData.get(A).get(e))}async replaceUtoRow(A){oF(A.tag,A.stamp),this.utoData.set(A.tag,new Map([[A.stamp,rn(A)]]))}async insertHistoricRows(A){for(let e of A){oF(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,rn(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(rn)}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(hs)}async getFile(A){let e=this.files.get(A);return e?hs(e):null}async upsertFile(A){this.files.set(A.filename,hs(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?fn(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?fn(e.data):null}))}}static fromJSON(A){let e=new QF;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?Rs(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?Rs(r.data,`files.data of "${r.filename}"`):null});return e}},sC=new Set(["link","unknown"]);function pt(x){return sC.has(x)}var ZF=-2;function le(x){return x.index===ZF}var iC=65535,FF={configa:4294928218,configb:4294928219,configc:4294928220};function oi(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 Bn(x){let A=oi(x.trim()).toLowerCase();return Object.prototype.hasOwnProperty.call(FF,A)?FF[A]:H0.containerIdToTag(A,!1)}function dt(x){return Bn(x.name)}function aC(x,A){let e=x.byNameOrAlias(A);return Bn(e?e.name:A)}function x8(x){return Number.isInteger(x)&&x>=0&&x<=iC}var oC={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 FC(x){return x===void 0?"unknown":oC[x.toLowerCase()]??"unknown"}var vC={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},lC=new Set(["name","alias","title","index","byteofs","type","max","decpl","vscale","vofs","units","editmask","view","edit","default","bitmask"]),Fi="name",fC="type";function cC(x){let A=x.indexOf("=");return{key:x.slice(0,A).trim().toLowerCase(),value:x.slice(A+1).trim()}}function EC(x){return/^config[0-9]$/.test(x)||/^config[A-C]$/i.test(x)?"config":/^histdata[0-9]$/.test(x)?"histdata":"other"}function Ve(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 BC(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 CC=/^(.*?)%(config[0-9a-fA-F])%(.+)$/;function A8(x){let A=CC.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 dC(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 uC(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 DC(x,A){return x==="string"?A??0:vC[x]}function pC(x){let A={};for(let[e,r]of x)lC.has(e)||(A[e]=r);return A}function bC(x,A,e){let r=FC(x.get(fC)),t=Ve(x,"max"),s=DC(r,t),n=A.fields[A.fields.length-1],v=Ve(x,"byteofs")??(n?n.byteofs+n.size:A.kind==="histdata"?1:0),E=A.fields.length,u=x.get(Fi)??(A.kind==="histdata"?`ch${E}`:`field${E}`),D=dC(x),m=uC(x),_=Ve(x,"index");return{name:u,alias:x.get("alias"),title:x.get("title"),index:_,sortIndex:_??e,byteofs:v,type:r,size:s,max:t,decpl:Ve(x,"decpl"),vscale:D.value,vofs:m.value,vscaleRef:D.ref,vofsRef:m.ref,units:x.get("units"),editmask:x.get("editmask"),view:Ve(x,"view"),edit:Ve(x,"edit"),default:x.get("default"),bitmask:BC(x),attrs:pC(x)}}function mC(){return{name:"",kind:"other",fields:[],recordSize:0}}function jC(x,A,e){switch(A){case Fi:{let r=oi(e);x.name=r,x.kind=EC(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 hC(x){if(!x.name)throw new Error("?dde.table-without-name");x.recordSize=x.fields.filter(A=>!pt(A.type)).reduce((A,e)=>Math.max(A,e.byteofs+e.size),0),x.fields.sort((A,e)=>A.sortIndex-e.sortIndex)}function gC(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 yC(x){return x.toLowerCase()==="histdata28"?"applog0":oi(x)}function kC(x){let{keyBytes:A,matchAll:e}=gC(x.get("key")??"00");return{source:x.get("source")??"",target:yC(x.get("target")??""),key:A[0]??0,keyBytes:A,matchAll:e,keepraw:Ve(x,"keepraw")}}function _C(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 wC(x,A){switch(A){case"<table>":return x.container=mC(),x.expectName=!0,!0;case"</table>":return x.container&&(hC(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(bC(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(kC(x.split)),x.split=null,!0;default:return!1}}function SC(x,A){let{key:e,value:r}=cC(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!==Fi)throw new Error(`?dde.first-table-attr-not-name."${e}"`);x.expectName=!1,jC(x.container,e,r)}}function $C(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("//")||_C(A,t)||t.includes("=")&&wC(A,t)}return kC(A.containers,A.splits)}var x8=null,$C=4;function wr(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 $r(x){let A=x.trim();if(A==="*")return x8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(u,p,m)=>{let _=A.slice(u,u+p);return parseInt(_.length?_.padEnd(p,"0"):m,10)},r=parseInt(A.slice(0,$C),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 pt="NAN",TC="%HEX%",qC=65535,ai=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),A0(this,"alias",x),this.name="DdeUnknownAliasError"}};function mn(x){return(x.alias??x.name).toLowerCase()}function jn(x){return x==="string"}function oi(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function A8(x){return(x.editmask??"").toUpperCase()===TC}function PC(x,A){return A===void 0||!Number.isFinite(x)?x:Fi(x,A)}function Fi(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function NC(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),Fi(x,A-1-r)}function MC(x){return x==="floatm16"||x==="f32"||x==="f64"}function IC(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(MC(x.type)?9:0),r=Fi(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return NC(r,t)}function Bn(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 e8(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 LC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Cn(x){return!!x.bitmask&&LC.has(x.type)}var r8=255,t8=254,n8=253,s8=252,i8=251,RC=207,vi=65535,dn=65534,fi=65533,li=65532,ci=65531;function OC(x){switch(x){case r8:return vi;case t8:return dn;case n8:return fi;case s8:return li;case i8:return ci;default:return x<=31?x:x>RC?dn:(x&15|16)<<(x>>4)-1}}function GC(x){switch(x){case vi:return r8;case dn:return t8;case fi:return n8;case li:return s8;case ci:return i8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var un=1023,Gs=31,a8=127,ms=8388607,UC=255,Us=15,HC=-14,oF=15;function o8(x){let A=(x&un)<<13,e=(x&31744)>>10;if(e===Gs)return v8(1024-(x&un));e!==0&&(e=e-Us+4+a8);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 F8(x){if(typeof x=="string"||Number.isNaN(x))return qC;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&ms)+4096,s=(t>ms?1:0)+(e>>>23&UC),n=(t&ms)>>>13;return s!==0&&(s=s-a8-4,s<HC?(n=0,s=0):s>oF?(n=un,s=oF+Us):s=s+Us),r|s<<10|n}var JC=["OF","UF","OL","SC"],Hs={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:vi,OF:dn,UF:fi,OL:li,SC:ci}},KC={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},Jx={NAN:1,OF:2,UF:3,OL:4,SC:5},zC=new Set(["u8","u16","u32","ufm8"]);function VC(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function Ei(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 Bi(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 o8(A.getUint16(e,!1));case"ufm8":return OC(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function v8(x){switch(x){case Jx.OF:return"OF";case Jx.UF:return"UF";case Jx.OL:return"OL";case Jx.SC:return"SC";default:return pt}}var FF=[["NAN",Jx.NAN],["OF",Jx.OF],["UF",Jx.UF],["OL",Jx.OL],["SC",Jx.SC]];function WC(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?Jx.NAN:(r=r&4194304?8388608-r:r&255,r===0?Jx.NAN:r)}function XC(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?Jx.NAN:r}function YC(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);Cn(x)&&(t=BigInt(Bn(Number(t),x.bitmask)));let s=Hs.s64;return FF.find(([n])=>t===BigInt(s[n]))?.[1]??0}let e=Hs[x.type];if(!e)return 0;let r=Bi(x.type,A,x.byteofs);return Cn(x)&&(r=Bn(r,x.bitmask)),FF.find(([t])=>r===e[t])?.[1]??0}function f8(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&Gs)===Gs?1024-(e&un):0}case"f32":return WC(A,x.byteofs);case"f64":return XC(A,x.byteofs);default:return YC(x,A)}}function l8(x,A){let e=Bi(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(Cn(x)&&(e=Bn(e,x.bitmask)),e*x.vscale+x.vofs)}function QC(x,A){let e=f8(x,A);if(e!==0)return v8(e);let r=l8(x,A);return Number.isNaN(r)?pt:IC(x,r)}function ZC(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(jn(x.type)||oi(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return f8(x,e)!==0?NaN:l8(x,e)}function xd(x,A){if(A8(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 H0.cp1252Unpack(A,x.byteofs,x.size)}var c8=25569,E8=864e5;function Ad(x){return(x-c8)*E8}function ed(x){return x/E8+c8}function rd(x,A){if(x.type==="datetime")return wr(Ad(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return wr(H0.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),wr(H0.stamp40ToMS(e))}var td=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function nd(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function sd(x){let A=x.default;if(A===void 0)return;if(jn(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===pt)return pt;if(td.has(x.type))return nd(e,0);let r=Ei(e);return r!==null?r:A}function id(x,A,e){return x.byteofs+x.size>e?sd(x):jn(x.type)?xd(x,A):oi(x.type)?rd(x,A):QC(x,A)}function Js(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)ve(t)||Dt(t.type)||(r[mn(t)]=id(t,e,A.byteLength));return r}function ad(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()===pt||A==="")return{kind:"sentinel",state:"NAN"};let e=JC.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=Ei(A);return r!==null?{kind:"value",physical:r}:vF(x)}return vF(x)}function vF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?Ei(A):null)??0}}function Ks(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,KC[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|Jx[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(Jx[e]),!1);default:break}let r=Hs[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);B8(x,A,Number(r))}function od(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,F8(r),!1);default:break}if(Number.isNaN(r))return Ks(x,A,"NAN");if(!Number.isFinite(r))return Ks(x,A,"OF");let t=r;zC.has(x.type)&&t<0&&(t=0),B8(x,A,VC(t))}function B8(x,A,e){if(Cn(x)){let r=Bi(x.type,A,x.byteofs);e=e8(r,e,x.bitmask)}Fd(x.type,A,x.byteofs,e)}function Fd(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,GC(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function vd(x,A,e){let r=String(e);if(A8(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${mn(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}H0.cp1252Pack(A,x.byteofs,x.size,r)}function fd(x,A,e){let r=$r(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${mn(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,ed(r),!1);return}let t=H0.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 ld(x,A,e){if(jn(x.type))return vd(x,A,e);if(oi(x.type))return fd(x,A,e);let r=ad(x,e);switch(r.kind){case"skip":return;case"sentinel":return Ks(x,A,r.state);case"value":return od(x,A,r.physical)}}function zs(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=>!ve(n)&&!Dt(n.type)).map(n=>[mn(n),n]));for(let[n,F]of Object.entries(A)){let v=s.get(n.toLowerCase());if(!v)throw new ai(n);ld(v,t,F)}return r}var fF=99,cd=256,ge=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),A0(this,"container",x),this.name="DdeUnknownContainerError"}},bt=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"}},Ci=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),A0(this,"field",x),this.name="DdeUnknownFieldError"}};function js(x){return(x.alias??x.name).toLowerCase()}var Ed=class{constructor(x,A,e=ht){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=Ct(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=Js(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 ge(x);let r=Ct(e);if(r===null)throw new ge(x);if(e.edit===fF)throw new bt(e.name);let{stamp:t,...s}=A;this.assertFieldsWritable(e,s);let n=await this.storage.getRowForTag(r),F=zs(await this.resolveScaleRefs(e),s,n?.data??null),v=H0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),E=lA(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:QF(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ge(x);let r=Ct(e);if(r===null)throw new ge(x);let{stamp:t,...s}=A,n=zs(await this.resolveScaleRefs(e),s,null),F=H0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:lA(F),flags:0,site_related:0,data:n})}recordStampMs(x){if(typeof x!="string")return null;try{return $r(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ge(x);let r=this.model.splits.find(E=>E.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new ge(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,cd);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=Js(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 wr(H0.stamp40ToMS(JA(x.stamp)))}boundHex(x){if(x!=null)return lA(H0.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=>js(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=Ct(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!ve(r)&&!Dt(r.type)).map(r=>[js(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===fF)throw new bt(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!ve(t)&&!Dt(t.type)).map(t=>js(t))),r=new Set;for(let t of A){let s=t.toLowerCase();if(s!=="stamp"){if(!e.has(s))throw new Ci(t);r.add(s)}}return r}},Bd=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 Vs(x,A){let e=A.toLowerCase();if(Bd.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 C8(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 gt(x,A){if(!x)return null;let e=Vs(x,A.name);return e||(A.alias?Vs(x,A.alias):null)}var dd=require("events"),R0="[OfflineSyncManager]",ud=500,Dd="site_info",pd=new Set(["local-data-interface.json"]);function Mx(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function bd(x){let A=cn(x);return!!(x&2)||A!==0&&A!==65}function lF(x){return x.filter(A=>(A.filename===_r||A.filename===ri)&&A.outcome==="download").map(A=>A.filename)}var Ue="skip-equal",kr="skip-device-readonly",hs="delete",je="error",gs="upload",ys="uploading-utos",cF="downloading-utos",rn="fetching-device-state",ks="uploading-files",tn="downloading-files",EF="executing-change-requests",BF="executed",md="error",_s="skip-old-stamp",jd=class extends dd.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:lA(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,ud,F),this.logger?.info(`${R0} 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(`${R0} 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(`${R0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:Ue,dbStamp40:e,deviceStamp40:r};let s=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:lA(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(`${R0} 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(`${R0} 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(ys,null,0,t);let s=0;for(let n of x){Mx(r);let F=A.get(n),{tagInfo:v,dbStamp40:E,deviceStamp40:u}=F;if(this.emitProgress(ys,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,_=v.historic?await this.uploadHistoricTag(n,v,E,u,h=>{this.emitProgress(ys,p,m,t,{recordsReceived:h})}):await this.uploadSingleTag(n,v,E,u);e.set(n,_)}++s}}async pullFileFromDevice(x,A,e,r,t,s){let n=A.stamp;try{let F=await this.utoMaster.requestFile(x,E=>{this.emitProgress(ks,x,s,t,{bytesTransferred:E})}),v=ei(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:lA(n),crc:A.crc32,size:F.byteLength,flags:A._flags,flags_int:r,data:F}),{filename:x,outcome:gs,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${R0} file upload error ${x}: ${JSON.stringify(F)}`),{filename:x,outcome:je,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:Ue,dbStamp40:r,deviceStamp40:v}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:lA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:Ue,dbStamp40:r,deviceStamp40:t}}catch(s){return this.logger?.error(`${R0} file upload error ${x}: ${JSON.stringify(s)}`),{filename:x,outcome:je,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:kr,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=JA(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=cn(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(ks,null,0,s);let n=0;for(let[F,v]of t){if(Mx(r),!(F===ri||F===_r&&!e)){let u=await this.decideFileUpload(F,v,s,n);u&&A.set(F,u)}this.emitProgress(ks,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(`${R0} 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?Ue:"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:kr,dbStamp40:e,deviceStamp40:r};t.set(x,s)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(cF,null,0,t);let s=0;for(let n of x){Mx(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(cF,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(tn,x.filename,t,r,{bytesTransferred:v,bytesTotal:s})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,x.data,H0.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(F){return this.logger?.error(`${R0} 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=JA(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return n===s?void 0:{filename:x.filename,outcome:Ue,dbStamp40:n,deviceStamp40:s};if(!(!t&&n<s))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:kr,dbStamp40:n,deviceStamp40:s}:this.sendFileToDevice(x,n,s,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(Dd);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${R0} 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(tn,null,0,E);let u=0;for(let p of F){if(Mx(r),e&&p.filename===_r){this.emitProgress(tn,p.filename,++u,E);continue}let m=p.filename===_r&&!e,_=await this.decideFileDownload(p,x[p.filename],A.get(p.filename),v,m,E,u);_&&A.set(p.filename,_),this.emitProgress(tn,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=JA(x.stamp),n=this.wantDownloadPush(x,A,s,t);if(n==="match")return{filename:x.filename,outcome:Ue,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:kr,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=cn(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=JA(x.stamp);if(!(e&&(e.outcome===gs||e.outcome===je))){if(!(A._flags&2))return{filename:x.filename,outcome:kr,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:hs,dbStamp40:t,deviceStamp40:r}}catch(s){return this.logger?.error(`${R0} file delete error ${x.filename}: ${JSON.stringify(s)}`),{filename:x.filename,outcome:je,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,s=JA(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:hs,dbStamp40:s,deviceStamp40:null}}catch(n){return this.logger?.error(`${R0} file delete error ${x.filename}: ${JSON.stringify(n)}`),{filename:x.filename,outcome:je,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(`${R0} 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))Mx(x),await this.reconcileDeviceFile(s,n,t.get(s)??null);for(let s of r)Mx(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(`${R0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp:lA(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||pd.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(`${R0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){Mx(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${R0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null){if(!A.serialNumber)throw new Error(`${R0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${R0} 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(`${R0} 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?JA(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(EF,null,0,v),v===0)return;let E=new Set,u=0;for(let[p,m]of F){Mx(s);let _=x.get(p),h=_?.sTag??`0x${p.toString(16)}`;this.emitProgress(EF,h,u,v),await this.executeChangeRequestTag(p,h,_,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:JA(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,_s),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===je||!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,BF,u.resultCode)):u.outcome==="denied"?(this.logger?.warn(`${R0} change-request denied ${A} (result=${u.resultCode}) \u2014 server will retry`),this.pushChangeResults(s,x,A,r,"denied",u.resultCode)):(this.logger?.error(`${R0} 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(H0.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${R0} 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(`${R0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${R0} 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(`${R0} 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(`${R0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${s}`)}for(let s of x)Mx(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(`${R0} 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:lA(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(`${R0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${R0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],s=lF(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===Ue||n.outcome==="skip-db-readonly"||n.outcome===kr).length,totalHistoricRecordsAppended:r.reduce((n,F)=>n+(F.recordsAppended??0),0),totalFilesUploaded:t.filter(n=>n.outcome===gs).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===hs).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===BF).length,totalErrors:r.filter(n=>n.outcome===je).length+t.filter(n=>n.outcome===je).length+e.filter(n=>n.outcome===md).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);Mx(A),this.emitProgress(rn,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${R0} requestStamps returned null`);this.emitProgress(rn,"stamps",1,3);let s=await this.utoMaster.requestFileList();this.emitProgress(rn,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(rn,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),v=new Map,E=new Map,u=[],p=await this.isAppInDevPhase();return Mx(A),await this.uploadUtoTags(n,F,v,A),Mx(A),await this.uploadFiles(s,E,p,A),Mx(A),await this.executeChangeRequests(r,t,F,v,u,A),Mx(A),await this.downloadUtoTags(n,F,v,A),Mx(A),await this.downloadFiles(s,E,p,A),Mx(A),lF([...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(`${R0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${R0} 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,_)=>m.stamp40-_.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!==_s)?.outcome??_s}},hd=require("events"),gd=require("events"),yd=require("events"),kd=5e3,di=class d8 extends yd.EventEmitter{constructor(A=KA){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 KF(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=d8.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")))},kd),this.attachWebSocketHandlers(v,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},u8="https://lic.mydatanet.at/api/2/";async function D8(x,A=u8){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 p8=class extends gd.EventEmitter{constructor(x=KA){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 D8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let s=new di(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}}},_d=require("events"),b8="Operation aborted";function wd(x){return x instanceof Error?x.message:String(x)}function ws(x){if(x?.aborted)throw new Error(b8)}var m8=class extends _d.EventEmitter{constructor(x,A=KA){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(b8);let v=`${n.name.toUpperCase()} sync phase failed: ${wd(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){ws(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}`),ws(r),await x.initiateSync(r),ws(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 di(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()}}},Sd=class extends hd.EventEmitter{constructor(x,A,e=KA){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 p8(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 m8(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(){}},$d=require("events"),yx={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=?"},U0={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+)/},Hx=1e4,j8=9e4,h8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function g8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var He="Operation aborted",Rx=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},ui=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},Td=class extends $d.EventEmitter{constructor(x,A=KA){super(),A0(this,"transport",x),A0(this,"logger",A),A0(this,"mutex",new ni("AtCommandHandler")),A0(this,"bufferState",g8()),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=Hx,s)=>this.executeSendAndWait(e,r,t,s),sendRaw:(e,r=Hx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(yx.MNT_CFG,U0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(yx.MDN_CFG,U0.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 Rx;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!==U0.ERROR&&s.includes(U0.ERROR)){A(),r(new ui);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 Rx);return}if(r?.aborted){s(new Error(He));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(He))};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 Rx)},!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 Rx);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 Rx)},this.responseCallback=n=>{h8.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 Rx);return}if(e?.aborted){t(new Error(He));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`))},Hx),F=()=>{s.cleanup(),t(new Error(He))};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 Rx)},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=Hx,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=Hx){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(yx.MNT_SYNC,U0.OK,Hx,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(yx.MDN_SYNC,U0.OK,Hx,x),await this.executeSendAndWait(null,U0.SYNC_START,Hx,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 Rx;if(A?.aborted)throw new Error(He);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${yx.COMPANION_CERT}=${r}`,U0.OK,Hx,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(`${yx.COMPANION_CERT}=${F},${n},${v}`,U0.OK,Hx,A),n+=F}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Rx);return}if(A?.aborted){r(new Error(He));return}this.bufferState.buffer="";let t={cleanup:()=>{}},s=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},Hx),n=()=>{t.cleanup(),r(new Error(He))};t.cleanup=this.makeCleanup(s,A,n),A&&A.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Rx)},this.responseCallback=v=>{let E=v.match(U0.COMPCERT_ERROR);if(E){t.cleanup(),e({success:!1,errorCode:parseInt(E[1],10)});return}if(v.includes(U0.OK)){t.cleanup(),e({success:!0});return}v.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${yx.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(yx.COMPANION_CERT_TEST,U0.OK,Hx,x),!0}catch(A){if(A instanceof Rx)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(yx.CON_CLOSE,U0.CON_CLOSE,Hx,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(U0.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())}},y8=(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))(y8||{}),qd=require("events"),Ss="requesting-cert",$s="cert-revoked",k8=class Ws extends qd.EventEmitter{constructor(){super(...arguments),A0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??ln,{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||!Ai(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(Ss),s(),F=await this.requestAndStoreCert(n,A)),this.utoMaster=new zF(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 Ns();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await PF(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof ut&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new Ts($s,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await Ws.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 Ns();return await A.storage.saveKeypair(n),n})(),t=await Ws.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??ln).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(Ss),e=await this.requestAndStoreCert(r,t),s=await A.sendCompanionCert(e.base64Url,t.signal),s.success))return e;throw new Ts("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 Ts?(this.emit("phase",A.phase===$s?$s:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof ut?{success:!1,phase:Ss,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};A0(k8,"encodePublicKeyBase64Url",xi);var Pd=k8,Ts=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}},_8=(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))(_8||{}),Nd={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 Md(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 Id=require("events");function w8(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 S8(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function $8(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function Xs(x,A){return x.map((e,r)=>({name:e.name,displayValue:$8(A[r]??"",e.scale,e.offset),unit:e.unit}))}var Ld=2e3,T8=class extends Id.EventEmitter{constructor(x,A=KA){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(yx.APP_GET_METADATA),A=x.includes(U0.OK)?{supported:!0,pinRequired:!1}:x.includes(U0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(U0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(U0.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?`${yx.APP_GET_METADATA}=${x}`:yx.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(U0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(U0.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(U0.OK)){let r=w8(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(U0.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?`${yx.APP_GET_DATAVALUE}=${A}`:yx.APP_GET_DATAVALUE,r=await x(e);if(r.includes(U0.OK)){let t=S8(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",Xs(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(yx.APP_TRIG_MEASURE_TEST)).includes(U0.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof Rx)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=j8,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let s=await t.sendRaw(yx.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+s),!s.includes(U0.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,U0.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 Rx)throw n;let F="timeout";return n instanceof ui?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${U0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:s}}})}async startPolling(x,A=Ld){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 Xs(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function Rd(x,A,e){let r=s=>{if(s instanceof Rx)throw s},t=new T8(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(_=>(r(_),!1)),A?.getCertificate(s)]);E=p,u=m!=null&&Ai(m.notAfter)}return{hostname:s,localData:v,secureConnection:E,validCert:u}}finally{t.dispose()}}var Od=require("events"),Gd={0:"trigger",1:"wakeup",2:"online"},Ud={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"]},Hd={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},wx={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},Jd=wx.FAILED|wx.ACTIVE|wx.STARTED|wx.RETRY|wx.WAKEUPABLE|wx.EXTSIM|wx.DISABLED|wx.WAKEUP|wx.POSUPDATE_ACTIVE,CF=`${U0.RM2M_STATE}: `;function q8(x=0){let A=(x&wx.WAKEUPABLE)!==0,e="offline",r=A;return x&wx.POSUPDATE_ACTIVE?(e="locating",r=!1):x&wx.RETRY?(e="retry",r=!1):x&wx.STARTED?(e="dialing",r=!1):x&wx.ACTIVE?(e="active",r=!1):x&wx.FAILED?(e="failed",r=A):x&wx.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&wx.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~Jd}}function Kd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:Gd[A]??x}function zd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:Ud[A]??["unknown",`itf#${x}`,`itf#${x}`]}function Vd(x){if(x.length===0)return null;let A=x.join(",");return Hd[A]??A}function P8(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=zd(s),E=s!==void 0?parseInt(s,10):NaN;return{stamp:new Date,rssi:E>=101?null:parseInt(e,10),state:F,uplinkState:q8(F),uplinkMode:Kd(t),uplinkInterface:v?v[0]:null,uplinkInterfaceExtended:v?v[1]:null,uplinkInterfaceTechnical:v?v[2]:null,scriptState:Vd(n)}}function N8(x){let A=x.indexOf(CF);if(A===-1)return null;let e=x.substring(A+CF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?P8(t):null}var Wd=5e3,Xd=class extends Od.EventEmitter{constructor(x,A=ln){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(yx.RM2M_STATE),A=N8(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=Wd){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()}},Yd=require("events"),M8=class extends Yd.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}}},Qd=require("events"),I8={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},Zd=class extends Qd.EventEmitter{constructor(x=KA,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 M8,this.reconnectOptions={...I8,...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})})}},xu={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},Au={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"},eu=590,ru=3e4,w0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},cA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},hn=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},Di=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function EA(x){try{return decodeURIComponent(x)}catch{throw new w0("malformed url encoding")}}var tu=2e3,nu=2136;function pi(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=tu&&A<=nu}function Tr(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)&&!pi(e))throw new w0(`attribute '${A}' is not valid`)}}function su(x){return typeof x.setMetadataValue=="function"?x:null}function iu(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function bi(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function au(x){return{status:200,body:x.ctx.siteInfo}}async function ou(x){let{blueprint:A}=x.ctx;if(!A)throw new cA("blueprint unavailable");return{status:200,body:A}}async function Fu(x){let{me:A}=x.ctx;if(A==null)throw new cA("no profile stored");return{status:200,body:A}}function L8(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 vu(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 fu=1024;function yt(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 R8(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(fu,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var mi=26432,Xe={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},O8=Object.keys(Xe),kt=["standby","commissioned","offline","commissioning","online"],Ys=kt.reduce((x,A)=>x|Xe[A],0)>>>0;function G8(x){let A=0;for(let e of O8)x[e]===!0&&(A|=Xe[e]);return A>>>0}function ji(x,A){let e={};for(let r of O8)x&Xe[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function U8(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(mi);if(!r?.data)return!1;let t=yt(r.data);if(!t)return!1;let s=!1;if(typeof t.lifecycleFlags=="number"){let n=ji(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 lu=new Set([...kt,"service","lifecycle_state"]);function cu(x,A){let e=Math.max(H0.msToStamp40((x.timeSource??ht).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function Eu(x){let A=uu(x.request.body??null);if(!A)throw new w0("invalid or missing request body");Bu(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!du(r))throw new w0("this site does not support lifecycle flags!");let t=G8(r),s=t;for(let E of kt){let u=A[E];typeof u=="boolean"&&(s=u?s|Xe[E]:s&~Xe[E])}if(s>>>=0,s===t)return{status:204,body:""};let n=cu(e,x.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~Ys>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:s&Ys}}),stamp40:n+1}],v=iu(e.storage);return v&&await v.insertUtoChangeRequests(F.map(E=>({tag:mi,stamp40:E.stamp40,json:E.json}))),e.siteInfo.lifecycle_flags=ji(s,r),await H8(e),Cu(e,F),{status:204,body:""}}function Bu(x){let A=[];for(let[e,r]of Object.entries(x))lu.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 w0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!kt.includes(e)))throw new w0("invalid parameters")}async function Cu(x,A){try{let e=await vu(x,mi,A);e==="executed"?await U8(x.storage,x.siteInfo)&&await H8(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 H8(x){await su(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function du(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function uu(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 J8(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new w0('"select" must be an array')}}function Du(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new w0("invalid parameter, select must be an array")}}function pu(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(ve(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(ve(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function mu(x){let A=new Set;for(let e of x.fields)ve(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function ju(x,A,e){if(!e)return null;let r=pu(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 K8(s);return t}function hu(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 K8(t);return s||r.unshift("stamp"),r}function gu(x,A){if(A===void 0)return;let e=mu(x),r=A.map(s=>s.toLowerCase()),t=r.filter(s=>!e.has(s));if(t.length>0)throw new w0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function yu(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 hi(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function K8(x){return new w0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function gn(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function ku(x){let A=x.ctx,e=EA(x.params[1]),r=gn(A.model,e);if(!r)throw new w0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new cA(`no data for container "${e}"`);let s=wu(A,r,t,_u(x));return{status:200,body:z8(A,e,s)}}function _u(x){let A=x.query.json??{};return J8(A.select)}function wu(x,A,e,r){let t=ju(A,gt(x.blueprint??null,A),r);return yu(e,t)}function z8(x,A,e){let r=x.model.byNameOrAlias(A);return r?C8(e,gt(x.blueprint??null,r)):e}async function Su(x){let A=x.ctx,e=EA(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new cA(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new cA(`unknown container "${e}"`);let s=x.query.json??{},n=Du(s.select),F=gu(r,n);return{status:200,body:hi(t,F)}}async function $u(x){let A=EA(x.params[1]);return V8(x,A,"canonical")}async function Tu(x){let A=EA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new cA(`unknown container "${A}"`);return V8(x,A,"legacy")}async function V8(x,A,e){let r=Lu(x);if(!r)throw new w0("invalid or missing request body");Tr(r);let{stamp:t,...s}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new w0("value(s) of field(s) stamp are not valid");let n=x.ctx;if(e==="canonical"&&!gn(n.model,A))throw new w0("container does not exist");let F=n.model.byNameOrAlias(A);if(F?.kind==="histdata")throw new cA(`unknown container "${A}"`);let v=e==="canonical"?Nu(n,F,s):Mu(F,s);try{let E=e==="canonical"&&t!==void 0?{...v,stamp:t}:v,u=await n.mapper.writeContainer(A,E);return u.devicePushable&&L8(n,u.tag,u.data,u.stamp40),{status:204,body:""}}catch(E){throw qu(E,A,e,n,F)}}function qu(x,A,e,r,t){if(x instanceof bt){let s=x.field?Pu(r,t,x.field,e):void 0;return e==="canonical"?s?new w0(`no permission to modify container field \`${s}\``):new w0(`no permission to modify container \`${A}\``):s?new hn(`unknown field name(s): ${s}`):new Di(`no permission to modify '${A}'`)}return x}function Pu(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():gt(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function Nu(x,A,e){if(!A)return e;let r=gt(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 W8(A,t,e,s=>new w0(`unknown field name(s): ${s}`))}function Mu(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 W8(x,e,A,r=>new hn(`unknown field name(s): ${r}`))}var Iu=new Set(["stamp","stamp4","stamp8","datetime"]);function W8(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&&Iu.has(p.type)&&!(typeof E=="string"&&pi(E))){F.push(v);continue}s[u]=E}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new w0(`value(s) of field(s) ${F.join(",")} are not valid`);return s}function Lu(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=Ru(r);if(t===void 0)throw new w0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function Ru(x){try{return JSON.parse(x)}catch{return}}var X8="x-mt-backfill",Y8="pending";async function gi(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"?{[X8]:Y8}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var Ou=1e3,nn=1e3,Q8="20000101",Z8="*";async function Gu(x){let A=x.query.json??{};nv(A,["from","until","count","offset","select"]),Tr(A);let e=x.ctx,r=EA(x.params[1]),{mapperSelect:t,order:s}=Av(e,r,A.select);ev(e,r);let n=Dn(A.from,Q8,"from"),F=Dn(A.until,Z8,"until");rv(n,F),F!==null&&(F=Hu(F));let v=Ju(A.count),E=tv(A.offset),u=await gi(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=>xv(x,e,r,hi(m,s))),headers:u}}async function Uu(x){let A=x.query.json??{};nv(A,["from","until","offset","select"]),Tr(A);let e=x.ctx,r=EA(x.params[1]),t=x.params[2],{mapperSelect:s,order:n}=Av(e,r,A.select);ev(e,r);let F=Dn(A.from,Q8,"from"),v=Dn(A.until,Z8,"until");rv(F,v);let E=tv(A.offset),u=await gi(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:xv(x,e,r,hi(m,n)),headers:u}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:u}}function xv(x,A,e,r){return x.apiVersion==="1"?r:z8(A,e,r)}function Av(x,A,e){let r=J8(e);if(!r)return{mapperSelect:void 0,order:null};let t=gn(x.model,A);if(!t)return{mapperSelect:r,order:null};let s=hu(t,r),n=s.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:s}}function ev(x,A){if(!gn(x.model,A))throw new w0("timeseries does not exist")}function Dn(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return $r(t)}catch{throw new w0(`attribute '${e}' is not valid`)}}function rv(x,A){if(x!==null&&A!==null&&x>A)throw new w0('E_BAD_REQUEST "from" value must be older than "until"')}function Hu(x){let A=H0.msToStamp40(x);return H0.stamp40ToMS(A)>=x&&(A-=1),H0.stamp40ToMS(A)}function Ju(x){if(x==null||x==="")return Ou;let A=Number(x);if(!Number.isInteger(A))throw new w0('"count" must be an integer');if(A===0)throw new w0("`count` cannot be 0");if(A<-nn)throw new w0(`"count" must be greater than or equal to -${nn}`);if(A>nn)throw new w0(`"count" must be less than or equal to ${nn}`);return A}function tv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new w0('"offset" must be an integer');if(A<0)throw new w0('"offset" must be greater than or equal to 0');return A}function nv(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new w0(`"${e}" is not allowed`)}var Ku=1e5,zu="20000101",Vu="*";async function Wu(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new cA(`unknown container "${e}"`);let s=x.query.json??{};Tr(s);let{fromMs:n,untilMs:F}=Qu(s);Zu(n,F);let v=xD(s),E=AD(s),u=sv(t,s.select)??["stamp"],p=pn(s.from)?await gi(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(q=>q==="stamp"?S.stamp:S[q]??null)),headers:p}}async function Xu(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 cA(`unknown container "${e}"`);let n=x.query.json??{};Tr(n);let F=sv(s,n.select)??["stamp"],v=Yu(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 Yu(x){if(!(!pn(x.until)||x.until==="*"))try{return $r(String(x.until))??void 0}catch{throw new w0("from or until value invalid")}}function Qu(x){let A=pn(x.from),e=pn(x.until);if((!A||!e)&&!yi(x.count))throw new w0("missing or invalid parameters (from and until and/or count)");return{fromMs:dF(A?x.from:zu),untilMs:dF(e?x.until:Vu)}}function Zu(x,A){if(x!==null&&A!==null&&x>A)throw new w0('"from" value must be older than "until"')}function dF(x){let A=String(x);try{return $r(A)}catch{throw new w0(`invalid stamp "${A}"`)}}function xD(x){if(!yi(x.count))return Ku;if(typeof x.count!="number")throw new w0("invalid parameter count");return x.count}function AD(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new w0("invalid parameter offset");return A}function sv(x,A){if(A==null)return;if(!Array.isArray(A))throw new w0("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 w0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],s=new Set(x.fields.filter(F=>!ve(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 w0(`invalid channel(s) ${n.join(",")}`);return t}function yi(x){return!!x}function pn(x){return typeof x=="string"?x.trim().length>0:yi(x)}var eD="device_id";function rD(x){return async A=>(await yn(A),{status:200,body:await nD(A.ctx,x)})}async function yn(x){let A=EA(x.params[0]),e=await tD(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new cA(`unknown device "${A}"`)}async function tD(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(eD)}async function nD(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=yt(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=wr(H0.stamp40ToMS(JA(e.stamp))),r):{}}function ki(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function sD(x){return async A=>{await yn(A);let e=oD(A.request.body??null);if(!e)throw new w0("invalid or missing request body");return ki(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?yt(r.data)??{}:{};return await _i(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function iD(x){return async A=>(await yn(A),ki(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await _i(A.ctx,x,e,{}),{status:204,body:""})}))}function aD(x){return async A=>{await yn(A);let e=EA(A.params[1]);return ki(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=yt(r.data)??{},s=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===s&&delete t[n];return await _i(A.ctx,x,r,t),{status:204,body:""}})}}function oD(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 _i(x,A,e,r){let t=R8(JSON.stringify(r),e?.data?.length??0),s=H0.msToStamp40((x.timeSource??ht).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:lA(s),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),L8(x,A,t,s)}var iv={"content-type":"application/json"},FD=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:Fu,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:au,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:ou,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:Eu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:Uu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:Gu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:ku,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:$u,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:Xu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:Wu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Su,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Tu,checksUid:!0},...vD()];function vD(){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:rD(s),checksUid:!1})),r=Object.entries(A).flatMap(([t,s])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:sD(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:iD(s),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:aD(s),checksUid:!1}]);return[...e,...r]}var fD=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function lD(x){let A=bi();return e=>av(x,e,A)}async function av(x,A,e=bi()){try{let[r,t]=BD(A.path),s=CD(t),n=ED(r,x);if(n===null)return We(404,"E_NOT_FOUND","unknown customer");let F=A.method.toUpperCase();for(let v of FD){if(v.method!==F)continue;let E=v.pattern.exec(n);if(!E)continue;let u=E.slice(1);if(v.checksUid&&!cD(x,u[0]))return We(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 DD(m)}return We(404,"E_NOT_FOUND","not found")}catch(r){return Fv(r)}}function cD(x,A){return x.allowAnySiteUid===!0||A!==void 0&&EA(A)===x.siteUid}function ED(x,A){let e=fD.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 BD(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&&dD(A,e);return A}function dD(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=uD(t):x.params[r]=t}function uD(x){try{return JSON.parse(x)}catch{throw new w0("request supplied data which is not json formatted ")}}function DD(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...iv,...x.headers},body:A}}function ov(x,A){return{status:x,headers:{...iv},body:JSON.stringify(A)}}function Fv(x){return x instanceof w0||x instanceof Ci||x instanceof ai?We(400,"E_BAD_REQUEST",x.message):x instanceof hn||x instanceof bt?We(403,"E_FORBIDDEN",x.message):x instanceof Di?We(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof cA||x instanceof ge?We(404,"E_NOT_FOUND",x.message):ov(500,{err:x instanceof Error?x.message:String(x)})}function We(x,A,e){return ov(x,{err:`${A} ${e}`})}function pD(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 W6={};xl(W6,{APM:()=>p0,DDE:()=>vA,DDE_Core:()=>G0,DFILES:()=>ct,DLO:()=>lt,DefaultFiles:()=>r0,Dependencies:()=>Z0,DevError:()=>cx,DevExitCode:()=>_t,DevSession:()=>xr,DeviceProfiles:()=>Ut,Diagnostics:()=>et,ENV:()=>ds,Globals:()=>dx,Helper:()=>j0,HttpMethod:()=>Wi,Library:()=>Oe,Log:()=>oe,Manifest:()=>V,MyDatanetClient:()=>Ln,Package:()=>gx,Registry:()=>tx,build:()=>J6,buildDevelopmentInstallInfo:()=>tf,dev:()=>xf,generateDevApmId:()=>Xi,install:()=>H6,pack:()=>V6,publish:()=>z6});module.exports=Al(W6);var px=require("vscode-uri");var gr=require("vscode-uri");var el=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 It(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^el[(e^x[r])&255];return(e^-1)>>>0}var Q6=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]),Z6=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;(_=>{function x(h,S){let[q,M]=S,{line:R,col:O}=h.linePos(q);return{line:Number(R)-1,startCharacter:O-1,endCharacter:O+(M-q)}}_.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(h){return It(A.encode(h)).toString(16)}_.generateHashForLibraryName=e;function r(h){return It(A.encode(h)).toString(16)}_.generateHashForFilePath=r;function t(h){return It(h).toString(16).toUpperCase().padStart(8,"0")}_.generateCRC32ForFileContent=t;function s(h){try{let S=null;return h?.type==="Buffer"?S=Uint8Array.from(h.data):S=h,new TextDecoder("utf8").decode(S)}catch{return""}}_.convertBlobToString=s;function n(h=""){return h.replace(/\r\n|\n\r|\r/g,`
|
|
2198
|
+
`).entries()){A.line=e;let t=r.trim();t===""||t.startsWith("//")||wC(A,t)||t.includes("=")&&SC(A,t)}return _C(A.containers,A.splits)}var e8=null,TC=4;function wr(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 $r(x){let A=x.trim();if(A==="*")return e8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(u,D,m)=>{let _=A.slice(u,u+D);return parseInt(_.length?_.padEnd(D,"0"):m,10)},r=parseInt(A.slice(0,TC),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 bt="NAN",PC="%HEX%",qC=65535,vi=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),A0(this,"alias",x),this.name="DdeUnknownAliasError"}};function jn(x){return(x.alias??x.name).toLowerCase()}function hn(x){return x==="string"}function li(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function r8(x){return(x.editmask??"").toUpperCase()===PC}function NC(x,A){return A===void 0||!Number.isFinite(x)?x:fi(x,A)}function fi(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function IC(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),fi(x,A-1-r)}function MC(x){return x==="floatm16"||x==="f32"||x==="f64"}function LC(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(MC(x.type)?9:0),r=fi(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return IC(r,t)}function Cn(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 t8(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 RC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function dn(x){return!!x.bitmask&&RC.has(x.type)}var n8=255,s8=254,i8=253,a8=252,o8=251,OC=207,ci=65535,un=65534,Ei=65533,Bi=65532,Ci=65531;function GC(x){switch(x){case n8:return ci;case s8:return un;case i8:return Ei;case a8:return Bi;case o8:return Ci;default:return x<=31?x:x>OC?un:(x&15|16)<<(x>>4)-1}}function UC(x){switch(x){case ci:return n8;case un:return s8;case Ei:return i8;case Bi:return a8;case Ci:return o8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var Dn=1023,Js=31,F8=127,gs=8388607,HC=255,Ks=15,JC=-14,vF=15;function v8(x){let A=(x&Dn)<<13,e=(x&31744)>>10;if(e===Js)return f8(1024-(x&Dn));e!==0&&(e=e-Ks+4+F8);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 l8(x){if(typeof x=="string"||Number.isNaN(x))return qC;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&gs)+4096,s=(t>gs?1:0)+(e>>>23&HC),n=(t&gs)>>>13;return s!==0&&(s=s-F8-4,s<JC?(n=0,s=0):s>vF?(n=Dn,s=vF+Ks):s=s+Ks),r|s<<10|n}var KC=["OF","UF","OL","SC"],zs={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:ci,OF:un,UF:Ei,OL:Bi,SC:Ci}},zC={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},zx={NAN:1,OF:2,UF:3,OL:4,SC:5},VC=new Set(["u8","u16","u32","ufm8"]);function WC(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function di(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 ui(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 v8(A.getUint16(e,!1));case"ufm8":return GC(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function f8(x){switch(x){case zx.OF:return"OF";case zx.UF:return"UF";case zx.OL:return"OL";case zx.SC:return"SC";default:return bt}}var lF=[["NAN",zx.NAN],["OF",zx.OF],["UF",zx.UF],["OL",zx.OL],["SC",zx.SC]];function XC(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?zx.NAN:(r=r&4194304?8388608-r:r&255,r===0?zx.NAN:r)}function YC(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?zx.NAN:r}function QC(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);dn(x)&&(t=BigInt(Cn(Number(t),x.bitmask)));let s=zs.s64;return lF.find(([n])=>t===BigInt(s[n]))?.[1]??0}let e=zs[x.type];if(!e)return 0;let r=ui(x.type,A,x.byteofs);return dn(x)&&(r=Cn(r,x.bitmask)),lF.find(([t])=>r===e[t])?.[1]??0}function c8(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&Js)===Js?1024-(e&Dn):0}case"f32":return XC(A,x.byteofs);case"f64":return YC(A,x.byteofs);default:return QC(x,A)}}function E8(x,A){let e=ui(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(dn(x)&&(e=Cn(e,x.bitmask)),e*x.vscale+x.vofs)}function ZC(x,A){let e=c8(x,A);if(e!==0)return f8(e);let r=E8(x,A);return Number.isNaN(r)?bt:LC(x,r)}function xd(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(hn(x.type)||li(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return c8(x,e)!==0?NaN:E8(x,e)}function Ad(x,A){if(r8(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 H0.cp1252Unpack(A,x.byteofs,x.size)}var B8=25569,C8=864e5;function ed(x){return(x-B8)*C8}function rd(x){return x/C8+B8}function td(x,A){if(x.type==="datetime")return wr(ed(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return wr(H0.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),wr(H0.stamp40ToMS(e))}var nd=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function sd(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function id(x){let A=x.default;if(A===void 0)return;if(hn(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===bt)return bt;if(nd.has(x.type))return sd(e,0);let r=di(e);return r!==null?r:A}function ad(x,A,e){return x.byteofs+x.size>e?id(x):hn(x.type)?Ad(x,A):li(x.type)?td(x,A):ZC(x,A)}function Vs(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)le(t)||pt(t.type)||(r[jn(t)]=ad(t,e,A.byteLength));return r}function od(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()===bt||A==="")return{kind:"sentinel",state:"NAN"};let e=KC.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=di(A);return r!==null?{kind:"value",physical:r}:fF(x)}return fF(x)}function fF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?di(A):null)??0}}function Ws(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,zC[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|zx[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(zx[e]),!1);default:break}let r=zs[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);d8(x,A,Number(r))}function Fd(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,l8(r),!1);default:break}if(Number.isNaN(r))return Ws(x,A,"NAN");if(!Number.isFinite(r))return Ws(x,A,"OF");let t=r;VC.has(x.type)&&t<0&&(t=0),d8(x,A,WC(t))}function d8(x,A,e){if(dn(x)){let r=ui(x.type,A,x.byteofs);e=t8(r,e,x.bitmask)}vd(x.type,A,x.byteofs,e)}function vd(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,UC(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function ld(x,A,e){let r=String(e);if(r8(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${jn(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}H0.cp1252Pack(A,x.byteofs,x.size,r)}function fd(x,A,e){let r=$r(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${jn(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,rd(r),!1);return}let t=H0.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 cd(x,A,e){if(hn(x.type))return ld(x,A,e);if(li(x.type))return fd(x,A,e);let r=od(x,e);switch(r.kind){case"skip":return;case"sentinel":return Ws(x,A,r.state);case"value":return Fd(x,A,r.physical)}}function Xs(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=>!le(n)&&!pt(n.type)).map(n=>[jn(n),n]));for(let[n,F]of Object.entries(A)){let v=s.get(n.toLowerCase());if(!v)throw new vi(n);cd(v,t,F)}return r}var cF=99,Ed=256,ye=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),A0(this,"container",x),this.name="DdeUnknownContainerError"}},mt=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"}},Di=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),A0(this,"field",x),this.name="DdeUnknownFieldError"}};function ys(x){return(x.alias??x.name).toLowerCase()}var Bd=class{constructor(x,A,e=gt){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=dt(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=Vs(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 ye(x);let r=dt(e);if(r===null)throw new ye(x);if(e.edit===cF)throw new mt(e.name);let{stamp:t,...s}=A;this.assertFieldsWritable(e,s);let n=await this.storage.getRowForTag(r),F=Xs(await this.resolveScaleRefs(e),s,n?.data??null),v=H0.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:x8(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ye(x);let r=dt(e);if(r===null)throw new ye(x);let{stamp:t,...s}=A,n=Xs(await this.resolveScaleRefs(e),s,null),F=H0.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 $r(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new ye(x);let r=this.model.splits.find(E=>E.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new ye(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,Ed);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=Vs(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 wr(H0.stamp40ToMS(KA(x.stamp)))}boundHex(x){if(x!=null)return cA(H0.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=xd(r,s);return n===null?e:n}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>ys(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=dt(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!le(r)&&!pt(r.type)).map(r=>[ys(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===cF)throw new mt(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!le(t)&&!pt(t.type)).map(t=>ys(t))),r=new Set;for(let t of A){let s=t.toLowerCase();if(s!=="stamp"){if(!e.has(s))throw new Di(t);r.add(s)}}return r}},Cd=new Set(["$titles","$meta"]);function dd(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 Ys(x,A){let e=A.toLowerCase();if(Cd.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 u8(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 yt(x,A){if(!x)return null;let e=Ys(x,A.name);return e||(A.alias?Ys(x,A.alias):null)}var ud=require("events"),R0="[OfflineSyncManager]",Dd=500,pd="site_info",bd=new Set(["local-data-interface.json"]);function Mx(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function md(x){let A=En(x);return!!(x&2)||A!==0&&A!==65}function EF(x){return x.filter(A=>(A.filename===_r||A.filename===si)&&A.outcome==="download").map(A=>A.filename)}var He="skip-equal",kr="skip-device-readonly",ks="delete",he="error",_s="upload",ws="uploading-utos",BF="downloading-utos",tn="fetching-device-state",Ss="uploading-files",nn="downloading-files",CF="executing-change-requests",dF="executed",jd="error",$s="skip-old-stamp",hd=class extends ud.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,Dd,F),this.logger?.info(`${R0} 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(`${R0} 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(`${R0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:He,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(`${R0} 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(`${R0} 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(ws,null,0,t);let s=0;for(let n of x){Mx(r);let F=A.get(n),{tagInfo:v,dbStamp40:E,deviceStamp40:u}=F;if(this.emitProgress(ws,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 D=v.sTag,m=s,_=v.historic?await this.uploadHistoricTag(n,v,E,u,h=>{this.emitProgress(ws,D,m,t,{recordsReceived:h})}):await this.uploadSingleTag(n,v,E,u);e.set(n,_)}++s}}async pullFileFromDevice(x,A,e,r,t,s){let n=A.stamp;try{let F=await this.utoMaster.requestFile(x,E=>{this.emitProgress(Ss,x,s,t,{bytesTransferred:E})}),v=ni(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:_s,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${R0} file upload error ${x}: ${JSON.stringify(F)}`),{filename:x,outcome:he,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:He,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:He,dbStamp40:r,deviceStamp40:t}}catch(s){return this.logger?.error(`${R0} file upload error ${x}: ${JSON.stringify(s)}`),{filename:x,outcome:he,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:kr,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=KA(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=En(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(Ss,null,0,s);let n=0;for(let[F,v]of t){if(Mx(r),!(F===si||F===_r&&!e)){let u=await this.decideFileUpload(F,v,s,n);u&&A.set(F,u)}this.emitProgress(Ss,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(`${R0} 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?He:"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:kr,dbStamp40:e,deviceStamp40:r};t.set(x,s)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(BF,null,0,t);let s=0;for(let n of x){Mx(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(BF,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(nn,x.filename,t,r,{bytesTransferred:v,bytesTotal:s})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,x.data,H0.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(F){return this.logger?.error(`${R0} 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=KA(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return n===s?void 0:{filename:x.filename,outcome:He,dbStamp40:n,deviceStamp40:s};if(!(!t&&n<s))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:kr,dbStamp40:n,deviceStamp40:s}:this.sendFileToDevice(x,n,s,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(pd);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${R0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),s=t.filter(D=>D.flags&8),n=t.filter(D=>!(D.flags&8)),F=[...s,...n].filter(D=>D.filename),v=Object.entries(x).filter(([,D])=>D._flags&4).map(([D])=>D),E=F.length;this.emitProgress(nn,null,0,E);let u=0;for(let D of F){if(Mx(r),e&&D.filename===_r){this.emitProgress(nn,D.filename,++u,E);continue}let m=D.filename===_r&&!e,_=await this.decideFileDownload(D,x[D.filename],A.get(D.filename),v,m,E,u);_&&A.set(D.filename,_),this.emitProgress(nn,D.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=KA(x.stamp),n=this.wantDownloadPush(x,A,s,t);if(n==="match")return{filename:x.filename,outcome:He,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:kr,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=En(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=KA(x.stamp);if(!(e&&(e.outcome===_s||e.outcome===he))){if(!(A._flags&2))return{filename:x.filename,outcome:kr,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:ks,dbStamp40:t,deviceStamp40:r}}catch(s){return this.logger?.error(`${R0} file delete error ${x.filename}: ${JSON.stringify(s)}`),{filename:x.filename,outcome:he,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,s=KA(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:ks,dbStamp40:s,deviceStamp40:null}}catch(n){return this.logger?.error(`${R0} file delete error ${x.filename}: ${JSON.stringify(n)}`),{filename:x.filename,outcome:he,dbStamp40:s,deviceStamp40:null}}if(!(x.flags&12)&&md(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(`${R0} 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))Mx(x),await this.reconcileDeviceFile(s,n,t.get(s)??null);for(let s of r)Mx(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(`${R0} 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||bd.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(`${R0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){Mx(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${R0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null){if(!A.serialNumber)throw new Error(`${R0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${R0} 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(`${R0} 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?KA(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(CF,null,0,v),v===0)return;let E=new Set,u=0;for(let[D,m]of F){Mx(s);let _=x.get(D),h=_?.sTag??`0x${D.toString(16)}`;this.emitProgress(CF,h,u,v),await this.executeChangeRequestTag(D,h,_,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:KA(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(D=>D.stamp40<=v),u=r.filter(D=>D.stamp40>v);this.pushChangeResults(n,x,A,E,$s),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===he||!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,dF,u.resultCode)):u.outcome==="denied"?(this.logger?.warn(`${R0} change-request denied ${A} (result=${u.resultCode}) \u2014 server will retry`),this.pushChangeResults(s,x,A,r,"denied",u.resultCode)):(this.logger?.error(`${R0} 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(H0.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${R0} 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(`${R0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${R0} 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(`${R0} 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(`${R0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${s}`)}for(let s of x)Mx(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(`${R0} 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(`${R0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${R0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],s=EF(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===He||n.outcome==="skip-db-readonly"||n.outcome===kr).length,totalHistoricRecordsAppended:r.reduce((n,F)=>n+(F.recordsAppended??0),0),totalFilesUploaded:t.filter(n=>n.outcome===_s).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===ks).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===dF).length,totalErrors:r.filter(n=>n.outcome===he).length+t.filter(n=>n.outcome===he).length+e.filter(n=>n.outcome===jd).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);Mx(A),this.emitProgress(tn,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${R0} requestStamps returned null`);this.emitProgress(tn,"stamps",1,3);let s=await this.utoMaster.requestFileList();this.emitProgress(tn,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(tn,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),v=new Map,E=new Map,u=[],D=await this.isAppInDevPhase();return Mx(A),await this.uploadUtoTags(n,F,v,A),Mx(A),await this.uploadFiles(s,E,D,A),Mx(A),await this.executeChangeRequests(r,t,F,v,u,A),Mx(A),await this.downloadUtoTags(n,F,v,A),Mx(A),await this.downloadFiles(s,E,D,A),Mx(A),EF([...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(`${R0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${R0} 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,_)=>m.stamp40-_.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!==$s)?.outcome??$s}},gd=require("events"),yd=require("events"),kd=require("events"),_d=5e3,pi=class D8 extends kd.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 VF(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=D8.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")))},_d),this.attachWebSocketHandlers(v,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},p8="https://lic.mydatanet.at/api/2/";async function b8(x,A=p8){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 m8=class extends yd.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 b8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let s=new pi(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}}},wd=require("events"),j8="Operation aborted";function Sd(x){return x instanceof Error?x.message:String(x)}function Ts(x){if(x?.aborted)throw new Error(j8)}var h8=class extends wd.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)}],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(j8);let v=`${n.name.toUpperCase()} sync phase failed: ${Sd(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){Ts(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}`),Ts(r),await x.initiateSync(r),Ts(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 pi(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()}}},$d=class extends gd.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 m8(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 h8(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(){}},Td=require("events"),kx={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=?"},U0={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+)/},Kx=1e4,g8=9e4,y8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function k8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var Je="Operation aborted",Ox=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},bi=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},Pd=class extends Td.EventEmitter{constructor(x,A=zA){super(),A0(this,"transport",x),A0(this,"logger",A),A0(this,"mutex",new ai("AtCommandHandler")),A0(this,"bufferState",k8()),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=Kx,s)=>this.executeSendAndWait(e,r,t,s),sendRaw:(e,r=Kx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(kx.MNT_CFG,U0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(kx.MDN_CFG,U0.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 Ox;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!==U0.ERROR&&s.includes(U0.ERROR)){A(),r(new bi);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 Ox);return}if(r?.aborted){s(new Error(Je));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(Je))};v.cleanup=this.makeCleanup(E,r,u),r&&r.addEventListener("abort",u);let D=this.makeResponseChecker(A,v.cleanup,t,s);this.responseCallback=D,this.activeAbort=()=>{v.cleanup(),s(new Ox)},!x&&this.bufferState.buffer&&D(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 Ox);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 Ox)},this.responseCallback=n=>{y8.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 Ox);return}if(e?.aborted){t(new Error(Je));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`))},Kx),F=()=>{s.cleanup(),t(new Error(Je))};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 Ox)},this.responseCallback=E=>{let u=E.match(v);if(u){s.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=>{s.cleanup(),this.logger.error(`Failed to send ${A} command: `+(E instanceof Error?E.message:String(E))),t(E)})})}async sendAndWait(x,A,e=Kx,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=Kx){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(kx.MNT_SYNC,U0.OK,Kx,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(kx.MDN_SYNC,U0.OK,Kx,x),await this.executeSendAndWait(null,U0.SYNC_START,Kx,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 Ox;if(A?.aborted)throw new Error(Je);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${kx.COMPANION_CERT}=${r}`,U0.OK,Kx,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(`${kx.COMPANION_CERT}=${F},${n},${v}`,U0.OK,Kx,A),n+=F}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Ox);return}if(A?.aborted){r(new Error(Je));return}this.bufferState.buffer="";let t={cleanup:()=>{}},s=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},Kx),n=()=>{t.cleanup(),r(new Error(Je))};t.cleanup=this.makeCleanup(s,A,n),A&&A.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Ox)},this.responseCallback=v=>{let E=v.match(U0.COMPCERT_ERROR);if(E){t.cleanup(),e({success:!1,errorCode:parseInt(E[1],10)});return}if(v.includes(U0.OK)){t.cleanup(),e({success:!0});return}v.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${kx.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(kx.COMPANION_CERT_TEST,U0.OK,Kx,x),!0}catch(A){if(A instanceof Ox)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(kx.CON_CLOSE,U0.CON_CLOSE,Kx,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(U0.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())}},_8=(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))(_8||{}),qd=require("events"),Ps="requesting-cert",qs="cert-revoked",w8=class Qs extends qd.EventEmitter{constructor(){super(...arguments),A0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??cn,{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||!ti(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(Ps),s(),F=await this.requestAndStoreCert(n,A)),this.utoMaster=new WF(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),s();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"),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 Ls();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await IF(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof Dt&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new Ns(qs,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await Qs.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 Ls();return await A.storage.saveKeypair(n),n})(),t=await Qs.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??cn).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(Ps),e=await this.requestAndStoreCert(r,t),s=await A.sendCompanionCert(e.base64Url,t.signal),s.success))return e;throw new Ns("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 Ns?(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 Dt?{success:!1,phase:Ps,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};A0(w8,"encodePublicKeyBase64Url",ri);var Nd=w8,Ns=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}},S8=(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))(S8||{}),Id={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 Md(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 Ld=require("events");function $8(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 T8(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function P8(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function Zs(x,A){return x.map((e,r)=>({name:e.name,displayValue:P8(A[r]??"",e.scale,e.offset),unit:e.unit}))}var Rd=2e3,q8=class extends Ld.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(kx.APP_GET_METADATA),A=x.includes(U0.OK)?{supported:!0,pinRequired:!1}:x.includes(U0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(U0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(U0.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?`${kx.APP_GET_METADATA}=${x}`:kx.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(U0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(U0.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(U0.OK)){let r=$8(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(U0.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?`${kx.APP_GET_DATAVALUE}=${A}`:kx.APP_GET_DATAVALUE,r=await x(e);if(r.includes(U0.OK)){let t=T8(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",Zs(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(kx.APP_TRIG_MEASURE_TEST)).includes(U0.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof Ox)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=g8,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let s=await t.sendRaw(kx.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+s),!s.includes(U0.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,U0.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 Ox)throw n;let F="timeout";return n instanceof bi?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${U0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:s}}})}async startPolling(x,A=Rd){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 Zs(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function Od(x,A,e){let r=s=>{if(s instanceof Ox)throw s},t=new q8(x);try{let s=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(s){let[D,m]=await Promise.all([x.queryCompanionCertSupport(e).catch(_=>(r(_),!1)),A?.getCertificate(s)]);E=D,u=m!=null&&ti(m.notAfter)}return{hostname:s,localData:v,secureConnection:E,validCert:u}}finally{t.dispose()}}var Gd=require("events"),Ud={0:"trigger",1:"wakeup",2:"online"},Hd={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"]},Jd={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},Sx={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},Kd=Sx.FAILED|Sx.ACTIVE|Sx.STARTED|Sx.RETRY|Sx.WAKEUPABLE|Sx.EXTSIM|Sx.DISABLED|Sx.WAKEUP|Sx.POSUPDATE_ACTIVE,uF=`${U0.RM2M_STATE}: `;function N8(x=0){let A=(x&Sx.WAKEUPABLE)!==0,e="offline",r=A;return x&Sx.POSUPDATE_ACTIVE?(e="locating",r=!1):x&Sx.RETRY?(e="retry",r=!1):x&Sx.STARTED?(e="dialing",r=!1):x&Sx.ACTIVE?(e="active",r=!1):x&Sx.FAILED?(e="failed",r=A):x&Sx.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&Sx.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~Kd}}function zd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:Ud[A]??x}function Vd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:Hd[A]??["unknown",`itf#${x}`,`itf#${x}`]}function Wd(x){if(x.length===0)return null;let A=x.join(",");return Jd[A]??A}function I8(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=Vd(s),E=s!==void 0?parseInt(s,10):NaN;return{stamp:new Date,rssi:E>=101?null:parseInt(e,10),state:F,uplinkState:N8(F),uplinkMode:zd(t),uplinkInterface:v?v[0]:null,uplinkInterfaceExtended:v?v[1]:null,uplinkInterfaceTechnical:v?v[2]:null,scriptState:Wd(n)}}function M8(x){let A=x.indexOf(uF);if(A===-1)return null;let e=x.substring(A+uF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?I8(t):null}var Xd=5e3,Yd=class extends Gd.EventEmitter{constructor(x,A=cn){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(kx.RM2M_STATE),A=M8(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=Xd){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()}},Qd=require("events"),L8=class extends Qd.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}}},Zd=require("events"),R8={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},xu=class extends Zd.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 L8,this.reconnectOptions={...R8,...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})})}},Au={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},eu={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"},ru=590,tu=3e4,w0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},EA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},gn=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},mi=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function BA(x){try{return decodeURIComponent(x)}catch{throw new w0("malformed url encoding")}}var nu=2e3,su=2136;function ji(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=nu&&A<=su}function Tr(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)&&!ji(e))throw new w0(`attribute '${A}' is not valid`)}}function iu(x){return typeof x.setMetadataValue=="function"?x:null}function au(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function hi(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function ou(x){return{status:200,body:x.ctx.siteInfo}}async function Fu(x){let{blueprint:A}=x.ctx;if(!A)throw new EA("blueprint unavailable");return{status:200,body:A}}async function vu(x){let{me:A}=x.ctx;if(A==null)throw new EA("no profile stored");return{status:200,body:A}}function O8(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 lu(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 fu=1024;function kt(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 G8(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(fu,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var gi=26432,Ye={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},U8=Object.keys(Ye),_t=["standby","commissioned","offline","commissioning","online"],xi=_t.reduce((x,A)=>x|Ye[A],0)>>>0;function H8(x){let A=0;for(let e of U8)x[e]===!0&&(A|=Ye[e]);return A>>>0}function yi(x,A){let e={};for(let r of U8)x&Ye[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function J8(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(gi);if(!r?.data)return!1;let t=kt(r.data);if(!t)return!1;let s=!1;if(typeof t.lifecycleFlags=="number"){let n=yi(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 cu=new Set([..._t,"service","lifecycle_state"]);function Eu(x,A){let e=Math.max(H0.msToStamp40((x.timeSource??gt).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function Bu(x){let A=Du(x.request.body??null);if(!A)throw new w0("invalid or missing request body");Cu(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!uu(r))throw new w0("this site does not support lifecycle flags!");let t=H8(r),s=t;for(let E of _t){let u=A[E];typeof u=="boolean"&&(s=u?s|Ye[E]:s&~Ye[E])}if(s>>>=0,s===t)return{status:204,body:""};let n=Eu(e,x.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~xi>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:s&xi}}),stamp40:n+1}],v=au(e.storage);return v&&await v.insertUtoChangeRequests(F.map(E=>({tag:gi,stamp40:E.stamp40,json:E.json}))),e.siteInfo.lifecycle_flags=yi(s,r),await K8(e),du(e,F),{status:204,body:""}}function Cu(x){let A=[];for(let[e,r]of Object.entries(x))cu.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 w0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!_t.includes(e)))throw new w0("invalid parameters")}async function du(x,A){try{let e=await lu(x,gi,A);e==="executed"?await J8(x.storage,x.siteInfo)&&await K8(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 K8(x){await iu(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function uu(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function Du(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 z8(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new w0('"select" must be an array')}}function pu(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new w0("invalid parameter, select must be an array")}}function bu(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(le(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function mu(x){let A=new Map;for(let e of x.fields){if(le(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function ju(x){let A=new Set;for(let e of x.fields)le(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function hu(x,A,e){if(!e)return null;let r=bu(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 V8(s);return t}function gu(x,A){let e=mu(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 V8(t);return s||r.unshift("stamp"),r}function yu(x,A){if(A===void 0)return;let e=ju(x),r=A.map(s=>s.toLowerCase()),t=r.filter(s=>!e.has(s));if(t.length>0)throw new w0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function ku(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 ki(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function V8(x){return new w0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function yn(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function _u(x){let A=x.ctx,e=BA(x.params[1]),r=yn(A.model,e);if(!r)throw new w0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new EA(`no data for container "${e}"`);let s=Su(A,r,t,wu(x));return{status:200,body:W8(A,e,s)}}function wu(x){let A=x.query.json??{};return z8(A.select)}function Su(x,A,e,r){let t=hu(A,yt(x.blueprint??null,A),r);return ku(e,t)}function W8(x,A,e){let r=x.model.byNameOrAlias(A);return r?u8(e,yt(x.blueprint??null,r)):e}async function $u(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 s=x.query.json??{},n=pu(s.select),F=yu(r,n);return{status:200,body:ki(t,F)}}async function Tu(x){let A=BA(x.params[1]);return X8(x,A,"canonical")}async function Pu(x){let A=BA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new EA(`unknown container "${A}"`);return X8(x,A,"legacy")}async function X8(x,A,e){let r=Ru(x);if(!r)throw new w0("invalid or missing request body");Tr(r);let{stamp:t,...s}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new w0("value(s) of field(s) stamp are not valid");let n=x.ctx;if(e==="canonical"&&!yn(n.model,A))throw new w0("container does not exist");let F=n.model.byNameOrAlias(A);if(F?.kind==="histdata")throw new EA(`unknown container "${A}"`);let v=e==="canonical"?Iu(n,F,s):Mu(F,s);try{let E=e==="canonical"&&t!==void 0?{...v,stamp:t}:v,u=await n.mapper.writeContainer(A,E);return u.devicePushable&&O8(n,u.tag,u.data,u.stamp40),{status:204,body:""}}catch(E){throw qu(E,A,e,n,F)}}function qu(x,A,e,r,t){if(x instanceof mt){let s=x.field?Nu(r,t,x.field,e):void 0;return e==="canonical"?s?new w0(`no permission to modify container field \`${s}\``):new w0(`no permission to modify container \`${A}\``):s?new gn(`unknown field name(s): ${s}`):new mi(`no permission to modify '${A}'`)}return x}function Nu(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():yt(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function Iu(x,A,e){if(!A)return e;let r=yt(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 Y8(A,t,e,s=>new w0(`unknown field name(s): ${s}`))}function Mu(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 Y8(x,e,A,r=>new gn(`unknown field name(s): ${r}`))}var Lu=new Set(["stamp","stamp4","stamp8","datetime"]);function Y8(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 D=t.get(u);if(D&&Lu.has(D.type)&&!(typeof E=="string"&&ji(E))){F.push(v);continue}s[u]=E}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new w0(`value(s) of field(s) ${F.join(",")} are not valid`);return s}function Ru(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=Ou(r);if(t===void 0)throw new w0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function Ou(x){try{return JSON.parse(x)}catch{return}}var Q8="x-mt-backfill",Z8="pending";async function _i(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"?{[Q8]:Z8}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var Gu=1e3,sn=1e3,xv="20000101",Av="*";async function Uu(x){let A=x.query.json??{};iv(A,["from","until","count","offset","select"]),Tr(A);let e=x.ctx,r=BA(x.params[1]),{mapperSelect:t,order:s}=rv(e,r,A.select);tv(e,r);let n=pn(A.from,xv,"from"),F=pn(A.until,Av,"until");nv(n,F),F!==null&&(F=Ju(F));let v=Ku(A.count),E=sv(A.offset),u=await _i(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=>ev(x,e,r,ki(m,s))),headers:u}}async function Hu(x){let A=x.query.json??{};iv(A,["from","until","offset","select"]),Tr(A);let e=x.ctx,r=BA(x.params[1]),t=x.params[2],{mapperSelect:s,order:n}=rv(e,r,A.select);tv(e,r);let F=pn(A.from,xv,"from"),v=pn(A.until,Av,"until");nv(F,v);let E=sv(A.offset),u=await _i(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:ev(x,e,r,ki(m,n)),headers:u}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:u}}function ev(x,A,e,r){return x.apiVersion==="1"?r:W8(A,e,r)}function rv(x,A,e){let r=z8(e);if(!r)return{mapperSelect:void 0,order:null};let t=yn(x.model,A);if(!t)return{mapperSelect:r,order:null};let s=gu(t,r),n=s.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:s}}function tv(x,A){if(!yn(x.model,A))throw new w0("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 $r(t)}catch{throw new w0(`attribute '${e}' is not valid`)}}function nv(x,A){if(x!==null&&A!==null&&x>A)throw new w0('E_BAD_REQUEST "from" value must be older than "until"')}function Ju(x){let A=H0.msToStamp40(x);return H0.stamp40ToMS(A)>=x&&(A-=1),H0.stamp40ToMS(A)}function Ku(x){if(x==null||x==="")return Gu;let A=Number(x);if(!Number.isInteger(A))throw new w0('"count" must be an integer');if(A===0)throw new w0("`count` cannot be 0");if(A<-sn)throw new w0(`"count" must be greater than or equal to -${sn}`);if(A>sn)throw new w0(`"count" must be less than or equal to ${sn}`);return A}function sv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new w0('"offset" must be an integer');if(A<0)throw new w0('"offset" must be greater than or equal to 0');return A}function iv(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new w0(`"${e}" is not allowed`)}var zu=1e5,Vu="20000101",Wu="*";async function Xu(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 s=x.query.json??{};Tr(s);let{fromMs:n,untilMs:F}=Zu(s);xD(n,F);let v=AD(s),E=eD(s),u=av(t,s.select)??["stamp"],D=bn(s.from)?await _i(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:D}}async function Yu(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 EA(`unknown container "${e}"`);let n=x.query.json??{};Tr(n);let F=av(s,n.select)??["stamp"],v=Qu(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 Qu(x){if(!(!bn(x.until)||x.until==="*"))try{return $r(String(x.until))??void 0}catch{throw new w0("from or until value invalid")}}function Zu(x){let A=bn(x.from),e=bn(x.until);if((!A||!e)&&!wi(x.count))throw new w0("missing or invalid parameters (from and until and/or count)");return{fromMs:DF(A?x.from:Vu),untilMs:DF(e?x.until:Wu)}}function xD(x,A){if(x!==null&&A!==null&&x>A)throw new w0('"from" value must be older than "until"')}function DF(x){let A=String(x);try{return $r(A)}catch{throw new w0(`invalid stamp "${A}"`)}}function AD(x){if(!wi(x.count))return zu;if(typeof x.count!="number")throw new w0("invalid parameter count");return x.count}function eD(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new w0("invalid parameter offset");return A}function av(x,A){if(A==null)return;if(!Array.isArray(A))throw new w0("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 w0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],s=new Set(x.fields.filter(F=>!le(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 w0(`invalid channel(s) ${n.join(",")}`);return t}function wi(x){return!!x}function bn(x){return typeof x=="string"?x.trim().length>0:wi(x)}var rD="device_id";function tD(x){return async A=>(await kn(A),{status:200,body:await sD(A.ctx,x)})}async function kn(x){let A=BA(x.params[0]),e=await nD(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new EA(`unknown device "${A}"`)}async function nD(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(rD)}async function sD(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=kt(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=wr(H0.stamp40ToMS(KA(e.stamp))),r):{}}function Si(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function iD(x){return async A=>{await kn(A);let e=FD(A.request.body??null);if(!e)throw new w0("invalid or missing request body");return Si(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?kt(r.data)??{}:{};return await $i(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function aD(x){return async A=>(await kn(A),Si(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await $i(A.ctx,x,e,{}),{status:204,body:""})}))}function oD(x){return async A=>{await kn(A);let e=BA(A.params[1]);return Si(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=kt(r.data)??{},s=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===s&&delete t[n];return await $i(A.ctx,x,r,t),{status:204,body:""}})}}function FD(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 $i(x,A,e,r){let t=G8(JSON.stringify(r),e?.data?.length??0),s=H0.msToStamp40((x.timeSource??gt).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:cA(s),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),O8(x,A,t,s)}var ov={"content-type":"application/json"},vD=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:vu,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:ou,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:Fu,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:Bu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:Hu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:Uu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:_u,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Tu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:Yu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:Xu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:$u,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Pu,checksUid:!0},...lD()];function lD(){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:tD(s),checksUid:!1})),r=Object.entries(A).flatMap(([t,s])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:iD(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:oD(s),checksUid:!1}]);return[...e,...r]}var fD=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function cD(x){let A=hi();return e=>Fv(x,e,A)}async function Fv(x,A,e=hi()){try{let[r,t]=CD(A.path),s=dD(t),n=BD(r,x);if(n===null)return Xe(404,"E_NOT_FOUND","unknown customer");let F=A.method.toUpperCase();for(let v of vD){if(v.method!==F)continue;let E=v.pattern.exec(n);if(!E)continue;let u=E.slice(1);if(v.checksUid&&!ED(x,u[0]))return Xe(404,"E_NOT_FOUND","unknown site");let D=/^\/api\/([12])\//.exec(n)?.[1]??"1",m=await v.handler({request:A,params:u,query:s,ctx:x,session:e,apiVersion:D});return pD(m)}return Xe(404,"E_NOT_FOUND","not found")}catch(r){return lv(r)}}function ED(x,A){return x.allowAnySiteUid===!0||A!==void 0&&BA(A)===x.siteUid}function BD(x,A){let e=fD.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 CD(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function dD(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&uD(A,e);return A}function uD(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=DD(t):x.params[r]=t}function DD(x){try{return JSON.parse(x)}catch{throw new w0("request supplied data which is not json formatted ")}}function pD(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...ov,...x.headers},body:A}}function vv(x,A){return{status:x,headers:{...ov},body:JSON.stringify(A)}}function lv(x){return x instanceof w0||x instanceof Di||x instanceof vi?Xe(400,"E_BAD_REQUEST",x.message):x instanceof gn||x instanceof mt?Xe(403,"E_FORBIDDEN",x.message):x instanceof mi?Xe(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof EA||x instanceof ye?Xe(404,"E_NOT_FOUND",x.message):vv(500,{err:x instanceof Error?x.message:String(x)})}function Xe(x,A,e){return vv(x,{err:`${A} ${e}`})}function bD(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 X6={};Af(X6,{APM:()=>p0,DDE:()=>lA,DDE_Core:()=>G0,DFILES:()=>Et,DLO:()=>ct,DefaultFiles:()=>t0,Dependencies:()=>Z0,DevError:()=>cx,DevExitCode:()=>wt,DevSession:()=>Ar,DeviceProfiles:()=>Ht,Diagnostics:()=>et,ENV:()=>ps,Globals:()=>dx,Helper:()=>j0,HttpMethod:()=>Qi,Library:()=>Ge,Log:()=>Fe,Manifest:()=>z,MyDatanetClient:()=>Rn,Package:()=>gx,Registry:()=>tx,build:()=>K6,buildDevelopmentInstallInfo:()=>sl,dev:()=>el,generateDevApmId:()=>Zi,install:()=>J6,pack:()=>W6,publish:()=>V6});module.exports=ef(X6);var px=require("vscode-uri");var gr=require("vscode-uri");var rf=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 Lt(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^rf[(e^x[r])&255];return(e^-1)>>>0}var Z6=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]),x7=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;(_=>{function x(h,S){let[P,I]=S,{line:R,col:G}=h.linePos(P);return{line:Number(R)-1,startCharacter:G-1,endCharacter:G+(I-P)}}_.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(h){return Lt(A.encode(h)).toString(16)}_.generateHashForLibraryName=e;function r(h){return Lt(A.encode(h)).toString(16)}_.generateHashForFilePath=r;function t(h){return Lt(h).toString(16).toUpperCase().padStart(8,"0")}_.generateCRC32ForFileContent=t;function s(h){try{let S=null;return h?.type==="Buffer"?S=Uint8Array.from(h.data):S=h,new TextDecoder("utf8").decode(S)}catch{return""}}_.convertBlobToString=s;function n(h=""){return h.replace(/\r\n|\n\r|\r/g,`
|
|
2199
2199
|
`)}_.normalizeLF=n;function F(h){try{let S=s(h);return n(S).split(`
|
|
2200
|
-
`)}catch{return[]}}_.convertBlobToStringArray=F,_.isNumeric=h=>!Array.isArray(h)&&h-parseFloat(h)+1>=0;function E(h){let S="",
|
|
2200
|
+
`)}catch{return[]}}_.convertBlobToStringArray=F,_.isNumeric=h=>!Array.isArray(h)&&h-parseFloat(h)+1>=0;function E(h){let S="",P=h.byteLength;for(let I=0;I<P;I++)S+=String.fromCharCode(h[I]);return btoa(S)}_.bufferToBase64=E;function u(h,S){let P=`${h}`.match(/\{\d*(index)(\+\d*)?}/g);if(P){let I=h;return P.forEach(R=>{let G=R.replace(/\+0$/,""),r0=G.match(/index/)?.[0];if(r0){let M=G.slice(1,-1).split(r0)[1],k=parseInt(M)||0;I=I.replace(R,`${S+k}`)}}),I}else return h}_.patchValueWithArrayInfo=u;let D={};function m(h,S,P){let I=D[h];I&&clearTimeout(I.timer),D[h]={timer:setTimeout(()=>{delete D[h],P()},S),handler:P}}_.defer=m})(j0||={});var Lo=require("image-dimensions"),Ro=require("file-type-checker");var v7=require("cross-fetch/polyfill"),pa=W0(require("openapi-fetch"));var pe=require("vscode-uri");var Ix="dist/",fa="dde/",Qn="dlo/",Zn=".studio/",ca="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=`${Zn}auto/`,e=`${Zn}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:`${Zn}libdeps/`,dev:{path:e,mirror:`${e}${v.fileNames.devMirror}`,deviceLog:`${e}${v.fileNames.devDeviceLog}`}},dist:{path:Ix,dloPath:`${Ix}dlo/`,mainAmxPath:`${Ix}dlo/${v.fileNames.mainAmx}`,mainAmxReportPath:`${Ix}dlo/${v.fileNames.mainAmxReport}`,ddeXmlPath:`${Ix}dde/${v.fileNames.ddeXml}`,ddeApiPath:`${Ix}api/`,ddeApi:`${Ix}api/${v.fileNames.ddeOpenApi}`,historyJson:`${Ix}dde/${v.fileNames.historyJson}`,povPath:`${Ix}pov`,povDetailsPath:`${Ix}pov/details`,dfilesPath:`${Ix}dfiles`,dfilesProperties:`${Ix}dfiles/properties.json`,bloPath:`${Ix}blo`,reportTemplate:`${Ix}/${v.fileNames.reportTemplate}`,definesTs:`${Ix}defines.ts`,definesAppTs:`${Ix}defines.app.ts`},dlo:{path:Qn,mainDLO:`${Qn}main.dlo`,mainINI:`${Qn}main.ini`},dde:{path:fa,mainDDE:`${fa}main.dde`},dfiles:{path:ca,mainDFILES:`${ca}/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/).`})(
|
|
2207
|
-
`))u.push(` ${R}`)}let
|
|
2208
|
-
`))}t.exportDefinesTs=e;function r(s,n){let F=[];return{result:s.replace(/\{\{([^}]+)\}\}/g,(E,u)=>{let
|
|
2209
|
-
`)),r=[]}return A}function
|
|
2206
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(t0||={});var Ca=W0(require("ini"));var tf=j0.convertBlobToString,nf=t0.filePaths.dlo.path,dx;(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 Z0.getAll(v),u={},D={},m={};for(let R in E){let G=Z0.dependencyToPath(s,R),r0=Z0.dependencyIdToName(R),M=pe.Utils.joinPath(G,nf,`${r0}.ini`);await Cr(n,M,u,D,m,r0);let k=pe.Utils.joinPath(G,t0.filePaths.defaultsIni);await Cr(n,k,u,D,m,r0)}if(z.isLibrary(v)){let R=pe.Utils.joinPath(s,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 Cr(n,R,u,D,m,v.name)}let _=v.dlo?.iniFile||t0.filePaths.dlo.mainINI,h=pe.Utils.joinPath(s,_);F&&await n.stat(h)&&F.warn(`${_} is deprecated. Please migrate your defines to app.ini in the project root.`);let S=Ff(_);if(await Cr(n,h,u,D,m,S),z.isLibrary(v)){let R=pe.Utils.joinPath(s,t0.filePaths.defaultsIni);await Cr(n,R,u,D,m,"defaults")}let P=sf(v,u,D,m),I=pe.Utils.joinPath(s,t0.filePaths.appIni);return await Cr(n,I,u,D,m,"app"),{flat:u,sections:D,definesWithSource:m,defaultsOnly:P}}t.read=A;async function e(s,n,F,v){let E=Object.entries(F.flat),u=[];for(let[_,h]of E){let S=F.definesWithSource[_];if(S?.comment){let I=Ea(S.comment);for(let R of I.split(`
|
|
2207
|
+
`))u.push(` ${R}`)}let P=Ba(h)?"number":"string";u.push(` ${_}: ${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[_,h]of E){let S=F.definesWithSource[_];if(S?.comment&&D.push(Ea(S.comment)),Ba(h))D.push(`globalThis.STUDIO_DEFINES['${_}'] = ${Number(h)};`);else{let P=h.replace(/\\/g,"\\\\").replace(/'/g,"\\'");D.push(`globalThis.STUDIO_DEFINES['${_}'] = '${P}';`)}}D.push(""),D.push("export {};"),D.push("");let m=pe.Utils.joinPath(s,v??t0.filePaths.dist.definesTs);await n.writeFile(m,D.join(`
|
|
2208
|
+
`))}t.exportDefinesTs=e;function r(s,n){let F=[];return{result:s.replace(/\{\{([^}]+)\}\}/g,(E,u)=>{let D=u.trim();return Object.hasOwn(n,D)?n[D]:(F.push(D),E)}),unresolvedKeys:F}}t.replaceDefineTemplates=r})(dx||={});function sf(x,A,e,r){if(z.isLibrary(x))return{flat:{...A},sections:structuredClone(e),definesWithSource:{...r}}}function af(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 of(x){let A={},e=x.split(/\r?\n/),r=[],t=null;for(let s of e){let n=af(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(`
|
|
2209
|
+
`)),r=[]}return A}function Ea(x){let A=x.split(`
|
|
2210
2210
|
`);return A.length===1?`/** ${A[0]} */`:`/**
|
|
2211
2211
|
${A.map(r=>` * ${r}`).join(`
|
|
2212
2212
|
`)}
|
|
2213
|
-
*/`}function
|
|
2214
|
-
${r}`:r||x}function
|
|
2213
|
+
*/`}function Ba(x){return x!==""&&!isNaN(Number(x))}function Ff(x){return(x.split("/").pop()||x).replace(/\.ini$/i,"")}function da(x,A,e){let r=A?`${e}: ${A}`:void 0;return x&&r?`${x}
|
|
2214
|
+
${r}`:r||x}function ua(x,A,e,r,t,s,n){let F=t?`${t}_${r}`:r,v={value:x,sourceUri:A,sourceLine:lf(e,r,t)};return s[F]&&(v.comment=`${n}: ${s[F]}`),v}function vf(x,A,e,r,t,s,n,F,v){r[x]||(r[x]={});for(let[E,u]of Object.entries(A)){let D=`${x}_${E}`,m=F[D],_=`${u}`;e[D]=_,r[x][E]=_;let h=ua(_,s,n,E,x,F,v);h.comment=da(t[D]?.comment,m,v),t[D]=h}}async function Cr(x,A,e,r,t,s){if(!await x.stat(A))return;let n=await x.readFile(A),F=tf(n),v=Ca.parse(F),E=A.toString(),u=F.split(/\r?\n/),D=of(F);for(let[m,_]of Object.entries(v))if(typeof _=="object"&&_!==null)vf(m,_,e,r,t,E,u,D,s);else{let h=D[m],S=`${_}`;e[m]=S;let P=ua(S,E,u,m,null,D,s);P.comment=da(t[m]?.comment,h,s),t[m]=P}}function lf(x,A,e){let r=e===null,t=e?`[${e}]`:null,s=new RegExp(`^\\s*${ff(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 ff(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Ot=W0(require("semver/preload")),{GET:xs,POST:Rt,PUT:Da}=(0,pa.default)();function oA(x){if(x)return{authorization:`Bearer ${x}`}}var tx;(_=>{_.getAPIUrl=h=>{let S="https://api.registry.microtronics.com";return h===dx.ENV.lucky?S="https://api.registry.lucky.ci.microtronics.com":h===dx.ENV.wynni&&(S="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:S+"/v1"}};async function A(h,S,P,I){let{data:R,error:G}=await xs("/publisher/{publisherId}/libraries/{libraryId}",{...(0,_.getAPIUrl)(I),headers:{...oA(h)},params:{path:{publisherId:S,libraryId:P}}});if(G)throw new Error(G.reason);return R}_.getLibraryProfile=A;async function e(h,S,P=!1){let I=await fetch(S,{headers:{...oA(h),...m(!0)}});if(I.status===200)return P?await I.json():await I.arrayBuffer();throw new Error("Failed to fetch the library content")}_.fetchCustomContent=e;async function r(h,S,P){try{let{data:I,error:R}=await xs("/publisher/{publisherId}",{...(0,_.getAPIUrl)(P),headers:{...oA(h)},params:{path:{publisherId:S}}});return R?(console.error(R),null):I}catch(I){return console.error(I),null}}_.getPublisher=r;async function t(h,S,P,I){try{let{data:R,error:G}=await Rt("/packages/{publisherId}/applications",{...(0,_.getAPIUrl)(I),headers:{...oA(h),...m(!0)},params:{path:{publisherId:S}},body:{...P}});if(G)throw new Error(G.reason);return R.id}catch{return null}}_.createNewApplication=t;async function s(h,S,P,I){let{data:R,error:G}=await xs("/publisher/{publisherId}/applications/{applicationId}",{...(0,_.getAPIUrl)(I),headers:{...oA(h),...m(!0)},params:{path:{publisherId:S,applicationId:P}}});if(G)throw new Error(G.reason);return R}_.getExistingApplication=s;async function n(h,S,P,I,R){try{let{error:G}=await Da("/packages/{publisherId}/applications/{applicationId}",{...(0,_.getAPIUrl)(R),headers:{...oA(h),...m(!0)},params:{path:{publisherId:S,applicationId:P}},body:{...I}});if(G)throw new Error(G.reason);return}catch{return null}}_.updateExistingApplication=n;async function F(h,S,P,I,R,G){let r0=!!Ot.default.valid(I);try{let{error:M}=await Da("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,_.getAPIUrl)(G),headers:{...oA(h),...m(r0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:I}},body:{...R}});if(M)throw new Error(M.reason);return}catch{return null}}_.updateExistingApplicationVersion=F;async function v(h,S,P,I,R,G){let r0=!!Ot.default.valid(I),{data:M,error:k}=await Rt("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,_.getAPIUrl)(G),headers:{...oA(h),...m(r0)},params:{path:{publisherId:S,applicationId:P,applicationVersion:I}},body:{},bodySerializer(){return R}});if(k)throw new Error(k.reason||k.err||k);return M}_.publishApplicationVersion=v;let E={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function u(h,S,P,I,R,G){try{let{error:r0}=await Rt("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,_.getAPIUrl)(G),headers:{...oA(h),...m(!0)},params:{path:{publisherId:S,libraryId:P,libraryVersion:I}},body:{...R},bodySerializer(M){let k=new FormData;for(let[L,Z]of Object.entries(M))Z!==void 0&&k.append(L,new Blob([Z],{type:E[L]}),L);return k}});if(r0)throw new Error(r0.reason)}catch(r0){throw console.error(r0),r0}}_.publishLibraryVersion=u;async function D(h,S,P,I,R,G,r0){let M=!!Ot.default.valid(I),{error:k}=await Rt("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,_.getAPIUrl)(r0),headers:{...oA(h),...m(M),"Content-Type":"application/octet-stream"},params:{path:{publisherId:S,applicationId:P,applicationVersion:I,applicationFileName:R}},body:{},bodySerializer(){return G}});if(k)throw new Error(k.reason)}_.updateApplicationFile=D;function m(h=!1){return h?{"X-Semver":"true"}:{}}_.injectSemverHeader=m})(tx||={});var Oo=W0(require("semver/preload"));var ae=require("vscode-uri");var Ue=require("vscode-uri");var ux=require("vscode-uri");var Ha=W0(require("ajv")),Ja=W0(require("ajv-formats"));var ba={$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.
|
|
2215
2215
|
|
|
2216
|
-
\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.
|
|
2216
|
+
\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.
|
|
2217
2217
|
|
|
2218
|
-
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
|
|
2218
|
+
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
|
|
2219
2219
|
|
|
2220
2220
|
Use this container for **low-frequency state changes**.
|
|
2221
2221
|
|
|
@@ -2309,40 +2309,40 @@ Accepts a number (\u2265 0) or a relation link (\`@container.field\`).`,minimum:
|
|
|
2309
2309
|
|
|
2310
2310
|
\u26A0\uFE0F **Important:** This does not activate any alarming. Alarming must be implemented in the DLO.
|
|
2311
2311
|
|
|
2312
|
-
Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var Xt=require("yaml");var pe=require("yaml");var et;(A=>A.CODE={ddeFieldLength:"field_name_length"})(et||={});var G0;(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;(f0=>(f0.configA="configA",f0.configB="configB",f0.configC="configC",f0.config0="config0",f0.config1="config1",f0.config2="config2",f0.config3="config3",f0.config4="config4",f0.config5="config5",f0.config6="config6",f0.config7="config7",f0.config8="config8",f0.config9="config9",f0.histdata0="histdata0",f0.histdata1="histdata1",f0.histdata2="histdata2",f0.histdata3="histdata3",f0.histdata4="histdata4",f0.histdata5="histdata5",f0.histdata6="histdata6",f0.histdata7="histdata7",f0.histdata8="histdata8",f0.histdata9="histdata9",f0.aloha="aloha",f0.alerts="alerts",f0.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;(S0=>(S0.up="up",S0.down="down",S0.upPlus="up+",S0.downPlus="down+",S0.none="none",S0.backendOnly="backend-only",S0.deviceOnly="device-only",S0.both="both",S0.bothPlus="both+",S0.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"],_=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];J.allowedRelationTypes={title:m,unit:m,chartMinimum:_,chartMaximum:_,scale:_,offset:_,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:_,chartAlarmHigh:_,chartWarningLow:_,chartWarningHigh:_,chartHysteresis:_,chartTriggerThreshold:_,chartTriggerRelation:_,chartSetPoint:_};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("."),[,l0]=U.split("@"),B0=Object.values(n0.containers).find(vx=>vx.title===l0),d0=v0.join("."),S0=s0?";":"%",I0=(s0?"":"%")+(B0?.name||l0)+S0;if(I0=I0+`${d0}`,s0){let vx=n0.setPointList[a0.name];I0=I0+`;actual_output_value_${vx}`}return I0}else return Z}J.parseXMLValueWithRelation=S;function q(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=q;function M(H){return H.type==="binary"?H.defaultValue.substring(2):H.defaultValue==="NaN"?"NAN":H.defaultValue}J.parseXMLDefaultValue=M,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 O={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,...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"}}},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 L=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function Q(H){let a0=H.toLowerCase();return L.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})(G0||={});var te=G0.DDEContainerName,Da=G0.allowedRelationTypes,ll=G0.regexRelation,cl=G0.ContainerType,El=G0.checkForReservedFieldName,Ot=G0.ContainerName,pa=G0.CONTAINER_DEFS,Bl=G0.SERVER_CONTAINER,Cl=G0.HISTDATA_CONTAINER,dl=G0.CONFIG_CONTAINER,Cr=G0.TransferDirection,ba=G0.fieldTypeDefinitions,Yx=j0.yamlRangeToLineInformation,Gt;(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 pe.LineCounter,F=(0,pe.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null};let v=F.contents||new pe.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(te)];if(r.get("cloudProject")){let m=Object.values(this.previousVersion.containers).map(S=>S.title),_=[...r.keys()].filter(S=>!this.reservedTopLevelKeys().has(S)),h=[...new Set([...u,...m,..._])];u.length=0,u.push(...h)}for(let m of u)r.has(m)&&E.set(m,r.get(m));let p=r.get("timeseries");if(p)for(let[m,_]of p)E.set(m,_);for(let[m,_]of E){let{realContainer:h,transferDirection:S,legacyTitle:q}=this.getRealContainerInformation(m);if(!h){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?Yx(s,t0):{line:0,startCharacter:0,endCharacter:0}});continue}let M=pa[h],R=m.includes("timeseries_")?m.replace("timeseries_",""):m,O={name:h,title:R,previousTitle:q,containerType:M.ctype,volatile:m===te.volatile,transferDirection:S,fieldCount:_.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};F&&O.libraries.push(F);for(let[t0,I]of _){let k=[],L=I.get("type"),Q=ba[L];if(!(!Q&&L!=="array")){if(L==="array"){let K=[],J=I.get("length"),H=I.get("fields"),a0={name:t0,length:J,library:F||null,fields:[]};O.arrays[t0]=a0;for(let n0=0;n0<J;n0++){let Z={name:t0,index:n0};for(let[s0,U]of H){let v0=ba[U.get("type")];if(!v0)continue;a0.fields?.find(S0=>S0.name===s0)||a0.fields.push({name:s0,type:U.get("type"),byteSize:v0.len||U.get("bytes")||U.get("length")});let l0=`${t0}[${n0}].${s0}`,{fields:B0,shadowInfo:d0}=this.createDDEJsonFields(l0,F,v0,U);B0.forEach(S0=>{S0.arrayRef=Z}),d0&&(O.shadows[d0.name]=d0),K.push(...B0)}}k.push(...K)}else{let{arrayInfo:K,fields:J,shadowInfo:H}=this.createDDEJsonFields(t0,F,Q,I);K&&(O.arrays[K.name]=K),H&&(O.shadows[H.name]=H),k.push(...J)}k.forEach(K=>{K.index=++O.fieldIndex,O.fields.push(K),O.size+=K.byteSize})}}v.containers[h]=O}return v}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants","timeseries",...Object.values(te)])}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=[te.setting,te.command].includes(r)?Cr.down:Cr.up),s===Cr.up&&t&&pa[t].xmits.includes(Cr.upPlus)&&(s=Cr.upPlus),t&&[Ot.configA,Ot.configB].includes(t)&&(s=Cr.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===Ot.aloha)return Ot.aloha;let t=dl;r.startsWith("timeseries_")?t=Cl:[te.relations,te.storage].includes(r)&&(t=Bl);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[_,h]of m){let S=_;r.includes(".")&&(S=r.split(".")[0]+`.${_}`),v.push(this.buildDDEJsonField(S,h,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,pe.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`,...Yx(s,t.key.range)})}if(V.isAnalytics(this.manifest)&&![te.relations,te.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(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 _=E?.fields.find(O=>O.id===m.toLowerCase()),h=u.value,S=h.get("type",!0),q=this.resolvePossibleAlias(r,S),M=h.get("bytes",!0),R=this.resolvePossibleAlias(r,M);_&&(S&&q&&_.type!==q&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${_.type}" to "${q}".
|
|
2313
|
-
Changing the type of an existing field can result in data loss or unexpected behaviour.`,...
|
|
2314
|
-
Changing the size of an existing field can result in data loss or unexpected behaviour.`,...
|
|
2315
|
-
`)}function
|
|
2316
|
-
`);if(u.length===1)x(`/** ${u[0]} */`);else{x("/**");for(let
|
|
2312
|
+
Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var Yt=require("yaml");var be=require("yaml");var et;(A=>A.CODE={ddeFieldLength:"field_name_length"})(et||={});var G0;(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;(f0=>(f0.configA="configA",f0.configB="configB",f0.configC="configC",f0.config0="config0",f0.config1="config1",f0.config2="config2",f0.config3="config3",f0.config4="config4",f0.config5="config5",f0.config6="config6",f0.config7="config7",f0.config8="config8",f0.config9="config9",f0.histdata0="histdata0",f0.histdata1="histdata1",f0.histdata2="histdata2",f0.histdata3="histdata3",f0.histdata4="histdata4",f0.histdata5="histdata5",f0.histdata6="histdata6",f0.histdata7="histdata7",f0.histdata8="histdata8",f0.histdata9="histdata9",f0.aloha="aloha",f0.alerts="alerts",f0.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;(S0=>(S0.up="up",S0.down="down",S0.upPlus="up+",S0.downPlus="down+",S0.none="none",S0.backendOnly="backend-only",S0.deviceOnly="device-only",S0.both="both",S0.bothPlus="both+",S0.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 s=["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: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+"]}},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"],_=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];U.allowedRelationTypes={title:m,unit:m,chartMinimum:_,chartMaximum:_,scale:_,offset:_,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:_,chartAlarmHigh:_,chartWarningLow:_,chartWarningHigh:_,chartHysteresis:_,chartTriggerThreshold:_,chartTriggerRelation:_,chartSetPoint:_};function S(J,a0,s0){let Q=a0[J];if(Q!==void 0)if(U.regexRelation.exec(`${Q}`)){let i0=J==="chartSetPoint",[H,...v0]=Q.split("."),[,l0]=H.split("@"),B0=Object.values(s0.containers).find(vx=>vx.title===l0),d0=v0.join("."),S0=i0?";":"%",P0=(i0?"":"%")+(B0?.name||l0)+S0;if(P0=P0+`${d0}`,i0){let vx=s0.setPointList[a0.name];P0=P0+`;actual_output_value_${vx}`}return P0}else return Q}U.parseXMLValueWithRelation=S;function P(J){let{bitmask:a0}=J;if(!a0)return;let s0="$",Q=a0.replaceAll(" ","");if(a0.startsWith("0x"))s0+=Q.substring(2);else if(Q.startsWith("0b")){let i0=Q.substring(2).replaceAll(" ","");s0+=parseInt(i0,2).toString(16).toUpperCase()}return s0}U.parseXMLBitmask=P;function I(J){return J.type==="binary"?J.defaultValue.substring(2):J.defaultValue==="NaN"?"NAN":J.defaultValue}U.parseXMLDefaultValue=I,U.TDEF_NUMBER={xmlOut(J,a0,s0){J.decpl=S("decimalPlaces",a0,s0),J.decpl===void 0&&(J.decpl=0),J.vscale=S("scale",a0,s0),J.vofs=S("offset",a0,s0),J.min=S("chartMinimum",a0,s0),J.max=S("chartMaximum",a0,s0)}};let G={isBlob:1,xmlOut(J,a0){J.max=a0.byteSize}},r0={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,...r0,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,...r0,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,...G,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,...G,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,...G,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,...G,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,...G,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,...G,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})(G0||={});var ne=G0.DDEContainerName,ma=G0.allowedRelationTypes,Ef=G0.regexRelation,rt=G0.ContainerType,Bf=G0.checkForReservedFieldName,Gt=G0.ContainerName,As=G0.CONTAINER_DEFS,Cf=G0.SERVER_CONTAINER,df=G0.HISTDATA_CONTAINER,uf=G0.CONFIG_CONTAINER,yx=G0.TransferDirection,ja=G0.fieldTypeDefinitions,Jx=j0.yamlRangeToLineInformation,es="flexibleContainers",Ut;(A=>{class x{constructor(r,t,s){this.manifest=r;this.libraryFiles=t;this.ddeHistory=s}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: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,parsedYaml:F,lineCounter:v}=this.parseYamlFile(r,t);return n.find(D=>D.level==="error")?{ddeJSON:null,diagnostics:n}:{ddeJSON:this.mergeAndFormat(s,r,v,F),diagnostics:[...this.fileDiagnostics]}}parseYamlFile(r,t,s){this.fileDiagnostics.length=0;let n=new be.LineCounter,F=(0,be.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null,lineCounter:n};let v=F.contents||new be.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,lineCounter:n}}yamlDocToDdeJson(r,t,s,n,F){F||(this.flexibleContainers=this.readFlexibleContainers(r.get(es)));let v={containers:{},setPointList:{}},E=new Map,u=[...Object.values(ne)];if(r.get("cloudProject")){let m=Object.values(this.previousVersion.containers).map(S=>S.title),_=[...r.keys()].filter(S=>!this.reservedTopLevelKeys().has(S)),h=[...new Set([...u,...m,..._])];u.length=0,u.push(...h)}for(let m of u)r.has(m)&&E.set(m,r.get(m));let D=r.get("timeseries");if(D)for(let[m,_]of D)E.set(m,_);for(let[m,_]of E){let{realContainer:h,transferDirection:S,legacyTitle:P,directionFromHistory:I}=this.getRealContainerInformation(m);if(!h){let M=this.findContainerKeyRange(n,m);this.fileDiagnostics.push({file:t,level:"error",message:`Container "${m}" could not be placed - no free container slot available.`,...M?Jx(s,M):{line:0,startCharacter:0,endCharacter:0}});continue}I&&this.isPlusDirection(S)&&this.historyPlusDirectionContainers.add(h);let R=As[h],G=m.includes("timeseries_")?m.replace("timeseries_",""):m,r0={name:h,title:G,previousTitle:P,containerType:R.ctype,volatile:m===ne.volatile,transferDirection:S,fieldCount:_.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};F&&r0.libraries.push(F);for(let[M,k]of _){let L=[],Z=k.get("type"),W=ja[Z];if(!(!W&&Z!=="array")){if(Z==="array"){let U=[],J=k.get("length"),a0=k.get("fields"),s0={name:M,length:J,library:F||null,fields:[]};r0.arrays[M]=s0;for(let Q=0;Q<J;Q++){let i0={name:M,index:Q};for(let[H,v0]of a0){let l0=ja[v0.get("type")];if(!l0)continue;s0.fields?.find(P0=>P0.name===H)||s0.fields.push({name:H,type:v0.get("type"),byteSize:l0.len||v0.get("bytes")||v0.get("length")});let B0=`${M}[${Q}].${H}`,{fields:d0,shadowInfo:S0}=this.createDDEJsonFields(B0,F,l0,v0);d0.forEach(P0=>{P0.arrayRef=i0}),S0&&(r0.shadows[S0.name]=S0),U.push(...d0)}}L.push(...U)}else{let{arrayInfo:U,fields:J,shadowInfo:a0}=this.createDDEJsonFields(M,F,W,k);U&&(r0.arrays[U.name]=U),a0&&(r0.shadows[a0.name]=a0),L.push(...J)}L.forEach(U=>{U.index=++r0.fieldIndex,r0.fields.push(U),r0.size+=U.byteSize})}}v.containers[h]=r0}return v}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants",es,"timeseries",...Object.values(ne)])}getRealContainerInformation(r){let t,s,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,s=u,n=D,F=s!==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),s||(s=[ne.setting,ne.command].includes(r)?yx.down:yx.up),t&&[Gt.configA,Gt.configB].includes(t)&&(s=yx.backendOnly,F=!1),{realContainer:t,transferDirection:s,legacyTitle:n,directionFromHistory:F}}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===Gt.aloha)return Gt.aloha;let t=uf;r.startsWith("timeseries_")?t=df:[ne.relations,ne.storage].includes(r)&&(t=Cf);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 D=0;D<F;D++){let m=`${r.toLowerCase()}[${D}]`;v.push(this.buildDDEJsonField(m,n,{name:r,index:D},s,t,null))}}else{let D=this.buildDDEJsonField(r,n,null,s,t,null);v.push(D);let m=n.get("shadowFields");if(m){u={name:D.name,byteSize:D.byteSize,byteOffset:D.byteOffset};for(let[_,h]of m){let S=_;r.includes(".")&&(S=r.split(".")[0]+`.${_}`),v.push(this.buildDDEJsonField(S,h,null,s,t,D.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,be.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",es].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`,...Jx(s,t.key.range)})}if(z.isAnalytics(this.manifest)&&![ne.relations,ne.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.`,...Jx(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 _=E?.fields.find(G=>G.id===m.toLowerCase()),h=u.value,S=h.get("type",!0),P=this.resolvePossibleAlias(r,S),I=h.get("bytes",!0),R=this.resolvePossibleAlias(r,I);_&&(S&&P&&_.type!==P&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${_.type}" to "${P}".
|
|
2313
|
+
Changing the type of an existing field can result in data loss or unexpected behaviour.`,...Jx(n,S.range)}),I&&R&&_.byteSize!==R&&this.fileDiagnostics.push({file:t,level:"warning",message:`Byte size changed from '${_.byteSize}' to '${R}'.
|
|
2314
|
+
Changing the size of an existing field can result in data loss or unexpected behaviour.`,...Jx(n,I.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&&Ef.exec(`${u.value}`)){let D=E.key.value;if(D){if(!Object.hasOwn(ma,D))return this.fileDiagnostics.push({file:s,level:"error",message:`Property "${D}" does not allow relations.`,...Jx(n,u.range)});if(["scale","offset"].includes(D))return this.fileDiagnostics.push({file:s,level:"warning",message:`Container relations for "${D}" are not available within the dlo source.`,...Jx(n,u.range)})}return this.validateContainerRelation(D,u,t,s,n)}})}validateFieldName(r,t,s,n){let F=this.fieldNamesPerContainer[t],v=r.key,E=v.value;Bf(E)&&this.fileDiagnostics.push({file:s,level:"error",message:`Reserved property "${E}" is not allowed.`,...Jx(n,v.range)});let u=r.value.get("shadowFields");u&&u.items.forEach(D=>{this.validateFieldName(D,t,s,n)}),F.includes(E.toLowerCase())?this.fileDiagnostics.push({file:s,level:"error",message:`Field name "${E}" is already occupied`,...Jx(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}_`,D=31-u.length;u.length+v.length>31&&this.fileDiagnostics.push({file:s,level:"error",code:et.CODE.ddeFieldLength,message:`Field name "${v}" to long. ${D} characters allowed for this field/container.`,...Jx(n,F.range)})}validateContainerRelation(r,t,s,n,F){let[v,E,u]=t.value.split(".",3),[D,m]=v.split("@"),_=D?D.split(":")[1]:null,S=(_&&this.libraryYaml[_]?this.libraryYaml[_]:s).contents?.get(m),P=E.split("[")[0],I=null;if(S){let R=S.get(P);if(R)if(u){let G=R.get("fields");G&&G.get(u)&&(I=G.get(u))}else I=R;else I=this.findRelatedShadowField(S,P)}if(I){let R=ma[r],G=I.get("type");R.includes(G)||this.fileDiagnostics.push({file:n,level:"error",message:`Related field type "${G}" is not allowed for attribute "${r}".`,...Jx(F,t.range)})}else _&&!this.libraryYaml[_]?this.fileDiagnostics.push({file:n,level:"error",message:`Related library "${_}" does not exist.`,...Jx(F,t.range)}):this.fileDiagnostics.push({file:n,level:"error",message:`Related field "${t.value}" does not exist.`,...Jx(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,t,s,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,s,n)}return this.sortContainerFields(F),this.generateSetPointList(F),F}readFlexibleContainers(r){let t=s=>r instanceof Map?r.get(s)===!0:r&&typeof r=="object"?r[s]===!0:!1;return{timeseries:t("timeseries"),config:t("config")}}flexibleSwitchGroupFor(r){let t=As[r]?.ctype;if(t===rt.hx)return"timeseries";if(t===rt.cx||t===rt.aloha)return"config"}flexibleSwitchFor(r){let t=this.flexibleSwitchGroupFor(r);return t?this.flexibleContainers[t]:void 0}isPlusDirection(r){return r===yx.upPlus||r===yx.downPlus||r===yx.bothPlus}normalizeTransferDirection(r,t){let s=As[r]?.xmits,n=this.flexibleSwitchFor(r);if(!s||n===void 0)return t;let v=(n?[[yx.up,yx.upPlus],[yx.down,yx.downPlus],[yx.both,yx.bothPlus]]:[[yx.upPlus,yx.up],[yx.downPlus,yx.down],[yx.bothPlus,yx.both]]).find(([E,u])=>t===E&&s.includes(u));return v?v[1]:t}warnIfHistoryDirectionNarrowed(r,t,s,n,F){if(!this.historyPlusDirectionContainers.has(r.name)||!this.isPlusDirection(t)||r.transferDirection===t)return;let v=this.flexibleSwitchGroupFor(r.name),E=r.containerType===rt.hx?`timeseries_${r.title}`:r.title,u=F?this.findContainerKeyRange(F,E):void 0;this.fileDiagnostics.push({file:s,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?Jx(n,u):{line:0,startCharacter:0,endCharacter:0}})}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 D=F.shadows[u.shadowRef];u.byteOffset=D.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===rt.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(D=>!D.shadowRef),s=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 s.forEach(D=>{D.byteOffset=r.shadows[D.shadowRef].byteOffset,n.push(D)}),{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 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 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})(Ut||={});var Zx=G0.TransferDirection,mA=G0.parseXMLValueWithRelation,Df=G0.parseXMLBitmask,pf=G0.parseXMLDefaultValue,bf=G0.fieldTypeDefinitions;function rs(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!==Zx.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={};[Zx.none,Zx.backendOnly,Zx.deviceOnly,Zx.down,Zx.downPlus].includes(v.transferDirection)&&s("upload","0"),[Zx.none,Zx.backendOnly,Zx.deviceOnly,Zx.up,Zx.upPlus].includes(v.transferDirection)&&s("download","0"),(z.isIotApp(x)||z.isLibrary(x))&&[Zx.up,Zx.upPlus].includes(v.transferDirection)&&s("edit","99");for(let u of v.fields){if(u.type==="shadow")continue;let D=mf(u),m=bf[D.type],_=mA("title",D,A)||D.name;!_.startsWith("%")&&D.library&&(_=`${D.library}: ${_}`);let h={title:_,alias:D.name,index:u.index,...E};h.byteofs=`${D.byteOffset}`;for(let[S,P]of Object.entries(m.xml))h[S]=P;Object.hasOwn(m,"xmlOut")&&m.xmlOut(h,D,A),h.units=mA("unit",D,A),h.chmode=mA("channelMode",D,A),h.ialarm_high=mA("chartAlarmHigh",D,A),h.ialarm_low=mA("chartAlarmLow",D,A),h.iwarn_high=mA("chartWarningHigh",D,A),h.iwarn_low=mA("chartWarningLow",D,A),h.hysterese=mA("chartHysteresis",D,A),h.itrigger=mA("chartTriggerThreshold",D,A),h.itriggerus=mA("chartTriggerRelation",D,A),h.setpoint=mA("chartSetPoint",D,A),h.bitmask=Df(D),D.hex&&(h.editmask="%HEX%"),D.readPermission&&(h.view=D.readPermission),D.writePermission&&(h.edit=D.writePermission),D.defaultValue!==void 0&&(h.default=pf(D)),D.utilsTransferInterval===!0&&(h.param0="%FFFF0005%transfer_interval"),t("<field>"),D.library&&t(`// declared by ${D.library} library`,!0);for(let[S,P]of Object.entries(h))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(`
|
|
2315
|
+
`)}function mf(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 OA=W0(require("semver"));var hA=W0(require("semver"));var dr={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},ts={max_size:1e5,max_fields:1e3},RA={max_size:4e3,max_fields:1e3},jA={max_size:1024,max_fields:1e3},ur={configA:ts,configB:ts,configC:ts,config0:RA,config1:RA,config2:RA,config3:RA,config4:RA,config5:RA,config6:RA,config7:RA,config8:RA,config9:RA,histdata0:jA,histdata1:jA,histdata2:jA,histdata3:jA,histdata4:jA,histdata5:jA,histdata6:jA,histdata7:jA,histdata8:jA,histdata9:jA,aloha:{...jA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},Ht={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:ur,auto_inc:{...dr,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:ur,auto_inc:{...dr,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:ur,auto_inc:{...dr,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:ur,auto_inc:{...dr,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:ur,auto_inc:{...dr,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:ur,auto_inc:{...dr,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 is=require("vscode-uri");var wx=G0.ContainerType,M0=G0.TransferDirection,tt=G0.regexRelation,jf=G0.CONFIG_CONTAINER,ss=G0.CONTAINER_DEF_DLO_CID_BASE,it=G0.CONTAINER_DEFS,st=G0.fieldTypeDefinitions,ga=j0.isNumeric;function FA(x){let A=st[x.type];return A.pwn.rwp||(A.pwn.rwp="%n"),A.pwn.htype||(A.pwn.htype=A.pwn.rwfunc),A.pwn}var Jt="Microtronics/dlo-core";function as(x){return z.isLibrary(x)&&x.name==="dlo-core"?x.version:x.libraryDependencies&&Object.hasOwn(x.libraryDependencies,Jt)?Z0.rangeToVersion(x.libraryDependencies[Jt]):x.libraryDevDependencies&&Object.hasOwn(x.libraryDevDependencies,Jt)?Z0.rangeToVersion(x.libraryDevDependencies[Jt]):null}function hf(x){let A=as(x);return A===null||hA.gte(A,"0.3.0")?hA.valid(x.version)?x.version:hA.coerce(`${x.version}`):hA.coerce(x.version)?.major}function ns(x){let A=as(x);if(A===null)return!1;let e=hA.coerce(A);return hA.gte(e,"1.1.0")}function gf(x){let A=as(x);if(A===null)return!1;let e=hA.coerce(A);return hA.gte(e,"1.15.0")}var yf=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function kf(x){if(x.type==="ustring")return!1;if(x.defaultValue!=="NaN")return!0;let A=FA(x);return!A||A==="skip"?!1:yf.includes(`${A.rwfunc}`)}function _f(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}=Ht[r];A("APM_DPID",`${r}`),A(`APM_DPID_${r}`,"1"),A(`APM_DPID_${r.toUpperCase()}`,"1"),A("APM_ID",t?.id||"");let n=hf(e);A("APM_VERSION",`${n}`),A("APM_NAME",`${e.name}`),A("APM_AUTHOR",`${e.publisher}`);for(let[F,v]of Object.entries(s))ga(v)?A(F,`${v}`):A(F,`"${v}"`)}function wf(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(`
|
|
2316
|
+
`);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 Sf(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 $f(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 Tf(x){return[M0.upPlus].includes(x.transferDirection)}function Pf(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[D,m]of Object.entries(e.containers))m.containerType===wx.cx&&m.transferDirection!==M0.backendOnly?(Sf(D,m,t,s),r=Math.max(r,m.size)):m.containerType===wx.hx?($f(D,m,F,v),r=Math.max(r,m.size)):m.containerType===wx.aloha&&(E=Tf(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 qf(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=ss(t.containerType,t.transferDirection);if(!s){x("// ... container not available in DLO");continue}let n=`DDE_${t.containerType===wx.aloha?wx.aloha:t.title}`,F=it[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 ya(x,A,e){let r=[],t=r.push.bind(r);function s(F){t(`
|
|
2317
2317
|
// === ${F} ===
|
|
2318
|
-
`)}function n(F,v,E=!1){let u=
|
|
2319
|
-
`)}var it=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)||!rs(e.containerType,e.transferDirection)||!e.fields||!this.context&&!G0.hasContainerAppFields(e)||st[A].ctype!==_x.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"||!nt[A.type])return!1;let e=oA(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)nt[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(nt,e.type)&&nt[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=oA(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=oA(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&&yl(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 rt.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=st[e],t=`DDE_${A.containerType===_x.aloha?_x.aloha:A.title}`;[M0.both,M0.bothPlus,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===_x.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[_x.hx,_x.aloha].includes(e.containerType),s=e.containerType===_x.hx,n=e.containerType===_x.aloha,F=`_${A}_write`,v=es(this.manifest)?", flags":"",E=s?`stamp${v}`:"",u=es(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${s?u:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?_x.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`,_=this.functionArgumentsForDdeWrite(s,t);if(this.pawn(">",`${this.context?"stock ":""}${p}(${_}) {`),t)this.pawn(`${F}(${E});`);else{let h=e.name.slice(-1);this.pawn(`dde_flush(${h}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${m}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=es(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=oA(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"||hl(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=oA(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=oA(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=oA(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&&!rt.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!rt.exec(`${A.offset}`)||!!rt.exec(`${A.scale}`)||!!rt.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 Pl(x){return`${`onUplinkApply_${x}()`};`}function ga(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 Nl(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 Ml(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))st[r].ctype===_x.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 Il(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();`),ga(x,e,"Restore"),G0.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 Ll(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();`),ga(x,e,"Apply"),G0.hasContainerAppFields(e)&&x(` ${Pl(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 ya(x,A){let e=[],r=e.push.bind(e);Nl(r,A);let{containerApply:t,containerRestore:s}=Ml(x);return Il(r,s),Ll(r,t),e.join(`
|
|
2320
|
-
`)}var
|
|
2321
|
-
`)}function
|
|
2322
|
-
`)}async function Ol(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(ts.Utils.joinPath(x,s))&&r.push(`#include "${r0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function tt(x,A,e,r){let t=ts.Utils.joinPath(x,r0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var Sa=W0(require("semver")),$a=require("yaml");var FA=G0.ContainerType,Kt=G0.TransferDirection,Gl=G0.fieldTypeDefinitions,Dr={$ref:"#/components/parameters/contextId"},Ul={$ref:"#/components/parameters/addonId"},Hl={$ref:"#/components/parameters/appId"},wa={$ref:"#/components/schemas/histdataResponse"},Jl={$ref:"#/components/schemas/histdataRequest"},zt={$ref:"#/components/schemas/rapidM2MStamp"},Kl={$ref:"#/components/schemas/timeseriesRequestBase"},Jt="rapidM2M Stamp",hA={description:"Successful operation"},Ta={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"'}}},qa={...structuredClone(Ta)};Object.assign(qa.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:[zt,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:Jt,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:Jt,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:Jt,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:Jt,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 at={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},be={401:{description:"Permission denied",...at},403:{description:"Forbidden",...at},404:{description:"Resource not found",...at},500:{description:"Internal error",...at}};function ss(x,A,e=null){let r=Sa.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(Ta)):Object.assign(t.components,structuredClone(qa));let s=V.isAddon(A),n=V.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===FA.hx)||!e&&!G0.hasContainerAppFields(F)||F.containerType===FA.aloha||(zl(t,F),Wl(t,F,e),Ql(t,F,s,n),!s&&!n&&(Vl(t,F,e),Yl(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,$a.stringify)(t)}function zl(x,A){x.tags.push({name:Zx(A.title),description:`Transfer direction ${A.transferDirection}`})}function Zx(x){return x.split("_").join(" ")}function Vl(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},s=[];A.containerType===FA.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===FA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=Pa(n),!n.readPermission&&!n.writePermission&&s.push(n.id)));t.required=s.length?s:void 0,x.components.schemas[r]=t}function Wl(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===FA.hx;for(let v of A.fields)v.library!==e||v.type==="shadow"||(t.properties[v.name]=Pa(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:[Kl,v]},t.properties.stamp=zt,s.push("stamp")}}function Pa(x){let e={...Gl[x.type].openApi},r=Xl(x);return e.default=r,e.example=r,e.description=x.description,e}function Xl(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function Yl(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([FA.cx,FA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[Zx(A.title)],summary:`Retrieve the data of the "${Zx(A.title)}" container`,parameters:[Dr],responses:{200:{...hA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:zt}},{$ref:`#/components/schemas/${A.name}`}]}}}},...be}},[Kt.down,Kt.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[Zx(A.title)],summary:`Modify the data of the "${Zx(A.title)}" container`,parameters:[Dr],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...hA},204:{...hA},...be}});else if(A.containerType===FA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[Zx(A.title)],summary:`Retrieve the youngest data of the "${Zx(A.title)}" container`,parameters:[Dr,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...hA,content:{"application/json":{schema:wa}}},...be}},x.paths[t]={get:{deprecated:!0,tags:[Zx(A.title)],summary:`Get the historical data of the "${Zx(A.title)}" container.`,parameters:[Dr,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},Jl]}}],responses:{200:{...hA,content:{"application/json":{schema:wa}}},...be}}}}x.paths[e]=r}function Ql(x,A,e=!1,r=!1){let s=A.containerType===FA.hx?"timeseries":"containers",n=[],F=Zx(A.title);r||n.push({path:`/api/1/sites/{siteUid}/${s}/${A.title}`,params:[Dr],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${s}/${A.title}`,params:[Dr,Ul],tags:[F]}]);let v={path:`/api/1/app-center/apps/{appUid}/${s}/${A.title}`,params:[Hl],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 "${Zx(A.title)}" container`,parameters:[],responses:{200:{...hA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:zt}},{$ref:`#/components/schemas/${A.title}`}]}}}},...be}};if([FA.cx,FA.cb].includes(A.containerType)&&(E.get=u,[Kt.down,Kt.backendOnly].includes(A.transferDirection)&&(E.put={tags:[],summary:`Modify the data of the "${Zx(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...hA},204:{...hA},...be}}),n.forEach(p=>{let m=structuredClone(E);Object.values(m).forEach(_=>{_?.parameters?.unshift(...p.params),_?.tags?.unshift(...p.tags)}),x.paths[p.path]=m})),A.containerType===FA.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:{...hA,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...be}},e&&(E.post={tags:[],summary:`Insert data into the "${Zx(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:{...hA},400:{description:"Bad request",...at},...be}});let p=n[0],m=structuredClone(E);Object.values(m).forEach(O=>{O?.parameters?.unshift(...p.params),O?.tags?.unshift(...p.tags)}),x.paths[p.path]=m;let _={...hA,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},h=`${p.path}/youngest`,S={get:structuredClone(m.get)};S.get.summary=`Get the youngest record of "${A.title}" container`,S.get.responses[200]=_;let q=e?2:1;S.get.parameters[q].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[h]=S;let M=`${p.path}/oldest`,R={get:structuredClone(m.get)};R.get.summary=`Get the oldest record of "${A.title}" container`,R.get.responses[200]=_,R.get.parameters[q].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[M]=R}}var Ma=G0.TransferDirection,Vt=" new szTemp{64};",Wt=" return strcat(aData, szTemp, sizeof(szTemp));";function Ia(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 is(x){if(x.type==="shadow"||x.shadowRef)return null;let A=oA(x);return!A||A==="skip"?null:Ia(A)}function La(x){return[G0.ContainerType.hx,G0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==Ma.backendOnly}function Zl(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=oA(x);return!!A&&A!=="skip"}function xc(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 Ac(x){let A=[],e=new Map,r=new Set,t=!1;for(let s of x){if(!Zl(s))continue;let n=is(s);s.arrayRef&&n?xc(s,n,e):(A.push(s),n?r.add(n):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function ec(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:is(e[0]),pawnVarBase:`${v}${x}_${n}`}}function rc(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:s}=Ac(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=ec(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 tc(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(La(e))for(let r of e.fields){let t=is(r);t&&A.add(t)}return A}function nc(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(Vt),x(' sprintf(szTemp, _, "%d", value);'),x(Wt),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(Vt),x(' sprintf(szTemp, _, "%.3f", value);'),x(Wt),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(Vt),x(' sprintf(szTemp, _, "%s", value);'),x(Wt),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(Vt),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(Wt),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 sc(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function ic(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 ac(x,A){let{startOffset:e,endOffset:r,step:t,formatType:s,pawnVarBase:n,subField:F}=A,v=sc(e,t),E=ic(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 oc(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=oA(e);if(!r||r==="skip")return;let s=`${e.library?`_${j0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,n=Ia(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 Fc(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function Na(x,A,e){let r=e===G0.ContainerType.cx?"c":"h",t=e===G0.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!==Ma.backendOnly&&Fc(x,s,n);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function vc(x,A){let e=rc(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)ac(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)oc(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function fc(x,A){for(let[,e]of Object.entries(A.containers))La(e)&&vc(x,e)}function Ra(x){let A=[],e=A.push.bind(A),r=tc(x);return nc(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),Na(e,x,G0.ContainerType.cx),Na(e,x,G0.ContainerType.hx),e(" return OK;"),e("}"),fc(e,x),A.join(`
|
|
2323
|
-
`)}var
|
|
2324
|
-
`),Ax=
|
|
2325
|
-
`)),L.log("Generated",
|
|
2326
|
-
`),diagnostics:n};let u=[],
|
|
2327
|
-
forward ___${
|
|
2318
|
+
`)}function n(F,v,E=!1){let u=ga(v)?"":'"';E&&(u=""),t(`#define ${F} ${u}${v}${u}`)}return _f(s,n,e),wf(t,s,n,A),Pf(t,s,x),qf(t,s,x),r.join(`
|
|
2319
|
+
`)}var at=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)||!ss(e.containerType,e.transferDirection)||!e.fields||!this.context&&!G0.hasContainerAppFields(e)||it[A].ctype!==wx.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"||!st[A.type])return!1;let e=FA(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)st[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(st,e.type)&&st[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=FA(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=FA(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&&kf(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 tt.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=it[e],t=`DDE_${A.containerType===wx.aloha?wx.aloha:A.title}`;[M0.both,M0.bothPlus,M0.none,M0.deviceOnly,M0.up,M0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===wx.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[wx.hx,wx.aloha].includes(e.containerType),s=e.containerType===wx.hx,n=e.containerType===wx.aloha,F=`_${A}_write`,v=ns(this.manifest)?", flags":"",E=s?`stamp${v}`:"",u=ns(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${s?u:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?wx.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`,_=this.functionArgumentsForDdeWrite(s,t);if(this.pawn(">",`${this.context?"stock ":""}${D}(${_}) {`),t)this.pawn(`${F}(${E});`);else{let h=e.name.slice(-1);this.pawn(`dde_flush(${h}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${m}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=ns(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=FA(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"||gf(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=FA(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=FA(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=FA(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&&!tt.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!tt.exec(`${A.offset}`)||!!tt.exec(`${A.scale}`)||!!tt.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 Nf(x){return`${`onUplinkApply_${x}()`};`}function ka(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 If(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 Mf(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))it[r].ctype===wx.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 Lf(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();`),ka(x,e,"Restore"),G0.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 Rf(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();`),ka(x,e,"Apply"),G0.hasContainerAppFields(e)&&x(` ${Nf(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 _a(x,A){let e=[],r=e.push.bind(e);If(r,A);let{containerApply:t,containerRestore:s}=Mf(x);return Lf(r,s),Rf(r,t),e.join(`
|
|
2320
|
+
`)}var Of=jf.map(x=>`_DDE_${x}_write`);function wa(x){let A=[],e=A.push.bind(A),r=[...Of];for(let[t,s]of Object.entries(x.containers)){let n=ss(s.containerType,s.transferDirection),F=it[t];if(!n||!s.fields||F.ctype!==wx.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});`),ha(e,s,"write"),e(" return dde_wend();"),e("}"),r.splice(r.indexOf(u),1)}if(F.ctype===wx.cx){let u=`_${v}_read`;e(`stock ${u}() {`),e(` if (dde_rbegin(${E})) return ERROR;`),ha(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(`
|
|
2321
|
+
`)}function ha(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")}),G0.hasContainerAppFields(A)&&(x(` #ifdef _DDE_${A.title}_${e}`),x(` _DDE_${A.title}_${e}();`),x(" #endif"))}async function Sa(x,A){let e=[],r=await Z0.getApmPartDependencies(x,A,p0.Part.dlo);await nt(x,A,e,t0.fileNames.autoInc);let t=await Gf(x,A,r);for(let s of r)s.name==="local-data-interface"&&await nt(x,A,e,t0.fileNames.autoLocalDataInc),e.push(`#include <${s.name}>`),s.name==="dlo-core"&&(e.push(...t),await nt(x,A,e,t0.fileNames.autoDdeInc.replace("X","app")),await nt(x,A,e,t0.fileNames.autoDdeInc.replace("X","main")));return r.some(s=>s.name==="dlo-core")&&await nt(x,A,e,t0.fileNames.autoUplinkInc),e.join(`
|
|
2322
|
+
`)}async function Gf(x,A,e){let r=[];for(let t of e){let s=t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(is.Utils.joinPath(x,s))&&r.push(`#include "${t0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function nt(x,A,e,r){let t=is.Utils.joinPath(x,t0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var Ta=W0(require("semver")),Pa=require("yaml");var vA=G0.ContainerType,zt=G0.TransferDirection,Uf=G0.fieldTypeDefinitions,Dr={$ref:"#/components/parameters/contextId"},Hf={$ref:"#/components/parameters/addonId"},Jf={$ref:"#/components/parameters/appId"},$a={$ref:"#/components/schemas/histdataResponse"},Kf={$ref:"#/components/schemas/histdataRequest"},Vt={$ref:"#/components/schemas/rapidM2MStamp"},zf={$ref:"#/components/schemas/timeseriesRequestBase"},Kt="rapidM2M Stamp",gA={description:"Successful operation"},qa={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"'}}},Na={...structuredClone(qa)};Object.assign(Na.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:[Vt,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:Kt,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:Kt,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:Kt,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:Kt,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 ot={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},me={401:{description:"Permission denied",...ot},403:{description:"Forbidden",...ot},404:{description:"Resource not found",...ot},500:{description:"Internal error",...ot}};function os(x,A,e=null){let r=Ta.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(qa)):Object.assign(t.components,structuredClone(Na));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===vA.hx)||!e&&!G0.hasContainerAppFields(F)||F.containerType===vA.aloha||(Vf(t,F),Xf(t,F,e),Zf(t,F,s,n),!s&&!n&&(Wf(t,F,e),Qf(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,Pa.stringify)(t)}function Vf(x,A){x.tags.push({name:xA(A.title),description:`Transfer direction ${A.transferDirection}`})}function xA(x){return x.split("_").join(" ")}function Wf(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},s=[];A.containerType===vA.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===vA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=Ia(n),!n.readPermission&&!n.writePermission&&s.push(n.id)));t.required=s.length?s:void 0,x.components.schemas[r]=t}function Xf(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===vA.hx;for(let v of A.fields)v.library!==e||v.type==="shadow"||(t.properties[v.name]=Ia(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:[zf,v]},t.properties.stamp=Vt,s.push("stamp")}}function Ia(x){let e={...Uf[x.type].openApi},r=Yf(x);return e.default=r,e.example=r,e.description=x.description,e}function Yf(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function Qf(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([vA.cx,vA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[xA(A.title)],summary:`Retrieve the data of the "${xA(A.title)}" container`,parameters:[Dr],responses:{200:{...gA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:Vt}},{$ref:`#/components/schemas/${A.name}`}]}}}},...me}},[zt.down,zt.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[xA(A.title)],summary:`Modify the data of the "${xA(A.title)}" container`,parameters:[Dr],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...gA},204:{...gA},...me}});else if(A.containerType===vA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[xA(A.title)],summary:`Retrieve the youngest data of the "${xA(A.title)}" container`,parameters:[Dr,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...gA,content:{"application/json":{schema:$a}}},...me}},x.paths[t]={get:{deprecated:!0,tags:[xA(A.title)],summary:`Get the historical data of the "${xA(A.title)}" container.`,parameters:[Dr,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},Kf]}}],responses:{200:{...gA,content:{"application/json":{schema:$a}}},...me}}}}x.paths[e]=r}function Zf(x,A,e=!1,r=!1){let s=A.containerType===vA.hx?"timeseries":"containers",n=[],F=xA(A.title);r||n.push({path:`/api/1/sites/{siteUid}/${s}/${A.title}`,params:[Dr],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${s}/${A.title}`,params:[Dr,Hf],tags:[F]}]);let v={path:`/api/1/app-center/apps/{appUid}/${s}/${A.title}`,params:[Jf],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 "${xA(A.title)}" container`,parameters:[],responses:{200:{...gA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:Vt}},{$ref:`#/components/schemas/${A.title}`}]}}}},...me}};if([vA.cx,vA.cb].includes(A.containerType)&&(E.get=u,[zt.down,zt.backendOnly].includes(A.transferDirection)&&(E.put={tags:[],summary:`Modify the data of the "${xA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...gA},204:{...gA},...me}}),n.forEach(D=>{let m=structuredClone(E);Object.values(m).forEach(_=>{_?.parameters?.unshift(...D.params),_?.tags?.unshift(...D.tags)}),x.paths[D.path]=m})),A.containerType===vA.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:{...gA,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...me}},e&&(E.post={tags:[],summary:`Insert data into the "${xA(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:{...gA},400:{description:"Bad request",...ot},...me}});let D=n[0],m=structuredClone(E);Object.values(m).forEach(G=>{G?.parameters?.unshift(...D.params),G?.tags?.unshift(...D.tags)}),x.paths[D.path]=m;let _={...gA,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},h=`${D.path}/youngest`,S={get:structuredClone(m.get)};S.get.summary=`Get the youngest record of "${A.title}" container`,S.get.responses[200]=_;let P=e?2:1;S.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[h]=S;let I=`${D.path}/oldest`,R={get:structuredClone(m.get)};R.get.summary=`Get the oldest record of "${A.title}" container`,R.get.responses[200]=_,R.get.parameters[P].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[I]=R}}var La=G0.TransferDirection,Wt=" new szTemp{64};",Xt=" return strcat(aData, szTemp, sizeof(szTemp));";function Ra(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 Fs(x){if(x.type==="shadow"||x.shadowRef)return null;let A=FA(x);return!A||A==="skip"?null:Ra(A)}function Oa(x){return[G0.ContainerType.hx,G0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==La.backendOnly}function xc(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=FA(x);return!!A&&A!=="skip"}function Ac(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 ec(x){let A=[],e=new Map,r=new Set,t=!1;for(let s of x){if(!xc(s))continue;let n=Fs(s);s.arrayRef&&n?Ac(s,n,e):(A.push(s),n?r.add(n):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function rc(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:Fs(e[0]),pawnVarBase:`${v}${x}_${n}`}}function tc(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:s}=ec(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=rc(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:s}}function nc(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(Oa(e))for(let r of e.fields){let t=Fs(r);t&&A.add(t)}return A}function sc(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(Wt),x(' sprintf(szTemp, _, "%d", value);'),x(Xt),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(Wt),x(' sprintf(szTemp, _, "%.3f", value);'),x(Xt),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(Wt),x(' sprintf(szTemp, _, "%s", value);'),x(Xt),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(Wt),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(Xt),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 ic(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function ac(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 oc(x,A){let{startOffset:e,endOffset:r,step:t,formatType:s,pawnVarBase:n,subField:F}=A,v=ic(e,t),E=ac(e,r,t);if(x(` if (${E}) {`),s==="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_${s}(aData, ${n}[${v}]${F});`);x(" }")}function Fc(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=FA(e);if(!r||r==="skip")return;let s=`${e.library?`_${j0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,n=Ra(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 vc(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function Ma(x,A,e){let r=e===G0.ContainerType.cx?"c":"h",t=e===G0.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!==La.backendOnly&&vc(x,s,n);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function lc(x,A){let e=tc(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)oc(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)Fc(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function fc(x,A){for(let[,e]of Object.entries(A.containers))Oa(e)&&lc(x,e)}function Ga(x){let A=[],e=A.push.bind(A),r=nc(x);return sc(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),Ma(e,x,G0.ContainerType.cx),Ma(e,x,G0.ContainerType.hx),e(" return OK;"),e("}"),fc(e,x),A.join(`
|
|
2323
|
+
`)}var Ka=j0.yamlRangeToLineInformation,Ft=t0.filePaths.dde.path,lA;(r0=>{let x=G0.DDEJson,A=j0.convertBlobToString;r0.DDE_SCHEMA=ba;async function r(M,k){let L=await k.readFile(M);return A(L)}r0.readYamlFile=r;async function t(M,k,L=t0.fileNames.mainDDE,Z){let W=[],U=await z.read(M,k),J=await Ua(M,k,U);if(Z)for(let Q of J){let{result:i0,unresolvedKeys:H}=dx.replaceDefineTemplates(Q.yaml,Z);Q.yaml=i0;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=ux.Utils.joinPath(M,Ft,L),s0=await r(a0,k);if(Z){let{result:Q,unresolvedKeys:i0}=dx.replaceDefineTemplates(s0,Z);s0=Q;for(let H of i0)W.push({file:a0,level:"error",message:`Unresolved define template: {{${H}}}`,line:0,startCharacter:0,endCharacter:0})}return W.push(...v(a0,s0)),{manifest:U,libraryFiles:J,main:{path:a0,yaml:s0},diagnostics:W}}r0.validate=t;async function s(M,k,L,Z=t0.fileNames.mainDDE){let W=await z.read(M,k),U=await dx.read(M,k,L),J=await t(M,k,Z,U.flat);if(J.diagnostics.filter(B0=>B0.level==="error").length>0)return{ddeJSON:null,diagnostics:J.diagnostics};let s0=await _(M,k,L),Q=new Ut.PreCompiler(W,J.libraryFiles,s0),i0=Q.parseLibraries();if(i0.find(B0=>B0.level==="error"))return{ddeJSON:null,diagnostics:[...J.diagnostics,...i0]};let{ddeJSON:v0,diagnostics:l0}=Q.parseMainDDE(J.main.path,J.main.yaml);return{ddeJSON:v0,diagnostics:[...J.diagnostics,...l0]}}r0.compileDDE=s;let n=new Ha.default({strict:!1,allErrors:!0,verbose:!0});(0,Ja.default)(n);let F=n.compile(r0.DDE_SCHEMA);function v(M,k){let L=new Yt.LineCounter,Z=(0,Yt.parseDocument)(k,{lineCounter:L,keepSourceTokens:!0}),W=[];for(let a0 of Z.errors){let s0=a0.pos?Ka(L,[a0.pos[0],a0.pos[1],a0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};W.push({file:M,level:"error",message:a0.message,...s0})}if(W.length>0)return W;let U=Z.toJSON();if(!F(U)){let s0=(F.errors||[]).filter(i0=>i0.keyword!=="if"),Q=new Set;for(let i0 of s0){let H=Bc(i0);if(Q.has(H))continue;Q.add(H);let v0=dc(Z,L,i0);W.push({file:M,level:"error",message:H,...v0})}}return W}r0.validateJsonSchema=v,r0.PreCompiler=(M,k,L)=>new Ut.PreCompiler(M,k,L);function u(M,k){return rs(M,k)}r0.generateMyDatanetXML=u;async function D(M,k,L,Z){let W=await z.read(M,k),U=rs(W,Z),J=ux.Utils.joinPath(M,t0.filePaths.dist.ddeXmlPath);await k.writeFile(J,U),L.log("Generated",t0.filePaths.dist.ddeXmlPath)}r0.exportMyDatanetXML=D;async function m(M,k,L,Z,W){let U=ux.Utils.joinPath(M,t0.filePaths.studio.auto.dde.historyJson);await k.rm(U).catch(console.error);let J=await z.read(M,k);if(!z.isApp(J)||!J.registry?.id)return;if(!W){L.warn("Could not fetch dde of previous version: No API token provided.");return}let a0=OA.coerce(J.version);try{let i0=(await tx.getExistingApplication(W,J.publisher,J.registry.id,Z)).versions.find(B0=>!OA.prerelease(B0.version)&&OA.lte(B0.version,a0)),H=i0?.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:{...oA(W),...tx.injectSemverHeader(!0)}});if(v0.status!==200){L.warn(`Could not fetch the dde.json of version "${i0?.version}"`);return}let l0=await v0.text();await k.writeFile(U,l0),L.log(`Saved history.json of previous app version ${i0.version}`)}catch(s0){L.error("Failed to fetch the dde of previous version",s0)}}r0.fetchPreviousHistoryJson=m;async function _(M,k,L){try{let Z=ux.Utils.joinPath(M,t0.filePaths.studio.auto.dde.historyJson);if(await k.stat(Z)){let U=await k.readFile(Z);return JSON.parse(A(U))}let W=ux.Utils.joinPath(M,Ft,"history.json");if(await k.stat(W)){L.warn(`"${t0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${Ft}history.json"`);let U=await k.readFile(W),J=JSON.parse(A(U)),a0=await z.read(M,k),s0=OA.coerce(a0.version)?.version,Q=Object.keys(J||{}).sort(OA.rcompare).find(H=>H!==s0);if(!Q)return null;let i0=J[Q];return{version:Q,...i0}}}catch(Z){L.error("Failed to read history.json",Z)}return L.warn("history.json does not exist"),null}r0.getHistoryJson=_;function h(M,k){return{version:OA.coerce(k.version)?.version||"1.0.0",...structuredClone(M)}}r0.buildHistoryJson=h;async function S(M,k,L,Z){let W=await z.read(M,k),U=h(Z,W),J=ux.Utils.joinPath(M,t0.filePaths.dist.historyJson);await k.writeFile(J,JSON.stringify(U,null," ")),L.log("Generated",t0.filePaths.dist.historyJson)}r0.exportHistoryJson=S;async function P(M,k){return k.rm(ux.Utils.joinPath(M,t0.filePaths.studio.auto.dlo.path))}r0.clearAutoDloDir=P;async function I(M,k,L,Z){await P(M,k);let W=await z.read(M,k),U=await Ua(M,k,W),J=await dx.read(M,k,L),a0=ya(Z,J,W),Q=new at(W,Z,null).generate();for(let vx of U){let Vx=new at(W,Z,vx.libraryName),{globals:kA,helper:_A}=Vx.generate(),ax=[...kA,..._A].join(`\r
|
|
2324
|
+
`),Ax=t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",vx.libraryName),eA=ux.Utils.joinPath(M,Ax);ax.length&&(L.log("Generated",Ax),await k.writeFile(eA,ax))}let i0=wa(Z),H=_a(Z,U.map(vx=>vx.libraryName)),v0=Ga(Z),l0=ux.Utils.joinPath(M,t0.filePaths.studio.auto.dlo.autoInc);await k.writeFile(l0,a0),L.log("Generated",t0.filePaths.studio.auto.dlo.autoInc);let B0=ux.Utils.joinPath(M,t0.filePaths.studio.auto.dlo.autoUplinkInc);await k.writeFile(B0,H),L.log("Generated",t0.filePaths.studio.auto.dlo.autoUplinkInc);let d0=ux.Utils.joinPath(M,t0.filePaths.studio.auto.dlo.autoLocalDataInc);await k.writeFile(d0,v0),L.log("Generated",t0.filePaths.studio.auto.dlo.autoLocalDataInc);let S0=ux.Utils.joinPath(M,t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await k.writeFile(S0,[...Q.globals,...Q.helper].join(`
|
|
2325
|
+
`)),L.log("Generated",t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let P0=ux.Utils.joinPath(M,t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(P0,i0),L.log("Generated",t0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await G(M,k,L)}r0.exportAutoDloFiles=I;async function R(M,k,L,Z){let W=await z.read(M,k),U=z.isLibrary(W),J=ux.Utils.joinPath(M,t0.filePaths.dist.path,"dde-api.yaml");await k.rm(J).catch(()=>{});let a0=ux.Utils.joinPath(M,t0.filePaths.dist.ddeApi);if(await k.writeFile(a0,os(Z,W)),L.log("Generated",t0.filePaths.dist.ddeApi),U){let s0=ux.Utils.joinPath(M,t0.filePaths.dist.ddeApiPath,`${W.name}.yaml`),Q=os(Z,W,W.name);Q.length&&(await k.writeFile(s0,Q),L.log("Generated",t0.filePaths.dist.ddeApiPath+`${W.name}.yaml`))}}r0.exportOpenApi=R;async function G(M,k,L){let Z=ux.Utils.joinPath(M,t0.filePaths.studio.auto.dlo.defaultInc),W=await Sa(M,k);await k.writeFile(Z,W),L.log("Generated",t0.filePaths.studio.auto.dlo.defaultInc)}r0.exportDefaultInc=G})(lA||={});async function Ua(x,A,e){let r=[],t=await Z0.getAll(e);for(let s in t){let n=Z0.dependencyToPath(x,s),F=Z0.dependencyIdToName(s),v=ux.Utils.joinPath(n,`${Ft}/${F}.dde`);await A.stat(v)&&r.push({libraryName:F,path:v,yaml:await lA.readYamlFile(v,A)})}if(z.isLibrary(e)){let s=ux.Utils.joinPath(x,`/${Ft}/${e.name}.dde`);await A.stat(s)&&r.push({libraryName:e.name,path:s,yaml:await lA.readYamlFile(s,A)})}return r}function cc(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 Ec(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 Bc(x){let A=x.instancePath||"/",e=x.parentSchema,r=cc(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${Ec(x.keyword,x.params,t,e)}`}function Cc(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 dc(x,A,e){let r=Cc(x,e.instancePath||"");return r?Ka(A,r):{line:0,startCharacter:0,endCharacter:0}}var vs=require("vscode-uri");var pr=class{dloFileMap={};rootUri=vs.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?vs.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var Wa=require("vscode-uri");var uc=/^(?:\s*#options\s+)(.*)(?:\s*)$/,Dc=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,pc=/^(?:\s*#ifdef\s+)(.*)$/,bc=/^(?:\s*#ifndef\s+)(.*)$/,mc=/^(?:\s*#elseifdef\s+)(.*)$/,jc=/^(?:\s*#elseifndef\s+)(.*)$/,Xa=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,Ya=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Qa=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Za=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,xo=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,hc=/^\s*#include\s*</,gc=/^\s*#endinput\s*/,yc=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,Ao=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,eo=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function za(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 ro=/^(.*)(^|\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||{}),kc=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,_c=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,wc=/^(.*)(^|\s*)onUplinkEvent/,Sc=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,$c=/^\s*#callback\s+\w+\s*\(/;function Va(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 no(x){return Xa.test(x)||Za.test(x)||Ya.test(x)||Qa.test(x)||xo.test(x)||Ao.test(x)||eo.test(x)||ro.test(x)}function Tc(x,A,e){if(!(Sc.test(e)||$c.test(e)))return null;let t=Va(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],_=m.split("//",1)[0];n.push(m),F.push(_),s+=Va(_),v++}if(n.length<=1||s>0)return null;let u=n.map((m,_)=>_===0?m:m.trim()).join(" "),D=F.map((m,_)=>_===0?m:m.trim()).join(" ");return no(D)?{joinedOriginal:u,joinedStripped:D,extraLineCount:n.length-1}:null}var br=class{pragmaDynamic=null;dloFileSequencer=new pr;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=Wa.Utils.basename(t);if(F.includes(t0.filePaths.studio.auto.dlo.path)){let h=E.substring(0,E.length-8);!["app","main"].includes(h)&&E.endsWith("-dde.inc")&&(v=j0.generateHashForLibraryName(h))}else if(F.includes(t0.filePaths.studio.libdeps)){let h=F.split("libdeps/")[1],[S]=h.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(`
|
|
2326
|
+
`),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 _=0;for(let h=0;h<s.length;h++){let S=s[h],P=S.split("//",1)[0],I=null,R=0;if(!no(P)){let G=Tc(s,h,P);G&&(S=G.joinedOriginal,P=G.joinedStripped,R=G.extraLineCount)}if(I=uc.exec(P))S="// "+S,n.push({file:t,level:"error",line:h,message:"#options is not supported here. Use the DLO settings instead."});else if(I=Dc.exec(P))S="// "+S,n.push({file:t,level:"error",line:h,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(I=yc.exec(P)){let G=Number(I[1].startsWith("(")?I[1].substring(1,I[1].length-1):I[1]);!Number.isInteger(G)||G<64?n.push({file:t,level:"error",line:h,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||G>this.pragmaDynamic)&&(this.pragmaDynamic=G)}else if(I=pc.exec(P))S=S.replace("#ifdef ","#if defined ");else if(I=bc.exec(P))S=S.replace("#ifndef ","#if !defined ");else if(I=mc.exec(P))S=S.replace("#elseifdef ","#elseif defined ");else if(I=jc.exec(P))S=S.replace("#elseifndef ","#elseif !defined ");else if(I=Xa.exec(P)){let[,G,r0,M,k]=I;S=`${G}#define ${r0} _catch_funcidx( "___${r0}")
|
|
2327
|
+
forward ___${r0}( ${M});
|
|
2328
2328
|
#line
|
|
2329
2329
|
${_}
|
|
2330
|
-
public ___${
|
|
2331
|
-
`),diagnostics:n}}};var
|
|
2332
|
-
`)}}var
|
|
2333
|
-
`),R=JSON.stringify(m,null,
|
|
2334
|
-
`:"");try{await s.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,s,n,F){for(let v of r.PART_DIST_PATHS){let E=Bs.Utils.joinPath(t,v);await A(E,s,n,F)}}r.normalizeLibraryParts=e})(hr||={});async function FE(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 vE(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 fE(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 lE(x,A,e,r){let t=!1;for(let s of aE){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 cE(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function EE(x){let A=x.path.replace(/\\/g,"/");for(let e of hr.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function BE(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:oE}var Et=require("@gera2ld/tarjs"),So=j0.convertBlobToString,Cs=require("pako"),gx;(p=>{class x extends Error{_mergedDiagnostics;constructor(_,h){super(_),this.name="BuildError",this._mergedDiagnostics=h}get mergedDiagnostics(){return this._mergedDiagnostics}}p.BuildError=x;async function A(m,_,h,S,q,M=!0,R){M=CE(h,M),await dE(m,_,h,S,q,M);try{let I=await dx.read(m,_,h);await uE(m,_,h,I)}catch(I){h.warn("Could not generate defines.ts:",I)}let O={[p0.Part.dde]:[],[p0.Part.dlo]:[],[p0.Part.dfiles]:[]},t0={[p0.Part.dde]:DE,[p0.Part.dlo]:pE,[p0.Part.dfiles]:bE};try{for(let I of[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles])if(M.includes(I)&&(h.info(`Building ${I.toUpperCase()}...`),await gE(h,I,t0[I],O[I],m,_)))return O}catch(I){throw R?new x(I?.message,O):I}return M.includes(p0.Part.pov)?await Qt.tryBuildPov(m,_,h):h.info("Skipping pov build"),M.includes(p0.Part.blo)?await Qt.tryBuildBlo(m,_,h):h.info("Skipping blo build"),await mE(m,_,h),await jE(m,_,h),h.done("Project build completed."),O}p.buildAll=A;async function e(m,_,h,S,q,M,R){let O=await V.read(m,_);return V.isLibrary(O)?(h.info("Library project detected. Publishing library..."),s(m,_,h,q,S)):(h.info("App project detected. Publishing app..."),t(m,_,h,q,M,R,S))}p.release=e;async function r(m,_,h,S,q,M){let R=await V.read(m,_),O=`${R.name}-${R.version}.tar.gz`,t0=null;if(V.isLibrary(R))h.info("Library project detected. Packing library..."),t0=await $o(m,_,h,q,S);else{h.info("App project detected. Packing app...");let k=await To(m,_,h,q,M,S);t0=await kE(k)}let I=Ge.Utils.joinPath(m,O);t0!==null?(await _.writeFile(I,t0),h.done(`Packaged: ${I.fsPath}`)):h.error(`Could not create archive: ${I.fsPath}`)}p.pack=r;async function t(m,_,h,S,q,M=null,R){if(!await p0.validateAccess(m,_,S,!1,R))throw new Error("Could not validate access to application");let t0=await To(m,_,h,S,q,R);await p0.updateProfile(m,_,S,R);let I=await p0.publishTag(m,_,S,t0,R);if(M!==null){let k=await V.read(m,_);await tx.updateExistingApplicationVersion(S,k.publisher,k.registry?.id,k.version,{allowedBackends:M},R),h.info(`Tag "${I.version}" with phase "${I.phase}" shared with ${[...M].join(";")}!`)}h.done(`Tag "${I.version}" with phase "${I.phase}" published!`)}p.releaseAPM=t;async function s(m,_,h,S,q){let M=await V.read(m,_),R=await $o(m,_,h,S,q);await Oe.publishPackage(S,M,R,q),h.done(`Library "${M.publisher}/${M.name}" with version "${M.version}" published!`)}p.releaseLibrary=s;async function n(m,_,h,S,q,M,R,O=null){if(M==="*"){let J=await V.read(m,_);M=`${J.name}-${J.version}.tar.gz`,h.info(`Publishing detected archive package "${M}"...`)}let t0=Ge.Utils.joinPath(m,M);if(!await _.stat(t0))throw new Error(`Archive package not found: ${t0.fsPath}`);let I=await _.readFile(t0),k=await _E(I),{publisher:L,registry:Q,version:K}=k;V.isLibrary(k)?(await Oe.publishPackage(S,k,I,q),h.done(`Library "${L}/${k.name}" with version "${k.version}" published!`)):(await tx.updateApplicationFile(S,L,Q.id,K,"app.tar.gz",I,q),await tx.updateExistingApplicationVersion(S,L,Q?.id,K,{allowedBackends:O||void 0,phase:R||void 0},q),h.info(`Tag "${K}" with phase "${R}" shared with ${[...O||""].join(";")}!`),h.done(`Tag "${K}" with phase "${R}" published!`))}p.publishArchive=n;async function F(m,_,h){let S;try{S=await _.readFile(Ge.Utils.joinPath(m,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(So(S)===r0.readme(h))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}p.getReadmeFile=F;async function v(m,_){let h;try{h=await _.readFile(Ge.Utils.joinPath(m,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(So(h)===r0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return h}p.getChangelogFile=v;async function E(m,_,h,S){let q=await V.read(m,_),{name:M,publisher:R,description:O}=q,t0=V.validateProjectName(M,V.isLibrary(q));if(t0)throw new Error(`name: ${t0}`);let I=V.validateDescription(O);if(I)throw new Error(`description: ${I}`);let k=V.validatePublisherId(R)||await V.validatePublisherOnline(h,R,S);if(k)throw new Error(`publisher: ${k}`);if(!V.isLibrary(q)&&(await V.validateApplicationIcon(m,_,q),V.validateEngineSettings(q),V.isApp(q)&&await V.isApmPartEnabled(m,_,p0.Part.dlo,q)&&(!q.dpid||!Object.values(V.DeviceProfiles).includes(q.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}p.validatePublishSettings=E;async function u(m,_){let h=Cs.ungzip(m),S=await Et.TarReader.load(h),q={};for(let M of S.fileInfos)_.includes(M.name)&&(q[M.name]=S.getFileBlob(M.name));return q}p.readFilesFromTarGz=u})(gx||={});function CE(x,A){let e=Object.values(p0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function dE(x,A,e,r,t,s){await Z0.validateMinimumBackendVersion(x,A,e),s.includes(p0.Part.dde)&&await vA.fetchPreviousHistoryJson(x,A,e,r,t)}async function uE(x,A,e,r){r.defaultsOnly?(await dx.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",r0.filePaths.dist.definesTs,"(defaults only)"),await dx.exportDefinesTs(x,A,r,r0.filePaths.dist.definesAppTs),e.log("Generated",r0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await dx.exportDefinesTs(x,A,r),e.log("Generated",r0.filePaths.dist.definesTs))}async function DE(x,A,e){let r=await vA.compileDDE(x,A,e);if(r.ddeJSON){await vA.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await V.read(x,A);V.isLibrary(t)||await vA.exportHistoryJson(x,A,e,r.ddeJSON),await vA.exportOpenApi(x,A,e,r.ddeJSON),await V.isApmPartEnabled(x,A,p0.Part.dlo,t)&&(await vA.exportAutoDloFiles(x,A,e,r.ddeJSON),await lt.exportDloConfig(x,A,e))}return r.diagnostics}async function pE(x,A,e){let r=new jr(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function bE(x,A,e){return await ct.process(x,A,e)}async function mE(x,A,e){let r=await V.read(x,A);V.isLibrary(r)&&await hr.normalizeLibraryParts(x,A,r,e)}async function jE(x,A,e){let r=Ge.Utils.joinPath(x,r0.fileNames.reportTemplate);if(await A.stat(r)){let t=Ge.Utils.joinPath(x,r0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${r0.fileNames.reportTemplate}" to dist folder.`)}}function hE(x,A,e){A!==p0.Part.dlo&&yE(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 gE(x,A,e,r,t,s){let n=await e(t,s,x);return r.push(...n),hE(x,A,n)}function yE(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 $o(x,A,e,r,t){let s=await V.read(x,A);return await V.validateBasicManifest(x,A,s),await gx.buildAll(x,A,e,t,r),await Oe.createArchive(x,A)}async function To(x,A,e,r,t,s){if(!Object.values(p0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await V.validateBasicManifest(x,A,null),await gx.buildAll(x,A,e,s,r),await p0.createTag(x,A,t)}async function kE(x){let A=new Et.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 Cs.gzip(await e.arrayBuffer())}async function _E(x){let A=await wE(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 wE(x,A){let e=Cs.ungzip(x),r=await Et.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var SE=j0.bufferToBase64;var p0;(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;(q=>(q.dde="dde",q.dlo="dlo",q.pov="pov",q.blo="blo",q.dfiles="dfiles"))(A=u.Part||={});function e(p){let{description:m,name:_,pov:h,engines:S,blo:q,publisher:M,type:R}=p,O=R||V.ProjectTypes.app,t0={name:_,abstract:m,author:M||"",pov_location:V.PovLocation.embedded,pov_details_lowlevel:!1,required_be:S?.backend,required_hwfw:S?.hwfw?.join(";"),required_productcode:S?.productId?.join(";"),blo_level:q?.accessLevel||V.BloAccessLevel.restricted,pip_id:""};return h&&h.details&&(t0.pov_location=V.PovLocation.pure,t0.pov_details_lowlevel=!!h.details.lowLevel),O==="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,_){let h=await V.read(p,m),S=e(h),q={version:h.version,...S,phase:_};return await s(p,m,h,q)}u.createTag=r;async function t(p,m){let _=await V.read(p,m),S={...e(_),blo_autostart:!1};return s(p,m,_,S)}u.createDevTag=t;async function s(p,m,_,h){let S=new FormData;S.append("tag",JSON.stringify(h)),S.append(`src/${V.fileName}`,new Blob([await V.readAsBlob(p,m)]));let q=new Blob([await m.readFile(ie.Utils.joinPath(p,r0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",q),_.icon){let R=await m.readFile(ie.Utils.joinPath(p,_.icon)),O=SE(R);S.append("previews/00.png",new Blob([`data:image/png;base64,${O}`]))}if(Object.hasOwn(h,"phase")){let R=await gx.getReadmeFile(p,m,h.name),O=await gx.getChangelogFile(p,m);S.append("previews/README.md",new Blob([R])),S.append("previews/CHANGELOG.md",new Blob([O]))}if(await V.isApmPartEnabled(p,m,"dlo")){let R=new Blob([await m.readFile(ie.Utils.joinPath(p,r0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",R)}if(await V.isApmPartEnabled(p,m,"pov",_)){await qo(p,m,S,r0.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 M=await m.findFiles(p,`${r0.filePaths.dist.dfilesPath}/*`);for(let R of M){let O=new Blob([await m.readFile(R)]);S.append(`bin/dfiles/${ie.Utils.basename(R)}`,O)}return await V.isApmPartEnabled(p,m,"blo",_)&&await qo(p,m,S,r0.filePaths.dist.bloPath,"bin/blo"),await $E(p,m,S),S}u.createBuffer=s;async function n(p,m,_,h,S){let q=await V.read(p,m);h||await gx.validatePublishSettings(p,m,_,S);let{registry:M}=q,R=M?.id;if(!R&&!h&&(R=await F(p,m,_,q,S)),R){let{publisher:O}=q;if(!O)return null;try{return{id:R,...await tx.getExistingApplication(_,O,R,S)}}catch(t0){if(t0?.message==="Could not find given application")return R=await F(p,m,_,q,S),{id:R,...await tx.getExistingApplication(_,O,R,S)}}}return null}u.validateAccess=n;async function F(p,m,_,h,S){let q="myDatanet",{publisher:M,name:R,description:O,registry:t0}=h,I={id:t0?.id,type:h.type||V.ProjectTypes.app,name:R,targetSystem:q,description:O||"",allowedBackends:null};V.isAddon(h)&&(I.allowedApplications=null);let k=await tx.createNewApplication(_,M,I,S);if(!k)throw new Error("Failed to initialize application");return h.registry={id:k},await V.write(p,m,h),k}u.registerNew=F;async function v(p,m,_,h){let{name:S,publisher:q,description:M,registry:R}=await V.read(p,m),O=R?.id;await tx.updateExistingApplication(_,q,O,{description:M,name:S,targetSystem:"myDatanet"},h)}u.updateProfile=v;async function E(p,m,_,h,S){let{publisher:q,registry:M,version:R}=await V.read(p,m);return await tx.publishApplicationVersion(_,q,M?.id,R,h,S)}u.publishTag=E})(p0||={});async function qo(x,A,e,r,t){let s=await A.findFiles(x,`${r}/**`);for(let n of s){let F=ie.Utils.joinPath(x,r),v=n.path.substring(F.path.length+1),E=new Blob([await A.readFile(ie.Utils.joinPath(x,`${r}/${v}`))]);e.append(`${t}/${v}`,E)}}async function $E(x,A,e){let r=ie.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=ie.Utils.joinPath(x,r0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var Ro=require("deepmerge-ts"),TE=j0.isNumeric,Po="52v007",No="53v001",qE="54v001",PE="56v001",fA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,Ro.deepmerge)(structuredClone(this._manifest),fA._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}},V;(s0=>{let x=j0.convertBlobToString;s0.fileName="studio.json";let e;(I0=>(I0.m22x="m22x",I0.m23x="m23x",I0.nrf91="nrf91",I0.m2blegw="m2blegw",I0.m2easyv3="m2easyv3",I0.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 s;(l0=>(l0.embedded="$embedded",l0.pure="$pure"))(s=s0.PovLocation||={});function n(U){fA.overwrites=U}s0.setOverwrites=n;function F(){fA.overwrites=null}s0.clearOverwrites=F;async function v(U,v0){let l0=gr.Utils.joinPath(U,s0.fileName),B0=await v0.stat(l0);if(fA.manifest===null||l0?.fsPath!==fA.stat?.path.fsPath||B0?.ctime!==fA.stat?.ctime||B0?.mtime!==fA.stat?.mtime||B0?.size!==fA.stat?.size){let d0=await v0.readFile(l0),S0=x(d0);fA.manifest=JSON.parse(S0),fA.stat={...B0,path:l0}}return fA.manifest}s0.read=v;async function E(U,v0){return await v0.readFile(gr.Utils.joinPath(U,s0.fileName))}s0.readAsBlob=E;async function u(U,v0){let l0=gr.Utils.joinPath(U,s0.fileName),B0=await v0.readFile(l0),d0=x(B0);return JSON.parse(d0)}s0.readRaw=u;async function p(U,v0,l0){return fA.clear(),GE(l0),v0.writeFile(gr.Utils.joinPath(U,s0.fileName),JSON.stringify(l0,null," "))}s0.write=p;function m(U){return U.library!==void 0?U.library:U.type==="library"}s0.isLibrary=m;function _(U){return U.type==="addon"}s0.isAddon=_;function h(U){return U.type===void 0&&!m(U)?!0:U.type==="app"}s0.isApp=h;function S(U){return U.type===void 0?!0:U.type==="app"}s0.isIotApp=S;function q(U){return U.type==="analytics"}s0.isAnalytics=q;async function M(U,v0,l0){l0||(l0=await v(U,v0)),OE(l0),NE(l0),ME(l0),RE(l0)}s0.validateBasicManifest=M;function R(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=R;function O(U,v0){if(v0)return R(U);{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(!U.match(/^([a-zA-Z0-9 _-]+)$/))return l0;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])?l0:null}}s0.validateProjectName=O;function t0(U){return U.length<5?"The description must have at least 5 characters.":null}s0.validateDescription=t0;function I(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=I;async function k(U,v0,l0){return await tx.getPublisher(U,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 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 l0 of v0)if(!l0.match(L))return`Domain "${l0}" is invalid`}else if(!U?.match(L)&&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 l0 of v0)if(!l0.match(K))return`Application id "${l0}" is invalid`}else if(!U?.match(K)&&U!=="*")return'Invalid value for "allowedApplications"';return null}s0.validateRegistryAllowedApplications=J;async function H(U,v0,l0){let B0=l0.icon;if(!B0)throw new Error("App icon is required for publishing an application!");let d0=gr.Utils.joinPath(U,B0);if(!await v0.stat(d0))throw new Error(`Could not load icon "${B0}"`);let I0=await v0.readFile(d0),vx=(0,Mo.imageDimensionsFromData)(I0);if(!vx)throw new Error("App icon could not be validated!");if(vx?.width!==vx?.height)throw new Error("App icon has to be a square!");if(vx.width>512||vx.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,Io.isPNG)(I0))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');IE(U),LE(U)}s0.validateEngineSettings=a0;function n0(U,v0){let l0=S0=>{let I0=/^(\d+)v(\d+)$/.exec(S0);return I0?[Number(I0[1]),Number(I0[2])]:null},B0=l0(U),d0=l0(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,l0,B0){B0||(B0=await s0.read(U,v0));let d0=s0.isAddon(B0),S0=s0.isAnalytics(B0);switch(l0){case p0.Part.dlo:return!!B0?.dlo?.mainFile&&!d0&&!S0;case p0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case p0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case p0.Part.dde:case p0.Part.dfiles:return!0;default:return!1}}s0.isApmPartEnabled=Z})(V||={});function NE(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 ME(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 IE(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(V.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=Po){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 "${Po}"`)}function LE(x){if(!V.isAddon(x)&&!V.isAnalytics(x))return;let{backend:A}=x.engines,e=V.isAddon(x)?qE:PE;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 RE(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(V.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!V.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 OE(x){if((x.engines?.backend||"00v000")>=No||V.isLibrary(x)){if(!Lo.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${No} onwards "version" has to be a semantic version string!"`)}else if(!TE(x.version))throw new Error('"version" has to be a number!')}function GE(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var UA=W0(require("semver"));var Ho=W0(require("node:child_process")),Jo=require("minimatch");var UE=require("tinytar-fix"),HE=require("pako"),ae=".studio/libdeps",Bt="package.json",JE="package-lock.json";function Oo(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(Z0.dependencyIdToName)}async function KE(x,A,e,r){let t=px.Utils.joinPath(x,ae,r);try{return await A.stat(px.Utils.joinPath(t,V.fileName))?await V.readRaw(t,A):null}catch(s){return e.warn(`Could not read manifest for library "${r}": ${s}`),null}}async function zE(x,A,e,r){let t=new Set,s=Oo(r),n=null;for(;s.length>0;){let F=s.shift();if(t.has(F))continue;t.add(F);let v=await KE(x,A,e,F);if(!v)continue;let E=v.engines?.backend;E&&(!n||V.compareBackendVersion(E,n.backend)>0)&&(n={backend:E,requiredBy:`${v.publisher}/${v.name}`}),s.push(...Oo(v))}return n}var Z0;(I=>{async function x(k,L=!1){let Q=k.libraryDependencies||{};return L||Object.assign(Q,k.libraryDevDependencies||{}),Q}I.getAll=x;function A(k){return k.split("/")[1]}I.dependencyIdToName=A;function e(k,L){let Q=A(L);return px.Utils.joinPath(k,ae,Q)}I.dependencyToPath=e;function r(k){return isNaN(k.split("")[0])?k.substring(1):k}I.rangeToVersion=r;function t(k,L,Q){if(!UA.satisfies(L,Q,{includePrerelease:!0}))throw new Error(`${k}, version ${L} does not satisfy required constraint ${Q}`)}I.satisfiesSemverRange=t;async function s(k,L,Q={},K=!1){let J=await V.read(k,L),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),l0=UA.compare(U,v0);l0===1?(H[n0]=Z,t(n0,U,s0)):l0===-1&&(H[n0]=s0,t(n0,v0,Z))}else H[n0]=Q[n0];return H}I.validateDependencyTree=s;async function n(k,L,Q,K,J){let H=r(J),a0=px.Utils.joinPath(k,ae,K);try{let n0=await V.read(a0,L);return UA.gte(n0.version,H)&&n0.publisher.toLowerCase()===Q.toLowerCase()}catch{return!1}}I.isDependencyInstalled=n;async function F(k,L,Q,K){let J=px.Utils.joinPath(k,ae,K);await L.rm(J).catch(H=>{Q.error("removeExisting",H)})}I.removeExisting=F;async function v(k,L,Q,K,J){let H=UE.untar(HE.ungzip(J));await F(k,L,Q,K);for(let a0 of H.values())try{let n0=px.Utils.joinPath(k,ae,K,a0.name);await L.writeFile(n0,a0.data)}catch(n0){Q.error("Extracting lib",n0)}}I.extractLibraryContent=v;async function E(k,L,Q,K,J,H,a0,n0=!1){let[Z,s0]=H.split("/");if(a0&&await n(k,L,Z,s0,a0))return;await F(k,L,Q,s0);let U=await tx.getLibraryProfile(J,Z,s0,K),v0=a0?U.versions?.find(Ax=>UA.eq(Ax.name,I.rangeToVersion(a0))):U.versions[0];if(!v0)throw new Error(`Library ${H} with version ${a0} does not exist!`);let l0=v0.files.find(Ax=>Ax.name==="studio.json"),d0=(await VE(J,l0.downloadUrl)).libraryDependencies||{},S0={...d0};S0[H]=`^${v0.name}`,await s(k,L,S0,n0);for(let[Ax,AA]of Object.entries(d0))await E(k,L,Q,K,J,Ax,AA,n0);let I0=v0.files.find(Ax=>Ax.name==="library.tar.gz");if(!I0)throw new Error(`Library ${H} has no content!`);let vx=await tx.fetchCustomContent(J,I0.downloadUrl);await v(k,L,Q,s0,vx),await O(k,L,Q,s0,n0);let Kx=await V.read(k,L),yA=Kx.libraryDependencies||{},kA=Kx.libraryDevDependencies||{},ax=n0?kA:yA;ax[H]=`^${v0.name}`,Kx.libraryDependencies=yA,Kx.libraryDevDependencies=kA,await V.write(k,L,Kx)}I.installDependency=E;async function u(k,L,Q,K,J){let H=await V.read(k,L),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,L,Q,K,J,s0,U,v0)}for(let[s0]of Object.entries(Z)){let U=A(s0),v0=Object.hasOwn(n0,s0);await O(k,L,Q,U,v0)}Q.done(`Installed ${Object.entries(Z).length} dependencies`)}I.installDependencies=u;async function p(k,L,Q,K,J){let H=await V.read(k,L),a0=H.libraryDependencies||{},n0=H.libraryDevDependencies||{},Z=Object.assign(a0,n0),s0=`${K}/${J}`;delete Z[s0];let U=await WE(k,L,Z);if(!Object.hasOwn(U,s0))await t0(k,L,Q,J),await F(k,L,Q,J),delete n0[s0],delete a0[s0],await V.write(k,L,H);else throw new Error(`Library '${J}' not removed. This library is a dependency of other libraries.`)}I.uninstallDependency=p;async function m(k,L){try{let K=(await Ko(px.Utils.joinPath(k,Bt),L)).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}}I.readNpmWorkspacePatterns=m;function _(k,L){let Q=J=>J.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/$/,""),K=Q(k);return L.some(J=>{let H=Q(J);return H===K||(0,Jo.minimatch)(K,H)})}I.isPathInWorkspaces=_;function h(k,L){if(!L)return{rootInstall:!1,partInstalls:k.map(J=>J.workingPath)};let Q=[],K=!1;for(let J of k)_(J.workingPath,L)?K=!0:Q.push(J.workingPath);return{rootInstall:K,partInstalls:Q}}I.planNpmInstalls=h;async function S(k,L,Q){let K=await V.read(k,L),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,ae,n0);try{let s0=px.Utils.joinPath(Z,V.fileName);if(!await L.stat(s0))continue;let U=await V.readRaw(Z,L);await hr.normalizeLibraryParts(Z,L,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}`)}}}I.normalizeInstalledLibraryParts=S;async function q(k,L,Q){let K=await V.read(k,L),J=await zE(k,L,Q,K);if(!J)return;let H=K.engines?.backend;if(!H||V.compareBackendVersion(J.backend,H)>0){let a0=H?`"${H}"`:"none",n0=V.isLibrary(K)?"library":"application",Z=V.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}`)}}I.validateMinimumBackendVersion=q;async function M(k,L,Q){await S(k,L,Q);let K=await V.read(k,L),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,Bt);await L.stat(v0)&&H.push(s0)}if(H.length===0)return;let a0=await m(k,L),{rootInstall:n0,partInstalls:Z}=h(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 xn(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 QE(U,L,Q)}}I.installNpmInApmParts=M;async function R(k,L,Q){let K=await V.read(k,L),J=await x(K),H=[],a0=r0.filePaths[Q].path,n0=Q===p0.Part.dlo?"inc":"dfiles";for(let Z in J){let s0=I.dependencyToPath(k,Z),U=I.dependencyIdToName(Z),v0=px.Utils.joinPath(s0,a0,`${U}.${n0}`);await L.stat(v0)&&H.push({name:U,path:v0})}if(V.isLibrary(K)){let Z=px.Utils.joinPath(k,a0,`${K.name}.${n0}`);await L.stat(Z)&&H.push({name:K.name,path:Z})}return H}I.getApmPartDependencies=R;async function O(k,L,Q,K,J){let H=await V.read(k,L),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,ae,K,"dist",...Z.split("/"),Bt);if(await L.stat(U))try{let l0=await Go(k,L,s0),B0=J?"devDependencies":"dependencies";l0[B0]=l0[B0]||{};let d0=s0.split("/").length,S0=Array(d0).fill("..").join("/");l0[B0][K]=`file:${S0}/${ae}/${K}/dist/${Z}`,await Uo(k,L,s0,l0),Q.info(`Linked ${K} to ${n0} (${s0})`)}catch(l0){Q.warn(`Could not link ${K} to ${n0}: ${l0}`)}}}I.linkLibraryApmParts=O;async function t0(k,L,Q,K){let J=await V.read(k,L),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 Go(k,L,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 Uo(k,L,n0,Z),Q.info(`Unlinked ${K} from ${a0}`))}catch(Z){Q.warn(`Could not unlink ${K} from ${a0}: ${Z}`)}}I.unlinkLibraryApmParts=t0})(Z0||={});async function Ko(x,A){let e=await A.readFile(x);return JSON.parse(j0.convertBlobToString(e))}function Go(x,A,e){return Ko(px.Utils.joinPath(x,e,Bt),A)}async function Uo(x,A,e,r){let t=px.Utils.joinPath(x,e,Bt),s=JSON.stringify(r,null," ")+`
|
|
2335
|
-
`;await A.writeFile(t,s)}async function
|
|
2330
|
+
public ___${r0}( ${M})${k}`}else if(I=Za.exec(P)){let[,G,r0]=I;S=`${G}${r0}{_log_string="";_assert(__refid,__line);}`}else if(I=Ya.exec(P)){let[,G,r0,M,k]=I;S=`${G}${r0}{ if (!(${M})) { sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(I=Qa.exec(P)){let[,G,r0,M]=I;S=`${G}${r0}{ if (!(${M})) { _log_string="";_assert(__refid,__line); }}`}else if(I=xo.exec(P)){let[,G,r0,M]=I;S=`${G}${r0}_catch(__refid,__line,${M});`}else if(I=Ao.exec(P)){let[,G,r0,M,k,L]=I,{priority:Z,code:W}=za(k,M.substring(1));Z!==null&&(S=`${G}${r0}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${L});DDE_applog_write(${Z}, ${W}, params_str, __applog_src_id);}`)}else if(I=eo.exec(P)){let[,G,r0,M,k]=I,{priority:L,code:Z}=za(k,M.substring(1));L!==null&&(S=`${G}${r0}DDE_applog_write(${L}, ${Z}, "", __applog_src_id);`)}else if(I=ro.exec(P)){let[,G,r0,M,k]=I,L=M.substring(1),Z=to[L];S=`${G}${r0}{ if(_log_level <= ${Z}){ sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")}); _log${M}(__refid,__line); }}`}else(I=hc.exec(P))&&!F.includes(t0.filePaths.studio.auto.path)?(F.includes(t0.filePaths.studio.libdeps)||n.push({file:t,level:"warning",line:h,message:"Libraries are included automatically - remove this #include line"}),S="// Libraries are included automatically! - "+P):(I=gc.exec(P))&&(n.push({file:t,level:"error",line:h,message:"#endinput is not supported - use #if/#endif instead"}),S=P);v&&!r.legacyProject&&(kc.exec(P)&&(S=S.replaceAll("DDE_",`_${v}`)),_c.exec(P)&&(S=S.replace("onUplink",`_${v}`)),wc.exec(P)&&(S=S.replace("onUplink",`_${v}Uplink`))),u.push(S),_++;for(let G=0;G<R;G++)u.push(""),_++,h++}if(E!=="main.dlo"){let h=E.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),S=`_inc_${h}`.substring(0,31),P=`_inc_${h}_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(`
|
|
2331
|
+
`),diagnostics:n}}};var GA=require("vscode-uri");var T0=W0(require("fs")),nx=require("vscode-uri");var oo=W0(require("iconv-lite")),Pc=j0.convertBlobToStringArray,Fo=16384,vo=511,ls=Fo|vo,qc=32768,Nc=438,so=qc|Nc,Ic=new br,mr={};function lo(){let x=[];for(let A of Object.keys(mr))x.push(...mr[A].diagnostics);return x}var Qt=!!process.env.DLO_PROFILE,se={precompileCount:0,cacheHits:0,precompileMs:0};function fo(x){Qt&&(x.log(`[DLO_PROFILE] precompile: ${se.precompileCount} runs, ${se.cacheHits} cache hits, ${se.precompileMs.toFixed(1)}ms`),se.precompileCount=0,se.cacheHits=0,se.precompileMs=0)}var fs=(x,A,e,r)=>{let t={getattr(n){let F=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)),v=F.fsPath;if(!T0.existsSync(v))throw new x.ErrnoError(44);let E=ao(A,r,e,F),u=T0.statSync(v),D=E?.length||u.size;return{mode:u.isDirectory()?ls:so,size:D,atime:u.atime,mtime:u.mtime,ctime:u.ctime}},setattr(n,F){let v=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;if(!T0.existsSync(v))throw new x.ErrnoError(44);if(typeof F.size=="number"&&T0.truncateSync(v,F.size),typeof F.mode=="number"&&T0.chmodSync(v,F.mode),F.atime||F.mtime){let E=T0.statSync(v);T0.utimesSync(v,F.atime??E.atime,F.mtime??E.mtime)}},lookup(n,F){let E=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;if(!T0.existsSync(E))throw new x.ErrnoError(44);let u=T0.statSync(E),D=x.createNode(n,F,u.isDirectory()?ls:so,0);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},readdir(n){let F=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;return[".","..",...T0.readdirSync(F)]},mknod(n,F,v,E){let u=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.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=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.unlinkSync(v)},mkdir(n,F,v){let E=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.mkdirSync(E,{mode:v});let u=x.createNode(n,F,v|ls,0);return u.node_ops=n.node_ops,u.stream_ops=n.stream_ops,u},rmdir(n,F){let v=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;T0.rmdirSync(v)},rename(n,F,v){let E=nx.Utils.joinPath(nx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath,u=nx.Utils.joinPath(nx.URI.parse(F.mount.opts.root),x.getPath(F),v).fsPath;T0.renameSync(E,u)}},s={open(n){let F=nx.Utils.joinPath(nx.URI.parse(n.node.mount.opts.root),x.getPath(n.node));n.modifiedContent=ao(A,r,e,F),n.modifiedContent||(n.nfd=T0.openSync(F.fsPath,io(n.flags)))},close(n){n.nfd&&T0.closeSync(n.nfd)},read(n,F,v,E,u){if(!n.modifiedContent)return T0.readSync(n.nfd,F,v,E,u);let D=n.modifiedContent;if(u>=D.length)return 0;let m=D.length-u,_=Math.min(E,m);return Mc(D,F,v,u,u+_),_},write(n,F,v,E,u){return T0.writeSync(n.nfd,F,v,E,u)},flagsToMode:io,llseek(n,F,v){let E=F;if(v===1)E+=n.position;else if(v===2){let u=T0.fstatSync(n.nfd);E+=u.size}if(E<0)throw new x.ErrnoError(28);return n.position=E,E}};return{mount(){let n=ie(A),F=x.createNode(null,n,Fo|vo,0);return F.node_ops=t,F.stream_ops=s,F},node_ops:t,stream_ops:s}};function io(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 Mc(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 ao(x,A,e,r){let t=r.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let s=Lc(t);if(!s){delete mr[t];return}let n=mr[t];if(n&&n.mtimeMs===s.mtimeMs&&n.size===s.size)return Qt&&se.cacheHits++,n.buffer;let F=Qt?performance.now():0,v=Rc(x,A,e,r);return Qt&&(se.precompileCount++,se.precompileMs+=performance.now()-F),mr[t]={buffer:v.buffer,mtimeMs:s.mtimeMs,size:s.size,diagnostics:v.diagnostics},mr[t].buffer}function Lc(x){try{return T0.statSync(x)}catch{return null}}function Rc(x,A,e,r){let t=T0.readFileSync(r.fsPath),s=Pc(t),n=Ic.preCompileDloFile(x,A,e,r,s);return{buffer:oo.encode(n.data,"cp1252"),diagnostics:n.diagnostics}}function ie(x){return x.fsPath.replace(/\\/g,"/")}function vt(x,A){let e=ie(x);return ie(A).replace(e,"")}var bo=po(),ft=bo.createPawnCC,mo=bo.createPawnDbg;var jr=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 ft({noExitRuntime:A,print:n=>{let F=cs(this.cwd,n);this.logger.log(F?F.message:n),this.stdout.push(n)},printErr:n=>{let F=cs(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=ie(this.cwd),[r]=e.split("/"),t=this.dloCC.FS,s=await z.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=fs(t,this.cwd,s,this.logger),t.mkdir(r),t.mount(t.filesystems.NODEFS_TS,{root:"/"},r),t.chdir(ie(this.cwd))}async compile(A,e){let r=await z.read(A,e);if(!await z.isApmPartEnabled(A,e,p0.Part.dlo,r))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await e.mkdir(GA.Utils.joinPath(A,"dist/dlo"));let t=GA.Utils.joinPath(A,r.dlo?.mainFile||t0.filePaths.dlo.mainDLO),s=[],n=GA.Utils.joinPath(A,t0.filePaths.studio.auto.dlo.cfg),F=vt(A,n);s.push(`-T.${F}`);let v=0;try{let E=`.${vt(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:[...lo(),...Es(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,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`),fo(this.logger)}}return[...F.stdout,...F.stderr]}async getSymbolCompiler(){let A={stdout:[],stderr:[]},e=await ft({noExitRuntime:!1,print:F=>{A.stdout.push(F)},printErr:F=>{A.stderr.push(F)}}),r=ie(this.cwd),[t]=r.split("/"),s=e.FS,n=await z.read(this.cwd,this.fs);return s.filesystems.NODEFS_TS=fs(s,this.cwd,n,this.logger),s.mkdir(t),s.mount(s.filesystems.NODEFS_TS,{root:"/"},t),{compiler:e,print:A}}};function Es(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=cs(x,s);n&&r.push({file:GA.URI.parse(`file:///${n?.posixPath}`),level:n.level,line:Number(n.lineNumber)-1,message:n.msg})}return r}function cs(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=GA.Utils.joinPath(x,F).fsPath.replace(/\\/g,"/");m.startsWith("/")&&(m=m.substring(1));let _=A.replace(F,m);return{level:u,msg:n,posixPath:m,lineNumber:v,message:_}}async function jo(x,A,e){let r=["-M","-v2"],t=GA.Utils.joinPath(x,t0.filePaths.studio.auto.dlo.defaultInc);r.push(`-p.${vt(x,t)}`);let s=await Z0.getApmPartDependencies(x,A,p0.Part.dlo);for(let F of s){let v=GA.Utils.dirname(F.path);r.push(`-i.${vt(x,v)}`)}let n=e.dlo;return n&&r.push(...n.compileOptions),r.push("-o./dist/dlo/main.amx"),{path:GA.Utils.joinPath(x,t0.filePaths.studio.auto.dlo.cfg),data:r.join(`
|
|
2332
|
+
`)}}var ct;(v=>{v.createPawnCC=ft,v.createPawnDbg=mo,v.FileSequencer=pr,v.PreCompiler=br,v.Compiler=jr,v.uriToMemFs=ie,v.parseCompilerWarningsAndErrors=Es;async function F(E,u,D){let m=await z.read(E,u),_=await jo(E,u,m);await u.writeFile(_.path,_.data),D.log("Generated",t0.filePaths.studio.auto.dlo.cfg)}v.exportDloConfig=F})(ct||={});var Bs=require("vscode-uri");var go=W0(require("node:child_process"));var Zt;(e=>{async function x(r,t,s){let n=await z.read(r,t);if(await z.isApmPartEnabled(r,t,p0.Part.pov)){s.info("Executing POV build script",n.pov?.details.buildCommand);let{buildCommand:F,workingPath:v}=n.pov.details,E=Bs.Utils.joinPath(r,v);try{await ho(E,F,s)}catch(u){throw u.code?new Error(`APM part '${p0.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,p0.Part.blo,n)){s.info("Executing BLO build script",n.blo?.buildCommand);let{buildCommand:F,workingPath:v}=n.blo,E=Bs.Utils.joinPath(r,v);try{await ho(E,F,s)}catch(u){throw u.code?new Error(`APM part '${p0.Part.blo}' has errors. Aborted.`):u}}}e.tryBuildBlo=A})(Zt||={});async function ho(x,A,e){return new Promise((r,t)=>{go.exec(A,{cwd:x.fsPath,env:process.env},(s,n,F)=>{e.log(n),F&&e.error(F),s&&t(s),r(null)})})}var ko=require("vscode-uri");var ds=require("minimatch");var _o=require("@gera2ld/tarjs"),AE=j0.convertBlobToString,eE=require("pako"),wo=".studioignore",So=[".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/**"];So.push("**/.studio/**","**/node_modules/**",wo,"dist/defines.app.ts");var yo={dot:!0},Ge;(r=>{async function x(t,s){let n=new _o.TarWriter;(await A(t,s)).forEach(E=>{n.addFile(E.name,E.data)});let v=await n.write();return eE.gzip(await v.arrayBuffer())}r.createArchive=x;async function A(t,s){let n=[],{ignore:F,negate:v}=await rE(t,s),u=(await s.findFiles(t,"**/*")).filter(({path:D})=>{let m=D.slice(t.path.length+1);return!F.some(_=>(0,ds.minimatch)(m,_,yo))||v.some(_=>(0,ds.minimatch)(m,_.slice(1),yo))});for(let D of u){let m=D.path.slice(t.path.length+1),[_,h]=await Promise.all([s.stat(D),s.readFile(D)]);_&&n.push({name:m,data:h,modifyTime:new Date(_.mtime)})}return n}r.getFilesForArchive=A;async function e(t,s,n,F=dx.ENV.production){let{publisher:v,name:E,version:u}=s,D=await gx.readFilesFromTarGz(n,["CHANGELOG.md","README.md","studio.json"]),m={"CHANGELOG.md":await Cs(D["CHANGELOG.md"]),"README.md":await Cs(D["README.md"]),"studio.json":await Cs(D["studio.json"]),"library.tar.gz":n};return await tx.publishLibraryVersion(t,v,E,u,m,F)}r.publishPackage=e})(Ge||={});async function rE(x,A){let e=["!studio.json","!README.md"],t=(await tE(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=[...So,...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 tE(x,A){let e=ko.Utils.joinPath(x,wo);if(await A.stat(e)){let t=await A.readFile(e);return AE(t)}else return""}async function Cs(x){return new Uint8Array(await x.arrayBuffer())}var UA=require("vscode-uri");var je=require("yaml");var nE=j0.convertBlobToString,xn=j0.yamlRangeToLineInformation,Et;(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),_=UA.Utils.joinPath(F,t0.filePaths.dist.dfilesPath);await v.stat(_)&&await v.rm(_);for(let[h,S]of Object.entries(u))await iE(F,v,h,S,m);return Object.keys(u).length&&(E.done(`${Object.keys(u).length} dfiles processed.`),await v.writeFile(UA.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 Z0.getApmPartDependencies(F,v,p0.Part.dfiles);for(let h of D){let{properties:S,diagnostics:P}=await s(v,h.path,h.name);Object.assign(u,S),E.push(...P)}let{properties:m,diagnostics:_}=await s(v,UA.Utils.joinPath(F,t0.filePaths.dfiles.mainDFILES),null);return Object.assign(u,m),E.push(..._),{properties:u,diagnostics:E,libraryFiles:D}}n.parseDfile=t;async function s(F,v,E){let u=[],D={};if(!await F.stat(v))return{properties:D,diagnostics:u};let m=await F.readFile(v),_=nE(m),h=new je.LineCounter,P=(0,je.parseDocument)(_,{lineCounter:h}).contents||new je.YAMLMap;for(let I of P.items){let R=I.key.value,G=(0,je.isMap)(I.value)?I.value:null,r0=xn(h,I.key.range),M=G?G.has("syncMode"):!1,k=M?G.get("syncMode"):"crc_stamp";if(M){let J=Object.values(n.SyncLogic);if(!J.includes(k)){let a0=G.items.find(Q=>Q.key.value==="syncMode"),s0=xn(h,a0.key.range);u.push({file:v,code:"",message:`Property syncMode does not match any of "${J.join(", ")}"`,line:s0.line,startCharacter:s0.startCharacter,endCharacter:s0.endCharacter,level:"error"})}}else u.push({file:v,code:"",message:'Property "syncMode" missing',line:r0.line,startCharacter:r0.startCharacter,endCharacter:r0.endCharacter,level:"error"});let L=G?G.has("type"):!1,Z=L?G.get("type"):"static";if(L){let J=Object.values(n.Type);if(!J.includes(Z)){let a0=G.items.find(Q=>Q.key.value==="type"),s0=xn(h,a0.key.range);u.push({file:v,code:"",message:`Property type does not match any of "${J.join(", ")}"`,line:s0.line,startCharacter:s0.startCharacter,endCharacter:s0.endCharacter,level:"error"})}}R.match(/^[a-z0-9._-]*$/)||u.push({file:v,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:r0.line,startCharacter:r0.startCharacter,endCharacter:r0.endCharacter,level:"error"});let W=UA.Utils.joinPath(UA.Utils.dirname(v),R),U=await sE(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=xn(h,I.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=s})(Et||={});async function sE(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 iE(x,A,e,r,t){let n=r.library!==null?UA.Utils.dirname(t.find(E=>E.name===r.library).path):UA.Utils.joinPath(x,t0.filePaths.dfiles.path),F=UA.Utils.joinPath(x,t0.filePaths.dist.dfilesPath,e),v=UA.Utils.joinPath(n,e);await A.copy(v,F)}var us=require("vscode-uri");var $o=W0(require("semver")),aE="package.json",oE=["peerDependencies","dependencies","optionalDependencies"],FE=" ",hr;(r=>{r.PART_DIST_PATHS=[t0.filePaths.dist.bloPath,t0.filePaths.dist.povDetailsPath];async function A(t,s,n,F){let v=us.Utils.joinPath(t,aE),E=`${n.name}/${BE(t)}`;if(!await s.stat(v))return!1;let D=await vE(s,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(!$o.valid(n.version))return F.warn(`Library manifest version "${n.version}" is not a valid semantic version - skipped normalizing "${E}/package.json".`),!1;lE(m,n,E,F);let _=fE(m,n.version);m=_.pkg;let h=_.changed;h&&F.warn(`Patched version "${_.oldVersion??"<none>"}" -> "${n.version}" in "${E}/package.json" (studio.json is the source of truth).`);let S=EE(n);if(cE(m,S,E,F)&&(h=!0),!h)return!1;let P=CE(D.raw),I=D.raw.endsWith(`
|
|
2333
|
+
`),R=JSON.stringify(m,null,P)+(I?`
|
|
2334
|
+
`:"");try{await s.writeFile(v,R)}catch(G){return F.warn(`Could not write "${E}/package.json": ${G}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,s,n,F){for(let v of r.PART_DIST_PATHS){let E=us.Utils.joinPath(t,v);await A(E,s,n,F)}}r.normalizeLibraryParts=e})(hr||={});async function vE(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 lE(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 fE(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 cE(x,A,e,r){let t=!1;for(let s of oE){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 EE(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function BE(x){let A=x.path.replace(/\\/g,"/");for(let e of hr.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function CE(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:FE}var Bt=require("@gera2ld/tarjs"),To=j0.convertBlobToString,Ds=require("pako"),gx;(D=>{class x extends Error{_mergedDiagnostics;constructor(_,h){super(_),this.name="BuildError",this._mergedDiagnostics=h}get mergedDiagnostics(){return this._mergedDiagnostics}}D.BuildError=x;async function A(m,_,h,S,P,I=!0,R){I=dE(h,I),await uE(m,_,h,S,P,I);try{let M=await dx.read(m,_,h);await DE(m,_,h,M)}catch(M){h.warn("Could not generate defines.ts:",M)}let G={[p0.Part.dde]:[],[p0.Part.dlo]:[],[p0.Part.dfiles]:[]},r0={[p0.Part.dde]:pE,[p0.Part.dlo]:bE,[p0.Part.dfiles]:mE};try{for(let M of[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles])if(I.includes(M)&&(h.info(`Building ${M.toUpperCase()}...`),await yE(h,M,r0[M],G[M],m,_)))return G}catch(M){throw R?new x(M?.message,G):M}return I.includes(p0.Part.pov)?await Zt.tryBuildPov(m,_,h):h.info("Skipping pov build"),I.includes(p0.Part.blo)?await Zt.tryBuildBlo(m,_,h):h.info("Skipping blo build"),await jE(m,_,h),await hE(m,_,h),h.done("Project build completed."),G}D.buildAll=A;async function e(m,_,h,S,P,I,R){let G=await z.read(m,_);return z.isLibrary(G)?(h.info("Library project detected. Publishing library..."),s(m,_,h,P,S)):(h.info("App project detected. Publishing app..."),t(m,_,h,P,I,R,S))}D.release=e;async function r(m,_,h,S,P,I){let R=await z.read(m,_),G=`${R.name}-${R.version}.tar.gz`,r0=null;if(z.isLibrary(R))h.info("Library project detected. Packing library..."),r0=await Po(m,_,h,P,S);else{h.info("App project detected. Packing app...");let k=await qo(m,_,h,P,I,S);r0=await _E(k)}let M=Ue.Utils.joinPath(m,G);r0!==null?(await _.writeFile(M,r0),h.done(`Packaged: ${M.fsPath}`)):h.error(`Could not create archive: ${M.fsPath}`)}D.pack=r;async function t(m,_,h,S,P,I=null,R){if(!await p0.validateAccess(m,_,S,!1,R))throw new Error("Could not validate access to application");let r0=await qo(m,_,h,S,P,R);await p0.updateProfile(m,_,S,R);let M=await p0.publishTag(m,_,S,r0,R);if(I!==null){let k=await z.read(m,_);await tx.updateExistingApplicationVersion(S,k.publisher,k.registry?.id,k.version,{allowedBackends:I},R),h.info(`Tag "${M.version}" with phase "${M.phase}" shared with ${[...I].join(";")}!`)}h.done(`Tag "${M.version}" with phase "${M.phase}" published!`)}D.releaseAPM=t;async function s(m,_,h,S,P){let I=await z.read(m,_),R=await Po(m,_,h,S,P);await Ge.publishPackage(S,I,R,P),h.done(`Library "${I.publisher}/${I.name}" with version "${I.version}" published!`)}D.releaseLibrary=s;async function n(m,_,h,S,P,I,R,G=null){if(I==="*"){let U=await z.read(m,_);I=`${U.name}-${U.version}.tar.gz`,h.info(`Publishing detected archive package "${I}"...`)}let r0=Ue.Utils.joinPath(m,I);if(!await _.stat(r0))throw new Error(`Archive package not found: ${r0.fsPath}`);let M=await _.readFile(r0),k=await wE(M),{publisher:L,registry:Z,version:W}=k;z.isLibrary(k)?(await Ge.publishPackage(S,k,M,P),h.done(`Library "${L}/${k.name}" with version "${k.version}" published!`)):(await tx.updateApplicationFile(S,L,Z.id,W,"app.tar.gz",M,P),await tx.updateExistingApplicationVersion(S,L,Z?.id,W,{allowedBackends:G||void 0,phase:R||void 0},P),h.info(`Tag "${W}" with phase "${R}" shared with ${[...G||""].join(";")}!`),h.done(`Tag "${W}" with phase "${R}" published!`))}D.publishArchive=n;async function F(m,_,h){let S;try{S=await _.readFile(Ue.Utils.joinPath(m,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(To(S)===t0.readme(h))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}D.getReadmeFile=F;async function v(m,_){let h;try{h=await _.readFile(Ue.Utils.joinPath(m,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(To(h)===t0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return h}D.getChangelogFile=v;async function E(m,_,h,S){let P=await z.read(m,_),{name:I,publisher:R,description:G}=P,r0=z.validateProjectName(I,z.isLibrary(P));if(r0)throw new Error(`name: ${r0}`);let M=z.validateDescription(G);if(M)throw new Error(`description: ${M}`);let k=z.validatePublisherId(R)||await z.validatePublisherOnline(h,R,S);if(k)throw new Error(`publisher: ${k}`);if(!z.isLibrary(P)&&(await z.validateApplicationIcon(m,_,P),z.validateEngineSettings(P),z.isApp(P)&&await z.isApmPartEnabled(m,_,p0.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")}D.validatePublishSettings=E;async function u(m,_){let h=Ds.ungzip(m),S=await Bt.TarReader.load(h),P={};for(let I of S.fileInfos)_.includes(I.name)&&(P[I.name]=S.getFileBlob(I.name));return P}D.readFilesFromTarGz=u})(gx||={});function dE(x,A){let e=Object.values(p0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function uE(x,A,e,r,t,s){await Z0.validateMinimumBackendVersion(x,A,e),s.includes(p0.Part.dde)&&await lA.fetchPreviousHistoryJson(x,A,e,r,t)}async function DE(x,A,e,r){r.defaultsOnly?(await dx.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",t0.filePaths.dist.definesTs,"(defaults only)"),await dx.exportDefinesTs(x,A,r,t0.filePaths.dist.definesAppTs),e.log("Generated",t0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await dx.exportDefinesTs(x,A,r),e.log("Generated",t0.filePaths.dist.definesTs))}async function pE(x,A,e){let r=await lA.compileDDE(x,A,e);if(r.ddeJSON){await lA.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await z.read(x,A);z.isLibrary(t)||await lA.exportHistoryJson(x,A,e,r.ddeJSON),await lA.exportOpenApi(x,A,e,r.ddeJSON),await z.isApmPartEnabled(x,A,p0.Part.dlo,t)&&(await lA.exportAutoDloFiles(x,A,e,r.ddeJSON),await ct.exportDloConfig(x,A,e))}return r.diagnostics}async function bE(x,A,e){let r=new jr(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function mE(x,A,e){return await Et.process(x,A,e)}async function jE(x,A,e){let r=await z.read(x,A);z.isLibrary(r)&&await hr.normalizeLibraryParts(x,A,r,e)}async function hE(x,A,e){let r=Ue.Utils.joinPath(x,t0.fileNames.reportTemplate);if(await A.stat(r)){let t=Ue.Utils.joinPath(x,t0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${t0.fileNames.reportTemplate}" to dist folder.`)}}function gE(x,A,e){A!==p0.Part.dlo&&kE(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 yE(x,A,e,r,t,s){let n=await e(t,s,x);return r.push(...n),gE(x,A,n)}function kE(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 Po(x,A,e,r,t){let s=await z.read(x,A);return await z.validateBasicManifest(x,A,s),await gx.buildAll(x,A,e,t,r),await Ge.createArchive(x,A)}async function qo(x,A,e,r,t,s){if(!Object.values(p0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await z.validateBasicManifest(x,A,null),await gx.buildAll(x,A,e,s,r),await p0.createTag(x,A,t)}async function _E(x){let A=new Bt.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 Ds.gzip(await e.arrayBuffer())}async function wE(x){let A=await SE(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 SE(x,A){let e=Ds.ungzip(x),r=await Bt.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var $E=j0.bufferToBase64;var p0;(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:_,pov:h,engines:S,blo:P,publisher:I,type:R}=D,G=R||z.ProjectTypes.app,r0={name:_,abstract:m,author:I||"",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 h&&h.details&&(r0.pov_location=z.PovLocation.pure,r0.pov_details_lowlevel=!!h.details.lowLevel),G==="addon"&&(r0.required_hwfw=void 0,r0.required_productcode=void 0,r0.addon_max_sources=1,r0.addon_max_per_site=D.maxInstancesPerSite),r0}u.createBaseTagHeader=e;async function r(D,m,_){let h=await z.read(D,m),S=e(h),P={version:h.version,...S,phase:_};return await s(D,m,h,P)}u.createTag=r;async function t(D,m){let _=await z.read(D,m),S={...e(_),blo_autostart:!1};return s(D,m,_,S)}u.createDevTag=t;async function s(D,m,_,h){let S=new FormData;S.append("tag",JSON.stringify(h)),S.append(`src/${z.fileName}`,new Blob([await z.readAsBlob(D,m)]));let P=new Blob([await m.readFile(ae.Utils.joinPath(D,t0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",P),_.icon){let R=await m.readFile(ae.Utils.joinPath(D,_.icon)),G=$E(R);S.append("previews/00.png",new Blob([`data:image/png;base64,${G}`]))}if(Object.hasOwn(h,"phase")){let R=await gx.getReadmeFile(D,m,h.name),G=await gx.getChangelogFile(D,m);S.append("previews/README.md",new Blob([R])),S.append("previews/CHANGELOG.md",new Blob([G]))}if(await z.isApmPartEnabled(D,m,"dlo")){let R=new Blob([await m.readFile(ae.Utils.joinPath(D,t0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",R)}if(await z.isApmPartEnabled(D,m,"pov",_)){await No(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 I=await m.findFiles(D,`${t0.filePaths.dist.dfilesPath}/*`);for(let R of I){let G=new Blob([await m.readFile(R)]);S.append(`bin/dfiles/${ae.Utils.basename(R)}`,G)}return await z.isApmPartEnabled(D,m,"blo",_)&&await No(D,m,S,t0.filePaths.dist.bloPath,"bin/blo"),await TE(D,m,S),S}u.createBuffer=s;async function n(D,m,_,h,S){let P=await z.read(D,m);h||await gx.validatePublishSettings(D,m,_,S);let{registry:I}=P,R=I?.id;if(!R&&!h&&(R=await F(D,m,_,P,S)),R){let{publisher:G}=P;if(!G)return null;try{return{id:R,...await tx.getExistingApplication(_,G,R,S)}}catch(r0){if(r0?.message==="Could not find given application")return R=await F(D,m,_,P,S),{id:R,...await tx.getExistingApplication(_,G,R,S)}}}return null}u.validateAccess=n;async function F(D,m,_,h,S){let P="myDatanet",{publisher:I,name:R,description:G,registry:r0}=h,M={id:r0?.id,type:h.type||z.ProjectTypes.app,name:R,targetSystem:P,description:G||"",allowedBackends:null};z.isAddon(h)&&(M.allowedApplications=null);let k=await tx.createNewApplication(_,I,M,S);if(!k)throw new Error("Failed to initialize application");return h.registry={id:k},await z.write(D,m,h),k}u.registerNew=F;async function v(D,m,_,h){let{name:S,publisher:P,description:I,registry:R}=await z.read(D,m),G=R?.id;await tx.updateExistingApplication(_,P,G,{description:I,name:S,targetSystem:"myDatanet"},h)}u.updateProfile=v;async function E(D,m,_,h,S){let{publisher:P,registry:I,version:R}=await z.read(D,m);return await tx.publishApplicationVersion(_,P,I?.id,R,h,S)}u.publishTag=E})(p0||={});async function No(x,A,e,r,t){let s=await A.findFiles(x,`${r}/**`);for(let n of s){let F=ae.Utils.joinPath(x,r),v=n.path.substring(F.path.length+1),E=new Blob([await A.readFile(ae.Utils.joinPath(x,`${r}/${v}`))]);e.append(`${t}/${v}`,E)}}async function TE(x,A,e){let r=ae.Utils.joinPath(x,t0.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=ae.Utils.joinPath(x,t0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var Go=require("deepmerge-ts"),PE=j0.isNumeric,Io="52v007",Mo="53v001",qE="54v001",NE="56v001",fA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,Go.deepmerge)(structuredClone(this._manifest),fA._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;(i0=>{let x=j0.convertBlobToString;i0.fileName="studio.json";let e;(P0=>(P0.m22x="m22x",P0.m23x="m23x",P0.nrf91="nrf91",P0.m2blegw="m2blegw",P0.m2easyv3="m2easyv3",P0.m2easyiot="m2easyiot"))(e=i0.DeviceProfiles||={});let r;(d0=>(d0.app="app",d0.library="library",d0.addon="addon",d0.analytics="analytics"))(r=i0.ProjectTypes||={});let t;(l0=>(l0.restricted="restricted",l0.global="global"))(t=i0.BloAccessLevel||={});let s;(l0=>(l0.embedded="$embedded",l0.pure="$pure"))(s=i0.PovLocation||={});function n(H){fA.overwrites=H}i0.setOverwrites=n;function F(){fA.overwrites=null}i0.clearOverwrites=F;async function v(H,v0){let l0=gr.Utils.joinPath(H,i0.fileName),B0=await v0.stat(l0);if(fA.manifest===null||l0?.fsPath!==fA.stat?.path.fsPath||B0?.ctime!==fA.stat?.ctime||B0?.mtime!==fA.stat?.mtime||B0?.size!==fA.stat?.size){let d0=await v0.readFile(l0),S0=x(d0);fA.manifest=JSON.parse(S0),fA.stat={...B0,path:l0}}return fA.manifest}i0.read=v;async function E(H,v0){return await v0.readFile(gr.Utils.joinPath(H,i0.fileName))}i0.readAsBlob=E;async function u(H,v0){let l0=gr.Utils.joinPath(H,i0.fileName),B0=await v0.readFile(l0),d0=x(B0);return JSON.parse(d0)}i0.readRaw=u;async function D(H,v0,l0){return fA.clear(),UE(l0),v0.writeFile(gr.Utils.joinPath(H,i0.fileName),JSON.stringify(l0,null," "))}i0.write=D;function m(H){return H.library!==void 0?H.library:H.type==="library"}i0.isLibrary=m;function _(H){return H.type==="addon"}i0.isAddon=_;function h(H){return H.type===void 0&&!m(H)?!0:H.type==="app"}i0.isApp=h;function S(H){return H.type===void 0?!0:H.type==="app"}i0.isIotApp=S;function P(H){return H.type==="analytics"}i0.isAnalytics=P;async function I(H,v0,l0){l0||(l0=await v(H,v0)),GE(l0),IE(l0),ME(l0),OE(l0)}i0.validateBasicManifest=I;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}i0.validateLibraryName=R;function G(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}}i0.validateProjectName=G;function r0(H){return H.length<5?"The description must have at least 5 characters.":null}i0.validateDescription=r0;function M(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}i0.validatePublisherId=M;async function k(H,v0,l0){return await tx.getPublisher(H,v0,l0)?null:`Publisher '${v0}' does not exist.`}i0.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}i0.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}i0.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=gr.Utils.joinPath(H,B0);if(!await v0.stat(d0))throw new Error(`Could not load icon "${B0}"`);let P0=await v0.readFile(d0),vx=(0,Lo.imageDimensionsFromData)(P0);if(!vx)throw new Error("App icon could not be validated!");if(vx?.width!==vx?.height)throw new Error("App icon has to be a square!");if(vx.width>512||vx.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,Ro.isPNG)(P0))throw new Error("App icon has to be of type PNG!")}i0.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');LE(H),RE(H)}i0.validateEngineSettings=a0;function s0(H,v0){let l0=S0=>{let P0=/^(\d+)v(\d+)$/.exec(S0);return P0?[Number(P0[1]),Number(P0[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}i0.compareBackendVersion=s0;async function Q(H,v0,l0,B0){B0||(B0=await i0.read(H,v0));let d0=i0.isAddon(B0),S0=i0.isAnalytics(B0);switch(l0){case p0.Part.dlo:return!!B0?.dlo?.mainFile&&!d0&&!S0;case p0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case p0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case p0.Part.dde:case p0.Part.dfiles:return!0;default:return!1}}i0.isApmPartEnabled=Q})(z||={});function IE(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 ME(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 LE(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>=Io){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 "${Io}"`)}function RE(x){if(!z.isAddon(x)&&!z.isAnalytics(x))return;let{backend:A}=x.engines,e=z.isAddon(x)?qE:NE;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 OE(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 GE(x){if((x.engines?.backend||"00v000")>=Mo||z.isLibrary(x)){if(!Oo.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${Mo} onwards "version" has to be a semantic version string!"`)}else if(!PE(x.version))throw new Error('"version" has to be a number!')}function UE(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var HA=W0(require("semver"));var Ko=W0(require("node:child_process")),zo=require("minimatch");var HE=require("tinytar-fix"),JE=require("pako"),oe=".studio/libdeps",Ct="package.json",KE="package-lock.json";function Uo(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(Z0.dependencyIdToName)}async function zE(x,A,e,r){let t=px.Utils.joinPath(x,oe,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 VE(x,A,e,r){let t=new Set,s=Uo(r),n=null;for(;s.length>0;){let F=s.shift();if(t.has(F))continue;t.add(F);let v=await zE(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(...Uo(v))}return n}var Z0;(M=>{async function x(k,L=!1){let Z=k.libraryDependencies||{};return L||Object.assign(Z,k.libraryDevDependencies||{}),Z}M.getAll=x;function A(k){return k.split("/")[1]}M.dependencyIdToName=A;function e(k,L){let Z=A(L);return px.Utils.joinPath(k,oe,Z)}M.dependencyToPath=e;function r(k){return isNaN(k.split("")[0])?k.substring(1):k}M.rangeToVersion=r;function t(k,L,Z){if(!HA.satisfies(L,Z,{includePrerelease:!0}))throw new Error(`${k}, version ${L} does not satisfy required constraint ${Z}`)}M.satisfiesSemverRange=t;async function s(k,L,Z={},W=!1){let U=await z.read(k,L),J=U.libraryDependencies||{};W&&Object.assign(J,U.libraryDevDependencies);let a0=Object.keys(Z);for(let s0 of a0)if(Object.hasOwn(J,s0)){let Q=Z[s0],i0=J[s0],H=r(Q),v0=r(i0),l0=HA.compare(H,v0);l0===1?(J[s0]=Q,t(s0,H,i0)):l0===-1&&(J[s0]=i0,t(s0,v0,Q))}else J[s0]=Z[s0];return J}M.validateDependencyTree=s;async function n(k,L,Z,W,U){let J=r(U),a0=px.Utils.joinPath(k,oe,W);try{let s0=await z.read(a0,L);return HA.gte(s0.version,J)&&s0.publisher.toLowerCase()===Z.toLowerCase()}catch{return!1}}M.isDependencyInstalled=n;async function F(k,L,Z,W){let U=px.Utils.joinPath(k,oe,W);await L.rm(U).catch(J=>{Z.error("removeExisting",J)})}M.removeExisting=F;async function v(k,L,Z,W,U){let J=HE.untar(JE.ungzip(U));await F(k,L,Z,W);for(let a0 of J.values())try{let s0=px.Utils.joinPath(k,oe,W,a0.name);await L.writeFile(s0,a0.data)}catch(s0){Z.error("Extracting lib",s0)}}M.extractLibraryContent=v;async function E(k,L,Z,W,U,J,a0,s0=!1){let[Q,i0]=J.split("/");if(a0&&await n(k,L,Q,i0,a0))return;await F(k,L,Z,i0);let H=await tx.getLibraryProfile(U,Q,i0,W),v0=a0?H.versions?.find(Ax=>HA.eq(Ax.name,M.rangeToVersion(a0))):H.versions[0];if(!v0)throw new Error(`Library ${J} with version ${a0} does not exist!`);let l0=v0.files.find(Ax=>Ax.name==="studio.json"),d0=(await WE(U,l0.downloadUrl)).libraryDependencies||{},S0={...d0};S0[J]=`^${v0.name}`,await s(k,L,S0,s0);for(let[Ax,eA]of Object.entries(d0))await E(k,L,Z,W,U,Ax,eA,s0);let P0=v0.files.find(Ax=>Ax.name==="library.tar.gz");if(!P0)throw new Error(`Library ${J} has no content!`);let vx=await tx.fetchCustomContent(U,P0.downloadUrl);await v(k,L,Z,i0,vx),await G(k,L,Z,i0,s0);let Vx=await z.read(k,L),kA=Vx.libraryDependencies||{},_A=Vx.libraryDevDependencies||{},ax=s0?_A:kA;ax[J]=`^${v0.name}`,Vx.libraryDependencies=kA,Vx.libraryDevDependencies=_A,await z.write(k,L,Vx)}M.installDependency=E;async function u(k,L,Z,W,U){let J=await z.read(k,L),a0=J.libraryDependencies||{},s0=J.libraryDevDependencies||{},Q=Object.assign(a0,s0);for(let[i0,H]of Object.entries(Q)){let v0=Object.hasOwn(s0,i0);await E(k,L,Z,W,U,i0,H,v0)}for(let[i0]of Object.entries(Q)){let H=A(i0),v0=Object.hasOwn(s0,i0);await G(k,L,Z,H,v0)}Z.done(`Installed ${Object.entries(Q).length} dependencies`)}M.installDependencies=u;async function D(k,L,Z,W,U){let J=await z.read(k,L),a0=J.libraryDependencies||{},s0=J.libraryDevDependencies||{},Q=Object.assign(a0,s0),i0=`${W}/${U}`;delete Q[i0];let H=await XE(k,L,Q);if(!Object.hasOwn(H,i0))await r0(k,L,Z,U),await F(k,L,Z,U),delete s0[i0],delete a0[i0],await z.write(k,L,J);else throw new Error(`Library '${U}' not removed. This library is a dependency of other libraries.`)}M.uninstallDependency=D;async function m(k,L){try{let W=(await Vo(px.Utils.joinPath(k,Ct),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}}M.readNpmWorkspacePatterns=m;function _(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,zo.minimatch)(W,J)})}M.isPathInWorkspaces=_;function h(k,L){if(!L)return{rootInstall:!1,partInstalls:k.map(U=>U.workingPath)};let Z=[],W=!1;for(let U of k)_(U.workingPath,L)?W=!0:Z.push(U.workingPath);return{rootInstall:W,partInstalls:Z}}M.planNpmInstalls=h;async function S(k,L,Z){let W=await z.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 s0=a0.shift();if(J.has(s0))continue;J.add(s0);let Q=px.Utils.joinPath(k,oe,s0);try{let i0=px.Utils.joinPath(Q,z.fileName);if(!await L.stat(i0))continue;let H=await z.readRaw(Q,L);await hr.normalizeLibraryParts(Q,L,H,Z),a0.push(...[...Object.keys(H.libraryDependencies||{}),...Object.keys(H.libraryDevDependencies||{})].map(A))}catch(i0){Z.warn(`Could not normalize library parts for "${s0}": ${i0}`)}}}M.normalizeInstalledLibraryParts=S;async function P(k,L,Z){let W=await z.read(k,L),U=await VE(k,L,Z,W);if(!U)return;let J=W.engines?.backend;if(!J||z.compareBackendVersion(U.backend,J)>0){let a0=J?`"${J}"`:"none",s0=z.isLibrary(W)?"library":"application",Q=z.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 ${s0} "${W.publisher}/${W.name}" declares ${a0}. Raise "engines.backend" in studio.json to at least "${U.backend}".${Q}`)}}M.validateMinimumBackendVersion=P;async function I(k,L,Z){await S(k,L,Z);let W=await z.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 i0 of U){let H=px.Utils.joinPath(k,i0.workingPath),v0=px.Utils.joinPath(H,Ct);await L.stat(v0)&&J.push(i0)}if(J.length===0)return;let a0=await m(k,L),{rootInstall:s0,partInstalls:Q}=h(J,a0);if(s0){let i0=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 (${i0}) 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 i0 of J){if(!Q.includes(i0.workingPath))continue;a0?Z.warn(`${i0.workingPath} (${i0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):Z.info(`Installing npm dependencies for ${i0.name} (${i0.workingPath})...`);let H=px.Utils.joinPath(k,i0.workingPath);await ZE(H,L,Z)}}M.installNpmInApmParts=I;async function R(k,L,Z){let W=await z.read(k,L),U=await x(W),J=[],a0=t0.filePaths[Z].path,s0=Z===p0.Part.dlo?"inc":"dfiles";for(let Q in U){let i0=M.dependencyToPath(k,Q),H=M.dependencyIdToName(Q),v0=px.Utils.joinPath(i0,a0,`${H}.${s0}`);await L.stat(v0)&&J.push({name:H,path:v0})}if(z.isLibrary(W)){let Q=px.Utils.joinPath(k,a0,`${W.name}.${s0}`);await L.stat(Q)&&J.push({name:W.name,path:Q})}return J}M.getApmPartDependencies=R;async function G(k,L,Z,W,U){let J=await z.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:s0,partDistPath:Q,workingPath:i0}of a0){if(!i0)continue;let H=px.Utils.joinPath(k,oe,W,"dist",...Q.split("/"),Ct);if(await L.stat(H))try{let l0=await Ho(k,L,i0),B0=U?"devDependencies":"dependencies";l0[B0]=l0[B0]||{};let d0=i0.split("/").length,S0=Array(d0).fill("..").join("/");l0[B0][W]=`file:${S0}/${oe}/${W}/dist/${Q}`,await Jo(k,L,i0,l0),Z.info(`Linked ${W} to ${s0} (${i0})`)}catch(l0){Z.warn(`Could not link ${W} to ${s0}: ${l0}`)}}}M.linkLibraryApmParts=G;async function r0(k,L,Z,W){let U=await z.read(k,L),J=[{partName:"blo",workingPath:U.blo?.workingPath},{partName:"pov",workingPath:U.pov?.details?.workingPath}];for(let{partName:a0,workingPath:s0}of J)if(s0)try{let Q=await Ho(k,L,s0),i0=!1;Q.dependencies?.[W]?.startsWith("file:")&&(delete Q.dependencies[W],i0=!0),Q.devDependencies?.[W]?.startsWith("file:")&&(delete Q.devDependencies[W],i0=!0),i0&&(await Jo(k,L,s0,Q),Z.info(`Unlinked ${W} from ${a0}`))}catch(Q){Z.warn(`Could not unlink ${W} from ${a0}: ${Q}`)}}M.unlinkLibraryApmParts=r0})(Z0||={});async function Vo(x,A){let e=await A.readFile(x);return JSON.parse(j0.convertBlobToString(e))}function Ho(x,A,e){return Vo(px.Utils.joinPath(x,e,Ct),A)}async function Jo(x,A,e,r){let t=px.Utils.joinPath(x,e,Ct),s=JSON.stringify(r,null," ")+`
|
|
2335
|
+
`;await A.writeFile(t,s)}async function WE(x,A){return await tx.fetchCustomContent(x,A,!0)}async function XE(x,A,e){let r={};function t(E,u,D,m=!1){let _=r[E],h=Z0.rangeToVersion(D),S=Z0.rangeToVersion(D);(!_||HA.gt(h,S))&&(r[E]={publisherId:u,version:D,installed:m})}let s=Object.entries(e).map(([E,u])=>{let[D,m]=E.split("/");return t(m,D,u,!0),m}),n={};for(let E of s)try{let u=await YE(x,A,E);n[E]=Object.entries(u).map(([D,m])=>{let[_,h]=D.split("/");return t(h,_,m),h}),s.push(...n[E])}catch{let D=r[E];throw new Error(`Please import "${D.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:D}=r[E],m=QE(D,E,u);v[m.libraryId]=m.libraryVersion}),v}async function YE(x,A,e){let r=px.Utils.joinPath(x,oe,e);return(await z.read(r,A))?.libraryDependencies||{}}function QE(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)=>{Ko.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}
|
|
2336
2336
|
${n}
|
|
2337
|
-
${F}`));return}r()})})}async function
|
|
2338
|
-
`,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=Ev){let r=e>0?e:Ev;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==Ze.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 Ze.DebugMaster(A,Qe(this.logger??new oe.Logger));e.on("message",r=>{let t=qD(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[Bv(uv.default.decode(Buffer.from(e),"win1252")),Bv(Buffer.from(e).toString("utf8"))].find(PD);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 pv=require("node:events"),gA=W0(ye()),ND=1e3,MD=1e4,ID=200,Dv=new Set([gA.UtoTag.HISTDATA_RAW,gA.UtoTag.LOG,gA.UtoTag.ALERTS]),Pn=class extends pv.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,gA.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)||Dv.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:ND,MD),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,gA.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||Dv.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,gA.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?LD(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,gA.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,ID,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 LD(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var _t=(F=>(F[F.Success=0]="Success",F[F.BuildFailed=1]="BuildFailed",F[F.DeviceNotFound=2]="DeviceNotFound",F[F.UsbFailed=3]="UsbFailed",F[F.ModelMissing=7]="ModelMissing",F[F.UnknownContainer=8]="UnknownContainer",F[F.WriteForbidden=9]="WriteForbidden",F))(_t||{}),cx=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},RD=2e3,OD=3e3,GD=3e4,UD=1e4,HD=3e4,JD=1e3,Pi="dev",bv=`/api/1/sites/${Pi}`,mv="local",Nn="Device not connected",jv="device_id",Ni=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 KD(r,e)}catch(s){throw this.depth--,r.then(t,t),s}try{return await A()}finally{this.depth--,t()}}};function KD(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new cx(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var xr=class extends gv.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 Ni;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??xx.systemTimeSource,this.logStream=new qr({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 cx("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new cx("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 cx(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await Tn.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new xx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new cx(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=qi.Utils.joinPath(this.opts.cwd,r0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new cx(`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,xx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await Ti(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 cx(`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 cx(`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(jv)===null&&await this.storage.setMetadataValue(jv,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new cx(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=Qe(this.logger);this.stateManager=new xx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new xx.LocalDataManager(e,r),this.offlineSync=new xx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new Pn({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??RD,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 cx(Nn,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new cx(Nn,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,s)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(xx.UtoCommand.DATA,r,t,s))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:Pi,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,xx.createSiteInfoFromDde)(this.ddeModel,{siteUid:Pi,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:mv}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,xx.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 cx("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,xx.resolveTagInModel)(this.ddeModel,decodeURIComponent(s[1]));return n===null||!(0,xx.isDevicePushableTag)(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??OD,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 hv(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await V.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await gx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??dx.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 gx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=qi.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??lv)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,UD,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+HD;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 hv(JD)}}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 cx(Nn,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 cx(Nn,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:mv,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,xx.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:`${bv}/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:`${bv}/containers/${encodeURIComponent(s.name)}`,method:"PUT",body:JSON.stringify(t)});e[r]=n.status>=400?{ok:!1,err:zD(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,xx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??GD)}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 hv(x){return new Promise(A=>setTimeout(A,x))}function zD(x){try{return JSON.parse(x).err??x}catch{return x}}var $v=W0(require("node:http")),Tv=require("vscode-uri"),qv=W0(require("yaml"));var Pv=["log","state","sync","build","uto","container-changed","error"],VD=15e3,yv=4*1024*1024,WD="127.0.0.1",XD=8765,Nv="no-store",Mv="E_NOT_FOUND",kv="E_BAD_REQUEST",YD=2e3,QD=20;function Ar(x,A){return JSON.stringify({err:`${x} ${A}`})}function zA(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":Nv,...r}),x.end(e)}function ZD(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function x6(x,A){if(!(ZD(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 A6(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function e6(x,A){let e=x.headers.origin;typeof e=="string"&&A6(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 r6(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 ke=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function Iv(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>yv)throw x.pause(),new ke(413,"E_TOO_LARGE",`request body exceeds ${yv} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function Lv(x){return x!=="GET"&&x!=="HEAD"}function _v(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new ke(400,kv,"malformed JSON body")}if(typeof A!="object"||A===null)throw new ke(400,kv,"JSON body must be an object");return A}function wv(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function t6(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 Sv(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var Mi=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
|
|
2337
|
+
${F}`));return}r()})})}async function ZE(x,A,e){let r=px.Utils.joinPath(x,KE);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 Wo=W0(require("dotenv")),Xo=require("vscode-uri");var xB=".env.local",ps;(A=>{async function x(e,r){let t=Xo.Utils.joinPath(e,xB);if(await r.stat(t)){let s=await r.readFile(t);return Wo.default.parse(j0.convertBlobToString(s))}return{}}A.read=x})(ps||={});var yr=W0(require("chalk")),Fe;(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:yr.default.bgGreen.black(" DONE "),0:"",2:yr.default.bgBlueBright.black(" INFO "),3:yr.default.bgYellow.black(" WARNING "),4:yr.default.bgRed.black(" ERROR "),5:yr.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})(Fe||={});var Yi=require("node:child_process"),xl=require("node:fs"),Al=W0(require("node:path")),qr=require("vscode-uri");var kv=require("node:events"),Ii=require("vscode-uri"),xx=W0(ke());var AA=W0(ke());var Ti=W0(ke()),cv=2e3;function mD(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function jD(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var _n=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=jD(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,cv);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,mD(cv)])}},wn=class extends _n{constructor(A){super(A,Ti.USB_CONFIGURATION.utoInterface)}},Sn=class extends _n{constructor(A){super(A,Ti.USB_CONFIGURATION.debugInterface)}};var hD=9540,Pi;function gD(){if(!Pi){let{WebUSB:x}=require("usb");Pi=new x({allowedDevices:[{vendorId:hD}]})}return Pi}async function yD(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await gD().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 qi(x){return`Device not found with serial number: ${x}`}var kD=500;function _D(x){if(x instanceof $n)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(qi(""))}var $n=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function wD(x,A){try{return{uto:new wn(x),debug:A?new Sn(x):void 0}}catch(e){throw new $n("Device descriptors not ready",e)}}function SD(x){return async(A,e=!0)=>{let r=await yD(A,x);if(!r)throw new Error(qi(A));try{await r.open(),await r.selectConfiguration(AA.USB_CONFIGURATION.configurationNumber),await r.claimInterface(AA.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(AA.USB_CONFIGURATION.debugInterface);let{uto:t,debug:s}=wD(r,e);return{uto:t,debug:s,async close(){await t.stop(),await s?.stop(),r.opened&&(await r.releaseInterface(AA.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(AA.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function $D(x){return new Promise(A=>setTimeout(A,x))}async function TD(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(s){if(!_D(s)||Date.now()>=t)throw s;await $D(kD)}}function Ze(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 Ni(x,A={}){let e=A.logger??new Fe.Logger,r=A.transportFactory??SD(e),t=A.needDebug!==!1,s=await TD(r,x,t,A.retryMs??0),n=t?s.debug:void 0,F=Ze(e),v=n?new AA.AtCommandHandler(n,F):void 0,E=new AA.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 Ev(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 Ni(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 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(AA.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===qi(x)?D:`Upload failed: ${D}`}}finally{await E?.close()}}var Bv=require("vscode-uri"),Tn=W0(ke());var Pn=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=Bv.Utils.joinPath(A,t0.filePaths.studio.dev.mirror),s=new Tn.MemoryStorage;if(r.persist&&await e.stat(t))try{let n=new TextDecoder().decode(await e.readFile(t));s=Tn.MemoryStorage.fromJSON(JSON.parse(n))}catch(n){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${n instanceof Error?n.message:n}`),s=new Tn.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 uv=require("node:events"),qn=require("node:fs/promises"),Dv=require("node:path"),pv=W0(require("iconv-lite")),xr=W0(ke());var PD=5e3,Cv=500;function dv(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function qD(x){let A=x.level===xr.DebugLogLevel.info?"":`${xr.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function ND(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 Pr=class extends uv.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??PD,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,qn.mkdir)((0,Dv.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,qn.appendFile)(e,`${JSON.stringify(A)}
|
|
2338
|
+
`,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=Cv){let r=e>0?e:Cv;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==xr.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 xr.DebugMaster(A,Ze(this.logger??new Fe.Logger));e.on("message",r=>{let t=qD(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[dv(pv.default.decode(Buffer.from(e),"win1252")),dv(Buffer.from(e).toString("utf8"))].find(ND);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 mv=require("node:events"),yA=W0(ke()),ID=1e3,MD=1e4,LD=200,bv=new Set([yA.UtoTag.HISTDATA_RAW,yA.UtoTag.LOG,yA.UtoTag.ALERTS]),Nn=class extends mv.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,yA.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)||bv.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:ID,MD),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,yA.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||bv.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,yA.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?RD(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,yA.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,LD,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 RD(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var wt=(F=>(F[F.Success=0]="Success",F[F.BuildFailed=1]="BuildFailed",F[F.DeviceNotFound=2]="DeviceNotFound",F[F.UsbFailed=3]="UsbFailed",F[F.ModelMissing=7]="ModelMissing",F[F.UnknownContainer=8]="UnknownContainer",F[F.WriteForbidden=9]="WriteForbidden",F))(wt||{}),cx=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},OD=2e3,GD=3e3,UD=3e4,HD=1e4,JD=3e4,KD=1e3,Mi="dev",jv=`/api/1/sites/${Mi}`,hv="local",In="Device not connected",gv="device_id",Li=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 zD(r,e)}catch(s){throw this.depth--,r.then(t,t),s}try{return await A()}finally{this.depth--,t()}}};function zD(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new cx(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var Ar=class extends kv.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 Li;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??xx.systemTimeSource,this.logStream=new Pr({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 cx("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new cx("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 cx(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await Pn.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new xx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new cx(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=Ii.Utils.joinPath(this.opts.cwd,t0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new cx(`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,xx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await Ni(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 cx(`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 cx(`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(gv)===null&&await this.storage.setMetadataValue(gv,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new cx(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=Ze(this.logger);this.stateManager=new xx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new xx.LocalDataManager(e,r),this.offlineSync=new xx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new Nn({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??OD,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 cx(In,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new cx(In,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,s)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(xx.UtoCommand.DATA,r,t,s))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:Mi,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,xx.createSiteInfoFromDde)(this.ddeModel,{siteUid:Mi,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:hv}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,xx.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 cx("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,xx.resolveTagInModel)(this.ddeModel,decodeURIComponent(s[1]));return n===null||!(0,xx.isDevicePushableTag)(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??GD,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 yv(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 gx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??dx.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 gx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=Ii.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??Ev)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,HD,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+JD;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 yv(KD)}}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 cx(In,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 cx(In,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:hv,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,xx.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:`${jv}/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:`${jv}/containers/${encodeURIComponent(s.name)}`,method:"PUT",body:JSON.stringify(t)});e[r]=n.status>=400?{ok:!1,err:VD(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,xx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??UD)}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 yv(x){return new Promise(A=>setTimeout(A,x))}function VD(x){try{return JSON.parse(x).err??x}catch{return x}}var Pv=W0(require("node:http")),qv=require("vscode-uri"),Nv=W0(require("yaml"));var Iv=["log","state","sync","build","uto","container-changed","error"],WD=15e3,_v=4*1024*1024,XD="127.0.0.1",YD=8765,Mv="no-store",Lv="E_NOT_FOUND",wv="E_BAD_REQUEST",QD=2e3,ZD=20;function er(x,A){return JSON.stringify({err:`${x} ${A}`})}function VA(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":Mv,...r}),x.end(e)}function x6(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function A6(x,A){if(!(x6(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 e6(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function r6(x,A){let e=x.headers.origin;typeof e=="string"&&e6(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 t6(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 _e=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function Rv(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>_v)throw x.pause(),new _e(413,"E_TOO_LARGE",`request body exceeds ${_v} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function Ov(x){return x!=="GET"&&x!=="HEAD"}function Sv(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new _e(400,wv,"malformed JSON body")}if(typeof A!="object"||A===null)throw new _e(400,wv,"JSON body must be an object");return A}function $v(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function n6(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 Tv(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var Ri=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
|
|
2339
2339
|
|
|
2340
|
-
`),
|
|
2340
|
+
`),WD),this.heartbeat.unref?.()}broadcast(A,e){let r=`event: ${A}
|
|
2341
2341
|
data: ${JSON.stringify(e)}
|
|
2342
2342
|
|
|
2343
|
-
`;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>=
|
|
2343
|
+
`;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"),s=t?new Set(t.split(",").map(F=>F.trim()).filter(F=>Iv.includes(F))):null;e.writeHead(200,{"content-type":"text/event-stream","cache-control":Mv,connection:"keep-alive"}),e.write(`: connected
|
|
2344
2344
|
|
|
2345
|
-
`);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 n6(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:Lv(t)?await Iv(A):null},n=await x.handleApi(s);zA(e,n.status,n.body,n.headers)}async function s6(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(wv(r,"file"));case"POST /dev/sync":return t.sync(t6(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(Sv(e,"since",0),Sv(e,"limit",500))};case"POST /dev/at":return i6(t,wv(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 f6(x);case"GET /dev/configs":return t.configs();default:return}}async function i6(x,A){if(!A)throw new ke(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=Lv(n)?await Iv(A):"";try{if(n==="PUT"&&t==="/dev/configs"){let E=await x.session.applyConfigs(_v(F)),u=Object.values(E).every(p=>p.ok);zA(e,u?200:400,JSON.stringify({results:E}));return}let v=await s6(x,`${n} ${t}`,new URLSearchParams(s),_v(F));if(v===void 0){zA(e,404,Ar(Mv,`no route for ${n} ${t}`));return}zA(e,200,JSON.stringify(v))}catch(v){if(v instanceof ke){zA(e,v.status,Ar(v.code,v.message));return}zA(e,500,Ar("E_DEV",v instanceof Error?v.message:String(v)))}}async function o6(x,A,e,r){if(e6(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(!r6(e,x.token,F)){zA(r,401,Ar("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await n6(x.session,e,r,t):n?A.subscribe(e,r,s):t.startsWith("/dev/")?await a6(x,e,r,t):zA(r,404,Ar(Mv,`no route for ${t}`))}catch(v){if(v instanceof ke&&!r.headersSent){zA(r,v.status,Ar(v.code,v.message),{connection:"close"});return}throw v}}async function Ii(x){let{session:A,logger:e}=x,r=x.host??WD;x6(x,r);let t=new Mi;for(let F of Pv)A.on(F,v=>t.broadcast(F,v));let s=$v.default.createServer((F,v)=>{o6(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,Ar("E_INTERNAL",u))})});try{await new Promise((F,v)=>{s.once("error",v),s.listen(x.port??XD,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())),F6(YD)])}}}function F6(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var v6={"/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 f6(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=Tv.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=qv.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,...v6},A}var wt=require("node:fs"),Rv=require("node:path"),Ov=require("vscode-uri");var l6=300,c6=new Set([r0.fileNames.projectSettings,r0.filePaths.appIni]);function Li(x){return x instanceof Error?x.message:String(x)}function E6(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function B6(x){let A=[],e=r=>{A.push(r);for(let t of(0,wt.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,Rv.join)(r,t.name))};try{e(x)}catch{}return A}function Gv(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??l6,s=[],n,F=!1,v=!1,E=async()=>{if(F){v=!0;return}F=!0;try{let _=await e.build();if(_.ok!==!0){r.error(`Rebuild failed: ${_.message??"see diagnostics"}`);return}if(x.flash!==!1){let h=await e.flash();if(!h.success){r.error(h.message);return}}await e.sync()}catch(_){r.error(`Watch cycle failed: ${_ instanceof Error?_.message:String(_)}`)}finally{F=!1,v&&(v=!1,u())}};function u(){n&&clearTimeout(n),n=setTimeout(()=>{E()},t),n.unref?.()}let p=_=>(h,S)=>{let q=typeof S=="string"?S.replace(/\\/g,"/"):null;(!_||q!==null&&_(q))&&u()},m=(_,h,S)=>{let q=Ov.Utils.joinPath(A,_);try{s.push((0,wt.watch)(q.fsPath,{recursive:h},p(S)))}catch(M){if(E6(M))return;if(h){r.warn(`Recursive file watching is not available on this platform (${Li(M)}) \u2014 watching every directory under ${_} individually.`);for(let R of B6(q.fsPath))try{s.push((0,wt.watch)(R,{recursive:!1},p(S)))}catch(O){r.warn(`Could not watch ${R}: ${Li(O)}`)}return}r.warn(`Could not watch ${_}: ${Li(M)}`)}};return m(r0.filePaths.dlo.path,!0),m(r0.filePaths.dde.path,!0),m(".",!1,_=>c6.has(_)),{close(){n&&clearTimeout(n);for(let _ of s)_.close()}}}var C6=new Set(["uto-meta","state","console","command","recorder-drop"]),d6=".ndjson",u6=[".db",".sqlite",".sqlite3"];function Hv(x,A,e,r){if(!C6.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 D6(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 p6(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=Hv(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 b6(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 m6(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=b6(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 j6(x,A){let e=new TextDecoder().decode(await A.readFile(x)),{manifest:r,recordsBySession:t}=p6(D6(e));return{sessions:m6(r,t),recordsFor:n=>(t.get(n)??[]).slice().sort((F,v)=>F.ts-v.ts),warnings:[]}}async function h6(){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 Uv(x,A){let e=x.prepare(A),r=[];try{for(;e.step();)r.push(e.getAsObject())}finally{e.free()}return r}function St(x){return x==null?null:String(x)}function Ri(x){return typeof x=="number"?x:Number(x)}function g6(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 y6(x,A){let e=await h6(),r=await A.readFile(x),t=new e.Database(r);try{let s=[],n=new Map;for(let v of Uv(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let E=String(v.session_id),u=String(v.type),p=Ri(v.ts),m=g6(v.data,`${u}@${p} (session ${E})`,s),_=Hv(u,m,St(v.owner),p),h=n.get(E);h?h.push(_):n.set(E,[_])}return{sessions:Uv(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:St(v.serial),deviceId:St(v.device_id),startedTs:Ri(v.started_ts),endedTs:v.ended_ts===null||v.ended_ts===void 0?null:Ri(v.ended_ts),appVersion:St(v.app_version),platform:St(v.platform),recordCount:(n.get(E)??[]).length}}),recordsFor:v=>n.get(v)??[],warnings:s}}finally{t.close()}}async function Oi(x,A){let e=x.path.toLowerCase();if(e.endsWith(d6))return j6(x,A);if(u6.some(r=>e.endsWith(r)))return y6(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function Gi(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 Vv=require("node:events"),Wv=W0(ye());var Jv="at-tx",Ui="at-rx",k6=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function _6(x){let A="";for(let e=0;e<x.length;e++)A+=String.fromCharCode(x[e]);return A}function Kv(x){let A=k6.exec(_6(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function w6(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 S6(x,A){if(w6(x,A))return!0;let e=Kv(x),r=Kv(A);return e!==null&&r!==null&&e===r}function $6(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function T6(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function Hi(x){return`hex[${$6(x)}] ascii["${T6(x)}"]`}function q6(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function Ji(x){return x===void 0?1:x==="max"||x<=0?0:x}var Mn=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===Jv||r.type===Ui).slice().sort((r,t)=>r.ts-t.ts).map(r=>({record:r,consumed:!1})),this.speed=Ji(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!==Ui)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!==Jv;)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: ${Hi(e)}`);return}let t=r.record.bytes??new Uint8Array(0);if(!S6(t,e)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${Hi(t)} actual: ${Hi(e)}`);return}for(r.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===Ui;)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=q6(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(r)}};var In="state",zi="console",Xv="command",Yv="uto-meta",Ki="at",P6=new Set([In,zi,Xv,Yv]),N6="not available in replay mode",zv="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function M6(x){return x===In?"state":x===zi?"console":x===Yv?"uto":Ki}function I6(x,A){return x===zi&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===Xv&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var $t=class extends Vv.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 qr({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 Mn(e,{speed:A.speed,baseTs:r,onWarning:t=>this.logStream.push(Ki,t)}),this.atHandler=new Wv.AtCommandHandler(this.transport,Qe(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=Ji(this.speed);for(let t of A){if(!P6.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===In&&(this.lastState=A.json??null,this.emit(In,this.lastState)),this.logStream.push(M6(A.type),I6(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:zv})}}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 cx(N6,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(Ki,`> ${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:zv};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 L6="details";function R6(){return[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles]}async function xf(x,A,e){let r=e.logger??new oe.Logger;if(e.replay){if(e.serial)throw new Error("--replay cannot be combined with --serial");return G6(x,A,e,r)}if(!e.serial)throw new Error("--serial is required unless --replay is given");let t=new xr({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??R6(),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 Ii({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=Gv({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=Af(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(),ef(F,r),await v.close(),await t.stop()}}}function O6(x,A){return Zv.isAbsolute(A)?Pr.URI.file(A):Pr.Utils.joinPath(x,A)}async function G6(x,A,e,r){let t=O6(x,e.replay),s=await Oi(t,A);for(let p of s.warnings)r.warn(p);let n=Gi(s,e.session),F=new $t({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 Ii({session:F,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.pov&&(E=Af(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(){ef(E,r),await u.close(),await F.stop()}}}function Af(x,A,e,r,t){let s=typeof r=="string"&&r.length>0?r:L6,n=Pr.Utils.joinPath(x,"pov",s);if(!(0,Qv.existsSync)(Pr.Utils.joinPath(n,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${n.fsPath}`);return}let F=(0,Vi.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 ef(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,Vi.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 rf=require("uuid"),U6="b4baec47-0ba4-4e37-b237-8f9cde42b8dd",Wi=(t=>(t.Get="GET",t.Post="POST",t.Put="PUT",t.Delete="DELETE",t))(Wi||{});var Ln=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 Xi(x){return(0,rf.v5)(x,U6)}async function tf(x,A,e,r,t,s,n){let F=await V.read(x,A),v=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),E=F.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),u=await V.isApmPartEnabled(x,A,p0.Part.dlo,F),p=u&&r,m=p?r.toUpperCase():`${E}_${v}`,_=p?r:m,h=n||m;return h.length>50&&(e.warn(`Site name "${h}" is too long. Truncating to 50 characters.`),h=h.substring(0,50)),{apmId:Xi(_),applicationId:null,name:h,version:1,serialNumber:u?r:void 0,siteUid:null,customerUid:s}}async function H6(x,A,e,r,t,s,n=!1){if(s.length>0)for(let F of s){let[v,E]=F.split("@");await Z0.installDependency(x,A,e,r,t,v,E||null,n)}else await Z0.installDependencies(x,A,e,r,t);await Z0.installNpmInApmParts(x,A,e)}async function J6(x,A,e,r,t=null,s=!0,n){return await V.validateBasicManifest(x,A,null),gx.buildAll(x,A,e,r,t,s,n)}async function K6(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await V.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function z6(x,A,e,r,t,s,n,F){e.info("Publishing package...");let v=await K6(s);if(F)await gx.publishArchive(x,A,e,t,r,F,n,v);else return await gx.validatePublishSettings(x,A,t,r),gx.release(x,A,e,r,t,n,v)}async function V6(x,A,e,r,t,s){return gx.pack(x,A,e,r,t,s)}0&&(module.exports={APM,DDE,DDE_Core,DFILES,DLO,DefaultFiles,Dependencies,DevError,DevExitCode,DevSession,DeviceProfiles,Diagnostics,ENV,Globals,Helper,HttpMethod,Library,Log,Manifest,MyDatanetClient,Package,Registry,build,buildDevelopmentInstallInfo,dev,generateDevApmId,install,pack,publish});
|
|
2345
|
+
`);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 s6(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:Ov(t)?await Rv(A):null},n=await x.handleApi(s);VA(e,n.status,n.body,n.headers)}async function i6(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($v(r,"file"));case"POST /dev/sync":return t.sync(n6(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(Tv(e,"since",0),Tv(e,"limit",500))};case"POST /dev/at":return a6(t,$v(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 f6(x);case"GET /dev/configs":return t.configs();default:return}}async function a6(x,A){if(!A)throw new _e(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function o6(x,A,e,r){let[t,s=""]=r.split("?"),n=A.method??"GET",F=Ov(n)?await Rv(A):"";try{if(n==="PUT"&&t==="/dev/configs"){let E=await x.session.applyConfigs(Sv(F)),u=Object.values(E).every(D=>D.ok);VA(e,u?200:400,JSON.stringify({results:E}));return}let v=await i6(x,`${n} ${t}`,new URLSearchParams(s),Sv(F));if(v===void 0){VA(e,404,er(Lv,`no route for ${n} ${t}`));return}VA(e,200,JSON.stringify(v))}catch(v){if(v instanceof _e){VA(e,v.status,er(v.code,v.message));return}VA(e,500,er("E_DEV",v instanceof Error?v.message:String(v)))}}async function F6(x,A,e,r){if(r6(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(!t6(e,x.token,F)){VA(r,401,er("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await s6(x.session,e,r,t):n?A.subscribe(e,r,s):t.startsWith("/dev/")?await o6(x,e,r,t):VA(r,404,er(Lv,`no route for ${t}`))}catch(v){if(v instanceof _e&&!r.headersSent){VA(r,v.status,er(v.code,v.message),{connection:"close"});return}throw v}}async function Oi(x){let{session:A,logger:e}=x,r=x.host??XD;A6(x,r);let t=new Ri;for(let F of Iv)A.on(F,v=>t.broadcast(F,v));let s=Pv.default.createServer((F,v)=>{F6(x,t,F,v).catch(E=>{let u=E instanceof Error?E.message:String(E);e.error(`Dev server error: ${u}`),v.headersSent||VA(v,500,er("E_INTERNAL",u))})});try{await new Promise((F,v)=>{s.once("error",v),s.listen(x.port??YD,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())),v6(QD)])}}}function v6(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var l6={"/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 f6(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=qv.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=Nv.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,...l6},A}var St=require("node:fs"),Gv=require("node:path"),Uv=require("vscode-uri");var c6=300,E6=new Set([t0.fileNames.projectSettings,t0.filePaths.appIni]);function Gi(x){return x instanceof Error?x.message:String(x)}function B6(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function C6(x){let A=[],e=r=>{A.push(r);for(let t of(0,St.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,Gv.join)(r,t.name))};try{e(x)}catch{}return A}function Hv(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??c6,s=[],n,F=!1,v=!1,E=async()=>{if(F){v=!0;return}F=!0;try{let _=await e.build();if(_.ok!==!0){r.error(`Rebuild failed: ${_.message??"see diagnostics"}`);return}if(x.flash!==!1){let h=await e.flash();if(!h.success){r.error(h.message);return}}await e.sync()}catch(_){r.error(`Watch cycle failed: ${_ instanceof Error?_.message:String(_)}`)}finally{F=!1,v&&(v=!1,u())}};function u(){n&&clearTimeout(n),n=setTimeout(()=>{E()},t),n.unref?.()}let D=_=>(h,S)=>{let P=typeof S=="string"?S.replace(/\\/g,"/"):null;(!_||P!==null&&_(P))&&u()},m=(_,h,S)=>{let P=Uv.Utils.joinPath(A,_);try{s.push((0,St.watch)(P.fsPath,{recursive:h},D(S)))}catch(I){if(B6(I))return;if(h){r.warn(`Recursive file watching is not available on this platform (${Gi(I)}) \u2014 watching every directory under ${_} individually.`);for(let R of C6(P.fsPath))try{s.push((0,St.watch)(R,{recursive:!1},D(S)))}catch(G){r.warn(`Could not watch ${R}: ${Gi(G)}`)}return}r.warn(`Could not watch ${_}: ${Gi(I)}`)}};return m(t0.filePaths.dlo.path,!0),m(t0.filePaths.dde.path,!0),m(".",!1,_=>E6.has(_)),{close(){n&&clearTimeout(n);for(let _ of s)_.close()}}}var d6=new Set(["uto-meta","state","console","command","recorder-drop"]),u6=".ndjson",D6=[".db",".sqlite",".sqlite3"];function Kv(x,A,e,r){if(!d6.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 p6(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),s=new Uint8Array(Buffer.from(t.data,"base64")),n=Kv(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 m6(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 j6(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=m6(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 h6(x,A){let e=new TextDecoder().decode(await A.readFile(x)),{manifest:r,recordsBySession:t}=b6(p6(e));return{sessions:j6(r,t),recordsFor:n=>(t.get(n)??[]).slice().sort((F,v)=>F.ts-v.ts),warnings:[]}}async function g6(){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 Jv(x,A){let e=x.prepare(A),r=[];try{for(;e.step();)r.push(e.getAsObject())}finally{e.free()}return r}function $t(x){return x==null?null:String(x)}function Ui(x){return typeof x=="number"?x:Number(x)}function y6(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 k6(x,A){let e=await g6(),r=await A.readFile(x),t=new e.Database(r);try{let s=[],n=new Map;for(let v of Jv(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let E=String(v.session_id),u=String(v.type),D=Ui(v.ts),m=y6(v.data,`${u}@${D} (session ${E})`,s),_=Kv(u,m,$t(v.owner),D),h=n.get(E);h?h.push(_):n.set(E,[_])}return{sessions:Jv(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:$t(v.serial),deviceId:$t(v.device_id),startedTs:Ui(v.started_ts),endedTs:v.ended_ts===null||v.ended_ts===void 0?null:Ui(v.ended_ts),appVersion:$t(v.app_version),platform:$t(v.platform),recordCount:(n.get(E)??[]).length}}),recordsFor:v=>n.get(v)??[],warnings:s}}finally{t.close()}}async function Hi(x,A){let e=x.path.toLowerCase();if(e.endsWith(u6))return h6(x,A);if(D6.some(r=>e.endsWith(r)))return k6(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function Ji(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 Xv=require("node:events"),Yv=W0(ke());var zv="at-tx",Ki="at-rx",_6=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function w6(x){let A="";for(let e=0;e<x.length;e++)A+=String.fromCharCode(x[e]);return A}function Vv(x){let A=_6.exec(w6(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function S6(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 $6(x,A){if(S6(x,A))return!0;let e=Vv(x),r=Vv(A);return e!==null&&r!==null&&e===r}function T6(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function P6(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function zi(x){return`hex[${T6(x)}] ascii["${P6(x)}"]`}function q6(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function Vi(x){return x===void 0?1:x==="max"||x<=0?0:x}var Mn=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===zv||r.type===Ki).slice().sort((r,t)=>r.ts-t.ts).map(r=>({record:r,consumed:!1})),this.speed=Vi(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!==Ki)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!==zv;)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: ${zi(e)}`);return}let t=r.record.bytes??new Uint8Array(0);if(!$6(t,e)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${zi(t)} actual: ${zi(e)}`);return}for(r.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===Ki;)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=q6(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(r)}};var Ln="state",Xi="console",Qv="command",Zv="uto-meta",Wi="at",N6=new Set([Ln,Xi,Qv,Zv]),I6="not available in replay mode",Wv="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function M6(x){return x===Ln?"state":x===Xi?"console":x===Zv?"uto":Wi}function L6(x,A){return x===Xi&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===Qv&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var Tt=class extends Xv.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 Pr({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 Mn(e,{speed:A.speed,baseTs:r,onWarning:t=>this.logStream.push(Wi,t)}),this.atHandler=new Yv.AtCommandHandler(this.transport,Ze(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=Vi(this.speed);for(let t of A){if(!N6.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===Ln&&(this.lastState=A.json??null,this.emit(Ln,this.lastState)),this.logStream.push(M6(A.type),L6(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:Wv})}}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 cx(I6,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(Wi,`> ${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:Wv};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 R6="details";function O6(){return[p0.Part.dde,p0.Part.dlo,p0.Part.dfiles]}async function el(x,A,e){let r=e.logger??new Fe.Logger;if(e.replay){if(e.serial)throw new Error("--replay cannot be combined with --serial");return U6(x,A,e,r)}if(!e.serial)throw new Error("--serial is required unless --replay is given");let t=new Ar({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??O6(),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 Oi({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=Hv({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=rl(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(),tl(F,r),await v.close(),await t.stop()}}}function G6(x,A){return Al.isAbsolute(A)?qr.URI.file(A):qr.Utils.joinPath(x,A)}async function U6(x,A,e,r){let t=G6(x,e.replay),s=await Hi(t,A);for(let D of s.warnings)r.warn(D);let n=Ji(s,e.session),F=new Tt({file:t.fsPath,recording:s,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 Oi({session:F,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.pov&&(E=rl(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(){tl(E,r),await u.close(),await F.stop()}}}function rl(x,A,e,r,t){let s=typeof r=="string"&&r.length>0?r:R6,n=qr.Utils.joinPath(x,"pov",s);if(!(0,xl.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,Yi.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 tl(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,Yi.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 nl=require("uuid"),H6="b4baec47-0ba4-4e37-b237-8f9cde42b8dd",Qi=(t=>(t.Get="GET",t.Post="POST",t.Put="PUT",t.Delete="DELETE",t))(Qi||{});var Rn=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 Zi(x){return(0,nl.v5)(x,H6)}async function sl(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,p0.Part.dlo,F),D=u&&r,m=D?r.toUpperCase():`${E}_${v}`,_=D?r:m,h=n||m;return h.length>50&&(e.warn(`Site name "${h}" is too long. Truncating to 50 characters.`),h=h.substring(0,50)),{apmId:Zi(_),applicationId:null,name:h,version:1,serialNumber:u?r:void 0,siteUid:null,customerUid:s}}async function J6(x,A,e,r,t,s,n=!1){if(s.length>0)for(let F of s){let[v,E]=F.split("@");await Z0.installDependency(x,A,e,r,t,v,E||null,n)}else await Z0.installDependencies(x,A,e,r,t);await Z0.installNpmInApmParts(x,A,e)}async function K6(x,A,e,r,t=null,s=!0,n){return await z.validateBasicManifest(x,A,null),gx.buildAll(x,A,e,r,t,s,n)}async function z6(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 V6(x,A,e,r,t,s,n,F){e.info("Publishing package...");let v=await z6(s);if(F)await gx.publishArchive(x,A,e,t,r,F,n,v);else return await gx.validatePublishSettings(x,A,t,r),gx.release(x,A,e,r,t,n,v)}async function W6(x,A,e,r,t,s){return gx.pack(x,A,e,r,t,s)}0&&(module.exports={APM,DDE,DDE_Core,DFILES,DLO,DefaultFiles,Dependencies,DevError,DevExitCode,DevSession,DeviceProfiles,Diagnostics,ENV,Globals,Helper,HttpMethod,Library,Log,Manifest,MyDatanetClient,Package,Registry,build,buildDevelopmentInstallInfo,dev,generateDevApmId,install,pack,publish});
|
|
2346
2346
|
/*! Bundled license information:
|
|
2347
2347
|
|
|
2348
2348
|
@microtronics/device-master/dist/cjs/index.cjs:
|