@microtronics/studio-cli 1.3.0-alpha.0 → 1.3.0-alpha.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 +48 -48
- package/out/studio-cli.d.ts +46 -1
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var uf=Object.create;var an=Object.defineProperty;var Df=Object.getOwnPropertyDescriptor;var pf=Object.getOwnPropertyNames;var bf=Object.getPrototypeOf,mf=Object.prototype.hasOwnProperty;var ro=(x,A)=>()=>(A||x((A={exports:{}}).exports,A),A.exports),hf=(x,A)=>{for(var e in A)an(x,e,{get:A[e],enumerable:!0})},to=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of pf(A))!mf.call(x,t)&&t!==e&&an(x,t,{get:()=>A[t],enumerable:!(r=Df(A,t))||r.enumerable});return x};var U0=(x,A,e)=>(e=x!=null?uf(bf(x)):{},to(A||!x||!x.__esModule?an(e,"default",{value:x,enumerable:!0}):e,x)),jf=x=>to(an({},"__esModule",{value:!0}),x);var rF=ro((um,eF)=>{"use strict";var LE=Object.create,yt=Object.defineProperty,RE=Object.getOwnPropertyDescriptor,Yo=Object.getOwnPropertyNames,OE=Object.getPrototypeOf,GE=Object.prototype.hasOwnProperty,UE=(x,A,e)=>A in x?yt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,Qo=(x,A)=>function(){return A||(0,x[Yo(x)[0]])((A={exports:{}}).exports,A),A.exports},HE=(x,A)=>{for(var e in A)yt(x,e,{get:A[e],enumerable:!0})},Zo=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of Yo(A))!GE.call(x,t)&&t!==e&&yt(x,t,{get:()=>A[t],enumerable:!(r=RE(A,t))||r.enumerable});return x},xF=(x,A,e)=>(e=x!=null?LE(OE(x)):{},Zo(A||!x||!x.__esModule?yt(e,"default",{value:x,enumerable:!0}):e,x)),JE=x=>Zo(yt({},"__esModule",{value:!0}),x),bx=(x,A,e)=>UE(x,typeof A!="symbol"?A+"":A,e),KE=Qo({"wasm/bin/pawncc.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var i,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],D="./this.program",m=(s,l)=>{throw l};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var w="",j,S;if(E){var $=require("fs");w=__dirname+"/",S=s=>{s=k(s)?new URL(s):s;var l=$.readFileSync(s);return l},j=async(s,l=!0)=>{s=k(s)?new URL(s):s;var B=$.readFileSync(s,l?void 0:"utf8");return B},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(s,l)=>{throw process.exitCode=s,l}}else if(F||v){try{w=new URL(".",r).href}catch{}v&&(S=s=>{var l=new XMLHttpRequest;return l.open("GET",s,!1),l.responseType="arraybuffer",l.send(null),new Uint8Array(l.response)}),j=async s=>{if(k(s))return new Promise((B,p)=>{var h=new XMLHttpRequest;h.open("GET",s,!0),h.responseType="arraybuffer",h.onload=()=>{if(h.status==200||h.status==0&&h.response){B(h.response);return}p(h.status)},h.onerror=p,h.send(null)});var l=await fetch(s,{credentials:"same-origin"});if(l.ok)return l.arrayBuffer();throw new Error(l.status+" : "+l.url)}}var q=console.log.bind(console),R=console.error.bind(console),O,r0=!1,I,k=s=>s.startsWith("file://");class L{}class W extends L{}function Q(s){for(var l=0,B=s.length,p=new Uint8Array(B),h;l<B;++l)h=s.charCodeAt(l),p[l]=~h>>8&h;return p}var H,K,a0=!1,n0=!1;function Z(){var s=M0.buffer;fx=new Int8Array(s),V0=new Int16Array(s),iA=new Uint8Array(s),it=new Uint16Array(s),G0=new Int32Array(s),c0=new Uint32Array(s),tt=new Float32Array(s),nt=new Float64Array(s),W0=new BigInt64Array(s),st=new BigUint64Array(s)}function o0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)pr(n.preRun.shift());NA(Zx)}function G(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),nx.init(),Ze.__wasm_call_ctors(),o.ignorePermissions=!1}function s0(){}function l0(){y(),o.quit(),nx.shutdown(),n0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)Dr(n.postRun.shift());NA(IA)}function C0(s){n.onAbort?.(s),s=`Aborted(${s})`,R(s),r0=!0,s+=". Build with -sASSERTIONS for more info.";var l=new WebAssembly.RuntimeError(s);throw K?.(l),l}var _0;function T0(){return Q(`\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 ox(s){return s}async function
|
|
1162
|
-
`));if(!s)return null;Hx=ee(s,!0)}return Hx.shift()},nx={ttys:[],init(){},shutdown(){},register(s,l){nx.ttys[s]={input:[],output:[],ops:l},o.registerDevice(s,nx.stream_ops)},stream_ops:{open(s){var l=nx.ttys[s.node.rdev];if(!l)throw new o.ErrnoError(43);s.tty=l,s.seekable=!1},close(s){s.tty.ops.fsync(s.tty)},fsync(s){s.tty.ops.fsync(s.tty)},read(s,l,B,p,h){if(!s.tty||!s.tty.ops.get_char)throw new o.ErrnoError(60);for(var _=0,I=0;I<p;I++){var z;try{z=s.tty.ops.get_char(s.tty)}catch{throw new o.ErrnoError(29)}if(z===void 0&&_===0)throw new o.ErrnoError(6);if(z==null)break;_++,l[B+I]=z}return _&&(s.node.atime=Date.now()),_},write(s,l,B,p,h){if(!s.tty||!s.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var _=0;_<p;_++)s.tty.ops.put_char(s.tty,l[B+_])}catch{throw new o.ErrnoError(29)}return p&&(s.node.mtime=s.node.ctime=Date.now()),_}},default_tty_ops:{get_char(s){return ot()},put_char(s,l){l===null||l===10?(q(DA(s.output)),s.output=[]):l!=0&&s.output.push(l)},fsync(s){s.output?.length>0&&(q(DA(s.output)),s.output=[])},ioctl_tcgets(s){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(s,l,B){return 0},ioctl_tiocgwinsz(s){return[24,80]}},default_tty1_ops:{put_char(s,l){l===null||l===10?(O(DA(s.output)),s.output=[]):l!=0&&s.output.push(l)},fsync(s){s.output?.length>0&&(O(DA(s.output)),s.output=[])}}},MA=s=>{C0()},i0={ops_table:null,mount(s){return i0.createNode(null,"/",16895,0)},createNode(s,l,B,p){if(o.isBlkdev(B)||o.isFIFO(B))throw new o.ErrnoError(63);i0.ops_table||(i0.ops_table={dir:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,lookup:i0.node_ops.lookup,mknod:i0.node_ops.mknod,rename:i0.node_ops.rename,unlink:i0.node_ops.unlink,rmdir:i0.node_ops.rmdir,readdir:i0.node_ops.readdir,symlink:i0.node_ops.symlink},stream:{llseek:i0.stream_ops.llseek}},file:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:{llseek:i0.stream_ops.llseek,read:i0.stream_ops.read,write:i0.stream_ops.write,mmap:i0.stream_ops.mmap,msync:i0.stream_ops.msync}},link:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,readlink:i0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:o.chrdev_stream_ops}});var h=o.createNode(s,l,B,p);return o.isDir(h.mode)?(h.node_ops=i0.ops_table.dir.node,h.stream_ops=i0.ops_table.dir.stream,h.contents={}):o.isFile(h.mode)?(h.node_ops=i0.ops_table.file.node,h.stream_ops=i0.ops_table.file.stream,h.usedBytes=0,h.contents=i0.emptyFileContents??(i0.emptyFileContents=new Uint8Array(0))):o.isLink(h.mode)?(h.node_ops=i0.ops_table.link.node,h.stream_ops=i0.ops_table.link.stream):o.isChrdev(h.mode)&&(h.node_ops=i0.ops_table.chrdev.node,h.stream_ops=i0.ops_table.chrdev.stream),h.atime=h.mtime=h.ctime=Date.now(),s&&(s.contents[l]=h,s.atime=s.mtime=s.ctime=h.atime),h},getFileDataAsTypedArray(s){return s.contents.subarray(0,s.usedBytes)},expandFileStorage(s,l){var B=s.contents.length;if(!(B>=l)){var p=1024*1024;l=Math.max(l,B*(B<p?2:1.125)>>>0),B&&(l=Math.max(l,256));var h=i0.getFileDataAsTypedArray(s);s.contents=new Uint8Array(l),s.contents.set(h)}},resizeFileStorage(s,l){if(s.usedBytes!=l){var B=s.contents;s.contents=new Uint8Array(l),s.contents.set(B.subarray(0,Math.min(l,s.usedBytes))),s.usedBytes=l}},node_ops:{getattr(s){var l={};return l.dev=o.isChrdev(s.mode)?s.id:1,l.ino=s.id,l.mode=s.mode,l.nlink=1,l.uid=0,l.gid=0,l.rdev=s.rdev,o.isDir(s.mode)?l.size=4096:o.isFile(s.mode)?l.size=s.usedBytes:o.isLink(s.mode)?l.size=s.link.length:l.size=0,l.atime=new Date(s.atime),l.mtime=new Date(s.mtime),l.ctime=new Date(s.ctime),l.blksize=4096,l.blocks=Math.ceil(l.size/l.blksize),l},setattr(s,l){for(let B of["mode","atime","mtime","ctime"])l[B]!=null&&(s[B]=l[B]);l.size!==void 0&&i0.resizeFileStorage(s,l.size)},lookup(s,l){throw i0.doesNotExistError||(i0.doesNotExistError=new o.ErrnoError(44),i0.doesNotExistError.stack="<generic error, no stack>"),i0.doesNotExistError},mknod(s,l,B,p){return i0.createNode(s,l,B,p)},rename(s,l,B){var p;try{p=o.lookupNode(l,B)}catch{}if(p){if(o.isDir(s.mode))for(var h in p.contents)throw new o.ErrnoError(55);o.hashRemoveNode(p)}delete s.parent.contents[s.name],l.contents[B]=s,s.name=B,l.ctime=l.mtime=s.parent.ctime=s.parent.mtime=Date.now()},unlink(s,l){delete s.contents[l],s.ctime=s.mtime=Date.now()},rmdir(s,l){var B=o.lookupNode(s,l);for(var p in B.contents)throw new o.ErrnoError(55);delete s.contents[l],s.ctime=s.mtime=Date.now()},readdir(s){return[".","..",...Object.keys(s.contents)]},symlink(s,l,B){var p=i0.createNode(s,l,41471,0);return p.link=B,p},readlink(s){if(!o.isLink(s.mode))throw new o.ErrnoError(28);return s.link}},stream_ops:{read(s,l,B,p,h){var _=s.node.contents;if(h>=s.node.usedBytes)return 0;var I=Math.min(s.node.usedBytes-h,p);return l.set(_.subarray(h,h+I),B),I},write(s,l,B,p,h,_){if(l.buffer===fx.buffer&&(_=!1),!p)return 0;var I=s.node;return I.mtime=I.ctime=Date.now(),_?(I.contents=l.subarray(B,B+p),I.usedBytes=p):I.usedBytes===0&&h===0?(I.contents=l.slice(B,B+p),I.usedBytes=p):(i0.expandFileStorage(I,h+p),I.contents.set(l.subarray(B,B+p),h),I.usedBytes=Math.max(I.usedBytes,h+p)),p},llseek(s,l,B){var p=l;if(B===1?p+=s.position:B===2&&o.isFile(s.node.mode)&&(p+=s.node.usedBytes),p<0)throw new o.ErrnoError(28);return p},mmap(s,l,B,p,h){if(!o.isFile(s.node.mode))throw new o.ErrnoError(43);var _,I,z=s.node.contents;if(!(h&2)&&z.buffer===fx.buffer)I=!1,_=z.byteOffset;else{if(I=!0,_=MA(l),!_)throw new o.ErrnoError(48);z&&((B>0||B+l<z.length)&&(z.subarray?z=z.subarray(B,B+l):z=Array.prototype.slice.call(z,B,B+l)),fx.set(z,_))}return{ptr:_,allocated:I}},msync(s,l,B,p,h){return i0.stream_ops.write(s,l,0,p,B,!1),0}}},LA=s=>{if(typeof s!="string")return s;var l={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},B=l[s];if(typeof B>"u")throw new Error(`Unknown file open mode: ${s}`);return B},Qx=s=>(typeof s=="string"&&(s=ee(s,!0)),s.subarray||(s=new Uint8Array(s)),s),aA=(s,l)=>{var B=0;return s&&(B|=365),l&&(B|=146),B},q0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},k0={mount(s){return k0.createNode(null,"/",s.opts.fs.lstat(s.opts.root).mode,0)},createNode(s,l,B,p){if(!o.isDir(B)&&!o.isFile(B)&&!o.isLink(B))throw new o.ErrnoError(q0.EINVAL);var h=o.createNode(s,l,B);return h.node_ops=k0.node_ops,h.stream_ops=k0.stream_ops,h},realPath(s){for(var l=[];s.parent!==s;)l.push(s.name),s=s.parent;return l.push(s.mount.opts.root),l.reverse(),f0.join(...l)},node_ops:{getattr(s){var l=k0.realPath(s),B;try{B=s.mount.opts.fs.lstat(l)}catch(p){throw p.code?new o.ErrnoError(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(s,l){var B=k0.realPath(s);try{if(l.mode!==void 0&&(s.mount.opts.fs.chmod(B,l.mode),s.mode=l.mode),l.atime||l.mtime){var p=new Date(l.atime||l.mtime),h=new Date(l.mtime||l.atime);s.mount.opts.fs.utime(B,p,h)}l.size!==void 0&&s.mount.opts.fs.truncate(B,l.size)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},lookup(s,l){try{var B=f0.join2(k0.realPath(s),l),p=s.mount.opts.fs.lstat(B).mode,h=k0.createNode(s,l,p);return h}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},mknod(s,l,B,p){var h=k0.createNode(s,l,B,p),_=k0.realPath(h);try{o.isDir(h.mode)?h.mount.opts.fs.mkdir(_,h.mode):h.mount.opts.fs.writeFile(_,"",{mode:h.mode})}catch(I){throw I.code?new o.ErrnoError(q0[I.code]):I}return h},rename(s,l,B){var p=k0.realPath(s),h=f0.join2(k0.realPath(l),B);try{s.mount.opts.fs.rename(p,h),s.name=B}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},unlink(s,l){var B=f0.join2(k0.realPath(s),l);try{s.mount.opts.fs.unlink(B)}catch(p){throw p.code?new o.ErrnoError(q0[p.code]):p}},rmdir(s,l){var B=f0.join2(k0.realPath(s),l);try{s.mount.opts.fs.rmdir(B)}catch(p){throw p.code?new o.ErrnoError(q0[p.code]):p}},readdir(s){var l=k0.realPath(s);try{return s.mount.opts.fs.readdir(l)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}},symlink(s,l,B){var p=f0.join2(k0.realPath(s),l);try{s.mount.opts.fs.symlink(B,p)}catch(h){throw h.code?new o.ErrnoError(q0[h.code]):h}},readlink(s){var l=k0.realPath(s);try{return s.mount.opts.fs.readlink(l)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}}},stream_ops:{open(s){var l=k0.realPath(s.node);try{s.nfd=s.node.mount.opts.fs.open(l,s.flags)}catch(B){throw B.code?new o.ErrnoError(q0[B.code]):B}},close(s){try{s.node.mount.opts.fs.close(s.nfd)}catch(l){throw l.code?new o.ErrnoError(q0[l.code]):l}},read(s,l,B,p,h){try{return s.node.mount.opts.fs.read(s.nfd,l,B,p,h)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},write(s,l,B,p,h){try{return s.node.mount.opts.fs.write(s.nfd,l,B,p,h)}catch(_){throw _.code?new o.ErrnoError(q0[_.code]):_}},llseek(s,l,B){var p=l;if(B===1)p+=s.position;else if(B===2&&o.isFile(s.node.mode))try{var h=s.node.node_ops.getattr(s.node);p+=h.size}catch(_){throw new o.ErrnoError(q0[_.code])}if(p<0)throw new o.ErrnoError(q0.EINVAL);return p}}},pA=async s=>{var l=await j(s);return new Uint8Array(l)},Ke=(...s)=>o.createDataFile(...s),Dx=s=>s,Cx=0,b0=null,ze=s=>{if(Cx--,n.monitorRunDependencies?.(Cx),Cx==0&&b0){var l=b0;b0=null,l()}},qx=s=>{Cx++,n.monitorRunDependencies?.(Cx)},ge=[],bA=async(s,l)=>{typeof Browser<"u"&&Browser.init();for(var B of ge)if(B.canHandle(l))return B.handle(s,l);return s},RA=async(s,l,B,p,h,_,I,z)=>{var v0=l?ux.resolve(f0.join2(s,l)):s,S0=Dx(`cp ${v0}`);qx(S0);try{var xx=B;typeof B=="string"&&(xx=await pA(B)),xx=await bA(xx,v0),z?.(),_||Ke(s,l,xx,p,h,I)}finally{ze(S0)}},Ft=(s,l,B,p,h,_,I,z,v0,S0)=>{RA(s,l,B,p,h,z,v0,S0).then(_).catch(I)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(s){bx(this,"name","ErrnoError"),this.errno=s}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(s){this.node=s}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(s){this.shared.flags=s}get position(){return this.shared.position}set position(s){this.shared.position=s}},FSNode:class{constructor(s,l,B,p){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),s||(s=this),this.parent=s,this.mount=s.mount,this.id=o.nextInode++,this.name=l,this.mode=B,this.rdev=p,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(s){s?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(s){s?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(s,l={}){if(!s)throw new o.ErrnoError(44);l.follow_mount??(l.follow_mount=!0),f0.isAbs(s)||(s=o.cwd()+"/"+s);x:for(var B=0;B<40;B++){for(var p=s.split("/").filter(S0=>!!S0),h=o.root,_="/",I=0;I<p.length;I++){var z=I===p.length-1;if(z&&l.parent)break;if(p[I]!=="."){if(p[I]===".."){if(_=f0.dirname(_),o.isRoot(h)){s=_+"/"+p.slice(I+1).join("/"),B--;continue x}else h=h.parent;continue}_=f0.join2(_,p[I]);try{h=o.lookupNode(h,p[I])}catch(S0){if(S0?.errno===44&&z&&l.noent_okay)return{path:_};throw S0}if(o.isMountpoint(h)&&(!z||l.follow_mount)&&(h=h.mounted.root),o.isLink(h.mode)&&(!z||l.follow)){if(!h.node_ops.readlink)throw new o.ErrnoError(52);var v0=h.node_ops.readlink(h);f0.isAbs(v0)||(v0=f0.dirname(_)+"/"+v0),s=v0+"/"+p.slice(I+1).join("/");continue x}}}return{path:_,node:h}}throw new o.ErrnoError(32)},getPath(s){for(var l;;){if(o.isRoot(s)){var B=s.mount.mountpoint;return l?B[B.length-1]!=="/"?`${B}/${l}`:B+l:B}l=l?`${s.name}/${l}`:s.name,s=s.parent}},hashName(s,l){for(var B=0,p=0;p<l.length;p++)B=(B<<5)-B+l.charCodeAt(p)|0;return(s+B>>>0)%o.nameTable.length},hashAddNode(s){var l=o.hashName(s.parent.id,s.name);s.name_next=o.nameTable[l],o.nameTable[l]=s},hashRemoveNode(s){var l=o.hashName(s.parent.id,s.name);if(o.nameTable[l]===s)o.nameTable[l]=s.name_next;else for(var B=o.nameTable[l];B;){if(B.name_next===s){B.name_next=s.name_next;break}B=B.name_next}},lookupNode(s,l){var B=o.mayLookup(s);if(B)throw new o.ErrnoError(B);for(var p=o.hashName(s.id,l),h=o.nameTable[p];h;h=h.name_next){var _=h.name;if(h.parent.id===s.id&&_===l)return h}return o.lookup(s,l)},createNode(s,l,B,p){var h=new o.FSNode(s,l,B,p);return o.hashAddNode(h),h},destroyNode(s){o.hashRemoveNode(s)},isRoot(s){return s===s.parent},isMountpoint(s){return!!s.mounted},isFile(s){return(s&61440)===32768},isDir(s){return(s&61440)===16384},isLink(s){return(s&61440)===40960},isChrdev(s){return(s&61440)===8192},isBlkdev(s){return(s&61440)===24576},isFIFO(s){return(s&61440)===4096},isSocket(s){return(s&49152)===49152},flagsToPermissionString(s){var l=["r","w","rw"][s&3];return s&512&&(l+="w"),l},nodePermissions(s,l){return o.ignorePermissions?0:l.includes("r")&&!(s.mode&292)||l.includes("w")&&!(s.mode&146)||l.includes("x")&&!(s.mode&73)?2:0},mayLookup(s){if(!o.isDir(s.mode))return 54;var l=o.nodePermissions(s,"x");return l||(s.node_ops.lookup?0:2)},mayCreate(s,l){if(!o.isDir(s.mode))return 54;try{var B=o.lookupNode(s,l);return 20}catch{}return o.nodePermissions(s,"wx")},mayDelete(s,l,B){var p;try{p=o.lookupNode(s,l)}catch(_){return _.errno}var h=o.nodePermissions(s,"wx");if(h)return h;if(B){if(!o.isDir(p.mode))return 54;if(o.isRoot(p)||o.getPath(p)===o.cwd())return 10}else if(o.isDir(p.mode))return 31;return 0},mayOpen(s,l){if(!s)return 44;if(o.isLink(s.mode))return 32;var B=o.flagsToPermissionString(l);return o.isDir(s.mode)&&(B!=="r"||l&576)?31:o.nodePermissions(s,B)},checkOpExists(s,l){if(!s)throw new o.ErrnoError(l);return s},MAX_OPEN_FDS:4096,nextfd(){for(var s=0;s<=o.MAX_OPEN_FDS;s++)if(!o.streams[s])return s;throw new o.ErrnoError(33)},getStreamChecked(s){var l=o.getStream(s);if(!l)throw new o.ErrnoError(8);return l},getStream:s=>o.streams[s],createStream(s,l=-1){return s=Object.assign(new o.FSStream,s),l==-1&&(l=o.nextfd()),s.fd=l,o.streams[l]=s,s},closeStream(s){o.streams[s]=null},dupStream(s,l=-1){var B=o.createStream(s,l);return B.stream_ops?.dup?.(B),B},doSetAttr(s,l,B){var p=s?.stream_ops.setattr,h=p?s:l;p??(p=l.node_ops.setattr),o.checkOpExists(p,63);try{p(h,B)}catch(_){throw _ instanceof RangeError?new o.ErrnoError(22):_}},chrdev_stream_ops:{open(s){var l=o.getDevice(s.node.rdev);s.stream_ops=l.stream_ops,s.stream_ops.open?.(s)},llseek(){throw new o.ErrnoError(70)}},major:s=>s>>8,minor:s=>s&255,makedev:(s,l)=>s<<8|l,registerDevice(s,l){o.devices[s]={stream_ops:l}},getDevice:s=>o.devices[s],getMounts(s){for(var l=[],B=[s];B.length;){var p=B.pop();l.push(p),B.push(...p.mounts)}return l},syncfs(s,l){typeof s=="function"&&(l=s,s=!1),o.syncFSRequests++,o.syncFSRequests>1&&O(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var B=o.getMounts(o.root.mount),p=0;function h(z){return o.syncFSRequests--,l(z)}function _(z){if(z)return _.errored?void 0:(_.errored=!0,h(z));++p>=B.length&&h(null)}for(var I of B)I.type.syncfs?I.type.syncfs(I,s,_):_(null)},mount(s,l,B){var p=B==="/",h=!B,_;if(p&&o.root)throw new o.ErrnoError(10);if(!p&&!h){var I=o.lookupPath(B,{follow_mount:!1});if(B=I.path,_=I.node,o.isMountpoint(_))throw new o.ErrnoError(10);if(!o.isDir(_.mode))throw new o.ErrnoError(54)}var z={type:s,opts:l,mountpoint:B,mounts:[]},v0=s.mount(z);return v0.mount=z,z.root=v0,p?o.root=v0:_&&(_.mounted=z,_.mount&&_.mount.mounts.push(z)),v0},unmount(s){var l=o.lookupPath(s,{follow_mount:!1});if(!o.isMountpoint(l.node))throw new o.ErrnoError(28);var B=l.node,p=B.mounted,h=o.getMounts(p);for(var[_,I]of Object.entries(o.nameTable))for(;I;){var z=I.name_next;h.includes(I.mount)&&o.destroyNode(I),I=z}B.mounted=null;var v0=B.mount.mounts.indexOf(p);B.mount.mounts.splice(v0,1)},lookup(s,l){return s.node_ops.lookup(s,l)},mknod(s,l,B){var p=o.lookupPath(s,{parent:!0}),h=p.node,_=f0.basename(s);if(!_)throw new o.ErrnoError(28);if(_==="."||_==="..")throw new o.ErrnoError(20);var I=o.mayCreate(h,_);if(I)throw new o.ErrnoError(I);if(!h.node_ops.mknod)throw new o.ErrnoError(63);return h.node_ops.mknod(h,_,l,B)},statfs(s){return o.statfsNode(o.lookupPath(s,{follow:!0}).node)},statfsStream(s){return o.statfsNode(s.node)},statfsNode(s){var l={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return s.node_ops.statfs&&Object.assign(l,s.node_ops.statfs(s.mount.opts.root)),l},create(s,l=438){return l&=4095,l|=32768,o.mknod(s,l,0)},mkdir(s,l=511){return l&=1023,l|=16384,o.mknod(s,l,0)},mkdirTree(s,l){var B=s.split("/"),p="";for(var h of B)if(h){(p||f0.isAbs(s))&&(p+="/"),p+=h;try{o.mkdir(p,l)}catch(_){if(_.errno!=20)throw _}}},mkdev(s,l,B){return typeof B>"u"&&(B=l,l=438),l|=8192,o.mknod(s,l,B)},symlink(s,l){if(!ux.resolve(s))throw new o.ErrnoError(44);var B=o.lookupPath(l,{parent:!0}),p=B.node;if(!p)throw new o.ErrnoError(44);var h=f0.basename(l),_=o.mayCreate(p,h);if(_)throw new o.ErrnoError(_);if(!p.node_ops.symlink)throw new o.ErrnoError(63);return p.node_ops.symlink(p,h,s)},rename(s,l){var B=f0.dirname(s),p=f0.dirname(l),h=f0.basename(s),_=f0.basename(l),I,z,v0;if(I=o.lookupPath(s,{parent:!0}),z=I.node,I=o.lookupPath(l,{parent:!0}),v0=I.node,!z||!v0)throw new o.ErrnoError(44);if(z.mount!==v0.mount)throw new o.ErrnoError(75);var S0=o.lookupNode(z,h),xx=ux.relative(s,p);if(xx.charAt(0)!==".")throw new o.ErrnoError(28);if(xx=ux.relative(l,B),xx.charAt(0)!==".")throw new o.ErrnoError(55);var R0;try{R0=o.lookupNode(v0,_)}catch{}if(S0!==R0){var N0=o.isDir(S0.mode),j0=o.mayDelete(z,h,N0);if(j0)throw new o.ErrnoError(j0);if(j0=R0?o.mayDelete(v0,_,N0):o.mayCreate(v0,_),j0)throw new o.ErrnoError(j0);if(!z.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(S0)||R0&&o.isMountpoint(R0))throw new o.ErrnoError(10);if(v0!==z&&(j0=o.nodePermissions(z,"w"),j0))throw new o.ErrnoError(j0);o.hashRemoveNode(S0);try{z.node_ops.rename(S0,v0,_),S0.parent=v0}catch(dx){throw dx}finally{o.hashAddNode(S0)}}},rmdir(s){var l=o.lookupPath(s,{parent:!0}),B=l.node,p=f0.basename(s),h=o.lookupNode(B,p),_=o.mayDelete(B,p,!0);if(_)throw new o.ErrnoError(_);if(!B.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(h))throw new o.ErrnoError(10);B.node_ops.rmdir(B,p),o.destroyNode(h)},readdir(s){var l=o.lookupPath(s,{follow:!0}),B=l.node,p=o.checkOpExists(B.node_ops.readdir,54);return p(B)},unlink(s){var l=o.lookupPath(s,{parent:!0}),B=l.node;if(!B)throw new o.ErrnoError(44);var p=f0.basename(s),h=o.lookupNode(B,p),_=o.mayDelete(B,p,!1);if(_)throw new o.ErrnoError(_);if(!B.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(h))throw new o.ErrnoError(10);B.node_ops.unlink(B,p),o.destroyNode(h)},readlink(s){var l=o.lookupPath(s),B=l.node;if(!B)throw new o.ErrnoError(44);if(!B.node_ops.readlink)throw new o.ErrnoError(28);return B.node_ops.readlink(B)},stat(s,l){var B=o.lookupPath(s,{follow:!l}),p=B.node,h=o.checkOpExists(p.node_ops.getattr,63);return h(p)},fstat(s){var l=o.getStreamChecked(s),B=l.node,p=l.stream_ops.getattr,h=p?l:B;return p??(p=B.node_ops.getattr),o.checkOpExists(p,63),p(h)},lstat(s){return o.stat(s,!0)},doChmod(s,l,B,p){o.doSetAttr(s,l,{mode:B&4095|l.mode&-4096,ctime:Date.now(),dontFollow:p})},chmod(s,l,B){var p;if(typeof s=="string"){var h=o.lookupPath(s,{follow:!B});p=h.node}else p=s;o.doChmod(null,p,l,B)},lchmod(s,l){o.chmod(s,l,!0)},fchmod(s,l){var B=o.getStreamChecked(s);o.doChmod(B,B.node,l,!1)},doChown(s,l,B){o.doSetAttr(s,l,{timestamp:Date.now(),dontFollow:B})},chown(s,l,B,p){var h;if(typeof s=="string"){var _=o.lookupPath(s,{follow:!p});h=_.node}else h=s;o.doChown(null,h,p)},lchown(s,l,B){o.chown(s,l,B,!0)},fchown(s,l,B){var p=o.getStreamChecked(s);o.doChown(p,p.node,!1)},doTruncate(s,l,B){if(o.isDir(l.mode))throw new o.ErrnoError(31);if(!o.isFile(l.mode))throw new o.ErrnoError(28);var p=o.nodePermissions(l,"w");if(p)throw new o.ErrnoError(p);o.doSetAttr(s,l,{size:B,timestamp:Date.now()})},truncate(s,l){if(l<0)throw new o.ErrnoError(28);var B;if(typeof s=="string"){var p=o.lookupPath(s,{follow:!0});B=p.node}else B=s;o.doTruncate(null,B,l)},ftruncate(s,l){var B=o.getStreamChecked(s);if(l<0||(B.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(B,B.node,l)},utime(s,l,B){var p=o.lookupPath(s,{follow:!0}),h=p.node,_=o.checkOpExists(h.node_ops.setattr,63);_(h,{atime:l,mtime:B})},open(s,l,B=438){if(s==="")throw new o.ErrnoError(44);l=LA(l),l&64?B=B&4095|32768:B=0;var p,h;if(typeof s=="object")p=s;else{h=s.endsWith("/");var _=o.lookupPath(s,{follow:!(l&131072),noent_okay:!0});p=_.node,s=_.path}var I=!1;if(l&64)if(p){if(l&128)throw new o.ErrnoError(20)}else{if(h)throw new o.ErrnoError(31);p=o.mknod(s,B|511,0),I=!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(!I){var z=o.mayOpen(p,l);if(z)throw new o.ErrnoError(z)}l&512&&!I&&o.truncate(p,0),l&=-131713;var v0=o.createStream({node:p,path:o.getPath(p),flags:l,seekable:!0,position:0,stream_ops:p.stream_ops,ungotten:[],error:!1});return v0.stream_ops.open&&v0.stream_ops.open(v0),I&&o.chmod(p,B&511),v0},close(s){if(o.isClosed(s))throw new o.ErrnoError(8);s.getdents&&(s.getdents=null);try{s.stream_ops.close&&s.stream_ops.close(s)}catch(l){throw l}finally{o.closeStream(s.fd)}s.fd=null},isClosed(s){return s.fd===null},llseek(s,l,B){if(o.isClosed(s))throw new o.ErrnoError(8);if(!s.seekable||!s.stream_ops.llseek)throw new o.ErrnoError(70);if(B!=0&&B!=1&&B!=2)throw new o.ErrnoError(28);return s.position=s.stream_ops.llseek(s,l,B),s.ungotten=[],s.position},read(s,l,B,p,h){if(p<0||h<0)throw new o.ErrnoError(28);if(o.isClosed(s))throw new o.ErrnoError(8);if((s.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(s.node.mode))throw new o.ErrnoError(31);if(!s.stream_ops.read)throw new o.ErrnoError(28);var _=typeof h<"u";if(!_)h=s.position;else if(!s.seekable)throw new o.ErrnoError(70);var I=s.stream_ops.read(s,l,B,p,h);return _||(s.position+=I),I},write(s,l,B,p,h,_){if(p<0||h<0)throw new o.ErrnoError(28);if(o.isClosed(s))throw new o.ErrnoError(8);if((s.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(s.node.mode))throw new o.ErrnoError(31);if(!s.stream_ops.write)throw new o.ErrnoError(28);s.seekable&&s.flags&1024&&o.llseek(s,0,2);var I=typeof h<"u";if(!I)h=s.position;else if(!s.seekable)throw new o.ErrnoError(70);var z=s.stream_ops.write(s,l,B,p,h,_);return I||(s.position+=z),z},mmap(s,l,B,p,h){if((p&2)!==0&&(h&2)===0&&(s.flags&2097155)!==2)throw new o.ErrnoError(2);if((s.flags&2097155)===1)throw new o.ErrnoError(2);if(!s.stream_ops.mmap)throw new o.ErrnoError(43);if(!l)throw new o.ErrnoError(28);return s.stream_ops.mmap(s,l,B,p,h)},msync(s,l,B,p,h){return s.stream_ops.msync?s.stream_ops.msync(s,l,B,p,h):0},ioctl(s,l,B){if(!s.stream_ops.ioctl)throw new o.ErrnoError(59);return s.stream_ops.ioctl(s,l,B)},readFile(s,l={}){l.flags=l.flags||0,l.encoding=l.encoding||"binary",l.encoding!=="utf8"&&l.encoding!=="binary"&&C0(`Invalid encoding type "${l.encoding}"`);var B=o.open(s,l.flags),p=o.stat(s),h=p.size,_=new Uint8Array(h);return o.read(B,_,0,h,0),l.encoding==="utf8"&&(_=DA(_)),o.close(B),_},writeFile(s,l,B={}){B.flags=B.flags||577;var p=o.open(s,B.flags,B.mode);l=Qx(l),o.write(p,l,0,l.byteLength,void 0,B.canOwn),o.close(p)},cwd:()=>o.currentPath,chdir(s){var l=o.lookupPath(s,{follow:!0});if(l.node===null)throw new o.ErrnoError(44);if(!o.isDir(l.node.mode))throw new o.ErrnoError(54);var B=o.nodePermissions(l.node,"x");if(B)throw new o.ErrnoError(B);o.currentPath=l.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(p,h,_,I,z)=>I,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var s=new Uint8Array(1024),l=0,B=()=>(l===0&&(He(s),l=s.byteLength),s[--l]);o.createDevice("/dev","random",B),o.createDevice("/dev","urandom",B),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var s=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var l=o.createNode(s,"fd",16895,73);return l.stream_ops={llseek:i0.stream_ops.llseek},l.node_ops={lookup(B,p){var h=+p,_=o.getStreamChecked(h),I={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>_.path},id:h+1};return I.parent=I,I},readdir(){return Array.from(o.streams.entries()).filter(([B,p])=>p).map(([B,p])=>B.toString())}},l}},{},"/proc/self/fd")},createStandardStreams(s,l,B){s?o.createDevice("/dev","stdin",s):o.symlink("/dev/tty","/dev/stdin"),l?o.createDevice("/dev","stdout",null,l):o.symlink("/dev/tty","/dev/stdout"),B?o.createDevice("/dev","stderr",null,B):o.symlink("/dev/tty1","/dev/stderr");var p=o.open("/dev/stdin",0),h=o.open("/dev/stdout",1),_=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(i0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:i0,PROXYFS:k0}},init(s,l,B){o.initialized=!0,s??(s=n.stdin),l??(l=n.stdout),B??(B=n.stderr),o.createStandardStreams(s,l,B)},quit(){o.initialized=!1,b(0);for(var s of o.streams)s&&o.close(s)},findObject(s,l){var B=o.analyzePath(s,l);return B.exists?B.object:null},analyzePath(s,l){try{var B=o.lookupPath(s,{follow:!l});s=B.path}catch{}var p={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var B=o.lookupPath(s,{parent:!0});p.parentExists=!0,p.parentPath=B.path,p.parentObject=B.node,p.name=f0.basename(s),B=o.lookupPath(s,{follow:!l}),p.exists=!0,p.path=B.path,p.object=B.node,p.name=B.node.name,p.isRoot=B.path==="/"}catch(h){p.error=h.errno}return p},createPath(s,l,B,p){s=typeof s=="string"?s:o.getPath(s);for(var h=l.split("/").reverse();h.length;){var _=h.pop();if(_){var I=f0.join2(s,_);try{o.mkdir(I)}catch(z){if(z.errno!=20)throw z}s=I}}return I},createFile(s,l,B,p,h){var _=f0.join2(typeof s=="string"?s:o.getPath(s),l),I=aA(p,h);return o.create(_,I)},createDataFile(s,l,B,p,h,_){var I=l;s&&(s=typeof s=="string"?s:o.getPath(s),I=l?f0.join2(s,l):s);var z=aA(p,h),v0=o.create(I,z);if(B){B=Qx(B),o.chmod(v0,z|146);var S0=o.open(v0,577);o.write(S0,B,0,B.length,0,_),o.close(S0),o.chmod(v0,z)}},createDevice(s,l,B,p){var h,_=f0.join2(typeof s=="string"?s:o.getPath(s),l),I=aA(!!B,!!p);(h=o.createDevice).major??(h.major=64);var z=o.makedev(o.createDevice.major++,0);return o.registerDevice(z,{open(v0){v0.seekable=!1},close(v0){p?.buffer?.length&&p(10)},read(v0,S0,xx,R0,N0){for(var j0=0,dx=0;dx<R0;dx++){var Sx;try{Sx=B()}catch{throw new o.ErrnoError(29)}if(Sx===void 0&&j0===0)throw new o.ErrnoError(6);if(Sx==null)break;j0++,S0[xx+dx]=Sx}return j0&&(v0.node.atime=Date.now()),j0},write(v0,S0,xx,R0,N0){for(var j0=0;j0<R0;j0++)try{p(S0[xx+j0])}catch{throw new o.ErrnoError(29)}return R0&&(v0.node.mtime=v0.node.ctime=Date.now()),j0}}),o.mkdev(_,I,z)},forceLoadFile(s){if(s.isDevice||s.isFolder||s.link||s.contents)return!0;if(globalThis.XMLHttpRequest)C0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{s.contents=S(s.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(s,l,B,p,h){class _{constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get(N0){if(!(N0>this.length-1||N0<0)){var j0=N0%this.chunkSize,dx=N0/this.chunkSize|0;return this.getter(dx)[j0]}}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||C0("Couldn't load "+B+". Status: "+N0.status);var j0=Number(N0.getResponseHeader("Content-length")),dx,Sx=(dx=N0.getResponseHeader("Accept-Ranges"))&&dx==="bytes",Kx=(dx=N0.getResponseHeader("Content-Encoding"))&&dx==="gzip",Zx=1024*1024;Sx||(Zx=j0);var xA=(oA,Pe)=>{oA>Pe&&C0("invalid range ("+oA+", "+Pe+") or no bytes requested!"),Pe>j0-1&&C0("only "+j0+" bytes available! programmer error!");var kx=new XMLHttpRequest;return kx.open("GET",B,!1),j0!==Zx&&kx.setRequestHeader("Range","bytes="+oA+"-"+Pe),kx.responseType="arraybuffer",kx.overrideMimeType&&kx.overrideMimeType("text/plain; charset=x-user-defined"),kx.send(null),kx.status>=200&&kx.status<300||kx.status===304||C0("Couldn't load "+B+". Status: "+kx.status),kx.response!==void 0?new Uint8Array(kx.response||[]):ee(kx.responseText||"",!0)},Ze=this;Ze.setDataGetter(oA=>{var Pe=oA*Zx,kx=(oA+1)*Zx-1;return kx=Math.min(kx,j0-1),typeof Ze.chunks[oA]>"u"&&(Ze.chunks[oA]=xA(Pe,kx)),typeof Ze.chunks[oA]>"u"&&C0("doXHR failed!"),Ze.chunks[oA]}),(Kx||!j0)&&(Zx=j0=1,j0=this.getter(0).length,Zx=j0,q("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=j0,this._chunkSize=Zx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||C0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var I=new _,z={isDevice:!1,contents:I}}else var z={isDevice:!1,url:B};var v0=o.createFile(s,l,z,p,h);z.contents?v0.contents=z.contents:z.url&&(v0.contents=null,v0.url=z.url),Object.defineProperties(v0,{usedBytes:{get:function(){return this.contents.length}}});var S0={};for(let[R0,N0]of Object.entries(v0.stream_ops))S0[R0]=(...j0)=>(o.forceLoadFile(v0),N0(...j0));function xx(R0,N0,j0,dx,Sx){var Kx=R0.node.contents;if(Sx>=Kx.length)return 0;var Zx=Math.min(Kx.length-Sx,dx);if(Kx.slice)for(var xA=0;xA<Zx;xA++)N0[j0+xA]=Kx[Sx+xA];else for(var xA=0;xA<Zx;xA++)N0[j0+xA]=Kx.get(Sx+xA);return Zx}return S0.read=(R0,N0,j0,dx,Sx)=>(o.forceLoadFile(v0),xx(R0,N0,j0,dx,Sx)),S0.mmap=(R0,N0,j0,dx,Sx)=>{o.forceLoadFile(v0);var Kx=MA(N0);if(!Kx)throw new o.ErrnoError(48);return xx(R0,fx,Kx,N0,j0),{ptr:Kx,allocated:!0}},v0.stream_ops=S0,v0}},w0={currentUmask:18,calculateAt(s,l,B){if(f0.isAbs(l))return l;var p;if(s===-100)p=o.cwd();else{var h=w0.getStreamFromFD(s);p=h.path}if(l.length==0){if(!B)throw new o.ErrnoError(44);return p}return p+"/"+l},writeStat(s,l){c0[s>>2]=l.dev,c0[s+4>>2]=l.mode,c0[s+8>>2]=l.nlink,c0[s+12>>2]=l.uid,c0[s+16>>2]=l.gid,c0[s+20>>2]=l.rdev,W0[s+24>>3]=BigInt(l.size),G0[s+32>>2]=4096,G0[s+36>>2]=l.blocks;var B=l.atime.getTime(),p=l.mtime.getTime(),h=l.ctime.getTime();return W0[s+40>>3]=BigInt(Math.floor(B/1e3)),c0[s+48>>2]=B%1e3*1e3*1e3,W0[s+56>>3]=BigInt(Math.floor(p/1e3)),c0[s+64>>2]=p%1e3*1e3*1e3,W0[s+72>>3]=BigInt(Math.floor(h/1e3)),c0[s+80>>2]=h%1e3*1e3*1e3,W0[s+88>>3]=BigInt(l.ino),0},writeStatFs(s,l){c0[s+4>>2]=l.bsize,c0[s+60>>2]=l.bsize,W0[s+8>>3]=BigInt(l.blocks),W0[s+16>>3]=BigInt(l.bfree),W0[s+24>>3]=BigInt(l.bavail),W0[s+32>>3]=BigInt(l.files),W0[s+40>>3]=BigInt(l.ffree),c0[s+48>>2]=l.fsid,c0[s+64>>2]=l.flags,c0[s+56>>2]=l.namelen},doMsync(s,l,B,p,h){if(!o.isFile(l.node.mode))throw new o.ErrnoError(43);if(p&2)return 0;var _=nA.slice(s,s+B);o.msync(l,_,h,B,p)},getStreamFromFD(s){var l=o.getStreamChecked(s);return l},varargs:void 0,getStr(s){var l=sA(s);return l}};function Ve(s,l,B,p){try{if(l=w0.getStr(l),l=w0.calculateAt(s,l),B&-8)return-28;var h=o.lookupPath(l,{follow:!0}),_=h.node;if(!_)return-44;var I="";return B&4&&(I+="r"),B&2&&(I+="w"),B&1&&(I+="x"),I&&o.nodePermissions(_,I)?-2:0}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}var OA=()=>{var s=G0[+w0.varargs>>2];return w0.varargs+=4,s},mA=OA;function vt(s,l,B){w0.varargs=B;try{var p=w0.getStreamFromFD(s);switch(l){case 0:{var h=OA();if(h<0)return-28;for(;o.streams[h];)h++;var _;return _=o.dupStream(p,h),_.fd}case 1:case 2:return 0;case 3:return p.flags;case 4:{var h=OA(),I=289792;return p.flags=p.flags&~I|h&I,0}case 12:{var h=mA(),z=0;return V0[h+z>>1]=2,0}case 13:case 14:return 0}return-28}catch(v0){if(typeof o>"u"||v0.name!=="ErrnoError")throw v0;return-v0.errno}}var ye=(s,l,B)=>Je(s,nA,l,B);function pr(s,l){try{if(l===0)return-28;var B=o.cwd(),p=Ae(B)+1;return l<p?-68:(ye(B,s,l),p)}catch(h){if(typeof o>"u"||h.name!=="ErrnoError")throw h;return-h.errno}}function br(s,l,B){w0.varargs=B;try{var p=w0.getStreamFromFD(s);switch(l){case 21509:return p.tty?0:-59;case 21505:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcgets){var h=p.tty.ops.ioctl_tcgets(p),_=mA();G0[_>>2]=h.c_iflag||0,G0[_+4>>2]=h.c_oflag||0,G0[_+8>>2]=h.c_cflag||0,G0[_+12>>2]=h.c_lflag||0;for(var I=0;I<32;I++)fx[_+I+17]=h.c_cc[I]||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 _=mA(),z=G0[_>>2],v0=G0[_+4>>2],S0=G0[_+8>>2],xx=G0[_+12>>2],R0=[],I=0;I<32;I++)R0.push(fx[_+I+17]);return p.tty.ops.ioctl_tcsets(p.tty,l,{c_iflag:z,c_oflag:v0,c_cflag:S0,c_lflag:xx,c_cc:R0})}return 0}case 21519:{if(!p.tty)return-59;var _=mA();return G0[_>>2]=0,0}case 21520:return p.tty?-28:-59;case 21537:case 21531:{var _=mA();return o.ioctl(p,l,_)}case 21523:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tiocgwinsz){var N0=p.tty.ops.ioctl_tiocgwinsz(p.tty),_=mA();V0[_>>1]=N0[0],V0[_+2>>1]=N0[1]}return 0}case 21524:return p.tty?0:-59;case 21515:return p.tty?0:-59;default:return-28}}catch(j0){if(typeof o>"u"||j0.name!=="ErrnoError")throw j0;return-j0.errno}}function lt(s,l,B,p){w0.varargs=p;try{l=w0.getStr(l),l=w0.calculateAt(s,l);var h=p?OA():0;return B&64&&(h&=~w0.currentUmask),o.open(l,B,h).fd}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return-_.errno}}function ct(s,l,B,p){try{if(l=w0.getStr(l),l=w0.calculateAt(s,l),p<=0)return-28;var h=o.readlink(l),_=Math.min(p,Ae(h)),I=fx[B+_];return ye(h,B,p+1),fx[B+_]=I,_}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}function ft(s,l,B,p){try{return l=w0.getStr(l),p=w0.getStr(p),l=w0.calculateAt(s,l),p=w0.calculateAt(B,p),o.rename(l,p),0}catch(h){if(typeof o>"u"||h.name!=="ErrnoError")throw h;return-h.errno}}function ke(s){try{return s=w0.getStr(s),o.rmdir(s),0}catch(l){if(typeof o>"u"||l.name!=="ErrnoError")throw l;return-l.errno}}function mr(s,l,B){try{if(l=w0.getStr(l),l=w0.calculateAt(s,l),!B)o.unlink(l);else if(B===512)o.rmdir(l);else return-28;return 0}catch(p){if(typeof o>"u"||p.name!=="ErrnoError")throw p;return-p.errno}}var re=()=>{throw new X},we=()=>performance.now(),Et=()=>Date.now(),hr=1,Bt=s=>s>=0&&s<=3,te=9007199254740992,We=-9007199254740992,jr=s=>s<We||s>te?NaN:Number(s);function gr(s,l,B){if(l=jr(l),!Bt(s))return 28;var p;if(s===0)p=Et();else if(hr)p=we();else return 52;var h=Math.round(p*1e3*1e3);return W0[B>>3]=BigInt(h),0}var Ct=()=>2147483648,yr=(s,l)=>Math.ceil(s/l)*l,dt=s=>{var l=M0.buffer.byteLength,B=(s-l+65535)/65536|0;try{return M0.grow(B),x0(),1}catch{}},ut=s=>{var l=nA.length;s>>>=0;var B=Ct();if(s>B)return!1;for(var p=1;p<=4;p*=2){var h=l*(1+.2/p);h=Math.min(h,s+100663296);var _=Math.min(B,yr(Math.max(s,h),65536)),I=dt(_);if(I)return!0}return!1};function _e(s){try{var l=w0.getStreamFromFD(s);return o.close(l),0}catch(B){if(typeof o>"u"||B.name!=="ErrnoError")throw B;return B.errno}}var Dt=(s,l,B,p)=>{for(var h=0,_=0;_<B;_++){var I=c0[l>>2],z=c0[l+4>>2];l+=8;var v0=o.read(s,fx,I,z,p);if(v0<0)return-1;if(h+=v0,v0<z)break;typeof p<"u"&&(p+=v0)}return h};function pt(s,l,B,p){try{var h=w0.getStreamFromFD(s),_=Dt(h,l,B);return c0[p>>2]=_,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}function kr(s,l,B,p){l=jr(l);try{if(isNaN(l))return 22;var h=w0.getStreamFromFD(s);return o.llseek(h,l,B),W0[p>>3]=BigInt(h.position),h.getdents&&l===0&&B===0&&(h.getdents=null),0}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return _.errno}}var wr=(s,l,B,p)=>{for(var h=0,_=0;_<B;_++){var I=c0[l>>2],z=c0[l+4>>2];l+=8;var v0=o.write(s,fx,I,z,p);if(v0<0)return-1;if(h+=v0,v0<z)break;typeof p<"u"&&(p+=v0)}return h};function ne(s,l,B,p){try{var h=w0.getStreamFromFD(s),_=wr(h,l,B);return c0[p>>2]=_,0}catch(I){if(typeof o>"u"||I.name!=="ErrnoError")throw I;return I.errno}}var _r=0,ie=()=>je||_r>0,Xe=s=>{M=s,ie()||(n.onExit?.(s),t0=!0),m(s,new tA(s))},Nx=(s,l)=>{M=s,ie()||l0(),Xe(s)},bt=s=>{if(s instanceof tA||s=="unwind")return M;m(1,s)},GA=s=>V(s),se=s=>{var l=Ae(s)+1,B=GA(l);return ye(s,B,l),B},Ye=[],px=s=>{var l=Ye[s];return l||(Ye[s]=l=$0.get(s)),l},Se=(...s)=>o.createPath(...s),ae=(...s)=>o.unlink(...s),a=(...s)=>o.createLazyFile(...s),c=(...s)=>o.createDevice(...s);if(o.createPreloadedFile=Ft,o.preloadFile=RA,o.staticInit(),n.noExitRuntime&&(je=n.noExitRuntime),n.preloadPlugins&&(ge=n.preloadPlugins),n.print&&(q=n.print),n.printErr&&(O=n.printErr),n.wasmBinary&&(R=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=tn,n.addRunDependency=qx,n.removeRunDependency=ze,n.FS_preloadFile=RA,n.FS_unlink=ae,n.FS_createPath=Se,n.FS_createDevice=c,n.FS=o,n.FS_createDataFile=Ke,n.FS_createLazyFile=a,n.PROXYFS=k0;var d,b,y,P,U,V,F0,D0,X0,M0,$0;function m0(s){d=n._main=s.__main_argc_argv,b=s.fflush,y=s.__funcs_on_exit,P=s.setThrew,U=s._emscripten_stack_restore,V=s._emscripten_stack_alloc,F0=s.emscripten_stack_get_current,D0=M0=s.memory,X0=$0=s.__indirect_function_table}var ix={__assert_fail:IA,__syscall_faccessat:Ve,__syscall_fcntl64:vt,__syscall_getcwd:pr,__syscall_ioctl:br,__syscall_openat:lt,__syscall_readlinkat:ct,__syscall_renameat:ft,__syscall_rmdir:ke,__syscall_unlinkat:mr,_emscripten_throw_longjmp:re,clock_time_get:gr,emscripten_resize_heap:ut,fd_close:_e,fd_read:pt,fd_seek:kr,fd_write:ne,invoke_i:oe,invoke_ii:Ox,invoke_iii:Gx,invoke_iiid:pi,invoke_iiii:Jx,invoke_iiiii:Ex,invoke_iiiiii:bi,invoke_iijii:ui,invoke_v:yx,invoke_vi:Di,invoke_vii:Ix,invoke_viii:rn,invoke_viiii:hA,invoke_viiiii:en};function yx(s){var l=y0();try{px(s)()}catch(B){if(Fx(l),!(B instanceof L))throw B;P(1,0)}}function Ix(s,l,B){var p=y0();try{px(s)(l,B)}catch(h){if(Fx(p),!(h instanceof L))throw h;P(1,0)}}function Ox(s,l){var B=y0();try{return px(s)(l)}catch(p){if(Fx(B),!(p instanceof L))throw p;P(1,0)}}function Gx(s,l,B){var p=y0();try{return px(s)(l,B)}catch(h){if(Fx(p),!(h instanceof L))throw h;P(1,0)}}function oe(s){var l=y0();try{return px(s)()}catch(B){if(Fx(l),!(B instanceof L))throw B;P(1,0)}}function Jx(s,l,B,p){var h=y0();try{return px(s)(l,B,p)}catch(_){if(Fx(h),!(_ instanceof L))throw _;P(1,0)}}function hA(s,l,B,p,h){var _=y0();try{px(s)(l,B,p,h)}catch(I){if(Fx(_),!(I instanceof L))throw I;P(1,0)}}function Ex(s,l,B,p,h){var _=y0();try{return px(s)(l,B,p,h)}catch(I){if(Fx(_),!(I instanceof L))throw I;P(1,0)}}function en(s,l,B,p,h,_){var I=y0();try{px(s)(l,B,p,h,_)}catch(z){if(Fx(I),!(z instanceof L))throw z;P(1,0)}}function ui(s,l,B,p,h){var _=y0();try{return px(s)(l,B,p,h)}catch(I){if(Fx(_),!(I instanceof L))throw I;P(1,0)}}function Di(s,l){var B=y0();try{px(s)(l)}catch(p){if(Fx(B),!(p instanceof L))throw p;P(1,0)}}function rn(s,l,B,p){var h=y0();try{px(s)(l,B,p)}catch(_){if(Fx(h),!(_ instanceof L))throw _;P(1,0)}}function pi(s,l,B,p){var h=y0();try{return px(s)(l,B,p)}catch(_){if(Fx(h),!(_ instanceof L))throw _;P(1,0)}}function bi(s,l,B,p,h,_){var I=y0();try{return px(s)(l,B,p,h,_)}catch(z){if(Fx(I),!(z instanceof L))throw z;P(1,0)}}function tn(s=[]){var l=d;s.unshift(D);var B=s.length,p=GA((B+1)*4),h=p;for(var _ of s)c0[h>>2]=se(_),h+=4;c0[h>>2]=0;try{var I=l(B,p);return Nx(I,!0),I}catch(z){return bt(z)}}function mt(s=u){if(Cx>0){b0=mt;return}if(o0(),Cx>0){b0=mt;return}function l(){if(n.calledRun=!0,!t0){G(),H?.(n),n.onRuntimeInitialized?.();var B=n.noInitialRun||!0;B||tn(s),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l()}var Qe;return Qe=await tx(),mt(),a0?i=n:i=new Promise((s,l)=>{H=s,J=l}),i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),JE=Wo({"wasm/bin/pawndbg.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var i,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],D="./this.program",m=(a,c)=>{throw c};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var w="",j,S;if(E){var T=require("fs");w=__dirname+"/",S=a=>{a=k(a)?new URL(a):a;var c=T.readFileSync(a);return c},j=async(a,c=!0)=>{a=k(a)?new URL(a):a;var d=T.readFileSync(a,c?void 0:"utf8");return d},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(a,c)=>{throw process.exitCode=a,c}}else if(F||v){try{w=new URL(".",r).href}catch{}v&&(S=a=>{var c=new XMLHttpRequest;return c.open("GET",a,!1),c.responseType="arraybuffer",c.send(null),new Uint8Array(c.response)}),j=async a=>{if(k(a))return new Promise((d,b)=>{var y=new XMLHttpRequest;y.open("GET",a,!0),y.responseType="arraybuffer",y.onload=()=>{if(y.status==200||y.status==0&&y.response){d(y.response);return}b(y.status)},y.onerror=b,y.send(null)});var c=await fetch(a,{credentials:"same-origin"});if(c.ok)return c.arrayBuffer();throw new Error(c.status+" : "+c.url)}}var q=console.log.bind(console),O=console.error.bind(console),R,t0=!1,M,k=a=>a.startsWith("file://");class L{}class X extends L{}function W(a){for(var c=0,d=a.length,b=new Uint8Array(d),y;c<d;++c)y=a.charCodeAt(c),b[c]=~y>>8&y;return b}var H,J,a0=!1,n0=!1;function x0(){var a=GA.buffer;fx=new Int8Array(a),V0=new Int16Array(a),nA=new Uint8Array(a),it=new Uint16Array(a),G0=new Int32Array(a),c0=new Uint32Array(a),tt=new Float32Array(a),nt=new Float64Array(a),W0=new BigInt64Array(a),st=new BigUint64Array(a)}function o0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)Dr(n.preRun.shift());qA(Yx)}function G(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),nx.init(),ae.__wasm_call_ctors(),o.ignorePermissions=!1}function s0(){}function l0(){wr(),o.quit(),nx.shutdown(),n0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)ur(n.postRun.shift());qA(NA)}function C0(a){n.onAbort?.(a),a=`Aborted(${a})`,O(a),t0=!0,a+=". Build with -sASSERTIONS for more info.";var c=new WebAssembly.RuntimeError(a);throw J?.(c),c}var _0;function I0(){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
|
|
1161
|
+
\0A\xC0\x81\v\v0\xC0\0\0\x80!\0\`(`)}function ox(s){return s}async function Qx(s){return s}async function $A(s,l){try{var B=await Qx(s),p=await WebAssembly.instantiate(B,l);return p}catch(h){R(`failed to asynchronously prepare wasm: ${h}`),C0(h)}}async function qA(s,l,B){return $A(l,B)}function cx(){var s={env:ix,wasi_snapshot_preview1:ix};return s}async function tx(){function s(_,M){return Ze=_.exports,m0(Ze),Z(),Ze}function l(_){return s(_.instance)}var B=cx();if(n.instantiateWasm)return new Promise((_,M)=>{n.instantiateWasm(B,(z,v0)=>{_(s(z,v0))})});_0??(_0=T0());var p=await qA(O,_0,B),h=l(p);return h}class nA{constructor(l){bx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${l})`,this.status=l}}var V0,G0,W0,fx,tt,nt,it,c0,st,iA,NA=s=>{for(;s.length>0;)s.shift()(n)},IA=[],Dr=s=>IA.push(s),Zx=[],pr=s=>Zx.push(s),ge=!1,Fx=s=>U(s),y0=()=>F0(),sA=globalThis.TextDecoder&&new TextDecoder,gx=(s,l,B,p)=>{var h=l+B;if(p)return h;for(;s[l]&&!(l>=h);)++l;return l},pA=(s,l=0,B,p)=>{var h=gx(s,l,B,p);if(h-l>16&&s.buffer&&sA)return sA.decode(s.subarray(l,h));for(var _="";l<h;){var M=s[l++];if(!(M&128)){_+=String.fromCharCode(M);continue}var z=s[l++]&63;if((M&224)==192){_+=String.fromCharCode((M&31)<<6|z);continue}var v0=s[l++]&63;if((M&240)==224?M=(M&15)<<12|z<<6|v0:M=(M&7)<<18|z<<12|v0<<6|s[l++]&63,M<65536)_+=String.fromCharCode(M);else{var S0=M-65536;_+=String.fromCharCode(55296|S0>>10,56320|S0&1023)}}return _},aA=(s,l,B)=>s?pA(iA,s,l,B):"",MA=(s,l,B,p)=>C0(`Assertion failed: ${aA(s)}, at: `+[l?aA(l):"unknown filename",B,p?aA(p):"unknown function"]),f0={isAbs:s=>s.charAt(0)==="/",splitPath:s=>{var l=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return l.exec(s).slice(1)},normalizeArray:(s,l)=>{for(var B=0,p=s.length-1;p>=0;p--){var h=s[p];h==="."?s.splice(p,1):h===".."?(s.splice(p,1),B++):B&&(s.splice(p,1),B--)}if(l)for(;B;B--)s.unshift("..");return s},normalize:s=>{var l=f0.isAbs(s),B=s.slice(-1)==="/";return s=f0.normalizeArray(s.split("/").filter(p=>!!p),!l).join("/"),!s&&!l&&(s="."),s&&B&&(s+="/"),(l?"/":"")+s},dirname:s=>{var l=f0.splitPath(s),B=l[0],p=l[1];return!B&&!p?".":(p&&(p=p.slice(0,-1)),B+p)},basename:s=>s&&s.match(/([^\/]+|\/)\/*$/)[1],join:(...s)=>f0.normalize(s.join("/")),join2:(s,l)=>f0.normalize(s+"/"+l)},at=()=>{if(E){var s=require("crypto");return l=>s.randomFillSync(l)}return l=>(crypto.getRandomValues(l),0)},Je=s=>(Je=at())(s),ux={resolve:(...s)=>{for(var l="",B=!1,p=s.length-1;p>=-1&&!B;p--){var h=p>=0?s[p]:o.cwd();if(typeof h!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!h)return"";l=h+"/"+l,B=f0.isAbs(h)}return l=f0.normalizeArray(l.split("/").filter(_=>!!_),!B).join("/"),(B?"/":"")+l||"."},relative:(s,l)=>{s=ux.resolve(s).slice(1),l=ux.resolve(l).slice(1);function B(S0){for(var xx=0;xx<S0.length&&S0[xx]==="";xx++);for(var R0=S0.length-1;R0>=0&&S0[R0]==="";R0--);return xx>R0?[]:S0.slice(xx,R0-xx+1)}for(var p=B(s.split("/")),h=B(l.split("/")),_=Math.min(p.length,h.length),M=_,z=0;z<_;z++)if(p[z]!==h[z]){M=z;break}for(var v0=[],z=M;z<p.length;z++)v0.push("..");return v0=v0.concat(h.slice(M)),v0.join("/")}},Jx=[],ee=s=>{for(var l=0,B=0;B<s.length;++B){var p=s.charCodeAt(B);p<=127?l++:p<=2047?l+=2:p>=55296&&p<=57343?(l+=4,++B):l+=3}return l},Ke=(s,l,B,p)=>{if(!(p>0))return 0;for(var h=B,_=B+p-1,M=0;M<s.length;++M){var z=s.codePointAt(M);if(z<=127){if(B>=_)break;l[B++]=z}else if(z<=2047){if(B+1>=_)break;l[B++]=192|z>>6,l[B++]=128|z&63}else if(z<=65535){if(B+2>=_)break;l[B++]=224|z>>12,l[B++]=128|z>>6&63,l[B++]=128|z&63}else{if(B+3>=_)break;l[B++]=240|z>>18,l[B++]=128|z>>12&63,l[B++]=128|z>>6&63,l[B++]=128|z&63,M++}}return l[B]=0,B-h},re=(s,l,B)=>{var p=B>0?B:ee(s)+1,h=new Array(p),_=Ke(s,h,0,h.length);return l&&(h.length=_),h},ot=()=>{if(!Jx.length){var s=null;if(E){var l=256,B=Buffer.alloc(l),p=0,h=process.stdin.fd;try{p=$.readSync(h,B,0,l)}catch(_){if(_.toString().includes("EOF"))p=0;else throw _}p>0&&(s=B.slice(0,p).toString("utf-8"))}else globalThis.window?.prompt&&(s=window.prompt("Input: "),s!==null&&(s+=`
|
|
1162
|
+
`));if(!s)return null;Jx=re(s,!0)}return Jx.shift()},nx={ttys:[],init(){},shutdown(){},register(s,l){nx.ttys[s]={input:[],output:[],ops:l},o.registerDevice(s,nx.stream_ops)},stream_ops:{open(s){var l=nx.ttys[s.node.rdev];if(!l)throw new o.ErrnoError(43);s.tty=l,s.seekable=!1},close(s){s.tty.ops.fsync(s.tty)},fsync(s){s.tty.ops.fsync(s.tty)},read(s,l,B,p,h){if(!s.tty||!s.tty.ops.get_char)throw new o.ErrnoError(60);for(var _=0,M=0;M<p;M++){var z;try{z=s.tty.ops.get_char(s.tty)}catch{throw new o.ErrnoError(29)}if(z===void 0&&_===0)throw new o.ErrnoError(6);if(z==null)break;_++,l[B+M]=z}return _&&(s.node.atime=Date.now()),_},write(s,l,B,p,h){if(!s.tty||!s.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var _=0;_<p;_++)s.tty.ops.put_char(s.tty,l[B+_])}catch{throw new o.ErrnoError(29)}return p&&(s.node.mtime=s.node.ctime=Date.now()),_}},default_tty_ops:{get_char(s){return ot()},put_char(s,l){l===null||l===10?(q(pA(s.output)),s.output=[]):l!=0&&s.output.push(l)},fsync(s){s.output?.length>0&&(q(pA(s.output)),s.output=[])},ioctl_tcgets(s){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(s,l,B){return 0},ioctl_tiocgwinsz(s){return[24,80]}},default_tty1_ops:{put_char(s,l){l===null||l===10?(R(pA(s.output)),s.output=[]):l!=0&&s.output.push(l)},fsync(s){s.output?.length>0&&(R(pA(s.output)),s.output=[])}}},LA=s=>{C0()},i0={ops_table:null,mount(s){return i0.createNode(null,"/",16895,0)},createNode(s,l,B,p){if(o.isBlkdev(B)||o.isFIFO(B))throw new o.ErrnoError(63);i0.ops_table||(i0.ops_table={dir:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,lookup:i0.node_ops.lookup,mknod:i0.node_ops.mknod,rename:i0.node_ops.rename,unlink:i0.node_ops.unlink,rmdir:i0.node_ops.rmdir,readdir:i0.node_ops.readdir,symlink:i0.node_ops.symlink},stream:{llseek:i0.stream_ops.llseek}},file:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:{llseek:i0.stream_ops.llseek,read:i0.stream_ops.read,write:i0.stream_ops.write,mmap:i0.stream_ops.mmap,msync:i0.stream_ops.msync}},link:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,readlink:i0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:o.chrdev_stream_ops}});var h=o.createNode(s,l,B,p);return o.isDir(h.mode)?(h.node_ops=i0.ops_table.dir.node,h.stream_ops=i0.ops_table.dir.stream,h.contents={}):o.isFile(h.mode)?(h.node_ops=i0.ops_table.file.node,h.stream_ops=i0.ops_table.file.stream,h.usedBytes=0,h.contents=i0.emptyFileContents??(i0.emptyFileContents=new Uint8Array(0))):o.isLink(h.mode)?(h.node_ops=i0.ops_table.link.node,h.stream_ops=i0.ops_table.link.stream):o.isChrdev(h.mode)&&(h.node_ops=i0.ops_table.chrdev.node,h.stream_ops=i0.ops_table.chrdev.stream),h.atime=h.mtime=h.ctime=Date.now(),s&&(s.contents[l]=h,s.atime=s.mtime=s.ctime=h.atime),h},getFileDataAsTypedArray(s){return s.contents.subarray(0,s.usedBytes)},expandFileStorage(s,l){var B=s.contents.length;if(!(B>=l)){var p=1024*1024;l=Math.max(l,B*(B<p?2:1.125)>>>0),B&&(l=Math.max(l,256));var h=i0.getFileDataAsTypedArray(s);s.contents=new Uint8Array(l),s.contents.set(h)}},resizeFileStorage(s,l){if(s.usedBytes!=l){var B=s.contents;s.contents=new Uint8Array(l),s.contents.set(B.subarray(0,Math.min(l,s.usedBytes))),s.usedBytes=l}},node_ops:{getattr(s){var l={};return l.dev=o.isChrdev(s.mode)?s.id:1,l.ino=s.id,l.mode=s.mode,l.nlink=1,l.uid=0,l.gid=0,l.rdev=s.rdev,o.isDir(s.mode)?l.size=4096:o.isFile(s.mode)?l.size=s.usedBytes:o.isLink(s.mode)?l.size=s.link.length:l.size=0,l.atime=new Date(s.atime),l.mtime=new Date(s.mtime),l.ctime=new Date(s.ctime),l.blksize=4096,l.blocks=Math.ceil(l.size/l.blksize),l},setattr(s,l){for(let B of["mode","atime","mtime","ctime"])l[B]!=null&&(s[B]=l[B]);l.size!==void 0&&i0.resizeFileStorage(s,l.size)},lookup(s,l){throw i0.doesNotExistError||(i0.doesNotExistError=new o.ErrnoError(44),i0.doesNotExistError.stack="<generic error, no stack>"),i0.doesNotExistError},mknod(s,l,B,p){return i0.createNode(s,l,B,p)},rename(s,l,B){var p;try{p=o.lookupNode(l,B)}catch{}if(p){if(o.isDir(s.mode))for(var h in p.contents)throw new o.ErrnoError(55);o.hashRemoveNode(p)}delete s.parent.contents[s.name],l.contents[B]=s,s.name=B,l.ctime=l.mtime=s.parent.ctime=s.parent.mtime=Date.now()},unlink(s,l){delete s.contents[l],s.ctime=s.mtime=Date.now()},rmdir(s,l){var B=o.lookupNode(s,l);for(var p in B.contents)throw new o.ErrnoError(55);delete s.contents[l],s.ctime=s.mtime=Date.now()},readdir(s){return[".","..",...Object.keys(s.contents)]},symlink(s,l,B){var p=i0.createNode(s,l,41471,0);return p.link=B,p},readlink(s){if(!o.isLink(s.mode))throw new o.ErrnoError(28);return s.link}},stream_ops:{read(s,l,B,p,h){var _=s.node.contents;if(h>=s.node.usedBytes)return 0;var M=Math.min(s.node.usedBytes-h,p);return l.set(_.subarray(h,h+M),B),M},write(s,l,B,p,h,_){if(l.buffer===fx.buffer&&(_=!1),!p)return 0;var M=s.node;return M.mtime=M.ctime=Date.now(),_?(M.contents=l.subarray(B,B+p),M.usedBytes=p):M.usedBytes===0&&h===0?(M.contents=l.slice(B,B+p),M.usedBytes=p):(i0.expandFileStorage(M,h+p),M.contents.set(l.subarray(B,B+p),h),M.usedBytes=Math.max(M.usedBytes,h+p)),p},llseek(s,l,B){var p=l;if(B===1?p+=s.position:B===2&&o.isFile(s.node.mode)&&(p+=s.node.usedBytes),p<0)throw new o.ErrnoError(28);return p},mmap(s,l,B,p,h){if(!o.isFile(s.node.mode))throw new o.ErrnoError(43);var _,M,z=s.node.contents;if(!(h&2)&&z.buffer===fx.buffer)M=!1,_=z.byteOffset;else{if(M=!0,_=LA(l),!_)throw new o.ErrnoError(48);z&&((B>0||B+l<z.length)&&(z.subarray?z=z.subarray(B,B+l):z=Array.prototype.slice.call(z,B,B+l)),fx.set(z,_))}return{ptr:_,allocated:M}},msync(s,l,B,p,h){return i0.stream_ops.write(s,l,0,p,B,!1),0}}},RA=s=>{if(typeof s!="string")return s;var l={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},B=l[s];if(typeof B>"u")throw new Error(`Unknown file open mode: ${s}`);return B},xA=s=>(typeof s=="string"&&(s=re(s,!0)),s.subarray||(s=new Uint8Array(s)),s),oA=(s,l)=>{var B=0;return s&&(B|=365),l&&(B|=146),B},N0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},k0={mount(s){return k0.createNode(null,"/",s.opts.fs.lstat(s.opts.root).mode,0)},createNode(s,l,B,p){if(!o.isDir(B)&&!o.isFile(B)&&!o.isLink(B))throw new o.ErrnoError(N0.EINVAL);var h=o.createNode(s,l,B);return h.node_ops=k0.node_ops,h.stream_ops=k0.stream_ops,h},realPath(s){for(var l=[];s.parent!==s;)l.push(s.name),s=s.parent;return l.push(s.mount.opts.root),l.reverse(),f0.join(...l)},node_ops:{getattr(s){var l=k0.realPath(s),B;try{B=s.mount.opts.fs.lstat(l)}catch(p){throw p.code?new o.ErrnoError(N0[p.code]):p}return{dev:B.dev,ino:B.ino,mode:B.mode,nlink:B.nlink,uid:B.uid,gid:B.gid,rdev:B.rdev,size:B.size,atime:B.atime,mtime:B.mtime,ctime:B.ctime,blksize:B.blksize,blocks:B.blocks}},setattr(s,l){var B=k0.realPath(s);try{if(l.mode!==void 0&&(s.mount.opts.fs.chmod(B,l.mode),s.mode=l.mode),l.atime||l.mtime){var p=new Date(l.atime||l.mtime),h=new Date(l.mtime||l.atime);s.mount.opts.fs.utime(B,p,h)}l.size!==void 0&&s.mount.opts.fs.truncate(B,l.size)}catch(_){throw _.code?new o.ErrnoError(N0[_.code]):_}},lookup(s,l){try{var B=f0.join2(k0.realPath(s),l),p=s.mount.opts.fs.lstat(B).mode,h=k0.createNode(s,l,p);return h}catch(_){throw _.code?new o.ErrnoError(N0[_.code]):_}},mknod(s,l,B,p){var h=k0.createNode(s,l,B,p),_=k0.realPath(h);try{o.isDir(h.mode)?h.mount.opts.fs.mkdir(_,h.mode):h.mount.opts.fs.writeFile(_,"",{mode:h.mode})}catch(M){throw M.code?new o.ErrnoError(N0[M.code]):M}return h},rename(s,l,B){var p=k0.realPath(s),h=f0.join2(k0.realPath(l),B);try{s.mount.opts.fs.rename(p,h),s.name=B}catch(_){throw _.code?new o.ErrnoError(N0[_.code]):_}},unlink(s,l){var B=f0.join2(k0.realPath(s),l);try{s.mount.opts.fs.unlink(B)}catch(p){throw p.code?new o.ErrnoError(N0[p.code]):p}},rmdir(s,l){var B=f0.join2(k0.realPath(s),l);try{s.mount.opts.fs.rmdir(B)}catch(p){throw p.code?new o.ErrnoError(N0[p.code]):p}},readdir(s){var l=k0.realPath(s);try{return s.mount.opts.fs.readdir(l)}catch(B){throw B.code?new o.ErrnoError(N0[B.code]):B}},symlink(s,l,B){var p=f0.join2(k0.realPath(s),l);try{s.mount.opts.fs.symlink(B,p)}catch(h){throw h.code?new o.ErrnoError(N0[h.code]):h}},readlink(s){var l=k0.realPath(s);try{return s.mount.opts.fs.readlink(l)}catch(B){throw B.code?new o.ErrnoError(N0[B.code]):B}}},stream_ops:{open(s){var l=k0.realPath(s.node);try{s.nfd=s.node.mount.opts.fs.open(l,s.flags)}catch(B){throw B.code?new o.ErrnoError(N0[B.code]):B}},close(s){try{s.node.mount.opts.fs.close(s.nfd)}catch(l){throw l.code?new o.ErrnoError(N0[l.code]):l}},read(s,l,B,p,h){try{return s.node.mount.opts.fs.read(s.nfd,l,B,p,h)}catch(_){throw _.code?new o.ErrnoError(N0[_.code]):_}},write(s,l,B,p,h){try{return s.node.mount.opts.fs.write(s.nfd,l,B,p,h)}catch(_){throw _.code?new o.ErrnoError(N0[_.code]):_}},llseek(s,l,B){var p=l;if(B===1)p+=s.position;else if(B===2&&o.isFile(s.node.mode))try{var h=s.node.node_ops.getattr(s.node);p+=h.size}catch(_){throw new o.ErrnoError(N0[_.code])}if(p<0)throw new o.ErrnoError(N0.EINVAL);return p}}},bA=async s=>{var l=await j(s);return new Uint8Array(l)},ze=(...s)=>o.createDataFile(...s),Dx=s=>s,Cx=0,b0=null,Ve=s=>{if(Cx--,n.monitorRunDependencies?.(Cx),Cx==0&&b0){var l=b0;b0=null,l()}},Nx=s=>{Cx++,n.monitorRunDependencies?.(Cx)},ye=[],mA=async(s,l)=>{typeof Browser<"u"&&Browser.init();for(var B of ye)if(B.canHandle(l))return B.handle(s,l);return s},OA=async(s,l,B,p,h,_,M,z)=>{var v0=l?ux.resolve(f0.join2(s,l)):s,S0=Dx(`cp ${v0}`);Nx(S0);try{var xx=B;typeof B=="string"&&(xx=await bA(B)),xx=await mA(xx,v0),z?.(),_||ze(s,l,xx,p,h,M)}finally{Ve(S0)}},Ft=(s,l,B,p,h,_,M,z,v0,S0)=>{OA(s,l,B,p,h,z,v0,S0).then(_).catch(M)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(s){bx(this,"name","ErrnoError"),this.errno=s}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(s){this.node=s}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(s){this.shared.flags=s}get position(){return this.shared.position}set position(s){this.shared.position=s}},FSNode:class{constructor(s,l,B,p){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),s||(s=this),this.parent=s,this.mount=s.mount,this.id=o.nextInode++,this.name=l,this.mode=B,this.rdev=p,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(s){s?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(s){s?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(s,l={}){if(!s)throw new o.ErrnoError(44);l.follow_mount??(l.follow_mount=!0),f0.isAbs(s)||(s=o.cwd()+"/"+s);x:for(var B=0;B<40;B++){for(var p=s.split("/").filter(S0=>!!S0),h=o.root,_="/",M=0;M<p.length;M++){var z=M===p.length-1;if(z&&l.parent)break;if(p[M]!=="."){if(p[M]===".."){if(_=f0.dirname(_),o.isRoot(h)){s=_+"/"+p.slice(M+1).join("/"),B--;continue x}else h=h.parent;continue}_=f0.join2(_,p[M]);try{h=o.lookupNode(h,p[M])}catch(S0){if(S0?.errno===44&&z&&l.noent_okay)return{path:_};throw S0}if(o.isMountpoint(h)&&(!z||l.follow_mount)&&(h=h.mounted.root),o.isLink(h.mode)&&(!z||l.follow)){if(!h.node_ops.readlink)throw new o.ErrnoError(52);var v0=h.node_ops.readlink(h);f0.isAbs(v0)||(v0=f0.dirname(_)+"/"+v0),s=v0+"/"+p.slice(M+1).join("/");continue x}}}return{path:_,node:h}}throw new o.ErrnoError(32)},getPath(s){for(var l;;){if(o.isRoot(s)){var B=s.mount.mountpoint;return l?B[B.length-1]!=="/"?`${B}/${l}`:B+l:B}l=l?`${s.name}/${l}`:s.name,s=s.parent}},hashName(s,l){for(var B=0,p=0;p<l.length;p++)B=(B<<5)-B+l.charCodeAt(p)|0;return(s+B>>>0)%o.nameTable.length},hashAddNode(s){var l=o.hashName(s.parent.id,s.name);s.name_next=o.nameTable[l],o.nameTable[l]=s},hashRemoveNode(s){var l=o.hashName(s.parent.id,s.name);if(o.nameTable[l]===s)o.nameTable[l]=s.name_next;else for(var B=o.nameTable[l];B;){if(B.name_next===s){B.name_next=s.name_next;break}B=B.name_next}},lookupNode(s,l){var B=o.mayLookup(s);if(B)throw new o.ErrnoError(B);for(var p=o.hashName(s.id,l),h=o.nameTable[p];h;h=h.name_next){var _=h.name;if(h.parent.id===s.id&&_===l)return h}return o.lookup(s,l)},createNode(s,l,B,p){var h=new o.FSNode(s,l,B,p);return o.hashAddNode(h),h},destroyNode(s){o.hashRemoveNode(s)},isRoot(s){return s===s.parent},isMountpoint(s){return!!s.mounted},isFile(s){return(s&61440)===32768},isDir(s){return(s&61440)===16384},isLink(s){return(s&61440)===40960},isChrdev(s){return(s&61440)===8192},isBlkdev(s){return(s&61440)===24576},isFIFO(s){return(s&61440)===4096},isSocket(s){return(s&49152)===49152},flagsToPermissionString(s){var l=["r","w","rw"][s&3];return s&512&&(l+="w"),l},nodePermissions(s,l){return o.ignorePermissions?0:l.includes("r")&&!(s.mode&292)||l.includes("w")&&!(s.mode&146)||l.includes("x")&&!(s.mode&73)?2:0},mayLookup(s){if(!o.isDir(s.mode))return 54;var l=o.nodePermissions(s,"x");return l||(s.node_ops.lookup?0:2)},mayCreate(s,l){if(!o.isDir(s.mode))return 54;try{var B=o.lookupNode(s,l);return 20}catch{}return o.nodePermissions(s,"wx")},mayDelete(s,l,B){var p;try{p=o.lookupNode(s,l)}catch(_){return _.errno}var h=o.nodePermissions(s,"wx");if(h)return h;if(B){if(!o.isDir(p.mode))return 54;if(o.isRoot(p)||o.getPath(p)===o.cwd())return 10}else if(o.isDir(p.mode))return 31;return 0},mayOpen(s,l){if(!s)return 44;if(o.isLink(s.mode))return 32;var B=o.flagsToPermissionString(l);return o.isDir(s.mode)&&(B!=="r"||l&576)?31:o.nodePermissions(s,B)},checkOpExists(s,l){if(!s)throw new o.ErrnoError(l);return s},MAX_OPEN_FDS:4096,nextfd(){for(var s=0;s<=o.MAX_OPEN_FDS;s++)if(!o.streams[s])return s;throw new o.ErrnoError(33)},getStreamChecked(s){var l=o.getStream(s);if(!l)throw new o.ErrnoError(8);return l},getStream:s=>o.streams[s],createStream(s,l=-1){return s=Object.assign(new o.FSStream,s),l==-1&&(l=o.nextfd()),s.fd=l,o.streams[l]=s,s},closeStream(s){o.streams[s]=null},dupStream(s,l=-1){var B=o.createStream(s,l);return B.stream_ops?.dup?.(B),B},doSetAttr(s,l,B){var p=s?.stream_ops.setattr,h=p?s:l;p??(p=l.node_ops.setattr),o.checkOpExists(p,63);try{p(h,B)}catch(_){throw _ instanceof RangeError?new o.ErrnoError(22):_}},chrdev_stream_ops:{open(s){var l=o.getDevice(s.node.rdev);s.stream_ops=l.stream_ops,s.stream_ops.open?.(s)},llseek(){throw new o.ErrnoError(70)}},major:s=>s>>8,minor:s=>s&255,makedev:(s,l)=>s<<8|l,registerDevice(s,l){o.devices[s]={stream_ops:l}},getDevice:s=>o.devices[s],getMounts(s){for(var l=[],B=[s];B.length;){var p=B.pop();l.push(p),B.push(...p.mounts)}return l},syncfs(s,l){typeof s=="function"&&(l=s,s=!1),o.syncFSRequests++,o.syncFSRequests>1&&R(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var B=o.getMounts(o.root.mount),p=0;function h(z){return o.syncFSRequests--,l(z)}function _(z){if(z)return _.errored?void 0:(_.errored=!0,h(z));++p>=B.length&&h(null)}for(var M of B)M.type.syncfs?M.type.syncfs(M,s,_):_(null)},mount(s,l,B){var p=B==="/",h=!B,_;if(p&&o.root)throw new o.ErrnoError(10);if(!p&&!h){var M=o.lookupPath(B,{follow_mount:!1});if(B=M.path,_=M.node,o.isMountpoint(_))throw new o.ErrnoError(10);if(!o.isDir(_.mode))throw new o.ErrnoError(54)}var z={type:s,opts:l,mountpoint:B,mounts:[]},v0=s.mount(z);return v0.mount=z,z.root=v0,p?o.root=v0:_&&(_.mounted=z,_.mount&&_.mount.mounts.push(z)),v0},unmount(s){var l=o.lookupPath(s,{follow_mount:!1});if(!o.isMountpoint(l.node))throw new o.ErrnoError(28);var B=l.node,p=B.mounted,h=o.getMounts(p);for(var[_,M]of Object.entries(o.nameTable))for(;M;){var z=M.name_next;h.includes(M.mount)&&o.destroyNode(M),M=z}B.mounted=null;var v0=B.mount.mounts.indexOf(p);B.mount.mounts.splice(v0,1)},lookup(s,l){return s.node_ops.lookup(s,l)},mknod(s,l,B){var p=o.lookupPath(s,{parent:!0}),h=p.node,_=f0.basename(s);if(!_)throw new o.ErrnoError(28);if(_==="."||_==="..")throw new o.ErrnoError(20);var M=o.mayCreate(h,_);if(M)throw new o.ErrnoError(M);if(!h.node_ops.mknod)throw new o.ErrnoError(63);return h.node_ops.mknod(h,_,l,B)},statfs(s){return o.statfsNode(o.lookupPath(s,{follow:!0}).node)},statfsStream(s){return o.statfsNode(s.node)},statfsNode(s){var l={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return s.node_ops.statfs&&Object.assign(l,s.node_ops.statfs(s.mount.opts.root)),l},create(s,l=438){return l&=4095,l|=32768,o.mknod(s,l,0)},mkdir(s,l=511){return l&=1023,l|=16384,o.mknod(s,l,0)},mkdirTree(s,l){var B=s.split("/"),p="";for(var h of B)if(h){(p||f0.isAbs(s))&&(p+="/"),p+=h;try{o.mkdir(p,l)}catch(_){if(_.errno!=20)throw _}}},mkdev(s,l,B){return typeof B>"u"&&(B=l,l=438),l|=8192,o.mknod(s,l,B)},symlink(s,l){if(!ux.resolve(s))throw new o.ErrnoError(44);var B=o.lookupPath(l,{parent:!0}),p=B.node;if(!p)throw new o.ErrnoError(44);var h=f0.basename(l),_=o.mayCreate(p,h);if(_)throw new o.ErrnoError(_);if(!p.node_ops.symlink)throw new o.ErrnoError(63);return p.node_ops.symlink(p,h,s)},rename(s,l){var B=f0.dirname(s),p=f0.dirname(l),h=f0.basename(s),_=f0.basename(l),M,z,v0;if(M=o.lookupPath(s,{parent:!0}),z=M.node,M=o.lookupPath(l,{parent:!0}),v0=M.node,!z||!v0)throw new o.ErrnoError(44);if(z.mount!==v0.mount)throw new o.ErrnoError(75);var S0=o.lookupNode(z,h),xx=ux.relative(s,p);if(xx.charAt(0)!==".")throw new o.ErrnoError(28);if(xx=ux.relative(l,B),xx.charAt(0)!==".")throw new o.ErrnoError(55);var R0;try{R0=o.lookupNode(v0,_)}catch{}if(S0!==R0){var I0=o.isDir(S0.mode),j0=o.mayDelete(z,h,I0);if(j0)throw new o.ErrnoError(j0);if(j0=R0?o.mayDelete(v0,_,I0):o.mayCreate(v0,_),j0)throw new o.ErrnoError(j0);if(!z.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(S0)||R0&&o.isMountpoint(R0))throw new o.ErrnoError(10);if(v0!==z&&(j0=o.nodePermissions(z,"w"),j0))throw new o.ErrnoError(j0);o.hashRemoveNode(S0);try{z.node_ops.rename(S0,v0,_),S0.parent=v0}catch(dx){throw dx}finally{o.hashAddNode(S0)}}},rmdir(s){var l=o.lookupPath(s,{parent:!0}),B=l.node,p=f0.basename(s),h=o.lookupNode(B,p),_=o.mayDelete(B,p,!0);if(_)throw new o.ErrnoError(_);if(!B.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(h))throw new o.ErrnoError(10);B.node_ops.rmdir(B,p),o.destroyNode(h)},readdir(s){var l=o.lookupPath(s,{follow:!0}),B=l.node,p=o.checkOpExists(B.node_ops.readdir,54);return p(B)},unlink(s){var l=o.lookupPath(s,{parent:!0}),B=l.node;if(!B)throw new o.ErrnoError(44);var p=f0.basename(s),h=o.lookupNode(B,p),_=o.mayDelete(B,p,!1);if(_)throw new o.ErrnoError(_);if(!B.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(h))throw new o.ErrnoError(10);B.node_ops.unlink(B,p),o.destroyNode(h)},readlink(s){var l=o.lookupPath(s),B=l.node;if(!B)throw new o.ErrnoError(44);if(!B.node_ops.readlink)throw new o.ErrnoError(28);return B.node_ops.readlink(B)},stat(s,l){var B=o.lookupPath(s,{follow:!l}),p=B.node,h=o.checkOpExists(p.node_ops.getattr,63);return h(p)},fstat(s){var l=o.getStreamChecked(s),B=l.node,p=l.stream_ops.getattr,h=p?l:B;return p??(p=B.node_ops.getattr),o.checkOpExists(p,63),p(h)},lstat(s){return o.stat(s,!0)},doChmod(s,l,B,p){o.doSetAttr(s,l,{mode:B&4095|l.mode&-4096,ctime:Date.now(),dontFollow:p})},chmod(s,l,B){var p;if(typeof s=="string"){var h=o.lookupPath(s,{follow:!B});p=h.node}else p=s;o.doChmod(null,p,l,B)},lchmod(s,l){o.chmod(s,l,!0)},fchmod(s,l){var B=o.getStreamChecked(s);o.doChmod(B,B.node,l,!1)},doChown(s,l,B){o.doSetAttr(s,l,{timestamp:Date.now(),dontFollow:B})},chown(s,l,B,p){var h;if(typeof s=="string"){var _=o.lookupPath(s,{follow:!p});h=_.node}else h=s;o.doChown(null,h,p)},lchown(s,l,B){o.chown(s,l,B,!0)},fchown(s,l,B){var p=o.getStreamChecked(s);o.doChown(p,p.node,!1)},doTruncate(s,l,B){if(o.isDir(l.mode))throw new o.ErrnoError(31);if(!o.isFile(l.mode))throw new o.ErrnoError(28);var p=o.nodePermissions(l,"w");if(p)throw new o.ErrnoError(p);o.doSetAttr(s,l,{size:B,timestamp:Date.now()})},truncate(s,l){if(l<0)throw new o.ErrnoError(28);var B;if(typeof s=="string"){var p=o.lookupPath(s,{follow:!0});B=p.node}else B=s;o.doTruncate(null,B,l)},ftruncate(s,l){var B=o.getStreamChecked(s);if(l<0||(B.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(B,B.node,l)},utime(s,l,B){var p=o.lookupPath(s,{follow:!0}),h=p.node,_=o.checkOpExists(h.node_ops.setattr,63);_(h,{atime:l,mtime:B})},open(s,l,B=438){if(s==="")throw new o.ErrnoError(44);l=RA(l),l&64?B=B&4095|32768:B=0;var p,h;if(typeof s=="object")p=s;else{h=s.endsWith("/");var _=o.lookupPath(s,{follow:!(l&131072),noent_okay:!0});p=_.node,s=_.path}var M=!1;if(l&64)if(p){if(l&128)throw new o.ErrnoError(20)}else{if(h)throw new o.ErrnoError(31);p=o.mknod(s,B|511,0),M=!0}if(!p)throw new o.ErrnoError(44);if(o.isChrdev(p.mode)&&(l&=-513),l&65536&&!o.isDir(p.mode))throw new o.ErrnoError(54);if(!M){var z=o.mayOpen(p,l);if(z)throw new o.ErrnoError(z)}l&512&&!M&&o.truncate(p,0),l&=-131713;var v0=o.createStream({node:p,path:o.getPath(p),flags:l,seekable:!0,position:0,stream_ops:p.stream_ops,ungotten:[],error:!1});return v0.stream_ops.open&&v0.stream_ops.open(v0),M&&o.chmod(p,B&511),v0},close(s){if(o.isClosed(s))throw new o.ErrnoError(8);s.getdents&&(s.getdents=null);try{s.stream_ops.close&&s.stream_ops.close(s)}catch(l){throw l}finally{o.closeStream(s.fd)}s.fd=null},isClosed(s){return s.fd===null},llseek(s,l,B){if(o.isClosed(s))throw new o.ErrnoError(8);if(!s.seekable||!s.stream_ops.llseek)throw new o.ErrnoError(70);if(B!=0&&B!=1&&B!=2)throw new o.ErrnoError(28);return s.position=s.stream_ops.llseek(s,l,B),s.ungotten=[],s.position},read(s,l,B,p,h){if(p<0||h<0)throw new o.ErrnoError(28);if(o.isClosed(s))throw new o.ErrnoError(8);if((s.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(s.node.mode))throw new o.ErrnoError(31);if(!s.stream_ops.read)throw new o.ErrnoError(28);var _=typeof h<"u";if(!_)h=s.position;else if(!s.seekable)throw new o.ErrnoError(70);var M=s.stream_ops.read(s,l,B,p,h);return _||(s.position+=M),M},write(s,l,B,p,h,_){if(p<0||h<0)throw new o.ErrnoError(28);if(o.isClosed(s))throw new o.ErrnoError(8);if((s.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(s.node.mode))throw new o.ErrnoError(31);if(!s.stream_ops.write)throw new o.ErrnoError(28);s.seekable&&s.flags&1024&&o.llseek(s,0,2);var M=typeof h<"u";if(!M)h=s.position;else if(!s.seekable)throw new o.ErrnoError(70);var z=s.stream_ops.write(s,l,B,p,h,_);return M||(s.position+=z),z},mmap(s,l,B,p,h){if((p&2)!==0&&(h&2)===0&&(s.flags&2097155)!==2)throw new o.ErrnoError(2);if((s.flags&2097155)===1)throw new o.ErrnoError(2);if(!s.stream_ops.mmap)throw new o.ErrnoError(43);if(!l)throw new o.ErrnoError(28);return s.stream_ops.mmap(s,l,B,p,h)},msync(s,l,B,p,h){return s.stream_ops.msync?s.stream_ops.msync(s,l,B,p,h):0},ioctl(s,l,B){if(!s.stream_ops.ioctl)throw new o.ErrnoError(59);return s.stream_ops.ioctl(s,l,B)},readFile(s,l={}){l.flags=l.flags||0,l.encoding=l.encoding||"binary",l.encoding!=="utf8"&&l.encoding!=="binary"&&C0(`Invalid encoding type "${l.encoding}"`);var B=o.open(s,l.flags),p=o.stat(s),h=p.size,_=new Uint8Array(h);return o.read(B,_,0,h,0),l.encoding==="utf8"&&(_=pA(_)),o.close(B),_},writeFile(s,l,B={}){B.flags=B.flags||577;var p=o.open(s,B.flags,B.mode);l=xA(l),o.write(p,l,0,l.byteLength,void 0,B.canOwn),o.close(p)},cwd:()=>o.currentPath,chdir(s){var l=o.lookupPath(s,{follow:!0});if(l.node===null)throw new o.ErrnoError(44);if(!o.isDir(l.node.mode))throw new o.ErrnoError(54);var B=o.nodePermissions(l.node,"x");if(B)throw new o.ErrnoError(B);o.currentPath=l.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(p,h,_,M,z)=>M,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var s=new Uint8Array(1024),l=0,B=()=>(l===0&&(Je(s),l=s.byteLength),s[--l]);o.createDevice("/dev","random",B),o.createDevice("/dev","urandom",B),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var s=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var l=o.createNode(s,"fd",16895,73);return l.stream_ops={llseek:i0.stream_ops.llseek},l.node_ops={lookup(B,p){var h=+p,_=o.getStreamChecked(h),M={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>_.path},id:h+1};return M.parent=M,M},readdir(){return Array.from(o.streams.entries()).filter(([B,p])=>p).map(([B,p])=>B.toString())}},l}},{},"/proc/self/fd")},createStandardStreams(s,l,B){s?o.createDevice("/dev","stdin",s):o.symlink("/dev/tty","/dev/stdin"),l?o.createDevice("/dev","stdout",null,l):o.symlink("/dev/tty","/dev/stdout"),B?o.createDevice("/dev","stderr",null,B):o.symlink("/dev/tty1","/dev/stderr");var p=o.open("/dev/stdin",0),h=o.open("/dev/stdout",1),_=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(i0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:i0,PROXYFS:k0}},init(s,l,B){o.initialized=!0,s??(s=n.stdin),l??(l=n.stdout),B??(B=n.stderr),o.createStandardStreams(s,l,B)},quit(){o.initialized=!1,b(0);for(var s of o.streams)s&&o.close(s)},findObject(s,l){var B=o.analyzePath(s,l);return B.exists?B.object:null},analyzePath(s,l){try{var B=o.lookupPath(s,{follow:!l});s=B.path}catch{}var p={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var B=o.lookupPath(s,{parent:!0});p.parentExists=!0,p.parentPath=B.path,p.parentObject=B.node,p.name=f0.basename(s),B=o.lookupPath(s,{follow:!l}),p.exists=!0,p.path=B.path,p.object=B.node,p.name=B.node.name,p.isRoot=B.path==="/"}catch(h){p.error=h.errno}return p},createPath(s,l,B,p){s=typeof s=="string"?s:o.getPath(s);for(var h=l.split("/").reverse();h.length;){var _=h.pop();if(_){var M=f0.join2(s,_);try{o.mkdir(M)}catch(z){if(z.errno!=20)throw z}s=M}}return M},createFile(s,l,B,p,h){var _=f0.join2(typeof s=="string"?s:o.getPath(s),l),M=oA(p,h);return o.create(_,M)},createDataFile(s,l,B,p,h,_){var M=l;s&&(s=typeof s=="string"?s:o.getPath(s),M=l?f0.join2(s,l):s);var z=oA(p,h),v0=o.create(M,z);if(B){B=xA(B),o.chmod(v0,z|146);var S0=o.open(v0,577);o.write(S0,B,0,B.length,0,_),o.close(S0),o.chmod(v0,z)}},createDevice(s,l,B,p){var h,_=f0.join2(typeof s=="string"?s:o.getPath(s),l),M=oA(!!B,!!p);(h=o.createDevice).major??(h.major=64);var z=o.makedev(o.createDevice.major++,0);return o.registerDevice(z,{open(v0){v0.seekable=!1},close(v0){p?.buffer?.length&&p(10)},read(v0,S0,xx,R0,I0){for(var j0=0,dx=0;dx<R0;dx++){var Px;try{Px=B()}catch{throw new o.ErrnoError(29)}if(Px===void 0&&j0===0)throw new o.ErrnoError(6);if(Px==null)break;j0++,S0[xx+dx]=Px}return j0&&(v0.node.atime=Date.now()),j0},write(v0,S0,xx,R0,I0){for(var j0=0;j0<R0;j0++)try{p(S0[xx+j0])}catch{throw new o.ErrnoError(29)}return R0&&(v0.node.mtime=v0.node.ctime=Date.now()),j0}}),o.mkdev(_,M,z)},forceLoadFile(s){if(s.isDevice||s.isFolder||s.link||s.contents)return!0;if(globalThis.XMLHttpRequest)C0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{s.contents=S(s.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(s,l,B,p,h){class _{constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get(I0){if(!(I0>this.length-1||I0<0)){var j0=I0%this.chunkSize,dx=I0/this.chunkSize|0;return this.getter(dx)[j0]}}setDataGetter(I0){this.getter=I0}cacheLength(){var I0=new XMLHttpRequest;I0.open("HEAD",B,!1),I0.send(null),I0.status>=200&&I0.status<300||I0.status===304||C0("Couldn't load "+B+". Status: "+I0.status);var j0=Number(I0.getResponseHeader("Content-length")),dx,Px=(dx=I0.getResponseHeader("Accept-Ranges"))&&dx==="bytes",zx=(dx=I0.getResponseHeader("Content-Encoding"))&&dx==="gzip",AA=1024*1024;Px||(AA=j0);var eA=(FA,Te)=>{FA>Te&&C0("invalid range ("+FA+", "+Te+") or no bytes requested!"),Te>j0-1&&C0("only "+j0+" bytes available! programmer error!");var kx=new XMLHttpRequest;return kx.open("GET",B,!1),j0!==AA&&kx.setRequestHeader("Range","bytes="+FA+"-"+Te),kx.responseType="arraybuffer",kx.overrideMimeType&&kx.overrideMimeType("text/plain; charset=x-user-defined"),kx.send(null),kx.status>=200&&kx.status<300||kx.status===304||C0("Couldn't load "+B+". Status: "+kx.status),kx.response!==void 0?new Uint8Array(kx.response||[]):re(kx.responseText||"",!0)},xr=this;xr.setDataGetter(FA=>{var Te=FA*AA,kx=(FA+1)*AA-1;return kx=Math.min(kx,j0-1),typeof xr.chunks[FA]>"u"&&(xr.chunks[FA]=eA(Te,kx)),typeof xr.chunks[FA]>"u"&&C0("doXHR failed!"),xr.chunks[FA]}),(zx||!j0)&&(AA=j0=1,j0=this.getter(0).length,AA=j0,q("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=j0,this._chunkSize=AA,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||C0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var M=new _,z={isDevice:!1,contents:M}}else var z={isDevice:!1,url:B};var v0=o.createFile(s,l,z,p,h);z.contents?v0.contents=z.contents:z.url&&(v0.contents=null,v0.url=z.url),Object.defineProperties(v0,{usedBytes:{get:function(){return this.contents.length}}});var S0={};for(let[R0,I0]of Object.entries(v0.stream_ops))S0[R0]=(...j0)=>(o.forceLoadFile(v0),I0(...j0));function xx(R0,I0,j0,dx,Px){var zx=R0.node.contents;if(Px>=zx.length)return 0;var AA=Math.min(zx.length-Px,dx);if(zx.slice)for(var eA=0;eA<AA;eA++)I0[j0+eA]=zx[Px+eA];else for(var eA=0;eA<AA;eA++)I0[j0+eA]=zx.get(Px+eA);return AA}return S0.read=(R0,I0,j0,dx,Px)=>(o.forceLoadFile(v0),xx(R0,I0,j0,dx,Px)),S0.mmap=(R0,I0,j0,dx,Px)=>{o.forceLoadFile(v0);var zx=LA(I0);if(!zx)throw new o.ErrnoError(48);return xx(R0,fx,zx,I0,j0),{ptr:zx,allocated:!0}},v0.stream_ops=S0,v0}},w0={currentUmask:18,calculateAt(s,l,B){if(f0.isAbs(l))return l;var p;if(s===-100)p=o.cwd();else{var h=w0.getStreamFromFD(s);p=h.path}if(l.length==0){if(!B)throw new o.ErrnoError(44);return p}return p+"/"+l},writeStat(s,l){c0[s>>2]=l.dev,c0[s+4>>2]=l.mode,c0[s+8>>2]=l.nlink,c0[s+12>>2]=l.uid,c0[s+16>>2]=l.gid,c0[s+20>>2]=l.rdev,W0[s+24>>3]=BigInt(l.size),G0[s+32>>2]=4096,G0[s+36>>2]=l.blocks;var B=l.atime.getTime(),p=l.mtime.getTime(),h=l.ctime.getTime();return W0[s+40>>3]=BigInt(Math.floor(B/1e3)),c0[s+48>>2]=B%1e3*1e3*1e3,W0[s+56>>3]=BigInt(Math.floor(p/1e3)),c0[s+64>>2]=p%1e3*1e3*1e3,W0[s+72>>3]=BigInt(Math.floor(h/1e3)),c0[s+80>>2]=h%1e3*1e3*1e3,W0[s+88>>3]=BigInt(l.ino),0},writeStatFs(s,l){c0[s+4>>2]=l.bsize,c0[s+60>>2]=l.bsize,W0[s+8>>3]=BigInt(l.blocks),W0[s+16>>3]=BigInt(l.bfree),W0[s+24>>3]=BigInt(l.bavail),W0[s+32>>3]=BigInt(l.files),W0[s+40>>3]=BigInt(l.ffree),c0[s+48>>2]=l.fsid,c0[s+64>>2]=l.flags,c0[s+56>>2]=l.namelen},doMsync(s,l,B,p,h){if(!o.isFile(l.node.mode))throw new o.ErrnoError(43);if(p&2)return 0;var _=iA.slice(s,s+B);o.msync(l,_,h,B,p)},getStreamFromFD(s){var l=o.getStreamChecked(s);return l},varargs:void 0,getStr(s){var l=aA(s);return l}};function We(s,l,B,p){try{if(l=w0.getStr(l),l=w0.calculateAt(s,l),B&-8)return-28;var h=o.lookupPath(l,{follow:!0}),_=h.node;if(!_)return-44;var M="";return B&4&&(M+="r"),B&2&&(M+="w"),B&1&&(M+="x"),M&&o.nodePermissions(_,M)?-2:0}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}var GA=()=>{var s=G0[+w0.varargs>>2];return w0.varargs+=4,s},hA=GA;function vt(s,l,B){w0.varargs=B;try{var p=w0.getStreamFromFD(s);switch(l){case 0:{var h=GA();if(h<0)return-28;for(;o.streams[h];)h++;var _;return _=o.dupStream(p,h),_.fd}case 1:case 2:return 0;case 3:return p.flags;case 4:{var h=GA(),M=289792;return p.flags=p.flags&~M|h&M,0}case 12:{var h=hA(),z=0;return V0[h+z>>1]=2,0}case 13:case 14:return 0}return-28}catch(v0){if(typeof o>"u"||v0.name!=="ErrnoError")throw v0;return-v0.errno}}var ke=(s,l,B)=>Ke(s,iA,l,B);function br(s,l){try{if(l===0)return-28;var B=o.cwd(),p=ee(B)+1;return l<p?-68:(ke(B,s,l),p)}catch(h){if(typeof o>"u"||h.name!=="ErrnoError")throw h;return-h.errno}}function mr(s,l,B){w0.varargs=B;try{var p=w0.getStreamFromFD(s);switch(l){case 21509:return p.tty?0:-59;case 21505:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcgets){var h=p.tty.ops.ioctl_tcgets(p),_=hA();G0[_>>2]=h.c_iflag||0,G0[_+4>>2]=h.c_oflag||0,G0[_+8>>2]=h.c_cflag||0,G0[_+12>>2]=h.c_lflag||0;for(var M=0;M<32;M++)fx[_+M+17]=h.c_cc[M]||0;return 0}return 0}case 21510:case 21511:case 21512:return p.tty?0:-59;case 21506:case 21507:case 21508:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tcsets){for(var _=hA(),z=G0[_>>2],v0=G0[_+4>>2],S0=G0[_+8>>2],xx=G0[_+12>>2],R0=[],M=0;M<32;M++)R0.push(fx[_+M+17]);return p.tty.ops.ioctl_tcsets(p.tty,l,{c_iflag:z,c_oflag:v0,c_cflag:S0,c_lflag:xx,c_cc:R0})}return 0}case 21519:{if(!p.tty)return-59;var _=hA();return G0[_>>2]=0,0}case 21520:return p.tty?-28:-59;case 21537:case 21531:{var _=hA();return o.ioctl(p,l,_)}case 21523:{if(!p.tty)return-59;if(p.tty.ops.ioctl_tiocgwinsz){var I0=p.tty.ops.ioctl_tiocgwinsz(p.tty),_=hA();V0[_>>1]=I0[0],V0[_+2>>1]=I0[1]}return 0}case 21524:return p.tty?0:-59;case 21515:return p.tty?0:-59;default:return-28}}catch(j0){if(typeof o>"u"||j0.name!=="ErrnoError")throw j0;return-j0.errno}}function lt(s,l,B,p){w0.varargs=p;try{l=w0.getStr(l),l=w0.calculateAt(s,l);var h=p?GA():0;return B&64&&(h&=~w0.currentUmask),o.open(l,B,h).fd}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return-_.errno}}function ct(s,l,B,p){try{if(l=w0.getStr(l),l=w0.calculateAt(s,l),p<=0)return-28;var h=o.readlink(l),_=Math.min(p,ee(h)),M=fx[B+_];return ke(h,B,p+1),fx[B+_]=M,_}catch(z){if(typeof o>"u"||z.name!=="ErrnoError")throw z;return-z.errno}}function ft(s,l,B,p){try{return l=w0.getStr(l),p=w0.getStr(p),l=w0.calculateAt(s,l),p=w0.calculateAt(B,p),o.rename(l,p),0}catch(h){if(typeof o>"u"||h.name!=="ErrnoError")throw h;return-h.errno}}function we(s){try{return s=w0.getStr(s),o.rmdir(s),0}catch(l){if(typeof o>"u"||l.name!=="ErrnoError")throw l;return-l.errno}}function hr(s,l,B){try{if(l=w0.getStr(l),l=w0.calculateAt(s,l),!B)o.unlink(l);else if(B===512)o.rmdir(l);else return-28;return 0}catch(p){if(typeof o>"u"||p.name!=="ErrnoError")throw p;return-p.errno}}var te=()=>{throw new W},_e=()=>performance.now(),Et=()=>Date.now(),jr=1,Bt=s=>s>=0&&s<=3,ne=9007199254740992,Xe=-9007199254740992,gr=s=>s<Xe||s>ne?NaN:Number(s);function yr(s,l,B){if(l=gr(l),!Bt(s))return 28;var p;if(s===0)p=Et();else if(jr)p=_e();else return 52;var h=Math.round(p*1e3*1e3);return W0[B>>3]=BigInt(h),0}var Ct=()=>2147483648,kr=(s,l)=>Math.ceil(s/l)*l,dt=s=>{var l=M0.buffer.byteLength,B=(s-l+65535)/65536|0;try{return M0.grow(B),Z(),1}catch{}},ut=s=>{var l=iA.length;s>>>=0;var B=Ct();if(s>B)return!1;for(var p=1;p<=4;p*=2){var h=l*(1+.2/p);h=Math.min(h,s+100663296);var _=Math.min(B,kr(Math.max(s,h),65536)),M=dt(_);if(M)return!0}return!1};function Se(s){try{var l=w0.getStreamFromFD(s);return o.close(l),0}catch(B){if(typeof o>"u"||B.name!=="ErrnoError")throw B;return B.errno}}var Dt=(s,l,B,p)=>{for(var h=0,_=0;_<B;_++){var M=c0[l>>2],z=c0[l+4>>2];l+=8;var v0=o.read(s,fx,M,z,p);if(v0<0)return-1;if(h+=v0,v0<z)break;typeof p<"u"&&(p+=v0)}return h};function pt(s,l,B,p){try{var h=w0.getStreamFromFD(s),_=Dt(h,l,B);return c0[p>>2]=_,0}catch(M){if(typeof o>"u"||M.name!=="ErrnoError")throw M;return M.errno}}function wr(s,l,B,p){l=gr(l);try{if(isNaN(l))return 22;var h=w0.getStreamFromFD(s);return o.llseek(h,l,B),W0[p>>3]=BigInt(h.position),h.getdents&&l===0&&B===0&&(h.getdents=null),0}catch(_){if(typeof o>"u"||_.name!=="ErrnoError")throw _;return _.errno}}var _r=(s,l,B,p)=>{for(var h=0,_=0;_<B;_++){var M=c0[l>>2],z=c0[l+4>>2];l+=8;var v0=o.write(s,fx,M,z,p);if(v0<0)return-1;if(h+=v0,v0<z)break;typeof p<"u"&&(p+=v0)}return h};function ie(s,l,B,p){try{var h=w0.getStreamFromFD(s),_=_r(h,l,B);return c0[p>>2]=_,0}catch(M){if(typeof o>"u"||M.name!=="ErrnoError")throw M;return M.errno}}var Sr=0,se=()=>ge||Sr>0,Ye=s=>{I=s,se()||(n.onExit?.(s),r0=!0),m(s,new nA(s))},Ix=(s,l)=>{I=s,se()||l0(),Ye(s)},bt=s=>{if(s instanceof nA||s=="unwind")return I;m(1,s)},UA=s=>V(s),ae=s=>{var l=ee(s)+1,B=UA(l);return ke(s,B,l),B},Qe=[],px=s=>{var l=Qe[s];return l||(Qe[s]=l=$0.get(s)),l},Pe=(...s)=>o.createPath(...s),oe=(...s)=>o.unlink(...s),a=(...s)=>o.createLazyFile(...s),c=(...s)=>o.createDevice(...s);if(o.createPreloadedFile=Ft,o.preloadFile=OA,o.staticInit(),n.noExitRuntime&&(ge=n.noExitRuntime),n.preloadPlugins&&(ye=n.preloadPlugins),n.print&&(q=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(D=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=nn,n.addRunDependency=Nx,n.removeRunDependency=Ve,n.FS_preloadFile=OA,n.FS_unlink=oe,n.FS_createPath=Pe,n.FS_createDevice=c,n.FS=o,n.FS_createDataFile=ze,n.FS_createLazyFile=a,n.PROXYFS=k0;var d,b,y,P,U,V,F0,D0,X0,M0,$0;function m0(s){d=n._main=s.__main_argc_argv,b=s.fflush,y=s.__funcs_on_exit,P=s.setThrew,U=s._emscripten_stack_restore,V=s._emscripten_stack_alloc,F0=s.emscripten_stack_get_current,D0=M0=s.memory,X0=$0=s.__indirect_function_table}var ix={__assert_fail:MA,__syscall_faccessat:We,__syscall_fcntl64:vt,__syscall_getcwd:br,__syscall_ioctl:mr,__syscall_openat:lt,__syscall_readlinkat:ct,__syscall_renameat:ft,__syscall_rmdir:we,__syscall_unlinkat:hr,_emscripten_throw_longjmp:te,clock_time_get:yr,emscripten_resize_heap:ut,fd_close:Se,fd_read:pt,fd_seek:wr,fd_write:ie,invoke_i:Fe,invoke_ii:Gx,invoke_iii:Ux,invoke_iiid:bi,invoke_iiii:Kx,invoke_iiiii:Ex,invoke_iiiiii:mi,invoke_iijii:Di,invoke_v:yx,invoke_vi:pi,invoke_vii:Mx,invoke_viii:tn,invoke_viiii:jA,invoke_viiiii:rn};function yx(s){var l=y0();try{px(s)()}catch(B){if(Fx(l),!(B instanceof L))throw B;P(1,0)}}function Mx(s,l,B){var p=y0();try{px(s)(l,B)}catch(h){if(Fx(p),!(h instanceof L))throw h;P(1,0)}}function Gx(s,l){var B=y0();try{return px(s)(l)}catch(p){if(Fx(B),!(p instanceof L))throw p;P(1,0)}}function Ux(s,l,B){var p=y0();try{return px(s)(l,B)}catch(h){if(Fx(p),!(h instanceof L))throw h;P(1,0)}}function Fe(s){var l=y0();try{return px(s)()}catch(B){if(Fx(l),!(B instanceof L))throw B;P(1,0)}}function Kx(s,l,B,p){var h=y0();try{return px(s)(l,B,p)}catch(_){if(Fx(h),!(_ instanceof L))throw _;P(1,0)}}function jA(s,l,B,p,h){var _=y0();try{px(s)(l,B,p,h)}catch(M){if(Fx(_),!(M instanceof L))throw M;P(1,0)}}function Ex(s,l,B,p,h){var _=y0();try{return px(s)(l,B,p,h)}catch(M){if(Fx(_),!(M instanceof L))throw M;P(1,0)}}function rn(s,l,B,p,h,_){var M=y0();try{px(s)(l,B,p,h,_)}catch(z){if(Fx(M),!(z instanceof L))throw z;P(1,0)}}function Di(s,l,B,p,h){var _=y0();try{return px(s)(l,B,p,h)}catch(M){if(Fx(_),!(M instanceof L))throw M;P(1,0)}}function pi(s,l){var B=y0();try{px(s)(l)}catch(p){if(Fx(B),!(p instanceof L))throw p;P(1,0)}}function tn(s,l,B,p){var h=y0();try{px(s)(l,B,p)}catch(_){if(Fx(h),!(_ instanceof L))throw _;P(1,0)}}function bi(s,l,B,p){var h=y0();try{return px(s)(l,B,p)}catch(_){if(Fx(h),!(_ instanceof L))throw _;P(1,0)}}function mi(s,l,B,p,h,_){var M=y0();try{return px(s)(l,B,p,h,_)}catch(z){if(Fx(M),!(z instanceof L))throw z;P(1,0)}}function nn(s=[]){var l=d;s.unshift(D);var B=s.length,p=UA((B+1)*4),h=p;for(var _ of s)c0[h>>2]=ae(_),h+=4;c0[h>>2]=0;try{var M=l(B,p);return Ix(M,!0),M}catch(z){return bt(z)}}function mt(s=u){if(Cx>0){b0=mt;return}if(o0(),Cx>0){b0=mt;return}function l(){if(n.calledRun=!0,!r0){G(),H?.(n),n.onRuntimeInitialized?.();var B=n.noInitialRun||!0;B||nn(s),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),l()},1)):l()}var Ze;return Ze=await tx(),mt(),a0?i=n:i=new Promise((s,l)=>{H=s,K=l}),i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),zE=Qo({"wasm/bin/pawndbg.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var i,n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=[],D="./this.program",m=(a,c)=>{throw c};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var w="",j,S;if(E){var $=require("fs");w=__dirname+"/",S=a=>{a=k(a)?new URL(a):a;var c=$.readFileSync(a);return c},j=async(a,c=!0)=>{a=k(a)?new URL(a):a;var d=$.readFileSync(a,c?void 0:"utf8");return d},process.argv.length>1&&(D=process.argv[1].replace(/\\/g,"/")),u=process.argv.slice(2),m=(a,c)=>{throw process.exitCode=a,c}}else if(F||v){try{w=new URL(".",r).href}catch{}v&&(S=a=>{var c=new XMLHttpRequest;return c.open("GET",a,!1),c.responseType="arraybuffer",c.send(null),new Uint8Array(c.response)}),j=async a=>{if(k(a))return new Promise((d,b)=>{var y=new XMLHttpRequest;y.open("GET",a,!0),y.responseType="arraybuffer",y.onload=()=>{if(y.status==200||y.status==0&&y.response){d(y.response);return}b(y.status)},y.onerror=b,y.send(null)});var c=await fetch(a,{credentials:"same-origin"});if(c.ok)return c.arrayBuffer();throw new Error(c.status+" : "+c.url)}}var q=console.log.bind(console),R=console.error.bind(console),O,r0=!1,I,k=a=>a.startsWith("file://");class L{}class W extends L{}function Q(a){for(var c=0,d=a.length,b=new Uint8Array(d),y;c<d;++c)y=a.charCodeAt(c),b[c]=~y>>8&y;return b}var H,K,a0=!1,n0=!1;function Z(){var a=UA.buffer;fx=new Int8Array(a),V0=new Int16Array(a),iA=new Uint8Array(a),it=new Uint16Array(a),G0=new Int32Array(a),c0=new Uint32Array(a),tt=new Float32Array(a),nt=new Float64Array(a),W0=new BigInt64Array(a),st=new BigUint64Array(a)}function o0(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)pr(n.preRun.shift());NA(Zx)}function G(){a0=!0,!n.noFSInit&&!o.initialized&&o.init(),nx.init(),oe.__wasm_call_ctors(),o.ignorePermissions=!1}function s0(){}function l0(){_r(),o.quit(),nx.shutdown(),n0=!0}function B0(){if(n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)Dr(n.postRun.shift());NA(IA)}function C0(a){n.onAbort?.(a),a=`Aborted(${a})`,R(a),r0=!0,a+=". Build with -sASSERTIONS for more info.";var c=new WebAssembly.RuntimeError(a);throw K?.(c),c}var _0;function T0(){return Q(`\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 ox(a){return a}async function
|
|
1527
|
-
`));if(!a)return null;Hx=ee(a,!0)}return Hx.shift()},nx={ttys:[],init(){},shutdown(){},register(a,c){nx.ttys[a]={input:[],output:[],ops:c},o.registerDevice(a,nx.stream_ops)},stream_ops:{open(a){var c=nx.ttys[a.node.rdev];if(!c)throw new o.ErrnoError(43);a.tty=c,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,c,d,b,y){if(!a.tty||!a.tty.ops.get_char)throw new o.ErrnoError(60);for(var P=0,U=0;U<b;U++){var V;try{V=a.tty.ops.get_char(a.tty)}catch{throw new o.ErrnoError(29)}if(V===void 0&&P===0)throw new o.ErrnoError(6);if(V==null)break;P++,c[d+U]=V}return P&&(a.node.atime=Date.now()),P},write(a,c,d,b,y){if(!a.tty||!a.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var P=0;P<b;P++)a.tty.ops.put_char(a.tty,c[d+P])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),P}},default_tty_ops:{get_char(a){return ot()},put_char(a,c){c===null||c===10?(q(iA(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){a.output?.length>0&&(q(iA(a.output)),a.output=[])},ioctl_tcgets(a){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(a,c,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,c){c===null||c===10?(O(iA(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){a.output?.length>0&&(O(iA(a.output)),a.output=[])}}},MA=a=>{C0()},i0={ops_table:null,mount(a){return i0.createNode(null,"/",16895,0)},createNode(a,c,d,b){if(o.isBlkdev(d)||o.isFIFO(d))throw new o.ErrnoError(63);i0.ops_table||(i0.ops_table={dir:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,lookup:i0.node_ops.lookup,mknod:i0.node_ops.mknod,rename:i0.node_ops.rename,unlink:i0.node_ops.unlink,rmdir:i0.node_ops.rmdir,readdir:i0.node_ops.readdir,symlink:i0.node_ops.symlink},stream:{llseek:i0.stream_ops.llseek}},file:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:{llseek:i0.stream_ops.llseek,read:i0.stream_ops.read,write:i0.stream_ops.write,mmap:i0.stream_ops.mmap,msync:i0.stream_ops.msync}},link:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,readlink:i0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:o.chrdev_stream_ops}});var y=o.createNode(a,c,d,b);return o.isDir(y.mode)?(y.node_ops=i0.ops_table.dir.node,y.stream_ops=i0.ops_table.dir.stream,y.contents={}):o.isFile(y.mode)?(y.node_ops=i0.ops_table.file.node,y.stream_ops=i0.ops_table.file.stream,y.usedBytes=0,y.contents=i0.emptyFileContents??(i0.emptyFileContents=new Uint8Array(0))):o.isLink(y.mode)?(y.node_ops=i0.ops_table.link.node,y.stream_ops=i0.ops_table.link.stream):o.isChrdev(y.mode)&&(y.node_ops=i0.ops_table.chrdev.node,y.stream_ops=i0.ops_table.chrdev.stream),y.atime=y.mtime=y.ctime=Date.now(),a&&(a.contents[c]=y,a.atime=a.mtime=a.ctime=y.atime),y},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,c){var d=a.contents.length;if(!(d>=c)){var b=1024*1024;c=Math.max(c,d*(d<b?2:1.125)>>>0),d&&(c=Math.max(c,256));var y=i0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(c),a.contents.set(y)}},resizeFileStorage(a,c){if(a.usedBytes!=c){var d=a.contents;a.contents=new Uint8Array(c),a.contents.set(d.subarray(0,Math.min(c,a.usedBytes))),a.usedBytes=c}},node_ops:{getattr(a){var c={};return c.dev=o.isChrdev(a.mode)?a.id:1,c.ino=a.id,c.mode=a.mode,c.nlink=1,c.uid=0,c.gid=0,c.rdev=a.rdev,o.isDir(a.mode)?c.size=4096:o.isFile(a.mode)?c.size=a.usedBytes:o.isLink(a.mode)?c.size=a.link.length:c.size=0,c.atime=new Date(a.atime),c.mtime=new Date(a.mtime),c.ctime=new Date(a.ctime),c.blksize=4096,c.blocks=Math.ceil(c.size/c.blksize),c},setattr(a,c){for(let d of["mode","atime","mtime","ctime"])c[d]!=null&&(a[d]=c[d]);c.size!==void 0&&i0.resizeFileStorage(a,c.size)},lookup(a,c){throw i0.doesNotExistError||(i0.doesNotExistError=new o.ErrnoError(44),i0.doesNotExistError.stack="<generic error, no stack>"),i0.doesNotExistError},mknod(a,c,d,b){return i0.createNode(a,c,d,b)},rename(a,c,d){var b;try{b=o.lookupNode(c,d)}catch{}if(b){if(o.isDir(a.mode))for(var y in b.contents)throw new o.ErrnoError(55);o.hashRemoveNode(b)}delete a.parent.contents[a.name],c.contents[d]=a,a.name=d,c.ctime=c.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,c){delete a.contents[c],a.ctime=a.mtime=Date.now()},rmdir(a,c){var d=o.lookupNode(a,c);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[c],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,c,d){var b=i0.createNode(a,c,41471,0);return b.link=d,b},readlink(a){if(!o.isLink(a.mode))throw new o.ErrnoError(28);return a.link}},stream_ops:{read(a,c,d,b,y){var P=a.node.contents;if(y>=a.node.usedBytes)return 0;var U=Math.min(a.node.usedBytes-y,b);return c.set(P.subarray(y,y+U),d),U},write(a,c,d,b,y,P){if(c.buffer===fx.buffer&&(P=!1),!b)return 0;var U=a.node;return U.mtime=U.ctime=Date.now(),P?(U.contents=c.subarray(d,d+b),U.usedBytes=b):U.usedBytes===0&&y===0?(U.contents=c.slice(d,d+b),U.usedBytes=b):(i0.expandFileStorage(U,y+b),U.contents.set(c.subarray(d,d+b),y),U.usedBytes=Math.max(U.usedBytes,y+b)),b},llseek(a,c,d){var b=c;if(d===1?b+=a.position:d===2&&o.isFile(a.node.mode)&&(b+=a.node.usedBytes),b<0)throw new o.ErrnoError(28);return b},mmap(a,c,d,b,y){if(!o.isFile(a.node.mode))throw new o.ErrnoError(43);var P,U,V=a.node.contents;if(!(y&2)&&V.buffer===fx.buffer)U=!1,P=V.byteOffset;else{if(U=!0,P=MA(c),!P)throw new o.ErrnoError(48);V&&((d>0||d+c<V.length)&&(V.subarray?V=V.subarray(d,d+c):V=Array.prototype.slice.call(V,d,d+c)),fx.set(V,P))}return{ptr:P,allocated:U}},msync(a,c,d,b,y){return i0.stream_ops.write(a,c,0,b,d,!1),0}}},LA=a=>{if(typeof a!="string")return a;var c={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=c[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},Qx=a=>(typeof a=="string"&&(a=ee(a,!0)),a.subarray||(a=new Uint8Array(a)),a),aA=(a,c)=>{var d=0;return a&&(d|=365),c&&(d|=146),d},q0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},k0={mount(a){return k0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,c,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(q0.EINVAL);var y=o.createNode(a,c,d);return y.node_ops=k0.node_ops,y.stream_ops=k0.stream_ops,y},realPath(a){for(var c=[];a.parent!==a;)c.push(a.name),a=a.parent;return c.push(a.mount.opts.root),c.reverse(),f0.join(...c)},node_ops:{getattr(a){var c=k0.realPath(a),d;try{d=a.mount.opts.fs.lstat(c)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}return{dev:d.dev,ino:d.ino,mode:d.mode,nlink:d.nlink,uid:d.uid,gid:d.gid,rdev:d.rdev,size:d.size,atime:d.atime,mtime:d.mtime,ctime:d.ctime,blksize:d.blksize,blocks:d.blocks}},setattr(a,c){var d=k0.realPath(a);try{if(c.mode!==void 0&&(a.mount.opts.fs.chmod(d,c.mode),a.mode=c.mode),c.atime||c.mtime){var b=new Date(c.atime||c.mtime),y=new Date(c.mtime||c.atime);a.mount.opts.fs.utime(d,b,y)}c.size!==void 0&&a.mount.opts.fs.truncate(d,c.size)}catch(P){throw P.code?new o.ErrnoError(q0[P.code]):P}},lookup(a,c){try{var d=f0.join2(k0.realPath(a),c),b=a.mount.opts.fs.lstat(d).mode,y=k0.createNode(a,c,b);return y}catch(P){throw P.code?new o.ErrnoError(q0[P.code]):P}},mknod(a,c,d,b){var y=k0.createNode(a,c,d,b),P=k0.realPath(y);try{o.isDir(y.mode)?y.mount.opts.fs.mkdir(P,y.mode):y.mount.opts.fs.writeFile(P,"",{mode:y.mode})}catch(U){throw U.code?new o.ErrnoError(q0[U.code]):U}return y},rename(a,c,d){var b=k0.realPath(a),y=f0.join2(k0.realPath(c),d);try{a.mount.opts.fs.rename(b,y),a.name=d}catch(P){throw P.code?new o.ErrnoError(q0[P.code]):P}},unlink(a,c){var d=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},rmdir(a,c){var d=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(q0[b.code]):b}},readdir(a){var c=k0.realPath(a);try{return a.mount.opts.fs.readdir(c)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},symlink(a,c,d){var b=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.symlink(d,b)}catch(y){throw y.code?new o.ErrnoError(q0[y.code]):y}},readlink(a){var c=k0.realPath(a);try{return a.mount.opts.fs.readlink(c)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}}},stream_ops:{open(a){var c=k0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(c,a.flags)}catch(d){throw d.code?new o.ErrnoError(q0[d.code]):d}},close(a){try{a.node.mount.opts.fs.close(a.nfd)}catch(c){throw c.code?new o.ErrnoError(q0[c.code]):c}},read(a,c,d,b,y){try{return a.node.mount.opts.fs.read(a.nfd,c,d,b,y)}catch(P){throw P.code?new o.ErrnoError(q0[P.code]):P}},write(a,c,d,b,y){try{return a.node.mount.opts.fs.write(a.nfd,c,d,b,y)}catch(P){throw P.code?new o.ErrnoError(q0[P.code]):P}},llseek(a,c,d){var b=c;if(d===1)b+=a.position;else if(d===2&&o.isFile(a.node.mode))try{var y=a.node.node_ops.getattr(a.node);b+=y.size}catch(P){throw new o.ErrnoError(q0[P.code])}if(b<0)throw new o.ErrnoError(q0.EINVAL);return b}}},pA=async a=>{var c=await j(a);return new Uint8Array(c)},Ke=(...a)=>o.createDataFile(...a),Dx=a=>a,Cx=0,b0=null,ze=a=>{if(Cx--,n.monitorRunDependencies?.(Cx),Cx==0&&b0){var c=b0;b0=null,c()}},qx=a=>{Cx++,n.monitorRunDependencies?.(Cx)},ge=[],bA=async(a,c)=>{typeof Browser<"u"&&Browser.init();for(var d of ge)if(d.canHandle(c))return d.handle(a,c);return a},RA=async(a,c,d,b,y,P,U,V)=>{var F0=c?ux.resolve(f0.join2(a,c)):a,D0=Dx(`cp ${F0}`);qx(D0);try{var X0=d;typeof d=="string"&&(X0=await pA(d)),X0=await bA(X0,F0),V?.(),P||Ke(a,c,X0,b,y,U)}finally{ze(D0)}},Ft=(a,c,d,b,y,P,U,V,F0,D0)=>{RA(a,c,d,b,y,V,F0,D0).then(P).catch(U)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(a){bx(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(a){this.node=a}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},FSNode:class{constructor(a,c,d,b){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=c,this.mode=d,this.rdev=b,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(a){a?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(a){a?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(a,c={}){if(!a)throw new o.ErrnoError(44);c.follow_mount??(c.follow_mount=!0),f0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(D0=>!!D0),y=o.root,P="/",U=0;U<b.length;U++){var V=U===b.length-1;if(V&&c.parent)break;if(b[U]!=="."){if(b[U]===".."){if(P=f0.dirname(P),o.isRoot(y)){a=P+"/"+b.slice(U+1).join("/"),d--;continue x}else y=y.parent;continue}P=f0.join2(P,b[U]);try{y=o.lookupNode(y,b[U])}catch(D0){if(D0?.errno===44&&V&&c.noent_okay)return{path:P};throw D0}if(o.isMountpoint(y)&&(!V||c.follow_mount)&&(y=y.mounted.root),o.isLink(y.mode)&&(!V||c.follow)){if(!y.node_ops.readlink)throw new o.ErrnoError(52);var F0=y.node_ops.readlink(y);f0.isAbs(F0)||(F0=f0.dirname(P)+"/"+F0),a=F0+"/"+b.slice(U+1).join("/");continue x}}}return{path:P,node:y}}throw new o.ErrnoError(32)},getPath(a){for(var c;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return c?d[d.length-1]!=="/"?`${d}/${c}`:d+c:d}c=c?`${a.name}/${c}`:a.name,a=a.parent}},hashName(a,c){for(var d=0,b=0;b<c.length;b++)d=(d<<5)-d+c.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var c=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[c],o.nameTable[c]=a},hashRemoveNode(a){var c=o.hashName(a.parent.id,a.name);if(o.nameTable[c]===a)o.nameTable[c]=a.name_next;else for(var d=o.nameTable[c];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,c){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,c),y=o.nameTable[b];y;y=y.name_next){var P=y.name;if(y.parent.id===a.id&&P===c)return y}return o.lookup(a,c)},createNode(a,c,d,b){var y=new o.FSNode(a,c,d,b);return o.hashAddNode(y),y},destroyNode(a){o.hashRemoveNode(a)},isRoot(a){return a===a.parent},isMountpoint(a){return!!a.mounted},isFile(a){return(a&61440)===32768},isDir(a){return(a&61440)===16384},isLink(a){return(a&61440)===40960},isChrdev(a){return(a&61440)===8192},isBlkdev(a){return(a&61440)===24576},isFIFO(a){return(a&61440)===4096},isSocket(a){return(a&49152)===49152},flagsToPermissionString(a){var c=["r","w","rw"][a&3];return a&512&&(c+="w"),c},nodePermissions(a,c){return o.ignorePermissions?0:c.includes("r")&&!(a.mode&292)||c.includes("w")&&!(a.mode&146)||c.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var c=o.nodePermissions(a,"x");return c||(a.node_ops.lookup?0:2)},mayCreate(a,c){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,c);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,c,d){var b;try{b=o.lookupNode(a,c)}catch(P){return P.errno}var y=o.nodePermissions(a,"wx");if(y)return y;if(d){if(!o.isDir(b.mode))return 54;if(o.isRoot(b)||o.getPath(b)===o.cwd())return 10}else if(o.isDir(b.mode))return 31;return 0},mayOpen(a,c){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(c);return o.isDir(a.mode)&&(d!=="r"||c&576)?31:o.nodePermissions(a,d)},checkOpExists(a,c){if(!a)throw new o.ErrnoError(c);return a},MAX_OPEN_FDS:4096,nextfd(){for(var a=0;a<=o.MAX_OPEN_FDS;a++)if(!o.streams[a])return a;throw new o.ErrnoError(33)},getStreamChecked(a){var c=o.getStream(a);if(!c)throw new o.ErrnoError(8);return c},getStream:a=>o.streams[a],createStream(a,c=-1){return a=Object.assign(new o.FSStream,a),c==-1&&(c=o.nextfd()),a.fd=c,o.streams[c]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,c=-1){var d=o.createStream(a,c);return d.stream_ops?.dup?.(d),d},doSetAttr(a,c,d){var b=a?.stream_ops.setattr,y=b?a:c;b??(b=c.node_ops.setattr),o.checkOpExists(b,63);try{b(y,d)}catch(P){throw P instanceof RangeError?new o.ErrnoError(22):P}},chrdev_stream_ops:{open(a){var c=o.getDevice(a.node.rdev);a.stream_ops=c.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,c)=>a<<8|c,registerDevice(a,c){o.devices[a]={stream_ops:c}},getDevice:a=>o.devices[a],getMounts(a){for(var c=[],d=[a];d.length;){var b=d.pop();c.push(b),d.push(...b.mounts)}return c},syncfs(a,c){typeof a=="function"&&(c=a,a=!1),o.syncFSRequests++,o.syncFSRequests>1&&O(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var d=o.getMounts(o.root.mount),b=0;function y(V){return o.syncFSRequests--,c(V)}function P(V){if(V)return P.errored?void 0:(P.errored=!0,y(V));++b>=d.length&&y(null)}for(var U of d)U.type.syncfs?U.type.syncfs(U,a,P):P(null)},mount(a,c,d){var b=d==="/",y=!d,P;if(b&&o.root)throw new o.ErrnoError(10);if(!b&&!y){var U=o.lookupPath(d,{follow_mount:!1});if(d=U.path,P=U.node,o.isMountpoint(P))throw new o.ErrnoError(10);if(!o.isDir(P.mode))throw new o.ErrnoError(54)}var V={type:a,opts:c,mountpoint:d,mounts:[]},F0=a.mount(V);return F0.mount=V,V.root=F0,b?o.root=F0:P&&(P.mounted=V,P.mount&&P.mount.mounts.push(V)),F0},unmount(a){var c=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(c.node))throw new o.ErrnoError(28);var d=c.node,b=d.mounted,y=o.getMounts(b);for(var[P,U]of Object.entries(o.nameTable))for(;U;){var V=U.name_next;y.includes(U.mount)&&o.destroyNode(U),U=V}d.mounted=null;var F0=d.mount.mounts.indexOf(b);d.mount.mounts.splice(F0,1)},lookup(a,c){return a.node_ops.lookup(a,c)},mknod(a,c,d){var b=o.lookupPath(a,{parent:!0}),y=b.node,P=f0.basename(a);if(!P)throw new o.ErrnoError(28);if(P==="."||P==="..")throw new o.ErrnoError(20);var U=o.mayCreate(y,P);if(U)throw new o.ErrnoError(U);if(!y.node_ops.mknod)throw new o.ErrnoError(63);return y.node_ops.mknod(y,P,c,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){var c={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return a.node_ops.statfs&&Object.assign(c,a.node_ops.statfs(a.mount.opts.root)),c},create(a,c=438){return c&=4095,c|=32768,o.mknod(a,c,0)},mkdir(a,c=511){return c&=1023,c|=16384,o.mknod(a,c,0)},mkdirTree(a,c){var d=a.split("/"),b="";for(var y of d)if(y){(b||f0.isAbs(a))&&(b+="/"),b+=y;try{o.mkdir(b,c)}catch(P){if(P.errno!=20)throw P}}},mkdev(a,c,d){return typeof d>"u"&&(d=c,c=438),c|=8192,o.mknod(a,c,d)},symlink(a,c){if(!ux.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(c,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var y=f0.basename(c),P=o.mayCreate(b,y);if(P)throw new o.ErrnoError(P);if(!b.node_ops.symlink)throw new o.ErrnoError(63);return b.node_ops.symlink(b,y,a)},rename(a,c){var d=f0.dirname(a),b=f0.dirname(c),y=f0.basename(a),P=f0.basename(c),U,V,F0;if(U=o.lookupPath(a,{parent:!0}),V=U.node,U=o.lookupPath(c,{parent:!0}),F0=U.node,!V||!F0)throw new o.ErrnoError(44);if(V.mount!==F0.mount)throw new o.ErrnoError(75);var D0=o.lookupNode(V,y),X0=ux.relative(a,b);if(X0.charAt(0)!==".")throw new o.ErrnoError(28);if(X0=ux.relative(c,d),X0.charAt(0)!==".")throw new o.ErrnoError(55);var M0;try{M0=o.lookupNode(F0,P)}catch{}if(D0!==M0){var $0=o.isDir(D0.mode),m0=o.mayDelete(V,y,$0);if(m0)throw new o.ErrnoError(m0);if(m0=M0?o.mayDelete(F0,P,$0):o.mayCreate(F0,P),m0)throw new o.ErrnoError(m0);if(!V.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(D0)||M0&&o.isMountpoint(M0))throw new o.ErrnoError(10);if(F0!==V&&(m0=o.nodePermissions(V,"w"),m0))throw new o.ErrnoError(m0);o.hashRemoveNode(D0);try{V.node_ops.rename(D0,F0,P),D0.parent=F0}catch(ix){throw ix}finally{o.hashAddNode(D0)}}},rmdir(a){var c=o.lookupPath(a,{parent:!0}),d=c.node,b=f0.basename(a),y=o.lookupNode(d,b),P=o.mayDelete(d,b,!0);if(P)throw new o.ErrnoError(P);if(!d.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.rmdir(d,b),o.destroyNode(y)},readdir(a){var c=o.lookupPath(a,{follow:!0}),d=c.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var c=o.lookupPath(a,{parent:!0}),d=c.node;if(!d)throw new o.ErrnoError(44);var b=f0.basename(a),y=o.lookupNode(d,b),P=o.mayDelete(d,b,!1);if(P)throw new o.ErrnoError(P);if(!d.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.unlink(d,b),o.destroyNode(y)},readlink(a){var c=o.lookupPath(a),d=c.node;if(!d)throw new o.ErrnoError(44);if(!d.node_ops.readlink)throw new o.ErrnoError(28);return d.node_ops.readlink(d)},stat(a,c){var d=o.lookupPath(a,{follow:!c}),b=d.node,y=o.checkOpExists(b.node_ops.getattr,63);return y(b)},fstat(a){var c=o.getStreamChecked(a),d=c.node,b=c.stream_ops.getattr,y=b?c:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(y)},lstat(a){return o.stat(a,!0)},doChmod(a,c,d,b){o.doSetAttr(a,c,{mode:d&4095|c.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,c,d){var b;if(typeof a=="string"){var y=o.lookupPath(a,{follow:!d});b=y.node}else b=a;o.doChmod(null,b,c,d)},lchmod(a,c){o.chmod(a,c,!0)},fchmod(a,c){var d=o.getStreamChecked(a);o.doChmod(d,d.node,c,!1)},doChown(a,c,d){o.doSetAttr(a,c,{timestamp:Date.now(),dontFollow:d})},chown(a,c,d,b){var y;if(typeof a=="string"){var P=o.lookupPath(a,{follow:!b});y=P.node}else y=a;o.doChown(null,y,b)},lchown(a,c,d){o.chown(a,c,d,!0)},fchown(a,c,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,c,d){if(o.isDir(c.mode))throw new o.ErrnoError(31);if(!o.isFile(c.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(c,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,c,{size:d,timestamp:Date.now()})},truncate(a,c){if(c<0)throw new o.ErrnoError(28);var d;if(typeof a=="string"){var b=o.lookupPath(a,{follow:!0});d=b.node}else d=a;o.doTruncate(null,d,c)},ftruncate(a,c){var d=o.getStreamChecked(a);if(c<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,c)},utime(a,c,d){var b=o.lookupPath(a,{follow:!0}),y=b.node,P=o.checkOpExists(y.node_ops.setattr,63);P(y,{atime:c,mtime:d})},open(a,c,d=438){if(a==="")throw new o.ErrnoError(44);c=LA(c),c&64?d=d&4095|32768:d=0;var b,y;if(typeof a=="object")b=a;else{y=a.endsWith("/");var P=o.lookupPath(a,{follow:!(c&131072),noent_okay:!0});b=P.node,a=P.path}var U=!1;if(c&64)if(b){if(c&128)throw new o.ErrnoError(20)}else{if(y)throw new o.ErrnoError(31);b=o.mknod(a,d|511,0),U=!0}if(!b)throw new o.ErrnoError(44);if(o.isChrdev(b.mode)&&(c&=-513),c&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!U){var V=o.mayOpen(b,c);if(V)throw new o.ErrnoError(V)}c&512&&!U&&o.truncate(b,0),c&=-131713;var F0=o.createStream({node:b,path:o.getPath(b),flags:c,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return F0.stream_ops.open&&F0.stream_ops.open(F0),U&&o.chmod(b,d&511),F0},close(a){if(o.isClosed(a))throw new o.ErrnoError(8);a.getdents&&(a.getdents=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(c){throw c}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,c,d){if(o.isClosed(a))throw new o.ErrnoError(8);if(!a.seekable||!a.stream_ops.llseek)throw new o.ErrnoError(70);if(d!=0&&d!=1&&d!=2)throw new o.ErrnoError(28);return a.position=a.stream_ops.llseek(a,c,d),a.ungotten=[],a.position},read(a,c,d,b,y){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.read)throw new o.ErrnoError(28);var P=typeof y<"u";if(!P)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var U=a.stream_ops.read(a,c,d,b,y);return P||(a.position+=U),U},write(a,c,d,b,y,P){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 U=typeof y<"u";if(!U)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var V=a.stream_ops.write(a,c,d,b,y,P);return U||(a.position+=V),V},mmap(a,c,d,b,y){if((b&2)!==0&&(y&2)===0&&(a.flags&2097155)!==2)throw new o.ErrnoError(2);if((a.flags&2097155)===1)throw new o.ErrnoError(2);if(!a.stream_ops.mmap)throw new o.ErrnoError(43);if(!c)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,c,d,b,y)},msync(a,c,d,b,y){return a.stream_ops.msync?a.stream_ops.msync(a,c,d,b,y):0},ioctl(a,c,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,c,d)},readFile(a,c={}){c.flags=c.flags||0,c.encoding=c.encoding||"binary",c.encoding!=="utf8"&&c.encoding!=="binary"&&C0(`Invalid encoding type "${c.encoding}"`);var d=o.open(a,c.flags),b=o.stat(a),y=b.size,P=new Uint8Array(y);return o.read(d,P,0,y,0),c.encoding==="utf8"&&(P=iA(P)),o.close(d),P},writeFile(a,c,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);c=Qx(c),o.write(b,c,0,c.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var c=o.lookupPath(a,{follow:!0});if(c.node===null)throw new o.ErrnoError(44);if(!o.isDir(c.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(c.node,"x");if(d)throw new o.ErrnoError(d);o.currentPath=c.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(b,y,P,U,V)=>U,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),c=0,d=()=>(c===0&&(He(a),c=a.byteLength),a[--c]);o.createDevice("/dev","random",d),o.createDevice("/dev","urandom",d),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var a=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var c=o.createNode(a,"fd",16895,73);return c.stream_ops={llseek:i0.stream_ops.llseek},c.node_ops={lookup(d,b){var y=+b,P=o.getStreamChecked(y),U={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>P.path},id:y+1};return U.parent=U,U},readdir(){return Array.from(o.streams.entries()).filter(([d,b])=>b).map(([d,b])=>d.toString())}},c}},{},"/proc/self/fd")},createStandardStreams(a,c,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),c?o.createDevice("/dev","stdout",null,c):o.symlink("/dev/tty","/dev/stdout"),d?o.createDevice("/dev","stderr",null,d):o.symlink("/dev/tty1","/dev/stderr");var b=o.open("/dev/stdin",0),y=o.open("/dev/stdout",1),P=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(i0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:i0,PROXYFS:k0}},init(a,c,d){o.initialized=!0,a??(a=n.stdin),c??(c=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,c,d)},quit(){o.initialized=!1,ne(0);for(var a of o.streams)a&&o.close(a)},findObject(a,c){var d=o.analyzePath(a,c);return d.exists?d.object:null},analyzePath(a,c){try{var d=o.lookupPath(a,{follow:!c});a=d.path}catch{}var b={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var d=o.lookupPath(a,{parent:!0});b.parentExists=!0,b.parentPath=d.path,b.parentObject=d.node,b.name=f0.basename(a),d=o.lookupPath(a,{follow:!c}),b.exists=!0,b.path=d.path,b.object=d.node,b.name=d.node.name,b.isRoot=d.path==="/"}catch(y){b.error=y.errno}return b},createPath(a,c,d,b){a=typeof a=="string"?a:o.getPath(a);for(var y=c.split("/").reverse();y.length;){var P=y.pop();if(P){var U=f0.join2(a,P);try{o.mkdir(U)}catch(V){if(V.errno!=20)throw V}a=U}}return U},createFile(a,c,d,b,y){var P=f0.join2(typeof a=="string"?a:o.getPath(a),c),U=aA(b,y);return o.create(P,U)},createDataFile(a,c,d,b,y,P){var U=c;a&&(a=typeof a=="string"?a:o.getPath(a),U=c?f0.join2(a,c):a);var V=aA(b,y),F0=o.create(U,V);if(d){d=Qx(d),o.chmod(F0,V|146);var D0=o.open(F0,577);o.write(D0,d,0,d.length,0,P),o.close(D0),o.chmod(F0,V)}},createDevice(a,c,d,b){var y,P=f0.join2(typeof a=="string"?a:o.getPath(a),c),U=aA(!!d,!!b);(y=o.createDevice).major??(y.major=64);var V=o.makedev(o.createDevice.major++,0);return o.registerDevice(V,{open(F0){F0.seekable=!1},close(F0){b?.buffer?.length&&b(10)},read(F0,D0,X0,M0,$0){for(var m0=0,ix=0;ix<M0;ix++){var yx;try{yx=d()}catch{throw new o.ErrnoError(29)}if(yx===void 0&&m0===0)throw new o.ErrnoError(6);if(yx==null)break;m0++,D0[X0+ix]=yx}return m0&&(F0.node.atime=Date.now()),m0},write(F0,D0,X0,M0,$0){for(var m0=0;m0<M0;m0++)try{b(D0[X0+m0])}catch{throw new o.ErrnoError(29)}return M0&&(F0.node.mtime=F0.node.ctime=Date.now()),m0}}),o.mkdev(P,U,V)},forceLoadFile(a){if(a.isDevice||a.isFolder||a.link||a.contents)return!0;if(globalThis.XMLHttpRequest)C0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{a.contents=S(a.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(a,c,d,b,y){class P{constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get($0){if(!($0>this.length-1||$0<0)){var m0=$0%this.chunkSize,ix=$0/this.chunkSize|0;return this.getter(ix)[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||C0("Couldn't load "+d+". Status: "+$0.status);var m0=Number($0.getResponseHeader("Content-length")),ix,yx=(ix=$0.getResponseHeader("Accept-Ranges"))&&ix==="bytes",Ix=(ix=$0.getResponseHeader("Content-Encoding"))&&ix==="gzip",Ox=1024*1024;yx||(Ox=m0);var Gx=(Jx,hA)=>{Jx>hA&&C0("invalid range ("+Jx+", "+hA+") or no bytes requested!"),hA>m0-1&&C0("only "+m0+" bytes available! programmer error!");var Ex=new XMLHttpRequest;return Ex.open("GET",d,!1),m0!==Ox&&Ex.setRequestHeader("Range","bytes="+Jx+"-"+hA),Ex.responseType="arraybuffer",Ex.overrideMimeType&&Ex.overrideMimeType("text/plain; charset=x-user-defined"),Ex.send(null),Ex.status>=200&&Ex.status<300||Ex.status===304||C0("Couldn't load "+d+". Status: "+Ex.status),Ex.response!==void 0?new Uint8Array(Ex.response||[]):ee(Ex.responseText||"",!0)},oe=this;oe.setDataGetter(Jx=>{var hA=Jx*Ox,Ex=(Jx+1)*Ox-1;return Ex=Math.min(Ex,m0-1),typeof oe.chunks[Jx]>"u"&&(oe.chunks[Jx]=Gx(hA,Ex)),typeof oe.chunks[Jx]>"u"&&C0("doXHR failed!"),oe.chunks[Jx]}),(Ix||!m0)&&(Ox=m0=1,m0=this.getter(0).length,Ox=m0,q("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=m0,this._chunkSize=Ox,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||C0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var U=new P,V={isDevice:!1,contents:U}}else var V={isDevice:!1,url:d};var F0=o.createFile(a,c,V,b,y);V.contents?F0.contents=V.contents:V.url&&(F0.contents=null,F0.url=V.url),Object.defineProperties(F0,{usedBytes:{get:function(){return this.contents.length}}});var D0={};for(let[M0,$0]of Object.entries(F0.stream_ops))D0[M0]=(...m0)=>(o.forceLoadFile(F0),$0(...m0));function X0(M0,$0,m0,ix,yx){var Ix=M0.node.contents;if(yx>=Ix.length)return 0;var Ox=Math.min(Ix.length-yx,ix);if(Ix.slice)for(var Gx=0;Gx<Ox;Gx++)$0[m0+Gx]=Ix[yx+Gx];else for(var Gx=0;Gx<Ox;Gx++)$0[m0+Gx]=Ix.get(yx+Gx);return Ox}return D0.read=(M0,$0,m0,ix,yx)=>(o.forceLoadFile(F0),X0(M0,$0,m0,ix,yx)),D0.mmap=(M0,$0,m0,ix,yx)=>{o.forceLoadFile(F0);var Ix=MA($0);if(!Ix)throw new o.ErrnoError(48);return X0(M0,fx,Ix,$0,m0),{ptr:Ix,allocated:!0}},F0.stream_ops=D0,F0}},w0={currentUmask:18,calculateAt(a,c,d){if(f0.isAbs(c))return c;var b;if(a===-100)b=o.cwd();else{var y=w0.getStreamFromFD(a);b=y.path}if(c.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+c},writeStat(a,c){c0[a>>2]=c.dev,c0[a+4>>2]=c.mode,c0[a+8>>2]=c.nlink,c0[a+12>>2]=c.uid,c0[a+16>>2]=c.gid,c0[a+20>>2]=c.rdev,W0[a+24>>3]=BigInt(c.size),G0[a+32>>2]=4096,G0[a+36>>2]=c.blocks;var d=c.atime.getTime(),b=c.mtime.getTime(),y=c.ctime.getTime();return W0[a+40>>3]=BigInt(Math.floor(d/1e3)),c0[a+48>>2]=d%1e3*1e3*1e3,W0[a+56>>3]=BigInt(Math.floor(b/1e3)),c0[a+64>>2]=b%1e3*1e3*1e3,W0[a+72>>3]=BigInt(Math.floor(y/1e3)),c0[a+80>>2]=y%1e3*1e3*1e3,W0[a+88>>3]=BigInt(c.ino),0},writeStatFs(a,c){c0[a+4>>2]=c.bsize,c0[a+60>>2]=c.bsize,W0[a+8>>3]=BigInt(c.blocks),W0[a+16>>3]=BigInt(c.bfree),W0[a+24>>3]=BigInt(c.bavail),W0[a+32>>3]=BigInt(c.files),W0[a+40>>3]=BigInt(c.ffree),c0[a+48>>2]=c.fsid,c0[a+64>>2]=c.flags,c0[a+56>>2]=c.namelen},doMsync(a,c,d,b,y){if(!o.isFile(c.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var P=nA.slice(a,a+d);o.msync(c,P,y,d,b)},getStreamFromFD(a){var c=o.getStreamChecked(a);return c},varargs:void 0,getStr(a){var c=gx(a);return c}};function Ve(a,c,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(c){case 0:{var y=sA();if(y<0)return-28;for(;o.streams[y];)y++;var P;return P=o.dupStream(b,y),P.fd}case 1:case 2:return 0;case 3:return b.flags;case 4:{var y=sA(),U=289792;return b.flags=b.flags&~U|y&U,0}case 12:{var y=IA(),V=0;return V0[y+V>>1]=2,0}case 13:case 14:return 0}return-28}catch(F0){if(typeof o>"u"||F0.name!=="ErrnoError")throw F0;return-F0.errno}}function OA(a,c,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(c){case 21509:return b.tty?0:-59;case 21505:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcgets){var y=b.tty.ops.ioctl_tcgets(b),P=IA();G0[P>>2]=y.c_iflag||0,G0[P+4>>2]=y.c_oflag||0,G0[P+8>>2]=y.c_cflag||0,G0[P+12>>2]=y.c_lflag||0;for(var U=0;U<32;U++)fx[P+U+17]=y.c_cc[U]||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 P=IA(),V=G0[P>>2],F0=G0[P+4>>2],D0=G0[P+8>>2],X0=G0[P+12>>2],M0=[],U=0;U<32;U++)M0.push(fx[P+U+17]);return b.tty.ops.ioctl_tcsets(b.tty,c,{c_iflag:V,c_oflag:F0,c_cflag:D0,c_lflag:X0,c_cc:M0})}return 0}case 21519:{if(!b.tty)return-59;var P=IA();return G0[P>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var P=IA();return o.ioctl(b,c,P)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var $0=b.tty.ops.ioctl_tiocgwinsz(b.tty),P=IA();V0[P>>1]=$0[0],V0[P+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 mA(a,c,d,b){w0.varargs=b;try{c=w0.getStr(c),c=w0.calculateAt(a,c);var y=b?sA():0;return d&64&&(y&=~w0.currentUmask),o.open(c,d,y).fd}catch(P){if(typeof o>"u"||P.name!=="ErrnoError")throw P;return-P.errno}}var vt=()=>2147483648,ye=(a,c)=>Math.ceil(a/c)*c,pr=a=>{var c=GA.buffer.byteLength,d=(a-c+65535)/65536|0;try{return GA.grow(d),x0(),1}catch{}},br=a=>{var c=nA.length;a>>>=0;var d=vt();if(a>d)return!1;for(var b=1;b<=4;b*=2){var y=c*(1+.2/b);y=Math.min(y,a+100663296);var P=Math.min(d,ye(Math.max(a,y),65536)),U=pr(P);if(U)return!0}return!1};function lt(a){try{var c=w0.getStreamFromFD(a);return o.close(c),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var ct=(a,c,d,b)=>{for(var y=0,P=0;P<d;P++){var U=c0[c>>2],V=c0[c+4>>2];c+=8;var F0=o.read(a,fx,U,V,b);if(F0<0)return-1;if(y+=F0,F0<V)break;typeof b<"u"&&(b+=F0)}return y};function ft(a,c,d,b){try{var y=w0.getStreamFromFD(a),P=ct(y,c,d);return c0[b>>2]=P,0}catch(U){if(typeof o>"u"||U.name!=="ErrnoError")throw U;return U.errno}}var ke=9007199254740992,mr=-9007199254740992,re=a=>a<mr||a>ke?NaN:Number(a);function we(a,c,d,b){c=re(c);try{if(isNaN(c))return 22;var y=w0.getStreamFromFD(a);return o.llseek(y,c,d),W0[b>>3]=BigInt(y.position),y.getdents&&c===0&&d===0&&(y.getdents=null),0}catch(P){if(typeof o>"u"||P.name!=="ErrnoError")throw P;return P.errno}}var Et=(a,c,d,b)=>{for(var y=0,P=0;P<d;P++){var U=c0[c>>2],V=c0[c+4>>2];c+=8;var F0=o.write(a,fx,U,V,b);if(F0<0)return-1;if(y+=F0,F0<V)break;typeof b<"u"&&(b+=F0)}return y};function hr(a,c,d,b){try{var y=w0.getStreamFromFD(a),P=Et(y,c,d);return c0[b>>2]=P,0}catch(U){if(typeof o>"u"||U.name!=="ErrnoError")throw U;return U.errno}}var Bt=0,te=()=>je||Bt>0,We=a=>{M=a,te()||(n.onExit?.(a),t0=!0),m(a,new tA(a))},jr=(a,c)=>{M=a,te()||l0(),We(a)},gr=a=>{if(a instanceof tA||a=="unwind")return M;m(1,a)},Ct=(a,c,d)=>Je(a,nA,c,d),yr=a=>ie(a),dt=a=>{var c=Ae(a)+1,d=yr(c);return Ct(a,d,c),d},ut=(...a)=>o.createPath(...a),_e=(...a)=>o.unlink(...a),Dt=(...a)=>o.createLazyFile(...a),pt=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=Ft,o.preloadFile=RA,o.staticInit(),n.noExitRuntime&&(je=n.noExitRuntime),n.preloadPlugins&&(ge=n.preloadPlugins),n.print&&(q=n.print),n.printErr&&(O=n.printErr),n.wasmBinary&&(R=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=px,n.addRunDependency=qx,n.removeRunDependency=ze,n.FS_preloadFile=RA,n.FS_unlink=_e,n.FS_createPath=ut,n.FS_createDevice=pt,n.FS=o,n.FS_createDataFile=Ke,n.FS_createLazyFile=Dt,n.PROXYFS=k0;var kr,wr,ne,_r,ie,Xe,Nx,bt,GA;function se(a){kr=n._main=a.__main_argc_argv,wr=a.__funcs_on_exit,ne=a.fflush,_r=a._emscripten_stack_restore,ie=a._emscripten_stack_alloc,Xe=a.emscripten_stack_get_current,Nx=GA=a.memory,bt=a.__indirect_function_table}var Ye={__assert_fail:DA,__syscall_fcntl64:Ve,__syscall_ioctl:OA,__syscall_openat:mA,emscripten_resize_heap:br,fd_close:lt,fd_read:ft,fd_seek:we,fd_write:hr};function px(a=[]){var c=kr;a.unshift(D);var d=a.length,b=yr((d+1)*4),y=b;for(var P of a)c0[y>>2]=dt(P),y+=4;c0[y>>2]=0;try{var U=c(d,b);return jr(U,!0),U}catch(V){return gr(V)}}function Se(a=u){if(Cx>0){b0=Se;return}if(o0(),Cx>0){b0=Se;return}function c(){if(n.calledRun=!0,!t0){G(),H?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||px(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),c()},1)):c()}var ae;return ae=await tx(),Se(),a0?i=n:i=new Promise((a,c)=>{H=a,J=c}),i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),Qo={};GE(Qo,{createPawnCC:()=>VE,createPawnDbg:()=>WE});Zo.exports=UE(Qo);var KE=Yo(HE(),1),zE=Yo(JE(),1),VE=KE.default,WE=zE.default});var Me=xo((Fh,kv)=>{"use strict";var nB=Object.create,qt=Object.defineProperty,iB=Object.getOwnPropertyDescriptor,NF=Object.getOwnPropertyNames,sB=Object.getPrototypeOf,aB=Object.prototype.hasOwnProperty,oB=(x,A,e)=>A in x?qt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,FB=(x,A)=>function(){try{return A||(0,x[NF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},vB=(x,A)=>{for(var e in A)qt(x,e,{get:A[e],enumerable:!0})},IF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of NF(A))!aB.call(x,t)&&t!==e&&qt(x,t,{get:()=>A[t],enumerable:!(r=iB(A,t))||r.enumerable});return x},lB=(x,A,e)=>(e=x!=null?nB(sB(x)):{},IF(A||!x||!x.__esModule?qt(e,"default",{value:x,enumerable:!0}):e,x)),cB=x=>IF(qt({},"__esModule",{value:!0}),x),A0=(x,A,e)=>oB(x,typeof A!="symbol"?A+"":A,e),fB=FB({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var i;(function(){function f(r0){r0=r0.split("-")[0];for(var E0=r0.split(".").slice(0,3);E0.length<3;)E0.push("00");return E0=E0.map((p0,Z0,Y0)=>p0.padStart(2,"0")),E0.join("")}var C=r0=>[r0/1e4|0,(r0/100|0)%100,r0%100].join("."),g=2147483647,$=typeof process<"u"&&process.versions?.node?f(process.versions.node):g;if($<180300)throw new Error(`This emscripten-generated code requires node v${C(180300)} (detected v${C($)})`);var N=typeof navigator<"u"&&navigator.userAgent;if(N){var Q=N.includes("Safari/")&&!N.includes("Chrome/")&&N.match(/Version\/(\d+\.?\d*\.?\d*)/)?f(N.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]):g;if(Q<15e4)throw new Error(`This emscripten-generated code requires Safari v${C(15e4)} (detected v${Q})`);var Y=N.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(N.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):g;if(Y<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${Y})`);var Z=N.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(N.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):g;if(Z<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${Z})`)}})();var n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=!F&&!E&&!v,D=[],m="./this.program",w=(f,C)=>{throw C};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var j="",S,T;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 q=require("fs");j=__dirname+"/",T=C=>{C=L(C)?new URL(C):C;var g=q.readFileSync(C);return k(Buffer.isBuffer(g)),g},S=async(C,g=!0)=>{C=L(C)?new URL(C):C;var $=q.readFileSync(C,g?void 0:"utf8");return k(g?Buffer.isBuffer($):typeof $=="string"),$},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),D=process.argv.slice(2),w=(C,g)=>{throw process.exitCode=C,g}}else if(!u)if(F||v){try{j=new URL(".",r).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");v&&(T=f=>{var C=new XMLHttpRequest;return C.open("GET",f,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),S=async f=>{if(L(f))return new Promise((g,$)=>{var N=new XMLHttpRequest;N.open("GET",f,!0),N.responseType="arraybuffer",N.onload=()=>{if(N.status==200||N.status==0&&N.response){g(N.response);return}$(N.status)},N.onerror=$,N.send(null)});var C=await fetch(f,{credentials:"same-origin"});if(C.ok)return C.arrayBuffer();throw new Error(C.status+" : "+C.url)}}else throw new Error("environment detection error");var O=console.log.bind(console),R=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||R("no native wasm support detected");var M=!1;function k(f,C){f||cx("Assertion failed"+(C?": "+C:""))}var L=f=>f.startsWith("file://");function X(){var f=ki();k((f&3)==0),f==0&&(f+=4),y0[f>>2]=34821223,y0[f+4>>2]=2310721022,y0[0]=1668509029}function W(){if(!M){var f=ki();f==0&&(f+=4);var C=y0[f>>2],g=y0[f+4>>2];(C!=34821223||g!=2310721022)&&cx(`Stack overflow! Stack cookie has been overwritten at ${ux(f)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ux(g)} ${ux(C)}`),y0[0]!=1668509029&&cx("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class J extends H{}var a0=!0;(()=>{var f=new Int16Array(1),C=new Int8Array(f.buffer);f[0]=25459,(C[0]!==115||C[1]!==99)&&cx("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function n0(f){Object.getOwnPropertyDescriptor(n,f)||Object.defineProperty(n,f,{configurable:!0,set(){cx(`Attempt to set \`Module.${f}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function x0(f){return()=>k(!1,`call to '${f}' via reference taken before Wasm module initialization`)}function o0(f){Object.getOwnPropertyDescriptor(n,f)&&cx(`\`Module.${f}\` was supplied but \`${f}\` not included in INCOMING_MODULE_JS_API`)}function G(f){return f==="FS_createPath"||f==="FS_createDataFile"||f==="FS_createPreloadedFile"||f==="FS_preloadFile"||f==="FS_unlink"||f==="addRunDependency"||f==="FS_createLazyFile"||f==="FS_createDevice"||f==="removeRunDependency"}function s0(f){l0(f)}function l0(f){Object.getOwnPropertyDescriptor(n,f)||Object.defineProperty(n,f,{configurable:!0,get(){var C=`'${f}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;G(f)&&(C+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),cx(C)}})}function B0(f){for(var C=0,g=f.length,$=new Uint8Array(g),N;C<g;++C)N=f.charCodeAt(C),$[C]=~N>>8&N;return $}var C0,_0,I0=!1;function ox(){var f=nn.buffer;Yx=new Int8Array(f),qA=new Int16Array(f),n.HEAPU8=gx=new Uint8Array(f),Fx=new Uint16Array(f),NA=new Int32Array(f),y0=new Uint32Array(f),Dr=new Float32Array(f),je=new Float64Array(f),ur=new BigInt64Array(f),iA=new BigUint64Array(f)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function Xx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)at(n.preRun.shift());n0("preRun"),DA(f0)}function $A(){k(!I0),I0=!0,W(),Sr.__wasm_call_ctors()}function TA(){if(W(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)IA(n.postRun.shift());n0("postRun"),DA(sA)}function cx(f){n.onAbort?.(f),f=`Aborted(${f})`,R(f),M=!0;var C=new WebAssembly.RuntimeError(f);throw _0?.(C),C}function tx(){cx("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var tA={init:tx,createDataFile:tx,createPreloadedFile:tx,createLazyFile:tx,open:tx,mkdev:tx,registerDevice:tx,analyzePath:tx,ErrnoError:tx};function V0(f,C){return(...g)=>{k(I0,`native function \`${f}\` called before runtime initialization`);var $=Sr[f];return k($,`exported native function \`${f}\` not found`),k(g.length<=C,`native function \`${f}\` called with ${g.length} args but expects ${C}`),$(...g)}}var G0;function W0(){return B0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
|
|
1526
|
+
\0A\x80\v\vp\0\0D\0\0\0`)}function ox(a){return a}async function Qx(a){return a}async function $A(a,c){try{var d=await Qx(a),b=await WebAssembly.instantiate(d,c);return b}catch(y){R(`failed to asynchronously prepare wasm: ${y}`),C0(y)}}async function qA(a,c,d){return $A(c,d)}function cx(){var a={env:Qe,wasi_snapshot_preview1:Qe};return a}async function tx(){function a(P,U){return oe=P.exports,ae(oe),Z(),oe}function c(P){return a(P.instance)}var d=cx();if(n.instantiateWasm)return new Promise((P,U)=>{n.instantiateWasm(d,(V,F0)=>{P(a(V,F0))})});_0??(_0=T0());var b=await qA(O,_0,d),y=c(b);return y}class nA{constructor(c){bx(this,"name","ExitStatus"),this.message=`Program terminated with exit(${c})`,this.status=c}}var V0,G0,W0,fx,tt,nt,it,c0,st,iA,NA=a=>{for(;a.length>0;)a.shift()(n)},IA=[],Dr=a=>IA.push(a),Zx=[],pr=a=>Zx.push(a),ge=!1,Fx=globalThis.TextDecoder&&new TextDecoder,y0=(a,c,d,b)=>{var y=c+d;if(b)return y;for(;a[c]&&!(c>=y);)++c;return c},sA=(a,c=0,d,b)=>{var y=y0(a,c,d,b);if(y-c>16&&a.buffer&&Fx)return Fx.decode(a.subarray(c,y));for(var P="";c<y;){var U=a[c++];if(!(U&128)){P+=String.fromCharCode(U);continue}var V=a[c++]&63;if((U&224)==192){P+=String.fromCharCode((U&31)<<6|V);continue}var F0=a[c++]&63;if((U&240)==224?U=(U&15)<<12|V<<6|F0:U=(U&7)<<18|V<<12|F0<<6|a[c++]&63,U<65536)P+=String.fromCharCode(U);else{var D0=U-65536;P+=String.fromCharCode(55296|D0>>10,56320|D0&1023)}}return P},gx=(a,c,d)=>a?sA(iA,a,c,d):"",pA=(a,c,d,b)=>C0(`Assertion failed: ${gx(a)}, at: `+[c?gx(c):"unknown filename",d,b?gx(b):"unknown function"]),aA=()=>{var a=G0[+w0.varargs>>2];return w0.varargs+=4,a},MA=aA,f0={isAbs:a=>a.charAt(0)==="/",splitPath:a=>{var c=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return c.exec(a).slice(1)},normalizeArray:(a,c)=>{for(var d=0,b=a.length-1;b>=0;b--){var y=a[b];y==="."?a.splice(b,1):y===".."?(a.splice(b,1),d++):d&&(a.splice(b,1),d--)}if(c)for(;d;d--)a.unshift("..");return a},normalize:a=>{var c=f0.isAbs(a),d=a.slice(-1)==="/";return a=f0.normalizeArray(a.split("/").filter(b=>!!b),!c).join("/"),!a&&!c&&(a="."),a&&d&&(a+="/"),(c?"/":"")+a},dirname:a=>{var c=f0.splitPath(a),d=c[0],b=c[1];return!d&&!b?".":(b&&(b=b.slice(0,-1)),d+b)},basename:a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],join:(...a)=>f0.normalize(a.join("/")),join2:(a,c)=>f0.normalize(a+"/"+c)},at=()=>{if(E){var a=require("crypto");return c=>a.randomFillSync(c)}return c=>(crypto.getRandomValues(c),0)},Je=a=>(Je=at())(a),ux={resolve:(...a)=>{for(var c="",d=!1,b=a.length-1;b>=-1&&!d;b--){var y=b>=0?a[b]:o.cwd();if(typeof y!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!y)return"";c=y+"/"+c,d=f0.isAbs(y)}return c=f0.normalizeArray(c.split("/").filter(P=>!!P),!d).join("/"),(d?"/":"")+c||"."},relative:(a,c)=>{a=ux.resolve(a).slice(1),c=ux.resolve(c).slice(1);function d(D0){for(var X0=0;X0<D0.length&&D0[X0]==="";X0++);for(var M0=D0.length-1;M0>=0&&D0[M0]==="";M0--);return X0>M0?[]:D0.slice(X0,M0-X0+1)}for(var b=d(a.split("/")),y=d(c.split("/")),P=Math.min(b.length,y.length),U=P,V=0;V<P;V++)if(b[V]!==y[V]){U=V;break}for(var F0=[],V=U;V<b.length;V++)F0.push("..");return F0=F0.concat(y.slice(U)),F0.join("/")}},Jx=[],ee=a=>{for(var c=0,d=0;d<a.length;++d){var b=a.charCodeAt(d);b<=127?c++:b<=2047?c+=2:b>=55296&&b<=57343?(c+=4,++d):c+=3}return c},Ke=(a,c,d,b)=>{if(!(b>0))return 0;for(var y=d,P=d+b-1,U=0;U<a.length;++U){var V=a.codePointAt(U);if(V<=127){if(d>=P)break;c[d++]=V}else if(V<=2047){if(d+1>=P)break;c[d++]=192|V>>6,c[d++]=128|V&63}else if(V<=65535){if(d+2>=P)break;c[d++]=224|V>>12,c[d++]=128|V>>6&63,c[d++]=128|V&63}else{if(d+3>=P)break;c[d++]=240|V>>18,c[d++]=128|V>>12&63,c[d++]=128|V>>6&63,c[d++]=128|V&63,U++}}return c[d]=0,d-y},re=(a,c,d)=>{var b=d>0?d:ee(a)+1,y=new Array(b),P=Ke(a,y,0,y.length);return c&&(y.length=P),y},ot=()=>{if(!Jx.length){var a=null;if(E){var c=256,d=Buffer.alloc(c),b=0,y=process.stdin.fd;try{b=$.readSync(y,d,0,c)}catch(P){if(P.toString().includes("EOF"))b=0;else throw P}b>0&&(a=d.slice(0,b).toString("utf-8"))}else globalThis.window?.prompt&&(a=window.prompt("Input: "),a!==null&&(a+=`
|
|
1527
|
+
`));if(!a)return null;Jx=re(a,!0)}return Jx.shift()},nx={ttys:[],init(){},shutdown(){},register(a,c){nx.ttys[a]={input:[],output:[],ops:c},o.registerDevice(a,nx.stream_ops)},stream_ops:{open(a){var c=nx.ttys[a.node.rdev];if(!c)throw new o.ErrnoError(43);a.tty=c,a.seekable=!1},close(a){a.tty.ops.fsync(a.tty)},fsync(a){a.tty.ops.fsync(a.tty)},read(a,c,d,b,y){if(!a.tty||!a.tty.ops.get_char)throw new o.ErrnoError(60);for(var P=0,U=0;U<b;U++){var V;try{V=a.tty.ops.get_char(a.tty)}catch{throw new o.ErrnoError(29)}if(V===void 0&&P===0)throw new o.ErrnoError(6);if(V==null)break;P++,c[d+U]=V}return P&&(a.node.atime=Date.now()),P},write(a,c,d,b,y){if(!a.tty||!a.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var P=0;P<b;P++)a.tty.ops.put_char(a.tty,c[d+P])}catch{throw new o.ErrnoError(29)}return b&&(a.node.mtime=a.node.ctime=Date.now()),P}},default_tty_ops:{get_char(a){return ot()},put_char(a,c){c===null||c===10?(q(sA(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){a.output?.length>0&&(q(sA(a.output)),a.output=[])},ioctl_tcgets(a){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(a,c,d){return 0},ioctl_tiocgwinsz(a){return[24,80]}},default_tty1_ops:{put_char(a,c){c===null||c===10?(R(sA(a.output)),a.output=[]):c!=0&&a.output.push(c)},fsync(a){a.output?.length>0&&(R(sA(a.output)),a.output=[])}}},LA=a=>{C0()},i0={ops_table:null,mount(a){return i0.createNode(null,"/",16895,0)},createNode(a,c,d,b){if(o.isBlkdev(d)||o.isFIFO(d))throw new o.ErrnoError(63);i0.ops_table||(i0.ops_table={dir:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,lookup:i0.node_ops.lookup,mknod:i0.node_ops.mknod,rename:i0.node_ops.rename,unlink:i0.node_ops.unlink,rmdir:i0.node_ops.rmdir,readdir:i0.node_ops.readdir,symlink:i0.node_ops.symlink},stream:{llseek:i0.stream_ops.llseek}},file:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:{llseek:i0.stream_ops.llseek,read:i0.stream_ops.read,write:i0.stream_ops.write,mmap:i0.stream_ops.mmap,msync:i0.stream_ops.msync}},link:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr,readlink:i0.node_ops.readlink},stream:{}},chrdev:{node:{getattr:i0.node_ops.getattr,setattr:i0.node_ops.setattr},stream:o.chrdev_stream_ops}});var y=o.createNode(a,c,d,b);return o.isDir(y.mode)?(y.node_ops=i0.ops_table.dir.node,y.stream_ops=i0.ops_table.dir.stream,y.contents={}):o.isFile(y.mode)?(y.node_ops=i0.ops_table.file.node,y.stream_ops=i0.ops_table.file.stream,y.usedBytes=0,y.contents=i0.emptyFileContents??(i0.emptyFileContents=new Uint8Array(0))):o.isLink(y.mode)?(y.node_ops=i0.ops_table.link.node,y.stream_ops=i0.ops_table.link.stream):o.isChrdev(y.mode)&&(y.node_ops=i0.ops_table.chrdev.node,y.stream_ops=i0.ops_table.chrdev.stream),y.atime=y.mtime=y.ctime=Date.now(),a&&(a.contents[c]=y,a.atime=a.mtime=a.ctime=y.atime),y},getFileDataAsTypedArray(a){return a.contents.subarray(0,a.usedBytes)},expandFileStorage(a,c){var d=a.contents.length;if(!(d>=c)){var b=1024*1024;c=Math.max(c,d*(d<b?2:1.125)>>>0),d&&(c=Math.max(c,256));var y=i0.getFileDataAsTypedArray(a);a.contents=new Uint8Array(c),a.contents.set(y)}},resizeFileStorage(a,c){if(a.usedBytes!=c){var d=a.contents;a.contents=new Uint8Array(c),a.contents.set(d.subarray(0,Math.min(c,a.usedBytes))),a.usedBytes=c}},node_ops:{getattr(a){var c={};return c.dev=o.isChrdev(a.mode)?a.id:1,c.ino=a.id,c.mode=a.mode,c.nlink=1,c.uid=0,c.gid=0,c.rdev=a.rdev,o.isDir(a.mode)?c.size=4096:o.isFile(a.mode)?c.size=a.usedBytes:o.isLink(a.mode)?c.size=a.link.length:c.size=0,c.atime=new Date(a.atime),c.mtime=new Date(a.mtime),c.ctime=new Date(a.ctime),c.blksize=4096,c.blocks=Math.ceil(c.size/c.blksize),c},setattr(a,c){for(let d of["mode","atime","mtime","ctime"])c[d]!=null&&(a[d]=c[d]);c.size!==void 0&&i0.resizeFileStorage(a,c.size)},lookup(a,c){throw i0.doesNotExistError||(i0.doesNotExistError=new o.ErrnoError(44),i0.doesNotExistError.stack="<generic error, no stack>"),i0.doesNotExistError},mknod(a,c,d,b){return i0.createNode(a,c,d,b)},rename(a,c,d){var b;try{b=o.lookupNode(c,d)}catch{}if(b){if(o.isDir(a.mode))for(var y in b.contents)throw new o.ErrnoError(55);o.hashRemoveNode(b)}delete a.parent.contents[a.name],c.contents[d]=a,a.name=d,c.ctime=c.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,c){delete a.contents[c],a.ctime=a.mtime=Date.now()},rmdir(a,c){var d=o.lookupNode(a,c);for(var b in d.contents)throw new o.ErrnoError(55);delete a.contents[c],a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.contents)]},symlink(a,c,d){var b=i0.createNode(a,c,41471,0);return b.link=d,b},readlink(a){if(!o.isLink(a.mode))throw new o.ErrnoError(28);return a.link}},stream_ops:{read(a,c,d,b,y){var P=a.node.contents;if(y>=a.node.usedBytes)return 0;var U=Math.min(a.node.usedBytes-y,b);return c.set(P.subarray(y,y+U),d),U},write(a,c,d,b,y,P){if(c.buffer===fx.buffer&&(P=!1),!b)return 0;var U=a.node;return U.mtime=U.ctime=Date.now(),P?(U.contents=c.subarray(d,d+b),U.usedBytes=b):U.usedBytes===0&&y===0?(U.contents=c.slice(d,d+b),U.usedBytes=b):(i0.expandFileStorage(U,y+b),U.contents.set(c.subarray(d,d+b),y),U.usedBytes=Math.max(U.usedBytes,y+b)),b},llseek(a,c,d){var b=c;if(d===1?b+=a.position:d===2&&o.isFile(a.node.mode)&&(b+=a.node.usedBytes),b<0)throw new o.ErrnoError(28);return b},mmap(a,c,d,b,y){if(!o.isFile(a.node.mode))throw new o.ErrnoError(43);var P,U,V=a.node.contents;if(!(y&2)&&V.buffer===fx.buffer)U=!1,P=V.byteOffset;else{if(U=!0,P=LA(c),!P)throw new o.ErrnoError(48);V&&((d>0||d+c<V.length)&&(V.subarray?V=V.subarray(d,d+c):V=Array.prototype.slice.call(V,d,d+c)),fx.set(V,P))}return{ptr:P,allocated:U}},msync(a,c,d,b,y){return i0.stream_ops.write(a,c,0,b,d,!1),0}}},RA=a=>{if(typeof a!="string")return a;var c={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},d=c[a];if(typeof d>"u")throw new Error(`Unknown file open mode: ${a}`);return d},xA=a=>(typeof a=="string"&&(a=re(a,!0)),a.subarray||(a=new Uint8Array(a)),a),oA=(a,c)=>{var d=0;return a&&(d|=365),c&&(d|=146),d},N0={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},k0={mount(a){return k0.createNode(null,"/",a.opts.fs.lstat(a.opts.root).mode,0)},createNode(a,c,d,b){if(!o.isDir(d)&&!o.isFile(d)&&!o.isLink(d))throw new o.ErrnoError(N0.EINVAL);var y=o.createNode(a,c,d);return y.node_ops=k0.node_ops,y.stream_ops=k0.stream_ops,y},realPath(a){for(var c=[];a.parent!==a;)c.push(a.name),a=a.parent;return c.push(a.mount.opts.root),c.reverse(),f0.join(...c)},node_ops:{getattr(a){var c=k0.realPath(a),d;try{d=a.mount.opts.fs.lstat(c)}catch(b){throw b.code?new o.ErrnoError(N0[b.code]):b}return{dev:d.dev,ino:d.ino,mode:d.mode,nlink:d.nlink,uid:d.uid,gid:d.gid,rdev:d.rdev,size:d.size,atime:d.atime,mtime:d.mtime,ctime:d.ctime,blksize:d.blksize,blocks:d.blocks}},setattr(a,c){var d=k0.realPath(a);try{if(c.mode!==void 0&&(a.mount.opts.fs.chmod(d,c.mode),a.mode=c.mode),c.atime||c.mtime){var b=new Date(c.atime||c.mtime),y=new Date(c.mtime||c.atime);a.mount.opts.fs.utime(d,b,y)}c.size!==void 0&&a.mount.opts.fs.truncate(d,c.size)}catch(P){throw P.code?new o.ErrnoError(N0[P.code]):P}},lookup(a,c){try{var d=f0.join2(k0.realPath(a),c),b=a.mount.opts.fs.lstat(d).mode,y=k0.createNode(a,c,b);return y}catch(P){throw P.code?new o.ErrnoError(N0[P.code]):P}},mknod(a,c,d,b){var y=k0.createNode(a,c,d,b),P=k0.realPath(y);try{o.isDir(y.mode)?y.mount.opts.fs.mkdir(P,y.mode):y.mount.opts.fs.writeFile(P,"",{mode:y.mode})}catch(U){throw U.code?new o.ErrnoError(N0[U.code]):U}return y},rename(a,c,d){var b=k0.realPath(a),y=f0.join2(k0.realPath(c),d);try{a.mount.opts.fs.rename(b,y),a.name=d}catch(P){throw P.code?new o.ErrnoError(N0[P.code]):P}},unlink(a,c){var d=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.unlink(d)}catch(b){throw b.code?new o.ErrnoError(N0[b.code]):b}},rmdir(a,c){var d=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.rmdir(d)}catch(b){throw b.code?new o.ErrnoError(N0[b.code]):b}},readdir(a){var c=k0.realPath(a);try{return a.mount.opts.fs.readdir(c)}catch(d){throw d.code?new o.ErrnoError(N0[d.code]):d}},symlink(a,c,d){var b=f0.join2(k0.realPath(a),c);try{a.mount.opts.fs.symlink(d,b)}catch(y){throw y.code?new o.ErrnoError(N0[y.code]):y}},readlink(a){var c=k0.realPath(a);try{return a.mount.opts.fs.readlink(c)}catch(d){throw d.code?new o.ErrnoError(N0[d.code]):d}}},stream_ops:{open(a){var c=k0.realPath(a.node);try{a.nfd=a.node.mount.opts.fs.open(c,a.flags)}catch(d){throw d.code?new o.ErrnoError(N0[d.code]):d}},close(a){try{a.node.mount.opts.fs.close(a.nfd)}catch(c){throw c.code?new o.ErrnoError(N0[c.code]):c}},read(a,c,d,b,y){try{return a.node.mount.opts.fs.read(a.nfd,c,d,b,y)}catch(P){throw P.code?new o.ErrnoError(N0[P.code]):P}},write(a,c,d,b,y){try{return a.node.mount.opts.fs.write(a.nfd,c,d,b,y)}catch(P){throw P.code?new o.ErrnoError(N0[P.code]):P}},llseek(a,c,d){var b=c;if(d===1)b+=a.position;else if(d===2&&o.isFile(a.node.mode))try{var y=a.node.node_ops.getattr(a.node);b+=y.size}catch(P){throw new o.ErrnoError(N0[P.code])}if(b<0)throw new o.ErrnoError(N0.EINVAL);return b}}},bA=async a=>{var c=await j(a);return new Uint8Array(c)},ze=(...a)=>o.createDataFile(...a),Dx=a=>a,Cx=0,b0=null,Ve=a=>{if(Cx--,n.monitorRunDependencies?.(Cx),Cx==0&&b0){var c=b0;b0=null,c()}},Nx=a=>{Cx++,n.monitorRunDependencies?.(Cx)},ye=[],mA=async(a,c)=>{typeof Browser<"u"&&Browser.init();for(var d of ye)if(d.canHandle(c))return d.handle(a,c);return a},OA=async(a,c,d,b,y,P,U,V)=>{var F0=c?ux.resolve(f0.join2(a,c)):a,D0=Dx(`cp ${F0}`);Nx(D0);try{var X0=d;typeof d=="string"&&(X0=await bA(d)),X0=await mA(X0,F0),V?.(),P||ze(a,c,X0,b,y,U)}finally{Ve(D0)}},Ft=(a,c,d,b,y,P,U,V,F0,D0)=>{OA(a,c,d,b,y,V,F0,D0).then(P).catch(U)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,ErrnoError:class{constructor(a){bx(this,"name","ErrnoError"),this.errno=a}},FSStream:class{constructor(){bx(this,"shared",{})}get object(){return this.node}set object(a){this.node=a}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(a){this.shared.flags=a}get position(){return this.shared.position}set position(a){this.shared.position=a}},FSNode:class{constructor(a,c,d,b){bx(this,"node_ops",{}),bx(this,"stream_ops",{}),bx(this,"readMode",365),bx(this,"writeMode",146),bx(this,"mounted",null),a||(a=this),this.parent=a,this.mount=a.mount,this.id=o.nextInode++,this.name=c,this.mode=d,this.rdev=b,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(a){a?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(a){a?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(a,c={}){if(!a)throw new o.ErrnoError(44);c.follow_mount??(c.follow_mount=!0),f0.isAbs(a)||(a=o.cwd()+"/"+a);x:for(var d=0;d<40;d++){for(var b=a.split("/").filter(D0=>!!D0),y=o.root,P="/",U=0;U<b.length;U++){var V=U===b.length-1;if(V&&c.parent)break;if(b[U]!=="."){if(b[U]===".."){if(P=f0.dirname(P),o.isRoot(y)){a=P+"/"+b.slice(U+1).join("/"),d--;continue x}else y=y.parent;continue}P=f0.join2(P,b[U]);try{y=o.lookupNode(y,b[U])}catch(D0){if(D0?.errno===44&&V&&c.noent_okay)return{path:P};throw D0}if(o.isMountpoint(y)&&(!V||c.follow_mount)&&(y=y.mounted.root),o.isLink(y.mode)&&(!V||c.follow)){if(!y.node_ops.readlink)throw new o.ErrnoError(52);var F0=y.node_ops.readlink(y);f0.isAbs(F0)||(F0=f0.dirname(P)+"/"+F0),a=F0+"/"+b.slice(U+1).join("/");continue x}}}return{path:P,node:y}}throw new o.ErrnoError(32)},getPath(a){for(var c;;){if(o.isRoot(a)){var d=a.mount.mountpoint;return c?d[d.length-1]!=="/"?`${d}/${c}`:d+c:d}c=c?`${a.name}/${c}`:a.name,a=a.parent}},hashName(a,c){for(var d=0,b=0;b<c.length;b++)d=(d<<5)-d+c.charCodeAt(b)|0;return(a+d>>>0)%o.nameTable.length},hashAddNode(a){var c=o.hashName(a.parent.id,a.name);a.name_next=o.nameTable[c],o.nameTable[c]=a},hashRemoveNode(a){var c=o.hashName(a.parent.id,a.name);if(o.nameTable[c]===a)o.nameTable[c]=a.name_next;else for(var d=o.nameTable[c];d;){if(d.name_next===a){d.name_next=a.name_next;break}d=d.name_next}},lookupNode(a,c){var d=o.mayLookup(a);if(d)throw new o.ErrnoError(d);for(var b=o.hashName(a.id,c),y=o.nameTable[b];y;y=y.name_next){var P=y.name;if(y.parent.id===a.id&&P===c)return y}return o.lookup(a,c)},createNode(a,c,d,b){var y=new o.FSNode(a,c,d,b);return o.hashAddNode(y),y},destroyNode(a){o.hashRemoveNode(a)},isRoot(a){return a===a.parent},isMountpoint(a){return!!a.mounted},isFile(a){return(a&61440)===32768},isDir(a){return(a&61440)===16384},isLink(a){return(a&61440)===40960},isChrdev(a){return(a&61440)===8192},isBlkdev(a){return(a&61440)===24576},isFIFO(a){return(a&61440)===4096},isSocket(a){return(a&49152)===49152},flagsToPermissionString(a){var c=["r","w","rw"][a&3];return a&512&&(c+="w"),c},nodePermissions(a,c){return o.ignorePermissions?0:c.includes("r")&&!(a.mode&292)||c.includes("w")&&!(a.mode&146)||c.includes("x")&&!(a.mode&73)?2:0},mayLookup(a){if(!o.isDir(a.mode))return 54;var c=o.nodePermissions(a,"x");return c||(a.node_ops.lookup?0:2)},mayCreate(a,c){if(!o.isDir(a.mode))return 54;try{var d=o.lookupNode(a,c);return 20}catch{}return o.nodePermissions(a,"wx")},mayDelete(a,c,d){var b;try{b=o.lookupNode(a,c)}catch(P){return P.errno}var y=o.nodePermissions(a,"wx");if(y)return y;if(d){if(!o.isDir(b.mode))return 54;if(o.isRoot(b)||o.getPath(b)===o.cwd())return 10}else if(o.isDir(b.mode))return 31;return 0},mayOpen(a,c){if(!a)return 44;if(o.isLink(a.mode))return 32;var d=o.flagsToPermissionString(c);return o.isDir(a.mode)&&(d!=="r"||c&576)?31:o.nodePermissions(a,d)},checkOpExists(a,c){if(!a)throw new o.ErrnoError(c);return a},MAX_OPEN_FDS:4096,nextfd(){for(var a=0;a<=o.MAX_OPEN_FDS;a++)if(!o.streams[a])return a;throw new o.ErrnoError(33)},getStreamChecked(a){var c=o.getStream(a);if(!c)throw new o.ErrnoError(8);return c},getStream:a=>o.streams[a],createStream(a,c=-1){return a=Object.assign(new o.FSStream,a),c==-1&&(c=o.nextfd()),a.fd=c,o.streams[c]=a,a},closeStream(a){o.streams[a]=null},dupStream(a,c=-1){var d=o.createStream(a,c);return d.stream_ops?.dup?.(d),d},doSetAttr(a,c,d){var b=a?.stream_ops.setattr,y=b?a:c;b??(b=c.node_ops.setattr),o.checkOpExists(b,63);try{b(y,d)}catch(P){throw P instanceof RangeError?new o.ErrnoError(22):P}},chrdev_stream_ops:{open(a){var c=o.getDevice(a.node.rdev);a.stream_ops=c.stream_ops,a.stream_ops.open?.(a)},llseek(){throw new o.ErrnoError(70)}},major:a=>a>>8,minor:a=>a&255,makedev:(a,c)=>a<<8|c,registerDevice(a,c){o.devices[a]={stream_ops:c}},getDevice:a=>o.devices[a],getMounts(a){for(var c=[],d=[a];d.length;){var b=d.pop();c.push(b),d.push(...b.mounts)}return c},syncfs(a,c){typeof a=="function"&&(c=a,a=!1),o.syncFSRequests++,o.syncFSRequests>1&&R(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var d=o.getMounts(o.root.mount),b=0;function y(V){return o.syncFSRequests--,c(V)}function P(V){if(V)return P.errored?void 0:(P.errored=!0,y(V));++b>=d.length&&y(null)}for(var U of d)U.type.syncfs?U.type.syncfs(U,a,P):P(null)},mount(a,c,d){var b=d==="/",y=!d,P;if(b&&o.root)throw new o.ErrnoError(10);if(!b&&!y){var U=o.lookupPath(d,{follow_mount:!1});if(d=U.path,P=U.node,o.isMountpoint(P))throw new o.ErrnoError(10);if(!o.isDir(P.mode))throw new o.ErrnoError(54)}var V={type:a,opts:c,mountpoint:d,mounts:[]},F0=a.mount(V);return F0.mount=V,V.root=F0,b?o.root=F0:P&&(P.mounted=V,P.mount&&P.mount.mounts.push(V)),F0},unmount(a){var c=o.lookupPath(a,{follow_mount:!1});if(!o.isMountpoint(c.node))throw new o.ErrnoError(28);var d=c.node,b=d.mounted,y=o.getMounts(b);for(var[P,U]of Object.entries(o.nameTable))for(;U;){var V=U.name_next;y.includes(U.mount)&&o.destroyNode(U),U=V}d.mounted=null;var F0=d.mount.mounts.indexOf(b);d.mount.mounts.splice(F0,1)},lookup(a,c){return a.node_ops.lookup(a,c)},mknod(a,c,d){var b=o.lookupPath(a,{parent:!0}),y=b.node,P=f0.basename(a);if(!P)throw new o.ErrnoError(28);if(P==="."||P==="..")throw new o.ErrnoError(20);var U=o.mayCreate(y,P);if(U)throw new o.ErrnoError(U);if(!y.node_ops.mknod)throw new o.ErrnoError(63);return y.node_ops.mknod(y,P,c,d)},statfs(a){return o.statfsNode(o.lookupPath(a,{follow:!0}).node)},statfsStream(a){return o.statfsNode(a.node)},statfsNode(a){var c={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return a.node_ops.statfs&&Object.assign(c,a.node_ops.statfs(a.mount.opts.root)),c},create(a,c=438){return c&=4095,c|=32768,o.mknod(a,c,0)},mkdir(a,c=511){return c&=1023,c|=16384,o.mknod(a,c,0)},mkdirTree(a,c){var d=a.split("/"),b="";for(var y of d)if(y){(b||f0.isAbs(a))&&(b+="/"),b+=y;try{o.mkdir(b,c)}catch(P){if(P.errno!=20)throw P}}},mkdev(a,c,d){return typeof d>"u"&&(d=c,c=438),c|=8192,o.mknod(a,c,d)},symlink(a,c){if(!ux.resolve(a))throw new o.ErrnoError(44);var d=o.lookupPath(c,{parent:!0}),b=d.node;if(!b)throw new o.ErrnoError(44);var y=f0.basename(c),P=o.mayCreate(b,y);if(P)throw new o.ErrnoError(P);if(!b.node_ops.symlink)throw new o.ErrnoError(63);return b.node_ops.symlink(b,y,a)},rename(a,c){var d=f0.dirname(a),b=f0.dirname(c),y=f0.basename(a),P=f0.basename(c),U,V,F0;if(U=o.lookupPath(a,{parent:!0}),V=U.node,U=o.lookupPath(c,{parent:!0}),F0=U.node,!V||!F0)throw new o.ErrnoError(44);if(V.mount!==F0.mount)throw new o.ErrnoError(75);var D0=o.lookupNode(V,y),X0=ux.relative(a,b);if(X0.charAt(0)!==".")throw new o.ErrnoError(28);if(X0=ux.relative(c,d),X0.charAt(0)!==".")throw new o.ErrnoError(55);var M0;try{M0=o.lookupNode(F0,P)}catch{}if(D0!==M0){var $0=o.isDir(D0.mode),m0=o.mayDelete(V,y,$0);if(m0)throw new o.ErrnoError(m0);if(m0=M0?o.mayDelete(F0,P,$0):o.mayCreate(F0,P),m0)throw new o.ErrnoError(m0);if(!V.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(D0)||M0&&o.isMountpoint(M0))throw new o.ErrnoError(10);if(F0!==V&&(m0=o.nodePermissions(V,"w"),m0))throw new o.ErrnoError(m0);o.hashRemoveNode(D0);try{V.node_ops.rename(D0,F0,P),D0.parent=F0}catch(ix){throw ix}finally{o.hashAddNode(D0)}}},rmdir(a){var c=o.lookupPath(a,{parent:!0}),d=c.node,b=f0.basename(a),y=o.lookupNode(d,b),P=o.mayDelete(d,b,!0);if(P)throw new o.ErrnoError(P);if(!d.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.rmdir(d,b),o.destroyNode(y)},readdir(a){var c=o.lookupPath(a,{follow:!0}),d=c.node,b=o.checkOpExists(d.node_ops.readdir,54);return b(d)},unlink(a){var c=o.lookupPath(a,{parent:!0}),d=c.node;if(!d)throw new o.ErrnoError(44);var b=f0.basename(a),y=o.lookupNode(d,b),P=o.mayDelete(d,b,!1);if(P)throw new o.ErrnoError(P);if(!d.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(y))throw new o.ErrnoError(10);d.node_ops.unlink(d,b),o.destroyNode(y)},readlink(a){var c=o.lookupPath(a),d=c.node;if(!d)throw new o.ErrnoError(44);if(!d.node_ops.readlink)throw new o.ErrnoError(28);return d.node_ops.readlink(d)},stat(a,c){var d=o.lookupPath(a,{follow:!c}),b=d.node,y=o.checkOpExists(b.node_ops.getattr,63);return y(b)},fstat(a){var c=o.getStreamChecked(a),d=c.node,b=c.stream_ops.getattr,y=b?c:d;return b??(b=d.node_ops.getattr),o.checkOpExists(b,63),b(y)},lstat(a){return o.stat(a,!0)},doChmod(a,c,d,b){o.doSetAttr(a,c,{mode:d&4095|c.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(a,c,d){var b;if(typeof a=="string"){var y=o.lookupPath(a,{follow:!d});b=y.node}else b=a;o.doChmod(null,b,c,d)},lchmod(a,c){o.chmod(a,c,!0)},fchmod(a,c){var d=o.getStreamChecked(a);o.doChmod(d,d.node,c,!1)},doChown(a,c,d){o.doSetAttr(a,c,{timestamp:Date.now(),dontFollow:d})},chown(a,c,d,b){var y;if(typeof a=="string"){var P=o.lookupPath(a,{follow:!b});y=P.node}else y=a;o.doChown(null,y,b)},lchown(a,c,d){o.chown(a,c,d,!0)},fchown(a,c,d){var b=o.getStreamChecked(a);o.doChown(b,b.node,!1)},doTruncate(a,c,d){if(o.isDir(c.mode))throw new o.ErrnoError(31);if(!o.isFile(c.mode))throw new o.ErrnoError(28);var b=o.nodePermissions(c,"w");if(b)throw new o.ErrnoError(b);o.doSetAttr(a,c,{size:d,timestamp:Date.now()})},truncate(a,c){if(c<0)throw new o.ErrnoError(28);var d;if(typeof a=="string"){var b=o.lookupPath(a,{follow:!0});d=b.node}else d=a;o.doTruncate(null,d,c)},ftruncate(a,c){var d=o.getStreamChecked(a);if(c<0||(d.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(d,d.node,c)},utime(a,c,d){var b=o.lookupPath(a,{follow:!0}),y=b.node,P=o.checkOpExists(y.node_ops.setattr,63);P(y,{atime:c,mtime:d})},open(a,c,d=438){if(a==="")throw new o.ErrnoError(44);c=RA(c),c&64?d=d&4095|32768:d=0;var b,y;if(typeof a=="object")b=a;else{y=a.endsWith("/");var P=o.lookupPath(a,{follow:!(c&131072),noent_okay:!0});b=P.node,a=P.path}var U=!1;if(c&64)if(b){if(c&128)throw new o.ErrnoError(20)}else{if(y)throw new o.ErrnoError(31);b=o.mknod(a,d|511,0),U=!0}if(!b)throw new o.ErrnoError(44);if(o.isChrdev(b.mode)&&(c&=-513),c&65536&&!o.isDir(b.mode))throw new o.ErrnoError(54);if(!U){var V=o.mayOpen(b,c);if(V)throw new o.ErrnoError(V)}c&512&&!U&&o.truncate(b,0),c&=-131713;var F0=o.createStream({node:b,path:o.getPath(b),flags:c,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return F0.stream_ops.open&&F0.stream_ops.open(F0),U&&o.chmod(b,d&511),F0},close(a){if(o.isClosed(a))throw new o.ErrnoError(8);a.getdents&&(a.getdents=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(c){throw c}finally{o.closeStream(a.fd)}a.fd=null},isClosed(a){return a.fd===null},llseek(a,c,d){if(o.isClosed(a))throw new o.ErrnoError(8);if(!a.seekable||!a.stream_ops.llseek)throw new o.ErrnoError(70);if(d!=0&&d!=1&&d!=2)throw new o.ErrnoError(28);return a.position=a.stream_ops.llseek(a,c,d),a.ungotten=[],a.position},read(a,c,d,b,y){if(b<0||y<0)throw new o.ErrnoError(28);if(o.isClosed(a))throw new o.ErrnoError(8);if((a.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(a.node.mode))throw new o.ErrnoError(31);if(!a.stream_ops.read)throw new o.ErrnoError(28);var P=typeof y<"u";if(!P)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var U=a.stream_ops.read(a,c,d,b,y);return P||(a.position+=U),U},write(a,c,d,b,y,P){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 U=typeof y<"u";if(!U)y=a.position;else if(!a.seekable)throw new o.ErrnoError(70);var V=a.stream_ops.write(a,c,d,b,y,P);return U||(a.position+=V),V},mmap(a,c,d,b,y){if((b&2)!==0&&(y&2)===0&&(a.flags&2097155)!==2)throw new o.ErrnoError(2);if((a.flags&2097155)===1)throw new o.ErrnoError(2);if(!a.stream_ops.mmap)throw new o.ErrnoError(43);if(!c)throw new o.ErrnoError(28);return a.stream_ops.mmap(a,c,d,b,y)},msync(a,c,d,b,y){return a.stream_ops.msync?a.stream_ops.msync(a,c,d,b,y):0},ioctl(a,c,d){if(!a.stream_ops.ioctl)throw new o.ErrnoError(59);return a.stream_ops.ioctl(a,c,d)},readFile(a,c={}){c.flags=c.flags||0,c.encoding=c.encoding||"binary",c.encoding!=="utf8"&&c.encoding!=="binary"&&C0(`Invalid encoding type "${c.encoding}"`);var d=o.open(a,c.flags),b=o.stat(a),y=b.size,P=new Uint8Array(y);return o.read(d,P,0,y,0),c.encoding==="utf8"&&(P=sA(P)),o.close(d),P},writeFile(a,c,d={}){d.flags=d.flags||577;var b=o.open(a,d.flags,d.mode);c=xA(c),o.write(b,c,0,c.byteLength,void 0,d.canOwn),o.close(b)},cwd:()=>o.currentPath,chdir(a){var c=o.lookupPath(a,{follow:!0});if(c.node===null)throw new o.ErrnoError(44);if(!o.isDir(c.node.mode))throw new o.ErrnoError(54);var d=o.nodePermissions(c.node,"x");if(d)throw new o.ErrnoError(d);o.currentPath=c.path},createDefaultDirectories(){o.mkdir("/tmp"),o.mkdir("/home"),o.mkdir("/home/web_user")},createDefaultDevices(){o.mkdir("/dev"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(b,y,P,U,V)=>U,llseek:()=>0}),o.mkdev("/dev/null",o.makedev(1,3)),nx.register(o.makedev(5,0),nx.default_tty_ops),nx.register(o.makedev(6,0),nx.default_tty1_ops),o.mkdev("/dev/tty",o.makedev(5,0)),o.mkdev("/dev/tty1",o.makedev(6,0));var a=new Uint8Array(1024),c=0,d=()=>(c===0&&(Je(a),c=a.byteLength),a[--c]);o.createDevice("/dev","random",d),o.createDevice("/dev","urandom",d),o.mkdir("/dev/shm"),o.mkdir("/dev/shm/tmp")},createSpecialDirectories(){o.mkdir("/proc");var a=o.mkdir("/proc/self");o.mkdir("/proc/self/fd"),o.mount({mount(){var c=o.createNode(a,"fd",16895,73);return c.stream_ops={llseek:i0.stream_ops.llseek},c.node_ops={lookup(d,b){var y=+b,P=o.getStreamChecked(y),U={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>P.path},id:y+1};return U.parent=U,U},readdir(){return Array.from(o.streams.entries()).filter(([d,b])=>b).map(([d,b])=>d.toString())}},c}},{},"/proc/self/fd")},createStandardStreams(a,c,d){a?o.createDevice("/dev","stdin",a):o.symlink("/dev/tty","/dev/stdin"),c?o.createDevice("/dev","stdout",null,c):o.symlink("/dev/tty","/dev/stdout"),d?o.createDevice("/dev","stderr",null,d):o.symlink("/dev/tty1","/dev/stderr");var b=o.open("/dev/stdin",0),y=o.open("/dev/stdout",1),P=o.open("/dev/stderr",1)},staticInit(){o.nameTable=new Array(4096),o.mount(i0,{},"/"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:i0,PROXYFS:k0}},init(a,c,d){o.initialized=!0,a??(a=n.stdin),c??(c=n.stdout),d??(d=n.stderr),o.createStandardStreams(a,c,d)},quit(){o.initialized=!1,ie(0);for(var a of o.streams)a&&o.close(a)},findObject(a,c){var d=o.analyzePath(a,c);return d.exists?d.object:null},analyzePath(a,c){try{var d=o.lookupPath(a,{follow:!c});a=d.path}catch{}var b={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var d=o.lookupPath(a,{parent:!0});b.parentExists=!0,b.parentPath=d.path,b.parentObject=d.node,b.name=f0.basename(a),d=o.lookupPath(a,{follow:!c}),b.exists=!0,b.path=d.path,b.object=d.node,b.name=d.node.name,b.isRoot=d.path==="/"}catch(y){b.error=y.errno}return b},createPath(a,c,d,b){a=typeof a=="string"?a:o.getPath(a);for(var y=c.split("/").reverse();y.length;){var P=y.pop();if(P){var U=f0.join2(a,P);try{o.mkdir(U)}catch(V){if(V.errno!=20)throw V}a=U}}return U},createFile(a,c,d,b,y){var P=f0.join2(typeof a=="string"?a:o.getPath(a),c),U=oA(b,y);return o.create(P,U)},createDataFile(a,c,d,b,y,P){var U=c;a&&(a=typeof a=="string"?a:o.getPath(a),U=c?f0.join2(a,c):a);var V=oA(b,y),F0=o.create(U,V);if(d){d=xA(d),o.chmod(F0,V|146);var D0=o.open(F0,577);o.write(D0,d,0,d.length,0,P),o.close(D0),o.chmod(F0,V)}},createDevice(a,c,d,b){var y,P=f0.join2(typeof a=="string"?a:o.getPath(a),c),U=oA(!!d,!!b);(y=o.createDevice).major??(y.major=64);var V=o.makedev(o.createDevice.major++,0);return o.registerDevice(V,{open(F0){F0.seekable=!1},close(F0){b?.buffer?.length&&b(10)},read(F0,D0,X0,M0,$0){for(var m0=0,ix=0;ix<M0;ix++){var yx;try{yx=d()}catch{throw new o.ErrnoError(29)}if(yx===void 0&&m0===0)throw new o.ErrnoError(6);if(yx==null)break;m0++,D0[X0+ix]=yx}return m0&&(F0.node.atime=Date.now()),m0},write(F0,D0,X0,M0,$0){for(var m0=0;m0<M0;m0++)try{b(D0[X0+m0])}catch{throw new o.ErrnoError(29)}return M0&&(F0.node.mtime=F0.node.ctime=Date.now()),m0}}),o.mkdev(P,U,V)},forceLoadFile(a){if(a.isDevice||a.isFolder||a.link||a.contents)return!0;if(globalThis.XMLHttpRequest)C0("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");else try{a.contents=S(a.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(a,c,d,b,y){class P{constructor(){bx(this,"lengthKnown",!1),bx(this,"chunks",[])}get($0){if(!($0>this.length-1||$0<0)){var m0=$0%this.chunkSize,ix=$0/this.chunkSize|0;return this.getter(ix)[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||C0("Couldn't load "+d+". Status: "+$0.status);var m0=Number($0.getResponseHeader("Content-length")),ix,yx=(ix=$0.getResponseHeader("Accept-Ranges"))&&ix==="bytes",Mx=(ix=$0.getResponseHeader("Content-Encoding"))&&ix==="gzip",Gx=1024*1024;yx||(Gx=m0);var Ux=(Kx,jA)=>{Kx>jA&&C0("invalid range ("+Kx+", "+jA+") or no bytes requested!"),jA>m0-1&&C0("only "+m0+" bytes available! programmer error!");var Ex=new XMLHttpRequest;return Ex.open("GET",d,!1),m0!==Gx&&Ex.setRequestHeader("Range","bytes="+Kx+"-"+jA),Ex.responseType="arraybuffer",Ex.overrideMimeType&&Ex.overrideMimeType("text/plain; charset=x-user-defined"),Ex.send(null),Ex.status>=200&&Ex.status<300||Ex.status===304||C0("Couldn't load "+d+". Status: "+Ex.status),Ex.response!==void 0?new Uint8Array(Ex.response||[]):re(Ex.responseText||"",!0)},Fe=this;Fe.setDataGetter(Kx=>{var jA=Kx*Gx,Ex=(Kx+1)*Gx-1;return Ex=Math.min(Ex,m0-1),typeof Fe.chunks[Kx]>"u"&&(Fe.chunks[Kx]=Ux(jA,Ex)),typeof Fe.chunks[Kx]>"u"&&C0("doXHR failed!"),Fe.chunks[Kx]}),(Mx||!m0)&&(Gx=m0=1,m0=this.getter(0).length,Gx=m0,q("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=m0,this._chunkSize=Gx,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(globalThis.XMLHttpRequest){v||C0("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var U=new P,V={isDevice:!1,contents:U}}else var V={isDevice:!1,url:d};var F0=o.createFile(a,c,V,b,y);V.contents?F0.contents=V.contents:V.url&&(F0.contents=null,F0.url=V.url),Object.defineProperties(F0,{usedBytes:{get:function(){return this.contents.length}}});var D0={};for(let[M0,$0]of Object.entries(F0.stream_ops))D0[M0]=(...m0)=>(o.forceLoadFile(F0),$0(...m0));function X0(M0,$0,m0,ix,yx){var Mx=M0.node.contents;if(yx>=Mx.length)return 0;var Gx=Math.min(Mx.length-yx,ix);if(Mx.slice)for(var Ux=0;Ux<Gx;Ux++)$0[m0+Ux]=Mx[yx+Ux];else for(var Ux=0;Ux<Gx;Ux++)$0[m0+Ux]=Mx.get(yx+Ux);return Gx}return D0.read=(M0,$0,m0,ix,yx)=>(o.forceLoadFile(F0),X0(M0,$0,m0,ix,yx)),D0.mmap=(M0,$0,m0,ix,yx)=>{o.forceLoadFile(F0);var Mx=LA($0);if(!Mx)throw new o.ErrnoError(48);return X0(M0,fx,Mx,$0,m0),{ptr:Mx,allocated:!0}},F0.stream_ops=D0,F0}},w0={currentUmask:18,calculateAt(a,c,d){if(f0.isAbs(c))return c;var b;if(a===-100)b=o.cwd();else{var y=w0.getStreamFromFD(a);b=y.path}if(c.length==0){if(!d)throw new o.ErrnoError(44);return b}return b+"/"+c},writeStat(a,c){c0[a>>2]=c.dev,c0[a+4>>2]=c.mode,c0[a+8>>2]=c.nlink,c0[a+12>>2]=c.uid,c0[a+16>>2]=c.gid,c0[a+20>>2]=c.rdev,W0[a+24>>3]=BigInt(c.size),G0[a+32>>2]=4096,G0[a+36>>2]=c.blocks;var d=c.atime.getTime(),b=c.mtime.getTime(),y=c.ctime.getTime();return W0[a+40>>3]=BigInt(Math.floor(d/1e3)),c0[a+48>>2]=d%1e3*1e3*1e3,W0[a+56>>3]=BigInt(Math.floor(b/1e3)),c0[a+64>>2]=b%1e3*1e3*1e3,W0[a+72>>3]=BigInt(Math.floor(y/1e3)),c0[a+80>>2]=y%1e3*1e3*1e3,W0[a+88>>3]=BigInt(c.ino),0},writeStatFs(a,c){c0[a+4>>2]=c.bsize,c0[a+60>>2]=c.bsize,W0[a+8>>3]=BigInt(c.blocks),W0[a+16>>3]=BigInt(c.bfree),W0[a+24>>3]=BigInt(c.bavail),W0[a+32>>3]=BigInt(c.files),W0[a+40>>3]=BigInt(c.ffree),c0[a+48>>2]=c.fsid,c0[a+64>>2]=c.flags,c0[a+56>>2]=c.namelen},doMsync(a,c,d,b,y){if(!o.isFile(c.node.mode))throw new o.ErrnoError(43);if(b&2)return 0;var P=iA.slice(a,a+d);o.msync(c,P,y,d,b)},getStreamFromFD(a){var c=o.getStreamChecked(a);return c},varargs:void 0,getStr(a){var c=gx(a);return c}};function We(a,c,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(c){case 0:{var y=aA();if(y<0)return-28;for(;o.streams[y];)y++;var P;return P=o.dupStream(b,y),P.fd}case 1:case 2:return 0;case 3:return b.flags;case 4:{var y=aA(),U=289792;return b.flags=b.flags&~U|y&U,0}case 12:{var y=MA(),V=0;return V0[y+V>>1]=2,0}case 13:case 14:return 0}return-28}catch(F0){if(typeof o>"u"||F0.name!=="ErrnoError")throw F0;return-F0.errno}}function GA(a,c,d){w0.varargs=d;try{var b=w0.getStreamFromFD(a);switch(c){case 21509:return b.tty?0:-59;case 21505:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcgets){var y=b.tty.ops.ioctl_tcgets(b),P=MA();G0[P>>2]=y.c_iflag||0,G0[P+4>>2]=y.c_oflag||0,G0[P+8>>2]=y.c_cflag||0,G0[P+12>>2]=y.c_lflag||0;for(var U=0;U<32;U++)fx[P+U+17]=y.c_cc[U]||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 P=MA(),V=G0[P>>2],F0=G0[P+4>>2],D0=G0[P+8>>2],X0=G0[P+12>>2],M0=[],U=0;U<32;U++)M0.push(fx[P+U+17]);return b.tty.ops.ioctl_tcsets(b.tty,c,{c_iflag:V,c_oflag:F0,c_cflag:D0,c_lflag:X0,c_cc:M0})}return 0}case 21519:{if(!b.tty)return-59;var P=MA();return G0[P>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var P=MA();return o.ioctl(b,c,P)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var $0=b.tty.ops.ioctl_tiocgwinsz(b.tty),P=MA();V0[P>>1]=$0[0],V0[P+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 hA(a,c,d,b){w0.varargs=b;try{c=w0.getStr(c),c=w0.calculateAt(a,c);var y=b?aA():0;return d&64&&(y&=~w0.currentUmask),o.open(c,d,y).fd}catch(P){if(typeof o>"u"||P.name!=="ErrnoError")throw P;return-P.errno}}var vt=()=>2147483648,ke=(a,c)=>Math.ceil(a/c)*c,br=a=>{var c=UA.buffer.byteLength,d=(a-c+65535)/65536|0;try{return UA.grow(d),Z(),1}catch{}},mr=a=>{var c=iA.length;a>>>=0;var d=vt();if(a>d)return!1;for(var b=1;b<=4;b*=2){var y=c*(1+.2/b);y=Math.min(y,a+100663296);var P=Math.min(d,ke(Math.max(a,y),65536)),U=br(P);if(U)return!0}return!1};function lt(a){try{var c=w0.getStreamFromFD(a);return o.close(c),0}catch(d){if(typeof o>"u"||d.name!=="ErrnoError")throw d;return d.errno}}var ct=(a,c,d,b)=>{for(var y=0,P=0;P<d;P++){var U=c0[c>>2],V=c0[c+4>>2];c+=8;var F0=o.read(a,fx,U,V,b);if(F0<0)return-1;if(y+=F0,F0<V)break;typeof b<"u"&&(b+=F0)}return y};function ft(a,c,d,b){try{var y=w0.getStreamFromFD(a),P=ct(y,c,d);return c0[b>>2]=P,0}catch(U){if(typeof o>"u"||U.name!=="ErrnoError")throw U;return U.errno}}var we=9007199254740992,hr=-9007199254740992,te=a=>a<hr||a>we?NaN:Number(a);function _e(a,c,d,b){c=te(c);try{if(isNaN(c))return 22;var y=w0.getStreamFromFD(a);return o.llseek(y,c,d),W0[b>>3]=BigInt(y.position),y.getdents&&c===0&&d===0&&(y.getdents=null),0}catch(P){if(typeof o>"u"||P.name!=="ErrnoError")throw P;return P.errno}}var Et=(a,c,d,b)=>{for(var y=0,P=0;P<d;P++){var U=c0[c>>2],V=c0[c+4>>2];c+=8;var F0=o.write(a,fx,U,V,b);if(F0<0)return-1;if(y+=F0,F0<V)break;typeof b<"u"&&(b+=F0)}return y};function jr(a,c,d,b){try{var y=w0.getStreamFromFD(a),P=Et(y,c,d);return c0[b>>2]=P,0}catch(U){if(typeof o>"u"||U.name!=="ErrnoError")throw U;return U.errno}}var Bt=0,ne=()=>ge||Bt>0,Xe=a=>{I=a,ne()||(n.onExit?.(a),r0=!0),m(a,new nA(a))},gr=(a,c)=>{I=a,ne()||l0(),Xe(a)},yr=a=>{if(a instanceof nA||a=="unwind")return I;m(1,a)},Ct=(a,c,d)=>Ke(a,iA,c,d),kr=a=>se(a),dt=a=>{var c=ee(a)+1,d=kr(c);return Ct(a,d,c),d},ut=(...a)=>o.createPath(...a),Se=(...a)=>o.unlink(...a),Dt=(...a)=>o.createLazyFile(...a),pt=(...a)=>o.createDevice(...a);if(o.createPreloadedFile=Ft,o.preloadFile=OA,o.staticInit(),n.noExitRuntime&&(ge=n.noExitRuntime),n.preloadPlugins&&(ye=n.preloadPlugins),n.print&&(q=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(O=n.wasmBinary),n.arguments&&(u=n.arguments),n.thisProgram&&(D=n.thisProgram),n.preInit)for(typeof n.preInit=="function"&&(n.preInit=[n.preInit]);n.preInit.length>0;)n.preInit.shift()();n.callMain=px,n.addRunDependency=Nx,n.removeRunDependency=Ve,n.FS_preloadFile=OA,n.FS_unlink=Se,n.FS_createPath=ut,n.FS_createDevice=pt,n.FS=o,n.FS_createDataFile=ze,n.FS_createLazyFile=Dt,n.PROXYFS=k0;var wr,_r,ie,Sr,se,Ye,Ix,bt,UA;function ae(a){wr=n._main=a.__main_argc_argv,_r=a.__funcs_on_exit,ie=a.fflush,Sr=a._emscripten_stack_restore,se=a._emscripten_stack_alloc,Ye=a.emscripten_stack_get_current,Ix=UA=a.memory,bt=a.__indirect_function_table}var Qe={__assert_fail:pA,__syscall_fcntl64:We,__syscall_ioctl:GA,__syscall_openat:hA,emscripten_resize_heap:mr,fd_close:lt,fd_read:ft,fd_seek:_e,fd_write:jr};function px(a=[]){var c=wr;a.unshift(D);var d=a.length,b=kr((d+1)*4),y=b;for(var P of a)c0[y>>2]=dt(P),y+=4;c0[y>>2]=0;try{var U=c(d,b);return gr(U,!0),U}catch(V){return yr(V)}}function Pe(a=u){if(Cx>0){b0=Pe;return}if(o0(),Cx>0){b0=Pe;return}function c(){if(n.calledRun=!0,!r0){G(),H?.(n),n.onRuntimeInitialized?.();var d=n.noInitialRun||!0;d||px(a),B0()}}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),c()},1)):c()}var oe;return oe=await tx(),Pe(),a0?i=n:i=new Promise((a,c)=>{H=a,K=c}),i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),AF={};HE(AF,{createPawnCC:()=>XE,createPawnDbg:()=>YE});eF.exports=JE(AF);var VE=xF(KE(),1),WE=xF(zE(),1),XE=VE.default,YE=WE.default});var Le=ro((vh,Sv)=>{"use strict";var sB=Object.create,qt=Object.defineProperty,aB=Object.getOwnPropertyDescriptor,LF=Object.getOwnPropertyNames,oB=Object.getPrototypeOf,FB=Object.prototype.hasOwnProperty,vB=(x,A,e)=>A in x?qt(x,A,{enumerable:!0,configurable:!0,writable:!0,value:e}):x[A]=e,lB=(x,A)=>function(){try{return A||(0,x[LF(x)[0]])((A={exports:{}}).exports,A),A.exports}catch(r){throw A=0,r}},cB=(x,A)=>{for(var e in A)qt(x,e,{get:A[e],enumerable:!0})},RF=(x,A,e,r)=>{if(A&&typeof A=="object"||typeof A=="function")for(let t of LF(A))!FB.call(x,t)&&t!==e&&qt(x,t,{get:()=>A[t],enumerable:!(r=aB(A,t))||r.enumerable});return x},fB=(x,A,e)=>(e=x!=null?sB(oB(x)):{},RF(A||!x||!x.__esModule?qt(e,"default",{value:x,enumerable:!0}):e,x)),EB=x=>RF(qt({},"__esModule",{value:!0}),x),A0=(x,A,e)=>vB(x,typeof A!="symbol"?A+"":A,e),BB=lB({"mdn_com_wasm/bin/mdnCOM.js"(x,A){"use strict";var e=(()=>{var r=globalThis.document?.currentScript?.src;return async function(t={}){var i;(function(){function f(t0){t0=t0.split("-")[0];for(var E0=t0.split(".").slice(0,3);E0.length<3;)E0.push("00");return E0=E0.map((p0,Z0,Y0)=>p0.padStart(2,"0")),E0.join("")}var C=t0=>[t0/1e4|0,(t0/100|0)%100,t0%100].join("."),g=2147483647,T=typeof process<"u"&&process.versions?.node?f(process.versions.node):g;if(T<180300)throw new Error(`This emscripten-generated code requires node v${C(180300)} (detected v${C(T)})`);var N=typeof navigator<"u"&&navigator.userAgent;if(N){var Y=N.includes("Safari/")&&!N.includes("Chrome/")&&N.match(/Version\/(\d+\.?\d*\.?\d*)/)?f(N.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=N.match(/Firefox\/(\d+(?:\.\d+)?)/)?parseFloat(N.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]):g;if(X<79)throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${X})`);var x0=N.match(/Chrome\/(\d+(?:\.\d+)?)/)?parseFloat(N.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]):g;if(x0<85)throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${x0})`)}})();var n=t,F=!!globalThis.window,v=!!globalThis.WorkerGlobalScope,E=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",u=!F&&!E&&!v,D=[],m="./this.program",w=(f,C)=>{throw C};typeof __filename<"u"?r=__filename:v&&(r=self.location.href);var j="",S,$;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 q=require("fs");j=__dirname+"/",$=C=>{C=L(C)?new URL(C):C;var g=q.readFileSync(C);return k(Buffer.isBuffer(g)),g},S=async(C,g=!0)=>{C=L(C)?new URL(C):C;var T=q.readFileSync(C,g?void 0:"utf8");return k(g?Buffer.isBuffer(T):typeof T=="string"),T},process.argv.length>1&&(m=process.argv[1].replace(/\\/g,"/")),D=process.argv.slice(2),w=(C,g)=>{throw process.exitCode=C,g}}else if(!u)if(F||v){try{j=new URL(".",r).href}catch{}if(!(globalThis.window||globalThis.WorkerGlobalScope))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");v&&($=f=>{var C=new XMLHttpRequest;return C.open("GET",f,!1),C.responseType="arraybuffer",C.send(null),new Uint8Array(C.response)}),S=async f=>{if(L(f))return new Promise((g,T)=>{var N=new XMLHttpRequest;N.open("GET",f,!0),N.responseType="arraybuffer",N.onload=()=>{if(N.status==200||N.status==0&&N.response){g(N.response);return}T(N.status)},N.onerror=T,N.send(null)});var C=await fetch(f,{credentials:"same-origin"});if(C.ok)return C.arrayBuffer();throw new Error(C.status+" : "+C.url)}}else throw new Error("environment detection error");var R=console.log.bind(console),O=console.error.bind(console);k(!u,"shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)");var r0;globalThis.WebAssembly||O("no native wasm support detected");var I=!1;function k(f,C){f||cx("Assertion failed"+(C?": "+C:""))}var L=f=>f.startsWith("file://");function W(){var f=wi();k((f&3)==0),f==0&&(f+=4),y0[f>>2]=34821223,y0[f+4>>2]=2310721022,y0[0]=1668509029}function Q(){if(!I){var f=wi();f==0&&(f+=4);var C=y0[f>>2],g=y0[f+4>>2];(C!=34821223||g!=2310721022)&&cx(`Stack overflow! Stack cookie has been overwritten at ${ux(f)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ux(g)} ${ux(C)}`),y0[0]!=1668509029&&cx("Runtime error: The application has corrupted its heap memory area (address zero)!")}}class H{}class K extends H{}var a0=!0;(()=>{var f=new Int16Array(1),C=new Int8Array(f.buffer);f[0]=25459,(C[0]!==115||C[1]!==99)&&cx("Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)")})();function n0(f){Object.getOwnPropertyDescriptor(n,f)||Object.defineProperty(n,f,{configurable:!0,set(){cx(`Attempt to set \`Module.${f}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}function Z(f){return()=>k(!1,`call to '${f}' via reference taken before Wasm module initialization`)}function o0(f){Object.getOwnPropertyDescriptor(n,f)&&cx(`\`Module.${f}\` was supplied but \`${f}\` not included in INCOMING_MODULE_JS_API`)}function G(f){return f==="FS_createPath"||f==="FS_createDataFile"||f==="FS_createPreloadedFile"||f==="FS_preloadFile"||f==="FS_unlink"||f==="addRunDependency"||f==="FS_createLazyFile"||f==="FS_createDevice"||f==="removeRunDependency"}function s0(f){l0(f)}function l0(f){Object.getOwnPropertyDescriptor(n,f)||Object.defineProperty(n,f,{configurable:!0,get(){var C=`'${f}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;G(f)&&(C+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you"),cx(C)}})}function B0(f){for(var C=0,g=f.length,T=new Uint8Array(g),N;C<g;++C)N=f.charCodeAt(C),T[C]=~N>>8&N;return T}var C0,_0,T0=!1;function ox(){var f=sn.buffer;Zx=new Int8Array(f),NA=new Int16Array(f),n.HEAPU8=gx=new Uint8Array(f),Fx=new Uint16Array(f),IA=new Int32Array(f),y0=new Uint32Array(f),pr=new Float32Array(f),ge=new Float64Array(f),Dr=new BigInt64Array(f),sA=new BigUint64Array(f)}k(globalThis.Int32Array&&globalThis.Float64Array&&Int32Array.prototype.subarray&&Int32Array.prototype.set,"JS engine does not provide full typed array support");function Qx(){if(n.preRun)for(typeof n.preRun=="function"&&(n.preRun=[n.preRun]);n.preRun.length;)at(n.preRun.shift());n0("preRun"),pA(f0)}function $A(){k(!T0),T0=!0,Q(),Pr.__wasm_call_ctors()}function qA(){if(Q(),n.postRun)for(typeof n.postRun=="function"&&(n.postRun=[n.postRun]);n.postRun.length;)MA(n.postRun.shift());n0("postRun"),pA(aA)}function cx(f){n.onAbort?.(f),f=`Aborted(${f})`,O(f),I=!0;var C=new WebAssembly.RuntimeError(f);throw _0?.(C),C}function tx(){cx("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM")}var nA={init:tx,createDataFile:tx,createPreloadedFile:tx,createLazyFile:tx,open:tx,mkdev:tx,registerDevice:tx,analyzePath:tx,ErrnoError:tx};function V0(f,C){return(...g)=>{k(T0,`native function \`${f}\` called before runtime initialization`);var T=Pr[f];return k(T,`exported native function \`${f}\` not found`),k(g.length<=C,`native function \`${f}\` called with ${g.length} args but expects ${C}`),T(...g)}}var G0;function W0(){return B0(`\0asm\0\0\0\xCF\`\x7F\0\`\x7F\x7F\0\`\x7F\x7F\`\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\`\x7F\x7F\x7F\0\`\0\0\`\x7F\x7F\x7F\x7F\0\`\0\x7F\`\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F~\x7F~\`
|
|
1528
1528
|
\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\`\x7F|\x7F\x7F\x7F\x7F\x7F\`\x7F\x7F\x7F\x7F\x7F|\`\r\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\b\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F~~\0\`\x7F~\x7F\x7F\x7F\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\0\`\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`|\x7F|\`\x07\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F\`~\x7F\x7F\xA7\x07env_emval_new_cstring\0env_emval_get_property\0env\r_emval_decref\0\0env_emval_create_invoker\0env\r_emval_incref\0\0env\r_emval_invoke\0env_emval_run_destructors\0\0env_emval_get_module_property\0env_embind_register_value_object\0\venv#_embind_register_value_object_field\0\renv_embind_finalize_value_object\0\0env_embind_register_class\0env"_embind_register_class_constructor\0\venv_embind_register_class_property\0\renv_embind_register_function\0env\v__cxa_throw\0env_embind_register_void\0env_embind_register_bool\0\x07env_embind_register_integer\0
|
|
1529
1529
|
env_embind_register_bigint\0env_embind_register_float\0env\x1B_embind_register_std_string\0env_embind_register_std_wstring\0env_embind_register_emval\0\0env_embind_register_memory_view\0wasi_snapshot_preview1
|
|
1530
1530
|
random_get\0env _abort_js\0wasi_snapshot_preview1\bfd_write\0 wasi_snapshot_preview1\bfd_close\0wasi_snapshot_preview1\x07fd_seek\0envemscripten_resize_heap\0\xB6\xB4 \0\b\0\0\0\b\b\0\b\0 \0\0\b\0\b\0\0 \x07 \x07
|
|
@@ -2172,55 +2172,55 @@ jv.\xC9\xC2\x81\x85,r\x92\xA1\xE8\xBF\xA2Kf\xA8p\x8BK\xC2\xA3Ql\xC7\xE8\x92\xD
|
|
|
2172
2172
|
\x07\0\0 \v\0\0 \v\0\0\v\0\0\0\0\0A\x91\x9C\v!\0\0\0\0\0\0\0\0\0\v\r\0\r\0\0\0 \0\0\0 \0\0\0\0A\xCB\x9C\v\f\0A\xD7\x9C\v\0\0\0\0\0\0\0\0 \f\0\0\0\0\0\f\0\0\f\0A\x85\x9D\v\0A\x91\x9D\v\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xBF\x9D\v\0A\xCB\x9D\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0\0A\x82\x9E\v\0\0\0\0\0\0\0\0\0 \0A\xB3\x9E\v\0A\xBF\x9E\v\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0A\xED\x9E\v\0A\xF9\x9E\v\xAF\b\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\x000123456789ABCDEF\x90\\\0\0\fR\0\0\xB0O\0\0\xF8R\0\0N10__cxxabiv116__shim_type_infoE\0\0\0\0\fR\0\0\xE0O\0\0\xA4O\0\0N10__cxxabiv117__class_type_infoE\0\0\0\fR\0\0P\0\0\xA4O\0\0N10__cxxabiv117__pbase_type_infoE\0\0\0\fR\0\0@P\0\0P\0\0N10__cxxabiv119__pointer_type_infoE\0\fR\0\0pP\0\0\xA4O\0\0N10__cxxabiv120__function_type_infoE\0\0\0\0\fR\0\0\xA4P\0\0P\0\0N10__cxxabiv129__pointer_to_member_type_infoE\0\0\0\0\0\0\0\xF0P\0\0G\0\0\0H\0\0\0I\0\0\0J\0\0\0K\0\0\0\fR\0\0\xFCP\0\0\xA4O\0\0N10__cxxabiv123__fundamental_type_infoE\0\xDCP\0\0,Q\0\0v\0Dn\0\0\0\0\xDCP\0\0<Q\0\0b\0\0\0\xDCP\0\0HQ\0\0c\0\0\0\xDCP\0\0TQ\0\0h\0\0\0\xDCP\0\0\`Q\0\0a\0\0\0\xDCP\0\0lQ\0\0s\0\0\0\xDCP\0\0xQ\0\0t\0\0\0\xDCP\0\0\x84Q\0\0i\0\0\0\xDCP\0\0\x90Q\0\0j\0\0\0\xDCP\0\0\x9CQ\0\0l\0\0\0\xDCP\0\0\xA8Q\0\0m\0\0\0\xDCP\0\0\xB4Q\0\0x\0\0\0\xDCP\0\0\xC0Q\0\0y\0\0\0\xDCP\0\0\xCCQ\0\0f\0\0\0\xDCP\0\0\xD8Q\0\0d\0\0\0\0\0\0\0\xD4O\0\0G\0\0\0L\0\0\0I\0\0\0J\0\0\0M\0\0\0N\0\0\0O\0\0\0P\0\0\0\0\0\0\0,R\0\0G\0\0\0Q\0\0\0I\0\0\0J\0\0\0M\0\0\0R\0\0\0S\0\0\0T\0\0\0\fR\0\x008R\0\0\xD4O\0\0N10__cxxabiv120__si_class_type_infoE\0\0\0\0\0\0\0\x004P\0\0G\0\0\0U\0\0\0I\0\0\0J\0\0\0V\0\0\0\xE4Q\0\0\x84R\0\0St9exception\0\0\0\0\0\0\0\0\xA8R\0\x009\0\0\0W\0\0\0X\0\0\0\fR\0\0\xB4R\0\0|R\0\0St11logic_error\0\0\0\0\0\xD8R\0\x009\0\0\0Y\0\0\0X\0\0\0\fR\0\0\xE4R\0\0\xA8R\0\0St12length_error\0\0\0\0\xE4Q\0\0\0S\0\0St9type_info\0\0\0\0\0\0\xA0N\0\xEB\xA7~ u\x86\xFA\0\xB9,\xFD\xB7\x8Az\xBC\0\xCC\xA2\0=I\xD7\0\b\0\x93\b\x8F*_\xB7\xFAX\xD9\xFD\xCA\xBD\xE1\xCD\xDC@x\0}ga\xEC\0\xE5
|
|
2173
2173
|
\xD4\0\xCC>Ov\x98\xAF\0\0D\0\xAE\0\xAE\`\0\xFAw!\xEB+\0\`A\x92\0\xA9\xA3nN\0A\xD8\xA7\v\f\0\0\0\0\0\0\0\0*\0A\xF8\xA7\v'9H\0A\x8E\xA8\v\x92\0A\xA2\xA8\v\x8D8R\`S\0\0\xCA\0\0\0\0\0\0\0\0\xBB\xDB\xEB\x07+\x07;\x07P\x07Success\0Illegal byte sequence\0Domain error\0Result not representable\0Not a tty\0Permission denied\0Operation not permitted\0No such file or directory\0No such process\0File exists\0Value too large for defined data type\0No space left on device\0Out of memory\0Resource busy\0Interrupted system call\0Resource temporarily unavailable\0Invalid seek\0Cross-device link\0Read-only file system\0Directory not empty\0Connection reset by peer\0Operation timed out\0Connection refused\0Host is down\0Host is unreachable\0Address in use\0Broken pipe\0I/O error\0No such device or address\0Block device required\0No such device\0Not a directory\0Is a directory\0Text file busy\0Exec format error\0Invalid argument\0Argument list too long\0Symbolic link loop\0Filename too long\0Too many open files in system\0No file descriptors available\0Bad file descriptor\0No child process\0Bad address\0File too large\0Too many links\0No locks available\0Resource deadlock would occur\0State not recoverable\0Owner died\0Operation canceled\0Function not implemented\0No message of desired type\0Identifier removed\0Device not a stream\0No data available\0Device timeout\0Out of streams resources\0Link has been severed\0Protocol error\0Bad message\0File descriptor in bad state\0Not a socket\0Destination address required\0Message too large\0Protocol wrong type for socket\0Protocol not available\0Protocol not supported\0Socket type not supported\0Not supported\0Protocol family not supported\0Address family not supported by protocol\0Address not available\0Network is down\0Network unreachable\0Connection reset by network\0Connection aborted\0No buffer space available\0Socket is connected\0Socket not connected\0Cannot send after socket shutdown\0Operation already in progress\0Operation in progress\0Stale file handle\0Remote I/O error\0Quota exceeded\0No medium found\0Wrong medium type\0Multihop attempted\0Required key not available\0Key has expired\0Key has been revoked\0Key was rejected by service\0A\xB0\xB7\vI\0\0\0 F\0\0 K\0\0\0\0\0\0\0\0\0\xA0J\0\0\xA0K\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 L\0\0\0\0\0\0\0\0\0\x07\0\0\0\0 \0\0\0\0\0\0\0A\x84\xB8\v@\0A\x9C\xB8\vA\0\0\0B\0\0\0u\0\0\0\0A\xB4\xB8\v\0A\xC4\xB8\v\xFF\xFF\xFF\xFF
|
|
2174
2174
|
\0A\x88\xB9\v \xF8[\0\x008y\0\0\0A\x9C\xB9\vE\0A\xB4\xB9\v
|
|
2175
|
-
A\0\0\0F\0\0\0Xy\0A\xCC\xB9\v\0A\xDC\xB9\v\b\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0A\xA0\xBA\v\x07\x90\\\0\0P{`)}function fx(f){return f}async function tt(f){return f}async function nt(f,C){try{var g=await tt(f)
|
|
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 fx(f){return f}async function tt(f){return f}async function nt(f,C){try{var g=await tt(f),T=await WebAssembly.instantiate(g,C);return T}catch(N){O(`failed to asynchronously prepare wasm: ${N}`),L(f)&&O(`warning: Loading from a file URI (${f}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`),cx(N)}}async function it(f,C,g){return nt(C,g)}function c0(){var f={env:Qa,wasi_snapshot_preview1:Qa};return f}async function st(){function f(X,x0){return Pr=X.exports,Ef(Pr),ox(),Pr}var C=n;function g(X){return k(n===C,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),C=null,f(X.instance)}var T=c0();if(n.instantiateWasm)return new Promise((X,x0)=>{try{n.instantiateWasm(T,(t0,E0)=>{X(f(t0,E0))})}catch(t0){O(`Module.instantiateWasm callback failed with error: ${t0}`),x0(t0)}});G0??(G0=W0());var N=await it(r0,G0,T),Y=g(N);return Y}class iA{constructor(C){A0(this,"name","ExitStatus"),this.message=`Program terminated with exit(${C})`,this.status=C}}var NA,IA,Dr,Zx,pr,ge,Fx,y0,sA,gx,pA=f=>{for(;f.length>0;)f.shift()(n)},aA=[],MA=f=>aA.push(f),f0=[],at=f=>f0.push(f),Je=!0;function ux(f){return k(typeof f=="number",`ptrToString expects a number, got ${typeof f}`),f>>>=0,"0x"+f.toString(16).padStart(8,"0")}var Jx=f=>{Jx.shown||(Jx.shown={}),Jx.shown[f]||(Jx.shown[f]=1,E&&(f="warning: "+f),O(f))};class ee{constructor(C){this.excPtr=C,this.ptr=C-24}set_type(C){y0[this.ptr+4>>2]=C}get_type(){return y0[this.ptr+4>>2]}set_destructor(C){y0[this.ptr+8>>2]=C}get_destructor(){return y0[this.ptr+8>>2]}set_caught(C){C=C?1:0,Zx[this.ptr+12]=C}get_caught(){return Zx[this.ptr+12]!=0}set_rethrown(C){C=C?1:0,Zx[this.ptr+13]=C}get_rethrown(){return Zx[this.ptr+13]!=0}init(C,g){this.set_adjusted_ptr(0),this.set_type(C),this.set_destructor(g)}set_adjusted_ptr(C){y0[this.ptr+16>>2]=C}get_adjusted_ptr(){return y0[this.ptr+16>>2]}}var Ke=0,re=(f,C,g)=>{var T=new ee(f);T.init(C,g),Ke++,k(!1,"Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.")},ot=()=>cx("native code called abort()"),nx={},LA=f=>{for(;f.length;){var C=f.pop(),g=f.pop();g(C)}};function i0(f){return this.fromWireType(y0[f>>2])}var RA={},xA={},oA={},N0=class extends Error{constructor(C){super(C),this.name="InternalError"}},k0=f=>{throw new N0(f)},bA=(f,C,g)=>{f.forEach(x0=>oA[x0]=C);function T(x0){var t0=g(x0);t0.length!==f.length&&k0("Mismatched type converter count");for(var E0=0;E0<f.length;++E0)Nx(f[E0],t0[E0])}var N=new Array(C.length),Y=[],X=0;for(let[x0,t0]of C.entries())xA.hasOwnProperty(t0)?N[x0]=xA[t0]:(Y.push(t0),RA.hasOwnProperty(t0)||(RA[t0]=[]),RA[t0].push(()=>{N[x0]=xA[t0],++X,X===Y.length&&T(N)}));Y.length===0&&T(N)},ze=f=>{var C=nx[f];delete nx[f];var g=C.rawConstructor,T=C.rawDestructor,N=C.fields,Y=N.map(X=>X.getterReturnType).concat(N.map(X=>X.setterArgumentType));bA([f],Y,X=>{var x0={};for(var[t0,E0]of N.entries()){let p0=X[t0],Z0=E0.getter,Y0=E0.getterContext,Ax=X[t0+N.length],Lx=E0.setter,wx=E0.setterContext;x0[E0.fieldName]={read:vA=>p0.fromWireType(Z0(Y0,vA)),write:(vA,HA)=>{var gA=[];Lx(wx,vA,Ax.toWireType(gA,HA)),LA(gA)},optional:p0.optional}}return[{name:C.name,fromWireType:p0=>{var Z0={};for(var Y0 in x0)Z0[Y0]=x0[Y0].read(p0);return T(p0),Z0},toWireType:(p0,Z0)=>{for(var Y0 in x0)if(!(Y0 in Z0)&&!x0[Y0].optional)throw new TypeError(`Missing field: "${Y0}"`);var Ax=g();for(Y0 in x0)x0[Y0].write(Ax,Z0[Y0]);return p0!==null&&p0.push(T,Ax),Ax},readValueFromPointer:i0,destructorFunction:T}]})},Dx=f=>{for(var C="";;){var g=gx[f++];if(!g)return C;C+=String.fromCharCode(g)}},Cx=class extends Error{constructor(C){super(C),this.name="BindingError"}},b0=f=>{throw new Cx(f)};function Ve(f,C,g={}){var T=C.name;if(f||b0(`type "${T}" must have a positive integer typeid pointer`),xA.hasOwnProperty(f)){if(g.ignoreDuplicateRegistrations)return;b0(`Cannot register type '${T}' twice`)}if(xA[f]=C,delete oA[f],RA.hasOwnProperty(f)){var N=RA[f];delete RA[f],N.forEach(Y=>Y())}}function Nx(f,C,g={}){return Ve(f,C,g)}var ye=(f,C,g)=>{switch(C){case 1:return g?T=>Zx[T]:T=>gx[T];case 2:return g?T=>NA[T>>1]:T=>Fx[T>>1];case 4:return g?T=>IA[T>>2]:T=>y0[T>>2];case 8:return g?T=>Dr[T>>3]:T=>sA[T>>3];default:throw new TypeError(`invalid integer width (${C}): ${f}`)}},mA=f=>{if(f===null)return"null";var C=typeof f;return C==="object"||C==="array"||C==="function"?f.toString():""+f},OA=(f,C,g,T)=>{if(C<g||C>T)throw new TypeError(`Passing a number "${mA(C)}" from JS side to C/C++ side to an argument of type "${f}", which is outside the valid range [${g}, ${T}]!`)},Ft=(f,C,g,T,N)=>{C=Dx(C);let Y=T===0n,X=x0=>x0;if(Y){let x0=g*8;X=t0=>BigInt.asUintN(x0,t0),N=X(N)}Nx(f,{name:C,fromWireType:X,toWireType:(x0,t0)=>{if(typeof t0=="number")t0=BigInt(t0);else if(typeof t0!="bigint")throw new TypeError(`Cannot convert "${mA(t0)}" to ${C}`);return OA(C,t0,T,N),t0},readValueFromPointer:ye(C,g,!Y),destructorFunction:null})},o=(f,C,g,T)=>{C=Dx(C),Nx(f,{name:C,fromWireType:function(N){return!!N},toWireType:function(N,Y){return Y?g:T},readValueFromPointer:function(N){return this.fromWireType(gx[N])},destructorFunction:null})},w0=f=>({count:f.count,deleteScheduled:f.deleteScheduled,preservePointerOnDelete:f.preservePointerOnDelete,ptr:f.ptr,ptrType:f.ptrType,smartPtr:f.smartPtr,smartPtrType:f.smartPtrType}),We=f=>{function C(g){return g.$$.ptrType.registeredClass.name}b0(C(f)+" instance already deleted")},GA=!1,hA=f=>{},vt=f=>{f.smartPtr?f.smartPtrType.rawDestructor(f.smartPtr):f.ptrType.registeredClass.rawDestructor(f.ptr)},ke=f=>{f.count.value-=1;var C=f.count.value===0;C&&vt(f)},br=(f,C,g)=>{if(C===g)return f;if(g.baseClass===void 0)return null;var T=br(f,C,g.baseClass);return T===null?null:g.downcast(T)},mr={},lt={},ct=(f,C)=>{for(C===void 0&&b0("ptr should not be undefined");f.baseClass;)C=f.upcast(C),f=f.baseClass;return C},ft=(f,C)=>(C=ct(f,C),lt[C]),we=(f,C)=>{(!C.ptrType||!C.ptr)&&k0("makeClassHandle requires ptr and ptrType");var g=!!C.smartPtrType,T=!!C.smartPtr;return g!==T&&k0("Both smartPtrType and smartPtr must be specified"),C.count={value:1},te(Object.create(f,{$$:{value:C,writable:!0}}))};function hr(f){var C=this.getPointee(f);if(!C)return this.destructor(f),null;var g=ft(this.registeredClass,C);if(g!==void 0){if(g.$$.count.value===0)return g.$$.ptr=C,g.$$.smartPtr=f,g.clone();var T=g.clone();return this.destructor(f),T}function N(){return this.isSmartPointer?we(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:C,smartPtrType:this,smartPtr:f}):we(this.registeredClass.instancePrototype,{ptrType:this,ptr:f})}var Y=this.registeredClass.getActualType(C),X=mr[Y];if(!X)return N.call(this);var x0;this.isConst?x0=X.constPointerType:x0=X.pointerType;var t0=br(C,this.registeredClass,x0.registeredClass);return t0===null?N.call(this):this.isSmartPointer?we(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:t0,smartPtrType:this,smartPtr:f}):we(x0.registeredClass.instancePrototype,{ptrType:x0,ptr:t0})}var te=f=>globalThis.FinalizationRegistry?(GA=new FinalizationRegistry(C=>{console.warn(C.leakWarning),ke(C.$$)}),te=C=>{var g=C.$$,T=!!g.smartPtr;if(T){var N={$$:g},Y=g.ptrType.registeredClass,X=new Error(`Embind found a leaked C++ instance ${Y.name} <${ux(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(
|
|
2178
|
+
Originally allocated`);"captureStackTrace"in Error&&Error.captureStackTrace(X,hr),N.leakWarning=X.stack.replace(/^Error: /,""),GA.register(C,N,C)}return C},hA=C=>GA.unregister(C),te(f)):(te=C=>C,f),_e=[],Et=()=>{for(;_e.length;){var f=_e.pop();f.$$.deleteScheduled=!1,f.delete()}},jr,Bt=()=>{let f=ne.prototype;Object.assign(f,{isAliasOf(g){if(!(this instanceof ne)||!(g instanceof ne))return!1;var T=this.$$.ptrType.registeredClass,N=this.$$.ptr;g.$$=g.$$;for(var Y=g.$$.ptrType.registeredClass,X=g.$$.ptr;T.baseClass;)N=T.upcast(N),T=T.baseClass;for(;Y.baseClass;)X=Y.upcast(X),Y=Y.baseClass;return T===Y&&N===X},clone(){if(this.$$.ptr||We(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var g=te(Object.create(Object.getPrototypeOf(this),{$$:{value:w0(this.$$)}}));return g.$$.count.value+=1,g.$$.deleteScheduled=!1,g},delete(){this.$$.ptr||We(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),hA(this),ke(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||We(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&b0("Object already scheduled for deletion"),_e.push(this),_e.length===1&&jr&&jr(Et),this.$$.deleteScheduled=!0,this}});let C=Symbol.dispose;C&&(f[C]=f.delete)};function ne(){}var Xe=(f,C)=>Object.defineProperty(C,"name",{value:f}),gr=(f,C,g)=>{if(f[C].overloadTable===void 0){var T=f[C];f[C]=function(...N){return f[C].overloadTable.hasOwnProperty(N.length)||b0(`Function '${g}' called with an invalid number of arguments (${N.length}) - expects one of (${f[C].overloadTable})!`),f[C].overloadTable[N.length].apply(this,N)},f[C].overloadTable=[],f[C].overloadTable[T.argCount]=T}},yr=(f,C,g)=>{n.hasOwnProperty(f)?((g===void 0||n[f].overloadTable!==void 0&&n[f].overloadTable[g]!==void 0)&&b0(`Cannot register public name '${f}' twice`),gr(n,f,f),n[f].overloadTable.hasOwnProperty(g)&&b0(`Cannot register multiple overloads of a function with the same number of arguments (${g})!`),n[f].overloadTable[g]=C):(n[f]=C,n[f].argCount=g)},Ct=48,kr=57,dt=f=>{k(typeof f=="string"),f=f.replace(/[^a-zA-Z0-9_]/g,"$");var C=f.charCodeAt(0);return C>=Ct&&C<=kr?`_${f}`:f};function ut(f,C,g,T,N,Y,X,x0){this.name=f,this.constructor=C,this.instancePrototype=g,this.rawDestructor=T,this.baseClass=N,this.getActualType=Y,this.upcast=X,this.downcast=x0,this.pureVirtualFunctions=[]}var Se=(f,C,g)=>{for(;C!==g;)C.upcast||b0(`Expected null or instance of ${g.name}, got an instance of ${C.name}`),f=C.upcast(f),C=C.baseClass;return f};function Dt(f,C){if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;C.$$||b0(`Cannot pass "${mA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=Se(C.$$.ptr,g,this.registeredClass);return T}function pt(f,C){var g;if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),this.isSmartPointer?(g=this.rawConstructor(),f!==null&&f.push(this.rawDestructor,g),g):0;(!C||!C.$$)&&b0(`Cannot pass "${mA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&C.$$.ptrType.isConst&&b0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);var T=C.$$.ptrType.registeredClass;if(g=Se(C.$$.ptr,T,this.registeredClass),this.isSmartPointer)switch(C.$$.smartPtr===void 0&&b0("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:C.$$.smartPtrType===this?g=C.$$.smartPtr:b0(`Cannot convert argument of type ${C.$$.smartPtrType?C.$$.smartPtrType.name:C.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:g=C.$$.smartPtr;break;case 2:if(C.$$.smartPtrType===this)g=C.$$.smartPtr;else{var N=C.clone();g=this.rawShare(g,D0.toHandle(()=>N.delete())),f!==null&&f.push(this.rawDestructor,g)}break;default:b0("Unsupported sharing policy")}return g}function wr(f,C){if(C===null)return this.isReference&&b0(`null is not a valid ${this.name}`),0;C.$$||b0(`Cannot pass "${mA(C)}" as a ${this.name}`),C.$$.ptr||b0(`Cannot pass deleted object as a pointer of type ${this.name}`),C.$$.ptrType.isConst&&b0(`Cannot convert argument of type ${C.$$.ptrType.name} to parameter type ${this.name}`);var g=C.$$.ptrType.registeredClass,T=Se(C.$$.ptr,g,this.registeredClass);return T}var _r=()=>{Object.assign(ie.prototype,{getPointee(f){return this.rawGetPointee&&(f=this.rawGetPointee(f)),f},destructor(f){this.rawDestructor?.(f)},readValueFromPointer:i0,fromWireType:hr})};function ie(f,C,g,T,N,Y,X,x0,t0,E0,p0){this.name=f,this.registeredClass=C,this.isReference=g,this.isConst=T,this.isSmartPointer=N,this.pointeeType=Y,this.sharingPolicy=X,this.rawGetPointee=x0,this.rawConstructor=t0,this.rawShare=E0,this.rawDestructor=p0,!N&&C.baseClass===void 0?T?(this.toWireType=Dt,this.destructorFunction=null):(this.toWireType=wr,this.destructorFunction=null):this.toWireType=pt}var Sr=(f,C,g)=>{n.hasOwnProperty(f)||k0("Replacing nonexistent public symbol"),n[f].overloadTable!==void 0&&g!==void 0?n[f].overloadTable[g]=C:(n[f]=C,n[f].argCount=g)},se=[],Ye=f=>{var C=se[f];return C||(se[f]=C=er.get(f)),k(er.get(f)==C,"table mirror is out of date"),C},Ix=(f,C,g=!1)=>{k(!g,"async bindings are only supported with JSPI"),f=Dx(f);function T(){var Y=Ye(C);return Y}var N=T();return typeof N!="function"&&b0(`unknown function pointer with signature ${f}: ${C}`),N};class bt extends Error{}var UA=f=>{var C=Wa(f),g=Dx(C);return ve(C),g},ae=(f,C)=>{var g=[],T={};function N(Y){if(!T[Y]&&!xA[Y]){if(oA[Y]){oA[Y].forEach(N);return}g.push(Y),T[Y]=!0}}throw C.forEach(N),new bt(`${f}: `+g.map(UA).join([", "]))},Qe=(f,C,g,T,N,Y,X,x0,t0,E0,p0,Z0,Y0)=>{p0=Dx(p0),Y=Ix(N,Y),x0&&(x0=Ix(X,x0)),E0&&(E0=Ix(t0,E0)),Y0=Ix(Z0,Y0);var Ax=dt(p0);yr(Ax,function(){ae(`Cannot construct ${p0} due to unbound types`,[T])}),bA([f,C,g],T?[T]:[],Lx=>{var wx;Lx=Lx[0];var vA,HA;T?(vA=Lx.registeredClass,HA=vA.instancePrototype):HA=ne.prototype;var gA=Xe(p0,function(..._i){if(Object.getPrototypeOf(this)!==Tr)throw new Cx(`Use 'new' to construct ${p0}`);if(JA.constructor_body===void 0)throw new Cx(`${p0} has no accessible constructor`);var eo=JA.constructor_body[_i.length];if(eo===void 0)throw new Cx(`Tried to invoke ctor of ${p0} with invalid number of parameters (${_i.length}) - expected (${Object.keys(JA.constructor_body).toString()}) parameters instead!`);return eo.apply(this,_i)}),Tr=Object.create(HA,{constructor:{value:gA}});gA.prototype=Tr;var JA=new ut(p0,gA,Tr,Y0,vA,Y,x0,E0);JA.baseClass&&((wx=JA.baseClass).__derivedClasses??(wx.__derivedClasses=[]),JA.baseClass.__derivedClasses.push(JA));var df=new ie(p0,JA,!0,!1,!1),xo=new ie(p0+"*",JA,!1,!1,!1),Ao=new ie(p0+" const*",JA,!1,!0,!1);return mr[f]={pointerType:xo,constPointerType:Ao},Sr(Ax,gA),[df,xo,Ao]})},px=(f,C)=>{for(var g=[],T=0;T<f;T++)g.push(y0[C+T*4>>2]);return g};function Pe(f){for(var C=1;C<f.length;++C)if(f[C]!==null&&f[C].destructorFunction===void 0)return!0;return!1}function oe(f,C,g,T,N){if(f<C||f>g){var Y=C==g?C:`${C} to ${g}`;N(`function ${T} called with ${f} arguments, expected ${Y}`)}}function a(f,C,g,T){var N=Pe(f),Y=f.length-2,X=[],x0=["fn"];C&&x0.push("thisWired");for(var t0=0;t0<Y;++t0)X.push(`arg${t0}`),x0.push(`arg${t0}Wired`);X=X.join(","),x0=x0.join(",");var E0=`return function (${X}) {
|
|
2179
2179
|
`;E0+=`checkArgCount(arguments.length, minArgs, maxArgs, humanName, throwBindingError);
|
|
2180
2180
|
`,N&&(E0+=`var destructors = [];
|
|
2181
2181
|
`);var p0=N?"destructors":"null",Z0=["humanName","throwBindingError","invoker","fn","runDestructors","fromRetWire","toClassParamWire"];C&&(E0+=`var thisWired = toClassParamWire(${p0}, this);
|
|
2182
|
-
`);for(var
|
|
2183
|
-
`,Z0.push(Y0)}if(E0+=(g
|
|
2182
|
+
`);for(var t0=0;t0<Y;++t0){var Y0=`toArg${t0}Wire`;E0+=`var arg${t0}Wired = ${Y0}(${p0}, arg${t0});
|
|
2183
|
+
`,Z0.push(Y0)}if(E0+=(g||T?"var rv = ":"")+`invoker(${x0});
|
|
2184
2184
|
`,N)E0+=`runDestructors(destructors);
|
|
2185
|
-
`;else for(var
|
|
2185
|
+
`;else for(var t0=C?1:2;t0<f.length;++t0){var Ax=t0===1?"thisWired":"arg"+(t0-2)+"Wired";f[t0].destructorFunction!==null&&(E0+=`${Ax}_dtor(${Ax});
|
|
2186
2186
|
`,Z0.push(`${Ax}_dtor`))}return g&&(E0+=`var ret = fromRetWire(rv);
|
|
2187
2187
|
return ret;
|
|
2188
2188
|
`),E0+=`}
|
|
2189
2189
|
`,Z0.push("checkArgCount","minArgs","maxArgs"),E0=`if (arguments.length !== ${Z0.length}){ throw new Error(humanName + "Expected ${Z0.length} closure arguments " + arguments.length + " given."); }
|
|
2190
|
-
${E0}`,new Function(Z0,E0)}function c(f){for(var C=f.length-2,g=f.length-1;g>=2&&f[g].optional;--g)C--;return C}function d(f,C,g
|
|
2190
|
+
${E0}`,new Function(Z0,E0)}function c(f){for(var C=f.length-2,g=f.length-1;g>=2&&f[g].optional;--g)C--;return C}function d(f,C,g,T,N,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,t0=Pe(C),E0=!C[0].isVoid,p0=X-2,Z0=c(C),Y0=C[0],Ax=C[1],Lx=[f,b0,T,N,LA,Y0.fromWireType.bind(Y0),Ax?.toWireType.bind(Ax)],wx=2;wx<X;++wx){var vA=C[wx];Lx.push(vA.toWireType.bind(vA))}if(!t0)for(var wx=x0?1:2;wx<C.length;++wx)C[wx].destructorFunction!==null&&Lx.push(C[wx].destructorFunction);Lx.push(oe,Z0,p0);var gA=a(C,x0,E0,Y)(...Lx);return Xe(f,gA)}var b=(f,C,g,T,N,Y)=>{k(C>0);var X=px(C,g);N=Ix(T,N),bA([],[f],x0=>{x0=x0[0];var t0=`constructor ${x0.name}`;if(x0.registeredClass.constructor_body===void 0&&(x0.registeredClass.constructor_body=[]),x0.registeredClass.constructor_body[C-1]!==void 0)throw new Cx(`Cannot register multiple constructors with identical number of parameters (${C-1}) for class '${x0.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return x0.registeredClass.constructor_body[C-1]=()=>{ae(`Cannot construct ${x0.name} due to unbound types`,X)},bA([],X,E0=>(E0.splice(1,0,null),x0.registeredClass.constructor_body[C-1]=d(t0,E0,null,N,Y),[])),[]})},y=(f,C,g)=>(f instanceof Object||b0(`${g} with invalid "this": ${f}`),f instanceof C.registeredClass.constructor||b0(`${g} incompatible with "this" of type ${f.constructor.name}`),f.$$.ptr||b0(`cannot call emscripten binding method ${g} on deleted object`),Se(f.$$.ptr,f.$$.ptrType.registeredClass,C.registeredClass)),P=(f,C,g,T,N,Y,X,x0,t0,E0)=>{C=Dx(C),N=Ix(T,N),bA([],[f],p0=>{p0=p0[0];var Z0=`${p0.name}.${C}`,Y0={get(){ae(`Cannot access ${Z0} due to unbound types`,[g,X])},enumerable:!0,configurable:!0};return t0?Y0.set=()=>ae(`Cannot access ${Z0} due to unbound types`,[g,X]):Y0.set=Ax=>b0(Z0+" is a read-only property"),Object.defineProperty(p0.registeredClass.instancePrototype,C,Y0),bA([],t0?[g,X]:[g],Ax=>{var Lx=Ax[0],wx={get(){var HA=y(this,p0,Z0+" getter");return Lx.fromWireType(N(Y,HA))},enumerable:!0};if(t0){t0=Ix(x0,t0);var vA=Ax[1];wx.set=function(HA){var gA=y(this,p0,Z0+" setter"),Tr=[];t0(E0,gA,vA.toWireType(Tr,HA)),LA(Tr)}}return Object.defineProperty(p0.registeredClass.instancePrototype,C,wx),[]}),[]})},U=[],V=[0,1,,1,null,1,!0,1,!1,1],F0=f=>{if(f>9&&--V[f+1]===0){k(V[f]!==void 0,"decref for unallocated handle");var C=V[f];V[f]=void 0,U.push(f)}},D0={toValue:f=>(f||b0(`Cannot use deleted val. handle = ${f}`),k(f===2||V[f]!==void 0&&f%2===0,`invalid handle: ${f}`),V[f]),toHandle:f=>{switch(f){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let C=U.pop()||V.length;return V[C]=f,V[C+1]=1,C}}}},X0={name:"emscripten::val",fromWireType:f=>{var C=D0.toValue(f);return F0(f),C},toWireType:(f,C)=>D0.toHandle(C),readValueFromPointer:i0,destructorFunction:null},M0=f=>Nx(f,X0),$0=(f,C)=>{switch(C){case 4:return function(g){return this.fromWireType(pr[g>>2])};case 8:return function(g){return this.fromWireType(ge[g>>3])};default:throw new TypeError(`invalid float width (${C}): ${f}`)}},m0=(f,C,g)=>{C=Dx(C),Nx(f,{name:C,fromWireType:T=>T,toWireType:(T,N)=>{if(typeof N!="number"&&typeof N!="boolean")throw new TypeError(`Cannot convert ${mA(N)} to ${C}`);return N},readValueFromPointer:$0(C,g),destructorFunction:null})},ix=f=>{f=f.trim();let C=f.indexOf("(");return C===-1?f:(k(f.endsWith(")"),"Parentheses for argument names should match."),f.slice(0,C))},yx=(f,C,g,T,N,Y,X,x0)=>{var t0=px(C,g);f=Dx(f),f=ix(f),N=Ix(T,N,X),yr(f,function(){ae(`Cannot call ${f} due to unbound types`,t0)},C-1),bA([],t0,E0=>{var p0=[E0[0],null].concat(E0.slice(1));return Sr(f,d(f,p0,null,N,Y,X),C-1),[]})},Mx=(f,C,g,T,N)=>{C=Dx(C);let Y=T===0,X=t0=>t0;if(Y){var x0=32-8*g;X=t0=>t0<<x0>>>x0,N=X(N)}Nx(f,{name:C,fromWireType:X,toWireType:(t0,E0)=>{if(typeof E0!="number"&&typeof E0!="boolean")throw new TypeError(`Cannot convert "${mA(E0)}" to ${C}`);return OA(C,E0,T,N),E0},readValueFromPointer:ye(C,g,T!==0),destructorFunction:null})},Gx=(f,C,g)=>{var T=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],N=T[C];function Y(X){var x0=y0[X>>2],t0=y0[X+4>>2];return new N(Zx.buffer,t0,x0)}g=Dx(g),Nx(f,{name:g,fromWireType:Y,readValueFromPointer:Y},{ignoreDuplicateRegistrations:!0})},Ux=(f,C,g,T)=>{if(k(typeof f=="string",`stringToUTF8Array expects a string (got ${typeof f})`),!(T>0))return 0;for(var N=g,Y=g+T-1,X=0;X<f.length;++X){var x0=f.codePointAt(X);if(x0<=127){if(g>=Y)break;C[g++]=x0}else if(x0<=2047){if(g+1>=Y)break;C[g++]=192|x0>>6,C[g++]=128|x0&63}else if(x0<=65535){if(g+2>=Y)break;C[g++]=224|x0>>12,C[g++]=128|x0>>6&63,C[g++]=128|x0&63}else{if(g+3>=Y)break;x0>1114111&&Jx(`Invalid Unicode code point ${ux(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-N},Fe=(f,C,g)=>(k(typeof g=="number","stringToUTF8 requires a third parameter that specifies the length of the output buffer"),Ux(f,gx,C,g)),Kx=f=>{for(var C=0,g=0;g<f.length;++g){var T=f.charCodeAt(g);T<=127?C++:T<=2047?C+=2:T>=55296&&T<=57343?(C+=4,++g):C+=3}return C},jA=globalThis.TextDecoder&&new TextDecoder,Ex=(f,C,g,T)=>{var N=C+g;if(T)return N;for(;f[C]&&!(C>=N);)++C;return C},rn=(f,C=0,g,T)=>{var N=Ex(f,C,g,T);if(N-C>16&&f.buffer&&jA)return jA.decode(f.subarray(C,N));for(var Y="";C<N;){var X=f[C++];if(!(X&128)){Y+=String.fromCharCode(X);continue}var x0=f[C++]&63;if((X&224)==192){Y+=String.fromCharCode((X&31)<<6|x0);continue}var t0=f[C++]&63;if((X&240)==224?X=(X&15)<<12|x0<<6|t0:((X&248)!=240&&Jx(`Invalid UTF-8 leading byte ${ux(X)} encountered when deserializing a UTF-8 string in wasm memory to a JS string!`),X=(X&7)<<18|x0<<12|t0<<6|f[C++]&63),X<65536)Y+=String.fromCharCode(X);else{var E0=X-65536;Y+=String.fromCharCode(55296|E0>>10,56320|E0&1023)}}return Y},Di=(f,C,g)=>(k(typeof f=="number",`UTF8ToString expects a number (got ${typeof f})`),f?rn(gx,f,C,g):""),pi=(f,C)=>{C=Dx(C);var g=!0;Nx(f,{name:C,fromWireType(T){var N=y0[T>>2],Y=T+4,X;if(g)X=Di(Y,N,!0);else{X="";for(var x0=0;x0<N;++x0)X+=String.fromCharCode(gx[Y+x0])}return ve(T),X},toWireType(T,N){N instanceof ArrayBuffer&&(N=new Uint8Array(N));var Y,X=typeof N=="string";X||ArrayBuffer.isView(N)&&N.BYTES_PER_ELEMENT==1||b0("Cannot pass non-string to std::string"),g&&X?Y=Kx(N):Y=N.length;var x0=ki(4+Y+1),t0=x0+4;if(y0[x0>>2]=Y,X)if(g)Fe(N,t0,Y+1);else for(var E0=0;E0<Y;++E0){var p0=N.charCodeAt(E0);p0>255&&(ve(x0),b0("String has UTF-16 code units that do not fit in 8 bits")),gx[t0+E0]=p0}else gx.set(N,t0);return T!==null&&T.push(ve,x0),x0},readValueFromPointer:i0,destructorFunction(T){ve(T)}})},tn=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,bi=(f,C,g)=>{k(f%2==0,"pointer passed to UTF16ToString must be 2-byte aligned");var T=f>>1,N=Ex(Fx,T,C/2,g);if(N-T>16&&tn)return tn.decode(Fx.subarray(T,N));for(var Y="",X=T;X<N;++X){var x0=Fx[X];Y+=String.fromCharCode(x0)}return Y},mi=(f,C,g)=>{if(k(C%2==0,"pointer passed to stringToUTF16 must be 2-byte aligned"),k(typeof g=="number","stringToUTF16 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<2)return 0;g-=2;for(var T=C,N=g<f.length*2?g/2:f.length,Y=0;Y<N;++Y){var X=f.charCodeAt(Y);NA[C>>1]=X,C+=2}return NA[C>>1]=0,C-T},nn=f=>f.length*2,mt=(f,C,g)=>{k(f%4==0,"pointer passed to UTF32ToString must be 2-byte aligned");for(var T="",N=f>>2,Y=0;!(Y>=C/4);Y++){var X=y0[N+Y];if(!X&&!g)break;T+=String.fromCodePoint(X)}return T},Ze=(f,C,g)=>{if(k(C%4==0,"pointer passed to stringToUTF32 must be 4-byte aligned"),k(typeof g=="number","stringToUTF32 requires a third parameter that specifies the length of the output buffer"),g??(g=2147483647),g<4)return 0;for(var T=C,N=T+g-4,Y=0;Y<f.length;++Y){var X=f.codePointAt(Y);if(X>65535&&Y++,IA[C>>2]=X,C+=4,C+4>N)break}return IA[C>>2]=0,C-T},s=f=>{for(var C=0,g=0;g<f.length;++g){var T=f.codePointAt(g);T>65535&&g++,C+=4}return C},l=(f,C,g)=>{g=Dx(g);var T,N,Y;C===2?(T=bi,N=mi,Y=nn):(k(C===4,"only 2-byte and 4-byte strings are currently supported"),T=mt,N=Ze,Y=s),Nx(f,{name:g,fromWireType:X=>{var x0=y0[X>>2],t0=T(X+4,x0*C,!0);return ve(X),t0},toWireType:(X,x0)=>{typeof x0!="string"&&b0(`Cannot pass non-string to C++ string type ${g}`);var t0=Y(x0),E0=ki(4+t0+C);return y0[E0>>2]=t0/C,N(x0,E0+4,t0+C),X!==null&&X.push(ve,E0),E0},readValueFromPointer:i0,destructorFunction(X){ve(X)}})},B=(f,C,g,T,N,Y)=>{nx[f]={name:Dx(C),rawConstructor:Ix(g,T),rawDestructor:Ix(N,Y),fields:[]}},p=(f,C,g,T,N,Y,X,x0,t0,E0)=>{nx[f].fields.push({fieldName:Dx(C),getterReturnType:g,getter:Ix(T,N),getterContext:Y,setterArgumentType:X,setter:Ix(x0,t0),setterContext:E0})},h=(f,C)=>{C=Dx(C),Nx(f,{isVoid:!0,name:C,fromWireType:()=>{},toWireType:(g,T)=>{}})},_=[],M=f=>{var C=_.length;return _.push(f),C},z=(f,C)=>{var g=xA[f];return g===void 0&&b0(`${C} has unknown type ${UA(f)}`),g},v0=(f,C)=>{for(var g=new Array(f),T=0;T<f;++T)g[T]=z(y0[C+T*4>>2],`parameter ${T}`);return g},S0=(f,C,g)=>{var T=[],N=f(T,g);return T.length&&(y0[C>>2]=D0.toHandle(T)),N},xx={},R0=f=>{var C=xx[f];return C===void 0?Dx(f):C},I0=(f,C,g)=>{var T=8,[N,...Y]=v0(f,C),X=N.toWireType.bind(N),x0=Y.map(Ax=>Ax.readValueFromPointer.bind(Ax));f--;var t0={toValue:D0.toValue},E0=x0.map((Ax,Lx)=>{var wx=`argFromPtr${Lx}`;return t0[wx]=Ax,`${wx}(args${Lx?"+"+Lx*T:""})`}),p0;switch(g){case 0:p0="toValue(handle)";break;case 2:p0="new (toValue(handle))";break;case 3:p0="";break;case 1:t0.getStringOrSymbol=R0,p0="toValue(handle)[getStringOrSymbol(methodName)]";break}p0+=`(${E0})`,N.isVoid||(t0.toReturnWire=X,t0.emval_returnValue=S0,p0=`return emval_returnValue(toReturnWire, destructorsRef, ${p0})`),p0=`return function (handle, methodName, destructorsRef, args) {
|
|
2191
2191
|
${p0}
|
|
2192
|
-
}`;var Z0=new Function(Object.keys(r0),p0)(...Object.values(r0)),Y0=`methodCaller<(${Q.map(Ax=>Ax.name)}) => ${N.name}>`;return I(We(Y0,Z0))},j0=f=>(f=R0(f),D0.toHandle(n[f])),dx=(f,C)=>(f=D0.toValue(f),C=D0.toValue(C),D0.toHandle(f[C])),Sx=f=>{f>9&&(V[f+1]+=1)},Kx=(f,C,g,$,N)=>_[f](C,g,$,N),Zx=f=>D0.toHandle(R0(f)),xA=f=>{var C=D0.toValue(f);MA(C),F0(f)},Ze=()=>2147483648,oA=(f,C)=>(k(C,"alignment argument is required"),Math.ceil(f/C)*C),Pe=f=>{var C=nn.buffer.byteLength,g=(f-C+65535)/65536|0;try{return nn.grow(g),ox(),1}catch($){R(`growMemory: Attempted to grow heap from ${C} bytes to ${f} bytes, but got error: ${$}`)}},kx=f=>{var C=gx.length;f>>>=0,k(f>C);var g=Ze();if(f>g)return R(`Cannot enlarge memory, requested ${f} bytes, but the limit is ${g} bytes!`),!1;for(var $=1;$<=4;$*=2){var N=C*(1+.2/$);N=Math.min(N,f+100663296);var Q=Math.min(g,oA(Math.max(f,N),65536)),Y=Pe(Q);if(Y)return!0}return R(`Failed to grow the heap from ${C} bytes to ${Q} bytes, not enough memory!`),!1},yc=f=>{cx("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},kc=9007199254740992,wc=-9007199254740992,_c=f=>f<wc||f>kc?NaN:Number(f);function Sc(f,C,g,$){return C=_c(C),70}var mi=[null,[],[]],hi=(f,C)=>{var g=mi[f];k(g),C===0||C===10?((f===1?O:R)(en(g)),g.length=0):g.push(C)},lb=()=>{za(0),mi[1].length&&hi(1,10),mi[2].length&&hi(2,10)},Pc=(f,C,g,$)=>{for(var N=0,Q=0;Q<g;Q++){var Y=y0[C>>2],Z=y0[C+4>>2];C+=8;for(var r0=0;r0<Z;r0++)hi(f,gx[Y+r0]);N+=Z}return y0[$>>2]=N,0},$c=()=>{if(E){var f=require("crypto");return C=>f.randomFillSync(C)}return C=>(crypto.getRandomValues(C),0)},Ua=f=>(Ua=$c())(f),Tc=(f,C)=>Ua(gx.subarray(f,f+C)),qc=(f,C)=>{if(xr)for(var g=f;g<f+C;g++){var $=Xe(g);$&&xr.set($,g)}},xr,Nc=f=>(xr||(xr=new WeakMap,qc(0,Ar.length)),xr.get(f)||0),ji=[],Ic=()=>{if(ji.length)return ji.pop();try{return Ar.grow(1)}catch(f){if(!(f instanceof RangeError))throw f;cx("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},gi=(f,C)=>{Ar.set(f,C),ie[f]=Ar.get(f)},Ha=f=>{let C=f.length;return k(C<16384),[C%128|128,C>>7,...f]},Mc={i:127,p:127,j:126,f:125,d:124,e:111},Ja=f=>Ha(Array.from(f,C=>{var g=Mc[C];return k(g,`invalid signature char: ${C}`),g})),Lc=(f,C)=>{var g=Uint8Array.of(0,97,115,109,1,0,0,0,1,...Ha([1,96,...Ja(C.slice(1)),...Ja(C[0]==="v"?"":C[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),$=new WebAssembly.Module(g),N=new WebAssembly.Instance($,{e:{f}}),Q=N.exports.f;return Q},Rc=(f,C)=>{k(typeof f<"u");var g=Nc(f);if(g)return g;var $=Ic();try{gi($,f)}catch(Q){if(!(Q instanceof TypeError))throw Q;k(typeof C<"u","Missing signature argument to addFunction: "+f);var N=Lc(f,C);gi($,N)}return xr.set(f,$),$},Oc=f=>{xr.delete(Xe(f)),gi(f,null),ji.push(f)};Bt(),wr(),k(V.length===10);{if(n.noExitRuntime&&(He=n.noExitRuntime),n.print&&(O=n.print),n.printErr&&(R=n.printErr),n.wasmBinary&&(t0=n.wasmBinary),n.FS_createDataFile=tA.createDataFile,n.FS_createPreloadedFile=tA.createPreloadedFile,Hc(),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()();n0("preInit")}n.addFunction=Rc,n.removeFunction=Oc;var Gc=["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"];Gc.forEach(s0);var Uc=["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"];Uc.forEach(l0);function Hc(){o0("fetchSettings"),o0("logReadFiles"),o0("loadSplitModule"),o0("onMalloc"),o0("onRealloc"),o0("onFree"),o0("onSbrkGrow")}var Ka=x0("___getTypeName"),yi=x0("_malloc"),Fe=x0("_free"),Jc=n._MdnCom_ESCHandler=x0("_MdnCom_ESCHandler"),Kc=n._MdnCom_Free=x0("_MdnCom_Free"),zc=n._MdnCom_RawRx=x0("_MdnCom_RawRx"),Vc=n._MdnCom_CryptoSelfTest=x0("_MdnCom_CryptoSelfTest"),Wc=n._MdnCom_SetCompanionKeypair=x0("_MdnCom_SetCompanionKeypair"),Xc=n._MdnCom_InitiateEcsHandshake=x0("_MdnCom_InitiateEcsHandshake"),Yc=n._MdnCom_SetSecDebug=x0("_MdnCom_SetSecDebug"),Qc=n._MdnCom_GetEcsState=x0("_MdnCom_GetEcsState"),Zc=n._MdnCom_ResetEcs=x0("_MdnCom_ResetEcs"),xf=n._MdnCom_RegisterEcsHandshakeCallback=x0("_MdnCom_RegisterEcsHandshakeCallback"),Af=n._MdnCom_Init=x0("_MdnCom_Init"),ef=n._SendUtoQuery=x0("_SendUtoQuery"),rf=n._SendUtoCmdExt=x0("_SendUtoCmdExt"),za=x0("_fflush"),ki=x0("_emscripten_stack_get_end"),tf=x0("_emscripten_stack_get_base"),nf=x0("_strerror"),Va=x0("_emscripten_stack_init"),sf=x0("_emscripten_stack_get_free"),af=x0("__emscripten_stack_restore"),of=x0("__emscripten_stack_alloc"),Ff=x0("_emscripten_stack_get_current"),vf=x0("memory"),lf=x0("__indirect_function_table"),nn=x0("wasmMemory"),Ar=x0("wasmTable");function cf(f){k(typeof f.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof f.malloc<"u","missing Wasm export: malloc"),k(typeof f.free<"u","missing Wasm export: free"),k(typeof f.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof f.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof f.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof f.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof f.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof f.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof f.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof f.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof f.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof f.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof f.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof f.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof f.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof f.fflush<"u","missing Wasm export: fflush"),k(typeof f.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof f.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof f.strerror<"u","missing Wasm export: strerror"),k(typeof f.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof f.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof f._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof f._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof f.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof f.memory<"u","missing Wasm export: memory"),k(typeof f.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),Ka=V0("__getTypeName",1),yi=V0("malloc",1),Fe=V0("free",1),Jc=n._MdnCom_ESCHandler=V0("MdnCom_ESCHandler",1),Kc=n._MdnCom_Free=V0("MdnCom_Free",1),zc=n._MdnCom_RawRx=V0("MdnCom_RawRx",1),Vc=n._MdnCom_CryptoSelfTest=V0("MdnCom_CryptoSelfTest",0),Wc=n._MdnCom_SetCompanionKeypair=V0("MdnCom_SetCompanionKeypair",2),Xc=n._MdnCom_InitiateEcsHandshake=V0("MdnCom_InitiateEcsHandshake",0),Yc=n._MdnCom_SetSecDebug=V0("MdnCom_SetSecDebug",1),Qc=n._MdnCom_GetEcsState=V0("MdnCom_GetEcsState",0),Zc=n._MdnCom_ResetEcs=V0("MdnCom_ResetEcs",0),xf=n._MdnCom_RegisterEcsHandshakeCallback=V0("MdnCom_RegisterEcsHandshakeCallback",1),Af=n._MdnCom_Init=V0("MdnCom_Init",2),ef=n._SendUtoQuery=V0("SendUtoQuery",2),rf=n._SendUtoCmdExt=V0("SendUtoCmdExt",4),za=V0("fflush",1),ki=f.emscripten_stack_get_end,tf=f.emscripten_stack_get_base,nf=V0("strerror",1),Va=f.emscripten_stack_init,sf=f.emscripten_stack_get_free,af=f._emscripten_stack_restore,of=f._emscripten_stack_alloc,Ff=f.emscripten_stack_get_current,vf=nn=f.memory,lf=Ar=f.__indirect_function_table}var Wa={__cxa_throw:ee,_abort_js:ot,_embind_finalize_value_object:Ke,_embind_register_bigint:Ft,_embind_register_bool:o,_embind_register_class:Ye,_embind_register_class_constructor:b,_embind_register_class_property:P,_embind_register_emval:M0,_embind_register_float:m0,_embind_register_function:yx,_embind_register_integer:Ix,_embind_register_memory_view:Ox,_embind_register_std_string:Di,_embind_register_std_wstring:l,_embind_register_value_object:B,_embind_register_value_object_field:p,_embind_register_void:h,_emval_create_invoker:N0,_emval_decref:F0,_emval_get_module_property:j0,_emval_get_property:dx,_emval_incref:Sx,_emval_invoke:Kx,_emval_new_cstring:Zx,_emval_run_destructors:xA,emscripten_resize_heap:kx,fd_close:yc,fd_seek:Sc,fd_write:Pc,random_get:Tc},Xa;function ff(){Va(),X()}function Ef(){ff(),Xx();function f(){k(!Xa),Xa=!0,n.calledRun=!0,!M&&($A(),C0?.(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"]'),TA())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),f()},1)):f(),W()}var Sr;Sr=await st(),Ef(),I0?i=n:i=new Promise((f,C)=>{C0=f,_0=C});for(let f of Object.keys(n))f in t||Object.defineProperty(t,f,{configurable:!0,get(){cx(`Access to module property ('${f}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),MF={};vB(MF,{API_STAMP_UNBOUNDED:()=>C8,AT_COMMANDS:()=>_x,AT_COMMAND_TIMEOUT_MS:()=>zx,ApiBadRequestError:()=>P0,ApiForbiddenError:()=>Un,ApiMethodNotAllowedError:()=>Vs,ApiNotFoundError:()=>fA,AtCommandHandler:()=>Md,AtDeviceError:()=>zs,AtHandlerDisposedError:()=>Ux,BACKFILL_PENDING_HEADER:()=>cv,BACKFILL_PENDING_VALUE:()=>fv,BLE_CONFIGURATION:()=>iu,BLE_SCAN_TIMEOUT_MS:()=>au,COMPANION_AUTH_ERROR_I18N_KEYS:()=>Od,COMPANION_CERT_PATH:()=>ls,COMPANION_PRIVATE_KEY_SIZE:()=>VF,COMPANION_PUBLIC_KEY_SIZE:()=>zF,CertApiError:()=>St,CompanionAuthErrorKind:()=>K8,CompanionAuthManager:()=>Rd,CompanionCertError:()=>H8,DDE_FIELD_UNUSED_INDEX:()=>f8,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>YF,DEFAULT_RECONNECT_OPTIONS:()=>Av,DLO_FILENAME:()=>Kr,DdeMapper:()=>Dd,DdeUnknownAliasError:()=>Ns,DdeUnknownContainerError:()=>Ie,DdeUnknownFieldError:()=>Js,DdeWriteForbiddenError:()=>Tt,DebugLogLevel:()=>v8,DebugMaster:()=>sC,DebugSync:()=>R8,DeviceManager:()=>tu,DeviceState:()=>xv,FW_FILENAME:()=>Ss,LIC_API_BASE_URL:()=>N8,LOCAL_API_LIFECYCLE_FLAGS:()=>Fr,LOCAL_API_SITE_MASK:()=>js,LOCAL_API_SITE_MASTER_KEYS:()=>Rt,LegacySync:()=>M8,LocalDataManager:()=>X8,MANUFACTURER_CODE:()=>su,MS_1999_12_31:()=>cs,MemoryStorage:()=>oC,Mutex:()=>$s,OfflineSyncManager:()=>wd,RAW_TERMINAL_PATTERN:()=>G8,RESPONSE_PATTERNS:()=>K0,Rm2mStateManager:()=>Au,SYNC_LOGIC_MASK:()=>i8,SyncManager:()=>Nd,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>O8,USB_CONFIGURATION:()=>nu,UplinkMode:()=>a8,UtoCommand:()=>ZF,UtoESC:()=>s8,UtoFileFlag:()=>t8,UtoFileFlagInt:()=>n8,UtoFileType:()=>e8,UtoFlag:()=>r8,UtoMaster:()=>F8,UtoResult:()=>x8,UtoSplitTag:()=>A8,UtoTag:()=>Ps,WebSocketBridge:()=>Ks,applyBlueprintNames:()=>T8,applyDecpl:()=>RC,assertValidRequestStamps:()=>Xr,base64ToBytes:()=>vs,base64UrlToBytes:()=>RB,buildBlueprintNameMap:()=>bs,bytesToBase64:()=>_n,bytesToBase64Url:()=>ks,checkDeviceCapabilities:()=>Jd,computeDisplayValue:()=>W8,computeDisplayValues:()=>hs,consoleLogger:()=>QA,convertToString:()=>fs,crc16Modbus:()=>KB,crc32Ethernet:()=>_s,createDebugBufferState:()=>U8,createLocalApiHandler:()=>dD,createLocalApiSession:()=>Xs,createSiteInfoFromDde:()=>gD,dbStampToStamp40:()=>YA,decodeContainer:()=>us,decodeFloatm16:()=>g8,decodeLifecycleFlags:()=>nv,decodeRm2mStateResponse:()=>Z8,decodeUplinkState:()=>Y8,deriveDeviceLifecycleMirror:()=>iv,encodeContainer:()=>ps,encodeFloatm16:()=>y8,encodeLifecycleFlags:()=>Qs,encodeNulPaddedJson:()=>rv,encodeSerialNumber:()=>zB,extractBits:()=>Tn,formatApiStamp:()=>zr,generateCompanionKeypair:()=>Fs,getDeviceAssignment:()=>I8,isCertValid:()=>ws,isDevicePushableTag:()=>E8,isUnusedField:()=>Be,isValidStamp:()=>Ws,mapLocalApiError:()=>yv,nullLogger:()=>Sn,parseApiStamp:()=>Wr,parseBlueprint:()=>bd,parseDde:()=>NC,parseMetadataResponse:()=>z8,parseNulPaddedJson:()=>Lt,parseRm2mStateParams:()=>Q8,parseSerialNumberFromDataView:()=>VB,parseValuesResponse:()=>V8,requestCompanionCert:()=>QF,resolveAuthErrorKind:()=>Gd,resolveBlueprintNameMap:()=>Mt,resolveContainerTag:()=>$n,resolveTagForContainer:()=>wt,resolveTagInModel:()=>lC,routeLocalApiRequest:()=>jv,spreadBits:()=>u8,stamp40ToDbHex:()=>cA,syncLogic:()=>Pn,systemTimeSource:()=>It,toHex:()=>Ne,toUint8Array:()=>Es,utoStack:()=>z0});kv.exports=cB(MF);var LF=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:yn,n:jn,Gx:lF,Gy:cF,a:zi,d:Vi,h:EB}=LF,_t=32,BB=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},$x=(x="")=>{let A=new Error(x);throw BB(A,$x),A},CB=x=>typeof x=="bigint",dB=x=>typeof x=="string",uB=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,vr=(x,A,e="")=>{let r=uB(x),t=x?.length,i=A!==void 0;if(!r||i&&t!==A){let n=e&&`"${e}" `,F=i?` of length ${A}`:"",v=r?`length=${t}`:`type=${typeof x}`,E=n+"expected Uint8Array"+F+", got "+v;throw r?new RangeError(E):new TypeError(E)}return x},Rn=x=>new Uint8Array(x),gs=x=>Uint8Array.from(x),RF=(x,A)=>x.toString(16).padStart(A,"0"),OF=x=>Array.from(vr(x)).map(A=>RF(A,2)).join(""),Ee={_0:48,_9:57,A:65,F:70,a:97,f:102},fF=x=>{if(x>=Ee._0&&x<=Ee._9)return x-Ee._0;if(x>=Ee.A&&x<=Ee.F)return x-(Ee.A-10);if(x>=Ee.a&&x<=Ee.f)return x-(Ee.a-10)},GF=x=>{let A="hex invalid";if(!dB(x))return $x(A);let e=x.length,r=e/2;if(e%2)return $x(A);let t=Rn(r);for(let i=0,n=0;i<r;i++,n+=2){let F=fF(x.charCodeAt(n)),v=fF(x.charCodeAt(n+1));if(F===void 0||v===void 0)return $x(A);t[i]=F*16+v}return t},UF=()=>globalThis?.crypto,DB=()=>UF()?.subtle??$x("crypto.subtle must be defined, consider polyfill"),HF=(...x)=>{let A=0;for(let t of x)A+=vr(t).length;let e=Rn(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},pB=(x=_t)=>UF().getRandomValues(Rn(x)),kn=BigInt,nr=(x,A,e,r="bad number: out of range")=>{if(!CB(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},ax=(x,A=yn)=>{let e=x%A;return e>=0n?e:A+e},EF=(1n<<255n)-1n,d0=x=>{x<0n&&$x("negative coordinate");let A=(x>>255n)*19n+(x&EF);return A=(A>>255n)*19n+(A&EF),A%yn},bB=x=>ax(x,jn),mB=(x,A)=>{(x===0n||A<=0n)&&$x("no inverse n="+x+" mod="+A);let e=ax(x,A),r=A,t=0n,i=1n,n=1n,F=0n;for(;e!==0n;){let v=r/e,E=r%e,u=t-n*v,D=i-F*v;r=e,e=E,t=n,i=F,n=u,F=D}return r===1n?ax(t,A):$x("no inverse")},hB=x=>{let A=TB[x];return typeof A!="function"&&$x("hashes."+x+" not set"),A},jB=x=>vr(x,64,"digest"),Wi=x=>x instanceof Nt?x:$x("Point expected"),as=2n**256n,ys=class ir{constructor(A,e,r,t){A0(this,"X"),A0(this,"Y"),A0(this,"Z"),A0(this,"T");let i=as;this.X=nr(A,0n,i),this.Y=nr(e,0n,i),this.Z=nr(r,1n,i),this.T=nr(t,0n,i),Object.freeze(this)}static CURVE(){return LF}static fromAffine(A){return new ir(A.x,A.y,1n,d0(A.x*A.y))}static fromBytes(A,e=!1){let r=Vi,t=gs(vr(A,_t)),i=A[31];t[31]=i&-129;let n=JF(t);nr(n,0n,e?as:yn);let v=d0(n*n),E=ax(v-1n),u=d0(r*v+1n),{isValid:D,value:m}=kB(E,u);D||$x("bad point: y not sqrt");let w=(m&1n)===1n,j=(i&128)!==0;return!e&&m===0n&&j&&$x("bad point: x==0, isLastByteOdd"),j!==w&&(m=ax(-m)),new ir(m,n,1n,d0(m*n))}static fromHex(A,e){return ir.fromBytes(GF(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=zi,e=Vi,r=this;if(r.is0())return $x("bad point: ZERO");let{X:t,Y:i,Z:n,T:F}=r,v=d0(t*t),E=d0(i*i),u=d0(n*n),D=d0(u*u),m=d0(v*A),w=d0(u*(m+E)),j=ax(D+d0(e*d0(v*E)));if(w!==j)return $x("bad point: equation left != right (1)");let S=d0(t*i),T=d0(n*F);return S!==T?$x("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:i,Y:n,Z:F}=Wi(A),v=d0(e*F),E=d0(i*t),u=d0(r*F),D=d0(n*t);return v===E&&u===D}is0(){return this.equals(ar)}negate(){return new ir(ax(-this.X),this.Y,this.Z,ax(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=zi,i=d0(A*A),n=d0(e*e),F=d0(2n*r*r),v=d0(t*i),E=ax(A+e),u=ax(d0(E*E)-i-n),D=ax(v+n),m=ax(D-F),w=ax(v-n),j=d0(u*m),S=d0(D*w),T=d0(u*w),q=d0(m*D);return new ir(j,S,q,T)}add(A){let{X:e,Y:r,Z:t,T:i}=this,{X:n,Y:F,Z:v,T:E}=Wi(A),u=zi,D=Vi,m=d0(e*n),w=d0(r*F),j=d0(d0(i*D)*E),S=d0(t*v),T=ax(d0(ax(e+r)*ax(n+F))-m-w),q=ax(S-j),O=ax(S+j),R=ax(w-d0(u*m)),t0=d0(T*q),M=d0(O*R),k=d0(T*R),L=d0(q*O);return new ir(t0,M,L,k)}subtract(A){return this.add(Wi(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(nr(A,1n,jn),!e&&this.is0()))return ar;if(A===1n)return this;if(this.equals(Vr))return LB(A).p;let r=ar,t=Vr;for(let i=this;A>0n;i=i.double(),A>>=1n)A&1n?r=r.add(i):e&&(t=t.add(i));return r}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:e,Z:r}=this;if(this.equals(ar))return{x:0n,y:1n};let t=mB(r,yn);d0(r*t)!==1n&&$x("invalid inverse");let i=d0(A*t),n=d0(e*t);return{x:i,y:n}}toBytes(){let{x:A,y:e}=this.toAffine(),r=gB(e);return r[31]|=A&1n?128:0,r}toHex(){return OF(this.toBytes())}clearCofactor(){return this.multiply(kn(EB),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(jn/2n,!1).double();return jn%2n&&(A=A.add(this)),A.is0()}};A0(ys,"BASE");A0(ys,"ZERO");var Nt=ys,Vr=new Nt(lF,cF,1n,ax(lF*cF)),ar=new Nt(0n,1n,1n,0n);Nt.BASE=Vr;Nt.ZERO=ar;var gB=x=>GF(RF(nr(x,0n,as),64)).reverse(),JF=x=>kn("0x"+OF(gs(vr(x)).reverse())),XA=(x,A)=>{let e=x;for(;A-- >0n;)e=d0(e*e);return e},yB=x=>{let A=d0(x*x),e=d0(A*x),r=d0(XA(e,2n)*e),t=d0(XA(r,1n)*x),i=d0(XA(t,5n)*t),n=d0(XA(i,10n)*i),F=d0(XA(n,20n)*n),v=d0(XA(F,40n)*F),E=d0(XA(v,80n)*v),u=d0(XA(E,80n)*v),D=d0(XA(u,10n)*i);return{pow_p_5_8:d0(XA(D,2n)*x),b2:e}},BF=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,kB=(x,A)=>{let e=d0(A*d0(A*A)),r=d0(d0(e*e)*A),t=yB(d0(x*r)).pow_p_5_8,i=d0(x*d0(e*t)),n=d0(A*d0(i*i)),F=i,v=d0(i*BF),E=n===x,u=n===ax(-x),D=n===ax(-x*BF);return E&&(i=F),(u||D)&&(i=v),(ax(i)&1n)===1n&&(i=ax(-i)),{isValid:E||u,value:i}},wB=x=>bB(JF(x)),_B=(...x)=>Promise.resolve(hB("sha512Async")(HF(...x))).then(jB),SB=x=>{let A=gs(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=wB(e),i=Vr.multiply(t),n=i.toBytes();return{head:e,prefix:r,scalar:t,point:i,pointBytes:n}},PB=x=>_B(vr(x,_t)).then(SB),$B=x=>PB(x).then(A=>A.pointBytes),TB={sha512Async:async x=>{let A=DB(),e=HF(x);return Rn(await A.digest("SHA-512",e.buffer))},sha512:void 0},qB=x=>(x=x===void 0?pB(_t):x,vr(x,_t)),NB=async x=>{let A=qB(x),e=await $B(A);return{secretKey:A,publicKey:e}},wn=8,IB=256,KF=Math.ceil(IB/wn)+1,os=2**(wn-1),MB=()=>{let x=[],A=Vr,e=A;for(let r=0;r<KF;r++){e=A,x.push(e);for(let t=1;t<os;t++)e=e.add(A),x.push(e);A=e.double()}return x},CF=void 0,dF=(x,A)=>{let e=A.negate();return x?e:A},LB=x=>{let A=CF||(CF=MB()),e=ar,r=Vr,t=2**wn,i=t,n=kn(t-1),F=kn(wn);for(let v=0;v<KF;v++){let E=Number(x&n);x>>=F,E>os&&(E-=i,x+=1n);let u=v*os,D=u,m=u+Math.abs(E)-1,w=v%2!==0,j=E<0;E===0?r=r.add(dF(w,A[D])):e=e.add(dF(j,A[m]))}return x!==0n&&$x("invalid wnaf"),{p:e,f:r}},zF=32,VF=64;async function Fs(){let{secretKey:x,publicKey:A}=await NB(),e=new Uint8Array(VF);return e.set(x,0),e.set(A,zF),{publicKey:A,privateKey:e}}function _n(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function vs(x,A="base64 value"){return XF(WF(x,A))}function WF(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function ks(x){return _n(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function RB(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return XF(WF(r,A))}function XF(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var St=class extends Error{constructor(x,A,e){super(e),A0(this,"httpStatus",x),A0(this,"code",A),this.name="CertApiError"}},ls="/api/1/companion/cert",YF=10080*60*1e3,uF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function QF(x,A){let e=x.apiHost.replace(/\/+$/,""),r=uF?ls:e+ls,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};uF&&e&&(t["x-target-host"]=e);let i=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:ks(A.publicKey),subject:A.subject})});if(!i.ok){let F="unknown_error",v=i.statusText||`Cert API request failed (${i.status})`;try{let E=await i.json();E.code&&(F=E.code),E.message&&(v=E.message)}catch{}throw new St(i.status,F,v)}let n=await i.json();if(!n.certificate||!n.notAfter)throw new St(i.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function ws(x,A=YF){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var OB=require("events"),GB=lB(fB(),1),Dn="[device-master]",QA={debug:(x,...A)=>console.debug(Dn,x,...A),info:(x,...A)=>console.info(Dn,x,...A),warn:(x,...A)=>console.warn(Dn,x,...A),error:(x,...A)=>console.error(Dn,x,...A)},Sn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},UB=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 _s(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^UB[(e^x[r])&255];return(e^-1)>>>0}var cs=Date.UTC(1999,11,31,0,0,0);function fs(x,A,e=" "){let r=""+x,t=Math.max(0,Math.abs(A)-r.length),i=e.repeat(t);return A<0?r+i:i+r}function Ne(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function Es(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 HB=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]),JB=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 KB(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let i=(r^x[t])&255;r=(e^HB[i])&255,e=JB[i]}return 256*e|r}function zB(x){if(x.length!==16)throw new Error("Serial number hex must be exactly 16 characters long.");let A=new ArrayBuffer(8),e=new DataView(A),r=x.substring(8,16),t=x.substring(0,8),i=parseInt(r,16),n=parseInt(t,16);return e.setUint32(0,i,!0),e.setUint32(4,n,!0),e}function VB(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 WB=[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],XB=new Map(WB.map((x,A)=>[x,128+A]));function YB(x){return x<=127||x>=160&&x<=255?x:XB.get(x)??63}var Kr="uto_script.dat",Ss="uto_fw.dat",ZF=(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))(ZF||{}),x8=(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))(x8||{}),Ps=(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))(Ps||{}),A8=(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))(A8||{}),e8=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(e8||{}),r8=(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))(r8||{}),t8=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(t8||{}),n8=(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))(n8||{}),i8=97;function Pn(x){return x&i8}var s8=(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))(s8||{}),a8=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(a8||{}),DF={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},QB=class{constructor(){}resultToString(x){x|=0;let A=x&256?"+DISC":"";switch(x&255){case 0:return"OK"+A;case 1:return"E_TAG"+A;case 2:return"E_DLEN"+A;case 3:return"E_DATA"+A;case 4:return"E_STAMP"+A;case 5:return"E_EOD"+A;case 6:return"E_CMD"+A;case 7:return"E_CMDDENIED"+A;case 8:return"E_FULL"+A;case 9:return"E_NOTSUPPORTED"+A;case 10:return"E_OLDDATA"+A;case 11:return"E_STORAGE"+A;case 12:return"E_STORAGE"+A}return"E_0x"+Ne(x,4)+A}commandToString(x){switch(x|=0,x){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+Ne(x,2)}tagToString(x){x|=0;let A=Object.entries(Ps).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+Ne(x,4)}containerIdToTag(x,A){let e=DF[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(DF).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)+cs}msToStamp40(x){let A=(x-cs)/1e3,e=Math.trunc(A),r=Math.round((A-e)*256);return e*256+r}stamp40ToDate(x){return new Date(this.stamp40ToMS(x))}utf8Unpack(x,A,e){let r=new TextDecoder("utf-8"),t=0;for(;t<e&&x.getUint8(A+t);)t++;let i=new Uint8Array(x.buffer,A,t);return r.decode(i)}ansiUnpack(x,A,e,r){try{let t=Es(x),i=new TextDecoder(r),n=0;for(;n<e&&t[A+n];)n++;return i.decode(t.slice(A,A+n))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${r}"`}}cp1252Unpack(x,A,e){return this.ansiUnpack(x,A,e,"cp1252")}ansiPack(x,A,e,r){let t=Es(x);t.fill(0,A,A+e);for(let i=0;i<e&&i<r.length;i++)t[A+i]=YB(r.charCodeAt(i))}cp1252Pack(x,A,e,r){return this.ansiPack(x,A,e,r)}dataFrameNotNull(x){if(!x.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(0),r=A.getUint16(2),t=A.getUint16(4),i=A.getUint32(6),n=(Ne(i,8)+Ne(x.dwDevSN,8)).toUpperCase(),F=[];for(let v=0;v<(A.byteLength-10)/5;v++){let E=A.getUint8(10+v*5+2),u=A.getUint16(10+v*5);F.push({wTag:u,sTag:this.tagToString(u),size:A.getUint16(10+v*5+3),flags:{historic:!!(E&1),single:!(E&1),up:!!(E&2),down:!!(E&4),variableLength:!!(E&8),setValue:!!(E&16)}})}return{serialNumber:n,class:Ne(e,4),firmwareVersion:`${fs(t>>8,2)}v${fs(t&255,3,"0")}`,flags:Ne(r,4),utos:F}}decode_STAMPS(x){this.dataFrameNotNull(x);let A=x.data,e={contextId:A.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let r=0;r<(A.byteLength-8)/5;r++)e.stamps.push(A.getUint32(8+r*5+0)*256+A.getUint8(8+r*5+4));return e}decode_CONTEXT(x){this.dataFrameNotNull(x);let A=x.data;return{id:A.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(A,8,50)}}encode_CONTEXT(x){let A=new Uint8Array(58),e=new DataView(A.buffer);return e.setBigUint64(0,BigInt("0x"+x.id),!0),this.cp1252Pack(e,8,50,x.name),A}decode_FILEMAP(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(13,!1),r={stamp:A.getUint32(0,!1)*256+A.getUint8(4),size:A.getUint32(5,!1),crc32:A.getUint32(9,!1),flags:{read:!!(e&1),write:!!(e&2),node:!!(e&4),system:!!(e&8),extra:e&-16},_flags:e,name:this.cp1252Unpack(A,15,A.byteLength-15)};if(r.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+r.flags.extra);return r}encode_FILEMAP(x){if(x.flags){let r=0;x.flags.extra&&(r|=x.flags.extra|0),x.flags.read&&(r|=1),x.flags.write&&(r|=2),x.flags.node&&(r|=4),x.flags.system&&(r|=8),x._flags=r}let A=new Uint8Array(15+x.name.length+1),e=new DataView(A.buffer);return e.setUint32(0,Math.trunc(x.stamp/256),!1),e.setUint8(4,x.stamp&255),e.setUint32(5,x.size,!1),e.setUint32(9,x.crc32,!1),e.setUint16(13,x._flags,!1),this.cp1252Pack(e,15,256,x.name),A}decode_RM2M_STATE(x){this.dataFrameNotNull(x);let A=x.data;return{rssi:A.getInt8(0),uplinkMode:A.getUint8(1),imei:this.cp1252Unpack(A,61,15),hardwareId:this.cp1252Unpack(A,96,50),sim:{id:this.cp1252Unpack(A,2,15),apn:this.cp1252Unpack(A,17,40),iccId:this.cp1252Unpack(A,76,20)},network:{mcc:A.getUint16(57),mnc:A.getUint16(59)}}}},z0=new QB,It={nowMs:()=>Date.now()},$s=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()}}},pF=new WeakMap;function o8(x,A){let r=(pF.get(x)??Promise.resolve()).then(()=>ZB(x,A));return pF.set(x,r.catch(()=>{})),r}async function ZB(x,A){x.interface&&x.interface==="ble"?await xC(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function xC(x,A,e=23){let r=new Uint8Array(A),t=e-3;for(let i=0;i<r.byteLength;i+=t){let n=r.slice(i,i+t);await x(n.buffer)}}var bF=15e3,AC=500,eC=3,rC=1024;function mF(x){return x?.utos.find(e=>e.wTag===3)?.size||rC}var F8=class gn extends OB.EventEmitter{constructor(A,e,r=It){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",mF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new $s("UTO-Port"),this.transport=A,this.logger=e??QA,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,GB.default)({print:i=>{this.logger.info(`[mdnCom] ${i}`),this.emit("mdnCom",i)},printErr:i=>{this.logger.error(`[mdnCom] ${i}`),this.emit("mdnComError",i)}});let A=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let e=this.mdnComInterface.addFunction(()=>{if(this.txStream){let i=this.txStream();this.lastTxWrite=o8(this.transport,i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let i=this.rxUto(),n=this.parseUtoFrame(i);this.emit("utoFrame",n)}},"v");await A(e,r);let t=this.mdnComInterface.addFunction(i=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${i} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let n=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,n({success:i===0,resultCode:i})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async i=>{this.receiveUto&&await this.receiveUto(new Uint8Array(i))}),await this.requestDeviceInfo().catch()}async dispose(A){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!A){let e=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(e.message),e}try{this.logger.info("[dispose] requesting context for encrypted close");let e=await this.requestContext();e?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(e)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(e){this.logger.error(`[dispose] error during context round trip: ${e}`)}try{this.logger.info("[dispose] sending connection close"),await A.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(e){this.logger.error(`[dispose] error sending connection close: ${e}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(e){this.logger.error(`[dispose] error resetting WASM ECS state: ${e}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(A){return{dwDevSN:A.vDevID_u32,bCmd:A.vCmd_u8,stamp:A.vStamp_s.u32SysTime*256+A.vStamp_s.u8SysTime,wTag:A.vTag_u16&255,wTagFull:A.vTag_u16,sTag:z0.resultToString(A.vTag_u16),_dbg:A.vDevID_u32.toString(16),bVersion:1,_dlen:A.vDLen_u16,bRes:A.vRes_u8,bSeq:A.vSeq_u8,data:A.vData_pu8.length?new DataView(A.vData_pu8.buffer,A.vData_pu8.byteOffset,A.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(A,e=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let r=Math.trunc(e/256),t=e&255;return await this.sendWithRetry((i,n,F)=>{if(i.bCmd===0){let v=this.resultVerdict(i);v===5||v===0||v===4?n(null):F(i);return}if(i.wTagFull!==A)return F(i);n(i)},async()=>{this.sendUto(A,{u32SysTime:r,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${A.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}static resultCode(A){return{verdict:A.wTagFull&-257,disc:(A.wTagFull&256)!==0}}resultVerdict(A){let{verdict:e,disc:r}=gn.resultCode(A);return r&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${A.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",A.wTagFull)),e}static concatChunks(A){let e=A.reduce((i,n)=>i+n.length,0),r=new Uint8Array(e),t=0;for(let i of A)r.set(i,t),t+=i.length;return r}sendWithRetry(A,e,r){let t=r?.timeoutMs??AC,i=r?.maxRetries??eC;return new Promise((n,F)=>{let v=0,E=!1,u=()=>{},D,m={resolve:j=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),n(j)},reject:j=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),F(j)}},w=async()=>{u=j=>A(j,m.resolve,m.reject),this.once("utoFrame",u);try{await e()}catch(j){if(E)return;this.removeListener("utoFrame",u),F(j);return}E||(D=setTimeout(()=>{if(this.removeListener("utoFrame",u),v>=i){F(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${i} retries`));return}v++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${v}/${i})`),w()},t))};w()})}createFrameIdleGuard(A,e,r){let t,i=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{i(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),r()},e)},clear:i}}async requestHistoricUtos(A,e,r,t=bF,i=0,n){return await this.utoPortLock.requestLock(),new Promise((F,v)=>{if(!this.sendUto)return F([]);let E=[],u=0,D=Promise.resolve(),m=T=>{if(w.arm(),T.bCmd===0){w.clear(),this.settleHistoricTransfer(T,E,n,D,F,v);return}if(T.wTagFull===A&&T.data&&(E.push({stamp40:T.stamp,data:this.copyDataView(T.data)}),r?.(++u),n&&i>0&&E.length>=i)){let q=E.splice(0);D=D.then(()=>n(q))}this.once("utoFrame",m)},w=this.createFrameIdleGuard(m,t,()=>v(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${u} records received)`)));this.once("utoFrame",m),w.arm();let j=Math.trunc(e/256),S=e&255;this.sendUto(A,{u32SysTime:j,u8SysTime:S})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,e,r,t,i,n){let F=this.resultVerdict(A);if(!(F===5||F===0||F===4)){t.then(()=>n(A)).catch(n);return}let E=r&&e.length>0?e.splice(0):null;(E?t.then(()=>r(E)):t).then(()=>i(r?[]:e)).catch(n)}async requestFile(A,e,r=bF){return await this.utoPortLock.requestLock(),new Promise((t,i)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let n=[],F=0,v=D=>{if(E.arm(),D.bCmd===0){E.clear();let m=this.resultVerdict(D);m===5||m===0?t(gn.concatChunks(n)):i(D);return}if(D.bCmd===3&&D.data){let m=this.copyDataView(D.data);n.push(m),F+=m.byteLength,e?.(F)}this.once("utoFrame",v)},E=this.createFrameIdleGuard(v,r,()=>i(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${A}", ${F} bytes received)`)));this.once("utoFrame",v),E.arm();let u=new Uint8Array(A.length+1);for(let D=0;D<A.length;D++)u[D]=A.charCodeAt(D)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},u)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(A){let e=new Uint8Array(A.length+1);for(let r=0;r<A.length;r++)e[r]=A.charCodeAt(r)&255;await this.sendUTOCmdExt(10,3,e,0)}async sendSetValue(A,e,r){this.isInitialized();let t=new Uint8Array(e.length);z0.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,A,t,r),{outcome:"ok",resultCode:0}}catch(i){let n=i;if(n&&n.bCmd===0&&typeof n.wTagFull=="number"){let{verdict:F}=gn.resultCode(n),v=n.wTagFull;return F===4?{outcome:"stamp",resultCode:v}:F===7||F===9?{outcome:"denied",resultCode:v}:{outcome:"error",resultCode:v}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${i}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),e=A?z0.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=mF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?z0.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,z0.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},i=n=>this.handleFileListFrame(n,t,A,e,r,i);this.once("utoFrame",i),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,e,r,t,i,n){if(A.bCmd===0){let F=this.resultVerdict(A);F===5||F===0?t(r?e[r]?{[r]:e[r]}:{}:e):i(A);return}try{let F=z0.decode_FILEMAP(A);e[F.name]=F}catch(F){i(F);return}this.once("utoFrame",n)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?z0.decode_STAMPS(A):null}async sendFile(A,e,r,t){let i=e;A===2&&(i=new Uint8Array(e.length+1),i.set(new Uint8Array(e),1),i[0]=A);let n={name:t??Kr,stamp:r===0?0:z0.msToStamp40(r??this.timeSource.nowMs()),size:i.length,_flags:11,crc32:_s(i)},F=z0.encode_FILEMAP(n);if(!await this.sendUTOCmdExt(9,3,F,0)){let E=this.fileChunkSize;for(let u=0;u<i.length;u+=E){let D=Math.min(E,i.byteLength-u),m=new Uint8Array(i.buffer,i.byteOffset+u,D);await this.sendUTOCmdExt(3,3,m,u*256);let j=(u+D)/i.byteLength*100;this.emit("installing",j.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,e,r,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let i=t??this.utoStampNow40,n=Math.trunc(i/256),F=i&255;return await this.sendWithRetry((v,E,u)=>{if(v.bCmd!==0){u(v);return}this.resultVerdict(v)===0?E(null):u(v)},async()=>{this.SendUtoCmdExt(A,e,{u32SysTime:n,u8SysTime:F},r),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${A} tag=0x${e.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(A,e,r){return this.sendUTOCmdExt(3,A,e,r)}packOtpFlashString(A){let e=new Uint8Array(1024);return z0.cp1252Pack(e,0,1024,A),e}async writeAppOtp(A){await this.sendUTOData(26434,this.packOtpFlashString(A))}async writeAppFlash(A){await this.sendUTOData(26435,this.packOtpFlashString(A))}async writeSysOtp(A){await this.sendUTOData(26432,this.packOtpFlashString(A))}async writeSysFlash(A){await this.sendUTOData(26433,this.packOtpFlashString(A))}async initiateEcsHandshake(A){if(this.isInitialized(),A.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${A.companionPublicKey.length}`);if(A.companionPrivateKey.length!==32&&A.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${A.companionPrivateKey.length}`);let e=A.companionPublicKey.slice(0,32),r=A.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${e.length} seed.len=${r.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(e,r);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((i,n)=>{if(A.signal?.aborted){n(new Error("Operation aborted"));return}let F=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),n(new Error("Operation aborted")))};A.signal?.addEventListener("abort",F,{once:!0}),this.ecsHandshakeResolver=E=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(E)}`),A.signal?.removeEventListener("abort",F),E.success&&(this.encrypted=!0),i(E)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let v=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${v} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),v<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",F),i({success:!1,resultCode:v})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},tC=require("events"),v8=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(v8||{}),nC=5e3,iC=5e3,sC=class extends tC.EventEmitter{constructor(x,A){super(),A0(this,"atHandler"),A0(this,"debugCache",null),A0(this,"logger"),A0(this,"dataHandler"),this.atHandler=x,this.logger=A??QA,this.dataHandler=e=>{this.processIncomingDebugData(e)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(x){let A=this.initDebugCache();this.processDebugChunk(A,x)}async sendDebugCommand(x){await this.atHandler.sendRaw(x)}formatConsoleLine(x){if(!x.length)return;let A=x;x[0]===""&&(A=x.substring(1));try{let[e,r,,t]=A.split(" "),i={sequenceId:e?.substring(1),lineNumber:Number.isNaN(r)?void 0:Number(r),message:"",level:3},n=`${t.substring(1)}`,F=t.substring(0,1);"$!?~$".includes(F)&&(i.level=this.logLevelFromPrefix(F)),i.message=n,this.emitMessageEvent(i)}catch{this.emitMessageEvent({level:2,message:A})}}logLevelFromPrefix(x){switch(x){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(x){this.emit("message",x)}processDebugChunk({f00:x,f00Start:A,f01LastSee:e,f11:r},t){for(let i of t){i==="\xFF"&&(i="%");let n=String.fromCharCode(...r.map(F=>F.tag));if(i===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:1,buf:i,start:Date.now()})}else if(i===""){switch(n){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let F=r.pop().buf+i;F==="****^reset****"?e=0:this.process_x01(F,e)}else if(i===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:16,buf:i,start:Date.now()})}else if(r.length){let F=r[r.length-1];if(F.tag===16&&i==="\r")continue;F.buf+=i,F.tag===16&&i===`
|
|
2193
|
-
`&&r.pop()}else{if(x||(A=Date.now()),i==="\r"||(x+=i,!(Date.now()>A+
|
|
2192
|
+
}`;var Z0=new Function(Object.keys(t0),p0)(...Object.values(t0)),Y0=`methodCaller<(${Y.map(Ax=>Ax.name)}) => ${N.name}>`;return M(Xe(Y0,Z0))},j0=f=>(f=R0(f),D0.toHandle(n[f])),dx=(f,C)=>(f=D0.toValue(f),C=D0.toValue(C),D0.toHandle(f[C])),Px=f=>{f>9&&(V[f+1]+=1)},zx=(f,C,g,T,N)=>_[f](C,g,T,N),AA=f=>D0.toHandle(R0(f)),eA=f=>{var C=D0.toValue(f);LA(C),F0(f)},xr=()=>2147483648,FA=(f,C)=>(k(C,"alignment argument is required"),Math.ceil(f/C)*C),Te=f=>{var C=sn.buffer.byteLength,g=(f-C+65535)/65536|0;try{return sn.grow(g),ox(),1}catch(T){O(`growMemory: Attempted to grow heap from ${C} bytes to ${f} bytes, but got error: ${T}`)}},kx=f=>{var C=gx.length;f>>>=0,k(f>C);var g=xr();if(f>g)return O(`Cannot enlarge memory, requested ${f} bytes, but the limit is ${g} bytes!`),!1;for(var T=1;T<=4;T*=2){var N=C*(1+.2/T);N=Math.min(N,f+100663296);var Y=Math.min(g,FA(Math.max(f,N),65536)),X=Te(Y);if(X)return!0}return O(`Failed to grow the heap from ${C} bytes to ${Y} bytes, not enough memory!`),!1},wc=f=>{cx("fd_close called without SYSCALLS_REQUIRE_FILESYSTEM")},_c=9007199254740992,Sc=-9007199254740992,Pc=f=>f<Sc||f>_c?NaN:Number(f);function Tc(f,C,g,T){return C=Pc(C),70}var hi=[null,[],[]],ji=(f,C)=>{var g=hi[f];k(g),C===0||C===10?((f===1?R:O)(rn(g)),g.length=0):g.push(C)},cb=()=>{Xa(0),hi[1].length&&ji(1,10),hi[2].length&&ji(2,10)},$c=(f,C,g,T)=>{for(var N=0,Y=0;Y<g;Y++){var X=y0[C>>2],x0=y0[C+4>>2];C+=8;for(var t0=0;t0<x0;t0++)ji(f,gx[X+t0]);N+=x0}return y0[T>>2]=N,0},qc=()=>{if(E){var f=require("crypto");return C=>f.randomFillSync(C)}return C=>(crypto.getRandomValues(C),0)},Ka=f=>(Ka=qc())(f),Nc=(f,C)=>Ka(gx.subarray(f,f+C)),Ic=(f,C)=>{if(Ar)for(var g=f;g<f+C;g++){var T=Ye(g);T&&Ar.set(T,g)}},Ar,Mc=f=>(Ar||(Ar=new WeakMap,Ic(0,er.length)),Ar.get(f)||0),gi=[],Lc=()=>{if(gi.length)return gi.pop();try{return er.grow(1)}catch(f){if(!(f instanceof RangeError))throw f;cx("Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.")}},yi=(f,C)=>{er.set(f,C),se[f]=er.get(f)},za=f=>{let C=f.length;return k(C<16384),[C%128|128,C>>7,...f]},Rc={i:127,p:127,j:126,f:125,d:124,e:111},Va=f=>za(Array.from(f,C=>{var g=Rc[C];return k(g,`invalid signature char: ${C}`),g})),Oc=(f,C)=>{var g=Uint8Array.of(0,97,115,109,1,0,0,0,1,...za([1,96,...Va(C.slice(1)),...Va(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),N=new WebAssembly.Instance(T,{e:{f}}),Y=N.exports.f;return Y},Gc=(f,C)=>{k(typeof f<"u");var g=Mc(f);if(g)return g;var T=Lc();try{yi(T,f)}catch(Y){if(!(Y instanceof TypeError))throw Y;k(typeof C<"u","Missing signature argument to addFunction: "+f);var N=Oc(f,C);yi(T,N)}return Ar.set(f,T),T},Uc=f=>{Ar.delete(Ye(f)),yi(f,null),gi.push(f)};Bt(),_r(),k(V.length===10);{if(n.noExitRuntime&&(Je=n.noExitRuntime),n.print&&(R=n.print),n.printErr&&(O=n.printErr),n.wasmBinary&&(r0=n.wasmBinary),n.FS_createDataFile=nA.createDataFile,n.FS_createPreloadedFile=nA.createPreloadedFile,Kc(),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()();n0("preInit")}n.addFunction=Gc,n.removeFunction=Uc;var Hc=["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"];Hc.forEach(s0);var Jc=["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"];Jc.forEach(l0);function Kc(){o0("fetchSettings"),o0("logReadFiles"),o0("loadSplitModule"),o0("onMalloc"),o0("onRealloc"),o0("onFree"),o0("onSbrkGrow")}var Wa=Z("___getTypeName"),ki=Z("_malloc"),ve=Z("_free"),zc=n._MdnCom_ESCHandler=Z("_MdnCom_ESCHandler"),Vc=n._MdnCom_Free=Z("_MdnCom_Free"),Wc=n._MdnCom_RawRx=Z("_MdnCom_RawRx"),Xc=n._MdnCom_CryptoSelfTest=Z("_MdnCom_CryptoSelfTest"),Yc=n._MdnCom_SetCompanionKeypair=Z("_MdnCom_SetCompanionKeypair"),Qc=n._MdnCom_InitiateEcsHandshake=Z("_MdnCom_InitiateEcsHandshake"),Zc=n._MdnCom_SetSecDebug=Z("_MdnCom_SetSecDebug"),xf=n._MdnCom_GetEcsState=Z("_MdnCom_GetEcsState"),Af=n._MdnCom_ResetEcs=Z("_MdnCom_ResetEcs"),ef=n._MdnCom_RegisterEcsHandshakeCallback=Z("_MdnCom_RegisterEcsHandshakeCallback"),rf=n._MdnCom_Init=Z("_MdnCom_Init"),tf=n._SendUtoQuery=Z("_SendUtoQuery"),nf=n._SendUtoCmdExt=Z("_SendUtoCmdExt"),Xa=Z("_fflush"),wi=Z("_emscripten_stack_get_end"),sf=Z("_emscripten_stack_get_base"),af=Z("_strerror"),Ya=Z("_emscripten_stack_init"),of=Z("_emscripten_stack_get_free"),Ff=Z("__emscripten_stack_restore"),vf=Z("__emscripten_stack_alloc"),lf=Z("_emscripten_stack_get_current"),cf=Z("memory"),ff=Z("__indirect_function_table"),sn=Z("wasmMemory"),er=Z("wasmTable");function Ef(f){k(typeof f.__getTypeName<"u","missing Wasm export: __getTypeName"),k(typeof f.malloc<"u","missing Wasm export: malloc"),k(typeof f.free<"u","missing Wasm export: free"),k(typeof f.MdnCom_ESCHandler<"u","missing Wasm export: MdnCom_ESCHandler"),k(typeof f.MdnCom_Free<"u","missing Wasm export: MdnCom_Free"),k(typeof f.MdnCom_RawRx<"u","missing Wasm export: MdnCom_RawRx"),k(typeof f.MdnCom_CryptoSelfTest<"u","missing Wasm export: MdnCom_CryptoSelfTest"),k(typeof f.MdnCom_SetCompanionKeypair<"u","missing Wasm export: MdnCom_SetCompanionKeypair"),k(typeof f.MdnCom_InitiateEcsHandshake<"u","missing Wasm export: MdnCom_InitiateEcsHandshake"),k(typeof f.MdnCom_SetSecDebug<"u","missing Wasm export: MdnCom_SetSecDebug"),k(typeof f.MdnCom_GetEcsState<"u","missing Wasm export: MdnCom_GetEcsState"),k(typeof f.MdnCom_ResetEcs<"u","missing Wasm export: MdnCom_ResetEcs"),k(typeof f.MdnCom_RegisterEcsHandshakeCallback<"u","missing Wasm export: MdnCom_RegisterEcsHandshakeCallback"),k(typeof f.MdnCom_Init<"u","missing Wasm export: MdnCom_Init"),k(typeof f.SendUtoQuery<"u","missing Wasm export: SendUtoQuery"),k(typeof f.SendUtoCmdExt<"u","missing Wasm export: SendUtoCmdExt"),k(typeof f.fflush<"u","missing Wasm export: fflush"),k(typeof f.emscripten_stack_get_end<"u","missing Wasm export: emscripten_stack_get_end"),k(typeof f.emscripten_stack_get_base<"u","missing Wasm export: emscripten_stack_get_base"),k(typeof f.strerror<"u","missing Wasm export: strerror"),k(typeof f.emscripten_stack_init<"u","missing Wasm export: emscripten_stack_init"),k(typeof f.emscripten_stack_get_free<"u","missing Wasm export: emscripten_stack_get_free"),k(typeof f._emscripten_stack_restore<"u","missing Wasm export: _emscripten_stack_restore"),k(typeof f._emscripten_stack_alloc<"u","missing Wasm export: _emscripten_stack_alloc"),k(typeof f.emscripten_stack_get_current<"u","missing Wasm export: emscripten_stack_get_current"),k(typeof f.memory<"u","missing Wasm export: memory"),k(typeof f.__indirect_function_table<"u","missing Wasm export: __indirect_function_table"),Wa=V0("__getTypeName",1),ki=V0("malloc",1),ve=V0("free",1),zc=n._MdnCom_ESCHandler=V0("MdnCom_ESCHandler",1),Vc=n._MdnCom_Free=V0("MdnCom_Free",1),Wc=n._MdnCom_RawRx=V0("MdnCom_RawRx",1),Xc=n._MdnCom_CryptoSelfTest=V0("MdnCom_CryptoSelfTest",0),Yc=n._MdnCom_SetCompanionKeypair=V0("MdnCom_SetCompanionKeypair",2),Qc=n._MdnCom_InitiateEcsHandshake=V0("MdnCom_InitiateEcsHandshake",0),Zc=n._MdnCom_SetSecDebug=V0("MdnCom_SetSecDebug",1),xf=n._MdnCom_GetEcsState=V0("MdnCom_GetEcsState",0),Af=n._MdnCom_ResetEcs=V0("MdnCom_ResetEcs",0),ef=n._MdnCom_RegisterEcsHandshakeCallback=V0("MdnCom_RegisterEcsHandshakeCallback",1),rf=n._MdnCom_Init=V0("MdnCom_Init",2),tf=n._SendUtoQuery=V0("SendUtoQuery",2),nf=n._SendUtoCmdExt=V0("SendUtoCmdExt",4),Xa=V0("fflush",1),wi=f.emscripten_stack_get_end,sf=f.emscripten_stack_get_base,af=V0("strerror",1),Ya=f.emscripten_stack_init,of=f.emscripten_stack_get_free,Ff=f._emscripten_stack_restore,vf=f._emscripten_stack_alloc,lf=f.emscripten_stack_get_current,cf=sn=f.memory,ff=er=f.__indirect_function_table}var Qa={__cxa_throw:re,_abort_js:ot,_embind_finalize_value_object:ze,_embind_register_bigint:Ft,_embind_register_bool:o,_embind_register_class:Qe,_embind_register_class_constructor:b,_embind_register_class_property:P,_embind_register_emval:M0,_embind_register_float:m0,_embind_register_function:yx,_embind_register_integer:Mx,_embind_register_memory_view:Gx,_embind_register_std_string:pi,_embind_register_std_wstring:l,_embind_register_value_object:B,_embind_register_value_object_field:p,_embind_register_void:h,_emval_create_invoker:I0,_emval_decref:F0,_emval_get_module_property:j0,_emval_get_property:dx,_emval_incref:Px,_emval_invoke:zx,_emval_new_cstring:AA,_emval_run_destructors:eA,emscripten_resize_heap:kx,fd_close:wc,fd_seek:Tc,fd_write:$c,random_get:Nc},Za;function Bf(){Ya(),W()}function Cf(){Bf(),Qx();function f(){k(!Za),Za=!0,n.calledRun=!0,!I&&($A(),C0?.(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"]'),qA())}n.setStatus?(n.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>n.setStatus(""),1),f()},1)):f(),Q()}var Pr;Pr=await st(),Cf(),T0?i=n:i=new Promise((f,C)=>{C0=f,_0=C});for(let f of Object.keys(n))f in t||Object.defineProperty(t,f,{configurable:!0,get(){cx(`Access to module property ('${f}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});return i}})();typeof x=="object"&&typeof A=="object"?(A.exports=e,A.exports.default=e):typeof define=="function"&&define.amd&&define([],()=>e)}}),OF={};cB(OF,{API_STAMP_UNBOUNDED:()=>D8,AT_COMMANDS:()=>_x,AT_COMMAND_TIMEOUT_MS:()=>Vx,ApiBadRequestError:()=>P0,ApiForbiddenError:()=>Hn,ApiMethodNotAllowedError:()=>Ws,ApiNotFoundError:()=>EA,AtCommandHandler:()=>Rd,AtDeviceError:()=>Vs,AtHandlerDisposedError:()=>Hx,BACKFILL_PENDING_HEADER:()=>Bv,BACKFILL_PENDING_VALUE:()=>Cv,BLE_CONFIGURATION:()=>au,BLE_SCAN_TIMEOUT_MS:()=>Fu,COMPANION_AUTH_ERROR_I18N_KEYS:()=>Ud,COMPANION_CERT_PATH:()=>cs,COMPANION_PRIVATE_KEY_SIZE:()=>YF,COMPANION_PUBLIC_KEY_SIZE:()=>XF,CertApiError:()=>St,CompanionAuthErrorKind:()=>W8,CompanionAuthManager:()=>Gd,CompanionCertError:()=>z8,DDE_FIELD_UNUSED_INDEX:()=>C8,DEFAULT_CERT_VALIDITY_MARGIN_MS:()=>x8,DEFAULT_RECONNECT_OPTIONS:()=>tv,DLO_FILENAME:()=>zr,DdeMapper:()=>bd,DdeUnknownAliasError:()=>Is,DdeUnknownContainerError:()=>Me,DdeUnknownFieldError:()=>Ks,DdeWriteForbiddenError:()=>$t,DebugLogLevel:()=>f8,DebugMaster:()=>oC,DebugSync:()=>U8,DeviceManager:()=>iu,DeviceState:()=>rv,FW_FILENAME:()=>Ps,LIC_API_BASE_URL:()=>L8,LOCAL_API_LIFECYCLE_FLAGS:()=>vr,LOCAL_API_SITE_MASK:()=>gs,LOCAL_API_SITE_MASTER_KEYS:()=>Rt,LegacySync:()=>O8,LocalDataManager:()=>Z8,MANUFACTURER_CODE:()=>ou,MS_1999_12_31:()=>fs,MemoryStorage:()=>vC,Mutex:()=>$s,OfflineSyncManager:()=>Sd,RAW_TERMINAL_PATTERN:()=>J8,RESPONSE_PATTERNS:()=>K0,Rm2mStateManager:()=>ru,SYNC_LOGIC_MASK:()=>o8,SyncManager:()=>Md,TRIGGER_MEASUREMENT_TIMEOUT_MS:()=>H8,USB_CONFIGURATION:()=>su,UplinkMode:()=>v8,UtoCommand:()=>e8,UtoESC:()=>F8,UtoFileFlag:()=>s8,UtoFileFlagInt:()=>a8,UtoFileType:()=>n8,UtoFlag:()=>i8,UtoMaster:()=>c8,UtoResult:()=>r8,UtoSplitTag:()=>t8,UtoTag:()=>Ts,WebSocketBridge:()=>zs,applyBlueprintNames:()=>I8,applyDecpl:()=>GC,assertValidRequestStamps:()=>Yr,base64ToBytes:()=>ls,base64UrlToBytes:()=>GB,buildBlueprintNameMap:()=>ms,bytesToBase64:()=>Sn,bytesToBase64Url:()=>ws,checkDeviceCapabilities:()=>zd,computeDisplayValue:()=>Q8,computeDisplayValues:()=>js,consoleLogger:()=>ZA,convertToString:()=>Es,crc16Modbus:()=>VB,crc32Ethernet:()=>Ss,createDebugBufferState:()=>K8,createLocalApiHandler:()=>DD,createLocalApiSession:()=>Ys,createSiteInfoFromDde:()=>kD,dbStampToStamp40:()=>QA,decodeContainer:()=>Ds,decodeFloatm16:()=>w8,decodeLifecycleFlags:()=>av,decodeRm2mStateResponse:()=>ev,decodeUplinkState:()=>xv,deriveDeviceLifecycleMirror:()=>ov,encodeContainer:()=>bs,encodeFloatm16:()=>_8,encodeLifecycleFlags:()=>Zs,encodeNulPaddedJson:()=>iv,encodeSerialNumber:()=>WB,extractBits:()=>qn,formatApiStamp:()=>Vr,generateCompanionKeypair:()=>vs,getDeviceAssignment:()=>R8,isCertValid:()=>_s,isDevicePushableTag:()=>d8,isUnusedField:()=>Ce,isValidStamp:()=>Xs,mapLocalApiError:()=>_v,nullLogger:()=>Pn,parseApiStamp:()=>Xr,parseBlueprint:()=>hd,parseDde:()=>MC,parseMetadataResponse:()=>X8,parseNulPaddedJson:()=>Lt,parseRm2mStateParams:()=>Av,parseSerialNumberFromDataView:()=>XB,parseValuesResponse:()=>Y8,requestCompanionCert:()=>A8,resolveAuthErrorKind:()=>Hd,resolveBlueprintNameMap:()=>Mt,resolveContainerTag:()=>$n,resolveTagForContainer:()=>wt,resolveTagInModel:()=>fC,routeLocalApiRequest:()=>kv,spreadBits:()=>b8,stamp40ToDbHex:()=>fA,syncLogic:()=>Tn,systemTimeSource:()=>It,toHex:()=>Ie,toUint8Array:()=>Bs,utoStack:()=>z0});Sv.exports=EB(OF);var GF=Object.freeze({p:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,n:0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,h:8n,a:0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,d:0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,Gx:0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,Gy:0x6666666666666666666666666666666666666666666666666666666666666658n}),{p:kn,n:gn,Gx:EF,Gy:BF,a:Vi,d:Wi,h:CB}=GF,_t=32,dB=(...x)=>{"captureStackTrace"in Error&&typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(...x)},$x=(x="")=>{let A=new Error(x);throw dB(A,$x),A},uB=x=>typeof x=="bigint",DB=x=>typeof x=="string",pB=x=>x instanceof Uint8Array||ArrayBuffer.isView(x)&&x.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in x&&x.BYTES_PER_ELEMENT===1,lr=(x,A,e="")=>{let r=pB(x),t=x?.length,i=A!==void 0;if(!r||i&&t!==A){let n=e&&`"${e}" `,F=i?` of length ${A}`:"",v=r?`length=${t}`:`type=${typeof x}`,E=n+"expected Uint8Array"+F+", got "+v;throw r?new RangeError(E):new TypeError(E)}return x},On=x=>new Uint8Array(x),ys=x=>Uint8Array.from(x),UF=(x,A)=>x.toString(16).padStart(A,"0"),HF=x=>Array.from(lr(x)).map(A=>UF(A,2)).join(""),Be={_0:48,_9:57,A:65,F:70,a:97,f:102},CF=x=>{if(x>=Be._0&&x<=Be._9)return x-Be._0;if(x>=Be.A&&x<=Be.F)return x-(Be.A-10);if(x>=Be.a&&x<=Be.f)return x-(Be.a-10)},JF=x=>{let A="hex invalid";if(!DB(x))return $x(A);let e=x.length,r=e/2;if(e%2)return $x(A);let t=On(r);for(let i=0,n=0;i<r;i++,n+=2){let F=CF(x.charCodeAt(n)),v=CF(x.charCodeAt(n+1));if(F===void 0||v===void 0)return $x(A);t[i]=F*16+v}return t},KF=()=>globalThis?.crypto,bB=()=>KF()?.subtle??$x("crypto.subtle must be defined, consider polyfill"),zF=(...x)=>{let A=0;for(let t of x)A+=lr(t).length;let e=On(A),r=0;return x.forEach(t=>{e.set(t,r),r+=t.length}),e},mB=(x=_t)=>KF().getRandomValues(On(x)),wn=BigInt,ir=(x,A,e,r="bad number: out of range")=>{if(!uB(x))throw new TypeError(r);if(A<=x&&x<e)return x;throw new RangeError(r)},ax=(x,A=kn)=>{let e=x%A;return e>=0n?e:A+e},dF=(1n<<255n)-1n,d0=x=>{x<0n&&$x("negative coordinate");let A=(x>>255n)*19n+(x&dF);return A=(A>>255n)*19n+(A&dF),A%kn},hB=x=>ax(x,gn),jB=(x,A)=>{(x===0n||A<=0n)&&$x("no inverse n="+x+" mod="+A);let e=ax(x,A),r=A,t=0n,i=1n,n=1n,F=0n;for(;e!==0n;){let v=r/e,E=r%e,u=t-n*v,D=i-F*v;r=e,e=E,t=n,i=F,n=u,F=D}return r===1n?ax(t,A):$x("no inverse")},gB=x=>{let A=NB[x];return typeof A!="function"&&$x("hashes."+x+" not set"),A},yB=x=>lr(x,64,"digest"),Xi=x=>x instanceof Nt?x:$x("Point expected"),os=2n**256n,ks=class sr{constructor(A,e,r,t){A0(this,"X"),A0(this,"Y"),A0(this,"Z"),A0(this,"T");let i=os;this.X=ir(A,0n,i),this.Y=ir(e,0n,i),this.Z=ir(r,1n,i),this.T=ir(t,0n,i),Object.freeze(this)}static CURVE(){return GF}static fromAffine(A){return new sr(A.x,A.y,1n,d0(A.x*A.y))}static fromBytes(A,e=!1){let r=Wi,t=ys(lr(A,_t)),i=A[31];t[31]=i&-129;let n=VF(t);ir(n,0n,e?os:kn);let v=d0(n*n),E=ax(v-1n),u=d0(r*v+1n),{isValid:D,value:m}=_B(E,u);D||$x("bad point: y not sqrt");let w=(m&1n)===1n,j=(i&128)!==0;return!e&&m===0n&&j&&$x("bad point: x==0, isLastByteOdd"),j!==w&&(m=ax(-m)),new sr(m,n,1n,d0(m*n))}static fromHex(A,e){return sr.fromBytes(JF(A),e)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}assertValidity(){let A=Vi,e=Wi,r=this;if(r.is0())return $x("bad point: ZERO");let{X:t,Y:i,Z:n,T:F}=r,v=d0(t*t),E=d0(i*i),u=d0(n*n),D=d0(u*u),m=d0(v*A),w=d0(u*(m+E)),j=ax(D+d0(e*d0(v*E)));if(w!==j)return $x("bad point: equation left != right (1)");let S=d0(t*i),$=d0(n*F);return S!==$?$x("bad point: equation left != right (2)"):this}equals(A){let{X:e,Y:r,Z:t}=this,{X:i,Y:n,Z:F}=Xi(A),v=d0(e*F),E=d0(i*t),u=d0(r*F),D=d0(n*t);return v===E&&u===D}is0(){return this.equals(or)}negate(){return new sr(ax(-this.X),this.Y,this.Z,ax(-this.T))}double(){let{X:A,Y:e,Z:r}=this,t=Vi,i=d0(A*A),n=d0(e*e),F=d0(2n*r*r),v=d0(t*i),E=ax(A+e),u=ax(d0(E*E)-i-n),D=ax(v+n),m=ax(D-F),w=ax(v-n),j=d0(u*m),S=d0(D*w),$=d0(u*w),q=d0(m*D);return new sr(j,S,q,$)}add(A){let{X:e,Y:r,Z:t,T:i}=this,{X:n,Y:F,Z:v,T:E}=Xi(A),u=Vi,D=Wi,m=d0(e*n),w=d0(r*F),j=d0(d0(i*D)*E),S=d0(t*v),$=ax(d0(ax(e+r)*ax(n+F))-m-w),q=ax(S-j),R=ax(S+j),O=ax(w-d0(u*m)),r0=d0($*q),I=d0(R*O),k=d0($*O),L=d0(q*R);return new sr(r0,I,L,k)}subtract(A){return this.add(Xi(A).negate())}multiply(A,e=!0){if(!e&&A===0n||(ir(A,1n,gn),!e&&this.is0()))return or;if(A===1n)return this;if(this.equals(Wr))return OB(A).p;let r=or,t=Wr;for(let i=this;A>0n;i=i.double(),A>>=1n)A&1n?r=r.add(i):e&&(t=t.add(i));return r}multiplyUnsafe(A){return this.multiply(A,!1)}toAffine(){let{X:A,Y:e,Z:r}=this;if(this.equals(or))return{x:0n,y:1n};let t=jB(r,kn);d0(r*t)!==1n&&$x("invalid inverse");let i=d0(A*t),n=d0(e*t);return{x:i,y:n}}toBytes(){let{x:A,y:e}=this.toAffine(),r=kB(e);return r[31]|=A&1n?128:0,r}toHex(){return HF(this.toBytes())}clearCofactor(){return this.multiply(wn(CB),!1)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){let A=this.multiply(gn/2n,!1).double();return gn%2n&&(A=A.add(this)),A.is0()}};A0(ks,"BASE");A0(ks,"ZERO");var Nt=ks,Wr=new Nt(EF,BF,1n,ax(EF*BF)),or=new Nt(0n,1n,1n,0n);Nt.BASE=Wr;Nt.ZERO=or;var kB=x=>JF(UF(ir(x,0n,os),64)).reverse(),VF=x=>wn("0x"+HF(ys(lr(x)).reverse())),YA=(x,A)=>{let e=x;for(;A-- >0n;)e=d0(e*e);return e},wB=x=>{let A=d0(x*x),e=d0(A*x),r=d0(YA(e,2n)*e),t=d0(YA(r,1n)*x),i=d0(YA(t,5n)*t),n=d0(YA(i,10n)*i),F=d0(YA(n,20n)*n),v=d0(YA(F,40n)*F),E=d0(YA(v,80n)*v),u=d0(YA(E,80n)*v),D=d0(YA(u,10n)*i);return{pow_p_5_8:d0(YA(D,2n)*x),b2:e}},uF=0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n,_B=(x,A)=>{let e=d0(A*d0(A*A)),r=d0(d0(e*e)*A),t=wB(d0(x*r)).pow_p_5_8,i=d0(x*d0(e*t)),n=d0(A*d0(i*i)),F=i,v=d0(i*uF),E=n===x,u=n===ax(-x),D=n===ax(-x*uF);return E&&(i=F),(u||D)&&(i=v),(ax(i)&1n)===1n&&(i=ax(-i)),{isValid:E||u,value:i}},SB=x=>hB(VF(x)),PB=(...x)=>Promise.resolve(gB("sha512Async")(zF(...x))).then(yB),TB=x=>{let A=ys(x),e=A.slice(0,32);e[0]&=248,e[31]&=127,e[31]|=64;let r=A.slice(32,64),t=SB(e),i=Wr.multiply(t),n=i.toBytes();return{head:e,prefix:r,scalar:t,point:i,pointBytes:n}},$B=x=>PB(lr(x,_t)).then(TB),qB=x=>$B(x).then(A=>A.pointBytes),NB={sha512Async:async x=>{let A=bB(),e=zF(x);return On(await A.digest("SHA-512",e.buffer))},sha512:void 0},IB=x=>(x=x===void 0?mB(_t):x,lr(x,_t)),MB=async x=>{let A=IB(x),e=await qB(A);return{secretKey:A,publicKey:e}},_n=8,LB=256,WF=Math.ceil(LB/_n)+1,Fs=2**(_n-1),RB=()=>{let x=[],A=Wr,e=A;for(let r=0;r<WF;r++){e=A,x.push(e);for(let t=1;t<Fs;t++)e=e.add(A),x.push(e);A=e.double()}return x},DF=void 0,pF=(x,A)=>{let e=A.negate();return x?e:A},OB=x=>{let A=DF||(DF=RB()),e=or,r=Wr,t=2**_n,i=t,n=wn(t-1),F=wn(_n);for(let v=0;v<WF;v++){let E=Number(x&n);x>>=F,E>Fs&&(E-=i,x+=1n);let u=v*Fs,D=u,m=u+Math.abs(E)-1,w=v%2!==0,j=E<0;E===0?r=r.add(pF(w,A[D])):e=e.add(pF(j,A[m]))}return x!==0n&&$x("invalid wnaf"),{p:e,f:r}},XF=32,YF=64;async function vs(){let{secretKey:x,publicKey:A}=await MB(),e=new Uint8Array(YF);return e.set(x,0),e.set(A,XF),{publicKey:A,privateKey:e}}function Sn(x){let A="";for(let e of x)A+=String.fromCharCode(e);return btoa(A)}function ls(x,A="base64 value"){return ZF(QF(x,A))}function QF(x,A){try{return atob(x)}catch{throw new Error(`malformed ${A}: not valid base64`)}}function ws(x){return Sn(x).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function GB(x,A="base64url value"){let e=(4-x.length%4)%4,r=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat(e);return ZF(QF(r,A))}function ZF(x){let A=new Uint8Array(x.length);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A}var St=class extends Error{constructor(x,A,e){super(e),A0(this,"httpStatus",x),A0(this,"code",A),this.name="CertApiError"}},cs="/api/1/companion/cert",x8=10080*60*1e3,bF=typeof __COMPANION_AUTH_DEV_PROXY__<"u"&&__COMPANION_AUTH_DEV_PROXY__;async function A8(x,A){let e=x.apiHost.replace(/\/+$/,""),r=bF?cs:e+cs,t={Authorization:`Bearer ${x.accessToken}`,"Content-Type":"application/json",Accept:"application/json"};bF&&e&&(t["x-target-host"]=e);let i=await fetch(r,{method:"POST",headers:t,body:JSON.stringify({publicKey:ws(A.publicKey),subject:A.subject})});if(!i.ok){let F="unknown_error",v=i.statusText||`Cert API request failed (${i.status})`;try{let E=await i.json();E.code&&(F=E.code),E.message&&(v=E.message)}catch{}throw new St(i.status,F,v)}let n=await i.json();if(!n.certificate||!n.notAfter)throw new St(i.status,"invalid_response","Cert API response missing certificate or notAfter");return{certificateBase64Url:n.certificate,notAfter:n.notAfter}}function _s(x,A=x8){let e=Date.parse(x);return Number.isFinite(e)?e-Date.now()>A:!1}var UB=require("events"),HB=fB(BB(),1),pn="[device-master]",ZA={debug:(x,...A)=>console.debug(pn,x,...A),info:(x,...A)=>console.info(pn,x,...A),warn:(x,...A)=>console.warn(pn,x,...A),error:(x,...A)=>console.error(pn,x,...A)},Pn={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}},JB=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 Ss(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^JB[(e^x[r])&255];return(e^-1)>>>0}var fs=Date.UTC(1999,11,31,0,0,0);function Es(x,A,e=" "){let r=""+x,t=Math.max(0,Math.abs(A)-r.length),i=e.repeat(t);return A<0?r+i:i+r}function Ie(x,A){return("0000000000000000"+x.toString(16)).substr(-A)}function Bs(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 KB=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]),zB=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 VB(x){let A=x.length,e=255,r=255;for(let t=0;t<A;t++){let i=(r^x[t])&255;r=(e^KB[i])&255,e=zB[i]}return 256*e|r}function WB(x){if(x.length!==16)throw new Error("Serial number hex must be exactly 16 characters long.");let A=new ArrayBuffer(8),e=new DataView(A),r=x.substring(8,16),t=x.substring(0,8),i=parseInt(r,16),n=parseInt(t,16);return e.setUint32(0,i,!0),e.setUint32(4,n,!0),e}function XB(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 YB=[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],QB=new Map(YB.map((x,A)=>[x,128+A]));function ZB(x){return x<=127||x>=160&&x<=255?x:QB.get(x)??63}var zr="uto_script.dat",Ps="uto_fw.dat",e8=(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))(e8||{}),r8=(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))(r8||{}),Ts=(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))(Ts||{}),t8=(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))(t8||{}),n8=(x=>(x[x.off=0]="off",x[x.pawn=2]="pawn",x))(n8||{}),i8=(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))(i8||{}),s8=(x=>(x[x.READ=1]="READ",x[x.WRITE=2]="WRITE",x[x.NODE=4]="NODE",x[x.SYSTEM=8]="SYSTEM",x))(s8||{}),a8=(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))(a8||{}),o8=97;function Tn(x){return x&o8}var F8=(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))(F8||{}),v8=(x=>(x[x.Triggered=0]="Triggered",x[x.Wakeup=1]="Wakeup",x[x.Online=2]="Online",x))(v8||{}),mF={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},xC=class{constructor(){}resultToString(x){x|=0;let A=x&256?"+DISC":"";switch(x&255){case 0:return"OK"+A;case 1:return"E_TAG"+A;case 2:return"E_DLEN"+A;case 3:return"E_DATA"+A;case 4:return"E_STAMP"+A;case 5:return"E_EOD"+A;case 6:return"E_CMD"+A;case 7:return"E_CMDDENIED"+A;case 8:return"E_FULL"+A;case 9:return"E_NOTSUPPORTED"+A;case 10:return"E_OLDDATA"+A;case 11:return"E_STORAGE"+A;case 12:return"E_STORAGE"+A}return"E_0x"+Ie(x,4)+A}commandToString(x){switch(x|=0,x){case 0:return"COMMAND_RESULT";case 1:return"COMMAND_QUERY";case 2:return"COMMAND_DEL";case 3:return"COMMAND_DATA";case 4:return"COMMAND_UNS_DATA";case 5:return"COMMAND_LIVE_DATA";case 7:return"COMMAND_FILE_LIST";case 8:return"COMMAND_FILE_RETR";case 9:return"COMMAND_FILE_STOR";case 10:return"COMMAND_FILE_DELE";case 11:return"COMMAND_SET_VALUE"}return"COMMAND_0x"+Ie(x,2)}tagToString(x){x|=0;let A=Object.entries(Ts).find(([,e])=>e===x);return A?"TAG_"+A[0]:"TAG_0x"+Ie(x,4)}containerIdToTag(x,A){let e=mF[x]||null;return e&&A&&x.startsWith("histdata")?26623:e}containerIdOf(x){let A=Object.entries(mF).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)+fs}msToStamp40(x){let A=(x-fs)/1e3,e=Math.trunc(A),r=Math.round((A-e)*256);return e*256+r}stamp40ToDate(x){return new Date(this.stamp40ToMS(x))}utf8Unpack(x,A,e){let r=new TextDecoder("utf-8"),t=0;for(;t<e&&x.getUint8(A+t);)t++;let i=new Uint8Array(x.buffer,A,t);return r.decode(i)}ansiUnpack(x,A,e,r){try{let t=Bs(x),i=new TextDecoder(r),n=0;for(;n<e&&t[A+n];)n++;return i.decode(t.slice(A,A+n))}catch(t){return console.log("?"+t.message,t),`ERR-unknown codepage "${r}"`}}cp1252Unpack(x,A,e){return this.ansiUnpack(x,A,e,"cp1252")}ansiPack(x,A,e,r){let t=Bs(x);t.fill(0,A,A+e);for(let i=0;i<e&&i<r.length;i++)t[A+i]=ZB(r.charCodeAt(i))}cp1252Pack(x,A,e,r){return this.ansiPack(x,A,e,r)}dataFrameNotNull(x){if(!x.data)throw new Error("UtoFrame does not have any data!")}decode_DEVINFO(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(0),r=A.getUint16(2),t=A.getUint16(4),i=A.getUint32(6),n=(Ie(i,8)+Ie(x.dwDevSN,8)).toUpperCase(),F=[];for(let v=0;v<(A.byteLength-10)/5;v++){let E=A.getUint8(10+v*5+2),u=A.getUint16(10+v*5);F.push({wTag:u,sTag:this.tagToString(u),size:A.getUint16(10+v*5+3),flags:{historic:!!(E&1),single:!(E&1),up:!!(E&2),down:!!(E&4),variableLength:!!(E&8),setValue:!!(E&16)}})}return{serialNumber:n,class:Ie(e,4),firmwareVersion:`${Es(t>>8,2)}v${Es(t&255,3,"0")}`,flags:Ie(r,4),utos:F}}decode_STAMPS(x){this.dataFrameNotNull(x);let A=x.data,e={contextId:A.getBigUint64(0,!0).toString(16).toUpperCase(),stamps:[]};for(let r=0;r<(A.byteLength-8)/5;r++)e.stamps.push(A.getUint32(8+r*5+0)*256+A.getUint8(8+r*5+4));return e}decode_CONTEXT(x){this.dataFrameNotNull(x);let A=x.data;return{id:A.getBigUint64(0,!0).toString(16).toUpperCase(),name:this.cp1252Unpack(A,8,50)}}encode_CONTEXT(x){let A=new Uint8Array(58),e=new DataView(A.buffer);return e.setBigUint64(0,BigInt("0x"+x.id),!0),this.cp1252Pack(e,8,50,x.name),A}decode_FILEMAP(x){this.dataFrameNotNull(x);let A=x.data,e=A.getUint16(13,!1),r={stamp:A.getUint32(0,!1)*256+A.getUint8(4),size:A.getUint32(5,!1),crc32:A.getUint32(9,!1),flags:{read:!!(e&1),write:!!(e&2),node:!!(e&4),system:!!(e&8),extra:e&-16},_flags:e,name:this.cp1252Unpack(A,15,A.byteLength-15)};if(r.flags?.extra)throw new Error("?UTO.decode_FILEMAP.unknown-file-flags."+r.flags.extra);return r}encode_FILEMAP(x){if(x.flags){let r=0;x.flags.extra&&(r|=x.flags.extra|0),x.flags.read&&(r|=1),x.flags.write&&(r|=2),x.flags.node&&(r|=4),x.flags.system&&(r|=8),x._flags=r}let A=new Uint8Array(15+x.name.length+1),e=new DataView(A.buffer);return e.setUint32(0,Math.trunc(x.stamp/256),!1),e.setUint8(4,x.stamp&255),e.setUint32(5,x.size,!1),e.setUint32(9,x.crc32,!1),e.setUint16(13,x._flags,!1),this.cp1252Pack(e,15,256,x.name),A}decode_RM2M_STATE(x){this.dataFrameNotNull(x);let A=x.data;return{rssi:A.getInt8(0),uplinkMode:A.getUint8(1),imei:this.cp1252Unpack(A,61,15),hardwareId:this.cp1252Unpack(A,96,50),sim:{id:this.cp1252Unpack(A,2,15),apn:this.cp1252Unpack(A,17,40),iccId:this.cp1252Unpack(A,76,20)},network:{mcc:A.getUint16(57),mnc:A.getUint16(59)}}}},z0=new xC,It={nowMs:()=>Date.now()},$s=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()}}},hF=new WeakMap;function l8(x,A){let r=(hF.get(x)??Promise.resolve()).then(()=>AC(x,A));return hF.set(x,r.catch(()=>{})),r}async function AC(x,A){x.interface&&x.interface==="ble"?await eC(async e=>{await x.write(e)},A,x.mtuSize??23):await x.write(A)}async function eC(x,A,e=23){let r=new Uint8Array(A),t=e-3;for(let i=0;i<r.byteLength;i+=t){let n=r.slice(i,i+t);await x(n.buffer)}}var jF=15e3,rC=500,tC=3,nC=1024;function gF(x){return x?.utos.find(e=>e.wTag===3)?.size||nC}var c8=class yn extends UB.EventEmitter{constructor(A,e,r=It){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",gF(null)),this.mdnComInterface=null,this.receiveUto=null,this.sendUto=null,this.rxUto=null,this.txStream=null,this.SendUtoCmdExt=null,this.utoPortLock=new $s("UTO-Port"),this.transport=A,this.logger=e??ZA,this.timeSource=r}async init(){if(this.mdnComInterface!==null)return;this.mdnComInterface=await(0,HB.default)({print:i=>{this.logger.info(`[mdnCom] ${i}`),this.emit("mdnCom",i)},printErr:i=>{this.logger.error(`[mdnCom] ${i}`),this.emit("mdnComError",i)}});let A=this.mdnComInterface.MdnCom_Init;this.receiveUto=this.mdnComInterface.MdnCom_RawRx,this.sendUto=this.mdnComInterface.MdnCom_SendUtoQuery,this.rxUto=this.mdnComInterface.MdnCom_GetRxUto,this.txStream=this.mdnComInterface.MdnCom_GetTxStream,this.SendUtoCmdExt=this.mdnComInterface.MdnCom_SendUtoCmdExt;let e=this.mdnComInterface.addFunction(()=>{if(this.txStream){let i=this.txStream();this.lastTxWrite=l8(this.transport,i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength))}},"v"),r=this.mdnComInterface.addFunction(()=>{if(this.rxUto){let i=this.rxUto(),n=this.parseUtoFrame(i);this.emit("utoFrame",n)}},"v");await A(e,r);let t=this.mdnComInterface.addFunction(i=>{if(this.logger.info(`[ecs] handshake event from WASM: result=${i} resolverPresent=${this.ecsHandshakeResolver!==null}`),this.ecsHandshakeResolver){let n=this.ecsHandshakeResolver;this.ecsHandshakeResolver=null,n({success:i===0,resultCode:i})}else this.logger.warn("[ecs] handshake event fired but no resolver registered \u2014 Promise will hang")},"vi");this.logger.info(`[ecs] registering handshake callback fn=${t}`),this.mdnComInterface.MdnCom_RegisterEcsHandshakeCallback(t),this.disposeTransportListener=this.transport.onData(async i=>{this.receiveUto&&await this.receiveUto(new Uint8Array(i))}),await this.requestDeviceInfo().catch()}async dispose(A){if(this.logger.info("[dispose] starting dispose"),this.encrypted){if(!A){let e=new Error("[dispose] encrypted session active but no AtCommandHandler provided \u2014 cannot send connection close");throw this.logger.error(e.message),e}try{this.logger.info("[dispose] requesting context for encrypted close");let e=await this.requestContext();e?(this.logger.info("[dispose] writing context back to device"),await this.writeContext(e)):this.logger.warn("[dispose] requestContext returned null \u2014 skipping writeContext")}catch(e){this.logger.error(`[dispose] error during context round trip: ${e}`)}try{this.logger.info("[dispose] sending connection close"),await A.sendConnectionClose(),this.logger.info("[dispose] connection close acknowledged")}catch(e){this.logger.error(`[dispose] error sending connection close: ${e}`)}finally{this.encrypted=!1,this.logger.info("[dispose] encrypted flag cleared")}}if(this.disposeTransportListener&&(this.logger.info("[dispose] removing transport data listener"),this.disposeTransportListener(),this.disposeTransportListener=null),this.mdnComInterface){this.logger.info("[dispose] resetting WASM ECS state");try{this.mdnComInterface.MdnCom_ResetEcs()}catch(e){this.logger.error(`[dispose] error resetting WASM ECS state: ${e}`)}this.ecsHandshakeResolver=null}this.logger.info("[dispose] dispose complete")}isInitialized(){if(!this.mdnComInterface)throw new Error('utoMaster not initialized. Have you called "init()"?')}parseUtoFrame(A){return{dwDevSN:A.vDevID_u32,bCmd:A.vCmd_u8,stamp:A.vStamp_s.u32SysTime*256+A.vStamp_s.u8SysTime,wTag:A.vTag_u16&255,wTagFull:A.vTag_u16,sTag:z0.resultToString(A.vTag_u16),_dbg:A.vDevID_u32.toString(16),bVersion:1,_dlen:A.vDLen_u16,bRes:A.vRes_u8,bSeq:A.vSeq_u8,data:A.vData_pu8.length?new DataView(A.vData_pu8.buffer,A.vData_pu8.byteOffset,A.vData_pu8.length):null}}get utoStampNow(){return{u32SysTime:Math.floor(this.timeSource.nowMs()/1e3)-946598400,u8SysTime:0}}get utoStampNow40(){return this.utoStampNow.u32SysTime*256}async requestUto(A,e=0){await this.utoPortLock.requestLock();try{if(!this.sendUto)return null;let r=Math.trunc(e/256),t=e&255;return await this.sendWithRetry((i,n,F)=>{if(i.bCmd===0){let v=this.resultVerdict(i);v===5||v===0||v===4?n(null):F(i);return}if(i.wTagFull!==A)return F(i);n(i)},async()=>{this.sendUto(A,{u32SysTime:r,u8SysTime:t}),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] requestUto: no response from device for tag=0x${A.toString(16)}`})}finally{this.utoPortLock.unlock()}}copyDataView(A){return new Uint8Array(A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength))}static resultCode(A){return{verdict:A.wTagFull&-257,disc:(A.wTagFull&256)!==0}}resultVerdict(A){let{verdict:e,disc:r}=yn.resultCode(A);return r&&(this.logger.warn(`[UtoMaster] device requested disconnect (RESULT 0x${A.wTagFull.toString(16).padStart(4,"0")})`),this.emit("deviceDisconnectRequested",A.wTagFull)),e}static concatChunks(A){let e=A.reduce((i,n)=>i+n.length,0),r=new Uint8Array(e),t=0;for(let i of A)r.set(i,t),t+=i.length;return r}sendWithRetry(A,e,r){let t=r?.timeoutMs??rC,i=r?.maxRetries??tC;return new Promise((n,F)=>{let v=0,E=!1,u=()=>{},D,m={resolve:j=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),n(j)},reject:j=>{E=!0,clearTimeout(D),this.removeListener("utoFrame",u),F(j)}},w=async()=>{u=j=>A(j,m.resolve,m.reject),this.once("utoFrame",u);try{await e()}catch(j){if(E)return;this.removeListener("utoFrame",u),F(j);return}E||(D=setTimeout(()=>{if(this.removeListener("utoFrame",u),v>=i){F(new Error(r?.timeoutMessage??`[UtoMaster] no response from device after ${i} retries`));return}v++,this.logger.warn(`[UtoMaster] no response within ${t}ms, retrying (${v}/${i})`),w()},t))};w()})}createFrameIdleGuard(A,e,r){let t,i=()=>{t!==void 0&&(clearTimeout(t),t=void 0)};return{arm:()=>{i(),t=setTimeout(()=>{t=void 0,this.removeListener("utoFrame",A),r()},e)},clear:i}}async requestHistoricUtos(A,e,r,t=jF,i=0,n){return await this.utoPortLock.requestLock(),new Promise((F,v)=>{if(!this.sendUto)return F([]);let E=[],u=0,D=Promise.resolve(),m=$=>{if(w.arm(),$.bCmd===0){w.clear(),this.settleHistoricTransfer($,E,n,D,F,v);return}if($.wTagFull===A&&$.data&&(E.push({stamp40:$.stamp,data:this.copyDataView($.data)}),r?.(++u),n&&i>0&&E.length>=i)){let q=E.splice(0);D=D.then(()=>n(q))}this.once("utoFrame",m)},w=this.createFrameIdleGuard(m,t,()=>v(new Error(`[UtoMaster] requestHistoricUtos timed out after ${t}ms (tag=0x${A.toString(16)}, ${u} records received)`)));this.once("utoFrame",m),w.arm();let j=Math.trunc(e/256),S=e&255;this.sendUto(A,{u32SysTime:j,u8SysTime:S})}).finally(()=>{this.utoPortLock.unlock()})}settleHistoricTransfer(A,e,r,t,i,n){let F=this.resultVerdict(A);if(!(F===5||F===0||F===4)){t.then(()=>n(A)).catch(n);return}let E=r&&e.length>0?e.splice(0):null;(E?t.then(()=>r(E)):t).then(()=>i(r?[]:e)).catch(n)}async requestFile(A,e,r=jF){return await this.utoPortLock.requestLock(),new Promise((t,i)=>{if(!this.SendUtoCmdExt)return t(new Uint8Array(0));let n=[],F=0,v=D=>{if(E.arm(),D.bCmd===0){E.clear();let m=this.resultVerdict(D);m===5||m===0?t(yn.concatChunks(n)):i(D);return}if(D.bCmd===3&&D.data){let m=this.copyDataView(D.data);n.push(m),F+=m.byteLength,e?.(F)}this.once("utoFrame",v)},E=this.createFrameIdleGuard(v,r,()=>i(new Error(`[UtoMaster] requestFile timed out after ${r}ms (file="${A}", ${F} bytes received)`)));this.once("utoFrame",v),E.arm();let u=new Uint8Array(A.length+1);for(let D=0;D<A.length;D++)u[D]=A.charCodeAt(D)&255;this.SendUtoCmdExt(8,3,{u32SysTime:0,u8SysTime:0},u)}).finally(()=>{this.utoPortLock.unlock()})}async deleteFile(A){let e=new Uint8Array(A.length+1);for(let r=0;r<A.length;r++)e[r]=A.charCodeAt(r)&255;await this.sendUTOCmdExt(10,3,e,0)}async sendSetValue(A,e,r){this.isInitialized();let t=new Uint8Array(e.length);z0.cp1252Pack(t,0,e.length,e);try{return await this.sendUTOCmdExt(11,A,t,r),{outcome:"ok",resultCode:0}}catch(i){let n=i;if(n&&n.bCmd===0&&typeof n.wTagFull=="number"){let{verdict:F}=yn.resultCode(n),v=n.wTagFull;return F===4?{outcome:"stamp",resultCode:v}:F===7||F===9?{outcome:"denied",resultCode:v}:{outcome:"error",resultCode:v}}return this.logger.error(`[UtoMaster] sendSetValue transport error tag=0x${A.toString(16)}: ${i}`),{outcome:"error"}}}async requestDeviceInfo(){let A=await this.requestUto(0,this.utoStampNow40),e=A?z0.decode_DEVINFO(A):null;return e&&(this.fileChunkSize=gF(e)),e}get fileTransferChunkSize(){return this.fileChunkSize}async requestContext(){let A=await this.requestUto(128,this.utoStampNow40);return A?z0.decode_CONTEXT(A):null}async writeContext(A){await this.sendUTOCmdExt(3,128,z0.encode_CONTEXT(A))}async requestFileList(A){return await this.utoPortLock.requestLock(),new Promise((e,r)=>{if(!this.SendUtoCmdExt)return e({});let t={},i=n=>this.handleFileListFrame(n,t,A,e,r,i);this.once("utoFrame",i),this.SendUtoCmdExt(7,3,{u32SysTime:0,u8SysTime:0},new Uint8Array(0))}).finally(()=>{this.utoPortLock.unlock()})}handleFileListFrame(A,e,r,t,i,n){if(A.bCmd===0){let F=this.resultVerdict(A);F===5||F===0?t(r?e[r]?{[r]:e[r]}:{}:e):i(A);return}try{let F=z0.decode_FILEMAP(A);e[F.name]=F}catch(F){i(F);return}this.once("utoFrame",n)}async requestStamps(){let A=await this.requestUto(1,this.utoStampNow40);return A?z0.decode_STAMPS(A):null}async sendFile(A,e,r,t){let i=e;A===2&&(i=new Uint8Array(e.length+1),i.set(new Uint8Array(e),1),i[0]=A);let n={name:t??zr,stamp:r===0?0:z0.msToStamp40(r??this.timeSource.nowMs()),size:i.length,_flags:11,crc32:Ss(i)},F=z0.encode_FILEMAP(n);if(!await this.sendUTOCmdExt(9,3,F,0)){let E=this.fileChunkSize;for(let u=0;u<i.length;u+=E){let D=Math.min(E,i.byteLength-u),m=new Uint8Array(i.buffer,i.byteOffset+u,D);await this.sendUTOCmdExt(3,3,m,u*256);let j=(u+D)/i.byteLength*100;this.emit("installing",j.toFixed(0))}}this.emit("installing",null)}async sendUTOCmdExt(A,e,r,t){await this.utoPortLock.requestLock();try{if(!this.SendUtoCmdExt)return null;let i=t??this.utoStampNow40,n=Math.trunc(i/256),F=i&255;return await this.sendWithRetry((v,E,u)=>{if(v.bCmd!==0){u(v);return}this.resultVerdict(v)===0?E(null):u(v)},async()=>{this.SendUtoCmdExt(A,e,{u32SysTime:n,u8SysTime:F},r),await this.lastTxWrite},{timeoutMessage:`[UtoMaster] sendUTOCmdExt: no response from device for cmd=${A} tag=0x${e.toString(16)}`})}finally{this.utoPortLock.unlock()}}async sendUTOData(A,e,r){return this.sendUTOCmdExt(3,A,e,r)}packOtpFlashString(A){let e=new Uint8Array(1024);return z0.cp1252Pack(e,0,1024,A),e}async writeAppOtp(A){await this.sendUTOData(26434,this.packOtpFlashString(A))}async writeAppFlash(A){await this.sendUTOData(26435,this.packOtpFlashString(A))}async writeSysOtp(A){await this.sendUTOData(26432,this.packOtpFlashString(A))}async writeSysFlash(A){await this.sendUTOData(26433,this.packOtpFlashString(A))}async initiateEcsHandshake(A){if(this.isInitialized(),A.companionPublicKey.length!==32)throw new Error(`companionPublicKey must be 32 bytes, got ${A.companionPublicKey.length}`);if(A.companionPrivateKey.length!==32&&A.companionPrivateKey.length!==64)throw new Error(`companionPrivateKey must be 32 bytes (seed) or 64 bytes (seed||public), got ${A.companionPrivateKey.length}`);let e=A.companionPublicKey.slice(0,32),r=A.companionPrivateKey.slice(0,32);this.logger.info(`[ecs] initiateEcsHandshake: pub.len=${e.length} seed.len=${r.length} state(pre)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`);let t=this.mdnComInterface.MdnCom_SetCompanionKeypair(e,r);return this.logger.info(`[ecs] MdnCom_SetCompanionKeypair returned ${t}`),t<0?{success:!1,resultCode:t}:new Promise((i,n)=>{if(A.signal?.aborted){n(new Error("Operation aborted"));return}let F=()=>{this.ecsHandshakeResolver&&(this.logger.warn("[ecs] abort signal fired \u2014 resetting WASM state"),this.ecsHandshakeResolver=null,this.mdnComInterface.MdnCom_ResetEcs(),n(new Error("Operation aborted")))};A.signal?.addEventListener("abort",F,{once:!0}),this.ecsHandshakeResolver=E=>{this.logger.info(`[ecs] resolver invoked: result=${JSON.stringify(E)}`),A.signal?.removeEventListener("abort",F),E.success&&(this.encrypted=!0),i(E)},this.logger.info("[ecs] calling MdnCom_InitiateEcsHandshake()");let v=this.mdnComInterface.MdnCom_InitiateEcsHandshake();this.logger.info(`[ecs] MdnCom_InitiateEcsHandshake returned ${v} state(post)=${this.mdnComInterface.MdnCom_GetEcsState?.()}`),v<0?(this.ecsHandshakeResolver=null,A.signal?.removeEventListener("abort",F),i({success:!1,resultCode:v})):this.logger.info("[ecs] awaiting device INIT response via MdnCom_RawRx ...")})}resetEcs(){this.isInitialized(),this.mdnComInterface.MdnCom_ResetEcs(),this.ecsHandshakeResolver=null}},iC=require("events"),f8=(x=>(x[x.error=0]="error",x[x.warn=1]="warn",x[x.debug=2]="debug",x[x.info=3]="info",x))(f8||{}),sC=5e3,aC=5e3,oC=class extends iC.EventEmitter{constructor(x,A){super(),A0(this,"atHandler"),A0(this,"debugCache",null),A0(this,"logger"),A0(this,"dataHandler"),this.atHandler=x,this.logger=A??ZA,this.dataHandler=e=>{this.processIncomingDebugData(e)},this.atHandler.on("data",this.dataHandler)}initDebugCache(){return this.debugCache?this.debugCache:this.debugCache={debugStamp:Date.now(),f00:"",f00Start:0,f01LastSee:-1,f11:[]}}processIncomingDebugData(x){let A=this.initDebugCache();this.processDebugChunk(A,x)}async sendDebugCommand(x){await this.atHandler.sendRaw(x)}formatConsoleLine(x){if(!x.length)return;let A=x;x[0]===""&&(A=x.substring(1));try{let[e,r,,t]=A.split(" "),i={sequenceId:e?.substring(1),lineNumber:Number.isNaN(r)?void 0:Number(r),message:"",level:3},n=`${t.substring(1)}`,F=t.substring(0,1);"$!?~$".includes(F)&&(i.level=this.logLevelFromPrefix(F)),i.message=n,this.emitMessageEvent(i)}catch{this.emitMessageEvent({level:2,message:A})}}logLevelFromPrefix(x){switch(x){case"!":return 0;case"?":return 1;case"~":return 2;default:return 3}}emitMessageEvent(x){this.emit("message",x)}processDebugChunk({f00:x,f00Start:A,f01LastSee:e,f11:r},t){for(let i of t){i==="\xFF"&&(i="%");let n=String.fromCharCode(...r.map(F=>F.tag));if(i===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:1,buf:i,start:Date.now()})}else if(i===""){switch(n){case"":case"":break;case"":case"":continue;case"":r.pop();break;default:}let F=r.pop().buf+i;F==="****^reset****"?e=0:this.process_x01(F,e)}else if(i===""){switch(n){case"":break;case"":case"":r.pop();break;case"":break;case"":r.shift();break;default:}r.push({tag:16,buf:i,start:Date.now()})}else if(r.length){let F=r[r.length-1];if(F.tag===16&&i==="\r")continue;F.buf+=i,F.tag===16&&i===`
|
|
2193
|
+
`&&r.pop()}else{if(x||(A=Date.now()),i==="\r"||(x+=i,!(Date.now()>A+aC||i===`
|
|
2194
2194
|
`)))continue;x.slice(0,-1).split(`
|
|
2195
|
-
`).forEach(v=>{this.onConsole(v)}),x=""}for(let F=r.length-1;F>=0;F--)Date.now()>r[F].start+
|
|
2195
|
+
`).forEach(v=>{this.onConsole(v)}),x=""}for(let F=r.length-1;F>=0;F--)Date.now()>r[F].start+sC&&r.splice(F,1)}}isHex(x){return/^[a-fA-F0-9]*$/.test(x)}onConsole(x){if(!(x[0]===""&&x[1]==="#"&&x.length<10)){if(x[0]===""&&x[1]==="."&&x.length<10050){let[A,e]=x.substr(2).split("=");if(A.length>1&&A.length<50){["~~","~h","~g","~i","~r","~s"].includes(A)||(this.emit("#watch",{key:A,value:e,date:new Date}),this.logger.debug(`#watch ${A} = ${e}`));return}}this.formatConsoleLine(x)}}process_x01(x,A){if(x.length<11)return;let e=x.substr(1,4);if(!this.isHex(e))return;let r=x.substr(-5,4);if(!this.isHex(r))return;let t=parseInt(e,16),i=parseInt(r,16),n=65535&(A<0?0:t-A),F=65535&i-t-x.length;if(n&&this.onConsole(`?console - x01 ${n} characters lost`),A=i,F){this.onConsole(`?console - x01 ${F} characters lost (dropped "${x}")`);return}this.onConsole(x[0]+x.slice(5,-5))}dispose(){this.atHandler.off("data",this.dataHandler),this.removeAllListeners()}};function QA(x){return parseInt(x.slice(6),16)}function fA(x){return"400000"+x.toString(16).toUpperCase().padStart(10,"0")}function E8(x){return x?new Uint8Array(x):null}function bn(x){return{...x,data:E8(x.data)}}function Yi(x){return{...x,data:E8(x.data)}}var FC=/^400000[0-9A-F]{10}$/;function yF(x,A){if(!FC.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 vC=class B8{constructor(){A0(this,"metadata",new Map),A0(this,"utoData",new Map),A0(this,"changeRequests",[]),A0(this,"files",new Map)}async getMetadataValue(A){return this.metadata.get(A)??null}async setMetadataValue(A,e){this.metadata.set(A,e)}async deleteMetadataValue(A){this.metadata.delete(A)}async getUtoDataTags(){return[...this.utoData.keys()]}async getLatestStampForTag(A){let e=this.utoData.get(A);return!e||e.size===0?null:[...e.keys()].sort().at(-1)}async getRowForTag(A){let e=await this.getLatestStampForTag(A);return e===null?null:bn(this.utoData.get(A).get(e))}async replaceUtoRow(A){yF(A.tag,A.stamp),this.utoData.set(A.tag,new Map([[A.stamp,bn(A)]]))}async insertHistoricRows(A){for(let e of A){yF(e.tag,e.stamp);let r=this.utoData.get(e.tag);r||(r=new Map,this.utoData.set(e.tag,r)),r.has(e.stamp)||r.set(e.stamp,bn(e))}}async getHistoricRows(A,e){let r=this.utoData.get(A);if(!r)return[];let t=[...r.values()];if(e.fromStamp!==void 0){let n=e.fromStamp;t=t.filter(F=>F.stamp>=n)}if(e.untilStamp!==void 0){let n=e.untilStamp;t=t.filter(F=>F.stamp<=n)}t.sort((n,F)=>e.order==="desc"?F.stamp.localeCompare(n.stamp):n.stamp.localeCompare(F.stamp));let i=e.offset??0;return t.slice(i,i+e.limit).map(bn)}async getUtoChangeRequests(){return[...this.changeRequests].sort((A,e)=>A.tag-e.tag||A.stamp.localeCompare(e.stamp)).map(A=>({...A}))}async insertUtoChangeRequests(A){for(let e of A)this.changeRequests.push({tag:e.tag,stamp:fA(e.stamp40),user:e.user??"",json:e.json})}async clearUtoChangeRequests(){this.changeRequests=[]}async getFiles(){return[...this.files.values()].map(Yi)}async getFile(A){let e=this.files.get(A);return e?Yi(e):null}async upsertFile(A){this.files.set(A.filename,Yi(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?Sn(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?Sn(e.data):null}))}}static fromJSON(A){let e=new B8;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?ls(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?ls(r.data,`files.data of "${r.filename}"`):null});return e}},lC=new Set(["link","unknown"]);function Pt(x){return lC.has(x)}var C8=-2;function Ce(x){return x.index===C8}var cC=65535,kF={configa:4294928218,configb:4294928219,configc:4294928220};function qs(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 $n(x){let A=qs(x.trim()).toLowerCase();return Object.prototype.hasOwnProperty.call(kF,A)?kF[A]:z0.containerIdToTag(A,!1)}function wt(x){return $n(x.name)}function fC(x,A){let e=x.byNameOrAlias(A);return $n(e?e.name:A)}function d8(x){return Number.isInteger(x)&&x>=0&&x<=cC}var EC={u8:"u8",s8:"s8",u16:"u16",s16:"s16",u32:"u32",s32:"s32",s64:"s64",f32:"f32",f64:"f64",floatm16:"floatm16",stamp4:"stamp4",stamp:"stamp",stamp8:"stamp8",datetime:"datetime",ufm8:"ufm8",link:"link",string:"string",float:"f32",float32:"f32",float64:"f64",char:"string",bint:"s8",wint:"s16",dint:"s32",qint:"s64",byte:"u8",word:"u16",dword:"u32",time_span:"s64"};function BC(x){return x===void 0?"unknown":EC[x.toLowerCase()]??"unknown"}var CC={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},dC=new Set(["name","alias","title","index","byteofs","type","max","decpl","vscale","vofs","units","editmask","view","edit","default","bitmask"]),Ns="name",uC="type";function DC(x){let A=x.indexOf("=");return{key:x.slice(0,A).trim().toLowerCase(),value:x.slice(A+1).trim()}}function pC(x){return/^config[0-9]$/.test(x)||/^config[A-C]$/i.test(x)?"config":/^histdata[0-9]$/.test(x)?"histdata":"other"}function ar(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 mC=/^(.*?)%(config[0-9a-fA-F])%(.+)$/;function u8(x){let A=mC.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 hC(x){let A=x.get("vscale");if(A===void 0)return{value:1};let e=u8(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 jC(x){let A=x.get("vofs");if(A===void 0)return{value:0};let e=u8(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 gC(x,A){return x==="string"?A??0:CC[x]}function yC(x){let A={};for(let[e,r]of x)dC.has(e)||(A[e]=r);return A}function kC(x,A,e){let r=BC(x.get(uC)),t=ar(x,"max"),i=gC(r,t),n=A.fields[A.fields.length-1],v=ar(x,"byteofs")??(n?n.byteofs+n.size:A.kind==="histdata"?1:0),E=A.fields.length,u=x.get(Ns)??(A.kind==="histdata"?`ch${E}`:`field${E}`),D=hC(x),m=jC(x),w=ar(x,"index");return{name:u,alias:x.get("alias"),title:x.get("title"),index:w,sortIndex:w??e,byteofs:v,type:r,size:i,max:t,decpl:ar(x,"decpl"),vscale:D.value,vofs:m.value,vscaleRef:D.ref,vofsRef:m.ref,units:x.get("units"),editmask:x.get("editmask"),view:ar(x,"view"),edit:ar(x,"edit"),default:x.get("default"),bitmask:bC(x),attrs:yC(x)}}function wC(){return{name:"",kind:"other",fields:[],recordSize:0}}function _C(x,A,e){switch(A){case Ns:{let r=qs(e);x.name=r,x.kind=pC(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 SC(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 PC(x){if(x==="*")return{keyBytes:[],matchAll:!0};let A=x.slice(0,2).toLowerCase()==="0x"?x.slice(2):x;A.length%2!==0&&(A=`0${A}`);let e=[];for(let r=0;r<A.length;r+=2){let t=parseInt(A.slice(r,r+2),16);e.push(Number.isNaN(t)?0:t)}return{keyBytes:e,matchAll:!1}}function TC(x){return x.toLowerCase()==="histdata28"?"applog0":qs(x)}function $C(x){let{keyBytes:A,matchAll:e}=PC(x.get("key")??"00");return{source:x.get("source")??"",target:TC(x.get("target")??""),key:A[0]??0,keyBytes:A,matchAll:e,keepraw:ar(x,"keepraw")}}function qC(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 NC(x,A){switch(A){case"<table>":return x.container=wC(),x.expectName=!0,!0;case"</table>":return x.container&&(SC(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(kC(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($C(x.split)),x.split=null,!0;default:return!1}}function IC(x,A){let{key:e,value:r}=DC(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!==Ns)throw new Error(`?dde.first-table-attr-not-name."${e}"`);x.expectName=!1,_C(x.container,e,r)}}function MC(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("//")||TC(A,t)||t.includes("=")&&qC(A,t)}return $C(A.containers,A.splits)}var C8=null,IC=4;function zr(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 Wr(x){let A=x.trim();if(A==="*")return C8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(u,D,m)=>{let w=A.slice(u,u+D);return parseInt(w.length?w.padEnd(D,"0"):m,10)},r=parseInt(A.slice(0,IC),10),t=A.length>=6?e(4,2,"01"):1,i=A.length>=8?e(6,2,"01"):1,n=e(8,2,"00"),F=e(10,2,"00"),v=e(12,2,"00"),E=e(14,3,"000");return Date.UTC(r,t-1,i,n,F,v,E)}var $t="NAN",MC="%HEX%",LC=65535,Ns=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),A0(this,"alias",x),this.name="DdeUnknownAliasError"}};function On(x){return(x.alias??x.name).toLowerCase()}function Gn(x){return x==="string"}function Is(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function d8(x){return(x.editmask??"").toUpperCase()===MC}function RC(x,A){return A===void 0||!Number.isFinite(x)?x:Ms(x,A)}function Ms(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function OC(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),Ms(x,A-1-r)}function GC(x){return x==="floatm16"||x==="f32"||x==="f64"}function UC(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(GC(x.type)?9:0),r=Ms(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return OC(r,t)}function Tn(x,A){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),r=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,i=1n;for(;r!==0n;)r&1n&&(e&1n&&(t|=i),i<<=1n),e>>=1n,r>>=1n;return Number(t)}function u8(x,A,e){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),i=BigInt.asUintN(64,BigInt(Math.trunc(e))),n=1n;for(;i!==0n;)i&1n&&(r=t&1n?r|n:r&~n,t>>=1n),i>>=1n,n<<=1n;return Number(r)}var HC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function qn(x){return!!x.bitmask&&HC.has(x.type)}var D8=255,p8=254,b8=253,m8=252,h8=251,JC=207,Ls=65535,Nn=65534,Rs=65533,Os=65532,Gs=65531;function KC(x){switch(x){case D8:return Ls;case p8:return Nn;case b8:return Rs;case m8:return Os;case h8:return Gs;default:return x<=31?x:x>JC?Nn:(x&15|16)<<(x>>4)-1}}function zC(x){switch(x){case Ls:return D8;case Nn:return p8;case Rs:return b8;case Os:return m8;case Gs:return h8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var In=1023,Bs=31,j8=127,Yi=8388607,VC=255,Cs=15,WC=-14,gF=15;function g8(x){let A=(x&In)<<13,e=(x&31744)>>10;if(e===Bs)return k8(1024-(x&In));e!==0&&(e=e-Cs+4+j8);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 y8(x){if(typeof x=="string"||Number.isNaN(x))return LC;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&Yi)+4096,i=(t>Yi?1:0)+(e>>>23&VC),n=(t&Yi)>>>13;return i!==0&&(i=i-j8-4,i<WC?(n=0,i=0):i>gF?(n=In,i=gF+Cs):i=i+Cs),r|i<<10|n}var XC=["OF","UF","OL","SC"],ds={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:Ls,OF:Nn,UF:Rs,OL:Os,SC:Gs}},YC={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},Vx={NAN:1,OF:2,UF:3,OL:4,SC:5},QC=new Set(["u8","u16","u32","ufm8"]);function ZC(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function Us(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 Hs(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 g8(A.getUint16(e,!1));case"ufm8":return KC(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function k8(x){switch(x){case Vx.OF:return"OF";case Vx.UF:return"UF";case Vx.OL:return"OL";case Vx.SC:return"SC";default:return $t}}var yF=[["NAN",Vx.NAN],["OF",Vx.OF],["UF",Vx.UF],["OL",Vx.OL],["SC",Vx.SC]];function xd(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?Vx.NAN:(r=r&4194304?8388608-r:r&255,r===0?Vx.NAN:r)}function Ad(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?Vx.NAN:r}function ed(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);qn(x)&&(t=BigInt(Tn(Number(t),x.bitmask)));let i=ds.s64;return yF.find(([n])=>t===BigInt(i[n]))?.[1]??0}let e=ds[x.type];if(!e)return 0;let r=Hs(x.type,A,x.byteofs);return qn(x)&&(r=Tn(r,x.bitmask)),yF.find(([t])=>r===e[t])?.[1]??0}function w8(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&Bs)===Bs?1024-(e&In):0}case"f32":return xd(A,x.byteofs);case"f64":return Ad(A,x.byteofs);default:return ed(x,A)}}function _8(x,A){let e=Hs(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(qn(x)&&(e=Tn(e,x.bitmask)),e*x.vscale+x.vofs)}function rd(x,A){let e=w8(x,A);if(e!==0)return k8(e);let r=_8(x,A);return Number.isNaN(r)?$t:UC(x,r)}function td(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(Gn(x.type)||Is(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return w8(x,e)!==0?NaN:_8(x,e)}function nd(x,A){if(d8(x)){let e="";for(let r=0;r<x.size;r++)e+=A.getUint8(x.byteofs+r).toString(16).padStart(2,"0");return e.toUpperCase()}return z0.cp1252Unpack(A,x.byteofs,x.size)}var S8=25569,P8=864e5;function id(x){return(x-S8)*P8}function sd(x){return x/P8+S8}function ad(x,A){if(x.type==="datetime")return zr(id(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return zr(z0.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),zr(z0.stamp40ToMS(e))}var od=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Fd(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function vd(x){let A=x.default;if(A===void 0)return;if(Gn(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===$t)return $t;if(od.has(x.type))return Fd(e,0);let r=Us(e);return r!==null?r:A}function ld(x,A,e){return x.byteofs+x.size>e?vd(x):Gn(x.type)?nd(x,A):Is(x.type)?ad(x,A):rd(x,A)}function us(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)Be(t)||Pt(t.type)||(r[On(t)]=ld(t,e,A.byteLength));return r}function cd(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()===$t||A==="")return{kind:"sentinel",state:"NAN"};let e=XC.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=Us(A);return r!==null?{kind:"value",physical:r}:kF(x)}return kF(x)}function kF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?Us(A):null)??0}}function Ds(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,YC[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|Vx[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(Vx[e]),!1);default:break}let r=ds[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);$8(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,y8(r),!1);default:break}if(Number.isNaN(r))return Ds(x,A,"NAN");if(!Number.isFinite(r))return Ds(x,A,"OF");let t=r;QC.has(x.type)&&t<0&&(t=0),$8(x,A,ZC(t))}function $8(x,A,e){if(qn(x)){let r=Hs(x.type,A,x.byteofs);e=u8(r,e,x.bitmask)}Ed(x.type,A,x.byteofs,e)}function Ed(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,zC(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function Bd(x,A,e){let r=String(e);if(d8(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${On(x)}"`);for(let i=0;i<x.size;i++){let n=i*2<t.length?parseInt(t.substr(i*2,2),16):0;A.setUint8(x.byteofs+i,n)}return}z0.cp1252Pack(A,x.byteofs,x.size,r)}function Cd(x,A,e){let r=Wr(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${On(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,sd(r),!1);return}let t=z0.msToStamp40(r);if(x.type==="stamp8"){A.setBigUint64(x.byteofs,BigInt(t),!1);return}A.setUint32(x.byteofs,Math.trunc(t/256),!1),x.size>=5&&A.setUint8(x.byteofs+4,t&255)}function dd(x,A,e){if(Gn(x.type))return Bd(x,A,e);if(Is(x.type))return Cd(x,A,e);let r=cd(x,e);switch(r.kind){case"skip":return;case"sentinel":return Ds(x,A,r.state);case"value":return fd(x,A,r.physical)}}function ps(x,A,e){let r=e?new Uint8Array(e):new Uint8Array(x.recordSize),t=new DataView(r.buffer,r.byteOffset,r.byteLength),i=new Map(x.fields.filter(n=>!Be(n)&&!Pt(n.type)).map(n=>[On(n),n]));for(let[n,F]of Object.entries(A)){let v=i.get(n.toLowerCase());if(!v)throw new Ns(n);dd(v,t,F)}return r}var wF=99,ud=256,Ie=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),A0(this,"container",x),this.name="DdeUnknownContainerError"}},Tt=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"}},Js=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),A0(this,"field",x),this.name="DdeUnknownFieldError"}};function Qi(x){return(x.alias??x.name).toLowerCase()}var Dd=class{constructor(x,A,e=It){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=wt(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=us(await this.resolveScaleRefs(A),r.data);return delete t.stamp,{stamp:this.rowStamp(r),...t}}async writeContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Ie(x);let r=wt(e);if(r===null)throw new Ie(x);if(e.edit===wF)throw new Tt(e.name);let{stamp:t,...i}=A;this.assertFieldsWritable(e,i);let n=await this.storage.getRowForTag(r),F=ps(await this.resolveScaleRefs(e),i,n?.data??null),v=z0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),E=cA(v);return await this.storage.replaceUtoRow({tag:r,stamp:E,flags:n?.flags??0,site_related:n?.site_related??0,data:F}),{tag:r,stampHex:E,stamp40:v,data:F,devicePushable:E8(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Ie(x);let r=wt(e);if(r===null)throw new Ie(x);let{stamp:t,...i}=A,n=ps(await this.resolveScaleRefs(e),i,null),F=z0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:cA(F),flags:0,site_related:0,data:n})}recordStampMs(x){if(typeof x!="string")return null;try{return Wr(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Ie(x);let r=this.model.splits.find(E=>E.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new Ie(x);let t=Math.abs(A.count),i=A.offset??0,n=this.buildSelectSet(e,A.select),F=await this.resolveScaleRefs(e);return(await this.collectMatched(F,r,i+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:n})).slice(i,i+t)}matchesSplit(x,A){return x.length===0?!1:A.matchAll?!0:x.length<A.keyBytes.length?!1:A.keyBytes.every((e,r)=>x[r]===e)}async collectMatched(x,A,e,r){let t=[];if(e<=0)return t;let i=Math.max(e,ud);for(let n=0;;n+=i){let F=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:i,offset:n});for(let v of F)if(v.data&&this.matchesSplit(v.data,A)&&(t.push(this.recordFromRow(x,v,r.selectSet)),t.length>=e))return t;if(F.length<i)return t}}async readTimeseriesEdge(x,A,e){return(await this.readTimeseries(x,{count:A==="youngest"?-1:1,select:e}))[0]??null}recordFromRow(x,A,e){let r=us(x,A.data),t={stamp:this.rowStamp(A)};for(let[i,n]of Object.entries(r))i!=="stamp"&&(!e||e.has(i))&&(t[i]=n);return t}rowStamp(x){return zr(z0.stamp40ToMS(YA(x.stamp)))}boundHex(x){if(x!=null)return cA(z0.msToStamp40(x))}async resolveScaleRefs(x){if(!x.fields.some(r=>r.vscaleRef||r.vofsRef))return x;let A=new Map,e=[];for(let r of x.fields){if(!r.vscaleRef&&!r.vofsRef){e.push(r);continue}e.push({...r,vscale:r.vscaleRef?await this.resolveRef(r.vscaleRef,A,r.vscale):r.vscale,vofs:r.vofsRef?await this.resolveRef(r.vofsRef,A,r.vofs):r.vofs})}return{...x,fields:e}}async resolveRef(x,A,e){if(!/^config[0-9a-f]$/i.test(x.container))return e;let r=this.referencedField(x);if(!r)return e;let t=x.container.toLowerCase();A.has(t)||A.set(t,await this.referencedRecordData(x.container));let i=A.get(t);if(!i)return e;let n=td(r,i);return n===null?e:n}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>Qi(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=wt(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!Be(r)&&!Pt(r.type)).map(r=>[Qi(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===wF)throw new Tt(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!Be(t)&&!Pt(t.type)).map(t=>Qi(t))),r=new Set;for(let t of A){let i=t.toLowerCase();if(i!=="stamp"){if(!e.has(i))throw new Js(t);r.add(i)}}return r}},pd=new Set(["$titles","$meta"]);function bd(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 bs(x,A){let e=A.toLowerCase();if(pd.has(e))return null;let r=x[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[i,n]of Object.entries(r)){if(typeof n!="object"||n===null)continue;let F=n.alias;typeof F=="string"&&F.length>0&&t.set(i.toLowerCase(),F)}return t}function T8(x,A){let e={};for(let[r,t]of Object.entries(x)){if(r==="stamp"){e[r]=t;continue}let i=A?.get(r.toLowerCase());e[i??r]=t}return e}function Mt(x,A){if(!x)return null;let e=bs(x,A.name);return e||(A.alias?bs(x,A.alias):null)}var md=require("events"),O0="[OfflineSyncManager]",hd=500,jd="site_info",gd=new Set(["local-data-interface.json"]);function Rx(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function yd(x){let A=Pn(x);return!!(x&2)||A!==0&&A!==65}function _F(x){return x.filter(A=>(A.filename===Kr||A.filename===Ss)&&A.outcome==="download").map(A=>A.filename)}var rr="skip-equal",Jr="skip-device-readonly",Zi="delete",qe="error",xs="upload",As="uploading-utos",SF="downloading-utos",bn="fetching-device-state",es="uploading-files",mn="downloading-files",PF="executing-change-requests",$F="executed",kd="error",rs="skip-old-stamp",wd=class extends md.EventEmitter{constructor(x,A,e){super(),A0(this,"utoMaster",x),A0(this,"storage",A),A0(this,"logger",e)}emitProgress(x,A,e,r,t){let i={phase:x,item:A,completed:e,total:r,...t};this.emit("progress",i)}async uploadHistoricTag(x,A,e,r,t){try{let i=await this.storage.getRowForTag(x),n=0,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>({tag:x,stamp:cA(u.stamp40),flags:i?.flags??0,site_related:i?.site_related??0,data:u.data}));await this.storage.insertHistoricRows(E),n+=E.length};return await this.utoMaster.requestHistoricUtos(x,e,t,void 0,hd,F),this.logger?.info(`${O0} historic upload tag=0x${x.toString(16)} +${n} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:n}}catch(i){return this.logger?.error(`${O0} historic upload error tag=0x${x.toString(16)}: ${i}`),{tag:x,sTag:A.sTag,historic:!0,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadSingleTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t)return this.logger?.info(`${O0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:rr,dbStamp40:e,deviceStamp40:r};let i=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:cA(t.stamp),flags:i?.flags??0,site_related:i?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${O0} single upload tag=0x${x.toString(16)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"upload",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${O0} single upload error tag=0x${x.toString(16)}: ${JSON.stringify(t)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(As,null,0,t);let i=0;for(let n of x){Rx(r);let F=A.get(n),{tagInfo:v,dbStamp40:E,deviceStamp40:u}=F;if(this.emitProgress(As,v?.sTag??`0x${n.toString(16)}`,i,t),!v||u===null)e.set(n,{tag:n,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:E,deviceStamp40:u});else if(!(!v.flags.up||u<=E)){let D=v.sTag,m=i,w=v.historic?await this.uploadHistoricTag(n,v,E,u,j=>{this.emitProgress(As,D,m,t,{recordsReceived:j})}):await this.uploadSingleTag(n,v,E,u);e.set(n,w)}++i}}async pullFileFromDevice(x,A,e,r,t,i){let n=A.stamp;try{let F=await this.utoMaster.requestFile(x,E=>{this.emitProgress(es,x,i,t,{bytesTransferred:E})}),v=_s(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:xs,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${O0} file upload error ${x}: ${JSON.stringify(F)}`),{filename:x,outcome:qe,dbStamp40:e,deviceStamp40:n}}}async autoSyncUploadFile(x,A,e,r,t,i,n,F){let v=A.stamp;if(v>r)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):i?this.pullFileFromDevice(x,A,r,t,n,F):void 0;if(v===r&&this.fileContentMatches(A,e))return{filename:x,outcome:rr,dbStamp40:r,deviceStamp40:v}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:cA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:rr,dbStamp40:r,deviceStamp40:t}}catch(i){return this.logger?.error(`${O0} file upload error ${x}: ${JSON.stringify(i)}`),{filename:x,outcome:qe,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(x,A,e,r,t,i,n){let F=A.stamp;if(F!==r||!this.fileContentMatches(A,e))return t?this.pullFileFromDevice(x,A,r,e.flags_int,i,n):{filename:x,outcome:Jr,dbStamp40:r,deviceStamp40:F}}async decideFileUpload(x,A,e,r){let t=await this.storage.getFile(x),i=!!(A._flags&1);if(!t)return i?this.pullFileFromDevice(x,A,0,16,e,r):void 0;let n=YA(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,n,t.flags_int,i,e,r):this.decideNonSystemUpload(x,A,t,n,i,e,r)}pullIfReadable(x,A,e,r,t,i,n){return x?this.pullFileFromDevice(A,e,r,t,i,n):void 0}async decideNonSystemUpload(x,A,e,r,t,i,n){let F=e.flags_int;if(!(F&2))return F&4?this.pullIfReadable(t,x,A,r,F,i,n):this.decideUploadBySyncLogic(x,A,e,r,t,i,n)}async decideUploadBySyncLogic(x,A,e,r,t,i,n){let F=e.flags_int,v=Pn(F);if(v===65)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):this.pullIfReadable(t,x,A,r,F,i,n);if(v===1)return this.autoSyncUploadFile(x,A,e,r,F,t,i,n);if(v===97)return A.stamp>r?this.pullIfReadable(t,x,A,r,F,i,n):void 0;if(v!==33)return this.mirrorUploadFile(x,A,e,r,t,i,n)}async uploadFiles(x,A,e,r){let t=Object.entries(x),i=t.length;this.emitProgress(es,null,0,i);let n=0;for(let[F,v]of t){if(Rx(r),!(F===Ss||F===Kr&&!e)){let u=await this.decideFileUpload(F,v,i,n);u&&A.set(F,u)}this.emitProgress(es,F,++n,i)}}fileContentMatches(x,A){return A!==null&&x.crc32===A.crc&&x.size===A.size}async downloadSingleTag(x,A,e,r){try{let t=await this.storage.getRowForTag(x);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,x,t.data,e),{tag:x,sTag:A.sTag,historic:!1,outcome:"download",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${O0} download error tag=0x${x.toString(16)}: ${t}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async processDownloadTag(x,A,e,r,t){if(e===r&&!t.has(x)){let i=A.flags.up?rr:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:i,dbStamp40:e,deviceStamp40:r});return}if(e>r){let i=A.flags.down?await this.downloadSingleTag(x,A,e,r):{tag:x,sTag:A.sTag,historic:!1,outcome:Jr,dbStamp40:e,deviceStamp40:r};t.set(x,i)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(SF,null,0,t);let i=0;for(let n of x){Rx(r);let{tagInfo:F,dbStamp40:v,deviceStamp40:E}=A.get(n);F&&E!==null&&!F.historic&&await this.processDownloadTag(n,F,v,E,e),this.emitProgress(SF,F?.sTag??`0x${n.toString(16)}`,++i,t)}}async sendFileToDevice(x,A,e,r,t){let i=x.data.byteLength,n=F=>{if(F!==null){let v=Math.round(i*parseInt(F,10)/100);this.emitProgress(mn,x.filename,t,r,{bytesTransferred:v,bytesTotal:i})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,x.data,z0.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(F){return this.logger?.error(`${O0} file download error ${x.filename}: ${F}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",n)}}async processDownloadFile(x,A,e,r,t=!1){if(!x.data)return;let i=A?.stamp??0,n=YA(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return n===i?void 0:{filename:x.filename,outcome:rr,dbStamp40:n,deviceStamp40:i};if(!(!t&&n<i))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:Jr,dbStamp40:n,deviceStamp40:i}:this.sendFileToDevice(x,n,i,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(jd);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${O0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),i=t.filter(D=>D.flags&8),n=t.filter(D=>!(D.flags&8)),F=[...i,...n].filter(D=>D.filename),v=Object.entries(x).filter(([,D])=>D._flags&4).map(([D])=>D),E=F.length;this.emitProgress(mn,null,0,E);let u=0;for(let D of F){if(Rx(r),e&&D.filename===Kr){this.emitProgress(mn,D.filename,++u,E);continue}let m=D.filename===Kr&&!e,w=await this.decideFileDownload(D,x[D.filename],A.get(D.filename),v,m,E,u);w&&A.set(D.filename,w),this.emitProgress(mn,D.filename,++u,E)}}async decideFileDownload(x,A,e,r,t,i,n){return A!==void 0?this.decideDownloadExisting(x,A,e,t,i,n):this.decideDownloadMissing(x,r,i,n)}async decideDownloadExisting(x,A,e,r,t,i){if(A._flags&4)return;if(x.flags&8)return e?void 0:this.processDownloadFile(x,A,t,i,r);let n=x.flags_int;if(n&8)return this.handleDeviceDelete(x,A,e);if(!e&&!(n&4))return this.pushToDevice(x,A,t,i)}async pushToDevice(x,A,e,r){let t=A.stamp,i=YA(x.stamp),n=this.wantDownloadPush(x,A,i,t);if(n==="match")return{filename:x.filename,outcome:rr,dbStamp40:i,deviceStamp40:t};if(n!=="none"&&!(i===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,i,t,e,r):{filename:x.filename,outcome:Jr,dbStamp40:i,deviceStamp40:t}}wantDownloadPush(x,A,e,r){let t=x.flags_int;if(t&2)return"push";let i=this.fileContentMatches(A,x),n=Pn(t);return n===33||n===1&&e>=r?i?"match":"push":n===97&&e>r?"push":"none"}async handleDeviceDelete(x,A,e){let r=A.stamp,t=YA(x.stamp);if(!(e&&(e.outcome===xs||e.outcome===qe))){if(!(A._flags&2))return{filename:x.filename,outcome:Jr,dbStamp40:t,deviceStamp40:r};try{return await this.utoMaster.deleteFile(x.filename),await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Zi,dbStamp40:t,deviceStamp40:r}}catch(i){return this.logger?.error(`${O0} file delete error ${x.filename}: ${JSON.stringify(i)}`),{filename:x.filename,outcome:qe,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,i=YA(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:Zi,dbStamp40:i,deviceStamp40:null}}catch(n){return this.logger?.error(`${O0} file delete error ${x.filename}: ${JSON.stringify(n)}`),{filename:x.filename,outcome:qe,dbStamp40:i,deviceStamp40:null}}if(!(x.flags&12)&&yd(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,i,0,e,r)}hasMatchingNode(x,A){return A.some(e=>e.slice(0,-1)===x.slice(0,e.length-1))}async reconcileFileState(x){try{await this.reconcileFileStateUnguarded(x)}catch(A){if(x?.aborted)throw A;this.logger?.error(`${O0} file-state reconciliation failed: ${JSON.stringify(A)}`)}}async reconcileFileStateUnguarded(x){let A=await this.utoMaster.requestFileList(),e=new Set(Object.keys(A)),r=await this.storage.getFiles(),t=new Map(r.map(i=>[i.filename,i]));for(let[i,n]of Object.entries(A))Rx(x),await this.reconcileDeviceFile(i,n,t.get(i)??null);for(let i of r)Rx(x),e.has(i.filename)||await this.dropRowMissingFromDevice(i)}async reconcileDeviceFile(x,A,e){let r=!!((A._flags|(e?.flags??0))&8);if(e?.data&&!this.fileContentMatches(A,e)){this.logger?.info(`${O0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp: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||gd.has(x)}fileRowMatches(x,A){return x.stamp===A.stamp&&x.crc===A.crc&&x.size===A.size&&x.flags===A.flags&&x.flags_int===A.flags_int&&(x.data??null)===A.data}async dropRowMissingFromDevice(x){try{await this.storage.deleteFile(x.filename)}catch(A){this.logger?.error(`${O0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){Rx(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${O0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null){if(!A.serialNumber)throw new Error(`${O0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${O0} DB metadata missing device_id`);await this.storage.setMetadataValue("device_id",A.serialNumber),e=A.serialNumber}if(e.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${O0} DB device_id "${e}" does not match connected device "${A.serialNumber}"`);return this.emitProgress("validating",null,1,1),A}buildTagMap(x){let A=new Map;for(let e=0;e<x.utos.length;e++){let r=x.utos[e];A.set(r.wTag,{index:e,flags:{up:r.flags.up,down:r.flags.down,setValue:!!r.flags.setValue},historic:r.flags.historic,sTag:r.sTag})}return A}async resolveDbTags(x){let A=await this.storage.getUtoDataTags(),e=new Set(A);for(let[r,t]of x)t.historic&&!e.has(r)&&A.push(r);return A}async buildTagStampCache(x,A,e){let r=new Map;for(let t of x){let i=A.get(t),n=await this.storage.getLatestStampForTag(t),F=n?YA(n):0,v=i&&i.index<e.stamps.length?e.stamps[i.index]:null;r.set(t,{dbStamp40:F,deviceStamp40:v,tagInfo:i})}return r}async executeChangeRequests(x,A,e,r,t,i){let n=await this.storage.getUtoChangeRequests(),F=this.groupChangeRequests(n),v=F.size;if(this.emitProgress(PF,null,0,v),v===0)return;let E=new Set,u=0;for(let[D,m]of F){Rx(i);let w=x.get(D),j=w?.sTag??`0x${D.toString(16)}`;this.emitProgress(PF,j,u,v),await this.executeChangeRequestTag(D,j,w,m,A,r,t,E),++u}E.size>0&&await this.repullExecutedTags(E,x,e,i)}groupChangeRequests(x){let A=new Map;for(let e of x){let r=A.get(e.tag)??[];r.push({stamp40:YA(e.stamp),user:e.user,json:e.json}),A.set(e.tag,r)}return A}async executeChangeRequestTag(x,A,e,r,t,i,n,F){if(!e){this.pushChangeResults(n,x,A,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(n,x,A,r,"skip-unsupported");return}let v=e.index<t.stamps.length?t.stamps[e.index]:0,E=r.filter(D=>D.stamp40<=v),u=r.filter(D=>D.stamp40>v);this.pushChangeResults(n,x,A,E,rs),u.length>0&&await this.coalesceAndSend(x,A,e,u,i,n,F)}async coalesceAndSend(x,A,e,r,t,i,n){let F=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===qe||!F||!F.data){this.pushChangeResults(i,x,A,r,"error");return}let v=this.resolveSetObject(F.data,r,A);if(v===null){this.pushChangeResults(i,x,A,r,"error");return}if(Object.keys(v).length===0){this.pushChangeResults(i,x,A,r,"skip-no-change");return}let E=r[r.length-1].stamp40,u=await this.utoMaster.sendSetValue(x,JSON.stringify(v),E);u.outcome==="ok"||u.outcome==="stamp"?(n.add(x),this.pushChangeResults(i,x,A,r,$F,u.resultCode)):u.outcome==="denied"?(this.logger?.warn(`${O0} change-request denied ${A} (result=${u.resultCode}) \u2014 server will retry`),this.pushChangeResults(i,x,A,r,"denied",u.resultCode)):(this.logger?.error(`${O0} change-request error ${A} (result=${u.resultCode})`),this.pushChangeResults(i,x,A,r,"error",u.resultCode))}resolveSetObject(x,A,e){try{let r=JSON.parse(z0.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${O0} change-request unparseable uto_data ${e}: ${r}`),null}}buildSetObject(x,A,e){let r={};for(let t of A){let i=JSON.parse(t.json);if(!this.isPlainRecord(i))throw new Error(`change-request JSON is not an object on ${e}`);for(let[n,F]of Object.entries(i)){let v=this.resolveChangeField(x[n],F,n,e);v.apply&&(r[n]=v.value,x[n]=v.value)}}return r}resolveChangeField(x,A,e,r){if(this.isBitwiseOp(A)){let{op:t,val:i}=A;return this.resolveBitwiseOp(x,t,i,e,r)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,e,r,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${O0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${O0} change-request op "${A}" with non-number val on ${t}.${r} \u2014 skipped`),{apply:!1}):x===void 0?A==="|"?{apply:!0,value:e}:{apply:!1}:typeof x!="number"?(this.logger?.warn(`${O0} change-request op "${A}" on non-number ${t}.${r} \u2014 skipped`),{apply:!1}):{apply:!0,value:A==="|"?x|e:x&e}}isBitwiseOp(x){return this.isPlainRecord(x)&&"op"in x}isPlainRecord(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}pushChangeResults(x,A,e,r,t,i){for(let n of r)x.push({tag:A,sTag:e,stamp40:n.stamp40,user:n.user,outcome:t,resultCode:i})}async repullExecutedTags(x,A,e,r){let t=null;try{t=await this.utoMaster.requestStamps()}catch(i){this.logger?.warn(`${O0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${i}`)}for(let i of x)Rx(r),await this.repullExecutedTag(i,A,t,e)}async repullExecutedTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${O0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let i=await this.storage.getRowForTag(x),n=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:cA(n),flags:i?.flags??0,site_related:i?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let F=r.get(x);if(F){let v=A.get(x),E=e&&v&&v.index<e.stamps.length?e.stamps[v.index]:n;F.dbStamp40=n,F.deviceStamp40=E}this.logger?.info(`${O0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${O0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],i=_F(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:i.length>0,rebootFilesDeployed:i,totalTagsUploaded:r.filter(n=>n.outcome==="upload"&&!n.historic).length,totalTagsDownloaded:r.filter(n=>n.outcome==="download").length,totalTagsSkipped:r.filter(n=>n.outcome===rr||n.outcome==="skip-db-readonly"||n.outcome===Jr).length,totalHistoricRecordsAppended:r.reduce((n,F)=>n+(F.recordsAppended??0),0),totalFilesUploaded:t.filter(n=>n.outcome===xs).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===Zi).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===$F).length,totalErrors:r.filter(n=>n.outcome===qe).length+t.filter(n=>n.outcome===qe).length+e.filter(n=>n.outcome===kd).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);Rx(A),this.emitProgress(bn,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${O0} requestStamps returned null`);this.emitProgress(bn,"stamps",1,3);let i=await this.utoMaster.requestFileList();this.emitProgress(bn,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(bn,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),v=new Map,E=new Map,u=[],D=await this.isAppInDevPhase();return Rx(A),await this.uploadUtoTags(n,F,v,A),Rx(A),await this.uploadFiles(i,E,D,A),Rx(A),await this.executeChangeRequests(r,t,F,v,u,A),Rx(A),await this.downloadUtoTags(n,F,v,A),Rx(A),await this.downloadFiles(i,E,D,A),Rx(A),_F([...E.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(v,E,u)}async executeAdHocChangeRequest(x,A){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${O0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${O0} requestStamps returned null`);let i=r.get(x),n=i?.sTag??`0x${x.toString(16)}`,F=A.map(m=>({stamp40:m.stamp40,user:"",json:m.json})).sort((m,w)=>m.stamp40-w.stamp40),v=new Map,E=[],u=new Set;return await this.executeChangeRequestTag(x,n,i,F,t,v,E,u),u.size>0&&await this.repullExecutedTags(u,r,new Map,void 0),E.find(m=>m.outcome!==rs)?.outcome??rs}},_d=require("events"),Sd=require("events"),Pd=require("events"),$d=5e3,Ks=class q8 extends Pd.EventEmitter{constructor(A=QA){super(),A0(this,"logger",A),A0(this,"ws",null),A0(this,"bridgeTransport",null),A0(this,"bridgeSignal"),A0(this,"bridgeResolve",null),A0(this,"bridgeReject",null),A0(this,"serverMessageCount",0),A0(this,"settled",!1),A0(this,"abortHandler",null),A0(this,"connectTimeout"),A0(this,"writeQueue",[]),A0(this,"isProcessingQueue",!1),A0(this,"queueAborted",!1),A0(this,"queueDrainPromise",Promise.resolve()),A0(this,"transportUnsubscribe",null)}static buildSyncUrl(A,e){return`wss://${A}/uto/1/sync/${e}`}resetBridgeState(){this.serverMessageCount=0,this.settled=!1,this.abortHandler=null,this.connectTimeout=void 0,this.writeQueue=[],this.isProcessingQueue=!1,this.queueAborted=!1,this.queueDrainPromise=Promise.resolve(),this.bridgeResolve=null,this.bridgeReject=null,this.bridgeTransport=null,this.bridgeSignal=void 0,this.transportUnsubscribe=null}async processWriteQueue(){if(!this.isProcessingQueue){for(this.isProcessingQueue=!0;this.writeQueue.length>0&&!this.queueAborted;){let A=this.writeQueue.shift();try{await o8(this.bridgeTransport,A)}catch(e){let r=e instanceof Error?e.message:String(e);this.logger.error(`Error writing to transport: ${r}`)}}this.isProcessingQueue=!1}}cleanup(){this.transportUnsubscribe&&(this.transportUnsubscribe(),this.transportUnsubscribe=null),this.abortHandler&&this.bridgeSignal&&(this.bridgeSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null),this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.ws=null}settle(A,e){this.settled||(this.settled=!0,this.cleanup(),A==="resolve"?this.bridgeResolve?.({serverMessageCount:this.serverMessageCount}):this.bridgeReject?.(e))}attachWebSocketHandlers(A,e){let r=t=>{A.readyState===WebSocket.OPEN&&!this.bridgeSignal?.aborted&&!this.settled&&A.send(t)};this.abortHandler=()=>{this.logger.info("WebSocket bridge aborted"),this.queueAborted=!0,this.writeQueue.length=0,(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)&&A.close(),this.settle("reject",new Error("Operation aborted"))},this.bridgeSignal&&this.bridgeSignal.addEventListener("abort",this.abortHandler),A.onopen=()=>{this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.info(`WebSocket connected to ${e}`),this.transportUnsubscribe=this.bridgeTransport.onData(r),this.emit("wsConnected")},A.onmessage=t=>{this.serverMessageCount++,this.emit("serverMessage",this.serverMessageCount),!(this.bridgeSignal?.aborted||this.settled)&&(this.writeQueue.push(t.data),this.isProcessingQueue||(this.queueDrainPromise=this.processWriteQueue()))},A.onclose=t=>{this.logger.info(`WebSocket closed (server=${e}, code=${t.code}, messages=${this.serverMessageCount})`),this.emit("wsClosed",t.code,t.reason),this.queueDrainPromise.then(()=>this.settle("resolve")).catch(()=>this.settle("resolve"))},A.onerror=t=>{this.logger.error(`WebSocket error (server=${e})`),this.emit("wsError",t),this.queueAborted=!0,this.writeQueue.length=0,this.settle("reject",new Error("WebSocket error"))}}async bridge(A,e,r,t){return new Promise((i,n)=>{if(t?.aborted){n(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=i,this.bridgeReject=n;let F=q8.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()}},N8="https://lic.mydatanet.at/api/2/";async function I8(x,A=N8){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 Sd.EventEmitter{constructor(x=QA){super(),A0(this,"logger",x)}async execute(x,A,e,r){let t=e;t||(this.logger.info("[LegacySync] No serverUrl provided, resolving via device assignment..."),this.emit("syncPhase",{phase:"resolving-server"}),t=(await I8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let i=new Ks(this.logger);i.on("wsConnected",()=>this.emit("wsConnected")),i.on("wsClosed",(F,v)=>this.emit("wsClosed",F,v)),i.on("wsError",F=>this.emit("wsError",F)),i.on("serverMessage",F=>this.emit("serverMessage",F));let n=await i.bridge(x,t,A,r);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+n.serverMessageCount+")"),{serverMessageCount:n.serverMessageCount}}},Td=require("events"),L8="Operation aborted";function qd(x){return x instanceof Error?x.message:String(x)}function ts(x){if(x?.aborted)throw new Error(L8)}var R8=class extends Td.EventEmitter{constructor(x,A=QA){super(),A0(this,"atHandler",x),A0(this,"logger",A)}async execute(x,A,e,r){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:n=>this.atHandler.queryMntServerConfig(n),initiateSync:n=>this.atHandler.initiateMntSync(n)},{name:"mdn",queryServer:n=>this.atHandler.queryMdnServerConfig(n),initiateSync:n=>this.atHandler.initiateMdnSync(n)}],i={};for(let n of t)try{i[n.name]=await this.runSyncPhase(n,x,A,r)}catch(F){if(r?.aborted)throw new Error(L8);let v=`${n.name.toUpperCase()} sync phase failed: ${qd(F)}`;throw this.logger.error(v),new Error(v)}return this.logger.info(`Debug sync completed (mntMessages=${i.mnt}, mdnMessages=${i.mdn})`),{mntServerMessageCount:i.mnt,mdnServerMessageCount:i.mdn}}async runSyncPhase(x,A,e,r){ts(r);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let i=await x.queryServer(r);this.logger.info(`${t} server domain: ${i}`),ts(r),await x.initiateSync(r),ts(r);let n=await this.syncWithServer(A,i,e,r);return this.logger.info(`${t} phase completed (serverMessages=${n.serverMessageCount})`),n.serverMessageCount}async syncWithServer(x,A,e,r){let t=new Ks(this.logger),i=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let n=this.atHandler.createConCloseMonitor(()=>{i=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let F=await t.bridge(x,A,e,r);return i?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(r)),F}finally{n()}}},Nd=class extends _d.EventEmitter{constructor(x,A,e=QA){super(),A0(this,"syncTransport",x),A0(this,"logger",e),A0(this,"atHandler"),this.atHandler=A??null}async sync(x){let A=this.atHandler?"debug":"legacy";this.emit("syncStart",{mode:A});try{if(this.atHandler)try{return this.emit("syncPhase",{phase:"debug-sync"}),await this.syncWithDebug(x)}catch(e){return this.logger.warn("[SyncManager] Debug sync failed, falling back to legacy sync: "+(e instanceof Error?e.message:String(e))),this.emit("syncPhase",{phase:"debug-fallback-legacy"}),await this.syncLegacy(x)}return this.emit("syncPhase",{phase:"legacy"}),await this.syncLegacy(x)}catch(e){throw this.emit("syncError",e),e}}async syncLegacy(x){let A=new 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 R8(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(){}},Id=require("events"),_x={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},K0={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},zx=1e4,O8=9e4,G8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function U8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var tr="Operation aborted",Ux=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},zs=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},Md=class extends Id.EventEmitter{constructor(x,A=QA){super(),A0(this,"transport",x),A0(this,"logger",A),A0(this,"mutex",new $s("AtCommandHandler")),A0(this,"bufferState",U8()),A0(this,"responseCallback",null),A0(this,"decoder",new TextDecoder),A0(this,"dataHandler"),A0(this,"disposeTransportListener"),A0(this,"isDisposed",!1),A0(this,"activeAbort",null),A0(this,"session"),this.dataHandler=e=>this.handleIncomingData(e),this.disposeTransportListener=this.transport.onData(this.dataHandler),this.session={sendAndWait:(e,r,t=zx,i)=>this.executeSendAndWait(e,r,t,i),sendRaw:(e,r=zx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(_x.MNT_CFG,K0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(_x.MDN_CFG,K0.MDN_CFG_PREFIX,e),initiateMntSync:e=>this.executeInitiateMntSync(e),initiateMdnSync:e=>this.executeInitiateMdnSync(e),sendCompanionCert:(e,r)=>this.executeSendCompanionCert(e,r),queryCompanionCertSupport:e=>this.executeQueryCompanionCertSupport(e),sendConnectionClose:e=>this.executeSendConnectionClose(e)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(x){await this.mutex.requestLock();try{if(this.isDisposed)throw new Ux;return await x(this.session)}finally{this.mutex.unlock()}}handleIncomingData(x){let A=this.decoder.decode(x);this.bufferState.buffer+=A,this.emit("data",A),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(x){let A=new Uint8Array(x.length+2);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A[x.length]=10,A[x.length+1]=13,A.buffer}makeCleanup(x,A,e){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(x),A&&e&&A.removeEventListener("abort",e)}}makeResponseChecker(x,A,e,r){let t=x instanceof RegExp;return i=>{if(x!==K0.ERROR&&i.includes(K0.ERROR)){A(),r(new zs);return}let n=!1,F=i;if(t){let v=i.match(x);v&&(n=!0,F=v[0])}else n=i.includes(x);if(n){A(),e(F);return}i.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,e,r){return new Promise((t,i)=>{if(this.isDisposed){i(new Ux);return}if(r?.aborted){i(new Error(tr));return}x&&(this.bufferState.buffer="");let F=A instanceof RegExp?A.source:A,v={cleanup:()=>{}},E=setTimeout(()=>{v.cleanup(),i(new Error(`Timeout waiting for response: ${F}`))},e),u=()=>{v.cleanup(),i(new Error(tr))};v.cleanup=this.makeCleanup(E,r,u),r&&r.addEventListener("abort",u);let D=this.makeResponseChecker(A,v.cleanup,t,i);this.responseCallback=D,this.activeAbort=()=>{v.cleanup(),i(new Ux)},!x&&this.bufferState.buffer&&D(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(m=>{v.cleanup(),i(m)}))})}executeSendRaw(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Ux);return}this.bufferState.buffer="";let t=setTimeout(()=>{i(),r(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),i=this.makeCleanup(t);this.activeAbort=()=>{i(),r(new Ux)},this.responseCallback=n=>{G8.test(n)&&(i(),this.logger.info("RX: "+n.trim()),e(n))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(n=>{i(),r(n)})})}executeQueryConfig(x,A,e){return new Promise((r,t)=>{if(this.isDisposed){t(new Ux);return}if(e?.aborted){t(new Error(tr));return}this.bufferState.buffer="";let i={cleanup:()=>{}},n=setTimeout(()=>{i.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},zx),F=()=>{i.cleanup(),t(new Error(tr))};i.cleanup=this.makeCleanup(n,e,F),e&&e.addEventListener("abort",F);let v=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{i.cleanup(),t(new Ux)},this.responseCallback=E=>{let u=E.match(v);if(u){i.cleanup();let D=u[1].trim();this.logger.info(`Server config ${A}: ${D}`),r(D);return}E.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(E=>{i.cleanup(),this.logger.error(`Failed to send ${A} command: `+(E instanceof Error?E.message:String(E))),t(E)})})}async sendAndWait(x,A,e=zx,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=zx){return this.withAtLock(e=>e.sendRaw(x,A))}async queryMntServerConfig(x){return this.withAtLock(A=>A.queryMntServerConfig(x))}async queryMdnServerConfig(x){return this.withAtLock(A=>A.queryMdnServerConfig(x))}async initiateMntSync(x){return this.withAtLock(A=>A.initiateMntSync(x))}async initiateMdnSync(x){return this.withAtLock(A=>A.initiateMdnSync(x))}async sendCompanionCert(x,A){return this.withAtLock(e=>e.sendCompanionCert(x,A))}async executeInitiateMntSync(x){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(_x.MNT_SYNC,K0.OK,zx,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(_x.MDN_SYNC,K0.OK,zx,x),await this.executeSendAndWait(null,K0.SYNC_START,zx,x)}catch(A){this.logger.error("Failed to initiate MDN sync: "+(A instanceof Error?A.message:String(A)))}}async executeSendCompanionCert(x,A){if(this.isDisposed)throw new Ux;if(A?.aborted)throw new Error(tr);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${_x.COMPANION_CERT}=${r}`,K0.OK,zx,A),i=parseInt(t.match(/(\d+)/)[1],10),n=0;for(;n<r;){let F=Math.min(i,r-n),v=e.slice(n,n+F);await this.executeSendAndWait(`${_x.COMPANION_CERT}=${F},${n},${v}`,K0.OK,zx,A),n+=F}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Ux);return}if(A?.aborted){r(new Error(tr));return}this.bufferState.buffer="";let t={cleanup:()=>{}},i=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},zx),n=()=>{t.cleanup(),r(new Error(tr))};t.cleanup=this.makeCleanup(i,A,n),A&&A.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Ux)},this.responseCallback=v=>{let E=v.match(K0.COMPCERT_ERROR);if(E){t.cleanup(),e({success:!1,errorCode:parseInt(E[1],10)});return}if(v.includes(K0.OK)){t.cleanup(),e({success:!0});return}v.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${_x.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+F),this.transport.write(this.encodeCommand(F)).catch(v=>{t.cleanup(),r(v)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(_x.COMPANION_CERT_TEST,K0.OK,zx,x),!0}catch(A){if(A instanceof Ux)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(_x.CON_CLOSE,K0.CON_CLOSE,zx,x)}catch(A){this.logger.error("Failed to receive +CONCLOSE response: "+(A instanceof Error?A.message:String(A)))}}createConCloseMonitor(x){let A="",e=r=>{A+=r,A.includes(K0.CON_CLOSE)&&(A="",this.bufferState.closedByDevice=!0,x()),A.length>1e3&&(A=A.slice(-500))};return this.on("data",e),()=>{this.off("data",e)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}},H8=(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))(H8||{}),Ld=require("events"),ns="requesting-cert",is="cert-revoked",J8=class ms extends Ld.EventEmitter{constructor(){super(...arguments),A0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??Sn,{signal:r,atHandler:t}=A,i=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),i();let n=await this.loadOrGenerateKeypair(A.storage),F=await A.storage.getCertificate(A.apiConfig.apiHost);(F===null||!ws(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(ns),i(),F=await this.requestAndStoreCert(n,A)),this.utoMaster=new F8(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),i();let v=F;F=await t.withAtLock(async D=>{let m=await this.presentCertWithRefresh(D,v,n,A);return await D.initiateMdnSync(r),m}),this.emitPhase("ecs-handshake"),i(),await this.utoMaster.init();let E=await this.utoMaster.initiateEcsHandshake({companionPublicKey:n.publicKey,companionPrivateKey:n.privateKey,signal:r});if(!E.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${E.resultCode})`);this.emitPhase("connected");let u=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:u}}catch(n){return this.handleError(n)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let e=await A.getKeypair();if(e!==null)return e;let r=await Fs();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await QF(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof St&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new ss(is,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await ms.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 Fs();return await A.storage.saveKeypair(n),n})(),t=await ms.fetchCertOrThrowRevoked(r,A),i={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(i,A.apiConfig.apiHost),i}static async clearCredentials(A,e){await A.clearCertificate(e)}async presentCertWithRefresh(A,e,r,t){let i=await A.sendCompanionCert(e.base64Url,t.signal);if(i.success||i.errorCode===3&&((t.logger??Sn).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(ns),e=await this.requestAndStoreCert(r,t),i=await A.sendCompanionCert(e.base64Url,t.signal),i.success))return e;throw new ss("cert-presenting",`AT+COMPCERT rejected (code ${i.errorCode??"?"})`,{certErrorCode:i.errorCode})}emitPhase(A){this.emit("phase",A)}fail(A,e){return this.emit("phase","error"),{success:!1,phase:A,error:e}}handleError(A){return A instanceof ss?(this.emit("phase",A.phase===is?is:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof St?{success:!1,phase:ns,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};A0(J8,"encodePublicKeyBase64Url",ks);var Rd=J8,ss=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}},K8=(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))(K8||{}),Od={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 Gd(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 Ud=require("events");function z8(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 V8(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function W8(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function hs(x,A){return x.map((e,r)=>({name:e.name,displayValue:W8(A[r]??"",e.scale,e.offset),unit:e.unit}))}var Hd=2e3,X8=class extends Ud.EventEmitter{constructor(x,A=QA){super(),A0(this,"atHandler",x),A0(this,"logger",A),A0(this,"datapoints",[]),A0(this,"values",[]),A0(this,"polling",!1),A0(this,"pollTimer",null),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(_x.APP_GET_METADATA),A=x.includes(K0.OK)?{supported:!0,pinRequired:!1}:x.includes(K0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(K0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(K0.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(A)),A}async fetchMetadata(x){this.logger.info("Fetching metadata"+(x?" (with PIN)":""));let A=x?`${_x.APP_GET_METADATA}=${x}`:_x.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(K0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(K0.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(e.includes(K0.OK)){let r=z8(e);return this.logger.info("Parsed "+r.length+" datapoints"),this.datapoints=r,this.values=new Array(r.length).fill(""),this.emit("metadata",r),r}return e.includes(K0.ERROR)?(this.logger.error("Metadata fetch error: "+e),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(x){return this.readValues(A=>this.atHandler.sendRaw(A),x)}async readValues(x,A){try{this.logger.debug("Fetching values");let e=A?`${_x.APP_GET_DATAVALUE}=${A}`:_x.APP_GET_DATAVALUE,r=await x(e);if(r.includes(K0.OK)){let t=V8(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",hs(this.datapoints,t)),t}return[]}catch(e){return this.logger.warn("Value fetch error: "+(e instanceof Error?e.message:String(e))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let A=(await this.atHandler.sendRaw(_x.APP_TRIG_MEASURE_TEST)).includes(K0.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof Ux)throw x;return this.logger.warn("Measurement trigger probe failed: "+(x instanceof Error?x.message:String(x))),!1}}async triggerMeasurement(x={}){let{pin:A,timeoutMs:e=O8,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let i=await t.sendRaw(_x.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+i),!i.includes(K0.OK))return this.logger.warn("Measurement trigger rejected: "+i.trim()),{outcome:"rejected",values:[],response:i};this.emit("measurementTriggered");try{let n=await t.sendAndWait(null,K0.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(v=>t.sendRaw(v),A),response:n}}catch(n){if(n instanceof Ux)throw n;let F="timeout";return n instanceof zs?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${K0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:i}}})}async startPolling(x,A=Hd){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 hs(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function Jd(x,A,e){let r=i=>{if(i instanceof Ux)throw i},t=new X8(x);try{let i=await x.queryMdnServerConfig(e).catch(D=>(r(D),!1)),n=await t.checkSupport().catch(D=>(r(D),{supported:!1,pinRequired:!1})),F=n.supported?await t.checkMeasurementTriggerSupport().catch(D=>(r(D),!1)):!1,v=n.supported?{pinRequired:n.pinRequired,canTriggerMeasurement:F}:!1,E=!1,u=!1;if(i){let[D,m]=await Promise.all([x.queryCompanionCertSupport(e).catch(w=>(r(w),!1)),A?.getCertificate(i)]);E=D,u=m!=null&&ws(m.notAfter)}return{hostname:i,localData:v,secureConnection:E,validCert:u}}finally{t.dispose()}}var Kd=require("events"),zd={0:"trigger",1:"wakeup",2:"online"},Vd={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"]},Wd={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},Px={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},Xd=Px.FAILED|Px.ACTIVE|Px.STARTED|Px.RETRY|Px.WAKEUPABLE|Px.EXTSIM|Px.DISABLED|Px.WAKEUP|Px.POSUPDATE_ACTIVE,TF=`${K0.RM2M_STATE}: `;function Y8(x=0){let A=(x&Px.WAKEUPABLE)!==0,e="offline",r=A;return x&Px.POSUPDATE_ACTIVE?(e="locating",r=!1):x&Px.RETRY?(e="retry",r=!1):x&Px.STARTED?(e="dialing",r=!1):x&Px.ACTIVE?(e="active",r=!1):x&Px.FAILED?(e="failed",r=A):x&Px.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&Px.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~Xd}}function Yd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:zd[A]??x}function Qd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:Vd[A]??["unknown",`itf#${x}`,`itf#${x}`]}function Zd(x){if(x.length===0)return null;let A=x.join(",");return Wd[A]??A}function Q8(x){let A=x.split(","),[e,r,t,i,...n]=A;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let F=parseInt(r,10),v=Qd(i),E=i!==void 0?parseInt(i,10):NaN;return{stamp:new Date,rssi:E>=101?null:parseInt(e,10),state:F,uplinkState:Y8(F),uplinkMode:Yd(t),uplinkInterface:v?v[0]:null,uplinkInterfaceExtended:v?v[1]:null,uplinkInterfaceTechnical:v?v[2]:null,scriptState:Zd(n)}}function Z8(x){let A=x.indexOf(TF);if(A===-1)return null;let e=x.substring(A+TF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?Q8(t):null}var xu=5e3,Au=class extends Kd.EventEmitter{constructor(x,A=Sn){super(),A0(this,"atHandler"),A0(this,"logger"),A0(this,"lastState",null),A0(this,"pollingTimer",null),A0(this,"polling",!1),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(_x.RM2M_STATE),A=Z8(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=xu){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()}},eu=require("events"),xv=class extends eu.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}}},ru=require("events"),Av={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},tu=class extends ru.EventEmitter{constructor(x=QA,A){super(),A0(this,"logger",x),A0(this,"state"),A0(this,"transports",null),A0(this,"transportFactory",null),A0(this,"disconnectFn",null),A0(this,"reconnectOptions"),A0(this,"reconnectAbortController",null),this.state=new xv,this.reconnectOptions={...Av,...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})})}},nu={configurationNumber:1,utoInterface:0,utoEndpoint:1,utoSize:64*1024,debugInterface:1,debugEndpoint:2,debugSize:1024},iu={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"},su=590,au=3e4,P0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},fA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},Un=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},Vs=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function EA(x){try{return decodeURIComponent(x)}catch{throw new P0("malformed url encoding")}}var ou=2e3,Fu=2136;function Ws(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=ou&&A<=Fu}function Xr(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)&&!Ws(e))throw new P0(`attribute '${A}' is not valid`)}}function vu(x){return typeof x.setMetadataValue=="function"?x:null}function lu(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function Xs(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function cu(x){return{status:200,body:x.ctx.siteInfo}}async function fu(x){let{blueprint:A}=x.ctx;if(!A)throw new fA("blueprint unavailable");return{status:200,body:A}}async function Eu(x){let{me:A}=x.ctx;if(A==null)throw new fA("no profile stored");return{status:200,body:A}}function ev(x,A,e,r){let t=x.push;t&&(async()=>{try{await t.container(A,e,r)}catch(i){x.logger?.error(`[localApi] device push for tag ${A} failed:`,i)}})()}async function Bu(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 Cu=1024;function Lt(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 rv(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(Cu,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var Ys=26432,Fr={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},tv=Object.keys(Fr),Rt=["standby","commissioned","offline","commissioning","online"],js=Rt.reduce((x,A)=>x|Fr[A],0)>>>0;function nv(x){let A=0;for(let e of tv)x[e]===!0&&(A|=Fr[e]);return A>>>0}function Qs(x,A){let e={};for(let r of tv)x&Fr[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function iv(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(Ys);if(!r?.data)return!1;let t=Lt(r.data);if(!t)return!1;let i=!1;if(typeof t.lifecycleFlags=="number"){let n=Qs(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(n)&&(e.lifecycle_flags=n,i=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,i=!0),i}var du=new Set([...Rt,"service","lifecycle_state"]);function uu(x,A){let e=Math.max(z0.msToStamp40((x.timeSource??It).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function Du(x){let A=hu(x.request.body??null);if(!A)throw new P0("invalid or missing request body");pu(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!mu(r))throw new P0("this site does not support lifecycle flags!");let t=nv(r),i=t;for(let E of Rt){let u=A[E];typeof u=="boolean"&&(i=u?i|Fr[E]:i&~Fr[E])}if(i>>>=0,i===t)return{status:204,body:""};let n=uu(e,x.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~js>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:i&js}}),stamp40:n+1}],v=lu(e.storage);return v&&await v.insertUtoChangeRequests(F.map(E=>({tag:Ys,stamp40:E.stamp40,json:E.json}))),e.siteInfo.lifecycle_flags=Qs(i,r),await sv(e),bu(e,F),{status:204,body:""}}function pu(x){let A=[];for(let[e,r]of Object.entries(x))du.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 P0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!Rt.includes(e)))throw new P0("invalid parameters")}async function bu(x,A){try{let e=await Bu(x,Ys,A);e==="executed"?await iv(x.storage,x.siteInfo)&&await sv(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 sv(x){await vu(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function mu(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function hu(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 av(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new P0('"select" must be an array')}}function ju(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new P0("invalid parameter, select must be an array")}}function gu(x,A){let e=new Map;if(A){for(let[r,t]of A)e.set(t,r);return e}for(let r of x?.fields??[]){if(Be(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function yu(x){let A=new Map;for(let e of x.fields){if(Be(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function ku(x){let A=new Set;for(let e of x.fields)Be(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function wu(x,A,e){if(!e)return null;let r=gu(x,A),t=new Set,i=[];for(let n of e){if(n==="stamp")continue;let F=r.get(n);F?t.add(F):i.push(n)}if(i.length>0)throw ov(i);return t}function _u(x,A){let e=yu(x),r=[],t=[],i=!1;for(let n of A){if(n==="stamp"){i=!0,r.push("stamp");continue}let F=e.get(n);F?r.push(F):t.push(n)}if(t.length>0)throw ov(t);return i||r.unshift("stamp"),r}function Su(x,A){if(A===void 0)return;let e=ku(x),r=A.map(i=>i.toLowerCase()),t=r.filter(i=>!e.has(i));if(t.length>0)throw new P0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function Pu(x,A){if(!A)return x;let e={};for(let[r,t]of Object.entries(x))(r==="stamp"||A.has(r))&&(e[r]=t);return e}function Zs(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function ov(x){return new P0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function Hn(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function $u(x){let A=x.ctx,e=EA(x.params[1]),r=Hn(A.model,e);if(!r)throw new P0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new fA(`no data for container "${e}"`);let i=qu(A,r,t,Tu(x));return{status:200,body:Fv(A,e,i)}}function Tu(x){let A=x.query.json??{};return av(A.select)}function qu(x,A,e,r){let t=wu(A,Mt(x.blueprint??null,A),r);return Pu(e,t)}function Fv(x,A,e){let r=x.model.byNameOrAlias(A);return r?T8(e,Mt(x.blueprint??null,r)):e}async function Nu(x){let A=x.ctx,e=EA(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new fA(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new fA(`unknown container "${e}"`);let i=x.query.json??{},n=ju(i.select),F=Su(r,n);return{status:200,body:Zs(t,F)}}async function Iu(x){let A=EA(x.params[1]);return vv(x,A,"canonical")}async function Mu(x){let A=EA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new fA(`unknown container "${A}"`);return vv(x,A,"legacy")}async function vv(x,A,e){let r=Hu(x);if(!r)throw new P0("invalid or missing request body");Xr(r);let{stamp:t,...i}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new P0("value(s) of field(s) stamp are not valid");let n=x.ctx;if(e==="canonical"&&!Hn(n.model,A))throw new P0("container does not exist");let F=n.model.byNameOrAlias(A);if(F?.kind==="histdata")throw new fA(`unknown container "${A}"`);let v=e==="canonical"?Ou(n,F,i):Gu(F,i);try{let E=e==="canonical"&&t!==void 0?{...v,stamp:t}:v,u=await n.mapper.writeContainer(A,E);return u.devicePushable&&ev(n,u.tag,u.data,u.stamp40),{status:204,body:""}}catch(E){throw Lu(E,A,e,n,F)}}function Lu(x,A,e,r,t){if(x instanceof Tt){let i=x.field?Ru(r,t,x.field,e):void 0;return e==="canonical"?i?new P0(`no permission to modify container field \`${i}\``):new P0(`no permission to modify container \`${A}\``):i?new Un(`unknown field name(s): ${i}`):new Vs(`no permission to modify '${A}'`)}return x}function Ru(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():Mt(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function Ou(x,A,e){if(!A)return e;let r=Mt(x.blueprint??null,A),t=new Map;if(r)for(let[i,n]of r)t.set(n,i);else for(let i of A.fields){let n=i.alias??i.name;t.set(n,n.toLowerCase()),t.set(n.toLowerCase(),n.toLowerCase())}return lv(A,t,e,i=>new P0(`unknown field name(s): ${i}`))}function Gu(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 lv(x,e,A,r=>new Un(`unknown field name(s): ${r}`))}var Uu=new Set(["stamp","stamp4","stamp8","datetime"]);function lv(x,A,e,r){let t=new Map(x.fields.map(v=>[(v.alias??v.name).toLowerCase(),v])),i={},n=[],F=[];for(let[v,E]of Object.entries(e)){let u=A.get(v);if(!u){n.push(v);continue}let D=t.get(u);if(D&&Uu.has(D.type)&&!(typeof E=="string"&&Ws(E))){F.push(v);continue}i[u]=E}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new P0(`value(s) of field(s) ${F.join(",")} are not valid`);return i}function Hu(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=Ju(r);if(t===void 0)throw new P0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function Ju(x){try{return JSON.parse(x)}catch{return}}var cv="x-mt-backfill",fv="pending";async function xa(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"?{[cv]:fv}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var Ku=1e3,hn=1e3,Ev="20000101",Bv="*";async function zu(x){let A=x.query.json??{};bv(A,["from","until","count","offset","select"]),Xr(A);let e=x.ctx,r=EA(x.params[1]),{mapperSelect:t,order:i}=dv(e,r,A.select);uv(e,r);let n=Mn(A.from,Ev,"from"),F=Mn(A.until,Bv,"until");Dv(n,F),F!==null&&(F=Wu(F));let v=Xu(A.count),E=pv(A.offset),u=await xa(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=>Cv(x,e,r,Zs(m,i))),headers:u}}async function Vu(x){let A=x.query.json??{};bv(A,["from","until","offset","select"]),Xr(A);let e=x.ctx,r=EA(x.params[1]),t=x.params[2],{mapperSelect:i,order:n}=dv(e,r,A.select);uv(e,r);let F=Mn(A.from,Ev,"from"),v=Mn(A.until,Bv,"until");Dv(F,v);let E=pv(A.offset),u=await xa(e,A.from,F),m=(await e.mapper.readTimeseries(r,{fromMs:F,untilMs:v,count:t==="youngest"?-1:1,offset:E,select:i}))[0];return m?{status:200,body:Cv(x,e,r,Zs(m,n)),headers:u}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:u}}function Cv(x,A,e,r){return x.apiVersion==="1"?r:Fv(A,e,r)}function dv(x,A,e){let r=av(e);if(!r)return{mapperSelect:void 0,order:null};let t=Hn(x.model,A);if(!t)return{mapperSelect:r,order:null};let i=_u(t,r),n=i.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:i}}function uv(x,A){if(!Hn(x.model,A))throw new P0("timeseries does not exist")}function Mn(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return Wr(t)}catch{throw new P0(`attribute '${e}' is not valid`)}}function Dv(x,A){if(x!==null&&A!==null&&x>A)throw new P0('E_BAD_REQUEST "from" value must be older than "until"')}function Wu(x){let A=z0.msToStamp40(x);return z0.stamp40ToMS(A)>=x&&(A-=1),z0.stamp40ToMS(A)}function Xu(x){if(x==null||x==="")return Ku;let A=Number(x);if(!Number.isInteger(A))throw new P0('"count" must be an integer');if(A===0)throw new P0("`count` cannot be 0");if(A<-hn)throw new P0(`"count" must be greater than or equal to -${hn}`);if(A>hn)throw new P0(`"count" must be less than or equal to ${hn}`);return A}function pv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new P0('"offset" must be an integer');if(A<0)throw new P0('"offset" must be greater than or equal to 0');return A}function bv(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new P0(`"${e}" is not allowed`)}var Yu=1e5,Qu="20000101",Zu="*";async function xD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new fA(`unknown container "${e}"`);let i=x.query.json??{};Xr(i);let{fromMs:n,untilMs:F}=rD(i);tD(n,F);let v=nD(i),E=iD(i),u=mv(t,i.select)??["stamp"],D=Ln(i.from)?await xa(r,i.from,n):void 0,m=u.filter(S=>S!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:n,untilMs:F,count:v,offset:E,select:m.length>0?m:void 0})).map(S=>u.map(T=>T==="stamp"?S.stamp:S[T]??null)),headers:D}}async function AD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.params[2],t=x.ctx,i=t.model.byNameOrAlias(e);if(!i)throw new fA(`unknown container "${e}"`);let n=x.query.json??{};Xr(n);let F=mv(i,n.select)??["stamp"],v=eD(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 eD(x){if(!(!Ln(x.until)||x.until==="*"))try{return Wr(String(x.until))??void 0}catch{throw new P0("from or until value invalid")}}function rD(x){let A=Ln(x.from),e=Ln(x.until);if((!A||!e)&&!Aa(x.count))throw new P0("missing or invalid parameters (from and until and/or count)");return{fromMs:qF(A?x.from:Qu),untilMs:qF(e?x.until:Zu)}}function tD(x,A){if(x!==null&&A!==null&&x>A)throw new P0('"from" value must be older than "until"')}function qF(x){let A=String(x);try{return Wr(A)}catch{throw new P0(`invalid stamp "${A}"`)}}function nD(x){if(!Aa(x.count))return Yu;if(typeof x.count!="number")throw new P0("invalid parameter count");return x.count}function iD(x){let A=x.offset;if(A==null||A==="")return 0;if(typeof A!="number"||A<0)throw new P0("invalid parameter offset");return A}function mv(x,A){if(A==null)return;if(!Array.isArray(A))throw new P0("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 P0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],i=new Set(x.fields.filter(F=>!Be(F)).map(F=>(F.alias??F.name).toLowerCase()));i.add("stamp");let n=t.filter(F=>!i.has(F));if(n.length>0)throw new P0(`invalid channel(s) ${n.join(",")}`);return t}function Aa(x){return!!x}function Ln(x){return typeof x=="string"?x.trim().length>0:Aa(x)}var sD="device_id";function aD(x){return async A=>(await Jn(A),{status:200,body:await FD(A.ctx,x)})}async function Jn(x){let A=EA(x.params[0]),e=await oD(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new fA(`unknown device "${A}"`)}async function oD(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(sD)}async function FD(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=Lt(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=zr(z0.stamp40ToMS(YA(e.stamp))),r):{}}function ea(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function vD(x){return async A=>{await Jn(A);let e=fD(A.request.body??null);if(!e)throw new P0("invalid or missing request body");return ea(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?Lt(r.data)??{}:{};return await ra(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function lD(x){return async A=>(await Jn(A),ea(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await ra(A.ctx,x,e,{}),{status:204,body:""})}))}function cD(x){return async A=>{await Jn(A);let e=EA(A.params[1]);return ea(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=Lt(r.data)??{},i=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===i&&delete t[n];return await ra(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 ra(x,A,e,r){let t=rv(JSON.stringify(r),e?.data?.length??0),i=z0.msToStamp40((x.timeSource??It).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:cA(i),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),ev(x,A,t,i)}var hv={"content-type":"application/json"},ED=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:Eu,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:cu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:fu,checksUid:!0},{method:"POST",pattern:/^\/api\/1\/sites\/([^/]+)\/cn-set-lifecycle$/,handler:Du,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)\/(oldest|youngest)$/,handler:Vu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:zu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:$u,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Iu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:AD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:xD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Nu,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Mu,checksUid:!0},...BD()];function BD(){let x={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},A={"sys-flash":26433,"app-flash":26435},e=Object.entries(x).map(([t,i])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:aD(i),checksUid:!1})),r=Object.entries(A).flatMap(([t,i])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:vD(i),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:lD(i),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:cD(i),checksUid:!1}]);return[...e,...r]}var CD=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function dD(x){let A=Xs();return e=>jv(x,e,A)}async function jv(x,A,e=Xs()){try{let[r,t]=pD(A.path),i=bD(t),n=DD(r,x);if(n===null)return or(404,"E_NOT_FOUND","unknown customer");let F=A.method.toUpperCase();for(let v of ED){if(v.method!==F)continue;let E=v.pattern.exec(n);if(!E)continue;let u=E.slice(1);if(v.checksUid&&!uD(x,u[0]))return or(404,"E_NOT_FOUND","unknown site");let D=/^\/api\/([12])\//.exec(n)?.[1]??"1",m=await v.handler({request:A,params:u,query:i,ctx:x,session:e,apiVersion:D});return jD(m)}return or(404,"E_NOT_FOUND","not found")}catch(r){return yv(r)}}function uD(x,A){return x.allowAnySiteUid===!0||A!==void 0&&EA(A)===x.siteUid}function DD(x,A){let e=CD.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 pD(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function bD(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&mD(A,e);return A}function mD(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=hD(t):x.params[r]=t}function hD(x){try{return JSON.parse(x)}catch{throw new P0("request supplied data which is not json formatted ")}}function jD(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...hv,...x.headers},body:A}}function gv(x,A){return{status:x,headers:{...hv},body:JSON.stringify(A)}}function yv(x){return x instanceof P0||x instanceof Js||x instanceof Ns?or(400,"E_BAD_REQUEST",x.message):x instanceof Un||x instanceof Tt?or(403,"E_FORBIDDEN",x.message):x instanceof Vs?or(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof fA||x instanceof Ie?or(404,"E_NOT_FOUND",x.message):gv(500,{err:x instanceof Error?x.message:String(x)})}function or(x,A,e){return gv(x,{err:`${A} ${e}`})}function gD(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 vb={};bf(vb,{default:()=>gc,deviceExitCode:()=>jc,program:()=>uA});module.exports=mf(vb);var J0=require("commander"),Zt=U0(require("chalk"));var _i={name:"@microtronics/studio-cli",version:"1.3.0-alpha.0",description:"Microtronics Studio CLI Tool",main:"./out/api.js",typings:"./out/studio-cli.d.ts",bin:{"studio-cli":"studio-cli"},publishConfig:{access:"public"},scripts:{compile:"npm run build:registryApiTypings && tsc","build:cli":"node build.mjs","build:exe":"node build-exe.mjs",api:"api-extractor run --local --verbose",build:"npm run compile && npm run api && npm run build:cli","watch:build":"npm run compile -- --watch",test:"cross-env STUDIO_ENV=lucky mocha","test-ci":"cross-env STUDIO_ENV=lucky mocha --reporter mocha-junit-reporter","watch:test":"npm run test -- --watch",prepublishOnly:"npm run build","build:registryApiTypings":"npx openapi-typescript https://api.registry.lucky.ci.microtronics.com/v1/openapi.yaml -o ./src/typings/registry.ts"},author:"Microtronics",license:"ISC",dependencies:{"@gera2ld/tarjs":"^0.3.1",ajv:"^8.17.1","ajv-formats":"^3.0.1","ajv-keywords":"^5.1.0",chalk:"^5.4.1",commander:"^12.1.0","cross-fetch":"^4.0.0","deepmerge-ts":"^7.1.5",dotenv:"^16.4.7","file-type-checker":"^1.1.2",glob:"^11.0.1","iconv-lite":"^0.6.3","image-dimensions":"^2.3.0",ini:"^5.0.0",minimatch:"^10.0.1","openapi-fetch":"^0.13.0",pako:"^2.1.0",semver:"^7.7.2","sql.js":"^1.14.2","tinytar-fix":"^0.1.1","update-notifier":"^7.3.1",usb:"^2.14.0",uuid:"^9.0.1","vscode-uri":"^3.0.8",yaml:"^2.6.1"},engines:{node:">= 22"},devDependencies:{"@microsoft/api-extractor":"^7.47.11","@microtronics/device-master":"bitbucket:microtronics-core/device-master#v4.1.0","@types/chai":"^4.3.6","@types/chai-as-promised":"^7.1.5","@types/ini":"^4.1.1","@types/mocha":"^10.0.9","@types/node":"^22.9.1","@types/semver":"^7.5.6","@types/sql.js":"^1.4.11","@types/update-notifier":"^6.0.8","@types/vscode":"^1.86.2","@yao-pkg/pkg":"^6.22.0",chai:"^4.3.8","chai-as-promised":"^7.1.2","cross-env":"^7.0.3",esbuild:"^0.27.3","extract-zip":"^2.0.1",mocha:"^10.8.2","mocha-junit-reporter":"^2.2.1","openapi-typescript":"^7.6.0","pawncc-wasm":"bitbucket:microtronics-core/pawncc-wasm#v1.1.1",resedit:"^3.0.2",tar:"^7.5.7","ts-node":"^10.9.2",typescript:"^5.6.3"},mocha:{require:["ts-node/register"],"watch-files":"src/**",spec:"./test/**/*.spec.ts",recursive:!0},files:["out/api.js","out/studio-cli.d.ts","dist/main.js","dist/studio-cli.d.ts","studio-cli","CHANGELOG.md"]};var gA=U0(require("node:fs/promises"));var ht=require("vscode-uri"),eo=require("glob"),ve={readFile(x){return gA.default.readFile(x.fsPath)},async rm(x){if(await this.stat(x))return gA.default.rm(x.fsPath,{recursive:!0})},async stat(x){try{let A=await gA.default.stat(x.fsPath),e=(A.isDirectory()?2:0)|(A.isFile()?1:0)|(A.isSymbolicLink()?64:0);return{ctime:A.ctimeMs,mtime:A.mtimeMs,permissions:void 0,size:A.size,type:e}}catch{return null}},async writeFile(x,A){typeof A=="string"&&(A=new TextEncoder().encode(A));let e=ht.Utils.dirname(x);return await gA.default.mkdir(e.fsPath,{recursive:!0}),gA.default.writeFile(x.fsPath,A,{flag:"w"})},async findFiles(x,A,e){let r={ignore:e,nodir:!0,absolute:!0,dot:!0,cwd:x.fsPath};return(await(0,eo.glob)(A,r)).map(i=>{let n=i.replace(/\\/g,"/");return ht.URI.parse(`file:///${n}`)})},async copy(x,A){let e=await gA.default.stat(x.fsPath);return await gA.default.mkdir(ht.Utils.dirname(A).fsPath,{recursive:!0}),e.isDirectory()?gA.default.cp(x.fsPath,A.fsPath,{force:!0,recursive:!0}):gA.default.copyFile(x.fsPath,A.fsPath)},async mkdir(x){await gA.default.mkdir(x.fsPath,{recursive:!0})}};var et=require("vscode-uri");var de=require("vscode-uri");var qr=require("vscode-uri");var jf=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 an(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^jf[(e^x[r])&255];return(e^-1)>>>0}var mb=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]),hb=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 h0;(w=>{function x(j,S){let[T,q]=S,{line:O,col:R}=j.linePos(T);return{line:Number(O)-1,startCharacter:R-1,endCharacter:R+(q-T)}}w.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(j){return an(A.encode(j)).toString(16)}w.generateHashForLibraryName=e;function r(j){return an(A.encode(j)).toString(16)}w.generateHashForFilePath=r;function t(j){return an(j).toString(16).toUpperCase().padStart(8,"0")}w.generateCRC32ForFileContent=t;function i(j){try{let S=null;return j?.type==="Buffer"?S=Uint8Array.from(j.data):S=j,new TextDecoder("utf8").decode(S)}catch{return""}}w.convertBlobToString=i;function n(j=""){return j.replace(/\r\n|\n\r|\r/g,`
|
|
2198
|
+
`).entries()){A.line=e;let t=r.trim();t===""||t.startsWith("//")||NC(A,t)||t.includes("=")&&IC(A,t)}return qC(A.containers,A.splits)}var D8=null,LC=4;function Vr(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 Xr(x){let A=x.trim();if(A==="*")return D8;if(!/^\d{4,17}$/.test(A))throw new Error(`?apiStamp.invalid-input."${x}"`);let e=(u,D,m)=>{let w=A.slice(u,u+D);return parseInt(w.length?w.padEnd(D,"0"):m,10)},r=parseInt(A.slice(0,LC),10),t=A.length>=6?e(4,2,"01"):1,i=A.length>=8?e(6,2,"01"):1,n=e(8,2,"00"),F=e(10,2,"00"),v=e(12,2,"00"),E=e(14,3,"000");return Date.UTC(r,t-1,i,n,F,v,E)}var Tt="NAN",RC="%HEX%",OC=65535,Is=class extends Error{constructor(x){super(`?ddeCodec.unknown-alias."${x}"`),A0(this,"alias",x),this.name="DdeUnknownAliasError"}};function Gn(x){return(x.alias??x.name).toLowerCase()}function Un(x){return x==="string"}function Ms(x){return x==="stamp"||x==="stamp4"||x==="stamp8"||x==="datetime"}function p8(x){return(x.editmask??"").toUpperCase()===RC}function GC(x,A){return A===void 0||!Number.isFinite(x)?x:Ls(x,A)}function Ls(x,A){if(!Number.isFinite(x))return x;let e=10**A;return Math.sign(x)*Math.round(Math.abs(x)*e)/e}function UC(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),Ls(x,A-1-r)}function HC(x){return x==="floatm16"||x==="f32"||x==="f64"}function JC(x,A){if(!Number.isFinite(A))return A;let e=x.decpl??(HC(x.type)?9:0),r=Ls(A,e),t=x.type==="floatm16"?3:x.type==="f32"?7:15;return UC(r,t)}function qn(x,A){let e=BigInt.asUintN(64,BigInt(Math.trunc(x))),r=BigInt.asUintN(64,BigInt(Math.trunc(A))),t=0n,i=1n;for(;r!==0n;)r&1n&&(e&1n&&(t|=i),i<<=1n),e>>=1n,r>>=1n;return Number(t)}function b8(x,A,e){let r=BigInt.asUintN(64,BigInt(Math.trunc(x))),t=BigInt.asUintN(64,BigInt(Math.trunc(A))),i=BigInt.asUintN(64,BigInt(Math.trunc(e))),n=1n;for(;i!==0n;)i&1n&&(r=t&1n?r|n:r&~n,t>>=1n),i>>=1n,n<<=1n;return Number(r)}var KC=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function Nn(x){return!!x.bitmask&&KC.has(x.type)}var m8=255,h8=254,j8=253,g8=252,y8=251,zC=207,Rs=65535,In=65534,Os=65533,Gs=65532,Us=65531;function VC(x){switch(x){case m8:return Rs;case h8:return In;case j8:return Os;case g8:return Gs;case y8:return Us;default:return x<=31?x:x>zC?In:(x&15|16)<<(x>>4)-1}}function WC(x){switch(x){case Rs:return m8;case In:return h8;case Os:return j8;case Gs:return g8;case Us:return y8;default:{if(x<=31)return x;let A=1,e=x;for(;(e&65504)>0;)e>>=1,A++;return A<<4|e&15}}}var Mn=1023,Cs=31,k8=127,Qi=8388607,XC=255,ds=15,YC=-14,wF=15;function w8(x){let A=(x&Mn)<<13,e=(x&31744)>>10;if(e===Cs)return S8(1024-(x&Mn));e!==0&&(e=e-ds+4+k8);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 _8(x){if(typeof x=="string"||Number.isNaN(x))return OC;let A=new DataView(new ArrayBuffer(4));A.setFloat32(0,x);let e=A.getUint32(0),r=e>>>16&32768,t=(e&Qi)+4096,i=(t>Qi?1:0)+(e>>>23&XC),n=(t&Qi)>>>13;return i!==0&&(i=i-k8-4,i<YC?(n=0,i=0):i>wF?(n=Mn,i=wF+ds):i=i+ds),r|i<<10|n}var QC=["OF","UF","OL","SC"],us={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:Rs,OF:In,UF:Os,OL:Gs,SC:Us}},ZC={NAN:65535,OF:65534,UF:65533,OL:65532,SC:65531},Wx={NAN:1,OF:2,UF:3,OL:4,SC:5},xd=new Set(["u8","u16","u32","ufm8"]);function Ad(x){let A=Math.floor(x),e=x-A;return e<.5?A:e>.5?A+1:A%2===0?A:A+1}function Hs(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 Js(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 w8(A.getUint16(e,!1));case"ufm8":return VC(A.getUint8(e));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function S8(x){switch(x){case Wx.OF:return"OF";case Wx.UF:return"UF";case Wx.OL:return"OL";case Wx.SC:return"SC";default:return Tt}}var _F=[["NAN",Wx.NAN],["OF",Wx.OF],["UF",Wx.UF],["OL",Wx.OL],["SC",Wx.SC]];function ed(x,A){let e=x.getUint32(A,!1);if((e&2139095040)!==2139095040)return 0;let r=e&8388607;return r===0?Wx.NAN:(r=r&4194304?8388608-r:r&255,r===0?Wx.NAN:r)}function rd(x,A){let e=x.getBigUint64(A,!1);if((e&0x7ff0000000000000n)!==0x7ff0000000000000n)return 0;let r=Number(e&0xffn);return r===0?Wx.NAN:r}function td(x,A){if(x.type==="s64"){let t=A.getBigInt64(x.byteofs,!1);Nn(x)&&(t=BigInt(qn(Number(t),x.bitmask)));let i=us.s64;return _F.find(([n])=>t===BigInt(i[n]))?.[1]??0}let e=us[x.type];if(!e)return 0;let r=Js(x.type,A,x.byteofs);return Nn(x)&&(r=qn(r,x.bitmask)),_F.find(([t])=>r===e[t])?.[1]??0}function P8(x,A){switch(x.type){case"floatm16":{let e=A.getUint16(x.byteofs,!1);return(e>>10&Cs)===Cs?1024-(e&Mn):0}case"f32":return ed(A,x.byteofs);case"f64":return rd(A,x.byteofs);default:return td(x,A)}}function T8(x,A){let e=Js(x.type,A,x.byteofs);return typeof e=="string"||Number.isNaN(e)?NaN:(Nn(x)&&(e=qn(e,x.bitmask)),e*x.vscale+x.vofs)}function nd(x,A){let e=P8(x,A);if(e!==0)return S8(e);let r=T8(x,A);return Number.isNaN(r)?Tt:JC(x,r)}function id(x,A){if(x.byteofs+x.size>A.byteLength)return null;if(Un(x.type)||Ms(x.type))return NaN;let e=new DataView(A.buffer,A.byteOffset,A.byteLength);return P8(x,e)!==0?NaN:T8(x,e)}function sd(x,A){if(p8(x)){let e="";for(let r=0;r<x.size;r++)e+=A.getUint8(x.byteofs+r).toString(16).padStart(2,"0");return e.toUpperCase()}return z0.cp1252Unpack(A,x.byteofs,x.size)}var $8=25569,q8=864e5;function ad(x){return(x-$8)*q8}function od(x){return x/q8+$8}function Fd(x,A){if(x.type==="datetime")return Vr(ad(A.getFloat64(x.byteofs,!1)));if(x.type==="stamp8"){let r=A.getBigUint64(x.byteofs,!1),t=Number(r&0xffffffffffn);return Vr(z0.stamp40ToMS(t))}let e=A.getUint32(x.byteofs,!1)*256;return x.size>=5&&(e+=A.getUint8(x.byteofs+4)),Vr(z0.stamp40ToMS(e))}var vd=new Set(["u8","s8","u16","s16","u32","s32","s64","ufm8"]);function ld(x,A){return/^[+-]?\d+$/.test(x)?parseInt(x,10):/^\$[0-9a-fA-F]+$/.test(x)?parseInt(x.slice(1),16):A}function cd(x){let A=x.default;if(A===void 0)return;if(Un(x.type))return A;let e=A.trim();if(e===""||e.toUpperCase()===Tt)return Tt;if(vd.has(x.type))return ld(e,0);let r=Hs(e);return r!==null?r:A}function fd(x,A,e){return x.byteofs+x.size>e?cd(x):Un(x.type)?sd(x,A):Ms(x.type)?Fd(x,A):nd(x,A)}function Ds(x,A){let e=new DataView(A.buffer,A.byteOffset,A.byteLength),r={};for(let t of x.fields)Ce(t)||Pt(t.type)||(r[Gn(t)]=fd(t,e,A.byteLength));return r}function Ed(x,A){if(typeof A=="number")return Number.isFinite(A)?{kind:"value",physical:A}:{kind:"sentinel",state:"NAN"};if(typeof A=="string"){if(A.toUpperCase()===Tt||A==="")return{kind:"sentinel",state:"NAN"};let e=QC.find(t=>t===A);if(e)return{kind:"sentinel",state:e};if("OUS".includes(A[0]))return{kind:"skip"};let r=Hs(A);return r!==null?{kind:"value",physical:r}:SF(x)}return SF(x)}function SF(x){let A=x.default;return A!==void 0&&A.startsWith("%")?{kind:"sentinel",state:"NAN"}:{kind:"value",physical:(A!==void 0?Hs(A):null)??0}}function ps(x,A,e){switch(x.type){case"floatm16":return A.setUint16(x.byteofs,ZC[e],!1);case"f32":return A.setUint32(x.byteofs,(2139095040|Wx[e])>>>0,!1);case"f64":return A.setBigUint64(x.byteofs,0x7ff0000000000000n|BigInt(Wx[e]),!1);default:break}let r=us[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);N8(x,A,Number(r))}function Bd(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,_8(r),!1);default:break}if(Number.isNaN(r))return ps(x,A,"NAN");if(!Number.isFinite(r))return ps(x,A,"OF");let t=r;xd.has(x.type)&&t<0&&(t=0),N8(x,A,Ad(t))}function N8(x,A,e){if(Nn(x)){let r=Js(x.type,A,x.byteofs);e=b8(r,e,x.bitmask)}Cd(x.type,A,x.byteofs,e)}function Cd(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,WC(r));default:throw new Error(`?ddeCodec.non-numeric-type."${x}"`)}}function dd(x,A,e){let r=String(e);if(p8(x)){let t=r.trim();if(t.length%2!==0||t.length>x.size*2)throw new Error(`?ddeCodec.invalid-hex."${Gn(x)}"`);for(let i=0;i<x.size;i++){let n=i*2<t.length?parseInt(t.substr(i*2,2),16):0;A.setUint8(x.byteofs+i,n)}return}z0.cp1252Pack(A,x.byteofs,x.size,r)}function ud(x,A,e){let r=Xr(String(e));if(r===null)throw new Error(`?ddeCodec.unbounded-stamp."${Gn(x)}"`);if(x.type==="datetime"){A.setFloat64(x.byteofs,od(r),!1);return}let t=z0.msToStamp40(r);if(x.type==="stamp8"){A.setBigUint64(x.byteofs,BigInt(t),!1);return}A.setUint32(x.byteofs,Math.trunc(t/256),!1),x.size>=5&&A.setUint8(x.byteofs+4,t&255)}function Dd(x,A,e){if(Un(x.type))return dd(x,A,e);if(Ms(x.type))return ud(x,A,e);let r=Ed(x,e);switch(r.kind){case"skip":return;case"sentinel":return ps(x,A,r.state);case"value":return Bd(x,A,r.physical)}}function bs(x,A,e){let r=e?new Uint8Array(e):new Uint8Array(x.recordSize),t=new DataView(r.buffer,r.byteOffset,r.byteLength),i=new Map(x.fields.filter(n=>!Ce(n)&&!Pt(n.type)).map(n=>[Gn(n),n]));for(let[n,F]of Object.entries(A)){let v=i.get(n.toLowerCase());if(!v)throw new Is(n);Dd(v,t,F)}return r}var PF=99,pd=256,Me=class extends Error{constructor(x){super(`?ddeMapper.unknown-container."${x}"`),A0(this,"container",x),this.name="DdeUnknownContainerError"}},$t=class extends Error{constructor(x,A){let e=A?`${x}.${A}`:x;super(`?ddeMapper.write-forbidden."${e}"`),A0(this,"container",x),A0(this,"field",A),this.name="DdeWriteForbiddenError"}},Ks=class extends Error{constructor(x){super(`?ddeMapper.unknown-field."${x}"`),A0(this,"field",x),this.name="DdeUnknownFieldError"}};function Zi(x){return(x.alias??x.name).toLowerCase()}var bd=class{constructor(x,A,e=It){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=wt(A);if(e===null)return null;let r=await this.storage.getRowForTag(e);if(!r||!r.data)return null;let t=Ds(await this.resolveScaleRefs(A),r.data);return delete t.stamp,{stamp:this.rowStamp(r),...t}}async writeContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Me(x);let r=wt(e);if(r===null)throw new Me(x);if(e.edit===PF)throw new $t(e.name);let{stamp:t,...i}=A;this.assertFieldsWritable(e,i);let n=await this.storage.getRowForTag(r),F=bs(await this.resolveScaleRefs(e),i,n?.data??null),v=z0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs()),E=fA(v);return await this.storage.replaceUtoRow({tag:r,stamp:E,flags:n?.flags??0,site_related:n?.site_related??0,data:F}),{tag:r,stampHex:E,stamp40:v,data:F,devicePushable:d8(r)&&e.download!==0,upload:e.upload,download:e.download}}async seedContainer(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Me(x);let r=wt(e);if(r===null)throw new Me(x);let{stamp:t,...i}=A,n=bs(await this.resolveScaleRefs(e),i,null),F=z0.msToStamp40(this.recordStampMs(t)??this.timeSource.nowMs());await this.storage.replaceUtoRow({tag:r,stamp:fA(F),flags:0,site_related:0,data:n})}recordStampMs(x){if(typeof x!="string")return null;try{return Xr(x)}catch{return null}}async readTimeseries(x,A){let e=this.model.byNameOrAlias(x);if(!e)throw new Me(x);let r=this.model.splits.find(E=>E.target.toLowerCase()===e.name.toLowerCase());if(!r)throw new Me(x);let t=Math.abs(A.count),i=A.offset??0,n=this.buildSelectSet(e,A.select),F=await this.resolveScaleRefs(e);return(await this.collectMatched(F,r,i+t,{fromStamp:this.boundHex(A.fromMs),untilStamp:this.boundHex(A.untilMs),order:A.count<0?"desc":"asc",selectSet:n})).slice(i,i+t)}matchesSplit(x,A){return x.length===0?!1:A.matchAll?!0:x.length<A.keyBytes.length?!1:A.keyBytes.every((e,r)=>x[r]===e)}async collectMatched(x,A,e,r){let t=[];if(e<=0)return t;let i=Math.max(e,pd);for(let n=0;;n+=i){let F=await this.storage.getHistoricRows(26623,{fromStamp:r.fromStamp,untilStamp:r.untilStamp,order:r.order,limit:i,offset:n});for(let v of F)if(v.data&&this.matchesSplit(v.data,A)&&(t.push(this.recordFromRow(x,v,r.selectSet)),t.length>=e))return t;if(F.length<i)return t}}async readTimeseriesEdge(x,A,e){return(await this.readTimeseries(x,{count:A==="youngest"?-1:1,select:e}))[0]??null}recordFromRow(x,A,e){let r=Ds(x,A.data),t={stamp:this.rowStamp(A)};for(let[i,n]of Object.entries(r))i!=="stamp"&&(!e||e.has(i))&&(t[i]=n);return t}rowStamp(x){return Vr(z0.stamp40ToMS(QA(x.stamp)))}boundHex(x){if(x!=null)return fA(z0.msToStamp40(x))}async resolveScaleRefs(x){if(!x.fields.some(r=>r.vscaleRef||r.vofsRef))return x;let A=new Map,e=[];for(let r of x.fields){if(!r.vscaleRef&&!r.vofsRef){e.push(r);continue}e.push({...r,vscale:r.vscaleRef?await this.resolveRef(r.vscaleRef,A,r.vscale):r.vscale,vofs:r.vofsRef?await this.resolveRef(r.vofsRef,A,r.vofs):r.vofs})}return{...x,fields:e}}async resolveRef(x,A,e){if(!/^config[0-9a-f]$/i.test(x.container))return e;let r=this.referencedField(x);if(!r)return e;let t=x.container.toLowerCase();A.has(t)||A.set(t,await this.referencedRecordData(x.container));let i=A.get(t);if(!i)return e;let n=id(r,i);return n===null?e:n}referencedField(x){let A=x.field.toLowerCase();return this.model.byNameOrAlias(x.container)?.fields.find(r=>Zi(r)===A||r.name.toLowerCase()===A)??null}async referencedRecordData(x){let A=this.model.byNameOrAlias(x);if(!A)return null;let e=wt(A);return e===null?null:(await this.storage.getRowForTag(e))?.data??null}assertFieldsWritable(x,A){let e=new Map(x.fields.filter(r=>!Ce(r)&&!Pt(r.type)).map(r=>[Zi(r),r]));for(let r of Object.keys(A)){let t=e.get(r.toLowerCase());if(t&&t.edit===PF)throw new $t(x.name,t.name)}}buildSelectSet(x,A){if(!A||A.length===0)return null;let e=new Set(x.fields.filter(t=>!Ce(t)&&!Pt(t.type)).map(t=>Zi(t))),r=new Set;for(let t of A){let i=t.toLowerCase();if(i!=="stamp"){if(!e.has(i))throw new Ks(t);r.add(i)}}return r}},md=new Set(["$titles","$meta"]);function hd(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 ms(x,A){let e=A.toLowerCase();if(md.has(e))return null;let r=x[e];if(typeof r!="object"||r===null)return null;let t=new Map;for(let[i,n]of Object.entries(r)){if(typeof n!="object"||n===null)continue;let F=n.alias;typeof F=="string"&&F.length>0&&t.set(i.toLowerCase(),F)}return t}function I8(x,A){let e={};for(let[r,t]of Object.entries(x)){if(r==="stamp"){e[r]=t;continue}let i=A?.get(r.toLowerCase());e[i??r]=t}return e}function Mt(x,A){if(!x)return null;let e=ms(x,A.name);return e||(A.alias?ms(x,A.alias):null)}var jd=require("events"),O0="[OfflineSyncManager]",gd=500,yd="site_info",kd=new Set(["local-data-interface.json"]);function Ox(x){if(x?.aborted)throw x.reason??new DOMException("The operation was aborted.","AbortError")}function wd(x){let A=Tn(x);return!!(x&2)||A!==0&&A!==65}function TF(x){return x.filter(A=>(A.filename===zr||A.filename===Ps)&&A.outcome==="download").map(A=>A.filename)}var tr="skip-equal",Kr="skip-device-readonly",xs="delete",Ne="error",As="upload",es="uploading-utos",$F="downloading-utos",mn="fetching-device-state",rs="uploading-files",hn="downloading-files",qF="executing-change-requests",NF="executed",_d="error",ts="skip-old-stamp",Sd=class extends jd.EventEmitter{constructor(x,A,e){super(),A0(this,"utoMaster",x),A0(this,"storage",A),A0(this,"logger",e)}emitProgress(x,A,e,r,t){let i={phase:x,item:A,completed:e,total:r,...t};this.emit("progress",i)}async uploadHistoricTag(x,A,e,r,t){try{let i=await this.storage.getRowForTag(x),n=0,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>({tag:x,stamp:fA(u.stamp40),flags:i?.flags??0,site_related:i?.site_related??0,data:u.data}));await this.storage.insertHistoricRows(E),n+=E.length};return await this.utoMaster.requestHistoricUtos(x,e,t,void 0,gd,F),this.logger?.info(`${O0} historic upload tag=0x${x.toString(16)} +${n} records`),{tag:x,sTag:A.sTag,historic:!0,outcome:"upload",dbStamp40:e,deviceStamp40:r,recordsAppended:n}}catch(i){return this.logger?.error(`${O0} historic upload error tag=0x${x.toString(16)}: ${i}`),{tag:x,sTag:A.sTag,historic:!0,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadSingleTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t)return this.logger?.info(`${O0} single upload tag=0x${x.toString(16)} \u2014 device returned no data (skip)`),{tag:x,sTag:A.sTag,historic:!1,outcome:tr,dbStamp40:e,deviceStamp40:r};let i=await this.storage.getRowForTag(x);return await this.storage.replaceUtoRow({tag:x,stamp:fA(t.stamp),flags:i?.flags??0,site_related:i?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null}),this.logger?.info(`${O0} single upload tag=0x${x.toString(16)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"upload",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${O0} single upload error tag=0x${x.toString(16)}: ${JSON.stringify(t)}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async uploadUtoTags(x,A,e,r){let t=x.length;this.emitProgress(es,null,0,t);let i=0;for(let n of x){Ox(r);let F=A.get(n),{tagInfo:v,dbStamp40:E,deviceStamp40:u}=F;if(this.emitProgress(es,v?.sTag??`0x${n.toString(16)}`,i,t),!v||u===null)e.set(n,{tag:n,sTag:"?",historic:!1,outcome:"unknown-tag",dbStamp40:E,deviceStamp40:u});else if(!(!v.flags.up||u<=E)){let D=v.sTag,m=i,w=v.historic?await this.uploadHistoricTag(n,v,E,u,j=>{this.emitProgress(es,D,m,t,{recordsReceived:j})}):await this.uploadSingleTag(n,v,E,u);e.set(n,w)}++i}}async pullFileFromDevice(x,A,e,r,t,i){let n=A.stamp;try{let F=await this.utoMaster.requestFile(x,E=>{this.emitProgress(rs,x,i,t,{bytesTransferred:E})}),v=Ss(F);if(v!==A.crc32)throw new Error(`crc32 mismatch: expected 0x${A.crc32.toString(16)}, got 0x${v.toString(16)}`);return await this.storage.upsertFile({filename:x,stamp:fA(n),crc:A.crc32,size:F.byteLength,flags:A._flags,flags_int:r,data:F}),{filename:x,outcome:As,dbStamp40:e,deviceStamp40:n}}catch(F){return this.logger?.error(`${O0} file upload error ${x}: ${JSON.stringify(F)}`),{filename:x,outcome:Ne,dbStamp40:e,deviceStamp40:n}}}async autoSyncUploadFile(x,A,e,r,t,i,n,F){let v=A.stamp;if(v>r)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):i?this.pullFileFromDevice(x,A,r,t,n,F):void 0;if(v===r&&this.fileContentMatches(A,e))return{filename:x,outcome:tr,dbStamp40:r,deviceStamp40:v}}async convergeFileStamp(x,A,e,r){let t=A.stamp;try{return await this.storage.upsertFile({filename:x,stamp:fA(t),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e.flags_int,data:e.data}),{filename:x,outcome:tr,dbStamp40:r,deviceStamp40:t}}catch(i){return this.logger?.error(`${O0} file upload error ${x}: ${JSON.stringify(i)}`),{filename:x,outcome:Ne,dbStamp40:r,deviceStamp40:t}}}async mirrorUploadFile(x,A,e,r,t,i,n){let F=A.stamp;if(F!==r||!this.fileContentMatches(A,e))return t?this.pullFileFromDevice(x,A,r,e.flags_int,i,n):{filename:x,outcome:Kr,dbStamp40:r,deviceStamp40:F}}async decideFileUpload(x,A,e,r){let t=await this.storage.getFile(x),i=!!(A._flags&1);if(!t)return i?this.pullFileFromDevice(x,A,0,16,e,r):void 0;let n=QA(t.stamp);return A._flags&8?this.autoSyncUploadFile(x,A,t,n,t.flags_int,i,e,r):this.decideNonSystemUpload(x,A,t,n,i,e,r)}pullIfReadable(x,A,e,r,t,i,n){return x?this.pullFileFromDevice(A,e,r,t,i,n):void 0}async decideNonSystemUpload(x,A,e,r,t,i,n){let F=e.flags_int;if(!(F&2))return F&4?this.pullIfReadable(t,x,A,r,F,i,n):this.decideUploadBySyncLogic(x,A,e,r,t,i,n)}async decideUploadBySyncLogic(x,A,e,r,t,i,n){let F=e.flags_int,v=Tn(F);if(v===65)return this.fileContentMatches(A,e)?this.convergeFileStamp(x,A,e,r):this.pullIfReadable(t,x,A,r,F,i,n);if(v===1)return this.autoSyncUploadFile(x,A,e,r,F,t,i,n);if(v===97)return A.stamp>r?this.pullIfReadable(t,x,A,r,F,i,n):void 0;if(v!==33)return this.mirrorUploadFile(x,A,e,r,t,i,n)}async uploadFiles(x,A,e,r){let t=Object.entries(x),i=t.length;this.emitProgress(rs,null,0,i);let n=0;for(let[F,v]of t){if(Ox(r),!(F===Ps||F===zr&&!e)){let u=await this.decideFileUpload(F,v,i,n);u&&A.set(F,u)}this.emitProgress(rs,F,++n,i)}}fileContentMatches(x,A){return A!==null&&x.crc32===A.crc&&x.size===A.size}async downloadSingleTag(x,A,e,r){try{let t=await this.storage.getRowForTag(x);return t?.data&&await this.utoMaster.sendUTOCmdExt(3,x,t.data,e),{tag:x,sTag:A.sTag,historic:!1,outcome:"download",dbStamp40:e,deviceStamp40:r}}catch(t){return this.logger?.error(`${O0} download error tag=0x${x.toString(16)}: ${t}`),{tag:x,sTag:A.sTag,historic:!1,outcome:"error",dbStamp40:e,deviceStamp40:r}}}async processDownloadTag(x,A,e,r,t){if(e===r&&!t.has(x)){let i=A.flags.up?tr:"skip-db-readonly";t.set(x,{tag:x,sTag:A.sTag,historic:!1,outcome:i,dbStamp40:e,deviceStamp40:r});return}if(e>r){let i=A.flags.down?await this.downloadSingleTag(x,A,e,r):{tag:x,sTag:A.sTag,historic:!1,outcome:Kr,dbStamp40:e,deviceStamp40:r};t.set(x,i)}}async downloadUtoTags(x,A,e,r){let t=x.length;this.emitProgress($F,null,0,t);let i=0;for(let n of x){Ox(r);let{tagInfo:F,dbStamp40:v,deviceStamp40:E}=A.get(n);F&&E!==null&&!F.historic&&await this.processDownloadTag(n,F,v,E,e),this.emitProgress($F,F?.sTag??`0x${n.toString(16)}`,++i,t)}}async sendFileToDevice(x,A,e,r,t){let i=x.data.byteLength,n=F=>{if(F!==null){let v=Math.round(i*parseInt(F,10)/100);this.emitProgress(hn,x.filename,t,r,{bytesTransferred:v,bytesTotal:i})}};this.utoMaster.on("installing",n);try{return await this.utoMaster.sendFile(0,x.data,z0.stamp40ToMS(A),x.filename),{filename:x.filename,outcome:"download",dbStamp40:A,deviceStamp40:e}}catch(F){return this.logger?.error(`${O0} file download error ${x.filename}: ${F}`),{filename:x.filename,outcome:"error",dbStamp40:A,deviceStamp40:e}}finally{this.utoMaster.removeListener("installing",n)}}async processDownloadFile(x,A,e,r,t=!1){if(!x.data)return;let i=A?.stamp??0,n=QA(x.stamp);if(A!==void 0&&this.fileContentMatches(A,x))return n===i?void 0:{filename:x.filename,outcome:tr,dbStamp40:n,deviceStamp40:i};if(!(!t&&n<i))return!t&&A!==void 0&&!(A._flags&2)?{filename:x.filename,outcome:Kr,dbStamp40:n,deviceStamp40:i}:this.sendFileToDevice(x,n,i,e,r)}async isAppInDevPhase(){let x=await this.storage.getMetadataValue(yd);if(!x)return!1;try{return JSON.parse(x).app?.phase==="dev"}catch(A){return this.logger?.error(`${O0} corrupt site_info metadata: ${A}`),!1}}async downloadFiles(x,A,e,r){let t=await this.storage.getFiles(),i=t.filter(D=>D.flags&8),n=t.filter(D=>!(D.flags&8)),F=[...i,...n].filter(D=>D.filename),v=Object.entries(x).filter(([,D])=>D._flags&4).map(([D])=>D),E=F.length;this.emitProgress(hn,null,0,E);let u=0;for(let D of F){if(Ox(r),e&&D.filename===zr){this.emitProgress(hn,D.filename,++u,E);continue}let m=D.filename===zr&&!e,w=await this.decideFileDownload(D,x[D.filename],A.get(D.filename),v,m,E,u);w&&A.set(D.filename,w),this.emitProgress(hn,D.filename,++u,E)}}async decideFileDownload(x,A,e,r,t,i,n){return A!==void 0?this.decideDownloadExisting(x,A,e,t,i,n):this.decideDownloadMissing(x,r,i,n)}async decideDownloadExisting(x,A,e,r,t,i){if(A._flags&4)return;if(x.flags&8)return e?void 0:this.processDownloadFile(x,A,t,i,r);let n=x.flags_int;if(n&8)return this.handleDeviceDelete(x,A,e);if(!e&&!(n&4))return this.pushToDevice(x,A,t,i)}async pushToDevice(x,A,e,r){let t=A.stamp,i=QA(x.stamp),n=this.wantDownloadPush(x,A,i,t);if(n==="match")return{filename:x.filename,outcome:tr,dbStamp40:i,deviceStamp40:t};if(n!=="none"&&!(i===0||!x.data||x.data.byteLength===0))return A._flags&2?this.sendFileToDevice(x,i,t,e,r):{filename:x.filename,outcome:Kr,dbStamp40:i,deviceStamp40:t}}wantDownloadPush(x,A,e,r){let t=x.flags_int;if(t&2)return"push";let i=this.fileContentMatches(A,x),n=Tn(t);return n===33||n===1&&e>=r?i?"match":"push":n===97&&e>r?"push":"none"}async handleDeviceDelete(x,A,e){let r=A.stamp,t=QA(x.stamp);if(!(e&&(e.outcome===As||e.outcome===Ne))){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:xs,dbStamp40:t,deviceStamp40:r}}catch(i){return this.logger?.error(`${O0} file delete error ${x.filename}: ${JSON.stringify(i)}`),{filename:x.filename,outcome:Ne,dbStamp40:t,deviceStamp40:r}}}}async decideDownloadMissing(x,A,e,r){let t=x.flags_int,i=QA(x.stamp);if(t&8)try{return await this.storage.deleteFile(x.filename),{filename:x.filename,outcome:xs,dbStamp40:i,deviceStamp40:null}}catch(n){return this.logger?.error(`${O0} file delete error ${x.filename}: ${JSON.stringify(n)}`),{filename:x.filename,outcome:Ne,dbStamp40:i,deviceStamp40:null}}if(!(x.flags&12)&&wd(t)&&x.flags&2&&this.hasMatchingNode(x.filename,A)&&x.data)return this.sendFileToDevice(x,i,0,e,r)}hasMatchingNode(x,A){return A.some(e=>e.slice(0,-1)===x.slice(0,e.length-1))}async reconcileFileState(x){try{await this.reconcileFileStateUnguarded(x)}catch(A){if(x?.aborted)throw A;this.logger?.error(`${O0} file-state reconciliation failed: ${JSON.stringify(A)}`)}}async reconcileFileStateUnguarded(x){let A=await this.utoMaster.requestFileList(),e=new Set(Object.keys(A)),r=await this.storage.getFiles(),t=new Map(r.map(i=>[i.filename,i]));for(let[i,n]of Object.entries(A))Ox(x),await this.reconcileDeviceFile(i,n,t.get(i)??null);for(let i of r)Ox(x),e.has(i.filename)||await this.dropRowMissingFromDevice(i)}async reconcileDeviceFile(x,A,e){let r=!!((A._flags|(e?.flags??0))&8);if(e?.data&&!this.fileContentMatches(A,e)){this.logger?.info(`${O0} reconcile keep ${x}: row holds undeployed content`);return}if(!e?.data&&!r)return;let t={filename:x,stamp:fA(A.stamp),crc:A.crc32,size:A.size,flags:A._flags,flags_int:e?.flags_int??16,data:this.keepBlob(x,r)?e?.data??null:null};e&&this.fileRowMatches(e,t)||await this.storage.upsertFile(t)}keepBlob(x,A){return!A||kd.has(x)}fileRowMatches(x,A){return x.stamp===A.stamp&&x.crc===A.crc&&x.size===A.size&&x.flags===A.flags&&x.flags_int===A.flags_int&&(x.data??null)===A.data}async dropRowMissingFromDevice(x){try{await this.storage.deleteFile(x.filename)}catch(A){this.logger?.error(`${O0} reconcile delete error ${x.filename}: ${JSON.stringify(A)}`)}}async validateDevice(x){Ox(x),this.emitProgress("validating",null,0,1);let A=await this.utoMaster.requestDeviceInfo();if(!A)throw new Error(`${O0} requestDeviceInfo returned null`);let e=await this.storage.getMetadataValue("device_id");if(e===null){if(!A.serialNumber)throw new Error(`${O0} DB metadata missing device_id and connected device has no serialNumber`);if(!this.storage.setMetadataValue)throw new Error(`${O0} DB metadata missing device_id`);await this.storage.setMetadataValue("device_id",A.serialNumber),e=A.serialNumber}if(e.toUpperCase()!==A.serialNumber.toUpperCase())throw new Error(`${O0} DB device_id "${e}" does not match connected device "${A.serialNumber}"`);return this.emitProgress("validating",null,1,1),A}buildTagMap(x){let A=new Map;for(let e=0;e<x.utos.length;e++){let r=x.utos[e];A.set(r.wTag,{index:e,flags:{up:r.flags.up,down:r.flags.down,setValue:!!r.flags.setValue},historic:r.flags.historic,sTag:r.sTag})}return A}async resolveDbTags(x){let A=await this.storage.getUtoDataTags(),e=new Set(A);for(let[r,t]of x)t.historic&&!e.has(r)&&A.push(r);return A}async buildTagStampCache(x,A,e){let r=new Map;for(let t of x){let i=A.get(t),n=await this.storage.getLatestStampForTag(t),F=n?QA(n):0,v=i&&i.index<e.stamps.length?e.stamps[i.index]:null;r.set(t,{dbStamp40:F,deviceStamp40:v,tagInfo:i})}return r}async executeChangeRequests(x,A,e,r,t,i){let n=await this.storage.getUtoChangeRequests(),F=this.groupChangeRequests(n),v=F.size;if(this.emitProgress(qF,null,0,v),v===0)return;let E=new Set,u=0;for(let[D,m]of F){Ox(i);let w=x.get(D),j=w?.sTag??`0x${D.toString(16)}`;this.emitProgress(qF,j,u,v),await this.executeChangeRequestTag(D,j,w,m,A,r,t,E),++u}E.size>0&&await this.repullExecutedTags(E,x,e,i)}groupChangeRequests(x){let A=new Map;for(let e of x){let r=A.get(e.tag)??[];r.push({stamp40:QA(e.stamp),user:e.user,json:e.json}),A.set(e.tag,r)}return A}async executeChangeRequestTag(x,A,e,r,t,i,n,F){if(!e){this.pushChangeResults(n,x,A,r,"unknown-tag");return}if(!e.flags.setValue){this.pushChangeResults(n,x,A,r,"skip-unsupported");return}let v=e.index<t.stamps.length?t.stamps[e.index]:0,E=r.filter(D=>D.stamp40<=v),u=r.filter(D=>D.stamp40>v);this.pushChangeResults(n,x,A,E,ts),u.length>0&&await this.coalesceAndSend(x,A,e,u,i,n,F)}async coalesceAndSend(x,A,e,r,t,i,n){let F=await this.storage.getRowForTag(x);if(t.get(x)?.outcome===Ne||!F||!F.data){this.pushChangeResults(i,x,A,r,"error");return}let v=this.resolveSetObject(F.data,r,A);if(v===null){this.pushChangeResults(i,x,A,r,"error");return}if(Object.keys(v).length===0){this.pushChangeResults(i,x,A,r,"skip-no-change");return}let E=r[r.length-1].stamp40,u=await this.utoMaster.sendSetValue(x,JSON.stringify(v),E);u.outcome==="ok"||u.outcome==="stamp"?(n.add(x),this.pushChangeResults(i,x,A,r,NF,u.resultCode)):u.outcome==="denied"?(this.logger?.warn(`${O0} change-request denied ${A} (result=${u.resultCode}) \u2014 server will retry`),this.pushChangeResults(i,x,A,r,"denied",u.resultCode)):(this.logger?.error(`${O0} change-request error ${A} (result=${u.resultCode})`),this.pushChangeResults(i,x,A,r,"error",u.resultCode))}resolveSetObject(x,A,e){try{let r=JSON.parse(z0.cp1252Unpack(x,0,x.byteLength));return this.buildSetObject(r,A,e)}catch(r){return this.logger?.error(`${O0} change-request unparseable uto_data ${e}: ${r}`),null}}buildSetObject(x,A,e){let r={};for(let t of A){let i=JSON.parse(t.json);if(!this.isPlainRecord(i))throw new Error(`change-request JSON is not an object on ${e}`);for(let[n,F]of Object.entries(i)){let v=this.resolveChangeField(x[n],F,n,e);v.apply&&(r[n]=v.value,x[n]=v.value)}}return r}resolveChangeField(x,A,e,r){if(this.isBitwiseOp(A)){let{op:t,val:i}=A;return this.resolveBitwiseOp(x,t,i,e,r)}return x===A?{apply:!1}:{apply:!0,value:A}}resolveBitwiseOp(x,A,e,r,t){return A!=="|"&&A!=="&"?(this.logger?.warn(`${O0} change-request unknown op "${A}" on ${t}.${r} \u2014 skipped`),{apply:!1}):typeof e!="number"?(this.logger?.warn(`${O0} change-request op "${A}" with non-number val on ${t}.${r} \u2014 skipped`),{apply:!1}):x===void 0?A==="|"?{apply:!0,value:e}:{apply:!1}:typeof x!="number"?(this.logger?.warn(`${O0} change-request op "${A}" on non-number ${t}.${r} \u2014 skipped`),{apply:!1}):{apply:!0,value:A==="|"?x|e:x&e}}isBitwiseOp(x){return this.isPlainRecord(x)&&"op"in x}isPlainRecord(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}pushChangeResults(x,A,e,r,t,i){for(let n of r)x.push({tag:A,sTag:e,stamp40:n.stamp40,user:n.user,outcome:t,resultCode:i})}async repullExecutedTags(x,A,e,r){let t=null;try{t=await this.utoMaster.requestStamps()}catch(i){this.logger?.warn(`${O0} change-request STAMPS re-fetch failed \u2014 using per-tag stamps: ${i}`)}for(let i of x)Ox(r),await this.repullExecutedTag(i,A,t,e)}async repullExecutedTag(x,A,e,r){try{let t=await this.utoMaster.requestUto(x,0);if(!t){this.logger?.info(`${O0} change-request re-pull tag=0x${x.toString(16)} \u2014 device returned no data (E_EOD), DB row unchanged`);return}let i=await this.storage.getRowForTag(x),n=t.stamp;await this.storage.replaceUtoRow({tag:x,stamp:fA(n),flags:i?.flags??0,site_related:i?.site_related??0,data:t.data?new Uint8Array(t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)):null});let F=r.get(x);if(F){let v=A.get(x),E=e&&v&&v.index<e.stamps.length?e.stamps[v.index]:n;F.dbStamp40=n,F.deviceStamp40=E}this.logger?.info(`${O0} change-request re-pull tag=0x${x.toString(16)} \u2192 stamp ${n}`)}catch(t){this.logger?.error(`${O0} change-request re-pull error tag=0x${x.toString(16)}: ${t}`)}}aggregateResult(x,A,e){let r=[...x.values()],t=[...A.values()],i=TF(t);return{tags:r,files:t,changeRequests:e,requiresReconnectSync:i.length>0,rebootFilesDeployed:i,totalTagsUploaded:r.filter(n=>n.outcome==="upload"&&!n.historic).length,totalTagsDownloaded:r.filter(n=>n.outcome==="download").length,totalTagsSkipped:r.filter(n=>n.outcome===tr||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===As).length,totalFilesDownloaded:t.filter(n=>n.outcome==="download").length,totalFilesDeleted:t.filter(n=>n.outcome===xs).length,totalChangeRequestsExecuted:e.filter(n=>n.outcome===NF).length,totalErrors:r.filter(n=>n.outcome===Ne).length+t.filter(n=>n.outcome===Ne).length+e.filter(n=>n.outcome===_d).length}}async sync(x){let{signal:A}=x??{},e=await this.validateDevice(A);Ox(A),this.emitProgress(mn,null,0,3);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${O0} requestStamps returned null`);this.emitProgress(mn,"stamps",1,3);let i=await this.utoMaster.requestFileList();this.emitProgress(mn,"file-list",2,3);let n=await this.resolveDbTags(r);this.emitProgress(mn,"db-tags",3,3);let F=await this.buildTagStampCache(n,r,t),v=new Map,E=new Map,u=[],D=await this.isAppInDevPhase();return Ox(A),await this.uploadUtoTags(n,F,v,A),Ox(A),await this.uploadFiles(i,E,D,A),Ox(A),await this.executeChangeRequests(r,t,F,v,u,A),Ox(A),await this.downloadUtoTags(n,F,v,A),Ox(A),await this.downloadFiles(i,E,D,A),Ox(A),TF([...E.values()]).length===0&&await this.reconcileFileState(A),this.emitProgress("complete",null,0,0),this.aggregateResult(v,E,u)}async executeAdHocChangeRequest(x,A){let e=await this.utoMaster.requestDeviceInfo();if(!e)throw new Error(`${O0} requestDeviceInfo returned null`);let r=this.buildTagMap(e),t=await this.utoMaster.requestStamps();if(!t)throw new Error(`${O0} requestStamps returned null`);let i=r.get(x),n=i?.sTag??`0x${x.toString(16)}`,F=A.map(m=>({stamp40:m.stamp40,user:"",json:m.json})).sort((m,w)=>m.stamp40-w.stamp40),v=new Map,E=[],u=new Set;return await this.executeChangeRequestTag(x,n,i,F,t,v,E,u),u.size>0&&await this.repullExecutedTags(u,r,new Map,void 0),E.find(m=>m.outcome!==ts)?.outcome??ts}},Pd=require("events"),Td=require("events"),$d=require("events"),qd=5e3,zs=class M8 extends $d.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 l8(this.bridgeTransport,A)}catch(e){let r=e instanceof Error?e.message:String(e);this.logger.error(`Error writing to transport: ${r}`)}}this.isProcessingQueue=!1}}cleanup(){this.transportUnsubscribe&&(this.transportUnsubscribe(),this.transportUnsubscribe=null),this.abortHandler&&this.bridgeSignal&&(this.bridgeSignal.removeEventListener("abort",this.abortHandler),this.abortHandler=null),this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.ws=null}settle(A,e){this.settled||(this.settled=!0,this.cleanup(),A==="resolve"?this.bridgeResolve?.({serverMessageCount:this.serverMessageCount}):this.bridgeReject?.(e))}attachWebSocketHandlers(A,e){let r=t=>{A.readyState===WebSocket.OPEN&&!this.bridgeSignal?.aborted&&!this.settled&&A.send(t)};this.abortHandler=()=>{this.logger.info("WebSocket bridge aborted"),this.queueAborted=!0,this.writeQueue.length=0,(A.readyState===WebSocket.OPEN||A.readyState===WebSocket.CONNECTING)&&A.close(),this.settle("reject",new Error("Operation aborted"))},this.bridgeSignal&&this.bridgeSignal.addEventListener("abort",this.abortHandler),A.onopen=()=>{this.connectTimeout!==void 0&&(clearTimeout(this.connectTimeout),this.connectTimeout=void 0),this.logger.info(`WebSocket connected to ${e}`),this.transportUnsubscribe=this.bridgeTransport.onData(r),this.emit("wsConnected")},A.onmessage=t=>{this.serverMessageCount++,this.emit("serverMessage",this.serverMessageCount),!(this.bridgeSignal?.aborted||this.settled)&&(this.writeQueue.push(t.data),this.isProcessingQueue||(this.queueDrainPromise=this.processWriteQueue()))},A.onclose=t=>{this.logger.info(`WebSocket closed (server=${e}, code=${t.code}, messages=${this.serverMessageCount})`),this.emit("wsClosed",t.code,t.reason),this.queueDrainPromise.then(()=>this.settle("resolve")).catch(()=>this.settle("resolve"))},A.onerror=t=>{this.logger.error(`WebSocket error (server=${e})`),this.emit("wsError",t),this.queueAborted=!0,this.writeQueue.length=0,this.settle("reject",new Error("WebSocket error"))}}async bridge(A,e,r,t){return new Promise((i,n)=>{if(t?.aborted){n(new Error("Operation aborted"));return}this.resetBridgeState(),this.bridgeTransport=A,this.bridgeSignal=t,this.bridgeResolve=i,this.bridgeReject=n;let F=M8.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")))},qd),this.attachWebSocketHandlers(v,e)})}close(){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.close()}},L8="https://lic.mydatanet.at/api/2/";async function R8(x,A=L8){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 O8=class extends Td.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 R8(A)).server_url,this.logger.info("[LegacySync] Resolved server URL: "+t)),this.logger.info("[LegacySync] Starting legacy sync (server="+t+")");let i=new zs(this.logger);i.on("wsConnected",()=>this.emit("wsConnected")),i.on("wsClosed",(F,v)=>this.emit("wsClosed",F,v)),i.on("wsError",F=>this.emit("wsError",F)),i.on("serverMessage",F=>this.emit("serverMessage",F));let n=await i.bridge(x,t,A,r);return this.logger.info("[LegacySync] Legacy sync completed (serverMessages="+n.serverMessageCount+")"),{serverMessageCount:n.serverMessageCount}}},Nd=require("events"),G8="Operation aborted";function Id(x){return x instanceof Error?x.message:String(x)}function ns(x){if(x?.aborted)throw new Error(G8)}var U8=class extends Nd.EventEmitter{constructor(x,A=ZA){super(),A0(this,"atHandler",x),A0(this,"logger",A)}async execute(x,A,e,r){this.logger.info("Starting debug-enabled sync");let t=[{name:"mnt",queryServer:n=>this.atHandler.queryMntServerConfig(n),initiateSync:n=>this.atHandler.initiateMntSync(n)},{name:"mdn",queryServer:n=>this.atHandler.queryMdnServerConfig(n),initiateSync:n=>this.atHandler.initiateMdnSync(n)}],i={};for(let n of t)try{i[n.name]=await this.runSyncPhase(n,x,A,r)}catch(F){if(r?.aborted)throw new Error(G8);let v=`${n.name.toUpperCase()} sync phase failed: ${Id(F)}`;throw this.logger.error(v),new Error(v)}return this.logger.info(`Debug sync completed (mntMessages=${i.mnt}, mdnMessages=${i.mdn})`),{mntServerMessageCount:i.mnt,mdnServerMessageCount:i.mdn}}async runSyncPhase(x,A,e,r){ns(r);let t=x.name.toUpperCase();this.emit("syncPhase",{phase:x.name}),this.logger.info(`Phase: Querying ${t} server configuration`);let i=await x.queryServer(r);this.logger.info(`${t} server domain: ${i}`),ns(r),await x.initiateSync(r),ns(r);let n=await this.syncWithServer(A,i,e,r);return this.logger.info(`${t} phase completed (serverMessages=${n.serverMessageCount})`),n.serverMessageCount}async syncWithServer(x,A,e,r){let t=new zs(this.logger),i=!1;t.on("wsConnected",()=>this.emit("wsConnected"));let n=this.atHandler.createConCloseMonitor(()=>{i=!0,this.logger.info("Device initiated close (+CONCLOSE), closing WebSocket"),t.close()});try{let F=await t.bridge(x,A,e,r);return i?this.logger.info("Connection closed by device (+CONCLOSE)"):(this.logger.info("Connection closed by server, sending +CONCLOSE to device"),await this.atHandler.sendConnectionClose(r)),F}finally{n()}}},Md=class extends Pd.EventEmitter{constructor(x,A,e=ZA){super(),A0(this,"syncTransport",x),A0(this,"logger",e),A0(this,"atHandler"),this.atHandler=A??null}async sync(x){let A=this.atHandler?"debug":"legacy";this.emit("syncStart",{mode:A});try{if(this.atHandler)try{return this.emit("syncPhase",{phase:"debug-sync"}),await this.syncWithDebug(x)}catch(e){return this.logger.warn("[SyncManager] Debug sync failed, falling back to legacy sync: "+(e instanceof Error?e.message:String(e))),this.emit("syncPhase",{phase:"debug-fallback-legacy"}),await this.syncLegacy(x)}return this.emit("syncPhase",{phase:"legacy"}),await this.syncLegacy(x)}catch(e){throw this.emit("syncError",e),e}}async syncLegacy(x){let A=new O8(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 U8(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(){}},Ld=require("events"),_x={MNT_CFG:"at+mntcfg?",MDN_CFG:"at+mdncfg?",MNT_SYNC:"at+mntsync",MDN_SYNC:"at+mdnsync",CON_CLOSE:"at+conclose",APP_GET_METADATA:"AT+APP=GETMETADATA",APP_GET_DATAVALUE:"AT+APP=GETDATAVALUE",APP_TRIG_MEASURE:"AT+APP=TRIGMEASURE",APP_TRIG_MEASURE_TEST:"AT+APP=TRIGMEASURE=?",ATI:"ati",RM2M_STATE:"at+rm2mstate?",TX:"at+tx",TX_MAINTENANCE:"at+tx=4",TX_GSM_POSITION:"at+tx=1",TX_MODE_TRIGGERED:"at+txmode=0",TX_MODE_WAKEUP:"at+txmode=1",TX_MODE_ONLINE:"at+txmode=2",COMPANION_CERT:"AT+COMPCERT",COMPANION_CERT_TEST:"AT+COMPCERT=?"},K0={OK:"OK",ERROR:"ERROR",SYNC_START:"+SYNC START",MEASURED:"+MEASURED",CON_CLOSE:"+CONCLOSE",MNT_CFG_PREFIX:"+MNTCFG",MDN_CFG_PREFIX:"+MDNCFG",RM2M_STATE:"+RM2MSTATE",ERROR_PIN_REQUIRED:"ERROR PIN REQUIRED",ERROR_NO_DATA:"ERROR NO DATA",COMPCERT_ERROR:/\+COMPCERT ERROR:\s*(\d+)/},Vx=1e4,H8=9e4,J8=/(?:ERROR PIN REQUIRED|ERROR NO DATA|ERROR|OK)\r\n/;function K8(){return{buffer:"",closedByDevice:!1,reset(){this.buffer="",this.closedByDevice=!1}}}var nr="Operation aborted",Hx=class extends Error{constructor(x="AT command handler was disposed"){super(x),this.name="AtHandlerDisposedError"}},Vs=class extends Error{constructor(x="Device returned ERROR response"){super(x),this.name="AtDeviceError"}},Rd=class extends Ld.EventEmitter{constructor(x,A=ZA){super(),A0(this,"transport",x),A0(this,"logger",A),A0(this,"mutex",new $s("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=Vx,i)=>this.executeSendAndWait(e,r,t,i),sendRaw:(e,r=Vx)=>this.executeSendRaw(e,r),queryMntServerConfig:e=>this.executeQueryConfig(_x.MNT_CFG,K0.MNT_CFG_PREFIX,e),queryMdnServerConfig:e=>this.executeQueryConfig(_x.MDN_CFG,K0.MDN_CFG_PREFIX,e),initiateMntSync:e=>this.executeInitiateMntSync(e),initiateMdnSync:e=>this.executeInitiateMdnSync(e),sendCompanionCert:(e,r)=>this.executeSendCompanionCert(e,r),queryCompanionCertSupport:e=>this.executeQueryCompanionCertSupport(e),sendConnectionClose:e=>this.executeSendConnectionClose(e)}}get isBusy(){return this.mutex.islocked}get disposed(){return this.isDisposed}async withAtLock(x){await this.mutex.requestLock();try{if(this.isDisposed)throw new Hx;return await x(this.session)}finally{this.mutex.unlock()}}handleIncomingData(x){let A=this.decoder.decode(x);this.bufferState.buffer+=A,this.emit("data",A),this.responseCallback&&this.responseCallback(this.bufferState.buffer),!this.responseCallback&&this.bufferState.buffer.length>1e3&&(this.bufferState.buffer=this.bufferState.buffer.slice(-500))}encodeCommand(x){let A=new Uint8Array(x.length+2);for(let e=0;e<x.length;e++)A[e]=x.charCodeAt(e);return A[x.length]=10,A[x.length+1]=13,A.buffer}makeCleanup(x,A,e){return()=>{this.responseCallback=null,this.activeAbort=null,clearTimeout(x),A&&e&&A.removeEventListener("abort",e)}}makeResponseChecker(x,A,e,r){let t=x instanceof RegExp;return i=>{if(x!==K0.ERROR&&i.includes(K0.ERROR)){A(),r(new Vs);return}let n=!1,F=i;if(t){let v=i.match(x);v&&(n=!0,F=v[0])}else n=i.includes(x);if(n){A(),e(F);return}i.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))}}executeSendAndWait(x,A,e,r){return new Promise((t,i)=>{if(this.isDisposed){i(new Hx);return}if(r?.aborted){i(new Error(nr));return}x&&(this.bufferState.buffer="");let F=A instanceof RegExp?A.source:A,v={cleanup:()=>{}},E=setTimeout(()=>{v.cleanup(),i(new Error(`Timeout waiting for response: ${F}`))},e),u=()=>{v.cleanup(),i(new Error(nr))};v.cleanup=this.makeCleanup(E,r,u),r&&r.addEventListener("abort",u);let D=this.makeResponseChecker(A,v.cleanup,t,i);this.responseCallback=D,this.activeAbort=()=>{v.cleanup(),i(new Hx)},!x&&this.bufferState.buffer&&D(this.bufferState.buffer),x&&(this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(m=>{v.cleanup(),i(m)}))})}executeSendRaw(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Hx);return}this.bufferState.buffer="";let t=setTimeout(()=>{i(),r(new Error(`Timeout waiting for raw AT response to: ${x}`))},A),i=this.makeCleanup(t);this.activeAbort=()=>{i(),r(new Hx)},this.responseCallback=n=>{J8.test(n)&&(i(),this.logger.info("RX: "+n.trim()),e(n))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(n=>{i(),r(n)})})}executeQueryConfig(x,A,e){return new Promise((r,t)=>{if(this.isDisposed){t(new Hx);return}if(e?.aborted){t(new Error(nr));return}this.bufferState.buffer="";let i={cleanup:()=>{}},n=setTimeout(()=>{i.cleanup(),this.logger.error(`Timeout waiting for ${A} server config`),t(new Error(`Timeout waiting for ${A} response \u2014 server configuration not available`))},Vx),F=()=>{i.cleanup(),t(new Error(nr))};i.cleanup=this.makeCleanup(n,e,F),e&&e.addEventListener("abort",F);let v=new RegExp(`\\${A}:\\s*<?([^,>\\s]+)>?`);this.activeAbort=()=>{i.cleanup(),t(new Hx)},this.responseCallback=E=>{let u=E.match(v);if(u){i.cleanup();let D=u[1].trim();this.logger.info(`Server config ${A}: ${D}`),r(D);return}E.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))},this.logger.info("TX: "+x),this.transport.write(this.encodeCommand(x)).catch(E=>{i.cleanup(),this.logger.error(`Failed to send ${A} command: `+(E instanceof Error?E.message:String(E))),t(E)})})}async sendAndWait(x,A,e=Vx,r){return this.withAtLock(t=>t.sendAndWait(x,A,e,r))}async sendRaw(x,A=Vx){return this.withAtLock(e=>e.sendRaw(x,A))}async queryMntServerConfig(x){return this.withAtLock(A=>A.queryMntServerConfig(x))}async queryMdnServerConfig(x){return this.withAtLock(A=>A.queryMdnServerConfig(x))}async initiateMntSync(x){return this.withAtLock(A=>A.initiateMntSync(x))}async initiateMdnSync(x){return this.withAtLock(A=>A.initiateMdnSync(x))}async sendCompanionCert(x,A){return this.withAtLock(e=>e.sendCompanionCert(x,A))}async executeInitiateMntSync(x){this.logger.info("Initiating MNT sync"),await this.executeSendAndWait(_x.MNT_SYNC,K0.OK,Vx,x)}async executeInitiateMdnSync(x){this.logger.info("Initiating MDN sync");try{await this.executeSendAndWait(_x.MDN_SYNC,K0.OK,Vx,x),await this.executeSendAndWait(null,K0.SYNC_START,Vx,x)}catch(A){this.logger.error("Failed to initiate MDN sync: "+(A instanceof Error?A.message:String(A)))}}async executeSendCompanionCert(x,A){if(this.isDisposed)throw new Hx;if(A?.aborted)throw new Error(nr);let e=x.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-x.length%4)%4),r=e.length,t=await this.executeSendAndWait(`${_x.COMPANION_CERT}=${r}`,K0.OK,Vx,A),i=parseInt(t.match(/(\d+)/)[1],10),n=0;for(;n<r;){let F=Math.min(i,r-n),v=e.slice(n,n+F);await this.executeSendAndWait(`${_x.COMPANION_CERT}=${F},${n},${v}`,K0.OK,Vx,A),n+=F}return this.executeCompanionCertFinalize(r,A)}executeCompanionCertFinalize(x,A){return new Promise((e,r)=>{if(this.isDisposed){r(new Hx);return}if(A?.aborted){r(new Error(nr));return}this.bufferState.buffer="";let t={cleanup:()=>{}},i=setTimeout(()=>{t.cleanup(),r(new Error("Timeout waiting for AT+COMPCERT finalize response"))},Vx),n=()=>{t.cleanup(),r(new Error(nr))};t.cleanup=this.makeCleanup(i,A,n),A&&A.addEventListener("abort",n),this.activeAbort=()=>{t.cleanup(),r(new Hx)},this.responseCallback=v=>{let E=v.match(K0.COMPCERT_ERROR);if(E){t.cleanup(),e({success:!1,errorCode:parseInt(E[1],10)});return}if(v.includes(K0.OK)){t.cleanup(),e({success:!0});return}v.length>500&&(this.bufferState.buffer=this.bufferState.buffer.slice(-250))};let F=`${_x.COMPANION_CERT}=0,${x}`;this.logger.info("TX: "+F),this.transport.write(this.encodeCommand(F)).catch(v=>{t.cleanup(),r(v)})})}async queryCompanionCertSupport(x){return this.withAtLock(A=>A.queryCompanionCertSupport(x))}async executeQueryCompanionCertSupport(x){try{return await this.executeSendAndWait(_x.COMPANION_CERT_TEST,K0.OK,Vx,x),!0}catch(A){if(A instanceof Hx)throw A;return!1}}async sendConnectionClose(x){return this.withAtLock(A=>A.sendConnectionClose(x))}async executeSendConnectionClose(x){try{await this.executeSendAndWait(_x.CON_CLOSE,K0.CON_CLOSE,Vx,x)}catch(A){this.logger.error("Failed to receive +CONCLOSE response: "+(A instanceof Error?A.message:String(A)))}}createConCloseMonitor(x){let A="",e=r=>{A+=r,A.includes(K0.CON_CLOSE)&&(A="",this.bufferState.closedByDevice=!0,x()),A.length>1e3&&(A=A.slice(-500))};return this.on("data",e),()=>{this.off("data",e)}}dispose(){this.isDisposed||(this.isDisposed=!0,this.activeAbort?.(),this.disposeTransportListener(),this.responseCallback=null,this.activeAbort=null,this.removeAllListeners())}},z8=(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))(z8||{}),Od=require("events"),is="requesting-cert",ss="cert-revoked",V8=class hs extends Od.EventEmitter{constructor(){super(...arguments),A0(this,"utoMaster",null)}async authenticate(A){let e=A.logger??Pn,{signal:r,atHandler:t}=A,i=()=>{if(r?.aborted)throw new Error("Operation aborted")};try{this.emitPhase("checking-cert"),i();let n=await this.loadOrGenerateKeypair(A.storage),F=await A.storage.getCertificate(A.apiConfig.apiHost);(F===null||!_s(F.notAfter))&&(e.info("Companion cert missing or near expiry \u2014 requesting new cert"),this.emitPhase(is),i(),F=await this.requestAndStoreCert(n,A)),this.utoMaster=new c8(A.utoTransport,e,A.timeSource),this.emitPhase("cert-presenting"),i();let v=F;F=await t.withAtLock(async D=>{let m=await this.presentCertWithRefresh(D,v,n,A);return await D.initiateMdnSync(r),m}),this.emitPhase("ecs-handshake"),i(),await this.utoMaster.init();let E=await this.utoMaster.initiateEcsHandshake({companionPublicKey:n.publicKey,companionPrivateKey:n.privateKey,signal:r});if(!E.success)return this.fail("ecs-handshake",`ECS handshake failed (code ${E.resultCode})`);this.emitPhase("connected");let u=this.utoMaster;return this.utoMaster=null,{success:!0,utoMaster:u}}catch(n){return this.handleError(n)}}dispose(){this.utoMaster=null,this.removeAllListeners()}async loadOrGenerateKeypair(A){let e=await A.getKeypair();if(e!==null)return e;let r=await vs();return await A.saveKeypair(r),r}static async fetchCertOrThrowRevoked(A,e){try{return await A8(e.apiConfig,{publicKey:A.publicKey,subject:e.subject})}catch(r){throw r instanceof St&&(r.httpStatus===401||r.httpStatus===404)?(await e.storage.clearCertificate(e.apiConfig.apiHost),new as(ss,`Companion cert revoked or session expired (HTTP ${r.httpStatus})`,{httpStatus:r.httpStatus,apiCode:r.code})):r}}async requestAndStoreCert(A,e){let r=await hs.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 vs();return await A.storage.saveKeypair(n),n})(),t=await hs.fetchCertOrThrowRevoked(r,A),i={base64Url:t.certificateBase64Url,notAfter:t.notAfter};return await A.storage.saveCertificate(i,A.apiConfig.apiHost),i}static async clearCredentials(A,e){await A.clearCertificate(e)}async presentCertWithRefresh(A,e,r,t){let i=await A.sendCompanionCert(e.base64Url,t.signal);if(i.success||i.errorCode===3&&((t.logger??Pn).info("Device reported EXPIRED \u2014 refreshing cert and retrying"),this.emitPhase(is),e=await this.requestAndStoreCert(r,t),i=await A.sendCompanionCert(e.base64Url,t.signal),i.success))return e;throw new as("cert-presenting",`AT+COMPCERT rejected (code ${i.errorCode??"?"})`,{certErrorCode:i.errorCode})}emitPhase(A){this.emit("phase",A)}fail(A,e){return this.emit("phase","error"),{success:!1,phase:A,error:e}}handleError(A){return A instanceof as?(this.emit("phase",A.phase===ss?ss:"error"),{success:!1,phase:A.phase,error:A.message,certErrorCode:A.certErrorCode,httpStatus:A.httpStatus,apiCode:A.apiCode}):(this.emit("phase","error"),A instanceof St?{success:!1,phase:is,error:A.message,httpStatus:A.httpStatus,apiCode:A.code}:{success:!1,phase:"error",error:A instanceof Error?A.message:String(A)})}};A0(V8,"encodePublicKeyBase64Url",ws);var Gd=V8,as=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}},W8=(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))(W8||{}),Ud={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 Hd(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 Jd=require("events");function X8(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 Y8(x){let A=x.replace(/^\+[^\r\n]*\r\n/gm,"").replace(/\r\nOK\r\n$/,"").trim();return A?A.split("\f"):[]}function Q8(x,A,e){let r=parseFloat(x);return isNaN(r)?x:parseFloat(Number(r*A+e).toFixed(3)).toString()}function js(x,A){return x.map((e,r)=>({name:e.name,displayValue:Q8(A[r]??"",e.scale,e.offset),unit:e.unit}))}var Kd=2e3,Z8=class extends Jd.EventEmitter{constructor(x,A=ZA){super(),A0(this,"atHandler",x),A0(this,"logger",A),A0(this,"datapoints",[]),A0(this,"values",[]),A0(this,"polling",!1),A0(this,"pollTimer",null),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null)}async checkSupport(){this.logger.info("Checking local data support");let x=await this.atHandler.sendRaw(_x.APP_GET_METADATA),A=x.includes(K0.OK)?{supported:!0,pinRequired:!1}:x.includes(K0.ERROR_PIN_REQUIRED)?{supported:!0,pinRequired:!0}:x.includes(K0.ERROR_NO_DATA)?{supported:!1,pinRequired:!1}:x.includes(K0.ERROR)?{supported:!1,pinRequired:!1}:{supported:!1,pinRequired:!1};return this.logger.info("Local data support: "+JSON.stringify(A)),A}async fetchMetadata(x){this.logger.info("Fetching metadata"+(x?" (with PIN)":""));let A=x?`${_x.APP_GET_METADATA}=${x}`:_x.APP_GET_METADATA,e=await this.atHandler.sendRaw(A);if(this.logger.debug("Metadata response: "+e),e.includes(K0.ERROR_PIN_REQUIRED))return this.logger.warn("PIN required/invalid for metadata"),null;if(e.includes(K0.ERROR_NO_DATA))return this.logger.warn("No data available from device"),this.datapoints=[],this.values=[],this.emit("metadata",[]),this.emit("error","No local data available from device"),[];if(e.includes(K0.OK)){let r=X8(e);return this.logger.info("Parsed "+r.length+" datapoints"),this.datapoints=r,this.values=new Array(r.length).fill(""),this.emit("metadata",r),r}return e.includes(K0.ERROR)?(this.logger.error("Metadata fetch error: "+e),this.emit("error","Device returned error during metadata fetch"),[]):[]}async fetchValues(x){return this.readValues(A=>this.atHandler.sendRaw(A),x)}async readValues(x,A){try{this.logger.debug("Fetching values");let e=A?`${_x.APP_GET_DATAVALUE}=${A}`:_x.APP_GET_DATAVALUE,r=await x(e);if(r.includes(K0.OK)){let t=Y8(r);return this.logger.debug("Values: "+t.join(", ")),this.values=t,this.emit("values",t),this.emit("displayValues",js(this.datapoints,t)),t}return[]}catch(e){return this.logger.warn("Value fetch error: "+(e instanceof Error?e.message:String(e))),[]}}async checkMeasurementTriggerSupport(){this.logger.info("Checking measurement trigger support");try{let A=(await this.atHandler.sendRaw(_x.APP_TRIG_MEASURE_TEST)).includes(K0.OK);return this.logger.info("Measurement trigger support: "+A),A}catch(x){if(x instanceof Hx)throw x;return this.logger.warn("Measurement trigger probe failed: "+(x instanceof Error?x.message:String(x))),!1}}async triggerMeasurement(x={}){let{pin:A,timeoutMs:e=H8,signal:r}=x;return this.logger.info("Triggering measurement"),this.atHandler.withAtLock(async t=>{let i=await t.sendRaw(_x.APP_TRIG_MEASURE);if(this.logger.debug("Trigger measurement response: "+i),!i.includes(K0.OK))return this.logger.warn("Measurement trigger rejected: "+i.trim()),{outcome:"rejected",values:[],response:i};this.emit("measurementTriggered");try{let n=await t.sendAndWait(null,K0.MEASURED,e,r);return this.emit("measurementCompleted"),{outcome:"measured",values:await this.readValues(v=>t.sendRaw(v),A),response:n}}catch(n){if(n instanceof Hx)throw n;let F="timeout";return n instanceof Vs?F="error":r?.aborted&&(F="aborted"),this.logger.warn(`Measurement ${F} while waiting for ${K0.MEASURED}: `+(n instanceof Error?n.message:String(n))),this.emit("measurementFailed",F),{outcome:F,values:[],response:i}}})}async startPolling(x,A=Kd){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 js(this.datapoints,this.values)}dispose(){this.stopPolling(),this.datapoints=[],this.values=[],this.removeAllListeners()}};async function zd(x,A,e){let r=i=>{if(i instanceof Hx)throw i},t=new Z8(x);try{let i=await x.queryMdnServerConfig(e).catch(D=>(r(D),!1)),n=await t.checkSupport().catch(D=>(r(D),{supported:!1,pinRequired:!1})),F=n.supported?await t.checkMeasurementTriggerSupport().catch(D=>(r(D),!1)):!1,v=n.supported?{pinRequired:n.pinRequired,canTriggerMeasurement:F}:!1,E=!1,u=!1;if(i){let[D,m]=await Promise.all([x.queryCompanionCertSupport(e).catch(w=>(r(w),!1)),A?.getCertificate(i)]);E=D,u=m!=null&&_s(m.notAfter)}return{hostname:i,localData:v,secureConnection:E,validCert:u}}finally{t.dispose()}}var Vd=require("events"),Wd={0:"trigger",1:"wakeup",2:"online"},Xd={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"]},Yd={"NO SCRIPT":"none","SCRIPT ERROR":"error","SCRIPT OK":"ok"},Tx={FAILED:1,ACTIVE:2,STARTED:4,RETRY:8,WAKEUPABLE:16,EXTSIM:32,DISABLED:64,WAKEUP:256,POSUPDATE_ACTIVE:512},Qd=Tx.FAILED|Tx.ACTIVE|Tx.STARTED|Tx.RETRY|Tx.WAKEUPABLE|Tx.EXTSIM|Tx.DISABLED|Tx.WAKEUP|Tx.POSUPDATE_ACTIVE,IF=`${K0.RM2M_STATE}: `;function xv(x=0){let A=(x&Tx.WAKEUPABLE)!==0,e="offline",r=A;return x&Tx.POSUPDATE_ACTIVE?(e="locating",r=!1):x&Tx.RETRY?(e="retry",r=!1):x&Tx.STARTED?(e="dialing",r=!1):x&Tx.ACTIVE?(e="active",r=!1):x&Tx.FAILED?(e="failed",r=A):x&Tx.DISABLED&&(e="disabled",r=!1),{signal:e,simType:(x&Tx.EXTSIM)!==0?"external":"internal",wakeupable:r,unknownFlags:x&~Qd}}function Zd(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?x:Wd[A]??x}function xu(x){if(x===void 0)return null;let A=parseInt(x,10);return isNaN(A)?null:Xd[A]??["unknown",`itf#${x}`,`itf#${x}`]}function Au(x){if(x.length===0)return null;let A=x.join(",");return Yd[A]??A}function Av(x){let A=x.split(","),[e,r,t,i,...n]=A;if(!e||!/^-?\d+$/.test(e)||!r||!/^\d+$/.test(r))return null;let F=parseInt(r,10),v=xu(i),E=i!==void 0?parseInt(i,10):NaN;return{stamp:new Date,rssi:E>=101?null:parseInt(e,10),state:F,uplinkState:xv(F),uplinkMode:Zd(t),uplinkInterface:v?v[0]:null,uplinkInterfaceExtended:v?v[1]:null,uplinkInterfaceTechnical:v?v[2]:null,scriptState:Au(n)}}function ev(x){let A=x.indexOf(IF);if(A===-1)return null;let e=x.substring(A+IF.length),r=e.search(/\r?\n/);if(r===-1)return null;let t=e.substring(0,r).trim();return t?Av(t):null}var eu=5e3,ru=class extends Vd.EventEmitter{constructor(x,A=Pn){super(),A0(this,"atHandler"),A0(this,"logger"),A0(this,"lastState",null),A0(this,"pollingTimer",null),A0(this,"polling",!1),A0(this,"fetchInProgress",!1),A0(this,"fetchPromise",null),this.atHandler=x,this.logger=A}async fetchState(){try{let x=await this.atHandler.sendRaw(_x.RM2M_STATE),A=ev(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=eu){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()}},tu=require("events"),rv=class extends tu.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}}},nu=require("events"),tv={maxDuration:6e4,initialDelay:1e3,maxDelay:1e4,maxGattRetries:3},iu=class extends nu.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 rv,this.reconnectOptions={...tv,...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})})}},su={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"},ou=590,Fu=3e4,P0=class extends Error{constructor(x){super(x),this.name="ApiBadRequestError"}},EA=class extends Error{constructor(x){super(x),this.name="ApiNotFoundError"}},Hn=class extends Error{constructor(x){super(x),this.name="ApiForbiddenError"}},Ws=class extends Error{constructor(x){super(x),this.name="ApiMethodNotAllowedError"}};function BA(x){try{return decodeURIComponent(x)}catch{throw new P0("malformed url encoding")}}var vu=2e3,lu=2136;function Xs(x){if(x.length===0)return!0;if(!/^\d{4,17}$/.test(x))return!1;let A=Number(x.slice(0,4));return A>=vu&&A<=lu}function Yr(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)&&!Xs(e))throw new P0(`attribute '${A}' is not valid`)}}function cu(x){return typeof x.setMetadataValue=="function"?x:null}function fu(x){return typeof x.insertUtoChangeRequests=="function"?x:null}function Ys(){return{lastIssuedStamp40:0,tagMutexTails:new Map}}async function Eu(x){return{status:200,body:x.ctx.siteInfo}}async function Bu(x){let{blueprint:A}=x.ctx;if(!A)throw new EA("blueprint unavailable");return{status:200,body:A}}async function Cu(x){let{me:A}=x.ctx;if(A==null)throw new EA("no profile stored");return{status:200,body:A}}function nv(x,A,e,r){let t=x.push;t&&(async()=>{try{await t.container(A,e,r)}catch(i){x.logger?.error(`[localApi] device push for tag ${A} failed:`,i)}})()}async function du(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 uu=1024;function Lt(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 iv(x,A=0){let e=new TextEncoder().encode(x),r=Math.max(uu,A,e.length+1),t=new Uint8Array(r);return t.set(e,0),t}var Qs=26432,vr={aberrant:1,service:2,standby:4,commissioned:8,offline:16,commissioning:65536,online:131072},sv=Object.keys(vr),Rt=["standby","commissioned","offline","commissioning","online"],gs=Rt.reduce((x,A)=>x|vr[A],0)>>>0;function av(x){let A=0;for(let e of sv)x[e]===!0&&(A|=vr[e]);return A>>>0}function Zs(x,A){let e={};for(let r of sv)x&vr[r]?e[r]=!0:typeof A?.[r]=="boolean"&&(e[r]=!1);return e}async function ov(x,A){let e=A.device;if(!e)return!1;let r=await x.getRowForTag(Qs);if(!r?.data)return!1;let t=Lt(r.data);if(!t)return!1;let i=!1;if(typeof t.lifecycleFlags=="number"){let n=Zs(t.lifecycleFlags,e.lifecycle_flags);JSON.stringify(e.lifecycle_flags)!==JSON.stringify(n)&&(e.lifecycle_flags=n,i=!0)}return typeof t.lifecycleState=="string"&&e.lifecycle_state!==t.lifecycleState&&(e.lifecycle_state=t.lifecycleState,i=!0),i}var Du=new Set([...Rt,"service","lifecycle_state"]);function pu(x,A){let e=Math.max(z0.msToStamp40((x.timeSource??It).nowMs()),A.lastIssuedStamp40+1);return A.lastIssuedStamp40=e+1,e}async function bu(x){let A=gu(x.request.body??null);if(!A)throw new P0("invalid or missing request body");mu(A);let e=x.ctx,r=e.siteInfo.lifecycle_flags;if(!ju(r))throw new P0("this site does not support lifecycle flags!");let t=av(r),i=t;for(let E of Rt){let u=A[E];typeof u=="boolean"&&(i=u?i|vr[E]:i&~vr[E])}if(i>>>=0,i===t)return{status:204,body:""};let n=pu(e,x.session),F=[{json:JSON.stringify({lifecycleFlags:{op:"&",val:~gs>>>0}}),stamp40:n},{json:JSON.stringify({lifecycleFlags:{op:"|",val:i&gs}}),stamp40:n+1}],v=fu(e.storage);return v&&await v.insertUtoChangeRequests(F.map(E=>({tag:Qs,stamp40:E.stamp40,json:E.json}))),e.siteInfo.lifecycle_flags=Zs(i,r),await Fv(e),hu(e,F),{status:204,body:""}}function mu(x){let A=[];for(let[e,r]of Object.entries(x))Du.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 P0(`validation errors: ${A.join(", ")}`);if(Object.keys(x).some(e=>!Rt.includes(e)))throw new P0("invalid parameters")}async function hu(x,A){try{let e=await du(x,Qs,A);e==="executed"?await ov(x.storage,x.siteInfo)&&await Fv(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 Fv(x){await cu(x.storage)?.setMetadataValue("site_info",JSON.stringify(x.siteInfo))}function ju(x){return typeof x=="object"&&x!==null&&!Array.isArray(x)}function gu(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 vv(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new P0('"select" must be an array')}}function yu(x){if(x!=null){if(Array.isArray(x)&&x.every(A=>typeof A=="string"))return x;throw new P0("invalid parameter, select must be an array")}}function ku(x,A){let e=new Map;if(A){for(let[r,t]of A)e.set(t,r);return e}for(let r of x?.fields??[]){if(Ce(r))continue;let t=r.alias??r.name;e.set(t,t.toLowerCase())}return e}function wu(x){let A=new Map;for(let e of x.fields){if(Ce(e))continue;let r=(e.alias??e.name).toLowerCase();A.set(e.name,r),e.alias&&A.set(e.alias,r)}return A}function _u(x){let A=new Set;for(let e of x.fields)Ce(e)||A.add((e.alias??e.name).toLowerCase());return A.add("stamp"),A}function Su(x,A,e){if(!e)return null;let r=ku(x,A),t=new Set,i=[];for(let n of e){if(n==="stamp")continue;let F=r.get(n);F?t.add(F):i.push(n)}if(i.length>0)throw lv(i);return t}function Pu(x,A){let e=wu(x),r=[],t=[],i=!1;for(let n of A){if(n==="stamp"){i=!0,r.push("stamp");continue}let F=e.get(n);F?r.push(F):t.push(n)}if(t.length>0)throw lv(t);return i||r.unshift("stamp"),r}function Tu(x,A){if(A===void 0)return;let e=_u(x),r=A.map(i=>i.toLowerCase()),t=r.filter(i=>!e.has(i));if(t.length>0)throw new P0(`unknown field name(s): ${t.join(",")}`);return r.includes("stamp")?r:["stamp",...r]}function $u(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 xa(x,A){if(!A)return x;let e={};for(let r of A)e[r]=r in x?x[r]:null;return e}function lv(x){return new P0(`Fields [\`${x.join("`, `")}\`] do not exist in this container`)}function Jn(x,A){return x.containers.find(e=>e.name===A||e.alias===A)??null}async function qu(x){let A=x.ctx,e=BA(x.params[1]),r=Jn(A.model,e);if(!r)throw new P0("container does not exist");let t=await A.mapper.readContainer(e);if(!t)throw new EA(`no data for container "${e}"`);let i=Iu(A,r,t,Nu(x));return{status:200,body:cv(A,e,i)}}function Nu(x){let A=x.query.json??{};return vv(A.select)}function Iu(x,A,e,r){let t=Su(A,Mt(x.blueprint??null,A),r);return $u(e,t)}function cv(x,A,e){let r=x.model.byNameOrAlias(A);return r?I8(e,Mt(x.blueprint??null,r)):e}async function Mu(x){let A=x.ctx,e=BA(x.params[1]),r=A.model.byNameOrAlias(e);if(!r)throw new EA(`unknown container "${e}"`);let t=await A.mapper.readContainer(e);if(!t)throw new EA(`unknown container "${e}"`);let i=x.query.json??{},n=yu(i.select),F=Tu(r,n);return{status:200,body:xa(t,F)}}async function Lu(x){let A=BA(x.params[1]);return fv(x,A,"canonical")}async function Ru(x){let A=BA(x.params[1]);if(!x.ctx.model.byNameOrAlias(A))throw new EA(`unknown container "${A}"`);return fv(x,A,"legacy")}async function fv(x,A,e){let r=Ku(x);if(!r)throw new P0("invalid or missing request body");Yr(r);let{stamp:t,...i}=r;if(e==="canonical"&&t!==void 0&&typeof t!="string")throw new P0("value(s) of field(s) stamp are not valid");let n=x.ctx;if(e==="canonical"&&!Jn(n.model,A))throw new P0("container does not exist");let F=n.model.byNameOrAlias(A);if(F?.kind==="histdata")throw new EA(`unknown container "${A}"`);let v=e==="canonical"?Uu(n,F,i):Hu(F,i);try{let E=e==="canonical"&&t!==void 0?{...v,stamp:t}:v,u=await n.mapper.writeContainer(A,E);return u.devicePushable&&nv(n,u.tag,u.data,u.stamp40),{status:204,body:""}}catch(E){throw Ou(E,A,e,n,F)}}function Ou(x,A,e,r,t){if(x instanceof $t){let i=x.field?Gu(r,t,x.field,e):void 0;return e==="canonical"?i?new P0(`no permission to modify container field \`${i}\``):new P0(`no permission to modify container \`${A}\``):i?new Hn(`unknown field name(s): ${i}`):new Ws(`no permission to modify '${A}'`)}return x}function Gu(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():Mt(x.blueprint??null,A)?.get(e)??t.alias??t.name:e}function Uu(x,A,e){if(!A)return e;let r=Mt(x.blueprint??null,A),t=new Map;if(r)for(let[i,n]of r)t.set(n,i);else for(let i of A.fields){let n=i.alias??i.name;t.set(n,n.toLowerCase()),t.set(n.toLowerCase(),n.toLowerCase())}return Ev(A,t,e,i=>new P0(`unknown field name(s): ${i}`))}function Hu(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 Ev(x,e,A,r=>new Hn(`unknown field name(s): ${r}`))}var Ju=new Set(["stamp","stamp4","stamp8","datetime"]);function Ev(x,A,e,r){let t=new Map(x.fields.map(v=>[(v.alias??v.name).toLowerCase(),v])),i={},n=[],F=[];for(let[v,E]of Object.entries(e)){let u=A.get(v);if(!u){n.push(v);continue}let D=t.get(u);if(D&&Ju.has(D.type)&&!(typeof E=="string"&&Xs(E))){F.push(v);continue}i[u]=E}if(n.length>0)throw r(n.join(","));if(F.length>0)throw new P0(`value(s) of field(s) ${F.join(",")} are not valid`);return i}function Ku(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=zu(r);if(t===void 0)throw new P0("request supplied data which is not json formatted");return typeof t!="object"||t===null||Array.isArray(t)?null:{...e,...t}}function zu(x){try{return JSON.parse(x)}catch{return}}var Bv="x-mt-backfill",Cv="pending";async function Aa(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"?{[Bv]:Cv}:void 0}catch(t){x.logger?.error("[localApi] historic backfill check failed:",t);return}}var Vu=1e3,jn=1e3,dv="20000101",uv="*";async function Wu(x){let A=x.query.json??{};jv(A,["from","until","count","offset","select"]),Yr(A);let e=x.ctx,r=BA(x.params[1]),{mapperSelect:t,order:i}=pv(e,r,A.select);bv(e,r);let n=Ln(A.from,dv,"from"),F=Ln(A.until,uv,"until");mv(n,F),F!==null&&(F=Yu(F));let v=Qu(A.count),E=hv(A.offset),u=await Aa(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=>Dv(x,e,r,xa(m,i))),headers:u}}async function Xu(x){let A=x.query.json??{};jv(A,["from","until","offset","select"]),Yr(A);let e=x.ctx,r=BA(x.params[1]),t=x.params[2],{mapperSelect:i,order:n}=pv(e,r,A.select);bv(e,r);let F=Ln(A.from,dv,"from"),v=Ln(A.until,uv,"until");mv(F,v);let E=hv(A.offset),u=await Aa(e,A.from,F),m=(await e.mapper.readTimeseries(r,{fromMs:F,untilMs:v,count:t==="youngest"?-1:1,offset:E,select:i}))[0];return m?{status:200,body:Dv(x,e,r,xa(m,n)),headers:u}:{status:204,body:JSON.stringify("no timeseries recordData found"),headers:u}}function Dv(x,A,e,r){return x.apiVersion==="1"?r:cv(A,e,r)}function pv(x,A,e){let r=vv(e);if(!r)return{mapperSelect:void 0,order:null};let t=Jn(x.model,A);if(!t)return{mapperSelect:r,order:null};let i=Pu(t,r),n=i.filter(F=>F!=="stamp");return{mapperSelect:n.length>0?n:void 0,order:i}}function bv(x,A){if(!Jn(x.model,A))throw new P0("timeseries does not exist")}function Ln(x,A,e){let t=x==null||typeof x=="string"&&x.trim()===""?A:String(x);if(t==="*")return null;try{return Xr(t)}catch{throw new P0(`attribute '${e}' is not valid`)}}function mv(x,A){if(x!==null&&A!==null&&x>A)throw new P0('E_BAD_REQUEST "from" value must be older than "until"')}function Yu(x){let A=z0.msToStamp40(x);return z0.stamp40ToMS(A)>=x&&(A-=1),z0.stamp40ToMS(A)}function Qu(x){if(x==null||x==="")return Vu;let A=Number(x);if(!Number.isInteger(A))throw new P0('"count" must be an integer');if(A===0)throw new P0("`count` cannot be 0");if(A<-jn)throw new P0(`"count" must be greater than or equal to -${jn}`);if(A>jn)throw new P0(`"count" must be less than or equal to ${jn}`);return A}function hv(x){if(x==null||x==="")return 0;let A=Number(x);if(!Number.isInteger(A))throw new P0('"offset" must be an integer');if(A<0)throw new P0('"offset" must be greater than or equal to 0');return A}function jv(x,A){for(let e of Object.keys(x))if(!A.includes(e))throw new P0(`"${e}" is not allowed`)}var Zu=1e5,xD="20000101",AD="*";async function eD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.ctx,t=r.model.byNameOrAlias(e);if(!t)throw new EA(`unknown container "${e}"`);let i=x.query.json??{};Yr(i);let{fromMs:n,untilMs:F}=nD(i);iD(n,F);let v=sD(i),E=aD(i),u=gv(t,i.select)??["stamp"],D=Rn(i.from)?await Aa(r,i.from,n):void 0,m=u.filter(S=>S!=="stamp");return{status:200,body:(await r.mapper.readTimeseries(e,{fromMs:n,untilMs:F,count:v,offset:E,select:m.length>0?m:void 0})).map(S=>u.map($=>$==="stamp"?S.stamp:S[$]??null)),headers:D}}async function rD(x){let e=`histdata${x.params[1]?Number(x.params[1]):0}`,r=x.params[2],t=x.ctx,i=t.model.byNameOrAlias(e);if(!i)throw new EA(`unknown container "${e}"`);let n=x.query.json??{};Yr(n);let F=gv(i,n.select)??["stamp"],v=tD(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 tD(x){if(!(!Rn(x.until)||x.until==="*"))try{return Xr(String(x.until))??void 0}catch{throw new P0("from or until value invalid")}}function nD(x){let A=Rn(x.from),e=Rn(x.until);if((!A||!e)&&!ea(x.count))throw new P0("missing or invalid parameters (from and until and/or count)");return{fromMs:MF(A?x.from:xD),untilMs:MF(e?x.until:AD)}}function iD(x,A){if(x!==null&&A!==null&&x>A)throw new P0('"from" value must be older than "until"')}function MF(x){let A=String(x);try{return Xr(A)}catch{throw new P0(`invalid stamp "${A}"`)}}function sD(x){if(!ea(x.count))return Zu;if(typeof x.count!="number")throw new P0("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 P0("invalid parameter offset");return A}function gv(x,A){if(A==null)return;if(!Array.isArray(A))throw new P0("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 P0(`aggregation suffix not allowed: ${r.join(",")}`);let t=e.includes("stamp")?e:["stamp",...e],i=new Set(x.fields.filter(F=>!Ce(F)).map(F=>(F.alias??F.name).toLowerCase()));i.add("stamp");let n=t.filter(F=>!i.has(F));if(n.length>0)throw new P0(`invalid channel(s) ${n.join(",")}`);return t}function ea(x){return!!x}function Rn(x){return typeof x=="string"?x.trim().length>0:ea(x)}var oD="device_id";function FD(x){return async A=>(await Kn(A),{status:200,body:await lD(A.ctx,x)})}async function Kn(x){let A=BA(x.params[0]),e=await vD(x.ctx);if(!e||e.toLowerCase()!==A.toLowerCase())throw new EA(`unknown device "${A}"`)}async function vD(x){return x.deviceId||x.siteInfo.device?.device_id||x.storage.getMetadataValue(oD)}async function lD(x,A){let e=await x.storage.getRowForTag(A);if(!e||!e.data)return{};let r=Lt(e.data);return r?(typeof r.pipAppVer=="number"&&(r.pipAppVer=`${r.pipAppVer}.0.0`),r.stamp=Vr(z0.stamp40ToMS(QA(e.stamp))),r):{}}function ra(x,A,e){let t=(x.tagMutexTails.get(A)??Promise.resolve()).then(e);return x.tagMutexTails.set(A,t.catch(()=>{})),t}function cD(x){return async A=>{await Kn(A);let e=BD(A.request.body??null);if(!e)throw new P0("invalid or missing request body");return ra(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x),t=r?.data?Lt(r.data)??{}:{};return await ta(A.ctx,x,r,{...t,...e}),{status:204,body:""}})}}function fD(x){return async A=>(await Kn(A),ra(A.session,x,async()=>{let e=await A.ctx.storage.getRowForTag(x);return!e||!e.data?{status:204,body:""}:(await ta(A.ctx,x,e,{}),{status:204,body:""})}))}function ED(x){return async A=>{await Kn(A);let e=BA(A.params[1]);return ra(A.session,x,async()=>{let r=await A.ctx.storage.getRowForTag(x);if(!r||!r.data)return{status:204,body:""};let t=Lt(r.data)??{},i=e.toLowerCase();for(let n of Object.keys(t))n.toLowerCase()===i&&delete t[n];return await ta(A.ctx,x,r,t),{status:204,body:""}})}}function BD(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 ta(x,A,e,r){let t=iv(JSON.stringify(r),e?.data?.length??0),i=z0.msToStamp40((x.timeSource??It).nowMs());await x.storage.replaceUtoRow({tag:A,stamp:fA(i),flags:e?.flags??0,site_related:e?.site_related??0,data:t}),nv(x,A,t,i)}var yv={"content-type":"application/json"},CD=[{method:"GET",pattern:/^\/api\/1\/me$/,handler:Cu,checksUid:!1},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)$/,handler:Eu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/blueprint$/,handler:Bu,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:Xu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/timeseries\/([^/]+)$/,handler:Wu,checksUid:!0},{method:"GET",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:qu,checksUid:!0},{method:"PUT",pattern:/^\/api\/[12]\/sites\/([^/]+)\/containers\/([^/]+)$/,handler:Lu,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?\/(oldest|youngest)$/,handler:rD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/histdata(\d)?$/,handler:eD,checksUid:!0},{method:"GET",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Mu,checksUid:!0},{method:"PUT",pattern:/^\/api\/1\/sites\/([^/]+)\/(config[0-9a-c]|config[A-C])$/,handler:Ru,checksUid:!0},...dD()];function dD(){let x={"sys-otp":26432,"sys-flash":26433,"app-otp":26434,"app-flash":26435,"app-state":26436,"sys-info":26437,"app-info":26438},A={"sys-flash":26433,"app-flash":26435},e=Object.entries(x).map(([t,i])=>({method:"GET",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:FD(i),checksUid:!1})),r=Object.entries(A).flatMap(([t,i])=>[{method:"PUT",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:cD(i),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}$`),handler:fD(i),checksUid:!1},{method:"DELETE",pattern:new RegExp(`^/api/1/devices/([^/]+)/${t}/([^/]+)$`),handler:ED(i),checksUid:!1}]);return[...e,...r]}var uD=/^\/api\/([12])\/customers\/([^/]+)\/sites\/(.*)$/;function DD(x){let A=Ys();return e=>kv(x,e,A)}async function kv(x,A,e=Ys()){try{let[r,t]=mD(A.path),i=hD(t),n=bD(r,x);if(n===null)return Fr(404,"E_NOT_FOUND","unknown customer");let F=A.method.toUpperCase();for(let v of CD){if(v.method!==F)continue;let E=v.pattern.exec(n);if(!E)continue;let u=E.slice(1);if(v.checksUid&&!pD(x,u[0]))return Fr(404,"E_NOT_FOUND","unknown site");let D=/^\/api\/([12])\//.exec(n)?.[1]??"1",m=await v.handler({request:A,params:u,query:i,ctx:x,session:e,apiVersion:D});return yD(m)}return Fr(404,"E_NOT_FOUND","not found")}catch(r){return _v(r)}}function pD(x,A){return x.allowAnySiteUid===!0||A!==void 0&&BA(A)===x.siteUid}function bD(x,A){let e=uD.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 mD(x){let A=x.indexOf("?");return A<0?[x,""]:[x.slice(0,A),x.slice(A+1)]}function hD(x){let A={params:{}};if(!x)return A;for(let e of x.split("&"))e&&jD(A,e);return A}function jD(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=gD(t):x.params[r]=t}function gD(x){try{return JSON.parse(x)}catch{throw new P0("request supplied data which is not json formatted ")}}function yD(x){let A=typeof x.body=="string"?x.body:JSON.stringify(x.body);return{status:x.status,headers:{...yv,...x.headers},body:A}}function wv(x,A){return{status:x,headers:{...yv},body:JSON.stringify(A)}}function _v(x){return x instanceof P0||x instanceof Ks||x instanceof Is?Fr(400,"E_BAD_REQUEST",x.message):x instanceof Hn||x instanceof $t?Fr(403,"E_FORBIDDEN",x.message):x instanceof Ws?Fr(405,"E_METHOD_NOT_ALLOWED",x.message):x instanceof EA||x instanceof Me?Fr(404,"E_NOT_FOUND",x.message):wv(500,{err:x instanceof Error?x.message:String(x)})}function Fr(x,A,e){return wv(x,{err:`${A} ${e}`})}function kD(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 lb={};hf(lb,{default:()=>kc,deviceExitCode:()=>yc,program:()=>DA});module.exports=jf(lb);var J0=require("commander"),xn=U0(require("chalk"));var Si={name:"@microtronics/studio-cli",version:"1.3.0-alpha.1",description:"Microtronics Studio CLI Tool",main:"./out/api.js",typings:"./out/studio-cli.d.ts",bin:{"studio-cli":"studio-cli"},publishConfig:{access:"public"},scripts:{compile:"npm run build:registryApiTypings && tsc","build:cli":"node build.mjs","build:exe":"node build-exe.mjs",api:"api-extractor run --local --verbose",build:"npm run compile && npm run api && npm run build:cli","watch:build":"npm run compile -- --watch",test:"cross-env STUDIO_ENV=lucky mocha","test-ci":"cross-env STUDIO_ENV=lucky mocha --reporter mocha-junit-reporter","watch:test":"npm run test -- --watch",prepublishOnly:"npm run build","build:registryApiTypings":"npx openapi-typescript https://api.registry.lucky.ci.microtronics.com/v1/openapi.yaml -o ./src/typings/registry.ts"},author:"Microtronics",license:"ISC",dependencies:{"@gera2ld/tarjs":"^0.3.1",ajv:"^8.17.1","ajv-formats":"^3.0.1","ajv-keywords":"^5.1.0",chalk:"^5.4.1",commander:"^12.1.0","cross-fetch":"^4.0.0","deepmerge-ts":"^7.1.5",dotenv:"^16.4.7","file-type-checker":"^1.1.2",glob:"^11.0.1","iconv-lite":"^0.6.3","image-dimensions":"^2.3.0",ini:"^5.0.0",minimatch:"^10.0.1","openapi-fetch":"^0.13.0",pako:"^2.1.0",semver:"^7.7.2","sql.js":"^1.14.2","tinytar-fix":"^0.1.1","update-notifier":"^7.3.1",usb:"^2.14.0",uuid:"^9.0.1","vscode-uri":"^3.0.8",yaml:"^2.6.1"},engines:{node:">= 22"},devDependencies:{"@microsoft/api-extractor":"^7.47.11","@microtronics/device-master":"bitbucket:microtronics-core/device-master#v4.1.0","@types/chai":"^4.3.6","@types/chai-as-promised":"^7.1.5","@types/ini":"^4.1.1","@types/mocha":"^10.0.9","@types/node":"^22.9.1","@types/semver":"^7.5.6","@types/sql.js":"^1.4.11","@types/update-notifier":"^6.0.8","@types/vscode":"^1.86.2","@yao-pkg/pkg":"^6.22.0",chai:"^4.3.8","chai-as-promised":"^7.1.2","cross-env":"^7.0.3",esbuild:"^0.27.3","extract-zip":"^2.0.1",mocha:"^10.8.2","mocha-junit-reporter":"^2.2.1","openapi-typescript":"^7.6.0","pawncc-wasm":"bitbucket:microtronics-core/pawncc-wasm#v1.1.1",resedit:"^3.0.2",tar:"^7.5.7","ts-node":"^10.9.2",typescript:"^5.6.3"},mocha:{require:["ts-node/register"],"watch-files":"src/**",spec:"./test/**/*.spec.ts",recursive:!0},files:["out/api.js","out/studio-cli.d.ts","dist/main.js","dist/studio-cli.d.ts","studio-cli","CHANGELOG.md"]};var yA=U0(require("node:fs/promises"));var ht=require("vscode-uri"),no=require("glob"),le={readFile(x){return yA.default.readFile(x.fsPath)},async rm(x){if(await this.stat(x))return yA.default.rm(x.fsPath,{recursive:!0})},async stat(x){try{let A=await yA.default.stat(x.fsPath),e=(A.isDirectory()?2:0)|(A.isFile()?1:0)|(A.isSymbolicLink()?64:0);return{ctime:A.ctimeMs,mtime:A.mtimeMs,permissions:void 0,size:A.size,type:e}}catch{return null}},async writeFile(x,A){typeof A=="string"&&(A=new TextEncoder().encode(A));let e=ht.Utils.dirname(x);return await yA.default.mkdir(e.fsPath,{recursive:!0}),yA.default.writeFile(x.fsPath,A,{flag:"w"})},async findFiles(x,A,e){let r={ignore:e,nodir:!0,absolute:!0,dot:!0,cwd:x.fsPath};return(await(0,no.glob)(A,r)).map(i=>{let n=i.replace(/\\/g,"/");return ht.URI.parse(`file:///${n}`)})},async copy(x,A){let e=await yA.default.stat(x.fsPath);return await yA.default.mkdir(ht.Utils.dirname(A).fsPath,{recursive:!0}),e.isDirectory()?yA.default.cp(x.fsPath,A.fsPath,{force:!0,recursive:!0}):yA.default.copyFile(x.fsPath,A.fsPath)},async mkdir(x){await yA.default.mkdir(x.fsPath,{recursive:!0})}};var et=require("vscode-uri");var ue=require("vscode-uri");var Nr=require("vscode-uri");var yf=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 on(x,A=0){let e=~~A^-1;for(let r=0;r<x.length;r++)e=e>>>8^yf[(e^x[r])&255];return(e^-1)>>>0}var hb=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]),jb=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 h0;(w=>{function x(j,S){let[$,q]=S,{line:R,col:O}=j.linePos($);return{line:Number(R)-1,startCharacter:O-1,endCharacter:O+(q-$)}}w.yamlRangeToLineInformation=x;let A=new TextEncoder;function e(j){return on(A.encode(j)).toString(16)}w.generateHashForLibraryName=e;function r(j){return on(A.encode(j)).toString(16)}w.generateHashForFilePath=r;function t(j){return on(j).toString(16).toUpperCase().padStart(8,"0")}w.generateCRC32ForFileContent=t;function i(j){try{let S=null;return j?.type==="Buffer"?S=Uint8Array.from(j.data):S=j,new TextDecoder("utf8").decode(S)}catch{return""}}w.convertBlobToString=i;function n(j=""){return j.replace(/\r\n|\n\r|\r/g,`
|
|
2199
2199
|
`)}w.normalizeLF=n;function F(j){try{let S=i(j);return n(S).split(`
|
|
2200
|
-
`)}catch{return[]}}w.convertBlobToStringArray=F,w.isNumeric=j=>!Array.isArray(j)&&j-parseFloat(j)+1>=0;function E(j){let S=""
|
|
2200
|
+
`)}catch{return[]}}w.convertBlobToStringArray=F,w.isNumeric=j=>!Array.isArray(j)&&j-parseFloat(j)+1>=0;function E(j){let S="",$=j.byteLength;for(let q=0;q<$;q++)S+=String.fromCharCode(j[q]);return btoa(S)}w.bufferToBase64=E;function u(j,S){let $=`${j}`.match(/\{\d*(index)(\+\d*)?}/g);if($){let q=j;return $.forEach(R=>{let O=R.replace(/\+0$/,""),r0=O.match(/index/)?.[0];if(r0){let I=O.slice(1,-1).split(r0)[1],k=parseInt(I)||0;q=q.replace(R,`${S+k}`)}}),q}else return j}w.patchValueWithArrayInfo=u;let D={};function m(j,S,$){let q=D[j];q&&clearTimeout(q.timer),D[j]={timer:setTimeout(()=>{delete D[j],$()},S),handler:$}}w.defer=m})(h0||={});var go=require("image-dimensions"),yo=require("file-type-checker");var Vb=require("cross-fetch/polyfill"),mo=U0(require("openapi-fetch"));var $e=require("vscode-uri");var Bx=require("vscode-uri");var KA=U0(require("semver"));var Rx="dist/",io="dde/",Pi="dlo/",Ti=".studio/",so="dfiles/",e0;(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=`${Ti}auto/`,e=`${Ti}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:`${Ti}libdeps/`,dev:{path:e,mirror:`${e}${v.fileNames.devMirror}`,deviceLog:`${e}${v.fileNames.devDeviceLog}`}},dist:{path:Rx,dloPath:`${Rx}dlo/`,mainAmxPath:`${Rx}dlo/${v.fileNames.mainAmx}`,mainAmxReportPath:`${Rx}dlo/${v.fileNames.mainAmxReport}`,ddeXmlPath:`${Rx}dde/${v.fileNames.ddeXml}`,ddeApiPath:`${Rx}api/`,ddeApi:`${Rx}api/${v.fileNames.ddeOpenApi}`,historyJson:`${Rx}dde/${v.fileNames.historyJson}`,povPath:`${Rx}pov`,povDetailsPath:`${Rx}pov/details`,dfilesPath:`${Rx}dfiles`,dfilesProperties:`${Rx}dfiles/properties.json`,bloPath:`${Rx}blo`,reportTemplate:`${Rx}/${v.fileNames.reportTemplate}`,definesTs:`${Rx}defines.ts`,definesAppTs:`${Rx}defines.app.ts`},dlo:{path:Pi,mainDLO:`${Pi}main.dlo`,mainINI:`${Pi}main.ini`},dde:{path:io,mainDDE:`${io}main.dde`},dfiles:{path:so,mainDFILES:`${so}/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/).`})(e0||={});var
|
|
2207
|
-
`),
|
|
2208
|
-
`:"");try{await i.writeFile(v,O)}catch(R){return F.warn(`Could not write "${E}/package.json": ${R}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,i,n,F){for(let v of r.PART_DIST_PATHS){let E=$i.Utils.joinPath(t,v);await A(E,i,n,F)}}r.normalizeLibraryParts=e})($r||={});async function wf(x,A,e,r){try{let t=await x.readFile(A),i=h0.convertBlobToString(t),n=JSON.parse(i);return{raw:i,pkg:n}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function _f(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 Sf(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 Pf(x,A,e,r){let t=!1;for(let i of yf){let n=x[i];if(!n)continue;let F=!1;for(let v of Object.keys(n)){if(!A.has(v))continue;let E=n[v];if(typeof E!="string"||E.startsWith("npm:")||E.includes("://")){r.warn(`Left "${v}" in ${i} of ${e}/package.json untouched - its value "${E}" does not look like a Studio library reference.`);continue}delete n[v],F=!0,t=!0,r.warn(`Removed "${v}" from ${i} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}F&&Object.keys(n).length===0&&delete x[i]}return t}function $f(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function Tf(x){let A=x.path.replace(/\\/g,"/");for(let e of $r.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function qf(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:kf}var Nf=require("tinytar-fix"),If=require("pako"),le=".studio/libdeps",er="package.json",Mf="package-lock.json";function Ti(x){let A=x.dlo?.mainFile,e=[{partName:"blo",partDistPath:"blo",workingPath:io(x.blo?.workingPath)},{partName:"pov",partDistPath:"pov/details",workingPath:io(x.pov?.details?.workingPath)},{partName:"dlo",partDistPath:"dlo",workingPath:A?Lf(A):void 0}],r=[],t=[],i=new Set;for(let n of e){if(n.workingPath!==void 0){if(i.has(n.workingPath)){t.push(n);continue}i.add(n.workingPath)}r.push(n)}return{parts:r,duplicates:t}}function qi(x,A){for(let e of x)A.warn(`Skipping npm part "${e.partName}" - its working path (${e.workingPath}) is already used by another part in studio.json`)}function Fn(x){let A=x.replace(/\\/g,"/").split("/").filter(e=>e!==""&&e!==".");if(!A.some(e=>e===".."))return A.join("/")}function io(x){if(x)return Fn(x)||void 0}function Lf(x){let A=Fn(x);if(A===void 0)return;let e=A.lastIndexOf("/");return e===-1?void 0:A.slice(0,e)}function so(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(ex.dependencyIdToName)}async function Rf(x,A,e,r){let t=Bx.Utils.joinPath(x,le,r);try{return await A.stat(Bx.Utils.joinPath(t,K.fileName))?await K.readRaw(t,A):null}catch(i){return e.warn(`Could not read manifest for library "${r}": ${i}`),null}}async function Of(x,A,e,r){let t=new Set,i=so(r),n=null;for(;i.length>0;){let F=i.shift();if(t.has(F))continue;t.add(F);let v=await Rf(x,A,e,F);if(!v)continue;let E=v.engines?.backend;E&&(!n||K.compareBackendVersion(E,n.backend)>0)&&(n={backend:E,requiredBy:`${v.publisher}/${v.name}`}),i.push(...so(v))}return n}var ex;(M=>{async function x(k,L=!1){let X={...k.libraryDependencies||{}};return L||Object.assign(X,k.libraryDevDependencies||{}),X}M.getAll=x;function A(k){return k.split("/")[1]}M.dependencyIdToName=A;function e(k,L){let X=A(L);return Bx.Utils.joinPath(k,le,X)}M.dependencyToPath=e;function r(k){return isNaN(k.split("")[0])?k.substring(1):k}M.rangeToVersion=r;function t(k,L,X){if(!JA.satisfies(L,X,{includePrerelease:!0}))throw new Error(`${k}, version ${L} does not satisfy required constraint ${X}`)}M.satisfiesSemverRange=t;async function i(k,L,X={},W=!1){let H=await K.read(k,L),J=H.libraryDependencies||{};W&&Object.assign(J,H.libraryDevDependencies);let a0=Object.keys(X);for(let n0 of a0)if(Object.hasOwn(J,n0)){let x0=X[n0],o0=J[n0],G=r(x0),s0=r(o0),l0=JA.compare(G,s0);l0===1?(J[n0]=x0,t(n0,G,o0)):l0===-1&&(J[n0]=o0,t(n0,s0,x0))}else J[n0]=X[n0];return J}M.validateDependencyTree=i;async function n(k,L,X,W,H){let J=r(H),a0=Bx.Utils.joinPath(k,le,W);try{let n0=await K.read(a0,L);return JA.gte(n0.version,J)&&n0.publisher.toLowerCase()===X.toLowerCase()}catch{return!1}}M.isDependencyInstalled=n;async function F(k,L,X,W){let H=Bx.Utils.joinPath(k,le,W);await L.rm(H).catch(J=>{X.error("removeExisting",J)})}M.removeExisting=F;async function v(k,L,X,W,H){let J=Nf.untar(If.ungzip(H));await F(k,L,X,W);for(let a0 of J.values())try{let n0=Bx.Utils.joinPath(k,le,W,a0.name);await L.writeFile(n0,a0.data)}catch(n0){X.error("Extracting lib",n0)}}M.extractLibraryContent=v;async function E(k,L,X,W,H,J,a0,n0=!1){let[x0,o0]=J.split("/");if(a0&&await n(k,L,x0,o0,a0))return;await F(k,L,X,o0);let G=await vx.getLibraryProfile(H,x0,o0,W),s0=a0?G.versions?.find(tx=>JA.eq(tx.name,M.rangeToVersion(a0))):G.versions[0];if(!s0)throw new Error(`Library ${J} with version ${a0} does not exist!`);let l0=s0.files.find(tx=>tx.name==="studio.json"),C0=(await Gf(H,l0.downloadUrl)).libraryDependencies||{},_0={...C0};_0[J]=`^${s0.name}`,await i(k,L,_0,n0);for(let[tx,tA]of Object.entries(C0))await E(k,L,X,W,H,tx,tA,n0);let I0=s0.files.find(tx=>tx.name==="library.tar.gz");if(!I0)throw new Error(`Library ${J} has no content!`);let ox=await vx.fetchCustomContent(H,I0.downloadUrl);await v(k,L,X,o0,ox),await R(k,L,X,o0,n0);let Xx=await K.read(k,L),$A=Xx.libraryDependencies||{},TA=Xx.libraryDevDependencies||{},cx=n0?TA:$A;cx[J]=`^${s0.name}`,Xx.libraryDependencies=$A,Xx.libraryDevDependencies=TA,await K.write(k,L,Xx)}M.installDependency=E;async function u(k,L,X,W,H){let J=await K.read(k,L),a0=J.libraryDependencies||{},n0=J.libraryDevDependencies||{},x0=Object.assign(a0,n0);for(let[o0,G]of Object.entries(x0)){let s0=Object.hasOwn(n0,o0);await E(k,L,X,W,H,o0,G,s0)}for(let[o0]of Object.entries(x0)){let G=A(o0),s0=Object.hasOwn(n0,o0);await R(k,L,X,G,s0)}X.done(`Installed ${Object.entries(x0).length} dependencies`)}M.installDependencies=u;async function D(k,L,X,W,H){let J=await K.read(k,L),a0=J.libraryDependencies||{},n0=J.libraryDevDependencies||{},x0=Object.assign(a0,n0),o0=`${W}/${H}`;delete x0[o0];let G=await Uf(k,L,x0);if(!Object.hasOwn(G,o0))await t0(k,L,X,H),await F(k,L,X,H),delete n0[o0],delete a0[o0],await K.write(k,L,J);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}M.uninstallDependency=D;async function m(k,L){try{let W=(await lo(Bx.Utils.joinPath(k,er),L)).workspaces;if(Array.isArray(W)&&W.every(J=>typeof J=="string")&&W.length>0)return W;let H=W?.packages;return Array.isArray(H)&&H.every(J=>typeof J=="string")&&H.length>0?H:null}catch{return null}}M.readNpmWorkspacePatterns=m;function w(k,L){let X=Fn(k);return X===void 0?!1:L.some(W=>{let H=Fn(W);return H===void 0?!1:H===X||(0,vo.minimatch)(X,H)})}M.isPathInWorkspaces=w;function j(k,L){if(!L)return{rootInstall:!1,partInstalls:k.map(H=>H.workingPath)};let X=[],W=!1;for(let H of k)w(H.workingPath,L)?W=!0:X.push(H.workingPath);return{rootInstall:W,partInstalls:X}}M.planNpmInstalls=j;async function S(k,L,X){let W=await K.read(k,L),H=new Set([...Object.keys(W.libraryDependencies||{}),...Object.keys(W.libraryDevDependencies||{})].map(A)),J=new Set,a0=[...H];for(;a0.length>0;){let n0=a0.shift();if(J.has(n0))continue;J.add(n0);let x0=Bx.Utils.joinPath(k,le,n0);try{let o0=Bx.Utils.joinPath(x0,K.fileName);if(!await L.stat(o0))continue;let G=await K.readRaw(x0,L);await $r.normalizeLibraryParts(x0,L,G,X),a0.push(...[...Object.keys(G.libraryDependencies||{}),...Object.keys(G.libraryDevDependencies||{})].map(A))}catch(o0){X.warn(`Could not normalize library parts for "${n0}": ${o0}`)}}}M.normalizeInstalledLibraryParts=S;async function T(k,L,X){let W=await K.read(k,L),H=await Of(k,L,X,W);if(!H)return;let J=W.engines?.backend;if(!J||K.compareBackendVersion(H.backend,J)>0){let a0=J?`"${J}"`:"none",n0=K.isLibrary(W)?"library":"application",x0=K.isLibrary(W)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${H.requiredBy}" requires "engines.backend" >= "${H.backend}" but the ${n0} "${W.publisher}/${W.name}" declares ${a0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${x0}`)}}M.validateMinimumBackendVersion=T;async function q(k,L,X){await S(k,L,X);let W=await K.read(k,L),{parts:H,duplicates:J}=Ti(W);qi(J,X);let a0=H.filter(({workingPath:s0})=>!!s0).map(({partName:s0,workingPath:l0})=>({name:s0,workingPath:l0})),n0=[];for(let s0 of a0){let l0=Bx.Utils.joinPath(k,s0.workingPath),B0=Bx.Utils.joinPath(l0,er);await L.stat(B0)&&n0.push(s0)}if(n0.length===0)return;let x0=await m(k,L),{rootInstall:o0,partInstalls:G}=j(n0,x0);if(o0){let s0=n0.filter(l0=>!G.includes(l0.workingPath)).map(l0=>l0.workingPath).join(", ");X.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 on(k,"npm install --no-audit --no-fund",X)}for(let s0 of n0){if(!G.includes(s0.workingPath))continue;x0?X.warn(`${s0.workingPath} (${s0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):X.info(`Installing npm dependencies for ${s0.name} (${s0.workingPath})...`);let l0=Bx.Utils.joinPath(k,s0.workingPath);await Kf(l0,L,X)}}M.installNpmInApmParts=q;async function O(k,L,X,W=!1){let H=await K.read(k,L),J=await x(H,W),a0=[],n0=e0.filePaths[X].path,x0=X===u0.Part.dlo?"inc":"dfiles";for(let o0 in J){let G=M.dependencyToPath(k,o0),s0=M.dependencyIdToName(o0),l0=Bx.Utils.joinPath(G,n0,`${s0}.${x0}`);await L.stat(l0)&&a0.push({name:s0,path:l0})}if(K.isLibrary(H)){let o0=Bx.Utils.joinPath(k,n0,`${H.name}.${x0}`);await L.stat(o0)&&a0.push({name:H.name,path:o0})}return a0}M.getApmPartDependencies=O;async function R(k,L,X,W,H){let J=await K.read(k,L),{parts:a0,duplicates:n0}=Ti(J);qi(n0,X);for(let{partName:x0,partDistPath:o0,workingPath:G}of a0){if(!G)continue;let s0=Bx.Utils.joinPath(k,le,W,"dist",...o0.split("/"),er);if(!await L.stat(s0))continue;let B0=Bx.Utils.joinPath(k,G,er);if(!await L.stat(B0)){X.info(`${G} (${x0}) has no package.json, skipping link`);continue}try{let C0=await ao(k,L,G),_0=H?"devDependencies":"dependencies";C0[_0]=C0[_0]||{};let I0=G.split("/").length,ox=Array(I0).fill("..").join("/");C0[_0][W]=`file:${ox}/${le}/${W}/dist/${o0}`,await oo(k,L,G,C0),X.info(`Linked ${W} to ${x0} (${G})`)}catch(C0){X.warn(`Could not link ${W} to ${x0}: ${C0}`)}}}M.linkLibraryApmParts=R;async function t0(k,L,X,W){let H=await K.read(k,L),{parts:J,duplicates:a0}=Ti(H);qi(a0,X);for(let{partName:n0,workingPath:x0}of J){if(!x0)continue;let o0=Bx.Utils.joinPath(k,x0,er);if(await L.stat(o0))try{let G=await ao(k,L,x0),s0=!1;G.dependencies?.[W]?.startsWith("file:")&&(delete G.dependencies[W],s0=!0),G.devDependencies?.[W]?.startsWith("file:")&&(delete G.devDependencies[W],s0=!0),s0&&(await oo(k,L,x0,G),X.info(`Unlinked ${W} from ${n0}`))}catch(G){X.warn(`Could not unlink ${W} from ${n0}: ${G}`)}}}M.unlinkLibraryApmParts=t0})(ex||={});async function lo(x,A){let e=await A.readFile(x);return JSON.parse(h0.convertBlobToString(e))}function ao(x,A,e){return lo(Bx.Utils.joinPath(x,e,er),A)}async function oo(x,A,e,r){let t=Bx.Utils.joinPath(x,e,er),i=JSON.stringify(r,null," ")+`
|
|
2209
|
-
`;await A.writeFile(t,i)}async function
|
|
2206
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).`})(e0||={});var co=U0(require("node:child_process")),fo=require("minimatch");var $i=require("vscode-uri");var ao=U0(require("semver")),kf="package.json",wf=["peerDependencies","dependencies","optionalDependencies"],_f=" ",$r;(r=>{r.PART_DIST_PATHS=[e0.filePaths.dist.bloPath,e0.filePaths.dist.povDetailsPath,e0.filePaths.dist.dloPath.replace(/\/$/,"")];async function A(t,i,n,F){let v=$i.Utils.joinPath(t,kf),E=`${n.name}/${Nf(t)}`;if(!await i.stat(v))return!1;let D=await Sf(i,v,E,F);if(!D)return!1;let m=D.pkg;if(typeof m!="object"||m===null||Array.isArray(m))return F.warn(`"${E}/package.json" does not contain a JSON object - skipped normalizing it.`),!1;if(!ao.valid(n.version))return F.warn(`Library manifest version "${n.version}" is not a valid semantic version - skipped normalizing "${E}/package.json".`),!1;Pf(m,n,E,F);let w=Tf(m,n.version);m=w.pkg;let j=w.changed;j&&F.warn(`Patched version "${w.oldVersion??"<none>"}" -> "${n.version}" in "${E}/package.json" (studio.json is the source of truth).`);let S=qf(n);if($f(m,S,E,F)&&(j=!0),!j)return!1;let $=If(D.raw),q=D.raw.endsWith(`
|
|
2207
|
+
`),R=JSON.stringify(m,null,$)+(q?`
|
|
2208
|
+
`:"");try{await i.writeFile(v,R)}catch(O){return F.warn(`Could not write "${E}/package.json": ${O}`),!1}return!0}r.normalizePartPackageJson=A;async function e(t,i,n,F){for(let v of r.PART_DIST_PATHS){let E=$i.Utils.joinPath(t,v);await A(E,i,n,F)}}r.normalizeLibraryParts=e})($r||={});async function Sf(x,A,e,r){try{let t=await x.readFile(A),i=h0.convertBlobToString(t),n=JSON.parse(i);return{raw:i,pkg:n}}catch(t){return r.warn(`Could not read/parse "${e}/package.json": ${t}`),null}}function Pf(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 Tf(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 $f(x,A,e,r){let t=!1;for(let i of wf){let n=x[i];if(!n)continue;let F=!1;for(let v of Object.keys(n)){if(!A.has(v))continue;let E=n[v];if(typeof E!="string"||E.startsWith("npm:")||E.includes("://")){r.warn(`Left "${v}" in ${i} of ${e}/package.json untouched - its value "${E}" does not look like a Studio library reference.`);continue}delete n[v],F=!0,t=!0,r.warn(`Removed "${v}" from ${i} of ${e}/package.json - Studio libraries must be declared in studio.json "libraryDependencies" (npm ranges never match prereleases across minor versions).`)}F&&Object.keys(n).length===0&&delete x[i]}return t}function qf(x){let A=[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})];return new Set(A.map(e=>e.split("/")[1]))}function Nf(x){let A=x.path.replace(/\\/g,"/");for(let e of $r.PART_DIST_PATHS)if(A===e||A.endsWith(`/${e}`))return e;return A}function If(x){let A=x.match(/^\{\r?\n([ \t]+)/);return A?A[1].startsWith(" ")?" ":A[1]:_f}var Mf=require("tinytar-fix"),Lf=require("pako"),ce=".studio/libdeps",rr="package.json",Rf="package-lock.json";function qi(x){let A=x.dlo?.mainFile,e=[{partName:"blo",partDistPath:"blo",workingPath:oo(x.blo?.workingPath)},{partName:"pov",partDistPath:"pov/details",workingPath:oo(x.pov?.details?.workingPath)},{partName:"dlo",partDistPath:"dlo",workingPath:A?Of(A):void 0}],r=[],t=[],i=new Set;for(let n of e){if(n.workingPath!==void 0){if(i.has(n.workingPath)){t.push(n);continue}i.add(n.workingPath)}r.push(n)}return{parts:r,duplicates:t}}function Ni(x,A){for(let e of x)A.warn(`Skipping npm part "${e.partName}" - its working path (${e.workingPath}) is already used by another part in studio.json`)}function vn(x){let A=x.replace(/\\/g,"/").split("/").filter(e=>e!==""&&e!==".");if(!A.some(e=>e===".."))return A.join("/")}function oo(x){if(x)return vn(x)||void 0}function Of(x){let A=vn(x);if(A===void 0)return;let e=A.lastIndexOf("/");return e===-1?void 0:A.slice(0,e)}function Fo(x){return[...Object.keys(x.libraryDependencies||{}),...Object.keys(x.libraryDevDependencies||{})].map(ex.dependencyIdToName)}async function Gf(x,A,e,r){let t=Bx.Utils.joinPath(x,ce,r);try{return await A.stat(Bx.Utils.joinPath(t,J.fileName))?await J.readRaw(t,A):null}catch(i){return e.warn(`Could not read manifest for library "${r}": ${i}`),null}}async function Uf(x,A,e,r){let t=new Set,i=Fo(r),n=null;for(;i.length>0;){let F=i.shift();if(t.has(F))continue;t.add(F);let v=await Gf(x,A,e,F);if(!v)continue;let E=v.engines?.backend;E&&(!n||J.compareBackendVersion(E,n.backend)>0)&&(n={backend:E,requiredBy:`${v.publisher}/${v.name}`}),i.push(...Fo(v))}return n}var ex;(I=>{async function x(k,L=!1){let W={...k.libraryDependencies||{}};return L||Object.assign(W,k.libraryDevDependencies||{}),W}I.getAll=x;function A(k){return k.split("/")[1]}I.dependencyIdToName=A;function e(k,L){let W=A(L);return Bx.Utils.joinPath(k,ce,W)}I.dependencyToPath=e;function r(k){return isNaN(k.split("")[0])?k.substring(1):k}I.rangeToVersion=r;function t(k,L,W){if(!KA.satisfies(L,W,{includePrerelease:!0}))throw new Error(`${k}, version ${L} does not satisfy required constraint ${W}`)}I.satisfiesSemverRange=t;async function i(k,L,W={},Q=!1){let H=await J.read(k,L),K=H.libraryDependencies||{};Q&&Object.assign(K,H.libraryDevDependencies);let a0=Object.keys(W);for(let n0 of a0)if(Object.hasOwn(K,n0)){let Z=W[n0],o0=K[n0],G=r(Z),s0=r(o0),l0=KA.compare(G,s0);l0===1?(K[n0]=Z,t(n0,G,o0)):l0===-1&&(K[n0]=o0,t(n0,s0,Z))}else K[n0]=W[n0];return K}I.validateDependencyTree=i;async function n(k,L,W,Q,H){let K=r(H),a0=Bx.Utils.joinPath(k,ce,Q);try{let n0=await J.read(a0,L);return KA.gte(n0.version,K)&&n0.publisher.toLowerCase()===W.toLowerCase()}catch{return!1}}I.isDependencyInstalled=n;async function F(k,L,W,Q){let H=Bx.Utils.joinPath(k,ce,Q);await L.rm(H).catch(K=>{W.error("removeExisting",K)})}I.removeExisting=F;async function v(k,L,W,Q,H){let K=Mf.untar(Lf.ungzip(H));await F(k,L,W,Q);for(let a0 of K.values())try{let n0=Bx.Utils.joinPath(k,ce,Q,a0.name);await L.writeFile(n0,a0.data)}catch(n0){W.error("Extracting lib",n0)}}I.extractLibraryContent=v;async function E(k,L,W,Q,H,K,a0,n0=!1){let[Z,o0]=K.split("/");if(a0&&await n(k,L,Z,o0,a0))return;await F(k,L,W,o0);let G=await vx.getLibraryProfile(H,Z,o0,Q),s0=a0?G.versions?.find(tx=>KA.eq(tx.name,I.rangeToVersion(a0))):G.versions[0];if(!s0)throw new Error(`Library ${K} with version ${a0} does not exist!`);let l0=s0.files.find(tx=>tx.name==="studio.json"),C0=(await Hf(H,l0.downloadUrl)).libraryDependencies||{},_0={...C0};_0[K]=`^${s0.name}`,await i(k,L,_0,n0);for(let[tx,nA]of Object.entries(C0))await E(k,L,W,Q,H,tx,nA,n0);let T0=s0.files.find(tx=>tx.name==="library.tar.gz");if(!T0)throw new Error(`Library ${K} has no content!`);let ox=await vx.fetchCustomContent(H,T0.downloadUrl);await v(k,L,W,o0,ox),await O(k,L,W,o0,n0);let Qx=await J.read(k,L),$A=Qx.libraryDependencies||{},qA=Qx.libraryDevDependencies||{},cx=n0?qA:$A;cx[K]=`^${s0.name}`,Qx.libraryDependencies=$A,Qx.libraryDevDependencies=qA,await J.write(k,L,Qx)}I.installDependency=E;async function u(k,L,W,Q,H){let K=await J.read(k,L),a0=K.libraryDependencies||{},n0=K.libraryDevDependencies||{},Z=Object.assign(a0,n0);for(let[o0,G]of Object.entries(Z)){let s0=Object.hasOwn(n0,o0);await E(k,L,W,Q,H,o0,G,s0)}for(let[o0]of Object.entries(Z)){let G=A(o0),s0=Object.hasOwn(n0,o0);await O(k,L,W,G,s0)}W.done(`Installed ${Object.entries(Z).length} dependencies`)}I.installDependencies=u;async function D(k,L,W,Q,H){let K=await J.read(k,L),a0=K.libraryDependencies||{},n0=K.libraryDevDependencies||{},Z=Object.assign(a0,n0),o0=`${Q}/${H}`;delete Z[o0];let G=await Jf(k,L,Z);if(!Object.hasOwn(G,o0))await r0(k,L,W,H),await F(k,L,W,H),delete n0[o0],delete a0[o0],await J.write(k,L,K);else throw new Error(`Library '${H}' not removed. This library is a dependency of other libraries.`)}I.uninstallDependency=D;async function m(k,L){try{let Q=(await Eo(Bx.Utils.joinPath(k,rr),L)).workspaces;if(Array.isArray(Q)&&Q.every(K=>typeof K=="string")&&Q.length>0)return Q;let H=Q?.packages;return Array.isArray(H)&&H.every(K=>typeof K=="string")&&H.length>0?H:null}catch{return null}}I.readNpmWorkspacePatterns=m;function w(k,L){let W=vn(k);return W===void 0?!1:L.some(Q=>{let H=vn(Q);return H===void 0?!1:H===W||(0,fo.minimatch)(W,H)})}I.isPathInWorkspaces=w;function j(k,L){if(!L)return{rootInstall:!1,partInstalls:k.map(H=>H.workingPath)};let W=[],Q=!1;for(let H of k)w(H.workingPath,L)?Q=!0:W.push(H.workingPath);return{rootInstall:Q,partInstalls:W}}I.planNpmInstalls=j;async function S(k,L,W){let Q=await J.read(k,L),H=new Set([...Object.keys(Q.libraryDependencies||{}),...Object.keys(Q.libraryDevDependencies||{})].map(A)),K=new Set,a0=[...H];for(;a0.length>0;){let n0=a0.shift();if(K.has(n0))continue;K.add(n0);let Z=Bx.Utils.joinPath(k,ce,n0);try{let o0=Bx.Utils.joinPath(Z,J.fileName);if(!await L.stat(o0))continue;let G=await J.readRaw(Z,L);await $r.normalizeLibraryParts(Z,L,G,W),a0.push(...[...Object.keys(G.libraryDependencies||{}),...Object.keys(G.libraryDevDependencies||{})].map(A))}catch(o0){W.warn(`Could not normalize library parts for "${n0}": ${o0}`)}}}I.normalizeInstalledLibraryParts=S;async function $(k,L,W){let Q=await J.read(k,L),H=await Uf(k,L,W,Q);if(!H)return;let K=Q.engines?.backend;if(!K||J.compareBackendVersion(H.backend,K)>0){let a0=K?`"${K}"`:"none",n0=J.isLibrary(Q)?"library":"application",Z=J.isLibrary(Q)?" Every application using this library must then satisfy that version as well.":"";throw new Error(`Library "${H.requiredBy}" requires "engines.backend" >= "${H.backend}" but the ${n0} "${Q.publisher}/${Q.name}" declares ${a0}. Raise "engines.backend" in studio.json to at least "${H.backend}".${Z}`)}}I.validateMinimumBackendVersion=$;async function q(k,L,W){await S(k,L,W);let Q=await J.read(k,L),{parts:H,duplicates:K}=qi(Q);Ni(K,W);let a0=H.filter(({workingPath:s0})=>!!s0).map(({partName:s0,workingPath:l0})=>({name:s0,workingPath:l0})),n0=[];for(let s0 of a0){let l0=Bx.Utils.joinPath(k,s0.workingPath),B0=Bx.Utils.joinPath(l0,rr);await L.stat(B0)&&n0.push(s0)}if(n0.length===0)return;let Z=await m(k,L),{rootInstall:o0,partInstalls:G}=j(n0,Z);if(o0){let s0=n0.filter(l0=>!G.includes(l0.workingPath)).map(l0=>l0.workingPath).join(", ");W.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 Fn(k,"npm install --no-audit --no-fund",W)}for(let s0 of n0){if(!G.includes(s0.workingPath))continue;Z?W.warn(`${s0.workingPath} (${s0.name}) is not covered by any workspace pattern in the root package.json - installing it separately.`):W.info(`Installing npm dependencies for ${s0.name} (${s0.workingPath})...`);let l0=Bx.Utils.joinPath(k,s0.workingPath);await Vf(l0,L,W)}}I.installNpmInApmParts=q;async function R(k,L,W,Q=!1){let H=await J.read(k,L),K=await x(H,Q),a0=[],n0=e0.filePaths[W].path,Z=W===u0.Part.dlo?"inc":"dfiles";for(let o0 in K){let G=I.dependencyToPath(k,o0),s0=I.dependencyIdToName(o0),l0=Bx.Utils.joinPath(G,n0,`${s0}.${Z}`);await L.stat(l0)&&a0.push({name:s0,path:l0})}if(J.isLibrary(H)){let o0=Bx.Utils.joinPath(k,n0,`${H.name}.${Z}`);await L.stat(o0)&&a0.push({name:H.name,path:o0})}return a0}I.getApmPartDependencies=R;async function O(k,L,W,Q,H){let K=await J.read(k,L),{parts:a0,duplicates:n0}=qi(K);Ni(n0,W);for(let{partName:Z,partDistPath:o0,workingPath:G}of a0){if(!G)continue;let s0=Bx.Utils.joinPath(k,ce,Q,"dist",...o0.split("/"),rr);if(!await L.stat(s0))continue;let B0=Bx.Utils.joinPath(k,G,rr);if(!await L.stat(B0)){W.info(`${G} (${Z}) has no package.json, skipping link`);continue}try{let C0=await vo(k,L,G),_0=H?"devDependencies":"dependencies";C0[_0]=C0[_0]||{};let T0=G.split("/").length,ox=Array(T0).fill("..").join("/");C0[_0][Q]=`file:${ox}/${ce}/${Q}/dist/${o0}`,await lo(k,L,G,C0),W.info(`Linked ${Q} to ${Z} (${G})`)}catch(C0){W.warn(`Could not link ${Q} to ${Z}: ${C0}`)}}}I.linkLibraryApmParts=O;async function r0(k,L,W,Q){let H=await J.read(k,L),{parts:K,duplicates:a0}=qi(H);Ni(a0,W);for(let{partName:n0,workingPath:Z}of K){if(!Z)continue;let o0=Bx.Utils.joinPath(k,Z,rr);if(await L.stat(o0))try{let G=await vo(k,L,Z),s0=!1;G.dependencies?.[Q]?.startsWith("file:")&&(delete G.dependencies[Q],s0=!0),G.devDependencies?.[Q]?.startsWith("file:")&&(delete G.devDependencies[Q],s0=!0),s0&&(await lo(k,L,Z,G),W.info(`Unlinked ${Q} from ${n0}`))}catch(G){W.warn(`Could not unlink ${Q} from ${n0}: ${G}`)}}}I.unlinkLibraryApmParts=r0})(ex||={});async function Eo(x,A){let e=await A.readFile(x);return JSON.parse(h0.convertBlobToString(e))}function vo(x,A,e){return Eo(Bx.Utils.joinPath(x,e,rr),A)}async function lo(x,A,e,r){let t=Bx.Utils.joinPath(x,e,rr),i=JSON.stringify(r,null," ")+`
|
|
2209
|
+
`;await A.writeFile(t,i)}async function Hf(x,A){return await vx.fetchCustomContent(x,A,!0)}async function Jf(x,A,e){let r={};function t(E,u,D,m=!1){let w=r[E],j=ex.rangeToVersion(D),S=ex.rangeToVersion(D);(!w||KA.gt(j,S))&&(r[E]={publisherId:u,version:D,installed:m})}let i=Object.entries(e).map(([E,u])=>{let[D,m]=E.split("/");return t(m,D,u,!0),m}),n={};for(let E of i)try{let u=await Kf(x,A,E);n[E]=Object.entries(u).map(([D,m])=>{let[w,j]=D.split("/");return t(j,w,m),j}),i.push(...n[E])}catch{let D=r[E];throw new Error(`Please import "${D.publisherId}/${E}" first.`)}let F=[];for(;;){let E=i.filter(u=>F.includes(u)?!1:(n[u]||[]).every(m=>F.includes(m)));if(F.push(...E),i.length===F.length||!E.length)break}let v={};return[...new Set(F)].forEach(E=>{let{version:u,publisherId:D}=r[E],m=zf(D,E,u);v[m.libraryId]=m.libraryVersion}),v}async function Kf(x,A,e){let r=Bx.Utils.joinPath(x,ce,e);return(await J.read(r,A))?.libraryDependencies||{}}function zf(x,A,e){return{libraryName:A,publisherId:x,libraryVersion:e[0]==="^"?e:"^"+e,libraryId:`${x}/${A}`}}function Fn(x,A,e){return new Promise((r,t)=>{co.exec(A,{cwd:x.fsPath,env:process.env},(i,n,F)=>{if(n&&e.log(n),F&&e.error(F),i){t(new Error(`${i.message}
|
|
2210
2210
|
${n}
|
|
2211
|
-
${F}`));return}r()})})}async function
|
|
2212
|
-
`))u.push(` ${
|
|
2213
|
-
`))}t.exportDefinesTs=e;function r(i,n){let F=[];return{result:i.replace(/\{\{([^}]+)\}\}/g,(E,u)=>{let D=u.trim();return Object.hasOwn(n,D)?n[D]:(F.push(D),E)}),unresolvedKeys:F}}t.replaceDefineTemplates=r})(lx||={});function
|
|
2214
|
-
`)),r=[]}return A}function
|
|
2211
|
+
${F}`));return}r()})})}async function Vf(x,A,e){let r=Bx.Utils.joinPath(x,Rf);if(!await A.stat(r)){e.warn(`No package-lock.json found in ${x.fsPath} - running 'npm install' instead of 'npm ci'.`),await Fn(x,"npm install",e);return}try{await Fn(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 Fn(x,"npm install",e)}}var uo=U0(require("ini"));var Wf=h0.convertBlobToString,Xf=e0.filePaths.dlo.path,lx;(t=>{let x;(v=>(v.lucky="lucky",v.wynni="wynni",v.production="production"))(x=t.ENV||={});async function A(i,n,F){let v=await J.read(i,n),E=await ex.getAll(v),u={},D={},m={};for(let R in E){let O=ex.dependencyToPath(i,R),r0=ex.dependencyIdToName(R),I=$e.Utils.joinPath(O,Xf,`${r0}.ini`);await qr(n,I,u,D,m,r0);let k=$e.Utils.joinPath(O,e0.filePaths.defaultsIni);await qr(n,k,u,D,m,r0)}if(J.isLibrary(v)){let R=$e.Utils.joinPath(i,e0.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 qr(n,R,u,D,m,v.name)}let w=v.dlo?.iniFile||e0.filePaths.dlo.mainINI,j=$e.Utils.joinPath(i,w);F&&await n.stat(j)&&F.warn(`${w} is deprecated. Please migrate your defines to app.ini in the project root.`);let S=xE(w);if(await qr(n,j,u,D,m,S),J.isLibrary(v)){let R=$e.Utils.joinPath(i,e0.filePaths.defaultsIni);await qr(n,R,u,D,m,"defaults")}let $=Yf(v,u,D,m),q=$e.Utils.joinPath(i,e0.filePaths.appIni);return await qr(n,q,u,D,m,"app"),{flat:u,sections:D,definesWithSource:m,defaultsOnly:$}}t.read=A;async function e(i,n,F,v){let E=Object.entries(F.flat),u=[];for(let[w,j]of E){let S=F.definesWithSource[w];if(S?.comment){let q=Bo(S.comment);for(let R of q.split(`
|
|
2212
|
+
`))u.push(` ${R}`)}let $=Co(j)?"number":"string";u.push(` ${w}: ${$};`)}let D=["// Auto-generated by @microtronics/studio-cli \u2014 DO NOT EDIT","declare global {"," interface StudioDefines {",...u," }"," var STUDIO_DEFINES: StudioDefines;","}","","globalThis.STUDIO_DEFINES ??= {} as StudioDefines;",""];for(let[w,j]of E){let S=F.definesWithSource[w];if(S?.comment&&D.push(Bo(S.comment)),Co(j))D.push(`globalThis.STUDIO_DEFINES['${w}'] = ${Number(j)};`);else{let $=j.replace(/\\/g,"\\\\").replace(/'/g,"\\'");D.push(`globalThis.STUDIO_DEFINES['${w}'] = '${$}';`)}}D.push(""),D.push("export {};"),D.push("");let m=$e.Utils.joinPath(i,v??e0.filePaths.dist.definesTs);await n.writeFile(m,D.join(`
|
|
2213
|
+
`))}t.exportDefinesTs=e;function r(i,n){let F=[];return{result:i.replace(/\{\{([^}]+)\}\}/g,(E,u)=>{let D=u.trim();return Object.hasOwn(n,D)?n[D]:(F.push(D),E)}),unresolvedKeys:F}}t.replaceDefineTemplates=r})(lx||={});function Yf(x,A,e,r){if(J.isLibrary(x))return{flat:{...A},sections:structuredClone(e),definesWithSource:{...r}}}function Qf(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 Zf(x){let A={},e=x.split(/\r?\n/),r=[],t=null;for(let i of e){let n=Qf(i.trim());if(n.kind==="empty"||n.kind==="other"){r=[];continue}if(n.kind==="comment"){r.push(n.text);continue}if(n.kind==="section"){t=n.name;continue}let F=t?`${t}_${n.key}`:n.key;r.length>0&&(A[F]=r.join(`
|
|
2214
|
+
`)),r=[]}return A}function Bo(x){let A=x.split(`
|
|
2215
2215
|
`);return A.length===1?`/** ${A[0]} */`:`/**
|
|
2216
2216
|
${A.map(r=>` * ${r}`).join(`
|
|
2217
2217
|
`)}
|
|
2218
|
-
*/`}function
|
|
2219
|
-
${r}`:r||x}function Co(x,A,e,r,t,i,n){let F=t?`${t}_${r}`:r,v={value:x,sourceUri:A,sourceLine:xE(e,r,t)};return i[F]&&(v.comment=`${n}: ${i[F]}`),v}function Zf(x,A,e,r,t,i,n,F,v){r[x]||(r[x]={});for(let[E,u]of Object.entries(A)){let D=`${x}_${E}`,m=F[D],w=`${u}`;e[D]=w,r[x][E]=w;let j=Co(w,i,n,E,x,F,v);j.comment=Bo(t[D]?.comment,m,v),t[D]=j}}async function Tr(x,A,e,r,t,i){if(!await x.stat(A))return;let n=await x.readFile(A),F=zf(n),v=Eo.parse(F),E=A.toString(),u=F.split(/\r?\n/),D=Yf(F);for(let[m,w]of Object.entries(v))if(typeof w=="object"&&w!==null)Zf(m,w,e,r,t,E,u,D,i);else{let j=D[m],S=`${w}`;e[m]=S;let T=Co(S,E,u,m,null,D,i);T.comment=Bo(t[m]?.comment,j,i),t[m]=T}}function xE(x,A,e){let r=e===null,t=e?`[${e}]`:null,i=new RegExp(`^\\s*${AE(A)}\\s*=`);for(let n=0;n<x.length;n++){let F=x[n].trim();if(t&&F===t){r=!0;continue}if(r&&F.startsWith("[")&&F.endsWith("]")&&e!==null){r=!1;continue}if(r&&i.test(x[n]))return n}return 0}function AE(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var ln=U0(require("semver/preload")),{GET:Ni,POST:vn,PUT:uo}=(0,Do.default)();function vA(x){if(x)return{authorization:`Bearer ${x}`}}var vx;(w=>{w.getAPIUrl=j=>{let S="https://api.registry.microtronics.com";return j===lx.ENV.lucky?S="https://api.registry.lucky.ci.microtronics.com":j===lx.ENV.wynni&&(S="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:S+"/v1"}};async function A(j,S,T,q){let{data:O,error:R}=await Ni("/publisher/{publisherId}/libraries/{libraryId}",{...(0,w.getAPIUrl)(q),headers:{...vA(j)},params:{path:{publisherId:S,libraryId:T}}});if(R)throw new Error(R.reason);return O}w.getLibraryProfile=A;async function e(j,S,T=!1){let q=await fetch(S,{headers:{...vA(j),...m(!0)}});if(q.status===200)return T?await q.json():await q.arrayBuffer();throw new Error("Failed to fetch the library content")}w.fetchCustomContent=e;async function r(j,S,T){try{let{data:q,error:O}=await Ni("/publisher/{publisherId}",{...(0,w.getAPIUrl)(T),headers:{...vA(j)},params:{path:{publisherId:S}}});return O?(console.error(O),null):q}catch(q){return console.error(q),null}}w.getPublisher=r;async function t(j,S,T,q){try{let{data:O,error:R}=await vn("/packages/{publisherId}/applications",{...(0,w.getAPIUrl)(q),headers:{...vA(j),...m(!0)},params:{path:{publisherId:S}},body:{...T}});if(R)throw new Error(R.reason);return O.id}catch{return null}}w.createNewApplication=t;async function i(j,S,T,q){let{data:O,error:R}=await Ni("/publisher/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(q),headers:{...vA(j),...m(!0)},params:{path:{publisherId:S,applicationId:T}}});if(R)throw new Error(R.reason);return O}w.getExistingApplication=i;async function n(j,S,T,q,O){try{let{error:R}=await uo("/packages/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(O),headers:{...vA(j),...m(!0)},params:{path:{publisherId:S,applicationId:T}},body:{...q}});if(R)throw new Error(R.reason);return}catch{return null}}w.updateExistingApplication=n;async function F(j,S,T,q,O,R){let t0=!!ln.default.valid(q);try{let{error:M}=await uo("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(R),headers:{...vA(j),...m(t0)},params:{path:{publisherId:S,applicationId:T,applicationVersion:q}},body:{...O}});if(M)throw new Error(M.reason);return}catch{return null}}w.updateExistingApplicationVersion=F;async function v(j,S,T,q,O,R){let t0=!!ln.default.valid(q),{data:M,error:k}=await vn("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(R),headers:{...vA(j),...m(t0)},params:{path:{publisherId:S,applicationId:T,applicationVersion:q}},body:{},bodySerializer(){return O}});if(k)throw new Error(k.reason||k.err||k);return M}w.publishApplicationVersion=v;let E={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function u(j,S,T,q,O,R){try{let{error:t0}=await vn("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,w.getAPIUrl)(R),headers:{...vA(j),...m(!0)},params:{path:{publisherId:S,libraryId:T,libraryVersion:q}},body:{...O},bodySerializer(M){let k=new FormData;for(let[L,X]of Object.entries(M))X!==void 0&&k.append(L,new Blob([X],{type:E[L]}),L);return k}});if(t0)throw new Error(t0.reason)}catch(t0){throw console.error(t0),t0}}w.publishLibraryVersion=u;async function D(j,S,T,q,O,R,t0){let M=!!ln.default.valid(q),{error:k}=await vn("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,w.getAPIUrl)(t0),headers:{...vA(j),...m(M),"Content-Type":"application/octet-stream"},params:{path:{publisherId:S,applicationId:T,applicationVersion:q,applicationFileName:O}},body:{},bodySerializer(){return R}});if(k)throw new Error(k.reason)}w.updateApplicationFile=D;function m(j=!1){return j?{"X-Semver":"true"}:{}}w.injectSemverHeader=m})(vx||={});var jo=U0(require("semver/preload"));var go=require("deepmerge-ts"),eE=h0.isNumeric,po="52v007",bo="53v001",rE="54v001",tE="56v001",lA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,go.deepmerge)(structuredClone(this._manifest),lA._overwrites||{})},set manifest(x){this._manifest=x},set overwrites(x){this._overwrites=x},get stat(){return this._stat},set stat(x){this._stat=x},clear(){this._stat=null,this._manifest=null}},K;(o0=>{let x=h0.convertBlobToString;o0.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=o0.DeviceProfiles||={});let r;(C0=>(C0.app="app",C0.library="library",C0.addon="addon",C0.analytics="analytics"))(r=o0.ProjectTypes||={});let t;(l0=>(l0.restricted="restricted",l0.global="global"))(t=o0.BloAccessLevel||={});let i;(l0=>(l0.embedded="$embedded",l0.pure="$pure"))(i=o0.PovLocation||={});function n(G){lA.overwrites=G}o0.setOverwrites=n;function F(){lA.overwrites=null}o0.clearOverwrites=F;async function v(G,s0){let l0=qr.Utils.joinPath(G,o0.fileName),B0=await s0.stat(l0);if(lA.manifest===null||l0?.fsPath!==lA.stat?.path.fsPath||B0?.ctime!==lA.stat?.ctime||B0?.mtime!==lA.stat?.mtime||B0?.size!==lA.stat?.size){let C0=await s0.readFile(l0),_0=x(C0);lA.manifest=JSON.parse(_0),lA.stat={...B0,path:l0}}return lA.manifest}o0.read=v;async function E(G,s0){return await s0.readFile(qr.Utils.joinPath(G,o0.fileName))}o0.readAsBlob=E;async function u(G,s0){let l0=qr.Utils.joinPath(G,o0.fileName),B0=await s0.readFile(l0),C0=x(B0);return JSON.parse(C0)}o0.readRaw=u;async function D(G,s0,l0){return lA.clear(),vE(l0),s0.writeFile(qr.Utils.joinPath(G,o0.fileName),JSON.stringify(l0,null," "))}o0.write=D;function m(G){return G.library!==void 0?G.library:G.type==="library"}o0.isLibrary=m;function w(G){return G.type==="addon"}o0.isAddon=w;function j(G){return G.type===void 0&&!m(G)?!0:G.type==="app"}o0.isApp=j;function S(G){return G.type===void 0?!0:G.type==="app"}o0.isIotApp=S;function T(G){return G.type==="analytics"}o0.isAnalytics=T;async function q(G,s0,l0){l0||(l0=await v(G,s0)),FE(l0),nE(l0),iE(l0),oE(l0)}o0.validateBasicManifest=q;function O(G){let s0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(G.match(/^[a-z0-9-_]+$/)){let B0=["-","_"];if(B0.includes(G[0])||B0.includes(G[G.length-1]))return s0}else return s0;return G.length<3||G.length>20?"The library name is beyond permissible length of 20 characters.":null}o0.validateLibraryName=O;function R(G,s0){if(s0)return O(G);{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(!G.match(/^([a-zA-Z0-9 _-]+)$/))return l0;if(G.length<3||G.length>40)return"The project name is beyond permissible length of 40 characters.";let C0=["-","_"," "];return C0.includes(G[0])||C0.includes(G[G.length-1])?l0:null}}o0.validateProjectName=R;function t0(G){return G.length<5?"The description must have at least 5 characters.":null}o0.validateDescription=t0;function M(G){if(!G)return"No publisher set yet";let s0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(G.match(/^[a-zA-Z0-9-]+$/)){let B0=["_"];if(B0.includes(G[0])||B0.includes(G[G.length-1]))return s0}else return s0;return null}o0.validatePublisherId=M;async function k(G,s0,l0){return await vx.getPublisher(G,s0,l0)?null:`Publisher '${s0}' does not exist.`}o0.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 X(G){if(G===void 0)return"Allowed backends not specified yet";if(G===null)return null;if(Array.isArray(G)||G?.includes(";")){let s0=G?.includes(";")?G.split(";"):G;for(let l0 of s0)if(!l0.match(L))return`Domain "${l0}" is invalid`}else if(!G?.match(L)&&G!=="*")return'Invalid value for "allowedBackends"';return null}o0.validateRegistryAllowedBackends=X;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 H(G){if(G===void 0)return"Allowed applications not specified yet";if(G===null)return null;if(Array.isArray(G)||G?.includes(";")){let s0=G?.includes(";")?G.split(";"):G;for(let l0 of s0)if(!l0.match(W))return`Application id "${l0}" is invalid`}else if(!G?.match(W)&&G!=="*")return'Invalid value for "allowedApplications"';return null}o0.validateRegistryAllowedApplications=H;async function J(G,s0,l0){let B0=l0.icon;if(!B0)throw new Error("App icon is required for publishing an application!");let C0=qr.Utils.joinPath(G,B0);if(!await s0.stat(C0))throw new Error(`Could not load icon "${B0}"`);let I0=await s0.readFile(C0),ox=(0,mo.imageDimensionsFromData)(I0);if(!ox)throw new Error("App icon could not be validated!");if(ox?.width!==ox?.height)throw new Error("App icon has to be a square!");if(ox.width>512||ox.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,ho.isPNG)(I0))throw new Error("App icon has to be of type PNG!")}o0.validateApplicationIcon=J;function a0(G){let{engines:s0}=G;if(s0?.backend&&!s0.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');sE(G),aE(G)}o0.validateEngineSettings=a0;function n0(G,s0){let l0=_0=>{let I0=/^(\d+)v(\d+)$/.exec(_0);return I0?[Number(I0[1]),Number(I0[2])]:null},B0=l0(G),C0=l0(s0);return B0&&C0?B0[0]-C0[0]||B0[1]-C0[1]:G===s0?0:G<s0?-1:1}o0.compareBackendVersion=n0;async function x0(G,s0,l0,B0){B0||(B0=await o0.read(G,s0));let C0=o0.isAddon(B0),_0=o0.isAnalytics(B0);switch(l0){case u0.Part.dlo:return!!B0?.dlo?.mainFile&&!C0&&!_0;case u0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case u0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case u0.Part.dde:case u0.Part.dfiles:return!0;default:return!1}}o0.isApmPartEnabled=x0})(K||={});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 iE(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 sE(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(K.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=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 aE(x){if(!K.isAddon(x)&&!K.isAnalytics(x))return;let{backend:A}=x.engines,e=K.isAddon(x)?rE:tE;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(K.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!K.isAddon(x))throw new Error('Property "maxInstancesPerSite" is only allowed for addon projects!');if(!Number.isInteger(A))throw new Error('Property "maxInstancesPerSite" must be an integer!');if(A<1||A>100)throw new Error('Property "maxInstancesPerSite" must be between 1 and 100!')}function FE(x){if((x.engines?.backend||"00v000")>=bo||K.isLibrary(x)){if(!jo.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${bo} onwards "version" has to be a semantic version string!"`)}else if(!eE(x.version))throw new Error('"version" has to be a number!')}function vE(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var Er=require("vscode-uri");var hx=require("vscode-uri");var Wl=U0(require("ajv")),Xl=U0(require("ajv-formats"));var yo={$schema:"http://json-schema.org/draft-07/schema#",title:"Dynamic DDE Schema",description:"Describe your data structure for Microtronics IoT devices",type:"object",additionalProperties:!1,properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value.",markdownDescription:`Version of the DDE schema.
|
|
2218
|
+
*/`}function Co(x){return x!==""&&!isNaN(Number(x))}function xE(x){return(x.split("/").pop()||x).replace(/\.ini$/i,"")}function Do(x,A,e){let r=A?`${e}: ${A}`:void 0;return x&&r?`${x}
|
|
2219
|
+
${r}`:r||x}function po(x,A,e,r,t,i,n){let F=t?`${t}_${r}`:r,v={value:x,sourceUri:A,sourceLine:eE(e,r,t)};return i[F]&&(v.comment=`${n}: ${i[F]}`),v}function AE(x,A,e,r,t,i,n,F,v){r[x]||(r[x]={});for(let[E,u]of Object.entries(A)){let D=`${x}_${E}`,m=F[D],w=`${u}`;e[D]=w,r[x][E]=w;let j=po(w,i,n,E,x,F,v);j.comment=Do(t[D]?.comment,m,v),t[D]=j}}async function qr(x,A,e,r,t,i){if(!await x.stat(A))return;let n=await x.readFile(A),F=Wf(n),v=uo.parse(F),E=A.toString(),u=F.split(/\r?\n/),D=Zf(F);for(let[m,w]of Object.entries(v))if(typeof w=="object"&&w!==null)AE(m,w,e,r,t,E,u,D,i);else{let j=D[m],S=`${w}`;e[m]=S;let $=po(S,E,u,m,null,D,i);$.comment=Do(t[m]?.comment,j,i),t[m]=$}}function eE(x,A,e){let r=e===null,t=e?`[${e}]`:null,i=new RegExp(`^\\s*${rE(A)}\\s*=`);for(let n=0;n<x.length;n++){let F=x[n].trim();if(t&&F===t){r=!0;continue}if(r&&F.startsWith("[")&&F.endsWith("]")&&e!==null){r=!1;continue}if(r&&i.test(x[n]))return n}return 0}function rE(x){return x.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var cn=U0(require("semver/preload")),{GET:Ii,POST:ln,PUT:bo}=(0,mo.default)();function lA(x){if(x)return{authorization:`Bearer ${x}`}}var vx;(w=>{w.getAPIUrl=j=>{let S="https://api.registry.microtronics.com";return j===lx.ENV.lucky?S="https://api.registry.lucky.ci.microtronics.com":j===lx.ENV.wynni&&(S="https://api.registry.wynni.ci.microtronics.com"),{baseUrl:S+"/v1"}};async function A(j,S,$,q){let{data:R,error:O}=await Ii("/publisher/{publisherId}/libraries/{libraryId}",{...(0,w.getAPIUrl)(q),headers:{...lA(j)},params:{path:{publisherId:S,libraryId:$}}});if(O)throw new Error(O.reason);return R}w.getLibraryProfile=A;async function e(j,S,$=!1){let q=await fetch(S,{headers:{...lA(j),...m(!0)}});if(q.status===200)return $?await q.json():await q.arrayBuffer();throw new Error("Failed to fetch the library content")}w.fetchCustomContent=e;async function r(j,S,$){try{let{data:q,error:R}=await Ii("/publisher/{publisherId}",{...(0,w.getAPIUrl)($),headers:{...lA(j)},params:{path:{publisherId:S}}});return R?(console.error(R),null):q}catch(q){return console.error(q),null}}w.getPublisher=r;async function t(j,S,$,q){try{let{data:R,error:O}=await ln("/packages/{publisherId}/applications",{...(0,w.getAPIUrl)(q),headers:{...lA(j),...m(!0)},params:{path:{publisherId:S}},body:{...$}});if(O)throw new Error(O.reason);return R.id}catch{return null}}w.createNewApplication=t;async function i(j,S,$,q){let{data:R,error:O}=await Ii("/publisher/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(q),headers:{...lA(j),...m(!0)},params:{path:{publisherId:S,applicationId:$}}});if(O)throw new Error(O.reason);return R}w.getExistingApplication=i;async function n(j,S,$,q,R){try{let{error:O}=await bo("/packages/{publisherId}/applications/{applicationId}",{...(0,w.getAPIUrl)(R),headers:{...lA(j),...m(!0)},params:{path:{publisherId:S,applicationId:$}},body:{...q}});if(O)throw new Error(O.reason);return}catch{return null}}w.updateExistingApplication=n;async function F(j,S,$,q,R,O){let r0=!!cn.default.valid(q);try{let{error:I}=await bo("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(O),headers:{...lA(j),...m(r0)},params:{path:{publisherId:S,applicationId:$,applicationVersion:q}},body:{...R}});if(I)throw new Error(I.reason);return}catch{return null}}w.updateExistingApplicationVersion=F;async function v(j,S,$,q,R,O){let r0=!!cn.default.valid(q),{data:I,error:k}=await ln("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}",{...(0,w.getAPIUrl)(O),headers:{...lA(j),...m(r0)},params:{path:{publisherId:S,applicationId:$,applicationVersion:q}},body:{},bodySerializer(){return R}});if(k)throw new Error(k.reason||k.err||k);return I}w.publishApplicationVersion=v;let E={"README.md":"text/markdown","CHANGELOG.md":"text/markdown","library.tar.gz":"application/gzip","studio.json":"application/json"};async function u(j,S,$,q,R,O){try{let{error:r0}=await ln("/packages/{publisherId}/libraries/{libraryId}/versions/{libraryVersion}",{...(0,w.getAPIUrl)(O),headers:{...lA(j),...m(!0)},params:{path:{publisherId:S,libraryId:$,libraryVersion:q}},body:{...R},bodySerializer(I){let k=new FormData;for(let[L,W]of Object.entries(I))W!==void 0&&k.append(L,new Blob([W],{type:E[L]}),L);return k}});if(r0)throw new Error(r0.reason)}catch(r0){throw console.error(r0),r0}}w.publishLibraryVersion=u;async function D(j,S,$,q,R,O,r0){let I=!!cn.default.valid(q),{error:k}=await ln("/packages/{publisherId}/applications/{applicationId}/versions/{applicationVersion}/files/{applicationFileName}",{...(0,w.getAPIUrl)(r0),headers:{...lA(j),...m(I),"Content-Type":"application/octet-stream"},params:{path:{publisherId:S,applicationId:$,applicationVersion:q,applicationFileName:R}},body:{},bodySerializer(){return O}});if(k)throw new Error(k.reason)}w.updateApplicationFile=D;function m(j=!1){return j?{"X-Semver":"true"}:{}}w.injectSemverHeader=m})(vx||={});var ko=U0(require("semver/preload"));var wo=require("deepmerge-ts"),tE=h0.isNumeric,ho="52v007",jo="53v001",nE="54v001",iE="56v001",cA={_manifest:null,_stat:null,_overwrites:null,get manifest(){return(0,wo.deepmerge)(structuredClone(this._manifest),cA._overwrites||{})},set manifest(x){this._manifest=x},set overwrites(x){this._overwrites=x},get stat(){return this._stat},set stat(x){this._stat=x},clear(){this._stat=null,this._manifest=null}},J;(o0=>{let x=h0.convertBlobToString;o0.fileName="studio.json";let e;(T0=>(T0.m22x="m22x",T0.m23x="m23x",T0.nrf91="nrf91",T0.m2blegw="m2blegw",T0.m2easyv3="m2easyv3",T0.m2easyiot="m2easyiot"))(e=o0.DeviceProfiles||={});let r;(C0=>(C0.app="app",C0.library="library",C0.addon="addon",C0.analytics="analytics"))(r=o0.ProjectTypes||={});let t;(l0=>(l0.restricted="restricted",l0.global="global"))(t=o0.BloAccessLevel||={});let i;(l0=>(l0.embedded="$embedded",l0.pure="$pure"))(i=o0.PovLocation||={});function n(G){cA.overwrites=G}o0.setOverwrites=n;function F(){cA.overwrites=null}o0.clearOverwrites=F;async function v(G,s0){let l0=Nr.Utils.joinPath(G,o0.fileName),B0=await s0.stat(l0);if(cA.manifest===null||l0?.fsPath!==cA.stat?.path.fsPath||B0?.ctime!==cA.stat?.ctime||B0?.mtime!==cA.stat?.mtime||B0?.size!==cA.stat?.size){let C0=await s0.readFile(l0),_0=x(C0);cA.manifest=JSON.parse(_0),cA.stat={...B0,path:l0}}return cA.manifest}o0.read=v;async function E(G,s0){return await s0.readFile(Nr.Utils.joinPath(G,o0.fileName))}o0.readAsBlob=E;async function u(G,s0){let l0=Nr.Utils.joinPath(G,o0.fileName),B0=await s0.readFile(l0),C0=x(B0);return JSON.parse(C0)}o0.readRaw=u;async function D(G,s0,l0){return cA.clear(),cE(l0),s0.writeFile(Nr.Utils.joinPath(G,o0.fileName),JSON.stringify(l0,null," "))}o0.write=D;function m(G){return G.library!==void 0?G.library:G.type==="library"}o0.isLibrary=m;function w(G){return G.type==="addon"}o0.isAddon=w;function j(G){return G.type===void 0&&!m(G)?!0:G.type==="app"}o0.isApp=j;function S(G){return G.type===void 0?!0:G.type==="app"}o0.isIotApp=S;function $(G){return G.type==="analytics"}o0.isAnalytics=$;async function q(G,s0,l0){l0||(l0=await v(G,s0)),lE(l0),sE(l0),aE(l0),vE(l0)}o0.validateBasicManifest=q;function R(G){let s0="Library name can only contain 'a' through 'z', '0' through '9', '_' and '-'. The Library name must start with an alphabetic or numeric character.";if(G.match(/^[a-z0-9-_]+$/)){let B0=["-","_"];if(B0.includes(G[0])||B0.includes(G[G.length-1]))return s0}else return s0;return G.length<3||G.length>20?"The library name is beyond permissible length of 20 characters.":null}o0.validateLibraryName=R;function O(G,s0){if(s0)return R(G);{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(!G.match(/^([a-zA-Z0-9 _-]+)$/))return l0;if(G.length<3||G.length>40)return"The project name is beyond permissible length of 40 characters.";let C0=["-","_"," "];return C0.includes(G[0])||C0.includes(G[G.length-1])?l0:null}}o0.validateProjectName=O;function r0(G){return G.length<5?"The description must have at least 5 characters.":null}o0.validateDescription=r0;function I(G){if(!G)return"No publisher set yet";let s0="Publisher can only contain 'A' through 'Z', 'a' through 'z', '0' through '9' and '-'. The Publisher start with an alphabetic or numeric character.";if(G.match(/^[a-zA-Z0-9-]+$/)){let B0=["_"];if(B0.includes(G[0])||B0.includes(G[G.length-1]))return s0}else return s0;return null}o0.validatePublisherId=I;async function k(G,s0,l0){return await vx.getPublisher(G,s0,l0)?null:`Publisher '${s0}' does not exist.`}o0.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 W(G){if(G===void 0)return"Allowed backends not specified yet";if(G===null)return null;if(Array.isArray(G)||G?.includes(";")){let s0=G?.includes(";")?G.split(";"):G;for(let l0 of s0)if(!l0.match(L))return`Domain "${l0}" is invalid`}else if(!G?.match(L)&&G!=="*")return'Invalid value for "allowedBackends"';return null}o0.validateRegistryAllowedBackends=W;let Q=/^[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 H(G){if(G===void 0)return"Allowed applications not specified yet";if(G===null)return null;if(Array.isArray(G)||G?.includes(";")){let s0=G?.includes(";")?G.split(";"):G;for(let l0 of s0)if(!l0.match(Q))return`Application id "${l0}" is invalid`}else if(!G?.match(Q)&&G!=="*")return'Invalid value for "allowedApplications"';return null}o0.validateRegistryAllowedApplications=H;async function K(G,s0,l0){let B0=l0.icon;if(!B0)throw new Error("App icon is required for publishing an application!");let C0=Nr.Utils.joinPath(G,B0);if(!await s0.stat(C0))throw new Error(`Could not load icon "${B0}"`);let T0=await s0.readFile(C0),ox=(0,go.imageDimensionsFromData)(T0);if(!ox)throw new Error("App icon could not be validated!");if(ox?.width!==ox?.height)throw new Error("App icon has to be a square!");if(ox.width>512||ox.width<75)throw new Error("App icon size should be between 75px and 512px!");if(!(0,yo.isPNG)(T0))throw new Error("App icon has to be of type PNG!")}o0.validateApplicationIcon=K;function a0(G){let{engines:s0}=G;if(s0?.backend&&!s0.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');oE(G),FE(G)}o0.validateEngineSettings=a0;function n0(G,s0){let l0=_0=>{let T0=/^(\d+)v(\d+)$/.exec(_0);return T0?[Number(T0[1]),Number(T0[2])]:null},B0=l0(G),C0=l0(s0);return B0&&C0?B0[0]-C0[0]||B0[1]-C0[1]:G===s0?0:G<s0?-1:1}o0.compareBackendVersion=n0;async function Z(G,s0,l0,B0){B0||(B0=await o0.read(G,s0));let C0=o0.isAddon(B0),_0=o0.isAnalytics(B0);switch(l0){case u0.Part.dlo:return!!B0?.dlo?.mainFile&&!C0&&!_0;case u0.Part.blo:return!!(B0.blo?.buildCommand&&B0.blo?.workingPath);case u0.Part.pov:return!!(B0.pov?.details?.buildCommand&&B0.pov.details.workingPath);case u0.Part.dde:case u0.Part.dfiles:return!0;default:return!1}}o0.isApmPartEnabled=Z})(J||={});function sE(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 aE(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 oE(x){let{backend:A,productId:e,hwfw:r}=x.engines;if(J.isAddon(x)&&(e||r))throw new Error('For project type "addon", "engines.hwfw" or "engines.productId" is not allowed!"');if(A&&A>=ho){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 "${ho}"`)}function FE(x){if(!J.isAddon(x)&&!J.isAnalytics(x))return;let{backend:A}=x.engines,e=J.isAddon(x)?nE:iE;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 vE(x){let{maxInstancesPerSite:A}=x;if(A===void 0){if(J.isAddon(x))throw new Error('Property "maxInstancesPerSite" is required for addon projects!');return}if(!J.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 lE(x){if((x.engines?.backend||"00v000")>=jo||J.isLibrary(x)){if(!ko.default.valid(x.version))throw new Error(`From "engines.backend" version >= ${jo} onwards "version" has to be a semantic version string!"`)}else if(!tE(x.version))throw new Error('"version" has to be a number!')}function cE(x){x.registry&&(delete x.registry.allowedBackends,delete x.registry.target)}var Br=require("vscode-uri");var hx=require("vscode-uri");var Yl=U0(require("ajv")),Ql=U0(require("ajv-formats"));var _o={$schema:"http://json-schema.org/draft-07/schema#",title:"Dynamic DDE Schema",description:"Describe your data structure for Microtronics IoT devices",type:"object",additionalProperties:!1,properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value.",markdownDescription:`Version of the DDE schema.
|
|
2220
2220
|
|
|
2221
|
-
\u26A0\uFE0F **Do not modify this value.**`},cloudProject:{type:"boolean",description:"Indicates whether this is a cloud project.",markdownDescription:"Indicates whether this is a cloud project.\n\nWhen set to `false`, certain containers and top-level custom containers are restricted."},constants:{type:"object",description:"Declare constants that can be used across the YAML file.",markdownDescription:"Declare constants that can be referenced and used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",markdownDescription:"Define time-series data channels for recording measurements.\n\n**Limits:** Maximum 9 fields.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",markdownDescription:`Special container to transport **live data** during put-into-operation procedures.
|
|
2221
|
+
\u26A0\uFE0F **Do not modify this value.**`},cloudProject:{type:"boolean",description:"Indicates whether this is a cloud project.",markdownDescription:"Indicates whether this is a cloud project.\n\nWhen set to `false`, certain containers and top-level custom containers are restricted."},flexibleContainers:{type:"object",additionalProperties:!1,description:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length up/down.",markdownDescription:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length `up`/`down`.",properties:{timeseries:{type:"boolean",description:"Use up+ for timeseries (histdata) containers so records can be transferred with a dynamic length.",markdownDescription:"Use `up+` for timeseries (histdata) containers so records can be transferred with a dynamic length."},config:{type:"boolean",description:"Use up+/down+ for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions.",markdownDescription:"Use `up+`/`down+` for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions."}}},constants:{type:"object",description:"Declare constants that can be used across the YAML file.",markdownDescription:"Declare constants that can be referenced and used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",markdownDescription:"Define time-series data channels for recording measurements.\n\n**Limits:** Maximum 9 fields.\n\n**Naming rules:**\n- Must start with a letter or `_`\n- May contain letters, digits, and `_`\n- Names like `field0`, `ch0`, etc. are **not allowed**\n- Reserved names (`_id`, `id`, `_stamp`, `stamp`, `tag`, `_uid`, `customer_id`, `site_id`, `_rec_flags__`, `applog`) are **not allowed**",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",markdownDescription:`Special container to transport **live data** during put-into-operation procedures.
|
|
2222
2222
|
|
|
2223
|
-
Used for real-time data exchange between device and server during commissioning.`,$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)(?!(dde|cloudProject|constants|state|result|volatile|timeseries|aloha|setting|command|storage|relations))[a-zA-Z_][0-9a-zA-Z_]*$":{type:"object",description:"Custom configuration container. Field names must start with a letter or underscore and may contain letters, digits, and underscores.",$ref:"#/$defs/configurationFields"}},allOf:[{if:{properties:{cloudProject:{const:!1}}},then:{type:"object",additionalProperties:!1,errorMessage:{additionalProperties:"Non-cloud projects only allow standard containers (state, result, volatile, timeseries, aloha, setting, command, storage, relations). Set 'cloudProject' to true to use custom top-level containers."},properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value."},cloudProject:{type:"boolean"},constants:{type:"object",description:"Declare constants that can be used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}}}}],$defs:{stateContainer:{type:"object",title:"state - Transferred from the device",description:"Use this container for low-frequency state changes. Data is transferred from the device to the server.",markdownDescription:`**state** \u2013 Transferred from the device
|
|
2223
|
+
Used for real-time data exchange between device and server during commissioning.`,$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)(?!(dde|cloudProject|flexibleContainers|constants|state|result|volatile|timeseries|aloha|setting|command|storage|relations))[a-zA-Z_][0-9a-zA-Z_]*$":{type:"object",description:"Custom configuration container. Field names must start with a letter or underscore and may contain letters, digits, and underscores.",$ref:"#/$defs/configurationFields"}},allOf:[{if:{properties:{cloudProject:{const:!1}}},then:{type:"object",additionalProperties:!1,errorMessage:{additionalProperties:"Non-cloud projects only allow standard containers (state, result, volatile, timeseries, aloha, setting, command, storage, relations). Set 'cloudProject' to true to use custom top-level containers."},properties:{dde:{type:"string",default:"1.0.0",readOnly:!0,description:"Version of the DDE schema. Do not modify this value."},cloudProject:{type:"boolean"},flexibleContainers:{type:"object",additionalProperties:!1,description:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length up/down.",markdownDescription:"Opt in to flexible (variable-length) container transfer per container group. Omitted groups use fixed-length `up`/`down`.",properties:{timeseries:{type:"boolean",description:"Use up+ for timeseries (histdata) containers so records can be transferred with a dynamic length.",markdownDescription:"Use `up+` for timeseries (histdata) containers so records can be transferred with a dynamic length."},config:{type:"boolean",description:"Use up+/down+ for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions.",markdownDescription:"Use `up+`/`down+` for configuration containers (state, result, volatile, setting, command, aloha and custom containers) so records can be transferred with a dynamic length in both directions."}}},constants:{type:"object",description:"Declare constants that can be used across the YAML file."},state:{$ref:"#/$defs/stateContainer"},result:{$ref:"#/$defs/resultContainer"},volatile:{$ref:"#/$defs/volatileContainer"},timeseries:{type:"object",description:"Define time-series data channels for recording measurements.",additionalProperties:!1,maxProperties:9,errorMessage:{maxProperties:"The timeseries container supports a maximum of 9 fields."},properties:{_id:{not:{},errorMessage:"'_id' is a reserved name and cannot be used as a timeseries field."},id:{not:{},errorMessage:"'id' is a reserved name and cannot be used as a timeseries field."},_stamp:{not:{},errorMessage:"'_stamp' is a reserved name and cannot be used as a timeseries field."},stamp:{not:{},errorMessage:"'stamp' is a reserved name and cannot be used as a timeseries field."},tag:{not:{},errorMessage:"'tag' is a reserved name and cannot be used as a timeseries field."},_uid:{not:{},errorMessage:"'_uid' is a reserved name and cannot be used as a timeseries field."},customer_id:{not:{},errorMessage:"'customer_id' is a reserved name and cannot be used as a timeseries field."},site_id:{not:{},errorMessage:"'site_id' is a reserved name and cannot be used as a timeseries field."},_rec_flags__:{not:{},errorMessage:"'_rec_flags__' is a reserved name and cannot be used as a timeseries field."},applog:{not:{},errorMessage:"'applog' is a reserved name and cannot be used as a timeseries field."}},patternProperties:{"^(?!.*^field\\d+$)(?!.*^ch\\d+$)[a-zA-Z_][0-9a-zA-Z_]*$":{$ref:"#/$defs/timeseriesFields"}}},aloha:{type:"object",description:"Special container to transport live data during put-into-operation procedures.",$ref:"#/$defs/alohaContainer"},setting:{$ref:"#/$defs/settingContainer"},command:{$ref:"#/$defs/commandContainer"},storage:{$ref:"#/$defs/serverStorageContainer"},relations:{$ref:"#/$defs/serverRelationsContainer"}}}}],$defs:{stateContainer:{type:"object",title:"state - Transferred from the device",description:"Use this container for low-frequency state changes. Data is transferred from the device to the server.",markdownDescription:`**state** \u2013 Transferred from the device
|
|
2224
2224
|
|
|
2225
2225
|
Use this container for **low-frequency state changes**.
|
|
2226
2226
|
|
|
@@ -2314,41 +2314,41 @@ Accepts a number (\u2265 0) or a relation link (\`@container.field\`).`,minimum:
|
|
|
2314
2314
|
|
|
2315
2315
|
\u26A0\uFE0F **Important:** This does not activate any alarming. Alarming must be implemented in the DLO.
|
|
2316
2316
|
|
|
2317
|
-
Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var fi=require("yaml");var Oe=require("yaml");var cn;(A=>A.CODE={ddeFieldLength:"field_name_length"})(cn||={});var H0;(H=>{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=H.DDEContainerName||={});let A;(c0=>(c0.configA="configA",c0.configB="configB",c0.configC="configC",c0.config0="config0",c0.config1="config1",c0.config2="config2",c0.config3="config3",c0.config4="config4",c0.config5="config5",c0.config6="config6",c0.config7="config7",c0.config8="config8",c0.config9="config9",c0.histdata0="histdata0",c0.histdata1="histdata1",c0.histdata2="histdata2",c0.histdata3="histdata3",c0.histdata4="histdata4",c0.histdata5="histdata5",c0.histdata6="histdata6",c0.histdata7="histdata7",c0.histdata8="histdata8",c0.histdata9="histdata9",c0.aloha="aloha",c0.alerts="alerts",c0.applog="applog"))(A=H.ContainerName||={});let e;(G=>(G.cx="cx",G.hx="hx",G.cb="cb",G.aloha="aloha",G.applog="applog"))(e=H.ContainerType||={});let r;(_0=>(_0.up="up",_0.down="down",_0.upPlus="up+",_0.downPlus="down+",_0.none="none",_0.backendOnly="backend-only",_0.deviceOnly="device-only",_0.both="both",_0.bothPlus="both+",_0.noneBackend="none-be"))(r=H.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}H.CONTAINER_DEF_DLO_CID_BASE=t;let i=["up","up+","down","down+","both","none","both+","backend-only","device-only"],n=["up","up+","backend-only"];H.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:i},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:i},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:i},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:i},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:i},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:i},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:i},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:i},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:i},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:i},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:n},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:n},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:n},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:n},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:n},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:n},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:n},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:n},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:n},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:n},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},H.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],H.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],H.SERVER_CONTAINER=["configA","configB","configC"],H.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let m=["astring","nstring","cstring","wstring","ustring"],w=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:m,unit:m,chartMinimum:w,chartMaximum:w,scale:w,offset:w,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:w,chartAlarmHigh:w,chartWarningLow:w,chartWarningHigh:w,chartHysteresis:w,chartTriggerThreshold:w,chartTriggerRelation:w,chartSetPoint:w};function S(J,a0,n0){let x0=a0[J];if(x0!==void 0)if(H.regexRelation.exec(`${x0}`)){let o0=J==="chartSetPoint",[G,...s0]=x0.split("."),[,l0]=G.split("@"),B0=Object.values(n0.containers).find(ox=>ox.title===l0),C0=s0.join("."),_0=o0?";":"%",I0=(o0?"":"%")+(B0?.name||l0)+_0;if(I0=I0+`${C0}`,o0){let ox=n0.setPointList[a0.name];I0=I0+`;actual_output_value_${ox}`}return I0}else return x0}H.parseXMLValueWithRelation=S;function T(J){let{bitmask:a0}=J;if(!a0)return;let n0="$",x0=a0.replaceAll(" ","");if(a0.startsWith("0x"))n0+=x0.substring(2);else if(x0.startsWith("0b")){let o0=x0.substring(2).replaceAll(" ","");n0+=parseInt(o0,2).toString(16).toUpperCase()}return n0}H.parseXMLBitmask=T;function q(J){return J.type==="binary"?J.defaultValue.substring(2):J.defaultValue==="NaN"?"NAN":J.defaultValue}H.parseXMLDefaultValue=q,H.TDEF_NUMBER={xmlOut(J,a0,n0){J.decpl=S("decimalPlaces",a0,n0),J.decpl===void 0&&(J.decpl=0),J.vscale=S("scale",a0,n0),J.vofs=S("offset",a0,n0),J.min=S("chartMinimum",a0,n0),J.max=S("chartMaximum",a0,n0)}};let R={isBlob:1,xmlOut(J,a0){J.max=a0.byteSize}},t0={xmlOut(J){J.decpl=-1,J.param0="local",J.units="UTC"}};H.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...H.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,...H.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,...H.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,...H.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...H.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,...H.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,...H.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,...H.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,...R,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,...R,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,...R,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,...R,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,...R,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,...R,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"}}},H.fieldTypeDefinitions={uint8:H.TYPE_DEFS.u8,uint16:H.TYPE_DEFS.u16,uint32:H.TYPE_DEFS.u32,int8:H.TYPE_DEFS.s8,int16:H.TYPE_DEFS.s16,int32:H.TYPE_DEFS.s32,int64:H.TYPE_DEFS.s64,float16:H.TYPE_DEFS.f16,float32:H.TYPE_DEFS.f32,float64:H.TYPE_DEFS.f64,stamp32:H.TYPE_DEFS.stamp32,stamp40:H.TYPE_DEFS.stamp40,binary:H.TYPE_DEFS.bin,astring:H.TYPE_DEFS.astr,nstring:H.TYPE_DEFS.nstr,wstring:H.TYPE_DEFS.wstr,ustring:H.TYPE_DEFS.ustr,cstring:H.TYPE_DEFS.cstr};let L=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function X(J){let a0=J.toLowerCase();return L.includes(a0)||/^field\d+$/.test(a0)||/^ch\d+$/.test(a0)}H.checkForReservedFieldName=X;function W(J){return!!J.fields.find(a0=>a0.library===null&&a0.type!=="shadow")}H.hasContainerAppFields=W})(H0||={});var Nr={DP_registry_sz:1024,DP_config_sz:4e3,DP_histdata_sz:1024,DP_DISPLAY_CNT:0,DP_LED_CNT:0,DP_BUTTON_CNT:0,DP_GPIO_CNT:0,DP_IRQ_CNT:0,DP_DIGOUT_CNT:0,DP_UIN_CNT:0,DP_TEMP_CNT:0,DP_I2C_CNT:0,DP_SPI_CNT:0,DP_UART_CNT:0,DP_RS485_CNT:0,DP_RS232_CNT:0,DP_WIFI_CNT:0,DP_BLE_CNT:0,DP_LORA_CNT:0,DP_NBIOT_CNT:0},Ii={max_size:1e5,max_fields:1e3},KA={max_size:4e3,max_fields:1e3},yA={max_size:1024,max_fields:1e3},Ir={configA:Ii,configB:Ii,configC:Ii,config0:KA,config1:KA,config2:KA,config3:KA,config4:KA,config5:KA,config6:KA,config7:KA,config8:KA,config9:KA,histdata0:yA,histdata1:yA,histdata2:yA,histdata3:yA,histdata4:yA,histdata5:yA,histdata6:yA,histdata7:yA,histdata8:yA,histdata9:yA,aloha:{...yA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},Mi={m22x:{name:"M22x",dpid:"m22x",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M M2 HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:2,DP_WIFI_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m23x:{name:"M23x",dpid:"m23x",interface:{type:"usb",filter:{vendorId:1155},fileChunk:4096},usb_ids:["rapidM2M M23 HW2.0","rapidM2M M23 HW1.0"],alt_ids:[],generation:"M23",prog_mem:8*1024*1024,data_mem:8*1024*1024,total_mem:8*1024*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_LED_CNT:1,DP_GPIO_CNT:6,DP_IRQ_CNT:2,DP_I2C_CNT:1,DP_SPI_CNT:1,DP_UART_CNT:1,DP_WIFI_CNT:1},usbcaps:{dbgItfMayHangFixed:"99v999"},dlo:{compileRestrictions:{}}},nrf91:{name:"NRF91",dpid:"nrf91",interface:{type:"usb",filter:{vendorId:9540},fileChunk:2048},usb_ids:["rapidM2M NRF91 HW1.0","ONE NRF91 HW1.0","rapidM2M Evolve HW1.0"],alt_ids:[],generation:"NRF91",prog_mem:256*1024,data_mem:64*1024,total_mem:256*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_LED_CNT:1,DP_GPIO_CNT:32,DP_IRQ_CNT:6,DP_I2C_CNT:2,DP_SPI_CNT:2,DP_UART_CNT:2,DP_AIN_CNT:8,DP_PWM_CNT:3},usbcaps:{}},m2blegw:{name:"BLE Gateway",dpid:"m2blegw",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M BLEGW HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_DISPLAY_CNT:1,DP_DISPLAY_TYPE:"xc",DP_BUTTON_CNT:1,DP_BLE_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyv3:{name:"myDatalogEasy V3",dpid:"m2easyv3",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M Easy HW3.0"],alt_ids:["rapidM2M EasyIoT HW1.0","rapidM2M M220 HW1.0"],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}},m2easyiot:{name:"myDatalogEasy IoT",dpid:"m2easyiot",interface:{type:"usb",filter:{vendorId:9540},fileChunk:4096},usb_ids:["rapidM2M EasyIoT HW1.0"],alt_ids:[],generation:"M2",prog_mem:256*1024,data_mem:256*1024,total_mem:256*1024,hw_reqd:!1,dde:Ir,auto_inc:{...Nr,DP_LED_CNT:1,DP_BUTTON_CNT:1,DP_DIGOUT_CNT:1,DP_UIN_CNT:4,DP_TEMP_CNT:1,DP_RS485_CNT:1,DP_RS232_CNT:1,DP_BLE_CNT:1,DP_LORA_CNT:1},usbcaps:{},dlo:{compileRestrictions:{"-z":0}}}};var Li=require("vscode-uri");var Mr=class{dloFileMap={};rootUri=Li.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=h0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?Li.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var _o=require("vscode-uri");function Ri(x){return x.replace(/\\/g,"/").split("/").pop()??""}function Lr(x){return/\.spec\.dlo$/i.test(Ri(x))}function jt(x,A){let e=Ri(x);if(!e)return!1;if(Lr(e))return!0;let r=A?.dlo?.mainFile;return r?Ri(r)===e:e==="main.dlo"}var cE=/^\s*#define\s+TEST_OWN_MAIN\b/m;function fE(x){return cE.test(x)}function fn(x,A){if(!Lr(x))return[];let e=["DLO_TEST_SPEC=1"];return A!==void 0&&fE(A)&&e.push("TEST_OWN_MAIN=1"),e}var EE=/^(?:\s*#options\s+)(.*)(?:\s*)$/,BE=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,CE=/^(?:\s*#ifdef\s+)(.*)$/,dE=/^(?:\s*#ifndef\s+)(.*)$/,uE=/^(?:\s*#elseifdef\s+)(.*)$/,DE=/^(?:\s*#elseifndef\s+)(.*)$/,So=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,Po=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,$o=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,To=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,qo=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,pE=/^\s*#include\s*</,bE=/^\s*#endinput\s*/,mE=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,No=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Io=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function ko(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 Mo=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Lo=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(Lo||{}),hE=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,jE=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,gE=/^(.*)(^|\s*)onUplinkEvent/,yE=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,kE=/^\s*#callback\s+\w+\s*\(/;function wo(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let i=x[t];if(e){if(i==="\\"){t++;continue}i===r&&(e=!1);continue}if(i==='"'||i==="'"){e=!0,r=i;continue}i==="("?A++:i===")"&&A--}return A}function Ro(x){return So.test(x)||To.test(x)||Po.test(x)||$o.test(x)||qo.test(x)||No.test(x)||Io.test(x)||Mo.test(x)}function wE(x,A,e){if(!(yE.test(e)||kE.test(e)))return null;let t=wo(e);if(t<=0)return null;let i=t,n=[x[A]],F=[e],v=A+1,E=100;for(;i>0&&v<x.length&&v-A<E;){let m=x[v],w=m.split("//",1)[0];n.push(m),F.push(w),i+=wo(w),v++}if(n.length<=1||i>0)return null;let u=n.map((m,w)=>w===0?m:m.trim()).join(" "),D=F.map((m,w)=>w===0?m:m.trim()).join(" ");return Ro(D)?{joinedOriginal:u,joinedStripped:D,extraLineCount:n.length-1}:null}var Rr=class{pragmaDynamic=null;dloFileSequencer=new Mr;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,i){this.dloFileSequencer.workspacePath=A;let n=[],F=t.path,v=!1,E=_o.Utils.basename(t);if(F.includes(e0.filePaths.studio.auto.dlo.path)){let j=E.substring(0,E.length-8);!["app","main"].includes(j)&&E.endsWith("-dde.inc")&&(v=h0.generateHashForLibraryName(j))}else if(F.includes(e0.filePaths.studio.libdeps)){let j=F.split("libdeps/")[1],[S]=j.split("/");["dlo-core"].includes(S)||(v=h0.generateHashForLibraryName(S))}else K.isLibrary(r)&&(E.endsWith(".dlo")||F.includes("/dlo/examples/")||F.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",E):v=h0.generateHashForLibraryName(r.name));if(F.endsWith(".auto/default.inc"))return{data:i.join(`
|
|
2318
|
-
`),diagnostics:n};let u=[],D=this.dloFileSequencer.getSequenceForFile(F);u.push(`stock static __file{} = "${D}";`),u.push(`stock static __refid{} = "${D}";`),u.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),u.push("#line 0");let w=0;for(let j=0;j<i.length;j++){let S=i[j]
|
|
2319
|
-
forward ___${
|
|
2317
|
+
Accepts a number or a relation link (\`@container.field\`).`,$ref:"#/$defs/relationLinkPattern"}}};var Ei=require("yaml");var Ge=require("yaml");var fn;(A=>A.CODE={ddeFieldLength:"field_name_length"})(fn||={});var H0;(H=>{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=H.DDEContainerName||={});let A;(c0=>(c0.configA="configA",c0.configB="configB",c0.configC="configC",c0.config0="config0",c0.config1="config1",c0.config2="config2",c0.config3="config3",c0.config4="config4",c0.config5="config5",c0.config6="config6",c0.config7="config7",c0.config8="config8",c0.config9="config9",c0.histdata0="histdata0",c0.histdata1="histdata1",c0.histdata2="histdata2",c0.histdata3="histdata3",c0.histdata4="histdata4",c0.histdata5="histdata5",c0.histdata6="histdata6",c0.histdata7="histdata7",c0.histdata8="histdata8",c0.histdata9="histdata9",c0.aloha="aloha",c0.alerts="alerts",c0.applog="applog"))(A=H.ContainerName||={});let e;(G=>(G.cx="cx",G.hx="hx",G.cb="cb",G.aloha="aloha",G.applog="applog"))(e=H.ContainerType||={});let r;(_0=>(_0.up="up",_0.down="down",_0.upPlus="up+",_0.downPlus="down+",_0.none="none",_0.backendOnly="backend-only",_0.deviceOnly="device-only",_0.both="both",_0.bothPlus="both+",_0.noneBackend="none-be"))(r=H.TransferDirection||={});function t(K,a0){return K==="cx"&&!["backend-only"].includes(a0)?"DDE_CID_CONFIG":K==="hx"?"DDE_CID_HISTDATA":K==="aloha"?"DDE_CID_ALOHA":null}H.CONTAINER_DEF_DLO_CID_BASE=t;let i=["up","up+","down","down+","both","none","both+","backend-only","device-only"],n=["up","up+","backend-only"];H.CONTAINER_DEFS={configA:{ctype:"cb",cnum:"a",alias:"",flds:"field",xmits:["backend-only"]},configB:{ctype:"cb",cnum:"b",alias:"",flds:"field",xmits:["backend-only"]},configC:{ctype:"cb",cnum:"c",alias:"",flds:"field",xmits:["backend-only"]},config0:{ctype:"cx",cnum:0,alias:"",flds:"field",xmits:i},config1:{ctype:"cx",cnum:1,alias:"",flds:"field",xmits:i},config2:{ctype:"cx",cnum:2,alias:"",flds:"field",xmits:i},config3:{ctype:"cx",cnum:3,alias:"",flds:"field",xmits:i},config4:{ctype:"cx",cnum:4,alias:"",flds:"field",xmits:i},config5:{ctype:"cx",cnum:5,alias:"",flds:"field",xmits:i},config6:{ctype:"cx",cnum:6,alias:"",flds:"field",xmits:i},config7:{ctype:"cx",cnum:7,alias:"",flds:"field",xmits:i},config8:{ctype:"cx",cnum:8,alias:"",flds:"field",xmits:i},config9:{ctype:"cx",cnum:9,alias:"",flds:"field",xmits:i},histdata0:{ctype:"hx",cnum:0,alias:"",flds:"ch",xmits:n},histdata1:{ctype:"hx",cnum:1,alias:"",flds:"ch",xmits:n},histdata2:{ctype:"hx",cnum:2,alias:"",flds:"ch",xmits:n},histdata3:{ctype:"hx",cnum:3,alias:"",flds:"ch",xmits:n},histdata4:{ctype:"hx",cnum:4,alias:"",flds:"ch",xmits:n},histdata5:{ctype:"hx",cnum:5,alias:"",flds:"ch",xmits:n},histdata6:{ctype:"hx",cnum:6,alias:"",flds:"ch",xmits:n},histdata7:{ctype:"hx",cnum:7,alias:"",flds:"ch",xmits:n},histdata8:{ctype:"hx",cnum:8,alias:"",flds:"ch",xmits:n},histdata9:{ctype:"hx",cnum:9,alias:"",flds:"ch",xmits:n},aloha:{ctype:"aloha",cnum:void 0,alias:"aloha",flds:null,xmits:["up","up+"]},alerts:{ctype:void 0,cnum:void 0,alias:"alerts",flds:null,xmits:["up"]},applog:{ctype:"applog",cnum:void 0,alias:"applog",flds:null,xmits:["up+"]}},H.HISTDATA_CONTAINER=["histdata0","histdata1","histdata2","histdata3","histdata4","histdata5","histdata6","histdata7","histdata8","histdata9"],H.CONFIG_CONTAINER=["config0","config1","config2","config3","config4","config5","config6","config7","config8","config9"],H.SERVER_CONTAINER=["configA","configB","configC"],H.regexRelation=/^(@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*|lib:[a-zA-Z0-9_-]+@[a-zA-Z_][a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*(\[[^\]]+\])?(\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/;let m=["astring","nstring","cstring","wstring","ustring"],w=["int8","int16","int32","int64","uint8","uint16","uint32","float16","float32","float64"];H.allowedRelationTypes={title:m,unit:m,chartMinimum:w,chartMaximum:w,scale:w,offset:w,decimalPlaces:["uint8","uint16","uint32","int8","int16","int32","int64"],channelMode:["uint8","uint16","uint32"],chartAlarmLow:w,chartAlarmHigh:w,chartWarningLow:w,chartWarningHigh:w,chartHysteresis:w,chartTriggerThreshold:w,chartTriggerRelation:w,chartSetPoint:w};function S(K,a0,n0){let Z=a0[K];if(Z!==void 0)if(H.regexRelation.exec(`${Z}`)){let o0=K==="chartSetPoint",[G,...s0]=Z.split("."),[,l0]=G.split("@"),B0=Object.values(n0.containers).find(ox=>ox.title===l0),C0=s0.join("."),_0=o0?";":"%",T0=(o0?"":"%")+(B0?.name||l0)+_0;if(T0=T0+`${C0}`,o0){let ox=n0.setPointList[a0.name];T0=T0+`;actual_output_value_${ox}`}return T0}else return Z}H.parseXMLValueWithRelation=S;function $(K){let{bitmask:a0}=K;if(!a0)return;let n0="$",Z=a0.replaceAll(" ","");if(a0.startsWith("0x"))n0+=Z.substring(2);else if(Z.startsWith("0b")){let o0=Z.substring(2).replaceAll(" ","");n0+=parseInt(o0,2).toString(16).toUpperCase()}return n0}H.parseXMLBitmask=$;function q(K){return K.type==="binary"?K.defaultValue.substring(2):K.defaultValue==="NaN"?"NAN":K.defaultValue}H.parseXMLDefaultValue=q,H.TDEF_NUMBER={xmlOut(K,a0,n0){K.decpl=S("decimalPlaces",a0,n0),K.decpl===void 0&&(K.decpl=0),K.vscale=S("scale",a0,n0),K.vofs=S("offset",a0,n0),K.min=S("chartMinimum",a0,n0),K.max=S("chartMaximum",a0,n0)}};let O={isBlob:1,xmlOut(K,a0){K.max=a0.byteSize}},r0={xmlOut(K){K.decpl=-1,K.param0="local",K.units="UTC"}};H.TYPE_DEFS={u8:{dde:"uint8",dim:1,len:1,...H.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,...H.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,...H.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,...H.TDEF_NUMBER,rdef:1,xml:{type:"s8"},pwn:{rwfunc:"s8",htype:"s32",printf:"%d"},openApi:{type:"number"}},s16:{dde:"int16",dim:1,len:2,...H.TDEF_NUMBER,rdef:1,xml:{type:"s16"},pwn:{rwfunc:"s16",htype:"s32",printf:"%d"},openApi:{type:"number"}},s32:{dde:"int32",dim:1,len:4,...H.TDEF_NUMBER,rdef:1,xml:{type:"s32"},pwn:{rwfunc:"s32",printf:"%d"},openApi:{type:"number"}},s64:{dde:"int64",dim:0,len:8,...H.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,...H.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,...H.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,...H.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,...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"}}},H.fieldTypeDefinitions={uint8:H.TYPE_DEFS.u8,uint16:H.TYPE_DEFS.u16,uint32:H.TYPE_DEFS.u32,int8:H.TYPE_DEFS.s8,int16:H.TYPE_DEFS.s16,int32:H.TYPE_DEFS.s32,int64:H.TYPE_DEFS.s64,float16:H.TYPE_DEFS.f16,float32:H.TYPE_DEFS.f32,float64:H.TYPE_DEFS.f64,stamp32:H.TYPE_DEFS.stamp32,stamp40:H.TYPE_DEFS.stamp40,binary:H.TYPE_DEFS.bin,astring:H.TYPE_DEFS.astr,nstring:H.TYPE_DEFS.nstr,wstring:H.TYPE_DEFS.wstr,ustring:H.TYPE_DEFS.ustr,cstring:H.TYPE_DEFS.cstr};let L=["_id","id","_stamp","stamp","tag","_uid","customer_id","site_id","_rec_flags__","applog"];function W(K){let a0=K.toLowerCase();return L.includes(a0)||/^field\d+$/.test(a0)||/^ch\d+$/.test(a0)}H.checkForReservedFieldName=W;function Q(K){return!!K.fields.find(a0=>a0.library===null&&a0.type!=="shadow")}H.hasContainerAppFields=Q})(H0||={});var Ir={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},Mi={max_size:1e5,max_fields:1e3},zA={max_size:4e3,max_fields:1e3},kA={max_size:1024,max_fields:1e3},Mr={configA:Mi,configB:Mi,configC:Mi,config0:zA,config1:zA,config2:zA,config3:zA,config4:zA,config5:zA,config6:zA,config7:zA,config8:zA,config9:zA,histdata0:kA,histdata1:kA,histdata2:kA,histdata3:kA,histdata4:kA,histdata5:kA,histdata6:kA,histdata7:kA,histdata8:kA,histdata9:kA,aloha:{...kA,warn_fields:10},alerts:{max_size:13,max_fields:0,exact_match:!0},applog:{max_size:125,max_fields:0,exact_match:!1}},Li={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:Mr,auto_inc:{...Ir,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:Mr,auto_inc:{...Ir,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:Mr,auto_inc:{...Ir,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:Mr,auto_inc:{...Ir,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:Mr,auto_inc:{...Ir,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:Mr,auto_inc:{...Ir,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 Ri=require("vscode-uri");var Lr=class{dloFileMap={};rootUri=Ri.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=h0.generateHashForFilePath(e);return this.dloFileMap[e]=r,r}getFilePathForSequence(A){let e=Object.entries(this.dloFileMap).find(([,r])=>r===A);return e?Ri.URI.parse(`${this.rootUri.path}${e[0]}`).path:null}};var To=require("vscode-uri");function Oi(x){return x.replace(/\\/g,"/").split("/").pop()??""}function Rr(x){return/\.spec\.dlo$/i.test(Oi(x))}function jt(x,A){let e=Oi(x);if(!e)return!1;if(Rr(e))return!0;let r=A?.dlo?.mainFile;return r?Oi(r)===e:e==="main.dlo"}var EE=/^\s*#define\s+TEST_OWN_MAIN\b/m;function BE(x){return EE.test(x)}function En(x,A){if(!Rr(x))return[];let e=["DLO_TEST_SPEC=1"];return A!==void 0&&BE(A)&&e.push("TEST_OWN_MAIN=1"),e}var CE=/^(?:\s*#options\s+)(.*)(?:\s*)$/,dE=/^(?:\s*#preinclude\s+)(.*)(?:\s*)$/,uE=/^(?:\s*#ifdef\s+)(.*)$/,DE=/^(?:\s*#ifndef\s+)(.*)$/,pE=/^(?:\s*#elseifdef\s+)(.*)$/,bE=/^(?:\s*#elseifndef\s+)(.*)$/,$o=/^(\s*)(?:#callback\s+)(\w*)(?:\s*\(\s*)(.*?)(?:\s*\)\s*)(\{*){1}(?:\s*)$/,qo=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,No=/^(.*)(^|\s+)(?:assert\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Io=/^(.*)(^|\s+)(?:assert\s*\(\s*\);*\s*)$/,Mo=/^(.*)(^|\s+)(?:catch\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,mE=/^\s*#include\s*</,hE=/^\s*#endinput\s*/,jE=/^\s*#pragma\s+dynamic\s+(\S+)\s*(\/\/.*|\/\*.*|)$/,Lo=/^(.*)(^|\s+)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*,\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Ro=/^(.*)(^|\s*)(?:applog(|_ok|_warning|_alarm|_debug|_fatal)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/;function So(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 Oo=/^(.*)(^|\s+)(?:log(|_debug|_info|_warn|_error)\s*\(\s*)(.*?)(?:\s*\)\s*;*\s*)$/,Go=(t=>(t[t.debug=0]="debug",t[t.info=1]="info",t[t.warn=2]="warn",t[t.error=3]="error",t))(Go||{}),gE=/^(.*)(^|\s*)DDE_(state|result|aloha|volatile|setting|command)_/,yE=/^(.*)(^|\s*)onUplink(Restore|Apply)_(state|result|aloha|volatile|setting|command)/,kE=/^(.*)(^|\s*)onUplinkEvent/,wE=/(?:^|\s)(?:assert|catch|applog(?:_ok|_warning|_alarm|_debug|_fatal)?|log(?:_debug|_info|_warn|_error)?)\s*\(/,_E=/^\s*#callback\s+\w+\s*\(/;function Po(x){let A=0,e=!1,r="";for(let t=0;t<x.length;t++){let i=x[t];if(e){if(i==="\\"){t++;continue}i===r&&(e=!1);continue}if(i==='"'||i==="'"){e=!0,r=i;continue}i==="("?A++:i===")"&&A--}return A}function Uo(x){return $o.test(x)||Io.test(x)||qo.test(x)||No.test(x)||Mo.test(x)||Lo.test(x)||Ro.test(x)||Oo.test(x)}function SE(x,A,e){if(!(wE.test(e)||_E.test(e)))return null;let t=Po(e);if(t<=0)return null;let i=t,n=[x[A]],F=[e],v=A+1,E=100;for(;i>0&&v<x.length&&v-A<E;){let m=x[v],w=m.split("//",1)[0];n.push(m),F.push(w),i+=Po(w),v++}if(n.length<=1||i>0)return null;let u=n.map((m,w)=>w===0?m:m.trim()).join(" "),D=F.map((m,w)=>w===0?m:m.trim()).join(" ");return Uo(D)?{joinedOriginal:u,joinedStripped:D,extraLineCount:n.length-1}:null}var Or=class{pragmaDynamic=null;dloFileSequencer=new Lr;constructor(){}get pragmaDynamicFlag(){return this.pragmaDynamic?`-S${this.pragmaDynamic}`:null}preCompileDloFile(A,e,r,t,i){this.dloFileSequencer.workspacePath=A;let n=[],F=t.path,v=!1,E=To.Utils.basename(t);if(F.includes(e0.filePaths.studio.auto.dlo.path)){let j=E.substring(0,E.length-8);!["app","main"].includes(j)&&E.endsWith("-dde.inc")&&(v=h0.generateHashForLibraryName(j))}else if(F.includes(e0.filePaths.studio.libdeps)){let j=F.split("libdeps/")[1],[S]=j.split("/");["dlo-core"].includes(S)||(v=h0.generateHashForLibraryName(S))}else J.isLibrary(r)&&(E.endsWith(".dlo")||F.includes("/dlo/examples/")||F.includes("/dlo/test/")?e.log("Skipping dde mangling for project file",E):v=h0.generateHashForLibraryName(r.name));if(F.endsWith(".auto/default.inc"))return{data:i.join(`
|
|
2318
|
+
`),diagnostics:n};let u=[],D=this.dloFileSequencer.getSequenceForFile(F);u.push(`stock static __file{} = "${D}";`),u.push(`stock static __refid{} = "${D}";`),u.push('stock static __applog_src_id{} = "A\\0\\0\\0\\0\\0\\0\\0";'),u.push("#line 0");let w=0;for(let j=0;j<i.length;j++){let S=i[j],$=S.split("//",1)[0],q=null,R=0;if(!Uo($)){let O=SE(i,j,$);O&&(S=O.joinedOriginal,$=O.joinedStripped,R=O.extraLineCount)}if(q=CE.exec($))S="// "+S,n.push({file:t,level:"error",line:j,message:"#options is not supported here. Use the DLO settings instead."});else if(q=dE.exec($))S="// "+S,n.push({file:t,level:"error",line:j,message:"#preinclude is not supported here. Use the DLO settings instead."});else if(q=jE.exec($)){let O=Number(q[1].startsWith("(")?q[1].substring(1,q[1].length-1):q[1]);!Number.isInteger(O)||O<64?n.push({file:t,level:"error",line:j,message:"#pragma dynamic only supports integer values and must be greater than 63"}):(!this.pragmaDynamic||O>this.pragmaDynamic)&&(this.pragmaDynamic=O)}else if(q=uE.exec($))S=S.replace("#ifdef ","#if defined ");else if(q=DE.exec($))S=S.replace("#ifndef ","#if !defined ");else if(q=pE.exec($))S=S.replace("#elseifdef ","#elseif defined ");else if(q=bE.exec($))S=S.replace("#elseifndef ","#elseif !defined ");else if(q=$o.exec($)){let[,O,r0,I,k]=q;S=`${O}#define ${r0} _catch_funcidx( "___${r0}")
|
|
2319
|
+
forward ___${r0}( ${I});
|
|
2320
2320
|
#line
|
|
2321
2321
|
${w}
|
|
2322
|
-
public ___${
|
|
2323
|
-
`),diagnostics:n}}};var
|
|
2324
|
-
`)}}var Cn;(m=>{m.createPawnCC=kt,m.createPawnDbg=eF,m.FileSequencer=Mr,m.PreCompiler=Rr;function t(w,j){return jt(w,j)}m.isDloRootFile=t;function i(w){return Lr(w)}m.isDloSpecFile=i;function n(w,j){return fn(w,j)}m.getSpecCompileDefines=n,m.Compiler=Gr,m.uriToMemFs=fe,m.getPrecompilerDiagnostics=Bn,m.parseCompilerWarningsAndErrors=Hi;async function D(w,j,S){let T=await K.read(w,j),q=await rF(w,j,T);await j.writeFile(q.path,q.data),S.log("Generated",e0.filePaths.studio.auto.dlo.cfg)}m.exportDloConfig=D})(Cn||={});var nF=require("vscode-uri");var Ki=require("minimatch");var iF=require("@gera2ld/tarjs"),YE=h0.convertBlobToString,QE=require("pako"),sF=".studioignore",aF=[".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/**"];aF.push("**/.studio/**","**/node_modules/**",sF,"dist/defines.app.ts");var tF={dot:!0},Ur;(r=>{async function x(t,i){let n=new iF.TarWriter;(await A(t,i)).forEach(E=>{n.addFile(E.name,E.data)});let v=await n.write();return QE.gzip(await v.arrayBuffer())}r.createArchive=x;async function A(t,i){let n=[],{ignore:F,negate:v}=await ZE(t,i),u=(await i.findFiles(t,"**/*")).filter(({path:D})=>{let m=D.slice(t.path.length+1);return!F.some(w=>(0,Ki.minimatch)(m,w,tF))||v.some(w=>(0,Ki.minimatch)(m,w.slice(1),tF))});for(let D of u){let m=D.path.slice(t.path.length+1),[w,j]=await Promise.all([i.stat(D),i.readFile(D)]);w&&n.push({name:m,data:j,modifyTime:new Date(w.mtime)})}return n}r.getFilesForArchive=A;async function e(t,i,n,F=lx.ENV.production){let{publisher:v,name:E,version:u}=i,D=await mx.readFilesFromTarGz(n,["CHANGELOG.md","README.md","studio.json"]),m={"CHANGELOG.md":await Ji(D["CHANGELOG.md"]),"README.md":await Ji(D["README.md"]),"studio.json":await Ji(D["studio.json"]),"library.tar.gz":n};return await vx.publishLibraryVersion(t,v,E,u,m,F)}r.publishPackage=e})(Ur||={});async function ZE(x,A){let e=["!studio.json","!README.md"],t=(await xB(x,A)).split(/[\n\r]/).map(E=>E.trim()).filter(E=>!!E).filter(E=>!/^\s*#/.test(E)),i=[...t,...t.filter(E=>!/(^|\/)[^/]*\*[^/]*$/.test(E)).map(E=>/\/$/.test(E)?`${E}**`:`${E}/**`)],n=[...aF,...i,...e],[F,v]=n.reduce((E,u)=>/^\s*!/.test(u)?[E[0],[...E[1],u]]:[[...E[0],u],E[1]],[[],[]]);return{ignore:F,negate:v}}async function xB(x,A){let e=nF.Utils.joinPath(x,sF);if(await A.stat(e)){let t=await A.readFile(e);return YE(t)}else return""}async function Ji(x){return new Uint8Array(await x.arrayBuffer())}var VA=require("vscode-uri");var Te=require("yaml");var AB=h0.convertBlobToString,dn=h0.yamlRangeToLineInformation,un;(n=>{let x;(u=>(u.static="static",u.dynamic="dynamic",u.appDynamic="app-dynamic"))(x=n.Type||={});let A;(D=>(D.crcStamp="crc_stamp",D.stampOnly="stamp_only",D.onlyDown="only_down",D.onlyUp="only_up"))(A=n.SyncLogic||={});let e;(u=>(u.down="down",u.up="up",u.off="off"))(e=n.Force||={});async function r(F,v,E){let{properties:u,diagnostics:D,libraryFiles:m}=await t(F,v),w=VA.Utils.joinPath(F,e0.filePaths.dist.dfilesPath);await v.stat(w)&&await v.rm(w);for(let[j,S]of Object.entries(u))await rB(F,v,j,S,m);return Object.keys(u).length&&(E.done(`${Object.keys(u).length} dfiles processed.`),await v.writeFile(VA.Utils.joinPath(F,e0.filePaths.dist.dfilesProperties),JSON.stringify(u,null," "))),D}n.process=r;async function t(F,v){let E=[],u={},D=await ex.getApmPartDependencies(F,v,u0.Part.dfiles);for(let j of D){let{properties:S,diagnostics:T}=await i(v,j.path,j.name);Object.assign(u,S),E.push(...T)}let{properties:m,diagnostics:w}=await i(v,VA.Utils.joinPath(F,e0.filePaths.dfiles.mainDFILES),null);return Object.assign(u,m),E.push(...w),{properties:u,diagnostics:E,libraryFiles:D}}n.parseDfile=t;async function i(F,v,E){let u=[],D={};if(!await F.stat(v))return{properties:D,diagnostics:u};let m=await F.readFile(v),w=AB(m),j=new Te.LineCounter,T=(0,Te.parseDocument)(w,{lineCounter:j}).contents||new Te.YAMLMap;for(let q of T.items){let O=q.key.value,R=(0,Te.isMap)(q.value)?q.value:null,t0=dn(j,q.key.range),M=R?R.has("syncMode"):!1,k=M?R.get("syncMode"):"crc_stamp";if(M){let J=Object.values(n.SyncLogic);if(!J.includes(k)){let a0=R.items.find(x0=>x0.key.value==="syncMode"),n0=dn(j,a0.key.range);u.push({file:v,code:"",message:`Property syncMode does not match any of "${J.join(", ")}"`,line:n0.line,startCharacter:n0.startCharacter,endCharacter:n0.endCharacter,level:"error"})}}else u.push({file:v,code:"",message:'Property "syncMode" missing',line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"});let L=R?R.has("type"):!1,X=L?R.get("type"):"static";if(L){let J=Object.values(n.Type);if(!J.includes(X)){let a0=R.items.find(x0=>x0.key.value==="type"),n0=dn(j,a0.key.range);u.push({file:v,code:"",message:`Property type does not match any of "${J.join(", ")}"`,line:n0.line,startCharacter:n0.startCharacter,endCharacter:n0.endCharacter,level:"error"})}}O.match(/^[a-z0-9._-]*$/)||u.push({file:v,code:"",message:'Filename does not match pattern "a-z0-9._-"',line:t0.line,startCharacter:t0.startCharacter,endCharacter:t0.endCharacter,level:"error"});let W=VA.Utils.joinPath(VA.Utils.dirname(v),O),H=await eB(F,W);if(H)D[O]={crc:H.crc,force:"off",readable:!1,size:H.size,stamp:H.stamp,sync_logic:k,type:X,library:E};else{let J=dn(j,q.key.range);u.push({file:v,code:"",message:`Could not find file "${O}"`,line:J.line,startCharacter:J.startCharacter,endCharacter:J.endCharacter,level:"error"})}}return{properties:D,diagnostics:u}}n.parseYamlFile=i})(un||={});async function eB(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:h0.generateCRC32ForFileContent(r)}}async function rB(x,A,e,r,t){let n=r.library!==null?VA.Utils.dirname(t.find(E=>E.name===r.library).path):VA.Utils.joinPath(x,e0.filePaths.dfiles.path),F=VA.Utils.joinPath(x,e0.filePaths.dist.dfilesPath,e),v=VA.Utils.joinPath(n,e);await A.copy(v,F)}var oF=U0(require("dotenv")),FF=require("vscode-uri");var tB=".env.local",vF;(A=>{async function x(e,r){let t=FF.Utils.joinPath(e,tB);if(await r.stat(t)){let i=await r.readFile(t);return oF.default.parse(h0.convertBlobToString(i))}return{}}A.read=x})(vF||={});var Hr=U0(require("chalk")),WA;(r=>{let x;(u=>(u[u.log=0]="log",u[u.done=1]="done",u[u.info=2]="info",u[u.warning=3]="warning",u[u.error=4]="error",u[u.debug=5]="debug"))(x=r.LogMessageType||={}),r.LOG_PREFIX={1:Hr.default.bgGreen.black(" DONE "),0:"",2:Hr.default.bgBlueBright.black(" INFO "),3:Hr.default.bgYellow.black(" WARNING "),4:Hr.default.bgRed.black(" ERROR "),5:Hr.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(i=console){this._logHandler=i}_log(i,n,...F){this._silent&&i!==4||(F=[r.LOG_PREFIX[i],n,...F],this._logHandler.log(...F))}set silent(i){this._silent=i}set output(i){this._logHandler=i}log(i,...n){this._log(0,i,...n)}debug(i,...n){this._debugEnabled&&this._log(5,i,...n)}set debugEnabled(i){this._debugEnabled=i}error(i,...n){this._log(4,i,...n)}info(i,...n){this._log(2,i,...n)}warn(i,...n){this._log(3,i,...n)}done(i,...n){this._log(1,i,...n)}}r.Logger=e})(WA||={});var pa=require("node:child_process"),Cl=require("node:fs"),dl=U0(require("node:path")),Zr=require("vscode-uri");var Jv=require("node:events"),sa=require("vscode-uri"),rx=U0(Me());var Wx=U0(Me());var ta=U0(Me()),wv=2e3;function yD(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function kD(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var Kn=class{interface="usb";#A=new Set;#e;#r;#i;#t;#x=!1;#n;constructor(A,e){this.#e=A;let t=A.configuration.interfaces[e].alternate.endpoints;this.#r=t.find(i=>i.direction==="in"),this.#i=t.find(i=>i.direction==="out"),this.#t=kD(A,e)}async write(A){await this.#e.transferOut(this.#i.endpointNumber,A)}onData(A){let e={cb:A};return this.#A.add(e),this.#x||this.#s(),()=>{this.#A.delete(e)}}#s(){this.#x=!0;let A=this.#t;if(!A){this.#n=this.#a();return}A.on("data",e=>{if(e.byteLength===0)return;let r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let t of this.#A)t.cb(r)}),A.on("error",()=>{}),A.startPoll(1,this.#r.packetSize)}async#a(){for(;this.#x&&this.#e.opened;)try{let A=await this.#e.transferIn(this.#r.endpointNumber,this.#r.packetSize);if(A.data&&A.data.byteLength>0)for(let e of this.#A)e.cb(A.data.buffer)}catch{break}}async stop(){if(!this.#x)return;this.#x=!1;let A=this.#t;A?.pollActive?await new Promise(e=>{let r=setTimeout(e,wv);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,yD(wv)])}},zn=class extends Kn{constructor(A){super(A,ta.USB_CONFIGURATION.utoInterface)}},Vn=class extends Kn{constructor(A){super(A,ta.USB_CONFIGURATION.debugInterface)}};var wD=9540,na;function _v(){if(!na){let{WebUSB:x}=require("usb");na=new x({allowedDevices:[{vendorId:wD}]})}return na}async function _D(){return(await _v().getDevices()).map(A=>({productName:A.productName,serialNumber:A.serialNumber||A.productName?.split(" ").pop(),vendorId:A.vendorId,productId:A.productId}))}async function Sv(x){let A=await _D();if(A.length===0){x.info("No USB devices found.");return}x.info("Available USB devices:"),A.forEach((e,r)=>{let t=e.productName||`Unknown Device (VID: 0x${e.vendorId.toString(16)}, PID: 0x${e.productId.toString(16)})`,i=e.serialNumber?` [${e.serialNumber}]`:"";x.log(` ${r+1}. ${t}${i}`)})}async function ia(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await _v().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 Xn(x){return`Device not found with serial number: ${x}`}var SD=500;function PD(x){if(x instanceof Wn)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(Xn(""))}var Wn=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function $D(x,A){try{return{uto:new zn(x),debug:A?new Vn(x):void 0}}catch(e){throw new Wn("Device descriptors not ready",e)}}function TD(x){return async(A,e=!0)=>{let r=await ia(A,x);if(!r)throw new Error(Xn(A));try{await r.open(),await r.selectConfiguration(Wx.USB_CONFIGURATION.configurationNumber),await r.claimInterface(Wx.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(Wx.USB_CONFIGURATION.debugInterface);let{uto:t,debug:i}=$D(r,e);return{uto:t,debug:i,async close(){await t.stop(),await i?.stop(),r.opened&&(await r.releaseInterface(Wx.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(Wx.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function qD(x){return new Promise(A=>setTimeout(A,x))}async function ND(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(i){if(!PD(i)||Date.now()>=t)throw i;await qD(SD)}}function lr(x){return{debug:(A,...e)=>x.debug(A,...e),info:(A,...e)=>x.debug(A,...e),warn:(A,...e)=>x.warn(A,...e),error:(A,...e)=>x.error(A,...e)}}async function Yn(x,A={}){let e=A.logger??new WA.Logger,r=A.transportFactory??TD(e),t=A.needDebug!==!1,i=await ND(r,x,t,A.retryMs??0),n=t?i.debug:void 0,F=lr(e),v=n?new Wx.AtCommandHandler(n,F):void 0,E=new Wx.UtoMaster(i.uto,F);return{utoMaster:E,atHandler:v,transports:i,serial:x,close:async()=>{try{await E.dispose(v)}catch{}v?.dispose(),await i.close()}}}async function Yr(x,A,e,r,t=!1,i=0,n){if(!await e.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let v=await e.readFile(A),E;try{E=await Yn(x,{logger:r,debug:t,needDebug:!1,retryMs:i,transportFactory:n});let{utoMaster:u}=E;if(t){u.on("mdnCom",m=>{r.debug("mdnCom",m)}),u.on("mdnComError",m=>{r.debug("mdnComError",m)});let D=-1;u.on("installing",m=>{m&&m!==D&&(D=m,r.info(`Upload progress: ${m}%`))})}return await u.init(),await u.requestDeviceInfo(),r.info("Device connected, starting upload..."),await u.sendFile(Wx.UtoFileType.pawn,new Uint8Array(v.buffer,v.byteOffset,v.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(u){let D=u instanceof Error?u.message:String(u);return{success:!1,message:D===Xn(x)?D:`Upload failed: ${D}`}}finally{await E?.close()}}async function Pv(x,A,e=!1){let r,t;try{r=await Yn(x,{logger:A,debug:e});let{atHandler:i,transports:n}=r;if(!i)throw new Error("The debug interface is required for a sync");t=new Wx.SyncManager(n.uto,i,A),t.on("syncError",v=>A.error(`Sync error: ${v.message}`)),e&&(t.on("syncStart",({mode:v})=>A.log(`Sync mode: ${v}`)),t.on("syncPhase",({phase:v})=>A.log(`Sync phase: ${v}`)),t.on("syncComplete",v=>A.info(`Sync complete (mode: ${v.mode}, messages: ${v.serverMessageCount})`))),A.info("Syncing device...");let F=new AbortController;return await t.sync({serialNumber:x,signal:F.signal}),{success:!0,message:"Sync completed successfully"}}catch(i){let n=i instanceof Error?i.message:String(i);return{success:!1,message:n===Xn(x)?n:`Sync failed: ${n}`}}finally{t?.dispose(),await r?.close()}}var $v=require("vscode-uri"),Qn=U0(Me());var Zn=class x{constructor(A,e,r,t,i){this.fs=r;this.persist=t;this.logger=i;this.storage=A,this.file=e}fs;persist;logger;storage;file;lastSerialized=null;static async create(A,e,r={}){let t=$v.Utils.joinPath(A,e0.filePaths.studio.dev.mirror),i=new Qn.MemoryStorage;if(r.persist&&await e.stat(t))try{let n=new TextDecoder().decode(await e.readFile(t));i=Qn.MemoryStorage.fromJSON(JSON.parse(n))}catch(n){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${n instanceof Error?n.message:n}`),i=new Qn.MemoryStorage}return new x(i,t,e,r.persist===!0,r.logger)}async save(){if(!this.persist)return;let A=JSON.stringify(this.storage.toJSON());if(A!==this.lastSerialized)try{await this.fs.writeFile(this.file,A),this.lastSerialized=A}catch(e){this.logger?.warn(`Could not write dev mirror snapshot: ${e instanceof Error?e.message:e}`)}}};var Nv=require("node:events"),xi=require("node:fs/promises"),Iv=require("node:path"),Mv=U0(require("iconv-lite")),cr=U0(Me());var ID=5e3,Tv=500;function qv(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function MD(x){let A=x.level===cr.DebugLogLevel.info?"":`${cr.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function LD(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 Qr=class extends Nv.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??ID,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,xi.mkdir)((0,Iv.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,xi.appendFile)(e,`${JSON.stringify(A)}
|
|
2325
|
-
`,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=Tv){let r=e>0?e:Tv;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==cr.UtoTag.LOG||!r.data)return;let t=new Uint8Array(r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength));this.pushDecoded("rm2mlog",t)};A.on("utoFrame",e),this.disposers.push(()=>A.off("utoFrame",e))}attachAtHandler(A){let e=new cr.DebugMaster(A,lr(this.logger??new WA.Logger));e.on("message",r=>{let t=MD(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[qv(Mv.default.decode(Buffer.from(e),"win1252")),qv(Buffer.from(e).toString("utf8"))].find(LD);if(t){this.push(A,t);return}let i=Buffer.from(e.subarray(0,32)).toString("hex");this.push(A,`<${e.length} bytes> ${i}${e.length>32?"\u2026":""}`,e)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var Rv=require("node:events"),kA=U0(Me()),RD=1e3,OD=1e4,GD=200,Lv=new Set([kA.UtoTag.HISTDATA_RAW,kA.UtoTag.LOG,kA.UtoTag.ALERTS]),Ai=class extends Rv.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(A){super(),this.opts=A;for(let e of A.model.containers){let r=(0,kA.resolveTagForContainer)(e);r!==null&&this.containerByTag.set(r,e)}}get utoMaster(){let A=this.opts.utoMaster();if(!A)throw new Error("Device not connected");return A}async refreshTagMap(){let A=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),A&&A.utos.forEach((e,r)=>{this.tagMap.set(e.wTag,{index:r,sTag:e.sTag,historic:e.flags.historic}),(this.containerByTag.has(e.wTag)||Lv.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:RD,OD),this.opts.logger?.warn(`Stamp poll failed: ${A instanceof Error?A.message:String(A)}`),this.emit("error",A instanceof Error?A:new Error(String(A))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(A){let e=[];for(let r of this.relevantTags){let t=await this.pullIfAdvanced(r,A);t&&e.push(t)}if(e.length>0){this.lastChangeAt=Date.now();for(let r of e)this.emit("container-changed",r)}return e}async pullIfAdvanced(A,e){let r=this.tagMap.get(A);if(!r||r.index>=e.length)return null;let t=e[r.index],i=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let n=await this.mirrorStamp(A);return(i===void 0?t>n:t!==i)?this.pull(A,r,n,t):null}async pullTags(A){let e=[];for(let r of A){let t=this.tagMap.get(r)??{index:-1,sTag:`0x${r.toString(16)}`,historic:!1},i=await this.mirrorStamp(r),n=await this.pull(r,t,t.historic?i:0,this.deviceStamp(r)??0);n&&(e.push(r),this.emit("container-changed",n))}return e}async mirrorStamp(A){let e=await this.opts.storage.getLatestStampForTag(A);return e?(0,kA.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||Lv.has(A)?this.pullHistoric(A,r,t):this.pullSingle(A,t)}async pullSingle(A,e){let r=await this.utoMaster.requestUto(A,0);if(!r)return null;let t=await this.opts.storage.getRowForTag(A);return await this.opts.storage.replaceUtoRow({tag:A,stamp:(0,kA.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?UD(r.data):null}),this.describeChange(A,r.stamp||e)}async pullHistoric(A,e,r){let t=await this.opts.storage.getRowForTag(A),i=0,n=e,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>(n=Math.max(n,u.stamp40),{tag:A,stamp:(0,kA.stamp40ToDbHex)(u.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:u.data}));await this.opts.storage.insertHistoricRows(E),i+=E.length};return await this.utoMaster.requestHistoricUtos(A,e,void 0,void 0,GD,F),i===0?null:this.describeChange(A,n||r)}async describeChange(A,e){let r=this.containerByTag.get(A);if(!r)return{tag:A,container:null,stamp:e};let t=null;try{t=await this.opts.mapper.readContainer(r.name)}catch{}return{tag:A,container:r.name,alias:r.alias,stamp:e,decoded:t}}};function UD(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var Q0=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},HD=2e3,JD=3e3,KD=3e4,zD=1e4,VD=3e4,WD=1e3,aa="dev",Ov=`/api/1/sites/${aa}`,Gv="local",ei="Device not connected",Uv="device_id",oa=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(A,e){this.depth++;let r=this.tail,t=()=>{};this.tail=new Promise(i=>{t=i});try{await XD(r,e)}catch(i){throw this.depth--,r.then(t,t),i}try{return await A()}finally{this.depth--,t()}}};function XD(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new Q0(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var Le=class extends Jv.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 oa;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??rx.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 Q0("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new Q0("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let A=await this.build();if(A.ok===!1)throw new Q0(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await Zn.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new rx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new Q0(A.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let A=sa.Utils.joinPath(this.opts.cwd,e0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new Q0(`No DDE model at ${e0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,rx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await Yn(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let i=t instanceof Error?t.message:String(t);throw new Q0(`Could not open device ${this.opts.serial}: ${i}`,/not found/i.test(i)?2:3)}let{utoMaster:A,atHandler:e}=this.device;if(!e)throw new Q0(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(A),this.logStream.attachAtHandler(e),A.on("utoFrame",t=>this.emit("uto",t));try{await A.init();let t=await A.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null,await this.storage.getMetadataValue(Uv)===null&&await this.storage.setMetadataValue(Uv,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new Q0(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=lr(this.logger);this.stateManager=new rx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new rx.LocalDataManager(e,r),this.offlineSync=new rx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new Ai({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??HD,logger:this.logger}),this.poller.on("container-changed",A=>{this.emit("container-changed",A),this.logStream.push("uto",`${A.alias??A.container??this.tagLabel(A.tag)} changed`)}),this.poller.on("error",A=>this.emit("error",A)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(A){return`0x${A.toString(16)}`}get utoMaster(){if(!this.device)throw new Q0(ei,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new Q0(ei,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,i)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(rx.UtoCommand.DATA,r,t,i))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:aa,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,rx.createSiteInfoFromDde)(this.ddeModel,{siteUid:aa,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:Gv}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,rx.createLocalApiHandler)(e)}buildBlueprint(){let A={};for(let e of this.ddeModel.containers){let r={};for(let t of e.fields){let i=t.alias??t.name;r[i.toLowerCase()]={alias:i}}A[e.name.toLowerCase()]=r}return A}async handleApi(A){if(!this.apiHandler)throw new Q0("Session not started",7);let e=this.writtenTag(A),r=await this.apiHandler(A);if(e===null||r.status>=400)return r;let t=await this.mirrorStamp(e);return await this.awaitDeviceStamp(e,t)||(r.headers={...r.headers,"x-mt-mirror":"stale"}),r}writtenTag(A){let e=A.method.toUpperCase();if(e!=="PUT"&&e!=="POST")return null;let[r,t=""]=A.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let i=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(r);if(!i)return null;let n=(0,rx.resolveTagInModel)(this.ddeModel,decodeURIComponent(i[1]));return n===null||!(0,rx.isDevicePushableTag)(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??JD,t=this.poller;if(r<=0||!t)return!0;let i=Date.now()+r;for(;;){let F=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(F!==null&&F>=e)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=i)return!1;await Hv(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await K.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await mx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??lx.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:A}}catch(A){this.buildState={running:!1,ok:!1,at:Date.now(),message:A instanceof Error?A.message:String(A),diagnostics:A instanceof mx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=sa.Utils.joinPath(this.opts.cwd,A??e0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??Yr)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,zD,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+VD;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(WD)}}reportReconnectFailure(A){let e=A instanceof Error?A.message:String(A);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${e}`),this.stopped||this.emit("error",A instanceof Error?A:new Error(e))}async sync(A){let e=await this.withLink(async()=>{this.poller?.pause();try{return A&&A.length>0?await this.poller.pullTags(A):(await this.offlineSync.sync()).tags.filter(i=>i.outcome==="upload").map(i=>i.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let r={tags:e,at:this.lastSyncAt};return this.emit("sync",r),r}async at(A){return this.withLink(async()=>(this.logStream.push("at",`> ${A}`),this.atHandler.sendRaw(A)))}async state(){let A=this.stateManager;if(!A)throw new Q0(ei,3);return A.getLastState()??await A.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let A=this.localData;if(!A)throw new Q0(ei,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:Gv,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,rx.resolveTagInModel)(this.ddeModel,A.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}configContainers(){return this.ddeModel.containers.filter(A=>A.kind==="config")}async configs(){let A={},e=[];for(let r of this.configContainers()){let t=r.alias??r.name;e.push(t);let i=await this.handleApi({path:`${Ov}/containers/${encodeURIComponent(r.name)}`,method:"GET"});A[t]=i.status<400&&i.body?JSON.parse(i.body):{}}return{configs:A,order:e}}async applyConfigs(A){let e={};for(let[r,t]of Object.entries(A)){let i=this.ddeModel.byNameOrAlias(r);if(!i||i.kind!=="config"){e[r]={ok:!1,err:`E_NOT_FOUND ?ddeMapper.unknown-container."${r}"`};continue}let n=await this.handleApi({path:`${Ov}/containers/${encodeURIComponent(i.name)}`,method:"PUT",body:JSON.stringify(t)});e[r]=n.status>=400?{ok:!1,err:YD(n.body)}:n.headers?.["x-mt-mirror"]==="stale"?{ok:!0,stale:!0}:{ok:!0}}return e}async tick(){return this.poller?this.poller.tick():[]}async mirrorStamp(A){let e=await this.storage.getLatestStampForTag(A);return e?(0,rx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??KD)}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 YD(x){try{return JSON.parse(x).err??x}catch{return x}}var Yv=U0(require("node:http")),Qv=require("vscode-uri"),Zv=U0(require("yaml"));var xl=["log","state","sync","build","uto","container-changed","error"],QD=15e3,Kv=4*1024*1024,ZD="127.0.0.1",x6=8765,Al="no-store",el="E_NOT_FOUND",zv="E_BAD_REQUEST",A6=2e3,e6=20;function fr(x,A){return JSON.stringify({err:`${x} ${A}`})}function ZA(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":Al,...r}),x.end(e)}function r6(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function t6(x,A){if(!(r6(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 n6(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function i6(x,A){let e=x.headers.origin;typeof e=="string"&&n6(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 s6(x,A,e){if(!A)return!0;let r=x.headers.authorization,t=typeof r=="string"?r.replace(/^Bearer\s+/i,"").trim():(e??"").trim();if(t==="")return!1;let i=process.env.MYDATANET_TOKEN;return t===A||i!==void 0&&i!==""&&t===i}var Re=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function rl(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>Kv)throw x.pause(),new Re(413,"E_TOO_LARGE",`request body exceeds ${Kv} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function tl(x){return x!=="GET"&&x!=="HEAD"}function Vv(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new Re(400,zv,"malformed JSON body")}if(typeof A!="object"||A===null)throw new Re(400,zv,"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 a6(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 Xv(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var Fa=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
|
|
2322
|
+
public ___${r0}( ${I})${k}`}else if(q=Io.exec($)){let[,O,r0]=q;S=`${O}${r0}{_log_string="";_assert(__refid,__line);}`}else if(q=qo.exec($)){let[,O,r0,I,k]=q;S=`${O}${r0}{ if (!(${I})) { sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")});_assert(__refid,__line); }}`}else if(q=No.exec($)){let[,O,r0,I]=q;S=`${O}${r0}{ if (!(${I})) { _log_string="";_assert(__refid,__line); }}`}else if(q=Mo.exec($)){let[,O,r0,I]=q;S=`${O}${r0}_catch(__refid,__line,${I});`}else if(q=Lo.exec($)){let[,O,r0,I,k,L]=q,{priority:W,code:Q}=So(k,I.substring(1));W!==null&&(S=`${O}${r0}{new params_str{DDE_APPLOG_SIZE_PARAMS};sprintf(params_str,_,${L});DDE_applog_write(${W}, ${Q}, params_str, __applog_src_id);}`)}else if(q=Ro.exec($)){let[,O,r0,I,k]=q,{priority:L,code:W}=So(k,I.substring(1));L!==null&&(S=`${O}${r0}DDE_applog_write(${L}, ${W}, "", __applog_src_id);`)}else if(q=Oo.exec($)){let[,O,r0,I,k]=q,L=I.substring(1),W=Go[L];S=`${O}${r0}{ if(_log_level <= ${W}){ sprintf(_log_string,_,${k.replace(/%%/g,"\xFF")}); _log${I}(__refid,__line); }}`}else(q=mE.exec($))&&!F.includes(e0.filePaths.studio.auto.path)&&!jt(F,r)?(F.includes(e0.filePaths.studio.libdeps)||n.push({file:t,level:"warning",line:j,message:"Libraries are included automatically - remove this #include line"}),S="// Libraries are included automatically! - "+$):(q=hE.exec($))&&(n.push({file:t,level:"error",line:j,message:"#endinput is not supported - use #if/#endif instead"}),S=$);v&&!r.legacyProject&&(gE.exec($)&&(S=S.replaceAll("DDE_",`_${v}`)),yE.exec($)&&(S=S.replace("onUplink",`_${v}`)),kE.exec($)&&(S=S.replace("onUplink",`_${v}Uplink`))),u.push(S),w++;for(let O=0;O<R;O++)u.push(""),w++,j++}if(!jt(F,r)){let j=E.split(".")[0].replace(/[^a-zA-Z0-9]/g,"_"),S=`_inc_${j}`.substring(0,31),$=`_inc_${j}_inc`.substring(0,31);u.push(`#if defined ${S}`),u.push(`#undef ${S}`),u.push("#endif"),u.push(`#if defined ${$}`),u.push(`#undef ${$}`),u.push("#endif")}return{data:u.join(`
|
|
2323
|
+
`),diagnostics:n}}};var VA=require("vscode-uri");var q0=U0(require("fs")),sx=require("vscode-uri");var zo=U0(require("iconv-lite")),PE=h0.convertBlobToStringArray,Vo=16384,Wo=511,Gi=Vo|Wo,TE=32768,$E=438,Ho=TE|$E,qE=new Or,Gr={};function Cn(){let x=[];for(let A of Object.keys(Gr))x.push(...Gr[A].diagnostics);return x}var Bn=!!process.env.DLO_PROFILE,fe={precompileCount:0,cacheHits:0,precompileMs:0};function Xo(x){Bn&&(x.log(`[DLO_PROFILE] precompile: ${fe.precompileCount} runs, ${fe.cacheHits} cache hits, ${fe.precompileMs.toFixed(1)}ms`),fe.precompileCount=0,fe.cacheHits=0,fe.precompileMs=0)}var Ui=(x,A,e,r)=>{let t={getattr(n){let F=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n)),v=F.fsPath;if(!q0.existsSync(v))throw new x.ErrnoError(44);let E=Ko(A,r,e,F),u=q0.statSync(v),D=E?.length||u.size;return{mode:u.isDirectory()?Gi:Ho,size:D,atime:u.atime,mtime:u.mtime,ctime:u.ctime}},setattr(n,F){let v=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;if(!q0.existsSync(v))throw new x.ErrnoError(44);if(typeof F.size=="number"&&q0.truncateSync(v,F.size),typeof F.mode=="number"&&q0.chmodSync(v,F.mode),F.atime||F.mtime){let E=q0.statSync(v);q0.utimesSync(v,F.atime??E.atime,F.mtime??E.mtime)}},lookup(n,F){let E=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;if(!q0.existsSync(E))throw new x.ErrnoError(44);let u=q0.statSync(E),D=x.createNode(n,F,u.isDirectory()?Gi:Ho,0);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},readdir(n){let F=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath;return[".","..",...q0.readdirSync(F)]},mknod(n,F,v,E){let u=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;q0.writeFileSync(u,"");let D=x.createNode(n,F,v,E);return D.node_ops=n.node_ops,D.stream_ops=n.stream_ops,D},unlink(n,F){let v=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;q0.unlinkSync(v)},mkdir(n,F,v){let E=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;q0.mkdirSync(E,{mode:v});let u=x.createNode(n,F,v|Gi,0);return u.node_ops=n.node_ops,u.stream_ops=n.stream_ops,u},rmdir(n,F){let v=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n),F).fsPath;q0.rmdirSync(v)},rename(n,F,v){let E=sx.Utils.joinPath(sx.URI.parse(n.mount.opts.root),x.getPath(n)).fsPath,u=sx.Utils.joinPath(sx.URI.parse(F.mount.opts.root),x.getPath(F),v).fsPath;q0.renameSync(E,u)}},i={open(n){let F=sx.Utils.joinPath(sx.URI.parse(n.node.mount.opts.root),x.getPath(n.node));n.modifiedContent=Ko(A,r,e,F),n.modifiedContent||(n.nfd=q0.openSync(F.fsPath,Jo(n.flags)))},close(n){n.nfd&&q0.closeSync(n.nfd)},read(n,F,v,E,u){if(!n.modifiedContent)return q0.readSync(n.nfd,F,v,E,u);let D=n.modifiedContent;if(u>=D.length)return 0;let m=D.length-u,w=Math.min(E,m);return NE(D,F,v,u,u+w),w},write(n,F,v,E,u){return q0.writeSync(n.nfd,F,v,E,u)},flagsToMode:Jo,llseek(n,F,v){let E=F;if(v===1)E+=n.position;else if(v===2){let u=q0.fstatSync(n.nfd);E+=u.size}if(E<0)throw new x.ErrnoError(28);return n.position=E,E}};return{mount(){let n=Ee(A),F=x.createNode(null,n,Vo|Wo,0);return F.node_ops=t,F.stream_ops=i,F},node_ops:t,stream_ops:i}};function Jo(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 NE(x,A,e,r,t){if(Buffer.isBuffer(x)&&Buffer.isBuffer(A))x.copy(A,e,r,t);else{let i=x.subarray(r,t);Buffer.isBuffer(A)?Uint8Array.prototype.set.call(A,i,e):A.set(i,e)}}function Ko(x,A,e,r){let t=r.fsPath;if(!t.endsWith(".dlo")&&!t.endsWith(".inc"))return;let i=IE(t);if(!i){delete Gr[t];return}let n=Gr[t];if(n&&n.mtimeMs===i.mtimeMs&&n.size===i.size)return Bn&&fe.cacheHits++,n.buffer;let F=Bn?performance.now():0,v=ME(x,A,e,r);return Bn&&(fe.precompileCount++,fe.precompileMs+=performance.now()-F),Gr[t]={buffer:v.buffer,mtimeMs:i.mtimeMs,size:i.size,diagnostics:v.diagnostics},Gr[t].buffer}function IE(x){try{return q0.statSync(x)}catch{return null}}function ME(x,A,e,r){let t=q0.readFileSync(r.fsPath),i=PE(t),n=qE.preCompileDloFile(x,A,e,r,i);return{buffer:zo.encode(n.data,"cp1252"),diagnostics:n.diagnostics}}function Ee(x){return x.fsPath.replace(/\\/g,"/")}function gt(x,A){let e=Ee(x);return Ee(A).replace(e,"")}var tF=rF(),kt=tF.createPawnCC,nF=tF.createPawnDbg;var Ur=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 kt({noExitRuntime:A,print:n=>{let F=Hi(this.cwd,n);this.logger.log(F?F.message:n),this.stdout.push(n)},printErr:n=>{let F=Hi(this.cwd,n);n.includes(": warning")?this.logger.warn(F?F.message:n):this.logger.error(F?F.message:n),this.stderr.push(n),this.stdout.push(n)}});let e=Ee(this.cwd),[r]=e.split("/"),t=this.dloCC.FS,i=await J.read(this.cwd,this.fs);t.filesystems.NODEFS_TS=Ui(t,this.cwd,i,this.logger),t.mkdir(r),t.mount(t.filesystems.NODEFS_TS,{root:"/"},r),t.chdir(Ee(this.cwd))}async compile(A,e){let r=await J.read(A,e);if(!await J.isApmPartEnabled(A,e,u0.Part.dlo,r))return this.logger.log("DLO not enabled. Skipped."),{code:0,stdout:[],stderr:[],diagnostics:[]};await this.initDloCC(),await e.mkdir(VA.Utils.joinPath(A,"dist/dlo"));let t=VA.Utils.joinPath(A,r.dlo?.mainFile||e0.filePaths.dlo.mainDLO),i=[],n=VA.Utils.joinPath(A,e0.filePaths.studio.auto.dlo.cfg),F=gt(A,n);if(i.push(`-T.${F}`),Rr(t.path)){let E="";try{E=h0.convertBlobToString(await e.readFile(t))}catch(u){this.logger.error(u)}i.push(...En(t.path,E))}let v=0;try{let E=`.${gt(A,t)}`;v=await this.dloCC.callMain([E,...i])}catch(E){this.logger.error(E)}return{code:v,stdout:this.stdout,stderr:this.stderr,diagnostics:[...Cn(),...Ji(A,this.stderr,t)]}}async getDloSymbols(A,e){let r=e.map(D=>{let m=D.substring(0,2);return["-D","-e","-i","-o","-p","-r","-T"].includes(m)?`${m}.${D.substring(2)}`:D}),t=!!process.env.DLO_PROFILE,i=t?performance.now():0,{compiler:n,print:F}=await this.getSymbolCompiler(),v=t?performance.now()-i:0,E=t?performance.now():0,u=0;try{u=await n.callMain(["."+A,...r,"-R"])||0}catch(D){if(D.stack?.startsWith("RuntimeError"))return null;throw D}finally{if(t){let D=performance.now()-E;this.logger.log(`[DLO_PROFILE] instantiate: ${v.toFixed(1)}ms, callMain: ${D.toFixed(1)}ms`),Xo(this.logger)}}return{exitCode:u,lines:[...F.stdout,...F.stderr]}}async getSymbolCompiler(){let A={stdout:[],stderr:[]},e=await kt({noExitRuntime:!1,print:F=>{A.stdout.push(F)},printErr:F=>{A.stderr.push(F)}}),r=Ee(this.cwd),[t]=r.split("/"),i=e.FS,n=await J.read(this.cwd,this.fs);return i.filesystems.NODEFS_TS=Ui(i,this.cwd,n,this.logger),i.mkdir(t),i.mount(i.filesystems.NODEFS_TS,{root:"/"},t),{compiler:e,print:A}}};function Ji(x,A,e){let r=[],t=A.filter(i=>!!i.trim());for(let i of t){if((i.includes("Assertion failed:")||i.includes("Compilation aborted."))&&e){r.push({file:e,level:"error",line:0,message:i});continue}let n=Hi(x,i);n&&r.push({file:VA.URI.parse(`file:///${n?.posixPath}`),level:n.level,line:Number(n.lineNumber)-1,message:n.msg})}return r}function Hi(x,A){let e=A.indexOf(" : "),r=A.indexOf(": ",e+3),t=A.substring(0,e).trim(),i=A.substring(e+3,r).trim(),n=A.substring(r+2).trim();if(!t||!i||!n)return null;let[F,v]=t.split(/[()(-)]/),E=i.split(" "),u=E[E.length-2],m=VA.Utils.joinPath(x,F).fsPath.replace(/\\/g,"/");m.startsWith("/")&&(m=m.substring(1));let w=A.replace(F,m);return{level:u,msg:n,posixPath:m,lineNumber:v,message:w}}async function iF(x,A,e){let r=["-M","-v2"],t=VA.Utils.joinPath(x,e0.filePaths.studio.auto.dlo.defaultInc);r.push(`-p.${gt(x,t)}`);let i=await ex.getApmPartDependencies(x,A,u0.Part.dlo);for(let F of i){let v=VA.Utils.dirname(F.path);r.push(`-i.${gt(x,v)}`)}let n=e.dlo;return n&&r.push(...n.compileOptions),r.push("-o./dist/dlo/main.amx"),{path:VA.Utils.joinPath(x,e0.filePaths.studio.auto.dlo.cfg),data:r.join(`
|
|
2324
|
+
`)}}var dn;(m=>{m.createPawnCC=kt,m.createPawnDbg=nF,m.FileSequencer=Lr,m.PreCompiler=Or;function t(w,j){return jt(w,j)}m.isDloRootFile=t;function i(w){return Rr(w)}m.isDloSpecFile=i;function n(w,j){return En(w,j)}m.getSpecCompileDefines=n,m.Compiler=Ur,m.uriToMemFs=Ee,m.getPrecompilerDiagnostics=Cn,m.parseCompilerWarningsAndErrors=Ji;async function D(w,j,S){let $=await J.read(w,j),q=await iF(w,j,$);await j.writeFile(q.path,q.data),S.log("Generated",e0.filePaths.studio.auto.dlo.cfg)}m.exportDloConfig=D})(dn||={});var aF=require("vscode-uri");var zi=require("minimatch");var oF=require("@gera2ld/tarjs"),ZE=h0.convertBlobToString,xB=require("pako"),FF=".studioignore",vF=[".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/**"];vF.push("**/.studio/**","**/node_modules/**",FF,"dist/defines.app.ts");var sF={dot:!0},Hr;(r=>{async function x(t,i){let n=new oF.TarWriter;(await A(t,i)).forEach(E=>{n.addFile(E.name,E.data)});let v=await n.write();return xB.gzip(await v.arrayBuffer())}r.createArchive=x;async function A(t,i){let n=[],{ignore:F,negate:v}=await AB(t,i),u=(await i.findFiles(t,"**/*")).filter(({path:D})=>{let m=D.slice(t.path.length+1);return!F.some(w=>(0,zi.minimatch)(m,w,sF))||v.some(w=>(0,zi.minimatch)(m,w.slice(1),sF))});for(let D of u){let m=D.path.slice(t.path.length+1),[w,j]=await Promise.all([i.stat(D),i.readFile(D)]);w&&n.push({name:m,data:j,modifyTime:new Date(w.mtime)})}return n}r.getFilesForArchive=A;async function e(t,i,n,F=lx.ENV.production){let{publisher:v,name:E,version:u}=i,D=await mx.readFilesFromTarGz(n,["CHANGELOG.md","README.md","studio.json"]),m={"CHANGELOG.md":await Ki(D["CHANGELOG.md"]),"README.md":await Ki(D["README.md"]),"studio.json":await Ki(D["studio.json"]),"library.tar.gz":n};return await vx.publishLibraryVersion(t,v,E,u,m,F)}r.publishPackage=e})(Hr||={});async function AB(x,A){let e=["!studio.json","!README.md"],t=(await eB(x,A)).split(/[\n\r]/).map(E=>E.trim()).filter(E=>!!E).filter(E=>!/^\s*#/.test(E)),i=[...t,...t.filter(E=>!/(^|\/)[^/]*\*[^/]*$/.test(E)).map(E=>/\/$/.test(E)?`${E}**`:`${E}/**`)],n=[...vF,...i,...e],[F,v]=n.reduce((E,u)=>/^\s*!/.test(u)?[E[0],[...E[1],u]]:[[...E[0],u],E[1]],[[],[]]);return{ignore:F,negate:v}}async function eB(x,A){let e=aF.Utils.joinPath(x,FF);if(await A.stat(e)){let t=await A.readFile(e);return ZE(t)}else return""}async function Ki(x){return new Uint8Array(await x.arrayBuffer())}var WA=require("vscode-uri");var qe=require("yaml");var rB=h0.convertBlobToString,un=h0.yamlRangeToLineInformation,Dn;(n=>{let x;(u=>(u.static="static",u.dynamic="dynamic",u.appDynamic="app-dynamic"))(x=n.Type||={});let A;(D=>(D.crcStamp="crc_stamp",D.stampOnly="stamp_only",D.onlyDown="only_down",D.onlyUp="only_up"))(A=n.SyncLogic||={});let e;(u=>(u.down="down",u.up="up",u.off="off"))(e=n.Force||={});async function r(F,v,E){let{properties:u,diagnostics:D,libraryFiles:m}=await t(F,v),w=WA.Utils.joinPath(F,e0.filePaths.dist.dfilesPath);await v.stat(w)&&await v.rm(w);for(let[j,S]of Object.entries(u))await nB(F,v,j,S,m);return Object.keys(u).length&&(E.done(`${Object.keys(u).length} dfiles processed.`),await v.writeFile(WA.Utils.joinPath(F,e0.filePaths.dist.dfilesProperties),JSON.stringify(u,null," "))),D}n.process=r;async function t(F,v){let E=[],u={},D=await ex.getApmPartDependencies(F,v,u0.Part.dfiles);for(let j of D){let{properties:S,diagnostics:$}=await i(v,j.path,j.name);Object.assign(u,S),E.push(...$)}let{properties:m,diagnostics:w}=await i(v,WA.Utils.joinPath(F,e0.filePaths.dfiles.mainDFILES),null);return Object.assign(u,m),E.push(...w),{properties:u,diagnostics:E,libraryFiles:D}}n.parseDfile=t;async function i(F,v,E){let u=[],D={};if(!await F.stat(v))return{properties:D,diagnostics:u};let m=await F.readFile(v),w=rB(m),j=new qe.LineCounter,$=(0,qe.parseDocument)(w,{lineCounter:j}).contents||new qe.YAMLMap;for(let q of $.items){let R=q.key.value,O=(0,qe.isMap)(q.value)?q.value:null,r0=un(j,q.key.range),I=O?O.has("syncMode"):!1,k=I?O.get("syncMode"):"crc_stamp";if(I){let K=Object.values(n.SyncLogic);if(!K.includes(k)){let a0=O.items.find(Z=>Z.key.value==="syncMode"),n0=un(j,a0.key.range);u.push({file:v,code:"",message:`Property syncMode does not match any of "${K.join(", ")}"`,line:n0.line,startCharacter:n0.startCharacter,endCharacter:n0.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=O?O.has("type"):!1,W=L?O.get("type"):"static";if(L){let K=Object.values(n.Type);if(!K.includes(W)){let a0=O.items.find(Z=>Z.key.value==="type"),n0=un(j,a0.key.range);u.push({file:v,code:"",message:`Property type does not match any of "${K.join(", ")}"`,line:n0.line,startCharacter:n0.startCharacter,endCharacter:n0.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 Q=WA.Utils.joinPath(WA.Utils.dirname(v),R),H=await tB(F,Q);if(H)D[R]={crc:H.crc,force:"off",readable:!1,size:H.size,stamp:H.stamp,sync_logic:k,type:W,library:E};else{let K=un(j,q.key.range);u.push({file:v,code:"",message:`Could not find file "${R}"`,line:K.line,startCharacter:K.startCharacter,endCharacter:K.endCharacter,level:"error"})}}return{properties:D,diagnostics:u}}n.parseYamlFile=i})(Dn||={});async function tB(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:h0.generateCRC32ForFileContent(r)}}async function nB(x,A,e,r,t){let n=r.library!==null?WA.Utils.dirname(t.find(E=>E.name===r.library).path):WA.Utils.joinPath(x,e0.filePaths.dfiles.path),F=WA.Utils.joinPath(x,e0.filePaths.dist.dfilesPath,e),v=WA.Utils.joinPath(n,e);await A.copy(v,F)}var lF=U0(require("dotenv")),cF=require("vscode-uri");var iB=".env.local",fF;(A=>{async function x(e,r){let t=cF.Utils.joinPath(e,iB);if(await r.stat(t)){let i=await r.readFile(t);return lF.default.parse(h0.convertBlobToString(i))}return{}}A.read=x})(fF||={});var Jr=U0(require("chalk")),XA;(r=>{let x;(u=>(u[u.log=0]="log",u[u.done=1]="done",u[u.info=2]="info",u[u.warning=3]="warning",u[u.error=4]="error",u[u.debug=5]="debug"))(x=r.LogMessageType||={}),r.LOG_PREFIX={1:Jr.default.bgGreen.black(" DONE "),0:"",2:Jr.default.bgBlueBright.black(" INFO "),3:Jr.default.bgYellow.black(" WARNING "),4:Jr.default.bgRed.black(" ERROR "),5:Jr.default.bgBlackBright.black(" DEBUG ")};class e{_logHandler;_silent=!1;_debugEnabled=!1;constructor(i=console){this._logHandler=i}_log(i,n,...F){this._silent&&i!==4||(F=[r.LOG_PREFIX[i],n,...F],this._logHandler.log(...F))}set silent(i){this._silent=i}set output(i){this._logHandler=i}log(i,...n){this._log(0,i,...n)}debug(i,...n){this._debugEnabled&&this._log(5,i,...n)}set debugEnabled(i){this._debugEnabled=i}error(i,...n){this._log(4,i,...n)}info(i,...n){this._log(2,i,...n)}warn(i,...n){this._log(3,i,...n)}done(i,...n){this._log(1,i,...n)}}r.Logger=e})(XA||={});var ba=require("node:child_process"),Dl=require("node:fs"),pl=U0(require("node:path")),xt=require("vscode-uri");var Vv=require("node:events"),aa=require("vscode-uri"),rx=U0(Le());var Xx=U0(Le());var na=U0(Le()),Pv=2e3;function wD(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}function _D(x,A){let e=x.device;try{return e?.interface(A).endpoints.find(t=>t.direction==="in")}catch{return}}var zn=class{interface="usb";#A=new Set;#e;#r;#i;#t;#x=!1;#n;constructor(A,e){this.#e=A;let t=A.configuration.interfaces[e].alternate.endpoints;this.#r=t.find(i=>i.direction==="in"),this.#i=t.find(i=>i.direction==="out"),this.#t=_D(A,e)}async write(A){await this.#e.transferOut(this.#i.endpointNumber,A)}onData(A){let e={cb:A};return this.#A.add(e),this.#x||this.#s(),()=>{this.#A.delete(e)}}#s(){this.#x=!0;let A=this.#t;if(!A){this.#n=this.#a();return}A.on("data",e=>{if(e.byteLength===0)return;let r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let t of this.#A)t.cb(r)}),A.on("error",()=>{}),A.startPoll(1,this.#r.packetSize)}async#a(){for(;this.#x&&this.#e.opened;)try{let A=await this.#e.transferIn(this.#r.endpointNumber,this.#r.packetSize);if(A.data&&A.data.byteLength>0)for(let e of this.#A)e.cb(A.data.buffer)}catch{break}}async stop(){if(!this.#x)return;this.#x=!1;let A=this.#t;A?.pollActive?await new Promise(e=>{let r=setTimeout(e,Pv);A.stopPoll(()=>{clearTimeout(r),e()})}):this.#n&&await Promise.race([this.#n,wD(Pv)])}},Vn=class extends zn{constructor(A){super(A,na.USB_CONFIGURATION.utoInterface)}},Wn=class extends zn{constructor(A){super(A,na.USB_CONFIGURATION.debugInterface)}};var SD=9540,ia;function Tv(){if(!ia){let{WebUSB:x}=require("usb");ia=new x({allowedDevices:[{vendorId:SD}]})}return ia}async function PD(){return(await Tv().getDevices()).map(A=>({productName:A.productName,serialNumber:A.serialNumber||A.productName?.split(" ").pop(),vendorId:A.vendorId,productId:A.productId}))}async function $v(x){let A=await PD();if(A.length===0){x.info("No USB devices found.");return}x.info("Available USB devices:"),A.forEach((e,r)=>{let t=e.productName||`Unknown Device (VID: 0x${e.vendorId.toString(16)}, PID: 0x${e.productId.toString(16)})`,i=e.serialNumber?` [${e.serialNumber}]`:"";x.log(` ${r+1}. ${t}${i}`)})}async function sa(x,A){A.info(`Searching for device with serial number: ${x}`);let e=await Tv().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 Yn(x){return`Device not found with serial number: ${x}`}var TD=500;function $D(x){if(x instanceof Xn)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(Yn(""))}var Xn=class extends Error{constructor(A,e){super(`${A}: ${e instanceof Error?e.message:String(e)}`),this.name="TransientUsbOpenError"}};function qD(x,A){try{return{uto:new Vn(x),debug:A?new Wn(x):void 0}}catch(e){throw new Xn("Device descriptors not ready",e)}}function ND(x){return async(A,e=!0)=>{let r=await sa(A,x);if(!r)throw new Error(Yn(A));try{await r.open(),await r.selectConfiguration(Xx.USB_CONFIGURATION.configurationNumber),await r.claimInterface(Xx.USB_CONFIGURATION.utoInterface),e&&await r.claimInterface(Xx.USB_CONFIGURATION.debugInterface);let{uto:t,debug:i}=qD(r,e);return{uto:t,debug:i,async close(){await t.stop(),await i?.stop(),r.opened&&(await r.releaseInterface(Xx.USB_CONFIGURATION.utoInterface).catch(()=>{}),e&&await r.releaseInterface(Xx.USB_CONFIGURATION.debugInterface).catch(()=>{}),await r.close().catch(()=>{}))}}}catch(t){throw r.opened&&await r.close().catch(()=>{}),t}}}function ID(x){return new Promise(A=>setTimeout(A,x))}async function MD(x,A,e,r){let t=Date.now()+r;for(;;)try{return await x(A,e)}catch(i){if(!$D(i)||Date.now()>=t)throw i;await ID(TD)}}function cr(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 Qn(x,A={}){let e=A.logger??new XA.Logger,r=A.transportFactory??ND(e),t=A.needDebug!==!1,i=await MD(r,x,t,A.retryMs??0),n=t?i.debug:void 0,F=cr(e),v=n?new Xx.AtCommandHandler(n,F):void 0,E=new Xx.UtoMaster(i.uto,F);return{utoMaster:E,atHandler:v,transports:i,serial:x,close:async()=>{try{await E.dispose(v)}catch{}v?.dispose(),await i.close()}}}async function Qr(x,A,e,r,t=!1,i=0,n){if(!await e.stat(A))return{success:!1,message:`File not found: ${A.fsPath}`};let v=await e.readFile(A),E;try{E=await Qn(x,{logger:r,debug:t,needDebug:!1,retryMs:i,transportFactory:n});let{utoMaster:u}=E;if(t){u.on("mdnCom",m=>{r.debug("mdnCom",m)}),u.on("mdnComError",m=>{r.debug("mdnComError",m)});let D=-1;u.on("installing",m=>{m&&m!==D&&(D=m,r.info(`Upload progress: ${m}%`))})}return await u.init(),await u.requestDeviceInfo(),r.info("Device connected, starting upload..."),await u.sendFile(Xx.UtoFileType.pawn,new Uint8Array(v.buffer,v.byteOffset,v.length)),r.done("Upload completed successfully!"),{success:!0,message:"File uploaded successfully"}}catch(u){let D=u instanceof Error?u.message:String(u);return{success:!1,message:D===Yn(x)?D:`Upload failed: ${D}`}}finally{await E?.close()}}async function qv(x,A,e=!1){let r,t;try{r=await Qn(x,{logger:A,debug:e});let{atHandler:i,transports:n}=r;if(!i)throw new Error("The debug interface is required for a sync");t=new Xx.SyncManager(n.uto,i,A),t.on("syncError",v=>A.error(`Sync error: ${v.message}`)),e&&(t.on("syncStart",({mode:v})=>A.log(`Sync mode: ${v}`)),t.on("syncPhase",({phase:v})=>A.log(`Sync phase: ${v}`)),t.on("syncComplete",v=>A.info(`Sync complete (mode: ${v.mode}, messages: ${v.serverMessageCount})`))),A.info("Syncing device...");let F=new AbortController;return await t.sync({serialNumber:x,signal:F.signal}),{success:!0,message:"Sync completed successfully"}}catch(i){let n=i instanceof Error?i.message:String(i);return{success:!1,message:n===Yn(x)?n:`Sync failed: ${n}`}}finally{t?.dispose(),await r?.close()}}var Nv=require("vscode-uri"),Zn=U0(Le());var xi=class x{constructor(A,e,r,t,i){this.fs=r;this.persist=t;this.logger=i;this.storage=A,this.file=e}fs;persist;logger;storage;file;lastSerialized=null;static async create(A,e,r={}){let t=Nv.Utils.joinPath(A,e0.filePaths.studio.dev.mirror),i=new Zn.MemoryStorage;if(r.persist&&await e.stat(t))try{let n=new TextDecoder().decode(await e.readFile(t));i=Zn.MemoryStorage.fromJSON(JSON.parse(n))}catch(n){r.logger?.warn(`Ignoring unreadable dev mirror snapshot: ${n instanceof Error?n.message:n}`),i=new Zn.MemoryStorage}return new x(i,t,e,r.persist===!0,r.logger)}async save(){if(!this.persist)return;let A=JSON.stringify(this.storage.toJSON());if(A!==this.lastSerialized)try{await this.fs.writeFile(this.file,A),this.lastSerialized=A}catch(e){this.logger?.warn(`Could not write dev mirror snapshot: ${e instanceof Error?e.message:e}`)}}};var Lv=require("node:events"),Ai=require("node:fs/promises"),Rv=require("node:path"),Ov=U0(require("iconv-lite")),fr=U0(Le());var LD=5e3,Iv=500;function Mv(x){let A=x.indexOf("\0");return(A>=0?x.slice(0,A):x).trim()}function RD(x){let A=x.level===fr.DebugLogLevel.info?"":`${fr.DebugLogLevel[x.level]}: `,e=x.sequenceId!==void 0&&x.lineNumber!==void 0?` (${x.sequenceId}:${x.lineNumber})`:"";return`${A}${x.message??""}${e}`.trim()}function OD(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 Zr=class extends Lv.EventEmitter{buffer=[];capacity;logFile;logger;seq=0;disposers=[];writeChain=Promise.resolve();logDirReady=void 0;constructor(A={}){super(),this.capacity=A.capacity??LD,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,Ai.mkdir)((0,Rv.dirname)(e),{recursive:!0}).then(()=>{}),this.writeChain=this.writeChain.then(async()=>{await this.logDirReady,await(0,Ai.appendFile)(e,`${JSON.stringify(A)}
|
|
2325
|
+
`,"utf8")}).catch(r=>{this.logger?.warn(`Could not append to log file: ${r instanceof Error?r.message:r}`)}))}since(A=0,e=Iv){let r=e>0?e:Iv;return this.buffer.filter(t=>t.seq>A).slice(-r)}get lastSeq(){return this.seq}attachUtoMaster(A){let e=r=>{if(r.wTagFull!==fr.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 fr.DebugMaster(A,cr(this.logger??new XA.Logger));e.on("message",r=>{let t=RD(r);t&&this.push("at",t)}),this.disposers.push(()=>e.dispose())}pushDecoded(A,e){let t=[Mv(Ov.default.decode(Buffer.from(e),"win1252")),Mv(Buffer.from(e).toString("utf8"))].find(OD);if(t){this.push(A,t);return}let i=Buffer.from(e.subarray(0,32)).toString("hex");this.push(A,`<${e.length} bytes> ${i}${e.length>32?"\u2026":""}`,e)}async dispose(){for(let A of this.disposers)A();this.disposers=[],this.removeAllListeners(),await this.writeChain}};var Uv=require("node:events"),wA=U0(Le()),GD=1e3,UD=1e4,HD=200,Gv=new Set([wA.UtoTag.HISTDATA_RAW,wA.UtoTag.LOG,wA.UtoTag.ALERTS]),ei=class extends Uv.EventEmitter{opts;tagMap=new Map;relevantTags=new Set;containerByTag=new Map;deviceStamps=new Map;seenStamps=new Map;timer;paused=!1;stopped=!1;inFlight=!1;backoffMs=0;lastTickAt=null;lastChangeAt=null;errorCount=0;constructor(A){super(),this.opts=A;for(let e of A.model.containers){let r=(0,wA.resolveTagForContainer)(e);r!==null&&this.containerByTag.set(r,e)}}get utoMaster(){let A=this.opts.utoMaster();if(!A)throw new Error("Device not connected");return A}async refreshTagMap(){let A=await this.utoMaster.requestDeviceInfo();this.tagMap=new Map,this.relevantTags=new Set,this.seenStamps.clear(),this.deviceStamps.clear(),A&&A.utos.forEach((e,r)=>{this.tagMap.set(e.wTag,{index:r,sTag:e.sTag,historic:e.flags.historic}),(this.containerByTag.has(e.wTag)||Gv.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:GD,UD),this.opts.logger?.warn(`Stamp poll failed: ${A instanceof Error?A.message:String(A)}`),this.emit("error",A instanceof Error?A:new Error(String(A))),[]}finally{this.inFlight=!1}}async pullAdvancedTags(A){let e=[];for(let r of this.relevantTags){let t=await this.pullIfAdvanced(r,A);t&&e.push(t)}if(e.length>0){this.lastChangeAt=Date.now();for(let r of e)this.emit("container-changed",r)}return e}async pullIfAdvanced(A,e){let r=this.tagMap.get(A);if(!r||r.index>=e.length)return null;let t=e[r.index],i=this.seenStamps.get(A);this.deviceStamps.set(A,t),this.seenStamps.set(A,t);let n=await this.mirrorStamp(A);return(i===void 0?t>n:t!==i)?this.pull(A,r,n,t):null}async pullTags(A){let e=[];for(let r of A){let t=this.tagMap.get(r)??{index:-1,sTag:`0x${r.toString(16)}`,historic:!1},i=await this.mirrorStamp(r),n=await this.pull(r,t,t.historic?i:0,this.deviceStamp(r)??0);n&&(e.push(r),this.emit("container-changed",n))}return e}async mirrorStamp(A){let e=await this.opts.storage.getLatestStampForTag(A);return e?(0,wA.dbStampToStamp40)(e):0}async pull(A,e,r,t){return e.historic||Gv.has(A)?this.pullHistoric(A,r,t):this.pullSingle(A,t)}async pullSingle(A,e){let r=await this.utoMaster.requestUto(A,0);if(!r)return null;let t=await this.opts.storage.getRowForTag(A);return await this.opts.storage.replaceUtoRow({tag:A,stamp:(0,wA.stamp40ToDbHex)(r.stamp),flags:t?.flags??0,site_related:t?.site_related??0,data:r.data?JD(r.data):null}),this.describeChange(A,r.stamp||e)}async pullHistoric(A,e,r){let t=await this.opts.storage.getRowForTag(A),i=0,n=e,F=async v=>{let E=v.filter(u=>u.stamp40>e).map(u=>(n=Math.max(n,u.stamp40),{tag:A,stamp:(0,wA.stamp40ToDbHex)(u.stamp40),flags:t?.flags??0,site_related:t?.site_related??0,data:u.data}));await this.opts.storage.insertHistoricRows(E),i+=E.length};return await this.utoMaster.requestHistoricUtos(A,e,void 0,void 0,HD,F),i===0?null:this.describeChange(A,n||r)}async describeChange(A,e){let r=this.containerByTag.get(A);if(!r)return{tag:A,container:null,stamp:e};let t=null;try{t=await this.opts.mapper.readContainer(r.name)}catch{}return{tag:A,container:r.name,alias:r.alias,stamp:e,decoded:t}}};function JD(x){return new Uint8Array(x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength))}var Q0=class extends Error{constructor(e,r){super(e);this.exitCode=r;this.name="DevError"}exitCode},KD=2e3,zD=3e3,VD=3e4,WD=1e4,XD=3e4,YD=1e3,oa="dev",Hv=`/api/1/sites/${oa}`,Jv="local",ri="Device not connected",Kv="device_id",Fa=class{tail=Promise.resolve();depth=0;get busy(){return this.depth>0}async run(A,e){this.depth++;let r=this.tail,t=()=>{};this.tail=new Promise(i=>{t=i});try{await QD(r,e)}catch(i){throw this.depth--,r.then(t,t),i}try{return await A()}finally{this.depth--,t()}}};function QD(x,A){return new Promise((e,r)=>{let t=setTimeout(()=>r(new Q0(`Device busy: waited ${A} ms for the UTO link`,3)),A);t.unref?.(),x.then(()=>{clearTimeout(t),e()})})}var Re=class extends Vv.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 Fa;constructor(A){super(),this.opts=A,this.logger=A.logger,this.timeSource=A.timeSource??rx.systemTimeSource,this.logStream=new Zr({logFile:A.logFile,logger:A.logger}),this.logStream.on("record",e=>this.emit("log",e))}get serial(){return this.opts.serial}get connected(){return this.device!==void 0}get busy(){return this.lock.busy}get ddeModel(){if(!this.model)throw new Q0("DDE model not loaded",7);return this.model}get storage(){if(!this.mirror)throw new Q0("Mirror not initialised",7);return this.mirror.storage}async start(){if(this.opts.build){let A=await this.build();if(A.ok===!1)throw new Q0(A.message??"Build failed",1)}if(await this.loadModel(),this.mirror=await xi.create(this.opts.cwd,this.opts.fs,{persist:this.opts.persistMirror,logger:this.logger}),this.mapper=new rx.DdeMapper(this.ddeModel,this.storage,this.timeSource),await this.connect(),this.opts.flash){let A=await this.flash();if(!A.success)throw new Q0(A.message,3)}this.buildApiHandler(),await this.startPoller(),this.opts.persistMirror&&(this.mirrorSaveTimer=setInterval(()=>{this.mirror?.save()},5e3),this.mirrorSaveTimer.unref?.())}async loadModel(){let A=aa.Utils.joinPath(this.opts.cwd,e0.filePaths.dist.ddeXmlPath);if(!await this.opts.fs.stat(A))throw new Q0(`No DDE model at ${e0.filePaths.dist.ddeXmlPath} \u2014 run \`studio build\` first`,7);let e=new TextDecoder().decode(await this.opts.fs.readFile(A));this.model=(0,rx.parseDde)(e)}async connect(){try{this.device=this.opts.createDevice?await this.opts.createDevice(this.opts.serial):await Qn(this.opts.serial,{transportFactory:this.opts.transportFactory,debug:this.opts.debug,logger:this.logger})}catch(t){let i=t instanceof Error?t.message:String(t);throw new Q0(`Could not open device ${this.opts.serial}: ${i}`,/not found/i.test(i)?2:3)}let{utoMaster:A,atHandler:e}=this.device;if(!e)throw new Q0(`Device ${this.opts.serial} was opened without its debug interface`,3);this.logStream.attachUtoMaster(A),this.logStream.attachAtHandler(e),A.on("utoFrame",t=>this.emit("uto",t));try{await A.init();let t=await A.requestDeviceInfo();this.firmwareVersion=t?.firmwareVersion??null,await this.storage.getMetadataValue(Kv)===null&&await this.storage.setMetadataValue(Kv,t?.serialNumber??this.opts.serial)}catch(t){throw await this.closeDevice(),new Q0(`UTO handshake failed: ${t instanceof Error?t.message:String(t)}`,3)}let r=cr(this.logger);this.stateManager=new rx.Rm2mStateManager(e,r),this.stateManager.on("state",t=>this.emit("state",t)),this.localData=new rx.LocalDataManager(e,r),this.offlineSync=new rx.OfflineSyncManager(A,this.storage,r)}async startPoller(){this.poller=new ei({session:this,utoMaster:()=>this.device?.utoMaster,storage:this.storage,model:this.ddeModel,mapper:this.mapper,intervalMs:this.opts.pollIntervalMs??KD,logger:this.logger}),this.poller.on("container-changed",A=>{this.emit("container-changed",A),this.logStream.push("uto",`${A.alias??A.container??this.tagLabel(A.tag)} changed`)}),this.poller.on("error",A=>this.emit("error",A)),await this.poller.refreshTagMap(),this.poller.start()}tagLabel(A){return`0x${A.toString(16)}`}get utoMaster(){if(!this.device)throw new Q0(ri,3);return this.device.utoMaster}get atHandler(){if(!this.device?.atHandler)throw new Q0(ri,3);return this.device.atHandler}buildApiHandler(){let A={container:async(r,t,i)=>{await this.withLink(()=>this.utoMaster.sendUTOCmdExt(rx.UtoCommand.DATA,r,t,i))},adHocChangeRequest:async(r,t)=>this.withLink(()=>this.offlineSync.executeAdHocChangeRequest(r,t)),backfill:async()=>(await this.sync(),"ready")},e={siteUid:oa,deviceId:this.opts.serial,model:this.ddeModel,mapper:this.mapper,storage:this.storage,siteInfo:(0,rx.createSiteInfoFromDde)(this.ddeModel,{siteUid:oa,deviceId:this.opts.serial,name:`dev-${this.opts.serial}`,apmId:Jv}),me:{name:"studio-dev",roles:["developer"]},push:A,logger:this.logger,timeSource:this.timeSource,blueprint:this.buildBlueprint(),allowAnySiteUid:!0};this.apiHandler=(0,rx.createLocalApiHandler)(e)}buildBlueprint(){let A={};for(let e of this.ddeModel.containers){let r={};for(let t of e.fields){let i=t.alias??t.name;r[i.toLowerCase()]={alias:i}}A[e.name.toLowerCase()]=r}return A}async handleApi(A){if(!this.apiHandler)throw new Q0("Session not started",7);let e=this.writtenTag(A),r=await this.apiHandler(A);if(e===null||r.status>=400)return r;let t=await this.mirrorStamp(e);return await this.awaitDeviceStamp(e,t)||(r.headers={...r.headers,"x-mt-mirror":"stale"}),r}writtenTag(A){let e=A.method.toUpperCase();if(e!=="PUT"&&e!=="POST")return null;let[r,t=""]=A.path.split("?");if(/(^|&)async=1(&|$)/.test(t))return null;let i=/\/sites\/[^/]+\/(?:containers\/)?([^/?]+)$/.exec(r);if(!i)return null;let n=(0,rx.resolveTagInModel)(this.ddeModel,decodeURIComponent(i[1]));return n===null||!(0,rx.isDevicePushableTag)(n)||this.poller?.knowsTag(n)===!1?null:n}async awaitDeviceStamp(A,e){let r=this.opts.waitMs??zD,t=this.poller;if(r<=0||!t)return!0;let i=Date.now()+r;for(;;){let F=await this.withLink(()=>t.refreshStamps()).then(()=>!0,()=>!1)?t.deviceStamp(A):null;if(F!==null&&F>=e)return await this.withLink(()=>t.pullTags([A])).catch(()=>{}),!0;if(Date.now()>=i)return!1;await zv(100)}}async build(){this.buildState={running:!0,ok:null,at:null},this.emit("build",this.buildState);try{await J.validateBasicManifest(this.opts.cwd,this.opts.fs,null);let A=await mx.buildAll(this.opts.cwd,this.opts.fs,this.logger,this.opts.env??lx.ENV.production,this.opts.apiToken??null,this.opts.part??!0,!0);this.buildState={running:!1,ok:!0,at:Date.now(),diagnostics:A}}catch(A){this.buildState={running:!1,ok:!1,at:Date.now(),message:A instanceof Error?A.message:String(A),diagnostics:A instanceof mx.BuildError?A.mergedDiagnostics:void 0}}return this.emit("build",this.buildState),this.buildState}async flash(A){let e=aa.Utils.joinPath(this.opts.cwd,A??e0.filePaths.dist.mainAmxPath);this.poller?.pause();try{return await this.withLink(async()=>{await this.closeDevice();try{return await(this.opts.uploadToDevice??Qr)(this.opts.serial,e,this.opts.fs,this.logger,this.opts.debug,WD,this.opts.transportFactory)}finally{await this.reconnect()}})}finally{this.connected&&await this.poller?.refreshTagMap().catch(()=>{}),this.poller?.resume()}}async reconnect(){let A=Date.now()+XD;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 zv(YD)}}reportReconnectFailure(A){let e=A instanceof Error?A.message:String(A);this.logger.error(`Could not reopen device ${this.opts.serial} after the flash: ${e}`),this.stopped||this.emit("error",A instanceof Error?A:new Error(e))}async sync(A){let e=await this.withLink(async()=>{this.poller?.pause();try{return A&&A.length>0?await this.poller.pullTags(A):(await this.offlineSync.sync()).tags.filter(i=>i.outcome==="upload").map(i=>i.tag)}finally{this.poller?.resume()}});this.lastSyncAt=Date.now();let r={tags:e,at:this.lastSyncAt};return this.emit("sync",r),r}async at(A){return this.withLink(async()=>(this.logStream.push("at",`> ${A}`),this.atHandler.sendRaw(A)))}async state(){let A=this.stateManager;if(!A)throw new Q0(ri,3);return A.getLastState()??await A.fetchState()}localDataSnapshot(){return this.localData?.getSnapshot()??null}async measure(){return this.withLink(async()=>{let A=this.localData;if(!A)throw new Q0(ri,3);return A.triggerMeasurement()})}status(){return{serial:this.opts.serial,connected:this.connected,apmId:Jv,firmwareVersion:this.firmwareVersion,model:{containers:(this.model?.containers??[]).map(A=>({name:A.name,alias:A.alias,kind:A.kind,tag:(0,rx.resolveTagInModel)(this.ddeModel,A.name)}))},lastSync:this.lastSyncAt,buildState:this.buildState,poll:this.poller?.status()??{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0}}}configContainers(){return this.ddeModel.containers.filter(A=>A.kind==="config")}async configs(){let A={},e=[];for(let r of this.configContainers()){let t=r.alias??r.name;e.push(t);let i=await this.handleApi({path:`${Hv}/containers/${encodeURIComponent(r.name)}`,method:"GET"});A[t]=i.status<400&&i.body?JSON.parse(i.body):{}}return{configs:A,order:e}}async applyConfigs(A){let e={};for(let[r,t]of Object.entries(A)){let i=this.ddeModel.byNameOrAlias(r);if(!i||i.kind!=="config"){e[r]={ok:!1,err:`E_NOT_FOUND ?ddeMapper.unknown-container."${r}"`};continue}let n=await this.handleApi({path:`${Hv}/containers/${encodeURIComponent(i.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,rx.dbStampToStamp40)(e):0}async withLink(A){return this.lock.run(A,this.opts.lockWaitMs??VD)}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 zv(x){return new Promise(A=>setTimeout(A,x))}function ZD(x){try{return JSON.parse(x).err??x}catch{return x}}var xl=U0(require("node:http")),Al=require("vscode-uri"),el=U0(require("yaml"));var rl=["log","state","sync","build","uto","container-changed","error"],xp=15e3,Wv=4*1024*1024,Ap="127.0.0.1",ep=8765,tl="no-store",nl="E_NOT_FOUND",Xv="E_BAD_REQUEST",rp=2e3,tp=20;function Er(x,A){return JSON.stringify({err:`${x} ${A}`})}function xe(x,A,e,r={}){x.writeHead(A,{"content-type":"application/json","cache-control":tl,...r}),x.end(e)}function np(x){let A=x.replace(/^\[|\]$/g,"").toLowerCase();return A==="localhost"||A==="::1"||A===""||/^127\./.test(A)}function ip(x,A){if(!(np(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 sp(x){try{let{hostname:A}=new URL(x);return A==="localhost"||A==="127.0.0.1"||A==="[::1]"||A==="::1"}catch{return!1}}function ap(x,A){let e=x.headers.origin;typeof e=="string"&&sp(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 op(x,A,e){if(!A)return!0;let r=x.headers.authorization,t=typeof r=="string"?r.replace(/^Bearer\s+/i,"").trim():(e??"").trim();if(t==="")return!1;let i=process.env.MYDATANET_TOKEN;return t===A||i!==void 0&&i!==""&&t===i}var Oe=class extends Error{constructor(e,r,t){super(t);this.status=e;this.code=r}status;code};async function il(x){let A=[],e=0;for await(let r of x){let t=r;if(e+=t.length,e>Wv)throw x.pause(),new Oe(413,"E_TOO_LARGE",`request body exceeds ${Wv} bytes`);A.push(t)}return Buffer.concat(A).toString("utf8")}function sl(x){return x!=="GET"&&x!=="HEAD"}function Yv(x){if(!x.trim())return{};let A;try{A=JSON.parse(x)}catch{throw new Oe(400,Xv,"malformed JSON body")}if(typeof A!="object"||A===null)throw new Oe(400,Xv,"JSON body must be an object");return A}function Qv(x,A){let e=x[A];return typeof e=="string"&&e.length>0?e:void 0}function Fp(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 Zv(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}var va=class{clients=new Set;heartbeat;constructor(){this.heartbeat=setInterval(()=>this.writeAll(`: ping
|
|
2326
2326
|
|
|
2327
|
-
`),
|
|
2327
|
+
`),xp),this.heartbeat.unref?.()}broadcast(A,e){let r=`event: ${A}
|
|
2328
2328
|
data: ${JSON.stringify(e)}
|
|
2329
2329
|
|
|
2330
|
-
`;for(let t of this.clients)(!t.types||t.types.has(A))&&this.write(t,r)}writeAll(A){for(let e of this.clients)this.write(e,A)}write(A,e){if(A.res.writableEnded||A.res.destroyed){this.clients.delete(A);return}try{if(A.res.write(e)){A.stalled=0;return}}catch{this.clients.delete(A);return}A.stalled++,A.stalled>=
|
|
2330
|
+
`;for(let t of this.clients)(!t.types||t.types.has(A))&&this.write(t,r)}writeAll(A){for(let e of this.clients)this.write(e,A)}write(A,e){if(A.res.writableEnded||A.res.destroyed){this.clients.delete(A);return}try{if(A.res.write(e)){A.stalled=0;return}}catch{this.clients.delete(A);return}A.stalled++,A.stalled>=tp&&(this.clients.delete(A),A.res.destroy())}subscribe(A,e,r){let t=new URLSearchParams(r).get("types"),i=t?new Set(t.split(",").map(F=>F.trim()).filter(F=>rl.includes(F))):null;e.writeHead(200,{"content-type":"text/event-stream","cache-control":tl,connection:"keep-alive"}),e.write(`: connected
|
|
2331
2331
|
|
|
2332
|
-
`);let n={res:e,types:i,stalled:0};this.clients.add(n),A.on("close",()=>this.clients.delete(n)),e.on("close",()=>this.clients.delete(n)),e.on("error",()=>this.clients.delete(n))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function o6(x,A,e,r){let t=A.method??"GET",i={path:r,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([F,v])=>[F,Array.isArray(v)?v.join(","):v??""])),body:tl(t)?await rl(A):null},n=await x.handleApi(i);ZA(e,n.status,n.body,n.headers)}async function F6(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(a6(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(Xv(e,"since",0),Xv(e,"limit",500))};case"POST /dev/at":return v6(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 B6(x);case"GET /dev/configs":return t.configs();default:return}}async function v6(x,A){if(!A)throw new Re(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function l6(x,A,e,r){let[t,i=""]=r.split("?"),n=A.method??"GET",F=tl(n)?await rl(A):"";try{if(n==="PUT"&&t==="/dev/configs"){let E=await x.session.applyConfigs(Vv(F)),u=Object.values(E).every(D=>D.ok);ZA(e,u?200:400,JSON.stringify({results:E}));return}let v=await F6(x,`${n} ${t}`,new URLSearchParams(i),Vv(F));if(v===void 0){ZA(e,404,fr(el,`no route for ${n} ${t}`));return}ZA(e,200,JSON.stringify(v))}catch(v){if(v instanceof Re){ZA(e,v.status,fr(v.code,v.message));return}ZA(e,500,fr("E_DEV",v instanceof Error?v.message:String(v)))}}async function c6(x,A,e,r){if(i6(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",i=t.split("?")[1]??"",n=t==="/events"||t.startsWith("/events?"),F=n?new URLSearchParams(i).get("token")??void 0:void 0;if(!s6(e,x.token,F)){ZA(r,401,fr("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await o6(x.session,e,r,t):n?A.subscribe(e,r,i):t.startsWith("/dev/")?await l6(x,e,r,t):ZA(r,404,fr(el,`no route for ${t}`))}catch(v){if(v instanceof Re&&!r.headersSent){ZA(r,v.status,fr(v.code,v.message),{connection:"close"});return}throw v}}async function va(x){let{session:A,logger:e}=x,r=x.host??ZD;t6(x,r);let t=new Fa;for(let F of xl)A.on(F,v=>t.broadcast(F,v));let i=Yv.default.createServer((F,v)=>{c6(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,fr("E_INTERNAL",u))})});try{await new Promise((F,v)=>{i.once("error",v),i.listen(x.port??x6,r,()=>{i.off("error",v),F()})})}catch(F){throw t.close(),F}i.on("error",F=>e.error(`Dev server socket error: ${F.message}`));let n=i.address().port;return{url:`http://${r}:${n}`,port:n,async close(){t.close(),i.closeIdleConnections(),i.closeAllConnections(),await Promise.race([new Promise(F=>i.close(()=>F())),f6(A6)])}}}function f6(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var E6={"/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 B6(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=Qv.Utils.joinPath(x.cwd,e0.filePaths.dist.ddeApi);if(await x.fs.stat(e))try{let r=new TextDecoder().decode(await x.fs.readFile(e)),t=Zv.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 ${e0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...E6},A}var Ot=require("node:fs"),nl=require("node:path"),il=require("vscode-uri");var C6=300,d6=new Set([e0.fileNames.projectSettings,e0.filePaths.appIni]);function la(x){return x instanceof Error?x.message:String(x)}function u6(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function D6(x){let A=[],e=r=>{A.push(r);for(let t of(0,Ot.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,nl.join)(r,t.name))};try{e(x)}catch{}return A}function sl(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??C6,i=[],n,F=!1,v=!1,E=async()=>{if(F){v=!0;return}F=!0;try{let w=await e.build();if(w.ok!==!0){r.error(`Rebuild failed: ${w.message??"see diagnostics"}`);return}if(x.flash!==!1){let j=await e.flash();if(!j.success){r.error(j.message);return}}await e.sync()}catch(w){r.error(`Watch cycle failed: ${w instanceof Error?w.message:String(w)}`)}finally{F=!1,v&&(v=!1,u())}};function u(){n&&clearTimeout(n),n=setTimeout(()=>{E()},t),n.unref?.()}let D=w=>(j,S)=>{let T=typeof S=="string"?S.replace(/\\/g,"/"):null;(!w||T!==null&&w(T))&&u()},m=(w,j,S)=>{let T=il.Utils.joinPath(A,w);try{i.push((0,Ot.watch)(T.fsPath,{recursive:j},D(S)))}catch(q){if(u6(q))return;if(j){r.warn(`Recursive file watching is not available on this platform (${la(q)}) \u2014 watching every directory under ${w} individually.`);for(let O of D6(T.fsPath))try{i.push((0,Ot.watch)(O,{recursive:!1},D(S)))}catch(R){r.warn(`Could not watch ${O}: ${la(R)}`)}return}r.warn(`Could not watch ${w}: ${la(q)}`)}};return m(e0.filePaths.dlo.path,!0),m(e0.filePaths.dde.path,!0),m(".",!1,w=>d6.has(w)),{close(){n&&clearTimeout(n);for(let w of i)w.close()}}}var p6=new Set(["uto-meta","state","console","command","recorder-drop"]),b6=".ndjson",m6=[".db",".sqlite",".sqlite3"];function ol(x,A,e,r){if(!p6.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 h6(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 j6(x){let A=JSON.parse(x[0]),e=new Map;for(let r of x.slice(1)){let t=JSON.parse(r),i=new Uint8Array(Buffer.from(t.data,"base64")),n=ol(t.type,i,t.owner,t.ts),F=e.get(t.sessionId);F?F.push(n):e.set(t.sessionId,[n])}return{manifest:A,recordsBySession:e}}function g6(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 y6(x,A){return(x.sessionIds.length>0?x.sessionIds:[...A.keys()]).map(r=>{let t=x.sessions.find(F=>F.sessionId===r),i=A.get(r)??[],n=g6(i);return{id:r,serial:t?.serial??null,deviceId:t?.deviceId??null,startedTs:n?.min??x.exportedTs,endedTs:n?.max??null,appVersion:x.appVersion,platform:x.platform,recordCount:i.length}})}async function k6(x,A){let e=new TextDecoder().decode(await A.readFile(x)),{manifest:r,recordsBySession:t}=j6(h6(e));return{sessions:y6(r,t),recordsFor:n=>(t.get(n)??[]).slice().sort((F,v)=>F.ts-v.ts),warnings:[]}}async function w6(){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 al(x,A){let e=x.prepare(A),r=[];try{for(;e.step();)r.push(e.getAsObject())}finally{e.free()}return r}function Gt(x){return x==null?null:String(x)}function ca(x){return typeof x=="number"?x:Number(x)}function _6(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 S6(x,A){let e=await w6(),r=await A.readFile(x),t=new e.Database(r);try{let i=[],n=new Map;for(let v of al(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let E=String(v.session_id),u=String(v.type),D=ca(v.ts),m=_6(v.data,`${u}@${D} (session ${E})`,i),w=ol(u,m,Gt(v.owner),D),j=n.get(E);j?j.push(w):n.set(E,[w])}return{sessions:al(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:Gt(v.serial),deviceId:Gt(v.device_id),startedTs:ca(v.started_ts),endedTs:v.ended_ts===null||v.ended_ts===void 0?null:ca(v.ended_ts),appVersion:Gt(v.app_version),platform:Gt(v.platform),recordCount:(n.get(E)??[]).length}}),recordsFor:v=>n.get(v)??[],warnings:i}}finally{t.close()}}async function fa(x,A){let e=x.path.toLowerCase();if(e.endsWith(b6))return k6(x,A);if(m6.some(r=>e.endsWith(r)))return S6(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function Ea(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 cl=require("node:events"),fl=U0(Me());var Fl="at-tx",Ba="at-rx",P6=/^(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 vl(x){let A=P6.exec($6(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function T6(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 q6(x,A){if(T6(x,A))return!0;let e=vl(x),r=vl(A);return e!==null&&r!==null&&e===r}function N6(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function I6(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function Ca(x){return`hex[${N6(x)}] ascii["${I6(x)}"]`}function M6(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function da(x){return x===void 0?1:x==="max"||x<=0?0:x}var ri=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===Fl||r.type===Ba).slice().sort((r,t)=>r.ts-t.ts).map(r=>({record:r,consumed:!1})),this.speed=da(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!==Ba)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!==Fl;)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: ${Ca(e)}`);return}let t=r.record.bytes??new Uint8Array(0);if(!q6(t,e)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${Ca(t)} actual: ${Ca(e)}`);return}for(r.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===Ba;)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=M6(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(r)}};var ti="state",Da="console",El="command",Bl="uto-meta",ua="at",L6=new Set([ti,Da,El,Bl]),R6="not available in replay mode",ll="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function O6(x){return x===ti?"state":x===Da?"console":x===Bl?"uto":ua}function G6(x,A){return x===Da&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===El&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var Ut=class extends cl.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 ri(e,{speed:A.speed,baseTs:r,onWarning:t=>this.logStream.push(ua,t)}),this.atHandler=new fl.AtCommandHandler(this.transport,lr(A.logger)),this.logStream.attachAtHandler(this.atHandler),this.scheduleAnnotations(e,r)}get serial(){return this.meta.serial??this.meta.id}scheduleAnnotations(A,e){let r=da(this.speed);for(let t of A){if(!L6.has(t.type))continue;let i=r>0?Math.max(0,(t.ts-e)/r):0,n=setTimeout(()=>this.emitAnnotation(t),i);n.unref?.(),this.timers.push(n)}}emitAnnotation(A){A.type===ti&&(this.lastState=A.json??null,this.emit(ti,this.lastState)),this.logStream.push(O6(A.type),G6(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:ll})}}status(){return{serial:this.serial,connected:!0,apmId:"local",firmwareVersion:null,model:{containers:[]},lastSync:null,buildState:{running:!1,ok:null,at:null},poll:{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0},replay:{mode:"replay",file:this.file,session:this.meta.id,serial:this.meta.serial,deviceId:this.meta.deviceId,appVersion:this.meta.appVersion,platform:this.meta.platform,recordCount:this.meta.recordCount,startedTs:this.meta.startedTs,endedTs:this.meta.endedTs,speed:this.speed}}}unavailable(){throw new Q0(R6,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(ua,`> ${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:ll};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 U6="details";function H6(){return[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles]}async function ba(x,A,e){let r=e.logger??new WA.Logger;if(e.replay){if(e.serial)throw new Error("--replay cannot be combined with --serial");return K6(x,A,e,r)}if(!e.serial)throw new Error("--serial is required unless --replay is given");let t=new Le({cwd:x,fs:A,serial:e.serial,transportFactory:e.transportFactory,createDevice:e.createDevice,pollIntervalMs:e.pollIntervalMs,flash:e.flash!==!1,build:e.build!==!1,part:e.part??H6(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",E=>r.warn(E instanceof Error?E.message:String(E)));try{await t.start()}catch(E){throw await t.stop(),E}let i,n,F;try{i=await va({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=sl({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=ul(x,t,i.url,e.pov,r))}catch(E){throw await i?.close(),await t.stop(),E}let v=i;return{url:v.url,port:v.port,session:t,apmId:t.status().apmId,async close(){n?.close(),Dl(F,r),await v.close(),await t.stop()}}}function J6(x,A){return dl.isAbsolute(A)?Zr.URI.file(A):Zr.Utils.joinPath(x,A)}async function K6(x,A,e,r){let t=J6(x,e.replay),i=await fa(t,A);for(let D of i.warnings)r.warn(D);let n=Ea(i,e.session),F=new Ut({file:t.fsPath,recording:i,session:n,speed:e.speed,logger:r,logFile:e.logFile});F.on("error",D=>r.warn(D instanceof Error?D.message:String(D))),F.start();let v,E;try{v=await va({session:F,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.pov&&(E=ul(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(){Dl(E,r),await u.close(),await F.stop()}}}function ul(x,A,e,r,t){let i=typeof r=="string"&&r.length>0?r:U6,n=Zr.Utils.joinPath(x,"pov",i);if(!(0,Cl.existsSync)(Zr.Utils.joinPath(n,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${n.fsPath}`);return}let F=(0,pa.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 Dl(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,pa.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 pl=require("uuid"),z6="b4baec47-0ba4-4e37-b237-8f9cde42b8dd";var Ht=class{domain;auth;logger;userInfo=null;constructor(A,e,r){if(typeof A=="object"){let{serverUrl:t,apiToken:i,authHeader:n,logger:F}=A;this.domain=this.normalizeServerUrl(t),this.auth=n||(i?`Bearer ${i}`:""),this.logger=F}else this.domain=this.normalizeServerUrl(A),typeof e=="string"?(this.auth=`Bearer ${e}`,this.logger=r):(this.auth="",this.logger=e)}setAuth(A){this.auth=A}getDomain(){return this.domain}normalizeServerUrl(A){return!A.startsWith("http://")&&!A.startsWith("https://")?`https://${A}`:A}trimDomain(A){return A.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(A,e,r){let t=`${this.domain}${e}`,i={Authorization:this.auth},n={method:A,headers:i};r&&(r instanceof FormData?n.body=r:(i["Content-Type"]="application/json",n.body=JSON.stringify(r)));let F=await fetch(t,n);if(!F.ok){let v=await F.text().catch(()=>"Unknown error");throw new Error(`HTTP ${F.status}: ${v}`)}return F.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:A,customers:e}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:A.name,email:A.email,group:A.group,customers:e},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(A){throw new Error(`Authentication failed: ${A instanceof Error?A.message:String(A)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(A,e){this.logger?.info(`Uploading development tag ${A}...`);let{applid:r}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${A}`,e);return this.logger?.info(`Development tag uploaded, application ID: ${r}`),r}async getCustomer(A){let{_uid:e,name:r}=await this.fetchJSON("GET",`/api/1/customers/${A}`);return{_uid:e,name:r}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}/site`)}catch{return null}}async getDevice(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}`)}catch{return null}}async getSite(A,e){try{return await this.fetchJSON("GET",`/api/1/customers/${A}/sites/${e}`)}catch{return null}}async createDevelopmentSite(A,e,r){if(this.logger?.info(`Creating development site "${e.name}"...`),e.serialNumber){let i=await this.getSite(A,e.name.toLowerCase());if(i)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${i._uid}/cn-attach-device`,{device_id:e.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${i._uid}`),i._uid}catch(n){if(n.message&&!n.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${n.message}`);else return i._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${A}/sites`,{name:e.name,create:!0,force:!0,note:"This is a Studio development site",applid:e.applicationId,device_id:e.serialNumber,reg_code:r,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(A,e){try{await this.fetchJSON("PUT",`/api/1/sites/${A}`,{name:e})}catch{}}};function bl(x){return(0,pl.v5)(x,z6)}async function ma(x,A,e,r,t,i,n){let F=await K.read(x,A),v=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),E=F.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),u=await K.isApmPartEnabled(x,A,u0.Part.dlo,F),D=u&&r,m=D?r.toUpperCase():`${E}_${v}`,w=D?r:m,j=n||m;return j.length>50&&(e.warn(`Site name "${j}" is too long. Truncating to 50 characters.`),j=j.substring(0,50)),{apmId:bl(w),applicationId:null,name:j,version:1,serialNumber:u?r:void 0,siteUid:null,customerUid:i}}async function ml(x,A,e,r,t,i,n=!1){if(i.length>0)for(let F of i){let[v,E]=F.split("@");await ex.installDependency(x,A,e,r,t,v,E||null,n)}else await ex.installDependencies(x,A,e,r,t);await ex.installNpmInApmParts(x,A,e)}async function hl(x,A,e,r,t=null,i=!0,n){return await K.validateBasicManifest(x,A,null),mx.buildAll(x,A,e,r,t,i,n)}async function V6(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await K.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function jl(x,A,e,r,t,i,n,F){e.info("Publishing package...");let v=await V6(i);if(F)await mx.publishArchive(x,A,e,t,r,F,n,v);else return await mx.validatePublishSettings(x,A,t,r),mx.release(x,A,e,r,t,n,v)}async function gl(x,A,e,r,t,i){return mx.pack(x,A,e,r,t,i)}var Ce=H0.DDEContainerName,yl=H0.allowedRelationTypes,W6=H0.regexRelation,X6=H0.ContainerType,Y6=H0.checkForReservedFieldName,ii=H0.ContainerName,kl=H0.CONTAINER_DEFS,Q6=H0.SERVER_CONTAINER,Z6=H0.HISTDATA_CONTAINER,x7=H0.CONFIG_CONTAINER,xt=H0.TransferDirection,wl=H0.fieldTypeDefinitions,AA=h0.yamlRangeToLineInformation,si;(A=>{class x{constructor(r,t,i){this.manifest=r;this.libraryFiles=t;this.ddeHistory=i}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:i,diagnostics:n,parsedYaml:F}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...n),this.libraryDDE.push(i),this.libraryYaml[t.libraryName]=F}),r}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(r){let t=this.previousVersion,i=r.startsWith("timeseries_")?r.substring(11):r;return Object.values(t.containers).find(n=>n.title===i)||null}parseMainDDE(r,t){let{parsedDDE:i,diagnostics:n}=this.parseYamlFile(r,t);return n.find(E=>E.level==="error")?{ddeJSON:null,diagnostics:n}:{ddeJSON:this.mergeAndFormat(i),diagnostics:n}}parseYamlFile(r,t,i){this.fileDiagnostics.length=0;let n=new Oe.LineCounter,F=(0,Oe.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null};let v=F.contents||new Oe.YAMLMap;return this.validateContainerDefinition(v.items).forEach(u=>{this.validateAllowedContainer(r,u,n,i),this.validateContainerFields(F,r,u,n)}),{parsedDDE:this.yamlDocToDdeJson(F.toJS({mapAsMap:!0}),r,n,F,i),diagnostics:[...this.fileDiagnostics],parsedYaml:F}}yamlDocToDdeJson(r,t,i,n,F){let v={containers:{},setPointList:{}},E=new Map,u=[...Object.values(Ce)];if(r.get("cloudProject")){let m=Object.values(this.previousVersion.containers).map(S=>S.title),w=[...r.keys()].filter(S=>!this.reservedTopLevelKeys().has(S)),j=[...new Set([...u,...m,...w])];u.length=0,u.push(...j)}for(let m of u)r.has(m)&&E.set(m,r.get(m));let D=r.get("timeseries");if(D)for(let[m,w]of D)E.set(m,w);for(let[m,w]of E){let{realContainer:j,transferDirection:S,legacyTitle:T}=this.getRealContainerInformation(m);if(!j){let t0=this.findContainerKeyRange(n,m);this.fileDiagnostics.push({file:t,level:"error",message:`Container "${m}" could not be placed - no free container slot available.`,...t0?AA(i,t0):{line:0,startCharacter:0,endCharacter:0}});continue}let q=kl[j],O=m.includes("timeseries_")?m.replace("timeseries_",""):m,R={name:j,title:O,previousTitle:T,containerType:q.ctype,volatile:m===Ce.volatile,transferDirection:S,fieldCount:w.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};F&&R.libraries.push(F);for(let[t0,M]of w){let k=[],L=M.get("type"),X=wl[L];if(!(!X&&L!=="array")){if(L==="array"){let W=[],H=M.get("length"),J=M.get("fields"),a0={name:t0,length:H,library:F||null,fields:[]};R.arrays[t0]=a0;for(let n0=0;n0<H;n0++){let x0={name:t0,index:n0};for(let[o0,G]of J){let s0=wl[G.get("type")];if(!s0)continue;a0.fields?.find(_0=>_0.name===o0)||a0.fields.push({name:o0,type:G.get("type"),byteSize:s0.len||G.get("bytes")||G.get("length")});let l0=`${t0}[${n0}].${o0}`,{fields:B0,shadowInfo:C0}=this.createDDEJsonFields(l0,F,s0,G);B0.forEach(_0=>{_0.arrayRef=x0}),C0&&(R.shadows[C0.name]=C0),W.push(...B0)}}k.push(...W)}else{let{arrayInfo:W,fields:H,shadowInfo:J}=this.createDDEJsonFields(t0,F,X,M);W&&(R.arrays[W.name]=W),J&&(R.shadows[J.name]=J),k.push(...H)}k.forEach(W=>{W.index=++R.fieldIndex,R.fields.push(W),R.size+=W.byteSize})}}v.containers[j]=R}return v}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants","timeseries",...Object.values(Ce)])}getRealContainerInformation(r){let t,i,n;if(this.previousVersion){let F=r.startsWith("timeseries_")?r.substring(11):r,{name:v,direction:E,previousTitle:u}=this.findPreviousUsedContainer(F);t=v,i=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),i||(i=[Ce.setting,Ce.command].includes(r)?xt.down:xt.up),i===xt.up&&t&&kl[t].xmits.includes(xt.upPlus)&&(i=xt.upPlus),t&&[ii.configA,ii.configB].includes(t)&&(i=xt.backendOnly),{realContainer:t,transferDirection:i,legacyTitle:n}}findContainerKeyRange(r,t){let i=r.contents;return i?.items?t.startsWith("timeseries_")?i.items.find(u=>u.key.value==="timeseries")?.value?.items.find(u=>u.key.value===t)?.key.range:i.items.find(F=>F.key.value===t)?.key.range:void 0}findNextFreeContainer(r){if(r===ii.aloha)return ii.aloha;let t=x7;r.startsWith("timeseries_")?t=Z6:[Ce.relations,Ce.storage].includes(r)&&(t=Q6);let i=this.previousVersion?.containers;return i&&(t=t.filter(n=>!Object.hasOwn(i,n))),t.find(n=>!Object.hasOwn(this.usedContainerNames,n))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,i=Object.values(t).find(n=>n.title===r);return{name:i?.name,direction:i?.transferDirection,previousTitle:i?.previousTitle}}createDDEJsonFields(r,t,i,n){let F=n.get("array"),v=[],E,u;if(F){E={name:r,library:t||null,length:F};for(let D=0;D<F;D++){let m=`${r.toLowerCase()}[${D}]`;v.push(this.buildDDEJsonField(m,n,{name:r,index:D},i,t,null))}}else{let D=this.buildDDEJsonField(r,n,null,i,t,null);v.push(D);let m=n.get("shadowFields");if(m){u={name:D.name,byteSize:D.byteSize,byteOffset:D.byteOffset};for(let[w,j]of m){let S=w;r.includes(".")&&(S=r.split(".")[0]+`.${w}`),v.push(this.buildDDEJsonField(S,j,null,i,t,D.name))}}}return{arrayInfo:E,shadowInfo:u,fields:v}}buildDDEJsonField(r,t,i,n,F,v){return{id:r.toLowerCase(),name:r,index:0,library:F||null,byteOffset:0,byteSize:n.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:i,shadowRef:v,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(r,t){return(0,Oe.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(i=>{let F=i.key.value;F==="timeseries"?i.value.items.forEach(v=>{v.key.value=`timeseries_${v.key}`,t.push(v)}):["dde","cloudProject","constants"].includes(F)||t.push(i)}),t}parseUserLevel(r){if(r==="read-only")return 99;if(r?.startsWith("UL"))return Number(r.substring(2))}parseChannelMode(r){if(r)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[r]??r}parseTriggerUndershoot(r){if(r)return{"greater-or-equal":0,"less-or-equal":1}[r]??r}validateAllowedContainer(r,t,i,n){if(!t.value)return;let v=t.key.value;if(n&&(v.startsWith("aloha")||v.startsWith("timeseries"))){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within a library`,...AA(i,t.key.range)})}if(K.isAnalytics(this.manifest)&&![Ce.relations,Ce.storage].includes(v)){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...AA(i,t.key.range)})}}validateContainerFields(r,t,i,n){let F=i.value;if(!F)return;let v=i.key.value;Object.hasOwn(this.fieldNamesPerContainer,v)||(this.fieldNamesPerContainer[v]=[]);let E=this.getContainerOfPreviousVersion(v);F.items.forEach(u=>{let m=u.key.value;this.checkForContainerRelation(u,r,t,n),this.validateFieldName(u,v,t,n),this.checkFieldNameLength(u,v,t,n);let w=E?.fields.find(R=>R.id===m.toLowerCase()),j=u.value,S=j.get("type",!0),T=this.resolvePossibleAlias(r,S),q=j.get("bytes",!0),O=this.resolvePossibleAlias(r,q);w&&(S&&T&&w.type!==T&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${w.type}" to "${T}".
|
|
2333
|
-
Changing the type of an existing field can result in data loss or unexpected behaviour.`,...
|
|
2334
|
-
Changing the size of an existing field can result in data loss or unexpected behaviour.`,...
|
|
2335
|
-
`)}function
|
|
2336
|
-
`);if(u.length===1)x(`/** ${u[0]} */`);else{x("/**");for(let D of u)x(` * ${D}`);x(" */")}}let E=Object.hasOwn(t,F);e(n,`${F}`,E)}}function
|
|
2332
|
+
`);let n={res:e,types:i,stalled:0};this.clients.add(n),A.on("close",()=>this.clients.delete(n)),e.on("close",()=>this.clients.delete(n)),e.on("error",()=>this.clients.delete(n))}close(){clearInterval(this.heartbeat);for(let A of this.clients)!A.res.writableEnded&&!A.res.destroyed&&A.res.end();this.clients.clear()}};async function vp(x,A,e,r){let t=A.method??"GET",i={path:r,method:t,headers:Object.fromEntries(Object.entries(A.headers).map(([F,v])=>[F,Array.isArray(v)?v.join(","):v??""])),body:sl(t)?await il(A):null},n=await x.handleApi(i);xe(e,n.status,n.body,n.headers)}async function lp(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(Qv(r,"file"));case"POST /dev/sync":return t.sync(Fp(r,"tags"));case"GET /dev/logs":return{lastSeq:t.logStream.lastSeq,records:t.logStream.since(Zv(e,"since",0),Zv(e,"limit",500))};case"POST /dev/at":return cp(t,Qv(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 dp(x);case"GET /dev/configs":return t.configs();default:return}}async function cp(x,A){if(!A)throw new Oe(400,"E_BAD_REQUEST","attribute 'cmd' is not valid");return{cmd:A,response:await x.at(A)}}async function fp(x,A,e,r){let[t,i=""]=r.split("?"),n=A.method??"GET",F=sl(n)?await il(A):"";try{if(n==="PUT"&&t==="/dev/configs"){let E=await x.session.applyConfigs(Yv(F)),u=Object.values(E).every(D=>D.ok);xe(e,u?200:400,JSON.stringify({results:E}));return}let v=await lp(x,`${n} ${t}`,new URLSearchParams(i),Yv(F));if(v===void 0){xe(e,404,Er(nl,`no route for ${n} ${t}`));return}xe(e,200,JSON.stringify(v))}catch(v){if(v instanceof Oe){xe(e,v.status,Er(v.code,v.message));return}xe(e,500,Er("E_DEV",v instanceof Error?v.message:String(v)))}}async function Ep(x,A,e,r){if(ap(e,r),e.method==="OPTIONS"){r.writeHead(204),r.end();return}let t=e.url??"/",i=t.split("?")[1]??"",n=t==="/events"||t.startsWith("/events?"),F=n?new URLSearchParams(i).get("token")??void 0:void 0;if(!op(e,x.token,F)){xe(r,401,Er("E_UNAUTHORIZED","invalid or missing bearer token"));return}try{t.startsWith("/api/")?await vp(x.session,e,r,t):n?A.subscribe(e,r,i):t.startsWith("/dev/")?await fp(x,e,r,t):xe(r,404,Er(nl,`no route for ${t}`))}catch(v){if(v instanceof Oe&&!r.headersSent){xe(r,v.status,Er(v.code,v.message),{connection:"close"});return}throw v}}async function la(x){let{session:A,logger:e}=x,r=x.host??Ap;ip(x,r);let t=new va;for(let F of rl)A.on(F,v=>t.broadcast(F,v));let i=xl.default.createServer((F,v)=>{Ep(x,t,F,v).catch(E=>{let u=E instanceof Error?E.message:String(E);e.error(`Dev server error: ${u}`),v.headersSent||xe(v,500,Er("E_INTERNAL",u))})});try{await new Promise((F,v)=>{i.once("error",v),i.listen(x.port??ep,r,()=>{i.off("error",v),F()})})}catch(F){throw t.close(),F}i.on("error",F=>e.error(`Dev server socket error: ${F.message}`));let n=i.address().port;return{url:`http://${r}:${n}`,port:n,async close(){t.close(),i.closeIdleConnections(),i.closeAllConnections(),await Promise.race([new Promise(F=>i.close(()=>F())),Bp(rp)])}}}function Bp(x){return new Promise(A=>{setTimeout(A,x).unref?.()})}var Cp={"/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 dp(x){let A={openapi:"3.0.0",info:{title:"studio dev",version:"1"},paths:{}},e=Al.Utils.joinPath(x.cwd,e0.filePaths.dist.ddeApi);if(await x.fs.stat(e))try{let r=new TextDecoder().decode(await x.fs.readFile(e)),t=el.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 ${e0.filePaths.dist.ddeApi}: ${t}`)}return A.paths={...A.paths,...Cp},A}var Ot=require("node:fs"),al=require("node:path"),ol=require("vscode-uri");var up=300,Dp=new Set([e0.fileNames.projectSettings,e0.filePaths.appIni]);function ca(x){return x instanceof Error?x.message:String(x)}function pp(x){let A=x?.code;return A==="ENOENT"||A==="ENOTDIR"}function bp(x){let A=[],e=r=>{A.push(r);for(let t of(0,Ot.readdirSync)(r,{withFileTypes:!0}))t.isDirectory()&&e((0,al.join)(r,t.name))};try{e(x)}catch{}return A}function Fl(x){let{cwd:A,session:e,logger:r}=x,t=x.debounceMs??up,i=[],n,F=!1,v=!1,E=async()=>{if(F){v=!0;return}F=!0;try{let w=await e.build();if(w.ok!==!0){r.error(`Rebuild failed: ${w.message??"see diagnostics"}`);return}if(x.flash!==!1){let j=await e.flash();if(!j.success){r.error(j.message);return}}await e.sync()}catch(w){r.error(`Watch cycle failed: ${w instanceof Error?w.message:String(w)}`)}finally{F=!1,v&&(v=!1,u())}};function u(){n&&clearTimeout(n),n=setTimeout(()=>{E()},t),n.unref?.()}let D=w=>(j,S)=>{let $=typeof S=="string"?S.replace(/\\/g,"/"):null;(!w||$!==null&&w($))&&u()},m=(w,j,S)=>{let $=ol.Utils.joinPath(A,w);try{i.push((0,Ot.watch)($.fsPath,{recursive:j},D(S)))}catch(q){if(pp(q))return;if(j){r.warn(`Recursive file watching is not available on this platform (${ca(q)}) \u2014 watching every directory under ${w} individually.`);for(let R of bp($.fsPath))try{i.push((0,Ot.watch)(R,{recursive:!1},D(S)))}catch(O){r.warn(`Could not watch ${R}: ${ca(O)}`)}return}r.warn(`Could not watch ${w}: ${ca(q)}`)}};return m(e0.filePaths.dlo.path,!0),m(e0.filePaths.dde.path,!0),m(".",!1,w=>Dp.has(w)),{close(){n&&clearTimeout(n);for(let w of i)w.close()}}}var mp=new Set(["uto-meta","state","console","command","recorder-drop"]),hp=".ndjson",jp=[".db",".sqlite",".sqlite3"];function ll(x,A,e,r){if(!mp.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 gp(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 yp(x){let A=JSON.parse(x[0]),e=new Map;for(let r of x.slice(1)){let t=JSON.parse(r),i=new Uint8Array(Buffer.from(t.data,"base64")),n=ll(t.type,i,t.owner,t.ts),F=e.get(t.sessionId);F?F.push(n):e.set(t.sessionId,[n])}return{manifest:A,recordsBySession:e}}function kp(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 wp(x,A){return(x.sessionIds.length>0?x.sessionIds:[...A.keys()]).map(r=>{let t=x.sessions.find(F=>F.sessionId===r),i=A.get(r)??[],n=kp(i);return{id:r,serial:t?.serial??null,deviceId:t?.deviceId??null,startedTs:n?.min??x.exportedTs,endedTs:n?.max??null,appVersion:x.appVersion,platform:x.platform,recordCount:i.length}})}async function _p(x,A){let e=new TextDecoder().decode(await A.readFile(x)),{manifest:r,recordsBySession:t}=yp(gp(e));return{sessions:wp(r,t),recordsFor:n=>(t.get(n)??[]).slice().sort((F,v)=>F.ts-v.ts),warnings:[]}}async function Sp(){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 vl(x,A){let e=x.prepare(A),r=[];try{for(;e.step();)r.push(e.getAsObject())}finally{e.free()}return r}function Gt(x){return x==null?null:String(x)}function fa(x){return typeof x=="number"?x:Number(x)}function Pp(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 Tp(x,A){let e=await Sp(),r=await A.readFile(x),t=new e.Database(r);try{let i=[],n=new Map;for(let v of vl(t,"SELECT ts, session_id, type, owner, data FROM records ORDER BY ts")){let E=String(v.session_id),u=String(v.type),D=fa(v.ts),m=Pp(v.data,`${u}@${D} (session ${E})`,i),w=ll(u,m,Gt(v.owner),D),j=n.get(E);j?j.push(w):n.set(E,[w])}return{sessions:vl(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:Gt(v.serial),deviceId:Gt(v.device_id),startedTs:fa(v.started_ts),endedTs:v.ended_ts===null||v.ended_ts===void 0?null:fa(v.ended_ts),appVersion:Gt(v.app_version),platform:Gt(v.platform),recordCount:(n.get(E)??[]).length}}),recordsFor:v=>n.get(v)??[],warnings:i}}finally{t.close()}}async function Ea(x,A){let e=x.path.toLowerCase();if(e.endsWith(hp))return _p(x,A);if(jp.some(r=>e.endsWith(r)))return Tp(x,A);throw new Error(`Unsupported flight recording format: ${x.fsPath} (expected .ndjson, .db or .sqlite)`)}function Ba(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 Bl=require("node:events"),Cl=U0(Le());var cl="at-tx",Ca="at-rx",$p=/^(AT\+COMPCERT=)([^,\r\n]+),([^,\r\n]+),<scrubbed cert, \d+ bytes>(\r\n|\r|\n)?$/;function qp(x){let A="";for(let e=0;e<x.length;e++)A+=String.fromCharCode(x[e]);return A}function fl(x){let A=$p.exec(qp(x));return A?`${A[1]}${A[2]},${A[3]}`:null}function Np(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 Ip(x,A){if(Np(x,A))return!0;let e=fl(x),r=fl(A);return e!==null&&r!==null&&e===r}function Mp(x){return Array.from(x,A=>A.toString(16).padStart(2,"0")).join(" ")}function Lp(x){return Array.from(x,A=>A>=32&&A<=126?String.fromCharCode(A):".").join("")}function da(x){return`hex[${Mp(x)}] ascii["${Lp(x)}"]`}function Rp(x){return x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength)}function ua(x){return x===void 0?1:x==="max"||x<=0?0:x}var ti=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===cl||r.type===Ca).slice().sort((r,t)=>r.ts-t.ts).map(r=>({record:r,consumed:!1})),this.speed=ua(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!==Ca)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!==cl;)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: ${da(e)}`);return}let t=r.record.bytes??new Uint8Array(0);if(!Ip(t,e)){this.onWarning(`replay: unmatched AT command \u2014 actual write does not match the next recorded at-tx. expected: ${da(t)} actual: ${da(e)}`);return}for(r.consumed=!0,this.matchCursor++;this.entries[this.matchCursor]?.record.type===Ca;)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=Rp(A.record.bytes??new Uint8Array(0));for(let t of this.callbacks)t(r)}};var ni="state",pa="console",dl="command",ul="uto-meta",Da="at",Op=new Set([ni,pa,dl,ul]),Gp="not available in replay mode",El="E_EOD replay: container data is not available in replay mode \u2014 only the AT/debug log timeline is replayed";function Up(x){return x===ni?"state":x===pa?"console":x===ul?"uto":Da}function Hp(x,A){return x===pa&&typeof A=="object"&&A!==null&&"message"in A?String(A.message??""):x===dl&&typeof A=="object"&&A!==null&&"command"in A?`> ${String(A.command??"")}`:JSON.stringify(A??null)}var Ut=class extends Bl.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 Zr({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 ti(e,{speed:A.speed,baseTs:r,onWarning:t=>this.logStream.push(Da,t)}),this.atHandler=new Cl.AtCommandHandler(this.transport,cr(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=ua(this.speed);for(let t of A){if(!Op.has(t.type))continue;let i=r>0?Math.max(0,(t.ts-e)/r):0,n=setTimeout(()=>this.emitAnnotation(t),i);n.unref?.(),this.timers.push(n)}}emitAnnotation(A){A.type===ni&&(this.lastState=A.json??null,this.emit(ni,this.lastState)),this.logStream.push(Up(A.type),Hp(A.type,A.json))}start(){this.started||(this.started=!0,this.transport.start())}async handleApi(A){return{status:404,headers:{},body:JSON.stringify({err:El})}}status(){return{serial:this.serial,connected:!0,apmId:"local",firmwareVersion:null,model:{containers:[]},lastSync:null,buildState:{running:!1,ok:null,at:null},poll:{intervalMs:0,lastTick:null,lastChange:null,errors:0,paused:!0},replay:{mode:"replay",file:this.file,session:this.meta.id,serial:this.meta.serial,deviceId:this.meta.deviceId,appVersion:this.meta.appVersion,platform:this.meta.platform,recordCount:this.meta.recordCount,startedTs:this.meta.startedTs,endedTs:this.meta.endedTs,speed:this.speed}}}unavailable(){throw new Q0(Gp,9)}async build(){this.unavailable()}async flash(){this.unavailable()}async sync(){this.unavailable()}async measure(){this.unavailable()}async at(A){return this.logStream.push(Da,`> ${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:El};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 Jp="details";function Kp(){return[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles]}async function ma(x,A,e){let r=e.logger??new XA.Logger;if(e.replay){if(e.serial)throw new Error("--replay cannot be combined with --serial");return Vp(x,A,e,r)}if(!e.serial)throw new Error("--serial is required unless --replay is given");let t=new Re({cwd:x,fs:A,serial:e.serial,transportFactory:e.transportFactory,createDevice:e.createDevice,pollIntervalMs:e.pollIntervalMs,flash:e.flash!==!1,build:e.build!==!1,part:e.part??Kp(),logger:r,env:e.env,apiToken:e.apiToken,waitMs:e.waitMs,logFile:e.logFile,persistMirror:e.persistMirror!==!1,debug:e.debug});t.on("error",E=>r.warn(E instanceof Error?E.message:String(E)));try{await t.start()}catch(E){throw await t.stop(),E}let i,n,F;try{i=await la({session:t,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.watch&&(n=Fl({cwd:x,session:t,logger:r,flash:e.flash!==!1})),e.pov&&(F=bl(x,t,i.url,e.pov,r))}catch(E){throw await i?.close(),await t.stop(),E}let v=i;return{url:v.url,port:v.port,session:t,apmId:t.status().apmId,async close(){n?.close(),ml(F,r),await v.close(),await t.stop()}}}function zp(x,A){return pl.isAbsolute(A)?xt.URI.file(A):xt.Utils.joinPath(x,A)}async function Vp(x,A,e,r){let t=zp(x,e.replay),i=await Ea(t,A);for(let D of i.warnings)r.warn(D);let n=Ba(i,e.session),F=new Ut({file:t.fsPath,recording:i,session:n,speed:e.speed,logger:r,logFile:e.logFile});F.on("error",D=>r.warn(D instanceof Error?D.message:String(D))),F.start();let v,E;try{v=await la({session:F,cwd:x,fs:A,logger:r,host:e.host,port:e.port,token:e.token,allowRemote:e.allowRemote}),e.pov&&(E=bl(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(){ml(E,r),await u.close(),await F.stop()}}}function bl(x,A,e,r,t){let i=typeof r=="string"&&r.length>0?r:Jp,n=xt.Utils.joinPath(x,"pov",i);if(!(0,Dl.existsSync)(xt.Utils.joinPath(n,"package.json").fsPath)){t.error(`POV dev server not started: no package.json in ${n.fsPath}`);return}let F=(0,ba.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 ml(x,A){if(!(!x||x.exitCode!==null||x.signalCode!==null||x.pid===void 0))try{if(process.platform==="win32"){(0,ba.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 hl=require("uuid"),Wp="b4baec47-0ba4-4e37-b237-8f9cde42b8dd";var Ht=class{domain;auth;logger;userInfo=null;constructor(A,e,r){if(typeof A=="object"){let{serverUrl:t,apiToken:i,authHeader:n,logger:F}=A;this.domain=this.normalizeServerUrl(t),this.auth=n||(i?`Bearer ${i}`:""),this.logger=F}else this.domain=this.normalizeServerUrl(A),typeof e=="string"?(this.auth=`Bearer ${e}`,this.logger=r):(this.auth="",this.logger=e)}setAuth(A){this.auth=A}getDomain(){return this.domain}normalizeServerUrl(A){return!A.startsWith("http://")&&!A.startsWith("https://")?`https://${A}`:A}trimDomain(A){return A.replace(/(^\w+:|^)\/\//,"")}async fetchJSON(A,e,r){let t=`${this.domain}${e}`,i={Authorization:this.auth},n={method:A,headers:i};r&&(r instanceof FormData?n.body=r:(i["Content-Type"]="application/json",n.body=JSON.stringify(r)));let F=await fetch(t,n);if(!F.ok){let v=await F.text().catch(()=>"Unknown error");throw new Error(`HTTP ${F.status}: ${v}`)}return F.json()}async authenticate(){this.logger?.info(`Authenticating with ${this.trimDomain(this.domain)}...`);try{let{user:A,customers:e}=await this.fetchJSON("GET","/api/1/me");return this.userInfo={name:A.name,email:A.email,group:A.group,customers:e},this.logger?.info(`Authenticated as ${this.userInfo.name}`),this.userInfo}catch(A){throw new Error(`Authentication failed: ${A instanceof Error?A.message:String(A)}`)}}getUserInfo(){return this.userInfo}async uploadDevTag(A,e){this.logger?.info(`Uploading development tag ${A}...`);let{applid:r}=await this.fetchJSON("POST",`/api/1/app-center/__dev/${A}`,e);return this.logger?.info(`Development tag uploaded, application ID: ${r}`),r}async getCustomer(A){let{_uid:e,name:r}=await this.fetchJSON("GET",`/api/1/customers/${A}`);return{_uid:e,name:r}}async getCustomers(){return this.fetchJSON("GET","/api/1/customers")}async getDeviceSite(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}/site`)}catch{return null}}async getDevice(A){try{return await this.fetchJSON("GET",`/api/1/devices/${A}`)}catch{return null}}async getSite(A,e){try{return await this.fetchJSON("GET",`/api/1/customers/${A}/sites/${e}`)}catch{return null}}async createDevelopmentSite(A,e,r){if(this.logger?.info(`Creating development site "${e.name}"...`),e.serialNumber){let i=await this.getSite(A,e.name.toLowerCase());if(i)try{return await this.fetchJSON("POST",`/api/1/customers/${A}/sites/${i._uid}/cn-attach-device`,{device_id:e.serialNumber,allow_overwrite:!0,detach_from_old_site:!0,acquire:!0,create:!0}),this.logger?.info(`Device attached to existing site ${i._uid}`),i._uid}catch(n){if(n.message&&!n.message.includes("304"))this.logger?.warn(`Could not attach device to existing site: ${n.message}`);else return i._uid}}let{_uid:t}=await this.fetchJSON("POST",`/api/1/customers/${A}/sites`,{name:e.name,create:!0,force:!0,note:"This is a Studio development site",applid:e.applicationId,device_id:e.serialNumber,reg_code:r,servicetariff:"0000000000000000",servicetariff_indiv_cost:0});return this.logger?.info(`Development site created: ${t}`),t}async updateSiteName(A,e){try{await this.fetchJSON("PUT",`/api/1/sites/${A}`,{name:e})}catch{}}};function jl(x){return(0,hl.v5)(x,Wp)}async function ha(x,A,e,r,t,i,n){let F=await J.read(x,A),v=t.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),E=F.name.replaceAll(" ","_").replace(/[^a-zA-Z0-9-]+/g,""),u=await J.isApmPartEnabled(x,A,u0.Part.dlo,F),D=u&&r,m=D?r.toUpperCase():`${E}_${v}`,w=D?r:m,j=n||m;return j.length>50&&(e.warn(`Site name "${j}" is too long. Truncating to 50 characters.`),j=j.substring(0,50)),{apmId:jl(w),applicationId:null,name:j,version:1,serialNumber:u?r:void 0,siteUid:null,customerUid:i}}async function gl(x,A,e,r,t,i,n=!1){if(i.length>0)for(let F of i){let[v,E]=F.split("@");await ex.installDependency(x,A,e,r,t,v,E||null,n)}else await ex.installDependencies(x,A,e,r,t);await ex.installNpmInApmParts(x,A,e)}async function yl(x,A,e,r,t=null,i=!0,n){return await J.validateBasicManifest(x,A,null),mx.buildAll(x,A,e,r,t,i,n)}async function Xp(x){let A=null;if(x){A=x==="*"?x:x.split(";");let e=await J.validateRegistryAllowedBackends(A);if(e)throw new Error(e)}return A}async function kl(x,A,e,r,t,i,n,F){e.info("Publishing package...");let v=await Xp(i);if(F)await mx.publishArchive(x,A,e,t,r,F,n,v);else return await mx.validatePublishSettings(x,A,t,r),mx.release(x,A,e,r,t,n,v)}async function wl(x,A,e,r,t,i){return mx.pack(x,A,e,r,t,i)}var de=H0.DDEContainerName,_l=H0.allowedRelationTypes,Yp=H0.regexRelation,Jt=H0.ContainerType,Qp=H0.checkForReservedFieldName,si=H0.ContainerName,ja=H0.CONTAINER_DEFS,Zp=H0.SERVER_CONTAINER,x6=H0.HISTDATA_CONTAINER,A6=H0.CONFIG_CONTAINER,Sx=H0.TransferDirection,Sl=H0.fieldTypeDefinitions,Yx=h0.yamlRangeToLineInformation,ga="flexibleContainers",ai;(A=>{class x{constructor(r,t,i){this.manifest=r;this.libraryFiles=t;this.ddeHistory=i}manifest;libraryFiles;ddeHistory;fieldNamesPerContainer={};usedContainerNames={};fileDiagnostics=[];libraryDDE=[];libraryYaml={};flexibleContainers={timeseries:!1,config:!1};historyPlusDirectionContainers=new Set;parseLibraries(){this.libraryDDE.length=0;let r=[];return this.libraryFiles.forEach(t=>{let{parsedDDE:i,diagnostics:n,parsedYaml:F}=this.parseYamlFile(t.path,t.yaml,t.libraryName);r.push(...n),this.libraryDDE.push(i),this.libraryYaml[t.libraryName]=F}),r}get previousVersion(){return{setPointList:{...this.ddeHistory?.setPointList},containers:{...this.ddeHistory?.containers}}}getContainerOfPreviousVersion(r){let t=this.previousVersion,i=r.startsWith("timeseries_")?r.substring(11):r;return Object.values(t.containers).find(n=>n.title===i)||null}parseMainDDE(r,t){let{parsedDDE:i,diagnostics:n,parsedYaml:F,lineCounter:v}=this.parseYamlFile(r,t);return n.find(D=>D.level==="error")?{ddeJSON:null,diagnostics:n}:{ddeJSON:this.mergeAndFormat(i,r,v,F),diagnostics:[...this.fileDiagnostics]}}parseYamlFile(r,t,i){this.fileDiagnostics.length=0;let n=new Ge.LineCounter,F=(0,Ge.parseDocument)(t,{lineCounter:n});if(!F.contents)return{parsedDDE:{containers:{},setPointList:{}},diagnostics:[],parsedYaml:null,lineCounter:n};let v=F.contents||new Ge.YAMLMap;return this.validateContainerDefinition(v.items).forEach(u=>{this.validateAllowedContainer(r,u,n,i),this.validateContainerFields(F,r,u,n)}),{parsedDDE:this.yamlDocToDdeJson(F.toJS({mapAsMap:!0}),r,n,F,i),diagnostics:[...this.fileDiagnostics],parsedYaml:F,lineCounter:n}}yamlDocToDdeJson(r,t,i,n,F){F||(this.flexibleContainers=this.readFlexibleContainers(r.get(ga)));let v={containers:{},setPointList:{}},E=new Map,u=[...Object.values(de)];if(r.get("cloudProject")){let m=Object.values(this.previousVersion.containers).map(S=>S.title),w=[...r.keys()].filter(S=>!this.reservedTopLevelKeys().has(S)),j=[...new Set([...u,...m,...w])];u.length=0,u.push(...j)}for(let m of u)r.has(m)&&E.set(m,r.get(m));let D=r.get("timeseries");if(D)for(let[m,w]of D)E.set(m,w);for(let[m,w]of E){let{realContainer:j,transferDirection:S,legacyTitle:$,directionFromHistory:q}=this.getRealContainerInformation(m);if(!j){let I=this.findContainerKeyRange(n,m);this.fileDiagnostics.push({file:t,level:"error",message:`Container "${m}" could not be placed - no free container slot available.`,...I?Yx(i,I):{line:0,startCharacter:0,endCharacter:0}});continue}q&&this.isPlusDirection(S)&&this.historyPlusDirectionContainers.add(j);let R=ja[j],O=m.includes("timeseries_")?m.replace("timeseries_",""):m,r0={name:j,title:O,previousTitle:$,containerType:R.ctype,volatile:m===de.volatile,transferDirection:S,fieldCount:w.size,knownNames:[],libraries:[],arrays:{},shadows:{},fields:[],size:0,fieldIndex:0};F&&r0.libraries.push(F);for(let[I,k]of w){let L=[],W=k.get("type"),Q=Sl[W];if(!(!Q&&W!=="array")){if(W==="array"){let H=[],K=k.get("length"),a0=k.get("fields"),n0={name:I,length:K,library:F||null,fields:[]};r0.arrays[I]=n0;for(let Z=0;Z<K;Z++){let o0={name:I,index:Z};for(let[G,s0]of a0){let l0=Sl[s0.get("type")];if(!l0)continue;n0.fields?.find(T0=>T0.name===G)||n0.fields.push({name:G,type:s0.get("type"),byteSize:l0.len||s0.get("bytes")||s0.get("length")});let B0=`${I}[${Z}].${G}`,{fields:C0,shadowInfo:_0}=this.createDDEJsonFields(B0,F,l0,s0);C0.forEach(T0=>{T0.arrayRef=o0}),_0&&(r0.shadows[_0.name]=_0),H.push(...C0)}}L.push(...H)}else{let{arrayInfo:H,fields:K,shadowInfo:a0}=this.createDDEJsonFields(I,F,Q,k);H&&(r0.arrays[H.name]=H),a0&&(r0.shadows[a0.name]=a0),L.push(...K)}L.forEach(H=>{H.index=++r0.fieldIndex,r0.fields.push(H),r0.size+=H.byteSize})}}v.containers[j]=r0}return v}reservedTopLevelKeys(){return new Set(["dde","cloudProject","constants",ga,"timeseries",...Object.values(de)])}getRealContainerInformation(r){let t,i,n,F=!1;if(this.previousVersion){let v=r.startsWith("timeseries_")?r.substring(11):r,{name:E,direction:u,previousTitle:D}=this.findPreviousUsedContainer(v);t=E,i=u,n=D,F=i!==void 0}if(!t){let v=Object.entries(this.usedContainerNames).find(([,E])=>E===r);v&&(t=v[0])}return t||(t=this.findNextFreeContainer(r)),t&&(this.usedContainerNames[t]=r),i||(i=[de.setting,de.command].includes(r)?Sx.down:Sx.up),t&&[si.configA,si.configB].includes(t)&&(i=Sx.backendOnly,F=!1),{realContainer:t,transferDirection:i,legacyTitle:n,directionFromHistory:F}}findContainerKeyRange(r,t){let i=r.contents;return i?.items?t.startsWith("timeseries_")?i.items.find(u=>u.key.value==="timeseries")?.value?.items.find(u=>u.key.value===t)?.key.range:i.items.find(F=>F.key.value===t)?.key.range:void 0}findNextFreeContainer(r){if(r===si.aloha)return si.aloha;let t=A6;r.startsWith("timeseries_")?t=x6:[de.relations,de.storage].includes(r)&&(t=Zp);let i=this.previousVersion?.containers;return i&&(t=t.filter(n=>!Object.hasOwn(i,n))),t.find(n=>!Object.hasOwn(this.usedContainerNames,n))}findPreviousUsedContainer(r){let t=this.previousVersion.containers,i=Object.values(t).find(n=>n.title===r);return{name:i?.name,direction:i?.transferDirection,previousTitle:i?.previousTitle}}createDDEJsonFields(r,t,i,n){let F=n.get("array"),v=[],E,u;if(F){E={name:r,library:t||null,length:F};for(let D=0;D<F;D++){let m=`${r.toLowerCase()}[${D}]`;v.push(this.buildDDEJsonField(m,n,{name:r,index:D},i,t,null))}}else{let D=this.buildDDEJsonField(r,n,null,i,t,null);v.push(D);let m=n.get("shadowFields");if(m){u={name:D.name,byteSize:D.byteSize,byteOffset:D.byteOffset};for(let[w,j]of m){let S=w;r.includes(".")&&(S=r.split(".")[0]+`.${w}`),v.push(this.buildDDEJsonField(S,j,null,i,t,D.name))}}}return{arrayInfo:E,shadowInfo:u,fields:v}}buildDDEJsonField(r,t,i,n,F,v){return{id:r.toLowerCase(),name:r,index:0,library:F||null,byteOffset:0,byteSize:n.len||t.get("bytes")||t.get("length"),type:t.get("type"),title:t.get("title")||null,arrayRef:i,shadowRef:v,unit:t.get("unit"),hex:t.get("hex"),decimalPlaces:t.get("decimalPlaces"),writePermission:this.parseUserLevel(t.get("writePermission")),readPermission:this.parseUserLevel(t.get("readPermission")),channelMode:this.parseChannelMode(t.get("channelMode")),defaultValue:t.get("defaultValue"),scale:t.get("scale"),offset:t.get("offset"),chartMinimum:t.get("chartMinimum"),description:t.get("description"),chartMaximum:t.get("chartMaximum"),chartAlarmLow:t.get("chartAlarmLow"),chartAlarmHigh:t.get("chartAlarmHigh"),chartWarningLow:t.get("chartWarningLow"),chartWarningHigh:t.get("chartWarningHigh"),chartHysteresis:t.get("chartHysteresis"),chartTriggerThreshold:t.get("chartTriggerThreshold"),chartTriggerRelation:this.parseTriggerUndershoot(t.get("chartTriggerRelation")),chartSetPoint:t.get("chartSetPoint"),utilsTransferInterval:!!t.get("utilsTransferInterval"),bitmask:t.get("bitmask")}}resolvePossibleAlias(r,t){return(0,Ge.isAlias)(t)?t.resolve(r).value:t?.value}validateContainerDefinition(r){let t=[];return r.forEach(i=>{let F=i.key.value;F==="timeseries"?i.value.items.forEach(v=>{v.key.value=`timeseries_${v.key}`,t.push(v)}):["dde","cloudProject","constants",ga].includes(F)||t.push(i)}),t}parseUserLevel(r){if(r==="read-only")return 99;if(r?.startsWith("UL"))return Number(r.substring(2))}parseChannelMode(r){if(r)return{digital:1,"day-counter":2,"interval-counter":3,analog:6,"infinite-counter":12}[r]??r}parseTriggerUndershoot(r){if(r)return{"greater-or-equal":0,"less-or-equal":1}[r]??r}validateAllowedContainer(r,t,i,n){if(!t.value)return;let v=t.key.value;if(n&&(v.startsWith("aloha")||v.startsWith("timeseries"))){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within a library`,...Yx(i,t.key.range)})}if(J.isAnalytics(this.manifest)&&![de.relations,de.storage].includes(v)){let E=v.includes("_")?v.split("_")[1]:v;this.fileDiagnostics.push({file:r,level:"error",message:`"${E}" not allowed within an analytics app. Only "relations" and "storage" are allowed.`,...Yx(i,t.key.range)})}}validateContainerFields(r,t,i,n){let F=i.value;if(!F)return;let v=i.key.value;Object.hasOwn(this.fieldNamesPerContainer,v)||(this.fieldNamesPerContainer[v]=[]);let E=this.getContainerOfPreviousVersion(v);F.items.forEach(u=>{let m=u.key.value;this.checkForContainerRelation(u,r,t,n),this.validateFieldName(u,v,t,n),this.checkFieldNameLength(u,v,t,n);let w=E?.fields.find(O=>O.id===m.toLowerCase()),j=u.value,S=j.get("type",!0),$=this.resolvePossibleAlias(r,S),q=j.get("bytes",!0),R=this.resolvePossibleAlias(r,q);w&&(S&&$&&w.type!==$&&this.fileDiagnostics.push({file:t,level:"warning",message:`Field type changed from "${w.type}" to "${$}".
|
|
2333
|
+
Changing the type of an existing field can result in data loss or unexpected behaviour.`,...Yx(n,S.range)}),q&&R&&w.byteSize!==R&&this.fileDiagnostics.push({file:t,level:"warning",message:`Byte size changed from '${w.byteSize}' to '${R}'.
|
|
2334
|
+
Changing the size of an existing field can result in data loss or unexpected behaviour.`,...Yx(n,q.range)}))})}checkForContainerRelation(r,t,i,n){let F=r.value.get("fields");F&&F.items.forEach(E=>{this.checkForContainerRelation(E,t,i,n)}),r.value.items.forEach(E=>{let u=E.value;if(u?.value&&Yp.exec(`${u.value}`)){let D=E.key.value;if(D){if(!Object.hasOwn(_l,D))return this.fileDiagnostics.push({file:i,level:"error",message:`Property "${D}" does not allow relations.`,...Yx(n,u.range)});if(["scale","offset"].includes(D))return this.fileDiagnostics.push({file:i,level:"warning",message:`Container relations for "${D}" are not available within the dlo source.`,...Yx(n,u.range)})}return this.validateContainerRelation(D,u,t,i,n)}})}validateFieldName(r,t,i,n){let F=this.fieldNamesPerContainer[t],v=r.key,E=v.value;Qp(E)&&this.fileDiagnostics.push({file:i,level:"error",message:`Reserved property "${E}" is not allowed.`,...Yx(n,v.range)});let u=r.value.get("shadowFields");u&&u.items.forEach(D=>{this.validateFieldName(D,t,i,n)}),F.includes(E.toLowerCase())?this.fileDiagnostics.push({file:i,level:"error",message:`Field name "${E}" is already occupied`,...Yx(n,v.range)}):F.push(E.toLowerCase())}checkFieldNameLength(r,t,i,n){let F=r.key,v=F.value,u=`DDE_${t.startsWith("timeseries")?t.substring(10):t}_`,D=31-u.length;u.length+v.length>31&&this.fileDiagnostics.push({file:i,level:"error",code:fn.CODE.ddeFieldLength,message:`Field name "${v}" to long. ${D} characters allowed for this field/container.`,...Yx(n,F.range)})}validateContainerRelation(r,t,i,n,F){let[v,E,u]=t.value.split(".",3),[D,m]=v.split("@"),w=D?D.split(":")[1]:null,S=(w&&this.libraryYaml[w]?this.libraryYaml[w]:i).contents?.get(m),$=E.split("[")[0],q=null;if(S){let R=S.get($);if(R)if(u){let O=R.get("fields");O&&O.get(u)&&(q=O.get(u))}else q=R;else q=this.findRelatedShadowField(S,$)}if(q){let R=_l[r],O=q.get("type");R.includes(O)||this.fileDiagnostics.push({file:n,level:"error",message:`Related field type "${O}" is not allowed for attribute "${r}".`,...Yx(F,t.range)})}else w&&!this.libraryYaml[w]?this.fileDiagnostics.push({file:n,level:"error",message:`Related library "${w}" does not exist.`,...Yx(F,t.range)}):this.fileDiagnostics.push({file:n,level:"error",message:`Related field "${t.value}" does not exist.`,...Yx(F,t.range)})}findRelatedShadowField(r,t){for(let i of r.items){let F=i.value.get("shadowFields");if(!F)continue;let v=F.get(t);if(v)return v}}mergeAndFormat(r,t,i,n){let F={containers:{},setPointList:{}};for(let v of this.libraryDDE)this.combineDDE(F,v);this.combineDDE(F,r);for(let v of Object.values(F.containers)){let E=v.transferDirection;v.transferDirection=this.normalizeTransferDirection(v.name,E),this.warnIfHistoryDirectionNarrowed(v,E,t,i,n)}return this.sortContainerFields(F),this.generateSetPointList(F),F}readFlexibleContainers(r){let t=i=>r instanceof Map?r.get(i)===!0:r&&typeof r=="object"?r[i]===!0:!1;return{timeseries:t("timeseries"),config:t("config")}}flexibleSwitchGroupFor(r){let t=ja[r]?.ctype;if(t===Jt.hx)return"timeseries";if(t===Jt.cx||t===Jt.aloha)return"config"}flexibleSwitchFor(r){let t=this.flexibleSwitchGroupFor(r);return t?this.flexibleContainers[t]:void 0}isPlusDirection(r){return r===Sx.upPlus||r===Sx.downPlus||r===Sx.bothPlus}normalizeTransferDirection(r,t){let i=ja[r]?.xmits,n=this.flexibleSwitchFor(r);if(!i||n===void 0)return t;let v=(n?[[Sx.up,Sx.upPlus],[Sx.down,Sx.downPlus],[Sx.both,Sx.bothPlus]]:[[Sx.upPlus,Sx.up],[Sx.downPlus,Sx.down],[Sx.bothPlus,Sx.both]]).find(([E,u])=>t===E&&i.includes(u));return v?v[1]:t}warnIfHistoryDirectionNarrowed(r,t,i,n,F){if(!this.historyPlusDirectionContainers.has(r.name)||!this.isPlusDirection(t)||r.transferDirection===t)return;let v=this.flexibleSwitchGroupFor(r.name),E=r.containerType===Jt.hx?`timeseries_${r.title}`:r.title,u=F?this.findContainerKeyRange(F,E):void 0;this.fileDiagnostics.push({file:i,level:"warning",message:`Container "${r.title}" was transferred with variable length ("${t}") in a previous build but "flexibleContainers.${v}" is not enabled - it now uses fixed-length "${r.transferDirection}". Enable the switch to keep variable-length transfer.`,...u?Yx(n,u):{line:0,startCharacter:0,endCharacter:0}})}combineDDE(r,t){for(let[i,n]of Object.entries(t.containers)){let F=r.containers[i];F?(F.title=n.title,F.knownNames.unshift(n.title),F.libraries.push(...n.libraries),F.fields.push(...n.fields),F.arrays={...F.arrays,...n.arrays},F.shadows={...F.shadows,...n.shadows}):(F=r.containers[i]=structuredClone(n),F.knownNames.unshift(n.title),F.fieldCount=F.fields.length,F.fieldIndex=0);let v=this.initialContainerByteOffset(F);for(let[E,u]of F.fields.entries()){if(u.shadowRef){let D=F.shadows[u.shadowRef];u.byteOffset=D.byteOffset}else u.byteOffset=v,this.updateShadowFieldInformation(r.containers[i],u),v+=u.byteSize||0;E>F.fieldCount-1&&(u.index+=F.fieldIndex)}F.fieldIndex+=n.fieldIndex,F.knownNames=[...new Set(F.knownNames)],F.libraries=[...new Set(F.libraries)],F.fieldCount=F.fields.length}}initialContainerByteOffset(r){return r.containerType===Jt.hx?1:0}updateShadowFieldInformation(r,t){t&&Object.hasOwn(r.shadows,t.name)&&(r.shadows[t.name].byteOffset=t.byteOffset)}sortContainerFields(r){for(let t of Object.values(r.containers)){let{sortedFields:i,containerSize:n}=this.sortFields(t);t.fields=i,t.size=n,t.fieldCount=t.fields.length}}sortFields(r){let t=r.fields.filter(D=>!D.shadowRef),i=r.fields.filter(D=>D.shadowRef),n=[],F=r.name;if(this.previousVersion.containers[F]){let D=this.sortPreviousContainerFields(r,t);n.push(...D)}else n.push(...t);n.forEach(D=>{this.updateShadowFieldInformation(r,D)});let E=n[n.length-1],u=E.byteSize+E.byteOffset;return i.forEach(D=>{D.byteOffset=r.shadows[D.shadowRef].byteOffset,n.push(D)}),{sortedFields:n,containerSize:u}}sortPreviousContainerFields(r,t){let i=r.name,n=this.previousVersion.containers[i],F=[],v=this.initialContainerByteOffset(r);for(let E of n.fields){if(E.shadowRef)continue;let u=t.findIndex(m=>E.id===m.name?.toLowerCase());if(u===-1){v=E.byteOffset+E.byteSize;continue}let D=t[u];if(E.type!==D.type&&E.byteSize!==D.byteSize){v=E.byteOffset+E.byteSize;continue}D.byteOffset=E.byteOffset,t.splice(u,1),F.push(D),v=this.initialContainerByteOffset(r)}if(v>this.initialContainerByteOffset(r)){let E=t.shift();F.push(...this.generatePlaceholderFieldIfNeeded(v,E)),this.updateShadowFieldInformation(r,E)}for(let E of t){if(E.shadowRef)E.byteOffset=r.shadows[E.shadowRef].byteOffset;else{this.updateShadowFieldInformation(r,E);let u=F[F.length-1];u.shadowRef&&(u=r.shadows[u.shadowRef]),E.byteOffset=u.byteOffset+u.byteSize}F.push(E)}return F}generatePlaceholderFieldIfNeeded(r,t){let i=[];if(t)t.byteOffset=r,i.push(t);else{let n={byteOffset:r,byteSize:0,id:"_shadow",library:null,name:"_shadow",type:"shadow",arrayRef:null,shadowRef:null,title:null,index:0};i.push(n)}return i}generateSetPointList(r){r.setPointList={...this.previousVersion.setPointList||{}};for(let t of Object.values(r.containers))for(let i of t.fields)i.chartSetPoint&&(Object.hasOwn(r.setPointList,i.name)||(r.setPointList[i.name]=this.getNextSetpointValue(r.setPointList)))}getNextSetpointValue(r){let t=[...Object.values(r),0];return Math.max(...t)+1}}A.PreCompiler=x})(ai||={});var rA=H0.TransferDirection,SA=H0.parseXMLValueWithRelation,e6=H0.parseXMLBitmask,r6=H0.parseXMLDefaultValue,t6=H0.fieldTypeDefinitions;function ya(x,A){let r=[];function t(F,v=!0){if(v){if(Array.isArray(F)){r.push.apply(r,F);return}r.push(""+F)}}function i(F,v){F!=="mergeofs"&&t(`${F}=${v}`)}t("// DDE STRUCTURE created by Microtronics Studio");let n="source=rm2mraw";for(let[F,v]of Object.entries(A.containers)){F.startsWith("histdata")&&v.transferDirection!==rA.deviceOnly&&(t("<split>"),t(n),t("target="+F),t("key=0"+F.substr(-1,1)),t("</split>")),t("<table>"),i("name",F),i("alias",v.title),i("title",v.title.replace("_"," "));let E={};[rA.none,rA.backendOnly,rA.deviceOnly,rA.down,rA.downPlus].includes(v.transferDirection)&&i("upload","0"),[rA.none,rA.backendOnly,rA.deviceOnly,rA.up,rA.upPlus].includes(v.transferDirection)&&i("download","0"),(J.isIotApp(x)||J.isLibrary(x))&&[rA.up,rA.upPlus].includes(v.transferDirection)&&i("edit","99");for(let u of v.fields){if(u.type==="shadow")continue;let D=n6(u),m=t6[D.type],w=SA("title",D,A)||D.name;!w.startsWith("%")&&D.library&&(w=`${D.library}: ${w}`);let j={title:w,alias:D.name,index:u.index,...E};j.byteofs=`${D.byteOffset}`;for(let[S,$]of Object.entries(m.xml))j[S]=$;Object.hasOwn(m,"xmlOut")&&m.xmlOut(j,D,A),j.units=SA("unit",D,A),j.chmode=SA("channelMode",D,A),j.ialarm_high=SA("chartAlarmHigh",D,A),j.ialarm_low=SA("chartAlarmLow",D,A),j.iwarn_high=SA("chartWarningHigh",D,A),j.iwarn_low=SA("chartWarningLow",D,A),j.hysterese=SA("chartHysteresis",D,A),j.itrigger=SA("chartTriggerThreshold",D,A),j.itriggerus=SA("chartTriggerRelation",D,A),j.setpoint=SA("chartSetPoint",D,A),j.bitmask=e6(D),D.hex&&(j.editmask="%HEX%"),D.readPermission&&(j.view=D.readPermission),D.writePermission&&(j.edit=D.writePermission),D.defaultValue!==void 0&&(j.default=r6(D)),D.utilsTransferInterval===!0&&(j.param0="%FFFF0005%transfer_interval"),t("<field>"),D.library&&t(`// declared by ${D.library} library`,!0);for(let[S,$]of Object.entries(j))$!==void 0&&i(S,`${$}`);t("</field>")}["alerts","applog"].includes(F)||(t("</table>"),t("// "+v.size+" bytes total size"))}return t("<split>"),t(n),t("target=alarm0"),t("key=20"),t("</split>"),t("<split>"),t(n),t("target=applog0"),t("key=28"),t("</split>"),r.join(`
|
|
2335
|
+
`)}function n6(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]=h0.patchValueWithArrayInfo(t,e);return A}var Ae=U0(require("semver"));var PA=U0(require("semver"));var _a=require("vscode-uri");var qx=H0.ContainerType,L0=H0.TransferDirection,Kt=H0.regexRelation,i6=H0.CONFIG_CONTAINER,wa=H0.CONTAINER_DEF_DLO_CID_BASE,Wt=H0.CONTAINER_DEFS,Vt=H0.fieldTypeDefinitions,Tl=h0.isNumeric;function CA(x){let A=Vt[x.type];return A.pwn.rwp||(A.pwn.rwp="%n"),A.pwn.htype||(A.pwn.htype=A.pwn.rwfunc),A.pwn}var oi="Microtronics/dlo-core";function Sa(x){return J.isLibrary(x)&&x.name==="dlo-core"?x.version:x.libraryDependencies&&Object.hasOwn(x.libraryDependencies,oi)?ex.rangeToVersion(x.libraryDependencies[oi]):x.libraryDevDependencies&&Object.hasOwn(x.libraryDevDependencies,oi)?ex.rangeToVersion(x.libraryDevDependencies[oi]):null}function s6(x){let A=Sa(x);return A===null||PA.gte(A,"0.3.0")?PA.valid(x.version)?x.version:PA.coerce(`${x.version}`):PA.coerce(x.version)?.major}function ka(x){let A=Sa(x);if(A===null)return!1;let e=PA.coerce(A);return PA.gte(e,"1.1.0")}function a6(x){let A=Sa(x);if(A===null)return!1;let e=PA.coerce(A);return PA.gte(e,"1.15.0")}var o6=["u8","u16","u32","s8","s16","s32","s64","f16","f32","f64"];function F6(x){if(x.type==="ustring")return!1;if(x.defaultValue!=="NaN")return!0;let A=CA(x);return!A||A==="skip"?!1:o6.includes(`${A.rwfunc}`)}function v6(x,A,e){x("PROJECT META");let{dpid:r,registry:t}=e;if(!r)throw new Error('Setting "dpid" is required to generate dlo files');let{auto_inc:i}=Li[r];A("APM_DPID",`${r}`),A(`APM_DPID_${r}`,"1"),A(`APM_DPID_${r.toUpperCase()}`,"1"),A("APM_ID",t?.id||"");let n=s6(e);A("APM_VERSION",`${n}`),A("APM_NAME",`${e.name}`),A("APM_AUTHOR",`${e.publisher}`);for(let[F,v]of Object.entries(i))Tl(v)?A(F,`${v}`):A(F,`"${v}"`)}function l6(x,A,e,r){let t=r.flat,{definesWithSource:i}=r;A("GLOBAL DEFINES");for(let[n,F]of Object.entries(t)){let v=i[n]?.comment;if(v){let u=v.split(`
|
|
2336
|
+
`);if(u.length===1)x(`/** ${u[0]} */`);else{x("/**");for(let D of u)x(` * ${D}`);x(" */")}}let E=Object.hasOwn(t,F);e(n,`${F}`,E)}}function c6(x,A,e,r){let t=parseInt(x.substring(6)),i=1<<t;e[t]=A.size,r.cx_isupm|=[L0.both,L0.none,L0.deviceOnly,L0.up,L0.upPlus].includes(A.transferDirection)?i:0,r.cx_isvolatilem|=A.volatile?i:0,r.cx_isdnm|=[L0.both,L0.none,L0.deviceOnly,L0.down,L0.downPlus].includes(A.transferDirection)?i:0,r.cx_isvlm|=[L0.bothPlus,L0.upPlus,L0.downPlus].includes(A.transferDirection)?i:0}function f6(x,A,e,r){let t=parseInt(x.substring(8));e[t]=A.size,r.hx_isvlm|=[L0.upPlus].includes(A.transferDirection)?1<<t:0}function E6(x){return[L0.upPlus].includes(x.transferDirection)}function B6(x,A,e){let r=0,t=Array(10).fill(0),i={cx_isupm:0,cx_isvolatilem:0,cx_isdnm:0,cx_isvlm:0},n=0,F=Array(10).fill(0),v={hx_isvlm:0},E;for(let[D,m]of Object.entries(e.containers))m.containerType===qx.cx&&m.transferDirection!==L0.backendOnly?(c6(D,m,t,i),r=Math.max(r,m.size)):m.containerType===qx.hx?(f6(D,m,F,v),r=Math.max(r,m.size)):m.containerType===qx.aloha&&(E=E6(m),r=Math.max(r,m.size));A("DDE CORE"),x(`#define _DDE_BUF_BYTES (${r}+10)`),x(""),x("// c0 c1 c2 c3 c4 c5 c6 c7 c8 c9"),x(`stock _DDE_CONFIGS_size[] =[ ${t.join(", ")}];`),x(`#define _DDE_CONFIGS_upm 0b${i.cx_isupm.toString(2)} // ..is tolerant when reading back container with under-length`),x(`#define _DDE_CONFIGS_volatilem 0b${i.cx_isvolatilem.toString(2)} // inits container as volatile`),x(`#define _DDE_CONFIGS_downm 0b${i.cx_isdnm.toString(2)} // reading the container expects strict length`),x(`#define _DDE_CONFIGS_varlenm 0b${i.cx_isvlm.toString(2)} // allow partial write (dde_wxxx)`),x(`#define _DDE_CONFIGS_rdef 0b${n.toString(2)} // ..apply defaults reading a container with under-length`),x(""),x("// h0 h1 h2 h3 h4 h5 h6 h7 h8 h9"),x(`stock _DDE_HISTS_size[] =[ ${F.join(", ")}];`),x(`#define _DDE_HISTS_varlenm 0b${v.hx_isvlm.toString(2)} // allow partial write (dde_wxxx)`);let u=[...F];Object.hasOwn(e,"applog")&&u.push(125),Object.hasOwn(e,"alerts")&&u.push(13),x(`#define _DDE_HISTS_maxsize ${Math.max(...u)}`),x(""),E!==void 0&&(x(`#define _DDE_ALOHA_varlen ${E?1:0}`),x(""))}function C6(x,A,e){for(let[r,t]of Object.entries(e.containers)){if(t.containerType==="applog")continue;A(`${t.title.toUpperCase()} - ${t.transferDirection} via #${r}`);let i=wa(t.containerType,t.transferDirection);if(!i){x("// ... container not available in DLO");continue}let n=`DDE_${t.containerType===qx.aloha?qx.aloha:t.title}`,F=Wt[r];x(`// ${n}_id - container identifier required for ${n}_read/_write operations`),x(`#define ${n}_id (${i}+${F.cnum||0})`),x(`// ${n}_sz - [byte] container total size`),x(`#define ${n}_sz ${t.size}`),F.cnum!==void 0&&(x(`// ${n}_idx - 0+ container index number`),x(`#define ${n}_idx ${F.cnum}`))}}function $l(x,A,e){let r=[],t=r.push.bind(r);function i(F){t(`
|
|
2337
2337
|
// === ${F} ===
|
|
2338
|
-
`)}function n(F,v,E=!1){let u=
|
|
2339
|
-
`)}var Wt=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)||!ga(e.containerType,e.transferDirection)||!e.fields||!this.context&&!H0.hasContainerAppFields(e)||Vt[A].ctype!==Tx.cx&&this.context||(this.generateGlobalVarsForContainer(e),this.generateReadWriteFunctions(e));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,e,r=""){this.sourceType="globalVariables";let t=e?this.variableNameForPawnDefinition(A,e):A;if(e){let i=this.generateCommentForField(e);i&&(Array.isArray(i)?(this.pawn("/**"),i.forEach(n=>{this.pawn(` * ${n}`)}),this.pawn(" */")):this.pawn(`// ${i}`))}this.pawn(`stock ${t}${e?this.initialiserForGlobalVar(e):r};`)}initialiserForGlobalVar(A){return A.defaultDloDefine===void 0||A.arrayRef||!this.isPlainCellField(A)?"":` = ${A.defaultDloDefine}`}insertSection(A){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${A}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(A){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${A.title.replace("_"," ")}'`),this.pawn("");let e=`DDE_${A.title}`,r=this.createFieldDefaultDefines(e,A);this.generateArrayDefines(e,A,r);for(let t of A.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context||t.arrayRef!==null)continue;let i=this.generateFieldVariableName(e,t);this.createGlobalVar(`${i}`,t)}}createFieldDefaultDefines(A,e){let r=new Map;for(let t of e.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context)continue;if(t.arrayRef===null){this.createDefaultDefineForField(`${A}_${t.name}`,t);continue}let i=e.arrays[t.arrayRef.name],n=`${A}_${t.arrayRef.name}`,F="";i.fields?.length&&(F=t.name.split(".")[1],n+=`_${F}`),this.createDefaultDefineForField(n,t),t.defaultDloDefine!==void 0&&(r.has(t.arrayRef.name)||r.set(t.arrayRef.name,new Map),r.get(t.arrayRef.name).set(F,t))}return r}isPlainCellField(A){if(A.type==="struct"||!zt[A.type])return!1;let e=BA(A);return!e||e==="skip"?!1:!`${e.rwp||""}`.includes("%l")}simpleArrayInitialiser(A){let e=A?.get("");return e?.defaultDloDefine===void 0||!this.isPlainCellField(e)?"":` = [ ${e.defaultDloDefine}, ... ]`}structuredArrayInitialiser(A,e){if(!e?.size||!A.fields?.length)return"";let r=[];for(let i of A.fields){let n=e.get(i.name);if(n!==void 0&&!this.isPlainCellField(n)||!this.isPlainCellField({type:i.type}))return"";r.push(n?.defaultDloDefine??"0")}let t=`[ ${r.join(", ")} ]`;return` = [ ${new Array(A.length).fill(t).join(", ")} ]`}generateArrayDefines(A,e,r){for(let t of Object.values(e.arrays)){if(this.context!==t.library)continue;let i=`${A}_${t.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${i} ${t.length}`),t.fields){for(let v of t.fields)zt[v.type]?.isBlob&&v.byteSize&&this.addDefine(`${A}_${t.name}_${v.name}_dim`,v.byteSize);let n={...e};n.fields=[],t.fields.forEach(v=>{n.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:v.byteSize,id:v.name,library:t.library,name:v.name,type:v.type,title:null,index:0})});let F=`${A}_${t.name}_def`;this.generateTypeDefinitions(n,F),this.createGlobalVar(`${A}_${t.name}[${i}][${F}]`,void 0,this.structuredArrayInitialiser(t,r.get(t.name)))}else this.createGlobalVar(`${A}_${t.name}[${i}]`,void 0,this.simpleArrayInitialiser(r.get(t.name)))}}generateCommentForField(A){let e=[`@type ${A.type}`];if(A.description&&e.unshift(A.description),A.defaultValue!==void 0){let{value:r,reason:t}=this.parseFieldDefault(A);e.push(`@default ${r} ${t||""}`)}return e}generateFieldVariableName(A,e){let r=`${A}_${e.name}`,t=Object.hasOwn(zt,e.type)&&zt[e.type].isBlob,i=e.byteSize;return i&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${e.name}_dim ${i}`),this.pawn(`#define ${A}_${e.name}_iter() for(new i=0;i<${i};i++)`)),this.sourceType="globalVariables",r}generateTypeDefinitions(A,e){this.sourceType="defines";let r=A.fields;if(!r)return;let t=[];this.pawn(">",`#define ${e} [`);for(let i of r){let n=this.generateFieldTypeDefinition(i,A,t,e);n!==null&&this.pawn(n)}this.pawn("<","]")}handleArrayFieldDedup(A,e,r,t){let i=A.arrayRef;if(i){let v=e.arrays[i.name];if(!r.includes(i.name)&&!v.fields)r.push(i.name);else return null}let n=A.arrayRef?A.arrayRef.name:A.name,F=A.arrayRef?`[${t}_${n}_dim]`:"";return{fieldName:n,fld_dim:F}}generateFieldTypeDefinition(A,e,r,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let i=this.handleArrayFieldDedup(A,e,r,t);if(i===null)return null;let{fieldName:n,fld_dim:F}=i,v="";if(A.type==="struct")v="// ."+n+F;else{let E=BA(A);if(!E)return null;E==="skip"?v=`// skipped - .${n}${F}`:v+=E.rwp.replace("%n",`.${n}${F}`).replace("%l",A.byteSize)}return v+=",",A.library&&(v+=` // declared by ${A.library} library`),v}variableNameForPawnDefinition(A,e){let r=BA(e);return r&&r!=="skip"?r.rwp.replace("%n",`${A}`).replace("%l",e.byteSize):A}createDefaultDefineForField(A,e){if(this.sourceType="defaultDefines",e.scale!==void 0&&this.addDefine(`${A}_scale`,e.scale),e.offset!==void 0&&this.addDefine(`${A}_offset`,e.offset),e.defaultValue!==void 0&&o7(e)){let{value:r,reason:t}=this.parseFieldDefault(e),i=`${A}_default`;this.addDefine(i,r,t)&&(e.defaultDloDefine=i)}}addDefine(A,e,r){return Jt.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=Vt[e],t=`DDE_${A.containerType===Tx.aloha?Tx.aloha:A.title}`;[L0.both,L0.bothPlus,L0.none,L0.deviceOnly,L0.up,L0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===Tx.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[Tx.hx,Tx.aloha].includes(e.containerType),i=e.containerType===Tx.hx,n=e.containerType===Tx.aloha,F=`_${A}_write`,v=ja(this.manifest)?", flags":"",E=i?`stamp${v}`:"",u=ja(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${i?u:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?Tx.aloha:e.title}_id);`),this.generateRWFunctionBody(A,e,"dde_w"),t&&this.pawn(`return dde_wend(${E});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let D=`${A}_transfer`,m=`${A}_persist`,w=this.functionArgumentsForDdeWrite(i,t);if(this.pawn(">",`${this.context?"stock ":""}${D}(${w}) {`),t)this.pawn(`${F}(${E});`);else{let j=e.name.slice(-1);this.pawn(`dde_flush(${j}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${m}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=ja(this.manifest)?", const flags=0":"";return A?`const stamp=0${r}`:e?"":"bool:immediate=false"}generateReadMethod(A,e){this.sourceType="readWrite";let r=`_${A}_read`;this.pawn(">",`stock ${r}() {`),this.generateRWFunctionBody(A,e,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(A){return A.type==="shadow"||!!A.shadowRef||A.library!==this.context}emitFieldRW(A,e,r,t,i,n,F){if(!e.arrayRef)return this.emitSingleField(A,e,r,t,F);let v=e.arrayRef.name,E=i.get(v);return E?n.has(v)?F:(n.add(v),this.emitArrayLoop(A,E,r)):this.emitSingleField(A,e,r,t,F)}generateRWFunctionBody(A,e,r){let t=e.fields,i=this.analyzeArrayGroups(t,A,e),n=new Set,F=-1;for(let v of t){if(this.isFieldSkipped(v))continue;let E=BA(v);!E||E==="skip"||(F=this.emitFieldRW(A,v,r,E,i,n,F))}}defaultArgumentFor(A,e){return A.defaultDloDefine===void 0?"":e==="dde_r"||s7(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,e,r,t,i){e.byteOffset!==i&&this.pawn(`_dde_idx = ${e.byteOffset};`);let n="";n+=r,n+=t.rwfunc;let F=`${A}_${e.name}`;return n+=`(${F}`,t.rwlen&&(n+=`, ${e.byteSize}`),n+=this.defaultArgumentFor(e,r),this.pawn(n+");"),e.byteOffset+e.byteSize}emitArrayLoop(A,e,r){this.pawn(">",`for (new _i = 0; _i < ${e.dimDefine}; _i++) {`);let t=-1;for(let i of e.templateFields){let n=BA(i);if(!n||n==="skip")continue;let F=i.byteOffset;F!==t&&this.pawn(`_dde_idx = ${F} + (_i * ${e.stride});`),t=F+i.byteSize;let v=`${A}_${i.name.replace(/\[\d+\]/,"[_i]")}`,E=`${r}${n.rwfunc}(${v}`;n.rwlen&&(E+=`, ${i.byteSize}`),E+=this.defaultArgumentFor(i,r),this.pawn(E+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(A,e,r){let t=this.collectArrayFieldsByIndex(A);return this.buildArrayGroups(t,e,r)}collectArrayFieldsByIndex(A){let e=new Map;for(let r of A){if(this.isFieldSkipped(r)||!r.arrayRef)continue;let t=BA(r);if(!t||t==="skip")continue;let{name:i,index:n}=r.arrayRef;e.has(i)||e.set(i,new Map);let F=e.get(i);F.has(n)||F.set(n,[]),F.get(n).push(r)}return e}validateArrayStride(A,e){let r=e[0].byteOffset-A[0].byteOffset;if(r<=0)return null;for(let t=0;t<A.length;t++)if(e[t].byteOffset-A[t].byteOffset!==r)return null;return r}buildArrayGroups(A,e,r){let t=new Map;for(let[i,n]of A){let F=r.arrays[i];if(!F||F.length<2)continue;let v=n.get(0),E=n.get(1);if(!v||!E||v.length===0||E.length===0||v.length!==E.length)continue;let u=this.validateArrayStride(v,E);u!==null&&t.set(i,{arrayName:i,dimDefine:`${e}_${i}_dim`,stride:u,templateFields:v})}return t}parseFieldDefault(A){let e=BA(A),r=A.defaultValue;function t(n,F){return{value:n,reason:F}}switch(A.type){case"astring":case"nstring":case"cstring":return t(`"${r}"`);case"wstring":return t(`''${r}''`);case"ustring":return t(`/* default not supported: ${r} */`);case"binary":{let F=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(F)}}if(r==="NaN"){let n=e.rwfunc;return t(`${n}_NaN`.toUpperCase())}let i=this.parseFieldScaleOffset(A);return i?t(i.calculated,i.reason):(r!==void 0&&!Jt.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!Jt.exec(`${A.offset}`)||!!Jt.exec(`${A.scale}`)||!!Jt.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,i=A.scale!==void 0?Number(A.scale):1;if(i===0)return null;let n=(Number(e)-t)/i,F=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${i}`;return A.type.startsWith("float")?n%1===0&&(n=n.toFixed(1)):(n=Math.round(n),F=`Rounded value of: ${F}`),{calculated:n,reason:F}}return null}};function C7(x){return`${`onUplinkApply_${x}()`};`}function $l(x,A,e){A.libraries.forEach(r=>{let t=h0.generateHashForLibraryName(r);x(` #ifdef _${t}${e}_${A.title}`),x(` _${t}${e}_${A.title}(); // ${r}`),x(" #endif")})}function d7(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(e=>{let t=`_${h0.generateHashForLibraryName(e)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function u7(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))Vt[r].ctype===Tx.cx&&([L0.up,L0.upPlus,L0.deviceOnly].includes(t.transferDirection)&&e.push(t),[L0.bothPlus,L0.both,L0.downPlus,L0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:e}}function D7(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();`),$l(x,e,"Restore"),H0.hasContainerAppFields(e)&&x(` onUplinkRestore_${e.title}();`),x("}");if(x("#pragma warning push"),x("stock _onUplinkRestore(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: restoreUplink${e.name}(); // ${e.name}`);x(" }")}else x(" #pragma warning disable 203"),x(" // no containers to restore");x("}"),x("#pragma warning pop")}function p7(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();`),$l(x,e,"Apply"),H0.hasContainerAppFields(e)&&x(` ${C7(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 Tl(x,A){let e=[],r=e.push.bind(e);d7(r,A);let{containerApply:t,containerRestore:i}=u7(x);return D7(r,i),p7(r,t),e.join(`
|
|
2340
|
-
`)}var
|
|
2341
|
-
`)}function
|
|
2342
|
-
`)}async function m7(x,A,e){let r=[];for(let t of e){let i=e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(ya.Utils.joinPath(x,i))&&r.push(`#include "${e0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function Kt(x,A,e,r){let t=ya.Utils.joinPath(x,e0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var Ml=U0(require("semver")),Ll=require("yaml");var CA=H0.ContainerType,Fi=H0.TransferDirection,h7=H0.fieldTypeDefinitions,At={$ref:"#/components/parameters/contextId"},j7={$ref:"#/components/parameters/addonId"},g7={$ref:"#/components/parameters/appId"},Il={$ref:"#/components/schemas/histdataResponse"},y7={$ref:"#/components/schemas/histdataRequest"},vi={$ref:"#/components/schemas/rapidM2MStamp"},k7={$ref:"#/components/schemas/timeseriesRequestBase"},oi="rapidM2M Stamp",PA={description:"Successful operation"},Rl={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"'}}},Ol={...structuredClone(Rl)};Object.assign(Ol.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:[vi,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:oi,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:oi,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:oi,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:oi,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 Xt={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},Ge={401:{description:"Permission denied",...Xt},403:{description:"Forbidden",...Xt},404:{description:"Resource not found",...Xt},500:{description:"Internal error",...Xt}};function wa(x,A,e=null){let r=Ml.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(Rl)):Object.assign(t.components,structuredClone(Ol));let i=K.isAddon(A),n=K.isAnalytics(A);i&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let F of Object.values(x.containers))e&&(!F.libraries.includes(e)||F.containerType===CA.hx)||!e&&!H0.hasContainerAppFields(F)||F.containerType===CA.aloha||(w7(t,F),S7(t,F,e),T7(t,F,i,n),!i&&!n&&(_7(t,F,e),$7(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,Ll.stringify)(t)}function w7(x,A){x.tags.push({name:rA(A.title),description:`Transfer direction ${A.transferDirection}`})}function rA(x){return x.split("_").join(" ")}function _7(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},i=[];A.containerType===CA.hx&&(r+="Select",i.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let n of A.fields)n.library!==e||n.type==="shadow"||(A.containerType===CA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=Gl(n),!n.readPermission&&!n.writePermission&&i.push(n.id)));t.required=i.length?i:void 0,x.components.schemas[r]=t}function S7(x,A,e=null){let r=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},i=[],n=A.containerType===CA.hx;for(let v of A.fields)v.library!==e||v.type==="shadow"||(t.properties[v.name]=Gl(v),!v.readPermission&&!v.writePermission&&i.push(v.name));t.required=i.length?i:void 0,x.components.schemas[r]=t;let F=t.properties;if(n){t.required=t.required?.map(E=>E.toLowerCase());let v={};for(let[E,u]of Object.entries(t.properties))v[E.toLowerCase()]=u;t.properties=v}if(n){let v={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(F)}}}};x.components.schemas[`${r}RequestSingle`]=v,x.components.schemas[`${r}Request`]={allOf:[k7,v]},t.properties.stamp=vi,i.push("stamp")}}function Gl(x){let e={...h7[x.type].openApi},r=P7(x);return e.default=r,e.example=r,e.description=x.description,e}function P7(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function $7(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([CA.cx,CA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[rA(A.title)],summary:`Retrieve the data of the "${rA(A.title)}" container`,parameters:[At],responses:{200:{...PA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:vi}},{$ref:`#/components/schemas/${A.name}`}]}}}},...Ge}},[Fi.down,Fi.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[rA(A.title)],summary:`Modify the data of the "${rA(A.title)}" container`,parameters:[At],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...PA},204:{...PA},...Ge}});else if(A.containerType===CA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[rA(A.title)],summary:`Retrieve the youngest data of the "${rA(A.title)}" container`,parameters:[At,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...PA,content:{"application/json":{schema:Il}}},...Ge}},x.paths[t]={get:{deprecated:!0,tags:[rA(A.title)],summary:`Get the historical data of the "${rA(A.title)}" container.`,parameters:[At,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},y7]}}],responses:{200:{...PA,content:{"application/json":{schema:Il}}},...Ge}}}}x.paths[e]=r}function T7(x,A,e=!1,r=!1){let i=A.containerType===CA.hx?"timeseries":"containers",n=[],F=rA(A.title);r||n.push({path:`/api/1/sites/{siteUid}/${i}/${A.title}`,params:[At],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${i}/${A.title}`,params:[At,j7],tags:[F]}]);let v={path:`/api/1/app-center/apps/{appUid}/${i}/${A.title}`,params:[g7],tags:["app-center"]};r&&v.tags.push(F),n.push(v);let E={get:void 0,put:void 0,post:void 0},u={tags:[],summary:`Retrieve the data of the "${rA(A.title)}" container`,parameters:[],responses:{200:{...PA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:vi}},{$ref:`#/components/schemas/${A.title}`}]}}}},...Ge}};if([CA.cx,CA.cb].includes(A.containerType)&&(E.get=u,[Fi.down,Fi.backendOnly].includes(A.transferDirection)&&(E.put={tags:[],summary:`Modify the data of the "${rA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...PA},204:{...PA},...Ge}}),n.forEach(D=>{let m=structuredClone(E);Object.values(m).forEach(w=>{w?.parameters?.unshift(...D.params),w?.tags?.unshift(...D.tags)}),x.paths[D.path]=m})),A.containerType===CA.hx){E.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...PA,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...Ge}},e&&(E.post={tags:[],summary:`Insert data into the "${rA(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...PA},400:{description:"Bad request",...Xt},...Ge}});let D=n[0],m=structuredClone(E);Object.values(m).forEach(R=>{R?.parameters?.unshift(...D.params),R?.tags?.unshift(...D.tags)}),x.paths[D.path]=m;let w={...PA,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},j=`${D.path}/youngest`,S={get:structuredClone(m.get)};S.get.summary=`Get the youngest record of "${A.title}" container`,S.get.responses[200]=w;let T=e?2:1;S.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[j]=S;let q=`${D.path}/oldest`,O={get:structuredClone(m.get)};O.get.summary=`Get the oldest record of "${A.title}" container`,O.get.responses[200]=w,O.get.parameters[T].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[q]=O}}var Hl=H0.TransferDirection,li=" new szTemp{64};",ci=" return strcat(aData, szTemp, sizeof(szTemp));";function Jl(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 _a(x){if(x.type==="shadow"||x.shadowRef)return null;let A=BA(x);return!A||A==="skip"?null:Jl(A)}function Kl(x){return[H0.ContainerType.hx,H0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==Hl.backendOnly}function q7(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=BA(x);return!!A&&A!=="skip"}function N7(x,A,e){let r=x.name.indexOf("]"),t=r>=0?x.name.substring(r+1):"",i=`${x.arrayRef.name}|${t}|${A}`;e.has(i)||e.set(i,{fields:[],formatType:A}),e.get(i).fields.push(x)}function I7(x){let A=[],e=new Map,r=new Set,t=!1;for(let i of x){if(!q7(i))continue;let n=_a(i);i.arrayRef&&n?N7(i,n,e):(A.push(i),n?r.add(n):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function M7(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?`_${h0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:n,subField:F,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:_a(e[0]),pawnVarBase:`${v}${x}_${n}`}}function L7(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:i}=I7(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=M7(x,F,E);D?(t.add(u),n.push(D)):(e.push(...E),t.add(u))}return e.sort((F,v)=>F.byteOffset-v.byteOffset),{arrayGroups:n,standaloneFields:e,usedFormats:t,hasInlineFields:i}}function R7(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(Kl(e))for(let r of e.fields){let t=_a(r);t&&A.add(t)}return A}function O7(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(li),x(' sprintf(szTemp, _, "%d", value);'),x(ci),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(li),x(' sprintf(szTemp, _, "%.3f", value);'),x(ci),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(li),x(' sprintf(szTemp, _, "%s", value);'),x(ci),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(li),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(ci),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 G7(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function U7(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 H7(x,A){let{startOffset:e,endOffset:r,step:t,formatType:i,pawnVarBase:n,subField:F}=A,v=G7(e,t),E=U7(e,r,t);if(x(` if (${E}) {`),i==="bin"){let u=`${n}[${v}]${F}`,D=F?F.substring(1):"",m=D?`${n}_${D}_dim`:`${n}_dim`;x(` return _DDE_fmt_bin(aData, ${u}, ${m});`)}else x(` return _DDE_fmt_${i}(aData, ${n}[${v}]${F});`);x(" }")}function J7(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=BA(e);if(!r||r==="skip")return;let i=`${e.library?`_${h0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,n=Jl(r);if(n==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${i}, ${i}_dim);`);else if(n)x(` case ${e.byteOffset}: return _DDE_fmt_${n}(aData, ${i});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let F=i;r.printfFormat&&(F=`(${r.printfFormat}(${F}))`),x(` sprintf(szTemp, _, "${r.printf}", ${F});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function K7(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function Ul(x,A,e){let r=e===H0.ContainerType.cx?"c":"h",t=e===H0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[i,n]of Object.entries(A.containers))e===n.containerType&&i.startsWith(t)&&n.transferDirection!==Hl.backendOnly&&K7(x,i,n);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function z7(x,A){let e=L7(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)H7(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)J7(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function V7(x,A){for(let[,e]of Object.entries(A.containers))Kl(e)&&z7(x,e)}function zl(x){let A=[],e=A.push.bind(A),r=R7(x);return O7(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),Ul(e,x,H0.ContainerType.cx),Ul(e,x,H0.ContainerType.hx),e(" return OK;"),e("}"),V7(e,x),A.join(`
|
|
2343
|
-
`)}var
|
|
2344
|
-
`),tx=e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",ox.libraryName),
|
|
2345
|
-
`)),L.log("Generated",e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let I0=hx.Utils.joinPath(M,e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(I0,o0),L.log("Generated",e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await R(M,k,L)}t0.exportAutoDloFiles=q;async function O(M,k,L,X){let W=await K.read(M,k),H=K.isLibrary(W),J=hx.Utils.joinPath(M,e0.filePaths.dist.path,"dde-api.yaml");await k.rm(J).catch(()=>{});let a0=hx.Utils.joinPath(M,e0.filePaths.dist.ddeApi);if(await k.writeFile(a0,wa(X,W)),L.log("Generated",e0.filePaths.dist.ddeApi),H){let n0=hx.Utils.joinPath(M,e0.filePaths.dist.ddeApiPath,`${W.name}.yaml`),x0=wa(X,W,W.name);x0.length&&(await k.writeFile(n0,x0),L.log("Generated",e0.filePaths.dist.ddeApiPath+`${W.name}.yaml`))}}t0.exportOpenApi=O;async function R(M,k,L){let X=hx.Utils.joinPath(M,e0.filePaths.studio.auto.dlo.defaultInc),W=await Nl(M,k);await k.writeFile(X,W),L.log("Generated",e0.filePaths.studio.auto.dlo.defaultInc)}t0.exportDefaultInc=R})(wA||={});async function Vl(x,A,e){let r=[],t=await ex.getAll(e);for(let i in t){let n=ex.dependencyToPath(x,i),F=ex.dependencyIdToName(i),v=hx.Utils.joinPath(n,`${Yt}/${F}.dde`);await A.stat(v)&&r.push({libraryName:F,path:v,yaml:await wA.readYamlFile(v,A)})}if(K.isLibrary(e)){let i=hx.Utils.joinPath(x,`/${Yt}/${e.name}.dde`);await A.stat(i)&&r.push({libraryName:e.name,path:i,yaml:await wA.readYamlFile(i,A)})}return r}function W7(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 X7(x,A,e,r){let i={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[x];return i?i():e}function Y7(x){let A=x.instancePath||"/",e=x.parentSchema,r=W7(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${X7(x.keyword,x.params,t,e)}`}function Q7(x,A){let e=A.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),i=x.getIn(t,!0);if(i?.range)return i.range}return null}function Z7(x,A,e){let r=Q7(x,e.instancePath||"");return r?Yl(A,r):{line:0,startCharacter:0,endCharacter:0}}var Sa=require("vscode-uri");var Zl=U0(require("node:child_process"));var Ei;(e=>{async function x(r,t,i){let n=await K.read(r,t);if(await K.isApmPartEnabled(r,t,u0.Part.pov)){i.info("Executing POV build script",n.pov?.details.buildCommand);let{buildCommand:F,workingPath:v}=n.pov.details,E=Sa.Utils.joinPath(r,v);try{await Ql(E,F,i)}catch(u){throw u.code?new Error(`APM part '${u0.Part.pov}' has errors. Aborted.`):u}}}e.tryBuildPov=x;async function A(r,t,i){let n=await K.read(r,t);if(await K.isApmPartEnabled(r,t,u0.Part.blo,n)){i.info("Executing BLO build script",n.blo?.buildCommand);let{buildCommand:F,workingPath:v}=n.blo,E=Sa.Utils.joinPath(r,v);try{await Ql(E,F,i)}catch(u){throw u.code?new Error(`APM part '${u0.Part.blo}' has errors. Aborted.`):u}}}e.tryBuildBlo=A})(Ei||={});async function Ql(x,A,e){return new Promise((r,t)=>{Zl.exec(A,{cwd:x.fsPath,env:process.env},(i,n,F)=>{e.log(n),F&&e.error(F),i&&t(i),r(null)})})}var Qt=require("@gera2ld/tarjs"),xc=h0.convertBlobToString,Pa=require("pako"),mx;(D=>{class x extends Error{_mergedDiagnostics;constructor(w,j){super(w),this.name="BuildError",this._mergedDiagnostics=j}get mergedDiagnostics(){return this._mergedDiagnostics}}D.BuildError=x;async function A(m,w,j,S,T,q=!0,O){q=xp(j,q),await Ap(m,w,j,S,T,q);try{let M=await lx.read(m,w,j);await ep(m,w,j,M)}catch(M){j.warn("Could not generate defines.ts:",M)}let R={[u0.Part.dde]:[],[u0.Part.dlo]:[],[u0.Part.dfiles]:[]},t0={[u0.Part.dde]:rp,[u0.Part.dlo]:tp,[u0.Part.dfiles]:np};try{for(let M of[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles])if(q.includes(M)&&(j.info(`Building ${M.toUpperCase()}...`),await op(j,M,t0[M],R[M],m,w)))return R}catch(M){throw O?new x(M?.message,R):M}return q.includes(u0.Part.pov)?await Ei.tryBuildPov(m,w,j):j.info("Skipping pov build"),q.includes(u0.Part.blo)?await Ei.tryBuildBlo(m,w,j):j.info("Skipping blo build"),await ip(m,w,j),await sp(m,w,j),j.done("Project build completed."),R}D.buildAll=A;async function e(m,w,j,S,T,q,O){let R=await K.read(m,w);return K.isLibrary(R)?(j.info("Library project detected. Publishing library..."),i(m,w,j,T,S)):(j.info("App project detected. Publishing app..."),t(m,w,j,T,q,O,S))}D.release=e;async function r(m,w,j,S,T,q){let O=await K.read(m,w),R=`${O.name}-${O.version}.tar.gz`,t0=null;if(K.isLibrary(O))j.info("Library project detected. Packing library..."),t0=await Ac(m,w,j,T,S);else{j.info("App project detected. Packing app...");let k=await ec(m,w,j,T,q,S);t0=await vp(k)}let M=Er.Utils.joinPath(m,R);t0!==null?(await w.writeFile(M,t0),j.done(`Packaged: ${M.fsPath}`)):j.error(`Could not create archive: ${M.fsPath}`)}D.pack=r;async function t(m,w,j,S,T,q=null,O){if(!await u0.validateAccess(m,w,S,!1,O))throw new Error("Could not validate access to application");let t0=await ec(m,w,j,S,T,O);await u0.updateProfile(m,w,S,O);let M=await u0.publishTag(m,w,S,t0,O);if(q!==null){let k=await K.read(m,w);await vx.updateExistingApplicationVersion(S,k.publisher,k.registry?.id,k.version,{allowedBackends:q},O),j.info(`Tag "${M.version}" with phase "${M.phase}" shared with ${[...q].join(";")}!`)}j.done(`Tag "${M.version}" with phase "${M.phase}" published!`)}D.releaseAPM=t;async function i(m,w,j,S,T){let q=await K.read(m,w),O=await Ac(m,w,j,S,T);await Ur.publishPackage(S,q,O,T),j.done(`Library "${q.publisher}/${q.name}" with version "${q.version}" published!`)}D.releaseLibrary=i;async function n(m,w,j,S,T,q,O,R=null){if(q==="*"){let H=await K.read(m,w);q=`${H.name}-${H.version}.tar.gz`,j.info(`Publishing detected archive package "${q}"...`)}let t0=Er.Utils.joinPath(m,q);if(!await w.stat(t0))throw new Error(`Archive package not found: ${t0.fsPath}`);let M=await w.readFile(t0),k=await lp(M),{publisher:L,registry:X,version:W}=k;K.isLibrary(k)?(await Ur.publishPackage(S,k,M,T),j.done(`Library "${L}/${k.name}" with version "${k.version}" published!`)):(await vx.updateApplicationFile(S,L,X.id,W,"app.tar.gz",M,T),await vx.updateExistingApplicationVersion(S,L,X?.id,W,{allowedBackends:R||void 0,phase:O||void 0},T),j.info(`Tag "${W}" with phase "${O}" shared with ${[...R||""].join(";")}!`),j.done(`Tag "${W}" with phase "${O}" published!`))}D.publishArchive=n;async function F(m,w,j){let S;try{S=await w.readFile(Er.Utils.joinPath(m,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(xc(S)===e0.readme(j))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}D.getReadmeFile=F;async function v(m,w){let j;try{j=await w.readFile(Er.Utils.joinPath(m,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(xc(j)===e0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return j}D.getChangelogFile=v;async function E(m,w,j,S){let T=await K.read(m,w),{name:q,publisher:O,description:R}=T,t0=K.validateProjectName(q,K.isLibrary(T));if(t0)throw new Error(`name: ${t0}`);let M=K.validateDescription(R);if(M)throw new Error(`description: ${M}`);let k=K.validatePublisherId(O)||await K.validatePublisherOnline(j,O,S);if(k)throw new Error(`publisher: ${k}`);if(!K.isLibrary(T)&&(await K.validateApplicationIcon(m,w,T),K.validateEngineSettings(T),K.isApp(T)&&await K.isApmPartEnabled(m,w,u0.Part.dlo,T)&&(!T.dpid||!Object.values(K.DeviceProfiles).includes(T.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}D.validatePublishSettings=E;async function u(m,w){let j=Pa.ungzip(m),S=await Qt.TarReader.load(j),T={};for(let q of S.fileInfos)w.includes(q.name)&&(T[q.name]=S.getFileBlob(q.name));return T}D.readFilesFromTarGz=u})(mx||={});function xp(x,A){let e=Object.values(u0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function Ap(x,A,e,r,t,i){await ex.validateMinimumBackendVersion(x,A,e),i.includes(u0.Part.dde)&&await wA.fetchPreviousHistoryJson(x,A,e,r,t)}async function ep(x,A,e,r){r.defaultsOnly?(await lx.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",e0.filePaths.dist.definesTs,"(defaults only)"),await lx.exportDefinesTs(x,A,r,e0.filePaths.dist.definesAppTs),e.log("Generated",e0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await lx.exportDefinesTs(x,A,r),e.log("Generated",e0.filePaths.dist.definesTs))}async function rp(x,A,e){let r=await wA.compileDDE(x,A,e);if(r.ddeJSON){await wA.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await K.read(x,A);K.isLibrary(t)||await wA.exportHistoryJson(x,A,e,r.ddeJSON),await wA.exportOpenApi(x,A,e,r.ddeJSON),await K.isApmPartEnabled(x,A,u0.Part.dlo,t)&&(await wA.exportAutoDloFiles(x,A,e,r.ddeJSON),await Cn.exportDloConfig(x,A,e))}return r.diagnostics}async function tp(x,A,e){let r=new Gr(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function np(x,A,e){return await un.process(x,A,e)}async function ip(x,A,e){let r=await K.read(x,A);K.isLibrary(r)&&await $r.normalizeLibraryParts(x,A,r,e)}async function sp(x,A,e){let r=Er.Utils.joinPath(x,e0.fileNames.reportTemplate);if(await A.stat(r)){let t=Er.Utils.joinPath(x,e0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${e0.fileNames.reportTemplate}" to dist folder.`)}}function ap(x,A,e){A!==u0.Part.dlo&&Fp(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 op(x,A,e,r,t,i){let n=await e(t,i,x);return r.push(...n),ap(x,A,n)}function Fp(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 Ac(x,A,e,r,t){let i=await K.read(x,A);return await K.validateBasicManifest(x,A,i),await mx.buildAll(x,A,e,t,r),await Ur.createArchive(x,A)}async function ec(x,A,e,r,t,i){if(!Object.values(u0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await K.validateBasicManifest(x,A,null),await mx.buildAll(x,A,e,i,r),await u0.createTag(x,A,t)}async function vp(x){let A=new Qt.TarWriter;for(let[r,t]of x.entries())if(r==="tag"){let i=t;A.addFile(r,i)}else{let i=t;A.addFile(r,await i.arrayBuffer())}let e=await A.write();return Pa.gzip(await e.arrayBuffer())}async function lp(x){let A=await cp(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 cp(x,A){let e=Pa.ungzip(x),r=await Qt.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var fp=h0.bufferToBase64;var u0;(u=>{let x;(O=>(O.alpha="alpha",O.beta="beta",O.rc="rc",O.release="release",O.stage="stage",O.passive="passive",O.withdrawn="withdrawn"))(x=u.TagPhase||={});let A;(T=>(T.dde="dde",T.dlo="dlo",T.pov="pov",T.blo="blo",T.dfiles="dfiles"))(A=u.Part||={});function e(D){let{description:m,name:w,pov:j,engines:S,blo:T,publisher:q,type:O}=D,R=O||K.ProjectTypes.app,t0={name:w,abstract:m,author:q||"",pov_location:K.PovLocation.embedded,pov_details_lowlevel:!1,required_be:S?.backend,required_hwfw:S?.hwfw?.join(";"),required_productcode:S?.productId?.join(";"),blo_level:T?.accessLevel||K.BloAccessLevel.restricted,pip_id:""};return j&&j.details&&(t0.pov_location=K.PovLocation.pure,t0.pov_details_lowlevel=!!j.details.lowLevel),R==="addon"&&(t0.required_hwfw=void 0,t0.required_productcode=void 0,t0.addon_max_sources=1,t0.addon_max_per_site=D.maxInstancesPerSite),t0}u.createBaseTagHeader=e;async function r(D,m,w){let j=await K.read(D,m),S=e(j),T={version:j.version,...S,phase:w};return await i(D,m,j,T)}u.createTag=r;async function t(D,m){let w=await K.read(D,m),S={...e(w),blo_autostart:!1};return i(D,m,w,S)}u.createDevTag=t;async function i(D,m,w,j){let S=new FormData;S.append("tag",JSON.stringify(j)),S.append(`src/${K.fileName}`,new Blob([await K.readAsBlob(D,m)]));let T=new Blob([await m.readFile(de.Utils.joinPath(D,e0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",T),w.icon){let O=await m.readFile(de.Utils.joinPath(D,w.icon)),R=fp(O);S.append("previews/00.png",new Blob([`data:image/png;base64,${R}`]))}if(Object.hasOwn(j,"phase")){let O=await mx.getReadmeFile(D,m,j.name),R=await mx.getChangelogFile(D,m);S.append("previews/README.md",new Blob([O])),S.append("previews/CHANGELOG.md",new Blob([R]))}if(await K.isApmPartEnabled(D,m,"dlo")){let O=new Blob([await m.readFile(de.Utils.joinPath(D,e0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",O)}if(await K.isApmPartEnabled(D,m,"pov",w)){await rc(D,m,S,e0.filePaths.dist.povDetailsPath,"bin/pov/details");let O=new TextEncoder().encode('<!DOCTYPE html><html lang="en">');S.append("bin/pov/list/index.html",new Blob([O]))}let q=await m.findFiles(D,`${e0.filePaths.dist.dfilesPath}/*`);for(let O of q){let R=new Blob([await m.readFile(O)]);S.append(`bin/dfiles/${de.Utils.basename(O)}`,R)}return await K.isApmPartEnabled(D,m,"blo",w)&&await rc(D,m,S,e0.filePaths.dist.bloPath,"bin/blo"),await Ep(D,m,S),S}u.createBuffer=i;async function n(D,m,w,j,S){let T=await K.read(D,m);j||await mx.validatePublishSettings(D,m,w,S);let{registry:q}=T,O=q?.id;if(!O&&!j&&(O=await F(D,m,w,T,S)),O){let{publisher:R}=T;if(!R)return null;try{return{id:O,...await vx.getExistingApplication(w,R,O,S)}}catch(t0){if(t0?.message==="Could not find given application")return O=await F(D,m,w,T,S),{id:O,...await vx.getExistingApplication(w,R,O,S)}}}return null}u.validateAccess=n;async function F(D,m,w,j,S){let T="myDatanet",{publisher:q,name:O,description:R,registry:t0}=j,M={id:t0?.id,type:j.type||K.ProjectTypes.app,name:O,targetSystem:T,description:R||"",allowedBackends:null};K.isAddon(j)&&(M.allowedApplications=null);let k=await vx.createNewApplication(w,q,M,S);if(!k)throw new Error("Failed to initialize application");return j.registry={id:k},await K.write(D,m,j),k}u.registerNew=F;async function v(D,m,w,j){let{name:S,publisher:T,description:q,registry:O}=await K.read(D,m),R=O?.id;await vx.updateExistingApplication(w,T,R,{description:q,name:S,targetSystem:"myDatanet"},j)}u.updateProfile=v;async function E(D,m,w,j,S){let{publisher:T,registry:q,version:O}=await K.read(D,m);return await vx.publishApplicationVersion(w,T,q?.id,O,j,S)}u.publishTag=E})(u0||={});async function rc(x,A,e,r,t){let i=await A.findFiles(x,`${r}/**`);for(let n of i){let F=de.Utils.joinPath(x,r),v=n.path.substring(F.path.length+1),E=new Blob([await A.readFile(de.Utils.joinPath(x,`${r}/${v}`))]);e.append(`${t}/${v}`,E)}}async function Ep(x,A,e){let r=de.Utils.joinPath(x,e0.filePaths.dist.reportTemplate);if(await A.stat(r)){let i=new Blob([await A.readFile(r)]);e.append("bin/pov/mdn_report_template.json",i)}let t=de.Utils.joinPath(x,e0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var pc=U0(require("update-notifier"));function Bp(x,A,e){let r=A.split(".").filter(Boolean),t=x;for(let i=0;i<r.length;i++){let n=r[i];i===r.length-1?t[n]=e:((typeof t[n]!="object"||t[n]===null||Array.isArray(t[n]))&&(t[n]={}),t=t[n])}}function tc(x){let A=x.args,e={};for(let r=0;r<A.length;r++){let t=A[r];if(!t||!t.startsWith("--"))continue;let[i,n]=t.split("=",2),F=i.slice(2),v=!0;if(n!==void 0)v=n;else{let E=A[r+1];E&&!E.startsWith("-")&&(v=E,r++)}F.includes(".")?Bp(e,F,v):e[F]=v}return e}var nc=require("vscode-uri");function Ci(x){return x instanceof Error?x.message:String(x)}function ue(x,A){return{success:!1,errorCode:x,message:A}}async function dp(x){let{cwd:A,fs:e,logger:r,env:t,apiToken:i,options:n}=x;r.info("[1/5] Building project...");try{let F=n.part?n.part:!0;return await K.validateBasicManifest(A,e,null),await mx.buildAll(A,e,r,t,i,F,!0),r.done("Build completed successfully"),null}catch(F){return ue(1,`Build failed: ${Ci(F)}`)}}async function up(x){let{logger:A,options:e}=x,{serial:r}=e;A.info(`[2/5] Searching for USB device with serial: ${r}...`);let t=await ia(r,A);return t||ue(2,`USB device not found with serial number: ${r}`)}async function Dp(x){let{cwd:A,fs:e,logger:r,options:t}=x,{serial:i,debug:n}=t;r.info("[3/5] Uploading binary to USB device...");let F=nc.Utils.joinPath(A,e0.filePaths.dist.mainAmxPath),v=await Yr(i,F,e,r,n);return v.success?(r.done("USB upload completed"),null):ue(3,`USB upload failed: ${v.message}`)}async function pp(x,A){A.info("[4/5] Connecting to myDatanet server...");try{return await x.authenticate()}catch(e){return ue(4,`myDatanet authentication failed: ${Ci(e)}`)}}async function bp(x,A,e){if(A)try{let i=await x.getCustomer(A);return e.info(`Using customer: ${i.name} (${i._uid})`),i._uid}catch{return ue(6,`Customer "${A}" not found`)}let r=await x.getCustomers();if(r.length===0)return ue(6,"No customers available. Please specify --customer or set MYDATANET_CUSTOMER");if(r.length===1)return e.info(`Using customer: ${r[0].name} (${r[0]._uid})`),r[0]._uid;let t=r.map(i=>i.name).join(", ");return ue(6,`Multiple customers available. Please specify --customer or set MYDATANET_CUSTOMER. Available: ${t}`)}async function mp(x,A,e,r){let t=await x.getDeviceSite(A);t&&(t.app.phase==="dev"&&(e.apmId=t.app.apmid,e.applicationId=t.app.appl_id),e.siteUid=t._uid,e.siteName=t.name,e.customerUid=t.customer_uid,r.info(`Found existing site: ${t.name}`))}async function hp(x,A,e){let{cwd:r,fs:t,logger:i}=x;i.info("Creating development APM tag...");try{let n=await u0.createDevTag(r,t),F=await A.uploadDevTag(e.apmId,n);return e.applicationId=F,i.done("Development tag uploaded"),null}catch(n){return ue(5,`Development tag upload failed: ${Ci(n)}`)}}async function jp(x,A,e,r){r.info("[5/5] Creating development site...");try{return e.siteUid?(e.siteName!==e.name&&await x.updateSiteName(e.siteUid,e.name),r.info(`Reusing existing site: ${e.siteUid}`),{siteUid:e.siteUid,siteName:e.name}):{siteUid:await x.createDevelopmentSite(A,e),siteName:e.name}}catch(t){return ue(6,`Site creation failed: ${Ci(t)}`)}}function ic(x,A,e=!1){if(e){x.log(JSON.stringify({siteUid:A.siteUid,siteName:A.siteName,apmId:A.apmId}));return}x.done("Development deployment completed successfully!"),x.info(""),x.info("=== Deployment Summary ==="),x.info(`Site UID: ${A.siteUid}`),x.info(`Site Name: ${A.siteName}`),x.info(`APM ID: ${A.apmId}`),x.info("==========================")}function Bi(x){return typeof x=="object"&&x!==null&&"errorCode"in x}async function sc(x,A,e,r,t,i){let n={cwd:x,fs:A,logger:e,env:r,apiToken:t,options:i},{serial:F,server:v,customer:E,mdnToken:u}=i;e.info("Starting development deployment...");let D=await dp(n);if(D)return D;let m=await up(n);if(Bi(m))return m;let w=await Dp(n);if(w)return w;let j=new Ht(v,u,e),S=await pp(j,e);if(Bi(S))return S;let T=S,q=await bp(j,E,e);if(Bi(q))return q;let O=q,R=await ma(x,A,e,F,T.name,O,i.siteName);await mp(j,F,R,e);let t0=await hp(n,j,R);if(t0)return t0;let M=await jp(j,O,R,e);return Bi(M)?M:{success:!0,siteUid:M.siteUid,siteName:M.siteName,apmId:R.apmId,message:"Development deployment completed successfully"}}var Ta="/api/1/sites/dev";function gp(x){let A=x.toUpperCase();return A!=="GET"&&A!=="HEAD"}function qa(x,A){let e=x;try{e=JSON.parse(x).err??x}catch{}let r=/E_NOT_FOUND|E_BAD_REQUEST/.test(e)?8:/E_FORBIDDEN|E_METHOD_NOT_ALLOWED/.test(e)?9:3;return new Q0(`${e} (HTTP ${A})`,r)}function yp(x,A){let e=x.replace(/\/+$/,""),r={"content-type":"application/json"};A&&(r.authorization=`Bearer ${A}`);let t=async(i,n,F)=>fetch(`${e}${n}`,{method:i,headers:r,body:F===void 0?void 0:JSON.stringify(F)});return{async api(i){let n=gp(i.method)&&i.body?JSON.parse(i.body):void 0,F=await t(i.method,i.path,n),v={};return F.headers.forEach((E,u)=>{v[u]=E}),{status:F.status,headers:v,body:await F.text()}},async dev(i,n,F){let v=await t(i,n,F),E=await v.text();if(!v.ok)throw qa(E,v.status);return E?JSON.parse(E):null},async close(){}}}async function kp(x){if(!x.serial)throw new Q0("--serial is required unless --url is given",2);let A=new Le({cwd:x.cwd,fs:x.fs,serial:x.serial,logger:x.logger,build:!1,flash:!1,pollIntervalMs:0,waitMs:x.waitMs,env:x.env,apiToken:x.apiToken,debug:x.debug,createDevice:x.createDevice,transportFactory:x.transportFactory});A.on("error",e=>x.logger.warn(e instanceof Error?e.message:String(e)));try{await A.start()}catch(e){throw await A.stop(),e}return{api:e=>A.handleApi(e),async dev(e,r,t){return wp(A,e,r,t)},close:()=>A.stop()}}function ac(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}async function wp(x,A,e,r){let t=r??{},[i,n=""]=e.split("?"),F=new URLSearchParams(n);switch(`${A} ${i}`){case"GET /dev/status":return x.status();case"GET /dev/state":return x.state();case"POST /dev/at":return{cmd:t.cmd,response:await x.at(String(t.cmd))};case"POST /dev/flash":return x.flash(typeof t.file=="string"?t.file:void 0);case"POST /dev/sync":return x.sync(Array.isArray(t.tags)?t.tags:void 0);case"GET /dev/logs":return{lastSeq:x.logStream.lastSeq,records:x.logStream.since(ac(F,"since",0),ac(F,"limit",500))};default:throw new Q0(`unsupported route ${A} ${i}`,3)}}async function _p(x){return x.url?yp(x.url,x.token):kp(x)}async function De(x,A){let e=await _p(x);try{return await A(e)}finally{await e.close()}}function Na(x){if(x.status>=400)throw qa(x.body,x.status);return x.status===204||x.body===""?null:JSON.parse(x.body)}async function oc(x){return De(x,A=>A.dev("GET","/dev/status"))}async function Fc(x,A){let[e,r]=Ip(A);return De(x,async t=>{let i=Na(await t.api({path:`${Ta}/containers/${encodeURIComponent(e)}`,method:"GET"}));if(!r)return i;let n=i??{},F=Object.keys(n).find(v=>v.toLowerCase()===r.toLowerCase());if(F===void 0)throw new Q0(`unknown field '${r}' in container '${e}'`,8);return{[F]:n[F]}})}async function vc(x,A,e){let r;try{r=JSON.parse(e)}catch(t){throw new Q0(`values are not valid JSON: ${t instanceof Error?t.message:String(t)}`,8)}return De(x,async t=>{let i=`${Ta}/containers/${encodeURIComponent(A)}`,n=await t.api({path:i,method:"PUT",body:JSON.stringify(r)});if(n.status>=400)throw qa(n.body,n.status);let F=n.headers["x-mt-mirror"]==="stale";return{container:A,written:r,stale:F,record:Na(await t.api({path:i,method:"GET"}))}})}async function lc(x,A,e){let r={count:-(e.limit??100)};e.from&&(r.from=e.from),e.to&&(r.until=e.to);let t=`${Ta}/timeseries/${encodeURIComponent(A)}?json=${encodeURIComponent(JSON.stringify(r))}`;return De(x,async i=>Na(await i.api({path:t,method:"GET"})))}async function cc(x,A){return De(x,e=>e.dev("POST","/dev/at",{cmd:A}))}async function fc(x){return De(x,A=>A.dev("GET","/dev/state"))}async function Ec(x,A){return De(x,e=>e.dev("POST","/dev/flash",A?{file:A}:{}))}async function Bc(x,A){return De(x,e=>e.dev("POST","/dev/sync",A?{tags:A}:{}))}var Sp={marker:"live"};function Cc(x){return typeof x=="object"&&x!==null&&x.marker==="live"}async function Pp(x){return(await x.dev("GET","/dev/logs?since=0&limit=1")).lastSeq}function $p(x,A){let e=x.filter?new RegExp(x.filter):null,r=x.sinceMs!==void 0?Date.now()-x.sinceMs:void 0;return t=>{let i=t;r!==void 0&&(i.ts??0)<r||(!e||e.test(i.text??""))&&A(t)}}var $a=500;async function dc(x,A,e){return await x.dev("GET",`/dev/logs?since=${A}&limit=${e}`)}function uc(x,A,e){let r=A;for(let t of x)r=Math.max(r,t.seq),e(t);return r}async function Tp(x,A,e){let r=await dc(x,A,$a);return uc(r.records,A,e)}async function qp(x,A,e){let r=$a;for(;;){let t=await dc(x,A,r);if(t.records.length<r)return uc(t.records,A,e);r+=$a}}async function Np(x,A,e,r){let t=A;for(;Date.now()<e;)await new Promise(i=>setTimeout(i,500)),t=await Tp(x,t,r)}async function Dc(x,A,e){let r=$p(A,e);await De(x,async t=>{let i=A.follow===!0,n=A.replay===!0||A.sinceMs!==void 0,F=i&&!n?await Pp(t):0,v=await qp(t,F,r);i&&n&&e(Sp),i&&await Np(t,v,Date.now()+(A.durationMs??3e4),r)})}function Ip(x){let A=x.indexOf(".");return A<0?[x,void 0]:[x.slice(0,A),x.slice(A+1)]}var uA=new J0.Command,di=(0,pc.default)({pkg:_i}),g0=new WA.Logger,Mp=()=>process.env.NODE_ENV==="local-dev-app"?"./dev/pets-demo":process.env.NODE_ENV==="local-dev-lib"?"./dev/modbus-master":process.env.NODE_ENV==="local-dev-addon"?"./dev/addon":process.env.NODE_ENV==="local-dev-analytics"?"./dev/analytics":"",pe=et.Utils.joinPath(et.URI.file(process.cwd()),Mp());uA.version(_i.version).usage("<command>");uA.description(`This tool is used to manage the project dependencies, build, package and publish the project.
|
|
2338
|
+
`)}function n(F,v,E=!1){let u=Tl(v)?"":'"';E&&(u=""),t(`#define ${F} ${u}${v}${u}`)}return v6(i,n,e),l6(t,i,n,A),B6(t,i,x),C6(t,i,x),r.join(`
|
|
2339
|
+
`)}var Xt=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)||!wa(e.containerType,e.transferDirection)||!e.fields||!this.context&&!H0.hasContainerAppFields(e)||Wt[A].ctype!==qx.cx&&this.context||(this.generateGlobalVarsForContainer(e),this.generateReadWriteFunctions(e));return this.mergeSourceTypes(),{globals:this.pawnGlobalSource,helper:this.pawnHelperSource}}createGlobalVar(A,e,r=""){this.sourceType="globalVariables";let t=e?this.variableNameForPawnDefinition(A,e):A;if(e){let i=this.generateCommentForField(e);i&&(Array.isArray(i)?(this.pawn("/**"),i.forEach(n=>{this.pawn(` * ${n}`)}),this.pawn(" */")):this.pawn(`// ${i}`))}this.pawn(`stock ${t}${e?this.initialiserForGlobalVar(e):r};`)}initialiserForGlobalVar(A){return A.defaultDloDefine===void 0||A.arrayRef||!this.isPlainCellField(A)?"":` = ${A.defaultDloDefine}`}insertSection(A){this.pawn(""),this.pawn("// ============================================================================="),this.pawn(`// ${A}`),this.pawn("// ============================================================================="),this.pawn("")}mergeSourceTypes(){this.sourceType="pawnSource",this.definesSource.length&&(this.insertSection("Defines"),this.pawnGlobalSource.push(...this.definesSource)),this.defaultDefinesSource.length&&(this.insertSection("Field defaults"),this.pawnGlobalSource.push(...this.defaultDefinesSource)),this.globalVariables.length&&(this.insertSection("Global Variables"),this.pawnGlobalSource.push(...this.globalVariables)),this.readWriteSource.length&&(this.insertSection("Internal read/write calls"),this.pawnHelperSource.push(...this.readWriteSource)),this.pawn("")}generateGlobalVarsForContainer(A){this.sourceType="globalVariables",this.pawn(""),this.pawn(`// Container '${A.title.replace("_"," ")}'`),this.pawn("");let e=`DDE_${A.title}`,r=this.createFieldDefaultDefines(e,A);this.generateArrayDefines(e,A,r);for(let t of A.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context||t.arrayRef!==null)continue;let i=this.generateFieldVariableName(e,t);this.createGlobalVar(`${i}`,t)}}createFieldDefaultDefines(A,e){let r=new Map;for(let t of e.fields){if(t.type==="shadow"||t.shadowRef||t.library!==this.context)continue;if(t.arrayRef===null){this.createDefaultDefineForField(`${A}_${t.name}`,t);continue}let i=e.arrays[t.arrayRef.name],n=`${A}_${t.arrayRef.name}`,F="";i.fields?.length&&(F=t.name.split(".")[1],n+=`_${F}`),this.createDefaultDefineForField(n,t),t.defaultDloDefine!==void 0&&(r.has(t.arrayRef.name)||r.set(t.arrayRef.name,new Map),r.get(t.arrayRef.name).set(F,t))}return r}isPlainCellField(A){if(A.type==="struct"||!Vt[A.type])return!1;let e=CA(A);return!e||e==="skip"?!1:!`${e.rwp||""}`.includes("%l")}simpleArrayInitialiser(A){let e=A?.get("");return e?.defaultDloDefine===void 0||!this.isPlainCellField(e)?"":` = [ ${e.defaultDloDefine}, ... ]`}structuredArrayInitialiser(A,e){if(!e?.size||!A.fields?.length)return"";let r=[];for(let i of A.fields){let n=e.get(i.name);if(n!==void 0&&!this.isPlainCellField(n)||!this.isPlainCellField({type:i.type}))return"";r.push(n?.defaultDloDefine??"0")}let t=`[ ${r.join(", ")} ]`;return` = [ ${new Array(A.length).fill(t).join(", ")} ]`}generateArrayDefines(A,e,r){for(let t of Object.values(e.arrays)){if(this.context!==t.library)continue;let i=`${A}_${t.name}_dim`;if(this.sourceType="defines",this.pawn(`#define ${i} ${t.length}`),t.fields){for(let v of t.fields)Vt[v.type]?.isBlob&&v.byteSize&&this.addDefine(`${A}_${t.name}_${v.name}_dim`,v.byteSize);let n={...e};n.fields=[],t.fields.forEach(v=>{n.fields.push({arrayRef:null,shadowRef:null,byteOffset:0,byteSize:v.byteSize,id:v.name,library:t.library,name:v.name,type:v.type,title:null,index:0})});let F=`${A}_${t.name}_def`;this.generateTypeDefinitions(n,F),this.createGlobalVar(`${A}_${t.name}[${i}][${F}]`,void 0,this.structuredArrayInitialiser(t,r.get(t.name)))}else this.createGlobalVar(`${A}_${t.name}[${i}]`,void 0,this.simpleArrayInitialiser(r.get(t.name)))}}generateCommentForField(A){let e=[`@type ${A.type}`];if(A.description&&e.unshift(A.description),A.defaultValue!==void 0){let{value:r,reason:t}=this.parseFieldDefault(A);e.push(`@default ${r} ${t||""}`)}return e}generateFieldVariableName(A,e){let r=`${A}_${e.name}`,t=Object.hasOwn(Vt,e.type)&&Vt[e.type].isBlob,i=e.byteSize;return i&&t&&(this.sourceType="defines",this.pawn(`#define ${A}_${e.name}_dim ${i}`),this.pawn(`#define ${A}_${e.name}_iter() for(new i=0;i<${i};i++)`)),this.sourceType="globalVariables",r}generateTypeDefinitions(A,e){this.sourceType="defines";let r=A.fields;if(!r)return;let t=[];this.pawn(">",`#define ${e} [`);for(let i of r){let n=this.generateFieldTypeDefinition(i,A,t,e);n!==null&&this.pawn(n)}this.pawn("<","]")}handleArrayFieldDedup(A,e,r,t){let i=A.arrayRef;if(i){let v=e.arrays[i.name];if(!r.includes(i.name)&&!v.fields)r.push(i.name);else return null}let n=A.arrayRef?A.arrayRef.name:A.name,F=A.arrayRef?`[${t}_${n}_dim]`:"";return{fieldName:n,fld_dim:F}}generateFieldTypeDefinition(A,e,r,t){if(A.type==="shadow"||A.shadowRef||A.library!==this.context)return null;let i=this.handleArrayFieldDedup(A,e,r,t);if(i===null)return null;let{fieldName:n,fld_dim:F}=i,v="";if(A.type==="struct")v="// ."+n+F;else{let E=CA(A);if(!E)return null;E==="skip"?v=`// skipped - .${n}${F}`:v+=E.rwp.replace("%n",`.${n}${F}`).replace("%l",A.byteSize)}return v+=",",A.library&&(v+=` // declared by ${A.library} library`),v}variableNameForPawnDefinition(A,e){let r=CA(e);return r&&r!=="skip"?r.rwp.replace("%n",`${A}`).replace("%l",e.byteSize):A}createDefaultDefineForField(A,e){if(this.sourceType="defaultDefines",e.scale!==void 0&&this.addDefine(`${A}_scale`,e.scale),e.offset!==void 0&&this.addDefine(`${A}_offset`,e.offset),e.defaultValue!==void 0&&F6(e)){let{value:r,reason:t}=this.parseFieldDefault(e),i=`${A}_default`;this.addDefine(i,r,t)&&(e.defaultDloDefine=i)}}addDefine(A,e,r){return Kt.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=Wt[e],t=`DDE_${A.containerType===qx.aloha?qx.aloha:A.title}`;[L0.both,L0.bothPlus,L0.none,L0.deviceOnly,L0.up,L0.upPlus].includes(A.transferDirection)&&this.generateWriteMethod(t,A),r.ctype===qx.cx&&this.generateReadMethod(t,A)}generateWriteMethod(A,e){this.sourceType="readWrite";let r=`DDE_${e.title}_id`,t=[qx.hx,qx.aloha].includes(e.containerType),i=e.containerType===qx.hx,n=e.containerType===qx.aloha,F=`_${A}_write`,v=ka(this.manifest)?", flags":"",E=i?`stamp${v}`:"",u=ka(this.manifest)?"const stamp=0, const flags=0":"const stamp=0";this.pawn(">",`stock ${F}(${i?u:""}) {`),t&&this.pawn(`dde_wbegin(DDE_${n?qx.aloha:e.title}_id);`),this.generateRWFunctionBody(A,e,"dde_w"),t&&this.pawn(`return dde_wend(${E});`),this.pawn("<","}"),this.pawn(""),this.sourceType="globalVariables";let D=`${A}_transfer`,m=`${A}_persist`,w=this.functionArgumentsForDdeWrite(i,t);if(this.pawn(">",`${this.context?"stock ":""}${D}(${w}) {`),t)this.pawn(`${F}(${E});`);else{let j=e.name.slice(-1);this.pawn(`dde_flush(${j}, immediate);`)}this.pawn("<","}"),this.pawn(""),e.volatile&&(this.pawn(">",`stock ${m}() {`),this.pawn(`return rM2M_CfgFlush(${r});`),this.pawn("<","}"))}functionArgumentsForDdeWrite(A,e){let r=ka(this.manifest)?", const flags=0":"";return A?`const stamp=0${r}`:e?"":"bool:immediate=false"}generateReadMethod(A,e){this.sourceType="readWrite";let r=`_${A}_read`;this.pawn(">",`stock ${r}() {`),this.generateRWFunctionBody(A,e,"dde_r"),this.pawn("<","}"),this.pawn("")}isFieldSkipped(A){return A.type==="shadow"||!!A.shadowRef||A.library!==this.context}emitFieldRW(A,e,r,t,i,n,F){if(!e.arrayRef)return this.emitSingleField(A,e,r,t,F);let v=e.arrayRef.name,E=i.get(v);return E?n.has(v)?F:(n.add(v),this.emitArrayLoop(A,E,r)):this.emitSingleField(A,e,r,t,F)}generateRWFunctionBody(A,e,r){let t=e.fields,i=this.analyzeArrayGroups(t,A,e),n=new Set,F=-1;for(let v of t){if(this.isFieldSkipped(v))continue;let E=CA(v);!E||E==="skip"||(F=this.emitFieldRW(A,v,r,E,i,n,F))}}defaultArgumentFor(A,e){return A.defaultDloDefine===void 0?"":e==="dde_r"||a6(this.manifest)?`, ${A.defaultDloDefine}`:""}emitSingleField(A,e,r,t,i){e.byteOffset!==i&&this.pawn(`_dde_idx = ${e.byteOffset};`);let n="";n+=r,n+=t.rwfunc;let F=`${A}_${e.name}`;return n+=`(${F}`,t.rwlen&&(n+=`, ${e.byteSize}`),n+=this.defaultArgumentFor(e,r),this.pawn(n+");"),e.byteOffset+e.byteSize}emitArrayLoop(A,e,r){this.pawn(">",`for (new _i = 0; _i < ${e.dimDefine}; _i++) {`);let t=-1;for(let i of e.templateFields){let n=CA(i);if(!n||n==="skip")continue;let F=i.byteOffset;F!==t&&this.pawn(`_dde_idx = ${F} + (_i * ${e.stride});`),t=F+i.byteSize;let v=`${A}_${i.name.replace(/\[\d+\]/,"[_i]")}`,E=`${r}${n.rwfunc}(${v}`;n.rwlen&&(E+=`, ${i.byteSize}`),E+=this.defaultArgumentFor(i,r),this.pawn(E+");")}return this.pawn("<","}"),-1}analyzeArrayGroups(A,e,r){let t=this.collectArrayFieldsByIndex(A);return this.buildArrayGroups(t,e,r)}collectArrayFieldsByIndex(A){let e=new Map;for(let r of A){if(this.isFieldSkipped(r)||!r.arrayRef)continue;let t=CA(r);if(!t||t==="skip")continue;let{name:i,index:n}=r.arrayRef;e.has(i)||e.set(i,new Map);let F=e.get(i);F.has(n)||F.set(n,[]),F.get(n).push(r)}return e}validateArrayStride(A,e){let r=e[0].byteOffset-A[0].byteOffset;if(r<=0)return null;for(let t=0;t<A.length;t++)if(e[t].byteOffset-A[t].byteOffset!==r)return null;return r}buildArrayGroups(A,e,r){let t=new Map;for(let[i,n]of A){let F=r.arrays[i];if(!F||F.length<2)continue;let v=n.get(0),E=n.get(1);if(!v||!E||v.length===0||E.length===0||v.length!==E.length)continue;let u=this.validateArrayStride(v,E);u!==null&&t.set(i,{arrayName:i,dimDefine:`${e}_${i}_dim`,stride:u,templateFields:v})}return t}parseFieldDefault(A){let e=CA(A),r=A.defaultValue;function t(n,F){return{value:n,reason:F}}switch(A.type){case"astring":case"nstring":case"cstring":return t(`"${r}"`);case"wstring":return t(`''${r}''`);case"ustring":return t(`/* default not supported: ${r} */`);case"binary":{let F=`{ 0x${(r.substring(2).replace(/\s+/g,"").match(/.{1,2}/g)||[]).join(", 0x")} }`;return t(F)}}if(r==="NaN"){let n=e.rwfunc;return t(`${n}_NaN`.toUpperCase())}let i=this.parseFieldScaleOffset(A);return i?t(i.calculated,i.reason):(r!==void 0&&!Kt.exec(`${r}`)&&A.type.startsWith("float")&&r%1===0&&(r=r.toFixed(A.decimalPlaces||1)),t(`${r}`))}parseFieldScaleOffset(A){let e=A.defaultValue;if(!(!!Kt.exec(`${A.offset}`)||!!Kt.exec(`${A.scale}`)||!!Kt.exec(`${A.defaultValue}`))&&(A.offset!==void 0||A.scale!==void 0)){let t=A.offset!==void 0?Number(A.offset):0,i=A.scale!==void 0?Number(A.scale):1;if(i===0)return null;let n=(Number(e)-t)/i,F=`(defaultValue - offset) / scale -> (${e} - ${t}) / ${i}`;return A.type.startsWith("float")?n%1===0&&(n=n.toFixed(1)):(n=Math.round(n),F=`Rounded value of: ${F}`),{calculated:n,reason:F}}return null}};function d6(x){return`${`onUplinkApply_${x}()`};`}function ql(x,A,e){A.libraries.forEach(r=>{let t=h0.generateHashForLibraryName(r);x(` #ifdef _${t}${e}_${A.title}`),x(` _${t}${e}_${A.title}(); // ${r}`),x(" #endif")})}function u6(x,A){x("stock _onUplinkEvent(ev, param) {"),A.forEach(e=>{let t=`_${h0.generateHashForLibraryName(e)}UplinkEvent`;x(` #ifdef ${t}`),x(` ${t}(ev, param);`),x(" #endif")}),x(" onUplinkEvent(ev, param);"),x("}")}function D6(x){let A=[],e=[];for(let[r,t]of Object.entries(x.containers))Wt[r].ctype===qx.cx&&([L0.up,L0.upPlus,L0.deviceOnly].includes(t.transferDirection)&&e.push(t),[L0.bothPlus,L0.both,L0.downPlus,L0.down].includes(t.transferDirection)&&A.push(t));return{containerApply:A,containerRestore:e}}function p6(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();`),ql(x,e,"Restore"),H0.hasContainerAppFields(e)&&x(` onUplinkRestore_${e.title}();`),x("}");if(x("#pragma warning push"),x("stock _onUplinkRestore(cfgId) {"),A.length){x(" switch(cfgId) {");for(let e of A)x(` case DDE_${e.title}_id: restoreUplink${e.name}(); // ${e.name}`);x(" }")}else x(" #pragma warning disable 203"),x(" // no containers to restore");x("}"),x("#pragma warning pop")}function b6(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();`),ql(x,e,"Apply"),H0.hasContainerAppFields(e)&&x(` ${d6(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 Nl(x,A){let e=[],r=e.push.bind(e);u6(r,A);let{containerApply:t,containerRestore:i}=D6(x);return p6(r,i),b6(r,t),e.join(`
|
|
2340
|
+
`)}var m6=i6.map(x=>`_DDE_${x}_write`);function Il(x){let A=[],e=A.push.bind(A),r=[...m6];for(let[t,i]of Object.entries(x.containers)){let n=wa(i.containerType,i.transferDirection),F=Wt[t];if(!n||!i.fields||F.ctype!==qx.cx)continue;let v=`DDE_${i.name}`,E=`DDE_${i.title}_id`;if([L0.both,L0.bothPlus,L0.none,L0.deviceOnly,L0.up,L0.upPlus].includes(i.transferDirection)){let u=`_${v}_write`;e(`stock ${u}() {`),e(` dde_wbegin(${E});`),Pl(e,i,"write"),e(" return dde_wend();"),e("}"),r.splice(r.indexOf(u),1)}if(F.ctype===qx.cx){let u=`_${v}_read`;e(`stock ${u}() {`),e(` if (dde_rbegin(${E})) return ERROR;`),Pl(e,i,"read"),e(" dde_rend();"),e(" return OK;"),e("}")}}if(r.length){e(""),e("// Dummy functions needed by the dde library");for(let t of r)e(`stock ${t}() { return OK; }`)}return A.join(`
|
|
2341
|
+
`)}function Pl(x,A,e){A.libraries.forEach(r=>{let t=h0.generateHashForLibraryName(r);x(` #ifdef __${t}${A.title}_${e}`),x(` __${t}${A.title}_${e}();`),x(" #endif")}),H0.hasContainerAppFields(A)&&(x(` #ifdef _DDE_${A.title}_${e}`),x(` _DDE_${A.title}_${e}();`),x(" #endif"))}async function Ml(x,A){let e=[],r=await ex.getApmPartDependencies(x,A,u0.Part.dlo,!0);await zt(x,A,e,e0.fileNames.autoInc);let t=await h6(x,A,r);for(let i of r)i.name==="local-data-interface"&&await zt(x,A,e,e0.fileNames.autoLocalDataInc),e.push(`#include <${i.name}>`),i.name==="dlo-core"&&(e.push(...t),await zt(x,A,e,e0.fileNames.autoDdeInc.replace("X","app")),await zt(x,A,e,e0.fileNames.autoDdeInc.replace("X","main")));return r.some(i=>i.name==="dlo-core")&&await zt(x,A,e,e0.fileNames.autoUplinkInc),e.join(`
|
|
2342
|
+
`)}async function h6(x,A,e){let r=[];for(let t of e){let i=e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",t.name);await A.stat(_a.Utils.joinPath(x,i))&&r.push(`#include "${e0.fileNames.autoDdeInc.replace("X",t.name)}"`)}return r}async function zt(x,A,e,r){let t=_a.Utils.joinPath(x,e0.filePaths.studio.auto.dlo.path,r);await A.stat(t)&&e.push(`#include "${r}"`)}var Rl=U0(require("semver")),Ol=require("yaml");var dA=H0.ContainerType,vi=H0.TransferDirection,j6=H0.fieldTypeDefinitions,At={$ref:"#/components/parameters/contextId"},g6={$ref:"#/components/parameters/addonId"},y6={$ref:"#/components/parameters/appId"},Ll={$ref:"#/components/schemas/histdataResponse"},k6={$ref:"#/components/schemas/histdataRequest"},li={$ref:"#/components/schemas/rapidM2MStamp"},w6={$ref:"#/components/schemas/timeseriesRequestBase"},Fi="rapidM2M Stamp",TA={description:"Successful operation"},Gl={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"'}}},Ul={...structuredClone(Gl)};Object.assign(Ul.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:[li,{type:"string"},{type:"number"}]}}},histdataRequest:{type:"object",additionalProperties:!1,required:["from","until"],properties:{from:{type:"string",format:Fi,description:"items to include must be older or equal, UTC w/o time saving."},until:{type:"string",format:Fi,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:Fi,description:"items to include must be older or equal, UTC w/o time saving"},until:{type:"string",format:Fi,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 Yt={content:{"application/json":{schema:{type:"object",additionalProperties:!1,properties:{err:{type:"string",description:"Information what went wrong"}}}}}},Ue={401:{description:"Permission denied",...Yt},403:{description:"Forbidden",...Yt},404:{description:"Resource not found",...Yt},500:{description:"Internal error",...Yt}};function Pa(x,A,e=null){let r=Rl.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(Gl)):Object.assign(t.components,structuredClone(Ul));let i=J.isAddon(A),n=J.isAnalytics(A);i&&(t.components.parameters.addonId={name:"addonUid",in:"path",description:"The addon uid",schema:{type:"string"},required:!0});for(let F of Object.values(x.containers))e&&(!F.libraries.includes(e)||F.containerType===dA.hx)||!e&&!H0.hasContainerAppFields(F)||F.containerType===dA.aloha||(_6(t,F),P6(t,F,e),q6(t,F,i,n),!i&&!n&&(S6(t,F,e),$6(t,F)));return t.tags.push({name:"app-center",description:"App Center related routes"}),(0,Ol.stringify)(t)}function _6(x,A){x.tags.push({name:tA(A.title),description:`Transfer direction ${A.transferDirection}`})}function tA(x){return x.split("_").join(" ")}function S6(x,A,e){let r=`${A.name}`,t={type:"object",description:`Container: "${A.title}"`,additionalProperties:!1,properties:{}},i=[];A.containerType===dA.hx&&(r+="Select",i.push("select"),t.properties.select={type:"array",items:{type:"string",enum:[]}});for(let n of A.fields)n.library!==e||n.type==="shadow"||(A.containerType===dA.hx?t.properties.select.items.enum.push(n.id):(t.properties[n.id]=Hl(n),!n.readPermission&&!n.writePermission&&i.push(n.id)));t.required=i.length?i:void 0,x.components.schemas[r]=t}function P6(x,A,e=null){let r=`${A.title}`,t={type:"object",description:`Container: "${A.title}" with device transfer direction "${A.transferDirection}"`,additionalProperties:!1,properties:{}},i=[],n=A.containerType===dA.hx;for(let v of A.fields)v.library!==e||v.type==="shadow"||(t.properties[v.name]=Hl(v),!v.readPermission&&!v.writePermission&&i.push(v.name));t.required=i.length?i:void 0,x.components.schemas[r]=t;let F=t.properties;if(n){t.required=t.required?.map(E=>E.toLowerCase());let v={};for(let[E,u]of Object.entries(t.properties))v[E.toLowerCase()]=u;t.properties=v}if(n){let v={type:"object",description:`Request schema of "${A.title}"`,additionalProperties:!1,properties:{select:{type:"array",description:"Optional selection of specific fields of the given container",items:{type:"string",enum:Object.keys(F)}}}};x.components.schemas[`${r}RequestSingle`]=v,x.components.schemas[`${r}Request`]={allOf:[w6,v]},t.properties.stamp=li,i.push("stamp")}}function Hl(x){let e={...j6[x.type].openApi},r=T6(x);return e.default=r,e.example=r,e.description=x.description,e}function T6(x){return x.defaultValue===void 0?x.defaultValue:x.type==="binary"?`${x.defaultValue.substring(2)}`:x.defaultValue}function $6(x,A){let e=`/api/1/sites/{siteUid}/${A.name}`,r={get:void 0,put:void 0};if([dA.cx,dA.cb].includes(A.containerType))r.get={deprecated:!0,tags:[tA(A.title)],summary:`Retrieve the data of the "${tA(A.title)}" container`,parameters:[At],responses:{200:{...TA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:li}},{$ref:`#/components/schemas/${A.name}`}]}}}},...Ue}},[vi.down,vi.backendOnly].includes(A.transferDirection)&&(r.put={deprecated:!0,tags:[tA(A.title)],summary:`Modify the data of the "${tA(A.title)}" container`,parameters:[At],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.name}`}}}},responses:{201:{...TA},204:{...TA},...Ue}});else if(A.containerType===dA.hx){let t=`${e}`;e+="/youngest",r.get={deprecated:!0,tags:[tA(A.title)],summary:`Retrieve the youngest data of the "${tA(A.title)}" container`,parameters:[At,{name:"json",in:"query",required:!0,schema:{$ref:`#/components/schemas/${A.name}Select`}}],responses:{200:{...TA,content:{"application/json":{schema:Ll}}},...Ue}},x.paths[t]={get:{deprecated:!0,tags:[tA(A.title)],summary:`Get the historical data of the "${tA(A.title)}" container.`,parameters:[At,{name:"json",in:"query",required:!0,schema:{allOf:[{$ref:`#/components/schemas/${A.name}Select`},k6]}}],responses:{200:{...TA,content:{"application/json":{schema:Ll}}},...Ue}}}}x.paths[e]=r}function q6(x,A,e=!1,r=!1){let i=A.containerType===dA.hx?"timeseries":"containers",n=[],F=tA(A.title);r||n.push({path:`/api/1/sites/{siteUid}/${i}/${A.title}`,params:[At],tags:[F]}),e&&(n=[{path:`/api/1/sites/{siteUid}/addons/{addonUid}/${i}/${A.title}`,params:[At,g6],tags:[F]}]);let v={path:`/api/1/app-center/apps/{appUid}/${i}/${A.title}`,params:[y6],tags:["app-center"]};r&&v.tags.push(F),n.push(v);let E={get:void 0,put:void 0,post:void 0},u={tags:[],summary:`Retrieve the data of the "${tA(A.title)}" container`,parameters:[],responses:{200:{...TA,content:{"application/json":{schema:{allOf:[{type:"object",required:["stamp"],properties:{stamp:li}},{$ref:`#/components/schemas/${A.title}`}]}}}},...Ue}};if([dA.cx,dA.cb].includes(A.containerType)&&(E.get=u,[vi.down,vi.backendOnly].includes(A.transferDirection)&&(E.put={tags:[],summary:`Modify the data of the "${tA(A.title)}" container`,parameters:[],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...TA},204:{...TA},...Ue}}),n.forEach(D=>{let m=structuredClone(E);Object.values(m).forEach(w=>{w?.parameters?.unshift(...D.params),w?.tags?.unshift(...D.tags)}),x.paths[D.path]=m})),A.containerType===dA.hx){E.get={tags:[],summary:`Get the historical data of "${A.title}"`,parameters:[{name:"json",in:"query",required:!1,schema:{$ref:`#/components/schemas/${A.title}Request`}}],responses:{200:{...TA,content:{"application/json":{schema:{type:"array",items:{$ref:`#/components/schemas/${A.title}`}}}}},...Ue}},e&&(E.post={tags:[],summary:`Insert data into the "${tA(A.title)}" container`,parameters:[{name:"allow_future_date",in:"query",description:"Allow inserting records with a stamp value in the future",schema:{type:"boolean"}}],requestBody:{content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},responses:{201:{...TA},400:{description:"Bad request",...Yt},...Ue}});let D=n[0],m=structuredClone(E);Object.values(m).forEach(O=>{O?.parameters?.unshift(...D.params),O?.tags?.unshift(...D.tags)}),x.paths[D.path]=m;let w={...TA,content:{"application/json":{schema:{$ref:`#/components/schemas/${A.title}`}}}},j=`${D.path}/youngest`,S={get:structuredClone(m.get)};S.get.summary=`Get the youngest record of "${A.title}" container`,S.get.responses[200]=w;let $=e?2:1;S.get.parameters[$].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[j]=S;let q=`${D.path}/oldest`,R={get:structuredClone(m.get)};R.get.summary=`Get the oldest record of "${A.title}" container`,R.get.responses[200]=w,R.get.parameters[$].schema.$ref=`#/components/schemas/${A.title}RequestSingle`,x.paths[q]=R}}var Kl=H0.TransferDirection,ci=" new szTemp{64};",fi=" return strcat(aData, szTemp, sizeof(szTemp));";function zl(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 Ta(x){if(x.type==="shadow"||x.shadowRef)return null;let A=CA(x);return!A||A==="skip"?null:zl(A)}function Vl(x){return[H0.ContainerType.hx,H0.ContainerType.cx].includes(x.containerType)&&x.transferDirection!==Kl.backendOnly}function N6(x){if(x.type==="shadow"||x.shadowRef)return!1;let A=CA(x);return!!A&&A!=="skip"}function I6(x,A,e){let r=x.name.indexOf("]"),t=r>=0?x.name.substring(r+1):"",i=`${x.arrayRef.name}|${t}|${A}`;e.has(i)||e.set(i,{fields:[],formatType:A}),e.get(i).fields.push(x)}function M6(x){let A=[],e=new Map,r=new Set,t=!1;for(let i of x){if(!N6(i))continue;let n=Ta(i);i.arrayRef&&n?I6(i,n,e):(A.push(i),n?r.add(n):t=!0)}return{standaloneFields:A,groupMap:e,usedFormats:r,hasInlineFields:t}}function L6(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?`_${h0.generateHashForLibraryName(e[0].library)}`:"DDE_";return{arrayName:n,subField:F,fields:e,startOffset:r[0],endOffset:r[r.length-1],step:t,formatType:Ta(e[0]),pawnVarBase:`${v}${x}_${n}`}}function R6(x,A){let{standaloneFields:e,groupMap:r,usedFormats:t,hasInlineFields:i}=M6(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=L6(x,F,E);D?(t.add(u),n.push(D)):(e.push(...E),t.add(u))}return e.sort((F,v)=>F.byteOffset-v.byteOffset),{arrayGroups:n,standaloneFields:e,usedFormats:t,hasInlineFields:i}}function O6(x){let A=new Set;for(let[,e]of Object.entries(x.containers))if(Vl(e))for(let r of e.fields){let t=Ta(r);t&&A.add(t)}return A}function G6(x,A){A.has("d")&&(x("stock _DDE_fmt_d(aData{}, value) {"),x(ci),x(' sprintf(szTemp, _, "%d", value);'),x(fi),x("}")),A.has("f")&&(x(""),x("stock _DDE_fmt_f(aData{}, Float:value) {"),x(ci),x(' sprintf(szTemp, _, "%.3f", value);'),x(fi),x("}")),A.has("s")&&(x(""),x("stock _DDE_fmt_s(aData{}, value{}) {"),x(ci),x(' sprintf(szTemp, _, "%s", value);'),x(fi),x("}")),A.has("stamp")&&(x(""),x("stock _DDE_fmt_stamp(aData{}, value) {"),x(ci),x(' sprintf(szTemp, _, "%s", (stampToISOString(value)));'),x(fi),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 U6(x,A){return A===1?x===0?"idx":`idx - ${x}`:x===0?`idx / ${A}`:`(idx - ${x}) / ${A}`}function H6(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 J6(x,A){let{startOffset:e,endOffset:r,step:t,formatType:i,pawnVarBase:n,subField:F}=A,v=U6(e,t),E=H6(e,r,t);if(x(` if (${E}) {`),i==="bin"){let u=`${n}[${v}]${F}`,D=F?F.substring(1):"",m=D?`${n}_${D}_dim`:`${n}_dim`;x(` return _DDE_fmt_bin(aData, ${u}, ${m});`)}else x(` return _DDE_fmt_${i}(aData, ${n}[${v}]${F});`);x(" }")}function K6(x,A,e){if(e.type==="shadow"||e.shadowRef)return;let r=CA(e);if(!r||r==="skip")return;let i=`${e.library?`_${h0.generateHashForLibraryName(e.library)}`:"DDE_"}${A}_${e.name}`,n=zl(r);if(n==="bin")x(` case ${e.byteOffset}: return _DDE_fmt_bin(aData, ${i}, ${i}_dim);`);else if(n)x(` case ${e.byteOffset}: return _DDE_fmt_${n}(aData, ${i});`);else{if(x(` case ${e.byteOffset}: {`),r.printf){let F=i;r.printfFormat&&(F=`(${r.printfFormat}(${F}))`),x(` sprintf(szTemp, _, "${r.printf}", ${F});`),x(" return (strcat(aData, szTemp, sizeof(szTemp)));")}x(" }")}}function z6(x,A,e){x(` case '${A.at(-1)}': {`),x(` return _DDE_local_${e.title}(aData, idx);`),x(" }")}function Jl(x,A,e){let r=e===H0.ContainerType.cx?"c":"h",t=e===H0.ContainerType.cx?"config":"histdata";x(` if(cname{0} == '${r}'){`),x(" switch(cname{1}) {");for(let[i,n]of Object.entries(A.containers))e===n.containerType&&i.startsWith(t)&&n.transferDirection!==Kl.backendOnly&&z6(x,i,n);x(" default:"),x(" return OK;"),x(" }"),x(" return OK;"),x(" }")}function V6(x,A){let e=R6(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)J6(x,r);if(e.standaloneFields.length>0){x(" switch(idx) {");for(let r of e.standaloneFields)K6(x,A.title,r);x(" default:"),x(" return OK;"),x(" }")}x(" return OK;"),x("}")}function W6(x,A){for(let[,e]of Object.entries(A.containers))Vl(e)&&V6(x,e)}function Wl(x){let A=[],e=A.push.bind(A),r=O6(x);return G6(e,r),r.size>0&&e(""),e("stock DDE_get_local_data(cname{}, aData{}, idx) {"),Jl(e,x,H0.ContainerType.cx),Jl(e,x,H0.ContainerType.hx),e(" return OK;"),e("}"),W6(e,x),A.join(`
|
|
2343
|
+
`)}var Zl=h0.yamlRangeToLineInformation,Qt=e0.filePaths.dde.path,_A;(r0=>{let x=H0.DDEJson,A=h0.convertBlobToString;r0.DDE_SCHEMA=_o;async function r(I,k){let L=await k.readFile(I);return A(L)}r0.readYamlFile=r;async function t(I,k,L=e0.fileNames.mainDDE,W){let Q=[],H=await J.read(I,k),K=await Xl(I,k,H);if(W)for(let Z of K){let{result:o0,unresolvedKeys:G}=lx.replaceDefineTemplates(Z.yaml,W);Z.yaml=o0;for(let s0 of G)Q.push({file:Z.path,level:"error",message:`Unresolved define template: {{${s0}}}`,line:0,startCharacter:0,endCharacter:0})}for(let Z of K)Q.push(...v(Z.path,Z.yaml));let a0=hx.Utils.joinPath(I,Qt,L),n0=await r(a0,k);if(W){let{result:Z,unresolvedKeys:o0}=lx.replaceDefineTemplates(n0,W);n0=Z;for(let G of o0)Q.push({file:a0,level:"error",message:`Unresolved define template: {{${G}}}`,line:0,startCharacter:0,endCharacter:0})}return Q.push(...v(a0,n0)),{manifest:H,libraryFiles:K,main:{path:a0,yaml:n0},diagnostics:Q}}r0.validate=t;async function i(I,k,L,W=e0.fileNames.mainDDE){let Q=await J.read(I,k),H=await lx.read(I,k,L),K=await t(I,k,W,H.flat);if(K.diagnostics.filter(B0=>B0.level==="error").length>0)return{ddeJSON:null,diagnostics:K.diagnostics};let n0=await w(I,k,L),Z=new ai.PreCompiler(Q,K.libraryFiles,n0),o0=Z.parseLibraries();if(o0.find(B0=>B0.level==="error"))return{ddeJSON:null,diagnostics:[...K.diagnostics,...o0]};let{ddeJSON:s0,diagnostics:l0}=Z.parseMainDDE(K.main.path,K.main.yaml);return{ddeJSON:s0,diagnostics:[...K.diagnostics,...l0]}}r0.compileDDE=i;let n=new Yl.default({strict:!1,allErrors:!0,verbose:!0});(0,Ql.default)(n);let F=n.compile(r0.DDE_SCHEMA);function v(I,k){let L=new Ei.LineCounter,W=(0,Ei.parseDocument)(k,{lineCounter:L,keepSourceTokens:!0}),Q=[];for(let a0 of W.errors){let n0=a0.pos?Zl(L,[a0.pos[0],a0.pos[1],a0.pos[1]]):{line:0,startCharacter:0,endCharacter:0};Q.push({file:I,level:"error",message:a0.message,...n0})}if(Q.length>0)return Q;let H=W.toJSON();if(!F(H)){let n0=(F.errors||[]).filter(o0=>o0.keyword!=="if"),Z=new Set;for(let o0 of n0){let G=Q6(o0);if(Z.has(G))continue;Z.add(G);let s0=x7(W,L,o0);Q.push({file:I,level:"error",message:G,...s0})}}return Q}r0.validateJsonSchema=v,r0.PreCompiler=(I,k,L)=>new ai.PreCompiler(I,k,L);function u(I,k){return ya(I,k)}r0.generateMyDatanetXML=u;async function D(I,k,L,W){let Q=await J.read(I,k),H=ya(Q,W),K=hx.Utils.joinPath(I,e0.filePaths.dist.ddeXmlPath);await k.writeFile(K,H),L.log("Generated",e0.filePaths.dist.ddeXmlPath)}r0.exportMyDatanetXML=D;async function m(I,k,L,W,Q){let H=hx.Utils.joinPath(I,e0.filePaths.studio.auto.dde.historyJson);await k.rm(H).catch(console.error);let K=await J.read(I,k);if(!J.isApp(K)||!K.registry?.id)return;if(!Q){L.warn("Could not fetch dde of previous version: No API token provided.");return}let a0=Ae.coerce(K.version);try{let o0=(await vx.getExistingApplication(Q,K.publisher,K.registry.id,W)).versions.find(B0=>!Ae.prerelease(B0.version)&&Ae.lte(B0.version,a0)),G=o0?.files.find(B0=>B0.name==="dde.json");if(!G){L.warn("Could not find a valid previous released app version to fetch the previous dde from.");return}let s0=await fetch(G.downloadUrl,{headers:{...lA(Q),...vx.injectSemverHeader(!0)}});if(s0.status!==200){L.warn(`Could not fetch the dde.json of version "${o0?.version}"`);return}let l0=await s0.text();await k.writeFile(H,l0),L.log(`Saved history.json of previous app version ${o0.version}`)}catch(n0){L.error("Failed to fetch the dde of previous version",n0)}}r0.fetchPreviousHistoryJson=m;async function w(I,k,L){try{let W=hx.Utils.joinPath(I,e0.filePaths.studio.auto.dde.historyJson);if(await k.stat(W)){let H=await k.readFile(W);return JSON.parse(A(H))}let Q=hx.Utils.joinPath(I,Qt,"history.json");if(await k.stat(Q)){L.warn(`"${e0.filePaths.studio.auto.dde.historyJson}" does not exist - fallback to "${Qt}history.json"`);let H=await k.readFile(Q),K=JSON.parse(A(H)),a0=await J.read(I,k),n0=Ae.coerce(a0.version)?.version,Z=Object.keys(K||{}).sort(Ae.rcompare).find(G=>G!==n0);if(!Z)return null;let o0=K[Z];return{version:Z,...o0}}}catch(W){L.error("Failed to read history.json",W)}return L.warn("history.json does not exist"),null}r0.getHistoryJson=w;function j(I,k){return{version:Ae.coerce(k.version)?.version||"1.0.0",...structuredClone(I)}}r0.buildHistoryJson=j;async function S(I,k,L,W){let Q=await J.read(I,k),H=j(W,Q),K=hx.Utils.joinPath(I,e0.filePaths.dist.historyJson);await k.writeFile(K,JSON.stringify(H,null," ")),L.log("Generated",e0.filePaths.dist.historyJson)}r0.exportHistoryJson=S;async function $(I,k){return k.rm(hx.Utils.joinPath(I,e0.filePaths.studio.auto.dlo.path))}r0.clearAutoDloDir=$;async function q(I,k,L,W){await $(I,k);let Q=await J.read(I,k),H=await Xl(I,k,Q),K=await lx.read(I,k,L),a0=$l(W,K,Q),Z=new Xt(Q,W,null).generate();for(let ox of H){let Qx=new Xt(Q,W,ox.libraryName),{globals:$A,helper:qA}=Qx.generate(),cx=[...$A,...qA].join(`\r
|
|
2344
|
+
`),tx=e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X",ox.libraryName),nA=hx.Utils.joinPath(I,tx);cx.length&&(L.log("Generated",tx),await k.writeFile(nA,cx))}let o0=Il(W),G=Nl(W,H.map(ox=>ox.libraryName)),s0=Wl(W),l0=hx.Utils.joinPath(I,e0.filePaths.studio.auto.dlo.autoInc);await k.writeFile(l0,a0),L.log("Generated",e0.filePaths.studio.auto.dlo.autoInc);let B0=hx.Utils.joinPath(I,e0.filePaths.studio.auto.dlo.autoUplinkInc);await k.writeFile(B0,G),L.log("Generated",e0.filePaths.studio.auto.dlo.autoUplinkInc);let C0=hx.Utils.joinPath(I,e0.filePaths.studio.auto.dlo.autoLocalDataInc);await k.writeFile(C0,s0),L.log("Generated",e0.filePaths.studio.auto.dlo.autoLocalDataInc);let _0=hx.Utils.joinPath(I,e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));await k.writeFile(_0,[...Z.globals,...Z.helper].join(`
|
|
2345
|
+
`)),L.log("Generated",e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","app"));let T0=hx.Utils.joinPath(I,e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main"));await k.writeFile(T0,o0),L.log("Generated",e0.filePaths.studio.auto.dlo.autoDdeInc.replace("X","main")),await O(I,k,L)}r0.exportAutoDloFiles=q;async function R(I,k,L,W){let Q=await J.read(I,k),H=J.isLibrary(Q),K=hx.Utils.joinPath(I,e0.filePaths.dist.path,"dde-api.yaml");await k.rm(K).catch(()=>{});let a0=hx.Utils.joinPath(I,e0.filePaths.dist.ddeApi);if(await k.writeFile(a0,Pa(W,Q)),L.log("Generated",e0.filePaths.dist.ddeApi),H){let n0=hx.Utils.joinPath(I,e0.filePaths.dist.ddeApiPath,`${Q.name}.yaml`),Z=Pa(W,Q,Q.name);Z.length&&(await k.writeFile(n0,Z),L.log("Generated",e0.filePaths.dist.ddeApiPath+`${Q.name}.yaml`))}}r0.exportOpenApi=R;async function O(I,k,L){let W=hx.Utils.joinPath(I,e0.filePaths.studio.auto.dlo.defaultInc),Q=await Ml(I,k);await k.writeFile(W,Q),L.log("Generated",e0.filePaths.studio.auto.dlo.defaultInc)}r0.exportDefaultInc=O})(_A||={});async function Xl(x,A,e){let r=[],t=await ex.getAll(e);for(let i in t){let n=ex.dependencyToPath(x,i),F=ex.dependencyIdToName(i),v=hx.Utils.joinPath(n,`${Qt}/${F}.dde`);await A.stat(v)&&r.push({libraryName:F,path:v,yaml:await _A.readYamlFile(v,A)})}if(J.isLibrary(e)){let i=hx.Utils.joinPath(x,`/${Qt}/${e.name}.dde`);await A.stat(i)&&r.push({libraryName:e.name,path:i,yaml:await _A.readYamlFile(i,A)})}return r}function X6(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 Y6(x,A,e,r){let i={required:()=>`Missing required property '${A.missingProperty}'.`,additionalProperties:()=>`Unknown property '${A.additionalProperty}' is not allowed.`,type:()=>`Must be of type '${A.type}'.`,enum:()=>`Must be one of the allowed values: ${JSON.stringify(A.allowedValues)}.`,pattern:()=>`Value does not match the required pattern. ${r?.patternErrorMessage??e}`,minimum:()=>`${e}.`,maximum:()=>`${e}.`,exclusiveMinimum:()=>`${e}.`,exclusiveMaximum:()=>`${e}.`,not:()=>`This value is not allowed here. ${r?.description??""}`.trimEnd(),anyOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd(),oneOf:()=>`Value does not match any of the allowed schemas. ${r?.description??""}`.trimEnd()}[x];return i?i():e}function Q6(x){let A=x.instancePath||"/",e=x.parentSchema,r=X6(e?.errorMessage,x.keyword,x.params);if(r)return`${A}: ${r}`;let t=x.message||"unknown validation error";return`${A}: ${Y6(x.keyword,x.params,t,e)}`}function Z6(x,A){let e=A.split("/").filter(Boolean).map(r=>{let t=Number(r);return Number.isNaN(t)?r:t});for(let r=e.length;r>=0;r--){let t=e.slice(0,r),i=x.getIn(t,!0);if(i?.range)return i.range}return null}function x7(x,A,e){let r=Z6(x,e.instancePath||"");return r?Zl(A,r):{line:0,startCharacter:0,endCharacter:0}}var $a=require("vscode-uri");var Ac=U0(require("node:child_process"));var Bi;(e=>{async function x(r,t,i){let n=await J.read(r,t);if(await J.isApmPartEnabled(r,t,u0.Part.pov)){i.info("Executing POV build script",n.pov?.details.buildCommand);let{buildCommand:F,workingPath:v}=n.pov.details,E=$a.Utils.joinPath(r,v);try{await xc(E,F,i)}catch(u){throw u.code?new Error(`APM part '${u0.Part.pov}' has errors. Aborted.`):u}}}e.tryBuildPov=x;async function A(r,t,i){let n=await J.read(r,t);if(await J.isApmPartEnabled(r,t,u0.Part.blo,n)){i.info("Executing BLO build script",n.blo?.buildCommand);let{buildCommand:F,workingPath:v}=n.blo,E=$a.Utils.joinPath(r,v);try{await xc(E,F,i)}catch(u){throw u.code?new Error(`APM part '${u0.Part.blo}' has errors. Aborted.`):u}}}e.tryBuildBlo=A})(Bi||={});async function xc(x,A,e){return new Promise((r,t)=>{Ac.exec(A,{cwd:x.fsPath,env:process.env},(i,n,F)=>{e.log(n),F&&e.error(F),i&&t(i),r(null)})})}var Zt=require("@gera2ld/tarjs"),ec=h0.convertBlobToString,qa=require("pako"),mx;(D=>{class x extends Error{_mergedDiagnostics;constructor(w,j){super(w),this.name="BuildError",this._mergedDiagnostics=j}get mergedDiagnostics(){return this._mergedDiagnostics}}D.BuildError=x;async function A(m,w,j,S,$,q=!0,R){q=A7(j,q),await e7(m,w,j,S,$,q);try{let I=await lx.read(m,w,j);await r7(m,w,j,I)}catch(I){j.warn("Could not generate defines.ts:",I)}let O={[u0.Part.dde]:[],[u0.Part.dlo]:[],[u0.Part.dfiles]:[]},r0={[u0.Part.dde]:t7,[u0.Part.dlo]:n7,[u0.Part.dfiles]:i7};try{for(let I of[u0.Part.dde,u0.Part.dlo,u0.Part.dfiles])if(q.includes(I)&&(j.info(`Building ${I.toUpperCase()}...`),await F7(j,I,r0[I],O[I],m,w)))return O}catch(I){throw R?new x(I?.message,O):I}return q.includes(u0.Part.pov)?await Bi.tryBuildPov(m,w,j):j.info("Skipping pov build"),q.includes(u0.Part.blo)?await Bi.tryBuildBlo(m,w,j):j.info("Skipping blo build"),await s7(m,w,j),await a7(m,w,j),j.done("Project build completed."),O}D.buildAll=A;async function e(m,w,j,S,$,q,R){let O=await J.read(m,w);return J.isLibrary(O)?(j.info("Library project detected. Publishing library..."),i(m,w,j,$,S)):(j.info("App project detected. Publishing app..."),t(m,w,j,$,q,R,S))}D.release=e;async function r(m,w,j,S,$,q){let R=await J.read(m,w),O=`${R.name}-${R.version}.tar.gz`,r0=null;if(J.isLibrary(R))j.info("Library project detected. Packing library..."),r0=await rc(m,w,j,$,S);else{j.info("App project detected. Packing app...");let k=await tc(m,w,j,$,q,S);r0=await l7(k)}let I=Br.Utils.joinPath(m,O);r0!==null?(await w.writeFile(I,r0),j.done(`Packaged: ${I.fsPath}`)):j.error(`Could not create archive: ${I.fsPath}`)}D.pack=r;async function t(m,w,j,S,$,q=null,R){if(!await u0.validateAccess(m,w,S,!1,R))throw new Error("Could not validate access to application");let r0=await tc(m,w,j,S,$,R);await u0.updateProfile(m,w,S,R);let I=await u0.publishTag(m,w,S,r0,R);if(q!==null){let k=await J.read(m,w);await vx.updateExistingApplicationVersion(S,k.publisher,k.registry?.id,k.version,{allowedBackends:q},R),j.info(`Tag "${I.version}" with phase "${I.phase}" shared with ${[...q].join(";")}!`)}j.done(`Tag "${I.version}" with phase "${I.phase}" published!`)}D.releaseAPM=t;async function i(m,w,j,S,$){let q=await J.read(m,w),R=await rc(m,w,j,S,$);await Hr.publishPackage(S,q,R,$),j.done(`Library "${q.publisher}/${q.name}" with version "${q.version}" published!`)}D.releaseLibrary=i;async function n(m,w,j,S,$,q,R,O=null){if(q==="*"){let H=await J.read(m,w);q=`${H.name}-${H.version}.tar.gz`,j.info(`Publishing detected archive package "${q}"...`)}let r0=Br.Utils.joinPath(m,q);if(!await w.stat(r0))throw new Error(`Archive package not found: ${r0.fsPath}`);let I=await w.readFile(r0),k=await c7(I),{publisher:L,registry:W,version:Q}=k;J.isLibrary(k)?(await Hr.publishPackage(S,k,I,$),j.done(`Library "${L}/${k.name}" with version "${k.version}" published!`)):(await vx.updateApplicationFile(S,L,W.id,Q,"app.tar.gz",I,$),await vx.updateExistingApplicationVersion(S,L,W?.id,Q,{allowedBackends:O||void 0,phase:R||void 0},$),j.info(`Tag "${Q}" with phase "${R}" shared with ${[...O||""].join(";")}!`),j.done(`Tag "${Q}" with phase "${R}" published!`))}D.publishArchive=n;async function F(m,w,j){let S;try{S=await w.readFile(Br.Utils.joinPath(m,"README.md"))}catch{throw new Error('Could not find "README.md". "README.md" is required for publishing.')}if(ec(S)===e0.readme(j))throw new Error('"README.md" matches the default template. Please write a brief project description.');return S}D.getReadmeFile=F;async function v(m,w){let j;try{j=await w.readFile(Br.Utils.joinPath(m,"CHANGELOG.md"))}catch{throw new Error('Could not find "CHANGELOG.md". "CHANGELOG.md" is required for publishing.')}if(ec(j)===e0.changelog)throw new Error('"CHANGELOG.md" matches the default template.');return j}D.getChangelogFile=v;async function E(m,w,j,S){let $=await J.read(m,w),{name:q,publisher:R,description:O}=$,r0=J.validateProjectName(q,J.isLibrary($));if(r0)throw new Error(`name: ${r0}`);let I=J.validateDescription(O);if(I)throw new Error(`description: ${I}`);let k=J.validatePublisherId(R)||await J.validatePublisherOnline(j,R,S);if(k)throw new Error(`publisher: ${k}`);if(!J.isLibrary($)&&(await J.validateApplicationIcon(m,w,$),J.validateEngineSettings($),J.isApp($)&&await J.isApmPartEnabled(m,w,u0.Part.dlo,$)&&(!$.dpid||!Object.values(J.DeviceProfiles).includes($.dpid))))throw new Error("dpid: The device profile is needed to compile a dlo")}D.validatePublishSettings=E;async function u(m,w){let j=qa.ungzip(m),S=await Zt.TarReader.load(j),$={};for(let q of S.fileInfos)w.includes(q.name)&&($[q.name]=S.getFileBlob(q.name));return $}D.readFilesFromTarGz=u})(mx||={});function A7(x,A){let e=Object.values(u0.Part);return A===!0?(x.info("Building project..."),e):A===!1?[]:A}async function e7(x,A,e,r,t,i){await ex.validateMinimumBackendVersion(x,A,e),i.includes(u0.Part.dde)&&await _A.fetchPreviousHistoryJson(x,A,e,r,t)}async function r7(x,A,e,r){r.defaultsOnly?(await lx.exportDefinesTs(x,A,r.defaultsOnly),e.log("Generated",e0.filePaths.dist.definesTs,"(defaults only)"),await lx.exportDefinesTs(x,A,r,e0.filePaths.dist.definesAppTs),e.log("Generated",e0.filePaths.dist.definesAppTs,"(with app.ini overrides)")):(await lx.exportDefinesTs(x,A,r),e.log("Generated",e0.filePaths.dist.definesTs))}async function t7(x,A,e){let r=await _A.compileDDE(x,A,e);if(r.ddeJSON){await _A.exportMyDatanetXML(x,A,e,r.ddeJSON);let t=await J.read(x,A);J.isLibrary(t)||await _A.exportHistoryJson(x,A,e,r.ddeJSON),await _A.exportOpenApi(x,A,e,r.ddeJSON),await J.isApmPartEnabled(x,A,u0.Part.dlo,t)&&(await _A.exportAutoDloFiles(x,A,e,r.ddeJSON),await dn.exportDloConfig(x,A,e))}return r.diagnostics}async function n7(x,A,e){let r=new Ur(x,A,e),{diagnostics:t}=await r.compile(x,A);return t}async function i7(x,A,e){return await Dn.process(x,A,e)}async function s7(x,A,e){let r=await J.read(x,A);J.isLibrary(r)&&await $r.normalizeLibraryParts(x,A,r,e)}async function a7(x,A,e){let r=Br.Utils.joinPath(x,e0.fileNames.reportTemplate);if(await A.stat(r)){let t=Br.Utils.joinPath(x,e0.filePaths.dist.reportTemplate);await A.copy(r,t),e.log(`Copied "${e0.fileNames.reportTemplate}" to dist folder.`)}}function o7(x,A,e){A!==u0.Part.dlo&&v7(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 F7(x,A,e,r,t,i){let n=await e(t,i,x);return r.push(...n),o7(x,A,n)}function v7(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 rc(x,A,e,r,t){let i=await J.read(x,A);return await J.validateBasicManifest(x,A,i),await mx.buildAll(x,A,e,t,r),await Hr.createArchive(x,A)}async function tc(x,A,e,r,t,i){if(!Object.values(u0.TagPhase).includes(t))throw new Error(`ReleasePhase: ${t} is not a valid release phase`);return await J.validateBasicManifest(x,A,null),await mx.buildAll(x,A,e,i,r),await u0.createTag(x,A,t)}async function l7(x){let A=new Zt.TarWriter;for(let[r,t]of x.entries())if(r==="tag"){let i=t;A.addFile(r,i)}else{let i=t;A.addFile(r,await i.arrayBuffer())}let e=await A.write();return qa.gzip(await e.arrayBuffer())}async function c7(x){let A=await f7(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 f7(x,A){let e=qa.ungzip(x),r=await Zt.TarReader.load(e);for(let t of r.fileInfos)if(A.includes(t.name))return r.getFileBlob(t.name);return null}var E7=h0.bufferToBase64;var u0;(u=>{let x;(R=>(R.alpha="alpha",R.beta="beta",R.rc="rc",R.release="release",R.stage="stage",R.passive="passive",R.withdrawn="withdrawn"))(x=u.TagPhase||={});let A;($=>($.dde="dde",$.dlo="dlo",$.pov="pov",$.blo="blo",$.dfiles="dfiles"))(A=u.Part||={});function e(D){let{description:m,name:w,pov:j,engines:S,blo:$,publisher:q,type:R}=D,O=R||J.ProjectTypes.app,r0={name:w,abstract:m,author:q||"",pov_location:J.PovLocation.embedded,pov_details_lowlevel:!1,required_be:S?.backend,required_hwfw:S?.hwfw?.join(";"),required_productcode:S?.productId?.join(";"),blo_level:$?.accessLevel||J.BloAccessLevel.restricted,pip_id:""};return j&&j.details&&(r0.pov_location=J.PovLocation.pure,r0.pov_details_lowlevel=!!j.details.lowLevel),O==="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,w){let j=await J.read(D,m),S=e(j),$={version:j.version,...S,phase:w};return await i(D,m,j,$)}u.createTag=r;async function t(D,m){let w=await J.read(D,m),S={...e(w),blo_autostart:!1};return i(D,m,w,S)}u.createDevTag=t;async function i(D,m,w,j){let S=new FormData;S.append("tag",JSON.stringify(j)),S.append(`src/${J.fileName}`,new Blob([await J.readAsBlob(D,m)]));let $=new Blob([await m.readFile(ue.Utils.joinPath(D,e0.filePaths.dist.ddeXmlPath))]);if(S.append("bin/dde/xml",$),w.icon){let R=await m.readFile(ue.Utils.joinPath(D,w.icon)),O=E7(R);S.append("previews/00.png",new Blob([`data:image/png;base64,${O}`]))}if(Object.hasOwn(j,"phase")){let R=await mx.getReadmeFile(D,m,j.name),O=await mx.getChangelogFile(D,m);S.append("previews/README.md",new Blob([R])),S.append("previews/CHANGELOG.md",new Blob([O]))}if(await J.isApmPartEnabled(D,m,"dlo")){let R=new Blob([await m.readFile(ue.Utils.joinPath(D,e0.filePaths.dist.mainAmxPath))]);S.append("bin/dlo/amx",R)}if(await J.isApmPartEnabled(D,m,"pov",w)){await nc(D,m,S,e0.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 q=await m.findFiles(D,`${e0.filePaths.dist.dfilesPath}/*`);for(let R of q){let O=new Blob([await m.readFile(R)]);S.append(`bin/dfiles/${ue.Utils.basename(R)}`,O)}return await J.isApmPartEnabled(D,m,"blo",w)&&await nc(D,m,S,e0.filePaths.dist.bloPath,"bin/blo"),await B7(D,m,S),S}u.createBuffer=i;async function n(D,m,w,j,S){let $=await J.read(D,m);j||await mx.validatePublishSettings(D,m,w,S);let{registry:q}=$,R=q?.id;if(!R&&!j&&(R=await F(D,m,w,$,S)),R){let{publisher:O}=$;if(!O)return null;try{return{id:R,...await vx.getExistingApplication(w,O,R,S)}}catch(r0){if(r0?.message==="Could not find given application")return R=await F(D,m,w,$,S),{id:R,...await vx.getExistingApplication(w,O,R,S)}}}return null}u.validateAccess=n;async function F(D,m,w,j,S){let $="myDatanet",{publisher:q,name:R,description:O,registry:r0}=j,I={id:r0?.id,type:j.type||J.ProjectTypes.app,name:R,targetSystem:$,description:O||"",allowedBackends:null};J.isAddon(j)&&(I.allowedApplications=null);let k=await vx.createNewApplication(w,q,I,S);if(!k)throw new Error("Failed to initialize application");return j.registry={id:k},await J.write(D,m,j),k}u.registerNew=F;async function v(D,m,w,j){let{name:S,publisher:$,description:q,registry:R}=await J.read(D,m),O=R?.id;await vx.updateExistingApplication(w,$,O,{description:q,name:S,targetSystem:"myDatanet"},j)}u.updateProfile=v;async function E(D,m,w,j,S){let{publisher:$,registry:q,version:R}=await J.read(D,m);return await vx.publishApplicationVersion(w,$,q?.id,R,j,S)}u.publishTag=E})(u0||={});async function nc(x,A,e,r,t){let i=await A.findFiles(x,`${r}/**`);for(let n of i){let F=ue.Utils.joinPath(x,r),v=n.path.substring(F.path.length+1),E=new Blob([await A.readFile(ue.Utils.joinPath(x,`${r}/${v}`))]);e.append(`${t}/${v}`,E)}}async function B7(x,A,e){let r=ue.Utils.joinPath(x,e0.filePaths.dist.reportTemplate);if(await A.stat(r)){let i=new Blob([await A.readFile(r)]);e.append("bin/pov/mdn_report_template.json",i)}let t=ue.Utils.joinPath(x,e0.filePaths.dist.historyJson);await A.stat(t)&&e.append("src/dde/history.json",new Blob([await A.readFile(t)]))}var mc=U0(require("update-notifier"));function C7(x,A,e){let r=A.split(".").filter(Boolean),t=x;for(let i=0;i<r.length;i++){let n=r[i];i===r.length-1?t[n]=e:((typeof t[n]!="object"||t[n]===null||Array.isArray(t[n]))&&(t[n]={}),t=t[n])}}function ic(x){let A=x.args,e={};for(let r=0;r<A.length;r++){let t=A[r];if(!t||!t.startsWith("--"))continue;let[i,n]=t.split("=",2),F=i.slice(2),v=!0;if(n!==void 0)v=n;else{let E=A[r+1];E&&!E.startsWith("-")&&(v=E,r++)}F.includes(".")?C7(e,F,v):e[F]=v}return e}var sc=require("vscode-uri");function di(x){return x instanceof Error?x.message:String(x)}function De(x,A){return{success:!1,errorCode:x,message:A}}async function u7(x){let{cwd:A,fs:e,logger:r,env:t,apiToken:i,options:n}=x;r.info("[1/5] Building project...");try{let F=n.part?n.part:!0;return await J.validateBasicManifest(A,e,null),await mx.buildAll(A,e,r,t,i,F,!0),r.done("Build completed successfully"),null}catch(F){return De(1,`Build failed: ${di(F)}`)}}async function D7(x){let{logger:A,options:e}=x,{serial:r}=e;A.info(`[2/5] Searching for USB device with serial: ${r}...`);let t=await sa(r,A);return t||De(2,`USB device not found with serial number: ${r}`)}async function p7(x){let{cwd:A,fs:e,logger:r,options:t}=x,{serial:i,debug:n}=t;r.info("[3/5] Uploading binary to USB device...");let F=sc.Utils.joinPath(A,e0.filePaths.dist.mainAmxPath),v=await Qr(i,F,e,r,n);return v.success?(r.done("USB upload completed"),null):De(3,`USB upload failed: ${v.message}`)}async function b7(x,A){A.info("[4/5] Connecting to myDatanet server...");try{return await x.authenticate()}catch(e){return De(4,`myDatanet authentication failed: ${di(e)}`)}}async function m7(x,A,e){if(A)try{let i=await x.getCustomer(A);return e.info(`Using customer: ${i.name} (${i._uid})`),i._uid}catch{return De(6,`Customer "${A}" not found`)}let r=await x.getCustomers();if(r.length===0)return De(6,"No customers available. Please specify --customer or set MYDATANET_CUSTOMER");if(r.length===1)return e.info(`Using customer: ${r[0].name} (${r[0]._uid})`),r[0]._uid;let t=r.map(i=>i.name).join(", ");return De(6,`Multiple customers available. Please specify --customer or set MYDATANET_CUSTOMER. Available: ${t}`)}async function h7(x,A,e,r){let t=await x.getDeviceSite(A);t&&(t.app.phase==="dev"&&(e.apmId=t.app.apmid,e.applicationId=t.app.appl_id),e.siteUid=t._uid,e.siteName=t.name,e.customerUid=t.customer_uid,r.info(`Found existing site: ${t.name}`))}async function j7(x,A,e){let{cwd:r,fs:t,logger:i}=x;i.info("Creating development APM tag...");try{let n=await u0.createDevTag(r,t),F=await A.uploadDevTag(e.apmId,n);return e.applicationId=F,i.done("Development tag uploaded"),null}catch(n){return De(5,`Development tag upload failed: ${di(n)}`)}}async function g7(x,A,e,r){r.info("[5/5] Creating development site...");try{return e.siteUid?(e.siteName!==e.name&&await x.updateSiteName(e.siteUid,e.name),r.info(`Reusing existing site: ${e.siteUid}`),{siteUid:e.siteUid,siteName:e.name}):{siteUid:await x.createDevelopmentSite(A,e),siteName:e.name}}catch(t){return De(6,`Site creation failed: ${di(t)}`)}}function ac(x,A,e=!1){if(e){x.log(JSON.stringify({siteUid:A.siteUid,siteName:A.siteName,apmId:A.apmId}));return}x.done("Development deployment completed successfully!"),x.info(""),x.info("=== Deployment Summary ==="),x.info(`Site UID: ${A.siteUid}`),x.info(`Site Name: ${A.siteName}`),x.info(`APM ID: ${A.apmId}`),x.info("==========================")}function Ci(x){return typeof x=="object"&&x!==null&&"errorCode"in x}async function oc(x,A,e,r,t,i){let n={cwd:x,fs:A,logger:e,env:r,apiToken:t,options:i},{serial:F,server:v,customer:E,mdnToken:u}=i;e.info("Starting development deployment...");let D=await u7(n);if(D)return D;let m=await D7(n);if(Ci(m))return m;let w=await p7(n);if(w)return w;let j=new Ht(v,u,e),S=await b7(j,e);if(Ci(S))return S;let $=S,q=await m7(j,E,e);if(Ci(q))return q;let R=q,O=await ha(x,A,e,F,$.name,R,i.siteName);await h7(j,F,O,e);let r0=await j7(n,j,O);if(r0)return r0;let I=await g7(j,R,O,e);return Ci(I)?I:{success:!0,siteUid:I.siteUid,siteName:I.siteName,apmId:O.apmId,message:"Development deployment completed successfully"}}var Ia="/api/1/sites/dev";function y7(x){let A=x.toUpperCase();return A!=="GET"&&A!=="HEAD"}function Ma(x,A){let e=x;try{e=JSON.parse(x).err??x}catch{}let r=/E_NOT_FOUND|E_BAD_REQUEST/.test(e)?8:/E_FORBIDDEN|E_METHOD_NOT_ALLOWED/.test(e)?9:3;return new Q0(`${e} (HTTP ${A})`,r)}function k7(x,A){let e=x.replace(/\/+$/,""),r={"content-type":"application/json"};A&&(r.authorization=`Bearer ${A}`);let t=async(i,n,F)=>fetch(`${e}${n}`,{method:i,headers:r,body:F===void 0?void 0:JSON.stringify(F)});return{async api(i){let n=y7(i.method)&&i.body?JSON.parse(i.body):void 0,F=await t(i.method,i.path,n),v={};return F.headers.forEach((E,u)=>{v[u]=E}),{status:F.status,headers:v,body:await F.text()}},async dev(i,n,F){let v=await t(i,n,F),E=await v.text();if(!v.ok)throw Ma(E,v.status);return E?JSON.parse(E):null},async close(){}}}async function w7(x){if(!x.serial)throw new Q0("--serial is required unless --url is given",2);let A=new Re({cwd:x.cwd,fs:x.fs,serial:x.serial,logger:x.logger,build:!1,flash:!1,pollIntervalMs:0,waitMs:x.waitMs,env:x.env,apiToken:x.apiToken,debug:x.debug,createDevice:x.createDevice,transportFactory:x.transportFactory});A.on("error",e=>x.logger.warn(e instanceof Error?e.message:String(e)));try{await A.start()}catch(e){throw await A.stop(),e}return{api:e=>A.handleApi(e),async dev(e,r,t){return _7(A,e,r,t)},close:()=>A.stop()}}function Fc(x,A,e){let r=Number.parseInt(x.get(A)??"",10);return Number.isFinite(r)?r:e}async function _7(x,A,e,r){let t=r??{},[i,n=""]=e.split("?"),F=new URLSearchParams(n);switch(`${A} ${i}`){case"GET /dev/status":return x.status();case"GET /dev/state":return x.state();case"POST /dev/at":return{cmd:t.cmd,response:await x.at(String(t.cmd))};case"POST /dev/flash":return x.flash(typeof t.file=="string"?t.file:void 0);case"POST /dev/sync":return x.sync(Array.isArray(t.tags)?t.tags:void 0);case"GET /dev/logs":return{lastSeq:x.logStream.lastSeq,records:x.logStream.since(Fc(F,"since",0),Fc(F,"limit",500))};default:throw new Q0(`unsupported route ${A} ${i}`,3)}}async function S7(x){return x.url?k7(x.url,x.token):w7(x)}async function pe(x,A){let e=await S7(x);try{return await A(e)}finally{await e.close()}}function La(x){if(x.status>=400)throw Ma(x.body,x.status);return x.status===204||x.body===""?null:JSON.parse(x.body)}async function vc(x){return pe(x,A=>A.dev("GET","/dev/status"))}async function lc(x,A){let[e,r]=M7(A);return pe(x,async t=>{let i=La(await t.api({path:`${Ia}/containers/${encodeURIComponent(e)}`,method:"GET"}));if(!r)return i;let n=i??{},F=Object.keys(n).find(v=>v.toLowerCase()===r.toLowerCase());if(F===void 0)throw new Q0(`unknown field '${r}' in container '${e}'`,8);return{[F]:n[F]}})}async function cc(x,A,e){let r;try{r=JSON.parse(e)}catch(t){throw new Q0(`values are not valid JSON: ${t instanceof Error?t.message:String(t)}`,8)}return pe(x,async t=>{let i=`${Ia}/containers/${encodeURIComponent(A)}`,n=await t.api({path:i,method:"PUT",body:JSON.stringify(r)});if(n.status>=400)throw Ma(n.body,n.status);let F=n.headers["x-mt-mirror"]==="stale";return{container:A,written:r,stale:F,record:La(await t.api({path:i,method:"GET"}))}})}async function fc(x,A,e){let r={count:-(e.limit??100)};e.from&&(r.from=e.from),e.to&&(r.until=e.to);let t=`${Ia}/timeseries/${encodeURIComponent(A)}?json=${encodeURIComponent(JSON.stringify(r))}`;return pe(x,async i=>La(await i.api({path:t,method:"GET"})))}async function Ec(x,A){return pe(x,e=>e.dev("POST","/dev/at",{cmd:A}))}async function Bc(x){return pe(x,A=>A.dev("GET","/dev/state"))}async function Cc(x,A){return pe(x,e=>e.dev("POST","/dev/flash",A?{file:A}:{}))}async function dc(x,A){return pe(x,e=>e.dev("POST","/dev/sync",A?{tags:A}:{}))}var P7={marker:"live"};function uc(x){return typeof x=="object"&&x!==null&&x.marker==="live"}async function T7(x){return(await x.dev("GET","/dev/logs?since=0&limit=1")).lastSeq}function $7(x,A){let e=x.filter?new RegExp(x.filter):null,r=x.sinceMs!==void 0?Date.now()-x.sinceMs:void 0;return t=>{let i=t;r!==void 0&&(i.ts??0)<r||(!e||e.test(i.text??""))&&A(t)}}var Na=500;async function Dc(x,A,e){return await x.dev("GET",`/dev/logs?since=${A}&limit=${e}`)}function pc(x,A,e){let r=A;for(let t of x)r=Math.max(r,t.seq),e(t);return r}async function q7(x,A,e){let r=await Dc(x,A,Na);return pc(r.records,A,e)}async function N7(x,A,e){let r=Na;for(;;){let t=await Dc(x,A,r);if(t.records.length<r)return pc(t.records,A,e);r+=Na}}async function I7(x,A,e,r){let t=A;for(;Date.now()<e;)await new Promise(i=>setTimeout(i,500)),t=await q7(x,t,r)}async function bc(x,A,e){let r=$7(A,e);await pe(x,async t=>{let i=A.follow===!0,n=A.replay===!0||A.sinceMs!==void 0,F=i&&!n?await T7(t):0,v=await N7(t,F,r);i&&n&&e(P7),i&&await I7(t,v,Date.now()+(A.durationMs??3e4),r)})}function M7(x){let A=x.indexOf(".");return A<0?[x,void 0]:[x.slice(0,A),x.slice(A+1)]}var DA=new J0.Command,ui=(0,mc.default)({pkg:Si}),g0=new XA.Logger,L7=()=>process.env.NODE_ENV==="local-dev-app"?"./dev/pets-demo":process.env.NODE_ENV==="local-dev-lib"?"./dev/modbus-master":process.env.NODE_ENV==="local-dev-addon"?"./dev/addon":process.env.NODE_ENV==="local-dev-analytics"?"./dev/analytics":"",be=et.Utils.joinPath(et.URI.file(process.cwd()),L7());DA.version(Si.version).usage("<command>");DA.description(`This tool is used to manage the project dependencies, build, package and publish the project.
|
|
2346
2346
|
The manifest options can be overwritten with the --option=value syntax.
|
|
2347
2347
|
Example: "studio build --dlo.mainFile="./dlo/test.dlo" will overwrite the dlo.mainFile option of the manifest.
|
|
2348
2348
|
|
|
2349
|
-
Use "studio --help" for more information.`);function jx(x,A){let e=
|
|
2349
|
+
Use "studio --help" for more information.`);function jx(x,A){let e=ic(x);return J.setOverwrites(e),A.catch(r=>{g0.error(r instanceof Error?r.message:r),process.exit(1)}).finally(()=>{ui.notify()})}function R7(x){return process.env.STUDIO_ENV=x||lx.ENV.production,x&&x!==lx.ENV.production&&g0.log(`Using STUDIO_ENV=${x}`),process.env.STUDIO_ENV}function O7(x){return x?.token||null}function Cr(x){return(x.silent||x.json)&&(g0.silent=!0),x.debug&&(g0.debugEnabled=!0),{env:R7(x.env),token:O7(x)}}var dr=new J0.Option("-e, --env <environment>","CLI target environment (defaults to STUDIO_ENV environment variable)").default(process.env.STUDIO_ENV).choices(Object.values(lx.ENV)),ur=new J0.Option("--token <API-token>","API Access Token (defaults to STUDIO_TOKEN environment variable)").default(process.env.STUDIO_TOKEN),G7=new J0.Option("--allowedBackends <null|*|server.xz;server.yz>","specify the allowedBackends deployment for this version.").default(null),U7=Object.values(u0.TagPhase),hc=new J0.Option("-ph --phase <release phase>","specify a release phase").choices(U7).default("release"),Ra=new J0.Option("-p --part <APM part>","APM part that should be built").choices(Object.values(u0.Part));function An(x=!1){return new J0.Option("-s, --serial <serial>","Device serial number (16 characters hex)").makeOptionMandatory(x)}var en=new J0.Option("--debug","Enable debug logging").default(!1),Oa=new J0.Option("--silent","Suppress intermediate progress output. Only the final result and errors are printed.").default(!1),H7=new J0.Option("--siteName <name>","Override the auto-generated development site name (max 50 characters)."),Ga=new J0.Option("--json",'Print the deployment result as a JSON object instead of the human-readable summary. Format: {"siteUid", "siteName", "apmId"}. Best combined with --silent for machine-readable output.').default(!1),J7=new J0.Option("--server <url>","myDatanet instance URL (https:// prefix optional)").default(process.env.MYDATANET_HOST),K7=new J0.Option("--customer <customerId>","myDatanet customer UID or ID").default(process.env.MYDATANET_CUSTOMER),z7=new J0.Option("--mdn-token <token>","myDatanet API token").default(process.env.MYDATANET_TOKEN);function rt(x,A,e=Number.MAX_SAFE_INTEGER){return r=>{let t=r.trim()===""?Number.NaN:Number(r);if(!Number.isInteger(t)||t<A||t>e)throw new J0.InvalidArgumentError(`${x} must be an integer between ${A} and ${e}, got '${r}'`);return t}}var V7={s:1e3,m:6e4,h:36e5};function W7(x){return A=>{let e=/^(\d+)(s|m|h)$/.exec(A.trim());if(!e)throw new J0.InvalidArgumentError(`${x} must be a duration like '30s', '5m' or '1h', got '${A}'`);return Number(e[1])*V7[e[2]]}}var X7=new J0.Option("--port <port>","Port the local device API server listens on").default(8765).argParser(rt("--port",0,65535)),Y7=new J0.Option("--host <host>","Address the local device API server binds to").default("127.0.0.1"),Q7=new J0.Option("--allow-remote","Allow a non-loopback --host without --bearer (the device API is then unauthenticated)"),Z7=new J0.Option("--poll-interval <ms>","Stamp-poll interval in ms (0 disables polling)").default(2e3).argParser(rt("--poll-interval",0)),jc=new J0.Option("--wait <ms>","How long a write waits for the device to confirm, in ms").default(3e3).argParser(rt("--wait",0)),xb=new J0.Option("--log-file [path]","Append every device log record to this JSONL file"),gc=new J0.Option("--bearer <token>","Bearer token required by the local device API server (--token is the Studio API token)"),Ab=new J0.Option("--replay <file>","Replay a companion-app flight-recorder export (.ndjson or .db) instead of a live device"),eb=new J0.Option("--session <id>","Recording session id to replay (default: the session with the most records)"),rb=new J0.Option("--speed <n|max>","Replay speed: a multiplier, or `max` for no recorded delays").default(1).argParser(x=>x==="max"?"max":rt("--speed",0)(x)),tb=new J0.Option("--url <url>","Run against a running `studio dev` server instead of opening USB");function He(x,A){g0.silent=!1,A?g0.log(JSON.stringify(x)):g0.log(JSON.stringify(x,null,2)),process.exitCode=0}function yc(x){return x instanceof Q0?x.exitCode:1}function uA(x){g0.silent=!1,g0.error(x instanceof Error?x.message:String(x)),ui.notify(),process.exitCode=yc(x)}function me(x){let{env:A,token:e}=Cr(x);return{cwd:be,fs:le,logger:g0,serial:x.serial,url:x.url,token:x.bearer,debug:x.debug,env:A,apiToken:e,waitMs:x.wait}}function he(x,A,e){return x.command(A).description(e).addOption(An()).addOption(tb).addOption(gc).addOption(en).addOption(Oa).addOption(Ga).addOption(dr).addOption(ur)}DA.command("install").aliases(["i"]).description("install all the dependencies in your project").arguments("[dependency...]").allowExcessArguments(!0).addOption(dr).addOption(ur).allowUnknownOption(!0).action((x,A,e)=>{let{env:r,token:t}=Cr(A);jx(e,gl(be,le,g0,r,t,x))});DA.command("build").addOption(Ra).allowExcessArguments(!0).addOption(dr).addOption(ur).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Cr(x);jx(A,yl(be,le,g0,e,r,x.part))});DA.command("publish").addOption(hc).addOption(G7).addOption(dr).addOption(ur).allowUnknownOption(!0).option("-i, --packagePath <path>",'Publish the provided library or app package. Use "*" for autodetection.').action(async(x,A)=>{let{env:e,token:r}=Cr(x);jx(A,kl(be,le,g0,e,r,x.allowedBackends,x.phase,x.packagePath))});DA.command("package").alias("pack").description("Package the project").addOption(hc).addOption(dr).addOption(ur).allowUnknownOption(!0).action(async(x,A)=>{let{env:e,token:r}=Cr(x);jx(A,wl(be,le,g0,e,r,x.phase))});DA.command("run").description("Build, upload to USB device, and create development site on myDatanet").addOption(An(!0)).addOption(J7).addOption(K7).addOption(z7).addOption(Ra).addOption(dr).addOption(ur).addOption(en).addOption(Oa).addOption(Ga).addOption(H7).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Cr(x),t=x.mdnToken,i=x.server;t||(g0.error("MYDATANET_TOKEN is required. Set via --mdn-token or MYDATANET_TOKEN environment variable"),ui.notify(),process.exit(4)),i||(g0.error("Server URL is required. Set via --server or MYDATANET_HOST environment variable"),ui.notify(),process.exit(4)),jx(A,oc(be,le,g0,e,r,{serial:x.serial,server:i,customer:x.customer,mdnToken:t,debug:x.debug,part:x.part?[x.part]:void 0,siteName:x.siteName||void 0}).then(n=>{g0.silent=!1,n.success?(ac(g0,n,x.json),process.exit(0)):(g0.error(n.message),process.exit(n.errorCode||1))}))});var Ua=DA.command("usb").description("USB device management commands");Ua.command("list").description("List available USB devices").action((x,A)=>{jx(A,$v(g0))});Ua.command("upload").description("Upload an AMX binary to a USB device").addOption(An(!0)).requiredOption("-f, --file <path>","Path to the AMX file (relative to current directory)").addOption(en).action((x,A)=>{let e=et.Utils.joinPath(be,x.file);g0.debugEnabled=x.debug===!0,jx(A,Qr(x.serial,e,le,g0,x.debug).then(r=>{r.success?process.exit(0):(g0.error(r.message),process.exit(1))}))});Ua.command("sync").description("Sync a USB device with the myDatanet server").addOption(An(!0)).addOption(en).action((x,A)=>{g0.debugEnabled=x.debug===!0,jx(A,qv(x.serial,g0,x.debug).then(e=>{e.success?process.exit(0):(g0.error(e.message),process.exit(1))}))});DA.command("dev").description("Build, flash and serve the myDatanet-compatible device API on localhost").addOption(An()).addOption(X7).addOption(Y7).addOption(Q7).option("--watch","Rebuild, flash and sync when a source file changes",!1).option("--no-build","Skip the initial build").option("--no-flash","Skip flashing dist/dlo/main.amx").addOption(Z7).addOption(jc).addOption(xb).addOption(gc).addOption(Ab).addOption(eb).addOption(rb).option("--pov [name]","Also start the project POV dev server against this server").addOption(Ra).addOption(dr).addOption(ur).addOption(en).addOption(Oa).addOption(Ga).allowUnknownOption(!0).action((x,A)=>{let{env:e,token:r}=Cr(x);return!x.serial&&!x.replay?jx(A,Promise.reject(new Error("One of --serial or --replay is required")).catch(uA)):x.serial&&x.replay?jx(A,Promise.reject(new Error("--serial and --replay are mutually exclusive")).catch(uA)):(x.json&&(g0.output={log:(...t)=>console.error(...t)},g0.silent=x.silent===!0),jx(A,ib(x,e,r).catch(uA)))});function nb(x,A,e){let r=x.logFile===!0?et.Utils.joinPath(be,e0.filePaths.studio.dev.deviceLog).fsPath:x.logFile,t=typeof x.replay=="string";return{serial:x.serial,host:x.host,port:x.port,allowRemote:x.allowRemote===!0,watch:t?!1:x.watch,build:t?!1:x.build,flash:t?!1:x.flash,pollIntervalMs:x.pollInterval,waitMs:x.wait,logFile:typeof r=="string"?r:void 0,token:x.bearer,pov:x.pov,part:x.part?[x.part]:void 0,debug:x.debug,env:A,apiToken:e,logger:g0,replay:x.replay,session:x.session,speed:x.speed}}async function ib(x,A,e){let r=await ma(be,le,nb(x,A,e));x.json?sb(r):ab(r),await new Promise(t=>{let i=!1,n=()=>{i||(i=!0,r.close().catch(F=>g0.error(F instanceof Error?F.message:String(F))).finally(()=>{process.exitCode=0,process.stdin.pause(),t()}))};process.once("SIGINT",n),process.once("SIGTERM",n),x.json||ob(r,n)})}function sb(x){process.stdout.write(`${JSON.stringify({url:x.url,serial:x.session.serial,apmId:x.apmId,port:x.port})}
|
|
2350
2350
|
`);for(let A of["log","build","sync","state","container-changed"])x.session.on(A,e=>process.stdout.write(`${JSON.stringify({event:A,payload:e})}
|
|
2351
|
-
`))}function
|
|
2351
|
+
`))}function ab(x){g0.done(`Device API server: ${x.url} (serial ${x.session.serial})`),g0.info("Commands: `at <cmd>`, `sync`, `flash`, `build`, `q` to quit"),x.session.on("log",A=>g0.log(`${xn.default.dim(A.source)} ${A.text}`)),x.session.on("container-changed",A=>g0.log(`${xn.default.cyan(A.container??"uto")} ${JSON.stringify(A.decoded??null)}`)),x.session.on("build",A=>{A.ok===!0?g0.done("Build completed"):A.ok===!1&&g0.error(A.message??"Build failed")})}function ob(x,A){process.stdin.isTTY&&(process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{Fb(x,String(e).trim(),A).catch(r=>g0.error(r instanceof Error?r.message:String(r)))}))}async function Fb(x,A,e){A==="q"?e():A==="sync"?g0.log(JSON.stringify(await x.session.sync())):A==="flash"?g0.log(JSON.stringify(await x.session.flash())):A==="build"?await x.session.build():A.startsWith("at ")?g0.log(await x.session.at(A.slice(3).trim())):A&&g0.warn(`Unknown command: ${A}`)}var Ha="<container>",Ja="Container name or alias",je=DA.command("device").description("One-shot device commands (USB or a running `studio dev`)");he(je,"info","Print DEVINFO/STAMPS/model status").action((x,A)=>jx(A,vc(me(x)).then(e=>He(e,x.json)).catch(uA)));he(je,"get","Read a container, decoded via the project DDE").argument(Ha,`${Ja}, optionally \`container.field\``).action((x,A,e)=>jx(e,lc(me(A),x).then(r=>He(r,A.json)).catch(uA)));he(je,"set","Write a container: encode, push and re-read").argument(Ha,Ja).argument("<values>","JSON object of field values").addOption(jc).action((x,A,e,r)=>jx(r,cc(me(e),x,A).then(t=>He(t,e.json)).catch(uA)));he(je,"timeseries","Read a histdata window, decoded via the project DDE").argument(Ha,`Histdata ${Ja.toLowerCase()}`).option("--from <stamp>","Inclusive lower bound (API stamp)").option("--to <stamp>","Exclusive upper bound (API stamp)").option("--limit <n>","Number of records (youngest first)",rt("--limit",1),100).action((x,A,e)=>jx(e,fc(me(A),x,{from:A.from,to:A.to,limit:A.limit}).then(r=>He(r,A.json)).catch(uA)));he(je,"logs","Print the device log ring buffer").option("--follow","Keep printing new records",!1).option("--duration <ms>","How long --follow runs",rt("--duration",0),3e4).option("--filter <regex>","Only print records whose text matches").option("--replay","With --follow, drain the full buffered history from the start first",!1).option("--since <duration>","With --follow, emit buffered records newer than this first, e.g. '30s', '5m', '1h'",W7("--since")).action((x,A)=>jx(A,bc(me(x),{follow:x.follow,durationMs:x.duration,filter:x.filter,replay:x.replay,sinceMs:x.since},e=>vb(e,x.json)).then(()=>{process.exitCode=0}).catch(uA)));function vb(x,A){if(g0.silent=!1,uc(x)){A||g0.log(xn.default.dim("--- live ---"));return}if(A){g0.log(JSON.stringify(x));return}let e=x;g0.log(`${xn.default.dim(e.source)} ${e.text}`)}he(je,"at","Run one AT command").argument("<cmd>",'AT command, e.g. "at+rm2mstate"').action((x,A,e)=>jx(e,Ec(me(A),x).then(r=>He(r,A.json)).catch(uA)));he(je,"state","Print the last rm2m state").action((x,A)=>jx(A,Bc(me(x)).then(e=>He(e,x.json)).catch(uA)));he(je,"flash","Upload an AMX (defaults to dist/dlo/main.amx)").option("-f, --file <path>","AMX file to upload, relative to the project root").action((x,A)=>jx(A,Cc(me(x),x.file).then(e=>He(e,x.json)).catch(uA)));he(je,"sync","Pull the device data into the mirror").action((x,A)=>jx(A,dc(me(x)).then(e=>He(e,x.json)).catch(uA)));function kc(x){DA.parse(x)}0&&(module.exports={deviceExitCode,program});
|
|
2352
2352
|
/*! Bundled license information:
|
|
2353
2353
|
|
|
2354
2354
|
@microtronics/device-master/dist/cjs/index.cjs:
|