adb-sqlite-viewer 1.1.1 → 1.1.3
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/bridge/server.js +189 -0
- package/dist/assets/index-DdzJrQpr.js +63 -0
- package/dist/index.html +1 -1
- package/electron/main.cjs +0 -5
- package/package.json +1 -1
- package/dist/assets/index-CkEPg1ZA.js +0 -63
package/bridge/server.js
CHANGED
|
@@ -264,6 +264,183 @@ async function handlePullDb(req, res) {
|
|
|
264
264
|
}
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
+
// ── WayDroid host filesystem access ─────────────────────
|
|
268
|
+
|
|
269
|
+
const os = require("os");
|
|
270
|
+
const WAYDROID_DATA_PATHS = [
|
|
271
|
+
path.join(os.homedir(), ".local/share/waydroid/data/data"),
|
|
272
|
+
"/var/lib/waydroid/data/data",
|
|
273
|
+
];
|
|
274
|
+
|
|
275
|
+
function findWaydroidDataPath() {
|
|
276
|
+
for (const p of WAYDROID_DATA_PATHS) {
|
|
277
|
+
try {
|
|
278
|
+
fs.accessSync(p, fs.constants.F_OK);
|
|
279
|
+
return p;
|
|
280
|
+
} catch { /* not found */ }
|
|
281
|
+
}
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Read a file, trying direct access first, then pkexec cat.
|
|
287
|
+
* Returns a Buffer.
|
|
288
|
+
*/
|
|
289
|
+
function readProtectedFile(filePath) {
|
|
290
|
+
return new Promise((resolve, reject) => {
|
|
291
|
+
// Try direct read first
|
|
292
|
+
try {
|
|
293
|
+
const data = fs.readFileSync(filePath);
|
|
294
|
+
return resolve(data);
|
|
295
|
+
} catch { /* permission denied, try pkexec */ }
|
|
296
|
+
|
|
297
|
+
// Try pkexec (Linux GUI sudo prompt)
|
|
298
|
+
execFile("pkexec", ["cat", filePath], {
|
|
299
|
+
timeout: 30_000,
|
|
300
|
+
maxBuffer: MAX_BUFFER,
|
|
301
|
+
encoding: "buffer",
|
|
302
|
+
}, (err, stdout) => {
|
|
303
|
+
if (err) {
|
|
304
|
+
reject(new Error(`Cannot read file (permission denied). Try: sudo chmod -R o+r ~/.local/share/waydroid/data/data/`));
|
|
305
|
+
} else {
|
|
306
|
+
resolve(stdout);
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* List directory contents, trying direct access first, then pkexec ls.
|
|
314
|
+
*/
|
|
315
|
+
function listProtectedDir(dirPath) {
|
|
316
|
+
return new Promise((resolve, reject) => {
|
|
317
|
+
try {
|
|
318
|
+
const entries = fs.readdirSync(dirPath);
|
|
319
|
+
return resolve(entries);
|
|
320
|
+
} catch { /* permission denied */ }
|
|
321
|
+
|
|
322
|
+
execFile("pkexec", ["ls", dirPath], {
|
|
323
|
+
timeout: 10_000,
|
|
324
|
+
}, (err, stdout) => {
|
|
325
|
+
if (err) {
|
|
326
|
+
reject(new Error("Cannot list directory (permission denied)"));
|
|
327
|
+
} else {
|
|
328
|
+
resolve(stdout.split("\n").map(s => s.trim()).filter(Boolean));
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
async function handleWaydroidDetect(_req, res) {
|
|
335
|
+
const dataPath = findWaydroidDataPath();
|
|
336
|
+
json(res, 200, { detected: !!dataPath, dataPath });
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
async function handleWaydroidPackages(_req, res) {
|
|
340
|
+
const dataPath = findWaydroidDataPath();
|
|
341
|
+
if (!dataPath) {
|
|
342
|
+
json(res, 404, { error: "WayDroid data path not found" });
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
try {
|
|
347
|
+
const entries = await listProtectedDir(dataPath);
|
|
348
|
+
// Filter to likely app packages (com.xxx.xxx pattern)
|
|
349
|
+
const packages = entries.filter(e => e.includes(".") && !e.startsWith("."));
|
|
350
|
+
packages.sort();
|
|
351
|
+
json(res, 200, { packages });
|
|
352
|
+
} catch (err) {
|
|
353
|
+
json(res, 500, { error: err.message });
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
async function handleWaydroidDatabases(req, res) {
|
|
358
|
+
let body;
|
|
359
|
+
try {
|
|
360
|
+
body = JSON.parse(await readBody(req));
|
|
361
|
+
} catch {
|
|
362
|
+
json(res, 400, { error: "Invalid JSON body" });
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
const { packageName } = body;
|
|
367
|
+
if (!packageName) {
|
|
368
|
+
json(res, 400, { error: "Missing packageName" });
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
const dataPath = findWaydroidDataPath();
|
|
373
|
+
if (!dataPath) {
|
|
374
|
+
json(res, 404, { error: "WayDroid data path not found" });
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
const locations = ["databases", "files", "files/SQLite"];
|
|
379
|
+
const databases = [];
|
|
380
|
+
const seen = new Set();
|
|
381
|
+
|
|
382
|
+
for (const loc of locations) {
|
|
383
|
+
const dirPath = path.join(dataPath, packageName, loc);
|
|
384
|
+
try {
|
|
385
|
+
const entries = await listProtectedDir(dirPath);
|
|
386
|
+
for (const f of entries) {
|
|
387
|
+
if (f.endsWith(".db") || f.endsWith(".sqlite") || f.endsWith(".sqlite3")) {
|
|
388
|
+
if (!seen.has(f)) {
|
|
389
|
+
seen.add(f);
|
|
390
|
+
databases.push({ name: f, path: `${loc}/${f}` });
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
} catch { /* dir doesn't exist */ }
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
json(res, 200, { databases });
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
async function handleWaydroidReadDb(req, res) {
|
|
401
|
+
let body;
|
|
402
|
+
try {
|
|
403
|
+
body = JSON.parse(await readBody(req));
|
|
404
|
+
} catch {
|
|
405
|
+
json(res, 400, { error: "Invalid JSON body" });
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
const { packageName, dbPath } = body;
|
|
410
|
+
if (!packageName || !dbPath) {
|
|
411
|
+
json(res, 400, { error: "Missing packageName or dbPath" });
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
const dataPath = findWaydroidDataPath();
|
|
416
|
+
if (!dataPath) {
|
|
417
|
+
json(res, 404, { error: "WayDroid data path not found" });
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
const fullPath = path.join(dataPath, packageName, dbPath);
|
|
422
|
+
|
|
423
|
+
// Prevent path traversal
|
|
424
|
+
if (!fullPath.startsWith(dataPath)) {
|
|
425
|
+
json(res, 400, { error: "Invalid path" });
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
try {
|
|
430
|
+
const data = await readProtectedFile(fullPath);
|
|
431
|
+
const fileName = dbPath.split("/").pop() || "database.db";
|
|
432
|
+
cors(res);
|
|
433
|
+
res.writeHead(200, {
|
|
434
|
+
"Content-Type": "application/octet-stream",
|
|
435
|
+
"Content-Disposition": `attachment; filename="${fileName}"`,
|
|
436
|
+
"Content-Length": data.length,
|
|
437
|
+
});
|
|
438
|
+
res.end(data);
|
|
439
|
+
} catch (err) {
|
|
440
|
+
json(res, 500, { error: err.message });
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
267
444
|
// ── Exports (for use by cli/server.cjs and electron) ───
|
|
268
445
|
|
|
269
446
|
/**
|
|
@@ -297,6 +474,18 @@ async function handleRequest(req, res) {
|
|
|
297
474
|
} else if (p === "/api/pull-db" && req.method === "POST") {
|
|
298
475
|
await handlePullDb(req, res);
|
|
299
476
|
return true;
|
|
477
|
+
} else if (p === "/api/waydroid/detect" && req.method === "GET") {
|
|
478
|
+
await handleWaydroidDetect(req, res);
|
|
479
|
+
return true;
|
|
480
|
+
} else if (p === "/api/waydroid/packages" && req.method === "GET") {
|
|
481
|
+
await handleWaydroidPackages(req, res);
|
|
482
|
+
return true;
|
|
483
|
+
} else if (p === "/api/waydroid/databases" && req.method === "POST") {
|
|
484
|
+
await handleWaydroidDatabases(req, res);
|
|
485
|
+
return true;
|
|
486
|
+
} else if (p === "/api/waydroid/read-db" && req.method === "POST") {
|
|
487
|
+
await handleWaydroidReadDb(req, res);
|
|
488
|
+
return true;
|
|
300
489
|
}
|
|
301
490
|
} catch (err) {
|
|
302
491
|
json(res, 500, { error: err.message });
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
var Lc=Object.defineProperty;var ka=n=>{throw TypeError(n)};var _c=(n,e,t)=>e in n?Lc(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var k=(n,e,t)=>_c(n,typeof e!="symbol"?e+"":e,t),Mi=(n,e,t)=>e.has(n)||ka("Cannot "+t);var u=(n,e,t)=>(Mi(n,e,"read from private field"),t?t.call(n):e.get(n)),m=(n,e,t)=>e.has(n)?ka("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),b=(n,e,t,i)=>(Mi(n,e,"write to private field"),i?i.call(n,t):e.set(n,t),t),C=(n,e,t)=>(Mi(n,e,"access private method"),t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))i(a);new MutationObserver(a=>{for(const l of a)if(l.type==="childList")for(const d of l.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&i(d)}).observe(document,{childList:!0,subtree:!0});function t(a){const l={};return a.integrity&&(l.integrity=a.integrity),a.referrerPolicy&&(l.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?l.credentials="include":a.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function i(a){if(a.ep)return;a.ep=!0;const l=t(a);fetch(a.href,l)}})();class ws{constructor(e){k(this,"TValue");k(this,"TOmitInitKey");k(this,"options");this.options=e}}class Mt{constructor(e,t,i,a){k(this,"definition");k(this,"options");k(this,"struct");k(this,"value");this.definition=e,this.options=t,this.struct=i,this.value=a}get hasCustomAccessors(){return this.get!==Mt.prototype.get||this.set!==Mt.prototype.set}getSize(){return this.definition.getSize()}get(){return this.value}set(e){this.value=e}}const Tc={littleEndian:!1};class gs extends Error{constructor(){super("ExactReadable ended"),Object.setPrototypeOf(this,new.target.prototype)}}const ys=Symbol("struct-value");function Ic(n){return typeof n=="object"&&n!==null&&ys in n}class La{constructor(e){k(this,"fieldValues",{});k(this,"value");this.value=Object.create(e),Object.defineProperty(this.value,ys,{enumerable:!1,value:this})}set(e,t){this.fieldValues[e]=t,t.hasCustomAccessors?Object.defineProperty(this.value,e,{configurable:!0,enumerable:!0,get(){return t.get()},set(i){t.set(i)}}):this.value[e]=t.get()}get(e){return this.fieldValues[e]}}const We={reject(n){return new Ta(n)},resolve(n){return typeof n=="object"&&n!==null&&typeof n.then=="function"?n instanceof jr||n instanceof _a||n instanceof Ta?n:new jr(n):new _a(n)},try(n){try{return We.resolve(n())}catch(e){return We.reject(e)}}};var Jt;const Ts=class Ts{constructor(e){m(this,Jt);b(this,Jt,e)}then(e,t){return new Ts(u(this,Jt).then(e,t))}valueOrPromise(){return u(this,Jt)}};Jt=new WeakMap;let jr=Ts;var Xt;class _a{constructor(e){m(this,Xt);b(this,Xt,e)}then(e){return e?We.try(()=>e(u(this,Xt))):this}valueOrPromise(){return u(this,Xt)}}Xt=new WeakMap;var Zt;class Ta{constructor(e){m(this,Zt);b(this,Zt,e)}then(e,t){return t?We.try(()=>t(u(this,Zt))):this}valueOrPromise(){throw u(this,Zt)}}Zt=new WeakMap;function Dc(n,e,t){return t?(n[e]|n[e+1]<<8)<<16>>16:(n[e]<<8|n[e+1])<<16>>16}function Nc(n,e,t){return t?n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24:n[e]<<24|n[e+1]<<16|n[e+2]<<8|n[e+3]}function Pc(n,e,t){return t?BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7]<<24)<<32n:BigInt(n[e]<<24)<<32n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function qc(n,e,t){n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)}function Cc(n,e,t){n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn)}function Bc(n,e,t,i){i?(n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)):(n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn))}function Rc(n,e){return n[e]<<24>>24}function Oc(n,e,t){return t?n[e]|n[e+1]<<8:n[e+1]|n[e]<<8}function wi(n,e){return(n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24)>>>0}function $c(n,e,t){return t?(n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24)>>>0:(n[e]<<24|n[e+1]<<16|n[e+2]<<8|n[e+3])>>>0}function Ac(n,e,t){n[e]=t,n[e+1]=t>>8,n[e+2]=t>>16,n[e+3]=t>>24}function Mc(n,e){return BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7])<<56n}function zc(n,e){return BigInt(n[e])<<56n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function Uc(n,e,t){return t?BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7])<<56n:BigInt(n[e])<<56n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function Wc(n,e,t,i){i?(n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)):(n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn))}const Yt=class Yt{constructor(e,t,i){k(this,"TTypeScriptType");k(this,"size");k(this,"deserialize");k(this,"serialize");this.size=e,this.deserialize=t,this.serialize=i}};k(Yt,"Int64",new Yt(8,Pc,Bc)),k(Yt,"Uint64",new Yt(8,Uc,Wc));let Qr=Yt;class Fc extends ws{constructor(t,i){super();k(this,"variant");this.variant=t}getSize(){return this.variant.size}create(t,i,a){return new Vc(this,t,i,a)}deserialize(t,i,a){return We.try(()=>i.readExactly(this.getSize())).then(l=>{const d=this.variant.deserialize(l,0,t.littleEndian);return this.create(t,a,d)}).valueOrPromise()}}class Vc extends Mt{serialize(e,t,i){this.definition.variant.serialize(t,i,this.value,this.options.littleEndian)}}const{TextEncoder:jc,TextDecoder:Qc}=globalThis,Hc=new jc,Kc=new Qc;function qe(n){return Hc.encode(n)}function zt(n){return Kc.decode(n)}class Qa{constructor(){k(this,"TTypeScriptType")}}const ri=class ri extends Qa{constructor(){super()}toBuffer(e){return e}toValue(e){return e}getSize(e){return e.length}};k(ri,"Instance",new ri);let Qi=ri;const ii=class ii extends Qa{toBuffer(e){return qe(e)}toValue(e){return zt(e)}getSize(){}};k(ii,"Instance",new ii);let Hi=ii;const Ne=new Uint8Array(0);class Ha extends ws{constructor(t,i){super(i);k(this,"converter");k(this,"TTypeScriptType");this.converter=t}getDeserializeSize(t){return this.getSize()}create(t,i,a,l){return new Ka(this,t,i,a,l)}deserialize(t,i,a){return We.try(()=>{const l=this.getDeserializeSize(a);return l===0?Ne:i.readExactly(l)}).then(l=>{const d=this.converter.toValue(l);return this.create(t,a,d,l)}).valueOrPromise()}}class Ka extends Mt{constructor(t,i,a,l,d){super(t,i,a,l);k(this,"array");this.array=d}set(t){super.set(t),this.array=void 0}serialize(t,i,a){this.array??(this.array=this.definition.converter.toBuffer(this.value)),i.set(this.array,a)}}class Yc extends Ha{getSize(){return this.options.length}}class Gc extends Ha{getSize(){return 0}getDeserializeSize(e){let t=e.value[this.options.lengthField];return typeof t=="string"&&(t=Number.parseInt(t,this.options.lengthFieldRadix??10)),t}create(e,t,i,a){return new Jc(this,e,t,i,a)}}var si,Ya;class Jc extends Ka{constructor(t,i,a,l,d){super(t,i,a,l,d);m(this,si);k(this,"length");k(this,"lengthFieldValue");d&&(this.length=d.length);const y=this.definition.options.lengthField,v=a.get(y);this.lengthFieldValue=new Xc(v,this),a.set(y,this.lengthFieldValue)}getSize(){return this.length===void 0&&(this.length=C(this,si,Ya).call(this)),this.length===void 0&&(this.array=this.definition.converter.toBuffer(this.value),this.length=this.array.length),this.length}set(t){super.set(t),this.array=void 0,this.length=void 0}}si=new WeakSet,Ya=function(){const t=this.definition.converter.getSize(this.value);if(t!==void 0&&t<0)throw new Error("Invalid length");return t};class Xc extends Mt{constructor(t,i){super(t.definition,t.options,t.struct,0);k(this,"originalValue");k(this,"bufferValue");this.originalValue=t,this.bufferValue=i}getSize(){return this.originalValue.getSize()}get(){let t=this.bufferValue.getSize();return typeof this.originalValue.get()=="string"&&(t=t.toString(this.bufferValue.definition.options.lengthFieldRadix??10)),t}set(){}serialize(t,i,a){this.originalValue.set(this.get()),this.originalValue.serialize(t,i,a)}}var Ke;(function(n){n.Uint8={signed:!1,size:1,deserialize(e){return e[0]},serialize(e,t,i){e.setUint8(t,i)}},n.Int8={signed:!0,size:1,deserialize(e){return Rc(e,0)},serialize(e,t,i){e.setInt8(t,i)}},n.Uint16={signed:!1,size:2,deserialize(e,t){return Oc(e,0,t)},serialize(e,t,i,a){e.setUint16(t,i,a)}},n.Int16={signed:!0,size:2,deserialize(e,t){return Dc(e,0,t)},serialize(e,t,i,a){e.setInt16(t,i,a)}},n.Uint32={signed:!1,size:4,deserialize(e,t){return $c(e,0,t)},serialize(e,t,i,a){e.setUint32(t,i,a)}},n.Int32={signed:!0,size:4,deserialize(e,t){return Nc(e,0,t)},serialize(e,t,i,a){e.setInt32(t,i,a)}}})(Ke||(Ke={}));class Zc extends ws{constructor(t,i){super();k(this,"variant");this.variant=t}getSize(){return this.variant.size}create(t,i,a){return new el(this,t,i,a)}deserialize(t,i,a){return We.try(()=>i.readExactly(this.getSize())).then(l=>{const d=this.variant.deserialize(l,t.littleEndian);return this.create(t,a,d)}).valueOrPromise()}}class el extends Mt{serialize(e,t,i){this.definition.variant.serialize(e,i,this.value,this.options.littleEndian)}}class Ga extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}class tl extends Ga{constructor(){super("The underlying readable was ended before the struct was fully deserialized")}}class ms extends Ga{constructor(){super("The underlying readable doesn't contain any more struct")}}var vt,xe,Et,en,ye,gt,Ki,In;const Is=class Is{constructor(e){m(this,ye);k(this,"TFields");k(this,"TOmitInitKey");k(this,"TExtra");k(this,"TInit");k(this,"TDeserializeResult");k(this,"options");m(this,vt,0);m(this,xe,[]);m(this,Et,{});m(this,en);m(this,In,(e,t,i)=>"length"in i?this.field(e,new Yc(t,i)):this.field(e,new Gc(t,i)));k(this,"uint8Array",(e,t,i)=>u(this,In).call(this,e,Qi.Instance,t,i));k(this,"string",(e,t,i)=>u(this,In).call(this,e,Hi.Instance,t,i));this.options={...Tc,...e}}get size(){return u(this,vt)}get fields(){return u(this,xe)}field(e,t){for(const a of u(this,xe))if(a[0]===e){const l=String(e);throw new Error(`This struct already have a field with name '${l}'`)}u(this,xe).push([e,t]);const i=t.getSize();return b(this,vt,u(this,vt)+i),this}concat(e){if(!(e instanceof Is))throw new TypeError("The other value must be a `Struct` instance");for(const t of u(e,xe))u(this,xe).push(t);return b(this,vt,u(this,vt)+u(e,vt)),Object.defineProperties(u(this,Et),Object.getOwnPropertyDescriptors(u(e,Et))),this}int8(e,t){return C(this,ye,gt).call(this,e,Ke.Int8,t)}uint8(e,t){return C(this,ye,gt).call(this,e,Ke.Uint8,t)}int16(e,t){return C(this,ye,gt).call(this,e,Ke.Int16,t)}uint16(e,t){return C(this,ye,gt).call(this,e,Ke.Uint16,t)}int32(e,t){return C(this,ye,gt).call(this,e,Ke.Int32,t)}uint32(e,t){return C(this,ye,gt).call(this,e,Ke.Uint32,t)}int64(e,t){return C(this,ye,Ki).call(this,e,Qr.Int64,t)}uint64(e,t){return C(this,ye,Ki).call(this,e,Qr.Uint64,t)}extra(e){return Object.defineProperties(u(this,Et),Object.getOwnPropertyDescriptors(e)),this}postDeserialize(e){return b(this,en,e),this}deserialize(e){const t=new La(u(this,Et));let i=We.resolve();const a=e.position;for(const[l,d]of u(this,xe))i=i.then(()=>d.deserialize(this.options,e,t)).then(y=>{t.set(l,y)},y=>{throw y instanceof gs?e.position===a?new ms:new tl:y});return i.then(()=>{const l=t.value;if(u(this,en)){const d=u(this,en).call(l,l);if(d!==void 0)return d}return l}).valueOrPromise()}serialize(e,t){let i;if(Ic(e)){i=e[ys];for(const[v,h]of Object.entries(e)){const _=i.get(v);_&&_.set(h)}}else{i=new La({});for(const[v,h]of u(this,xe)){const _=h.create(this.options,i,e[v]);i.set(v,_)}}let a=0;const l=[];for(const[v]of u(this,xe)){const h=i.get(v),_=h.getSize();l.push({fieldValue:h,size:_}),a+=_}if(!t)t=new Uint8Array(a);else if(t.length<a)throw new TypeError("Output buffer is too small");const d=new DataView(t.buffer,t.byteOffset,t.byteLength);let y=0;for(const{fieldValue:v,size:h}of l)v.serialize(d,t,y),y+=h;return t.length!==a?t.subarray(0,a):t}};vt=new WeakMap,xe=new WeakMap,Et=new WeakMap,en=new WeakMap,ye=new WeakSet,gt=function(e,t,i){return this.field(e,new Zc(t,i))},Ki=function(e,t,i){return this.field(e,new Fc(t,i))},In=new WeakMap;let K=Is;var re=(function(){function n(){var e=this;this._state="running",this.resolve=function(t){e._resolve(t),e._state="resolved"},this.reject=function(t){e._reject(t),e._state="rejected"},this._promise=new Promise(function(t,i){e._resolve=t,e._reject=i})}return Object.defineProperty(n.prototype,"promise",{get:function(){return this._promise},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"state",{get:function(){return this._state},enumerable:!1,configurable:!0}),n})(),nl=(function(){function n(e){e===void 0&&(e=0),this.pendingResolvers=new Map,this.nextId=e}return n.prototype.add=function(){var e=this.nextId++,t=new re;return this.pendingResolvers.set(e,t),[e,t.promise]},n.prototype.getResolver=function(e){if(!this.pendingResolvers.has(e))return null;var t=this.pendingResolvers.get(e);return this.pendingResolvers.delete(e),t},n.prototype.resolve=function(e,t){var i=this.getResolver(e);return i!==null?(i.resolve(t),!0):!1},n.prototype.reject=function(e,t){var i=this.getResolver(e);return i!==null?(i.reject(t),!0):!1},n})();function rl(n){return new Promise(function(e){globalThis.setTimeout(function(){return e()},n)})}const gi=globalThis,xr=gi.AbortController,Ut=gi.ReadableStream,Ce=gi.WritableStream,bs=gi.TransformStream;var tn;class wn extends Ut{constructor(t,i){let a;const l=new xr;super({start:async d=>{await Promise.resolve();const y=t({abortSignal:l.signal,enqueue:async v=>{if(l.signal.aborted)throw l.signal.reason;if(d.desiredSize===null){d.enqueue(v);return}if(u(this,tn)){b(this,tn,!1),d.enqueue(v);return}d.desiredSize<=0&&(a=new re,await a.promise),d.enqueue(v)},close(){d.close()},error(v){d.error(v)}});y&&"then"in y&&y.then(()=>{try{d.close()}catch{}},v=>{d.error(v)})},pull:()=>{if(a){a.resolve();return}(i==null?void 0:i.highWaterMark)===0&&b(this,tn,!0)},cancel:d=>{l.abort(d),a==null||a.reject(d)}},i);m(this,tn,!1)}}tn=new WeakMap;const il=()=>{};var Re,Oe,$e,pe,at,Yi,Gi;class kr{constructor(e){m(this,at);m(this,Re);m(this,Oe,0);m(this,$e,0);m(this,pe,0);k(this,"stream");k(this,"reader");this.stream=e,this.reader=e.getReader()}get position(){return u(this,pe)}readExactly(e){if(u(this,Re)){const t=u(this,Re),i=u(this,Oe);return u(this,$e)>e?(b(this,Oe,u(this,Oe)+e),b(this,$e,u(this,$e)-e),b(this,pe,u(this,pe)+e),t.subarray(i,i+e)):(b(this,Re,void 0),b(this,$e,0),b(this,Oe,0),b(this,pe,u(this,pe)+(t.length-i)),C(this,at,Gi).call(this,e,t.subarray(i)))}return C(this,at,Gi).call(this,e)}release(){return u(this,$e)>0?new wn(async e=>{const t=u(this,Re).subarray(u(this,Oe));for(await e.enqueue(t),e.abortSignal.addEventListener("abort",()=>{this.reader.cancel().catch(il)});;){const{done:i,value:a}=await this.reader.read();if(i)return;await e.enqueue(a)}}):(this.reader.releaseLock(),this.stream)}async cancel(e){await this.reader.cancel(e)}}Re=new WeakMap,Oe=new WeakMap,$e=new WeakMap,pe=new WeakMap,at=new WeakSet,Yi=async function(){const{done:e,value:t}=await this.reader.read();if(e)throw new gs;return t},Gi=async function(e,t){let i,a;if(t)i=new Uint8Array(e),i.set(t),a=t.length,e-=t.length;else{const l=await C(this,at,Yi).call(this);if(l.length===e)return b(this,pe,u(this,pe)+e),l;if(l.length>e)return b(this,Re,l),b(this,Oe,e),b(this,$e,l.length-e),b(this,pe,u(this,pe)+e),l.subarray(0,e);i=new Uint8Array(e),i.set(l),a=l.length,e-=l.length,b(this,pe,u(this,pe)+l.length)}for(;e>0;){const l=await C(this,at,Yi).call(this);if(l.length===e)return i.set(l,a),b(this,pe,u(this,pe)+e),i;if(l.length>e)return b(this,Re,l),b(this,Oe,e),b(this,$e,l.length-e),i.set(l.subarray(0,e),a),b(this,pe,u(this,pe)+e),i;i.set(l,a),a+=l.length,e-=l.length,b(this,pe,u(this,pe)+l.length)}return i};var Dn,Nn;class sl{constructor(e){m(this,Dn);m(this,Nn);let t;const i=new kr(new wn(a=>{t=a}));b(this,Dn,new Ut({async pull(a){try{const l=await e(i);a.enqueue(l)}catch(l){if(l instanceof ms){a.close();return}throw l}},cancel:a=>i.cancel(a)})),b(this,Nn,new Ce({async write(a){await t.enqueue(a)},abort(){t.close()},close(){t.close()}}))}get readable(){return u(this,Dn)}get writable(){return u(this,Nn)}}Dn=new WeakMap,Nn=new WeakMap;var nn,ke,ai,St,Pn;class Ji{constructor(){m(this,nn,"");m(this,ke,new re);m(this,ai,new Ce({write:e=>{b(this,nn,u(this,nn)+e)},close:()=>{u(this,ke).resolve(u(this,nn)),u(this,St).enqueue(u(this,nn)),u(this,St).close()},abort:e=>{u(this,ke).reject(e),u(this,St).error(e)}}));m(this,St);m(this,Pn,new Ut({start:e=>{b(this,St,e)}}));Object.defineProperties(u(this,Pn),{then:{get:()=>u(this,ke).promise.then.bind(u(this,ke).promise)},catch:{get:()=>u(this,ke).promise.catch.bind(u(this,ke).promise)},finally:{get:()=>u(this,ke).promise.finally.bind(u(this,ke).promise)}})}get writable(){return u(this,ai)}get readable(){return u(this,Pn)}}nn=new WeakMap,ke=new WeakMap,ai=new WeakMap,St=new WeakMap,Pn=new WeakMap;const{console:Vr}=globalThis;var ja;const al=((ja=Vr==null?void 0:Vr.createTask)==null?void 0:ja.bind(Vr))??(()=>({run(n){return n()}}));function ol(n){return typeof n=="object"&&n!==null&&"then"in n}var qn,Le;class be{constructor(e){m(this,qn);m(this,Le);k(this,"value");k(this,"consumed");b(this,qn,al("Consumable")),this.value=e,b(this,Le,new re),this.consumed=u(this,Le).promise}consume(){u(this,Le).resolve()}error(e){u(this,Le).reject(e)}tryConsume(e){try{let t=u(this,qn).run(()=>e(this.value));return ol(t)?t=t.then(i=>(u(this,Le).resolve(),i),i=>{throw u(this,Le).reject(i),i}):u(this,Le).resolve(),t}catch(t){throw u(this,Le).reject(t),t}}}qn=new WeakMap,Le=new WeakMap;(function(n){class e extends Ce{static async write(a,l){const d=new n(l);await a.write(d),await d.consumed}constructor(a,l){let d;l&&(d={},"highWaterMark"in l&&(d.highWaterMark=l.highWaterMark),"size"in l&&(d.size=y=>l.size(y instanceof n?y.value:y))),super({start(y){var v;return(v=a.start)==null?void 0:v.call(a,y)},async write(y,v){await y.tryConsume(h=>{var _;return(_=a.write)==null?void 0:_.call(a,h,v)})},abort(y){var v;return(v=a.abort)==null?void 0:v.call(a,y)},close(){var y;return(y=a.close)==null?void 0:y.call(a)}},d)}}n.WritableStream=e;class t extends Ut{static async enqueue(a,l){const d=new n(l);a.enqueue(d),await d.consumed}constructor(a,l){let d,y;l&&(y={},"highWaterMark"in l&&(y.highWaterMark=l.highWaterMark),"size"in l&&(y.size=v=>l.size(v.value))),super({async start(v){var h;d={async enqueue(_){await t.enqueue(v,_)},close(){v.close()},error(_){v.error(_)}},await((h=a.start)==null?void 0:h.call(a,d))},async pull(){var v;await((v=a.pull)==null?void 0:v.call(a,d))},async cancel(v){var h;await((h=a.cancel)==null?void 0:h.call(a,v))}},y)}}n.ReadableStream=t})(be||(be={}));var st;(function(n){function e(l){return l instanceof be?l.value:l}n.getValue=e;function t(l,d){return l instanceof be?l.tryConsume(d):d(l)}n.tryConsume=t;class i extends bs{constructor(){super({transform(d,y){n.tryConsume(d,v=>{y.enqueue(v)})}})}}n.UnwrapStream=i;class a extends Ce{constructor(d,y){let v;y&&(v={},"highWaterMark"in y&&(v.highWaterMark=y.highWaterMark),"size"in y&&(v.size=h=>y.size(h instanceof be?h.value:h))),super({start(h){var _;return(_=d.start)==null?void 0:_.call(d,h)},async write(h,_){await n.tryConsume(h,B=>{var W;return(W=d.write)==null?void 0:W.call(d,B,_)})},abort(h){var _;return(_=d.abort)==null?void 0:_.call(d,h)},close(){var h;return(h=d.close)==null?void 0:h.call(d)}},v)}}n.WritableStream=a})(st||(st={}));var Ae,Me,se,we;class Ja{constructor(e){m(this,Ae);m(this,Me);m(this,se);m(this,we);b(this,Ae,e),b(this,Me,new Uint8Array(e)),b(this,se,0),b(this,we,e)}*push(e){let t=0,i=e.length;if(u(this,se)!==0)if(i>=u(this,we)){if(u(this,Me).set(e.subarray(0,u(this,we)),u(this,se)),t+=u(this,we),i-=u(this,we),yield u(this,Me),b(this,se,0),b(this,we,u(this,Ae)),i===0)return}else{u(this,Me).set(e,u(this,se)),b(this,se,u(this,se)+i),b(this,we,u(this,we)-i);return}for(;i>=u(this,Ae);){const a=t+u(this,Ae);yield e.subarray(t,a),t=a,i-=u(this,Ae)}i>0&&(u(this,Me).set(e.subarray(t),u(this,se)),b(this,se,u(this,se)+i),b(this,we,u(this,we)-i))}flush(){if(u(this,se)===0)return;const e=u(this,Me).subarray(0,u(this,se));return b(this,se,0),b(this,we,u(this,Ae)),e}}Ae=new WeakMap,Me=new WeakMap,se=new WeakMap,we=new WeakMap;class cl extends bs{constructor(e,t=!1){const i=t?new Ja(e):void 0;super({async transform(a,l){await st.tryConsume(a,async d=>{if(i)for(const y of i.push(d))await be.ReadableStream.enqueue(l,y);else{let y=0,v=d.length;for(;v>0;){const h=y+e;await be.ReadableStream.enqueue(l,d.subarray(y,h)),y=h,v-=e}}})},flush(a){if(i){const l=i.flush();l&&a.enqueue(l)}}})}}function ll(n,e){return"start"in n?n.start(e):typeof n=="function"?n(e):n}var rn;class ul extends Ut{constructor(t,i){super({start:async a=>{await Promise.resolve(),this.readable=await ll(t,a),b(this,rn,this.readable.getReader())},pull:async a=>{var d;const l=await u(this,rn).read();l.done?(a.close(),"close"in t&&await((d=t.close)==null?void 0:d.call(t))):a.enqueue(l.value)},cancel:async a=>{var l;await u(this,rn).cancel(a),"cancel"in t&&await((l=t.cancel)==null?void 0:l.call(t,a))}},i);k(this,"readable");m(this,rn)}}rn=new WeakMap;const Ia=()=>{};var Cn,Bn,xt,Rn,sn;class hl{constructor(e){m(this,Cn,[]);m(this,Bn,[]);m(this,xt,!1);m(this,Rn,new re);m(this,sn);b(this,sn,e??{})}get writableClosed(){return u(this,xt)}get closed(){return u(this,Rn).promise}wrapReadable(e,t){return new ul({start:i=>(u(this,Cn).push(i),e),cancel:async()=>{await this.close()},close:async()=>{await this.dispose()}},t)}createWritable(e){const t=e.getWriter();return u(this,Bn).push(t),new Ce({write:async i=>{await t.write(i)},abort:async i=>{await t.abort(i),await this.close()},close:async()=>{await t.close().catch(Ia),await this.close()}})}async close(){var e,t;if(!u(this,xt)){b(this,xt,!0),await((t=(e=u(this,sn)).close)==null?void 0:t.call(e))!==!1&&await this.dispose();for(const i of u(this,Bn))i.close().catch(Ia)}}async dispose(){var e,t;b(this,xt,!0),u(this,Rn).resolve();for(const i of u(this,Cn))try{i.close()}catch{}await((t=(e=u(this,sn)).dispose)==null?void 0:t.call(e))}}Cn=new WeakMap,Bn=new WeakMap,xt=new WeakMap,Rn=new WeakMap,sn=new WeakMap;const dl=globalThis,Xi=dl.TextDecoderStream;function fl(n,e){const t=e.writable.getWriter(),i=e.readable.pipeTo(n);return new Ce({async write(a){await t.write(a)},async close(){await t.close(),await i}})}class pl extends sl{constructor(e){super(t=>e.deserialize(t))}}async function wl(n){return"start"in n?await n.start():typeof n=="function"?await n():n}var kt;const Ds=class Ds extends Ce{constructor(t){super({start:async()=>{await Promise.resolve(),this.writable=await wl(t),b(this,kt,this.writable.getWriter())},write:async i=>{await u(this,kt).write(i)},abort:async i=>{var a;await u(this,kt).abort(i),t!==this.writable&&"close"in t&&await((a=t.close)==null?void 0:a.call(t))},close:async()=>{var i;await u(this,kt).close(),t!==this.writable&&"close"in t&&await((i=t.close)==null?void 0:i.call(t))}});k(this,"writable");m(this,kt)}bePipedThroughFrom(t){let i;return new Ds({start:()=>(i=t.readable.pipeTo(this),t.writable),async close(){await i}})}};kt=new WeakMap;let Zi=Ds;var an;class vs{constructor(){m(this,an,[]);this.dispose=this.dispose.bind(this)}addDisposable(e){return u(this,an).push(e),e}dispose(){for(const e of u(this,an))e.dispose();b(this,an,[])}}an=new WeakMap;class Es extends vs{constructor(t){super();k(this,"adb");this.adb=t}}const gl=new K({littleEndian:!0}).uint32("version"),yl=new K({littleEndian:!0}).uint32("bpp").uint32("size").uint32("width").uint32("height").uint32("red_offset").uint32("red_length").uint32("blue_offset").uint32("blue_length").uint32("green_offset").uint32("green_length").uint32("alpha_offset").uint32("alpha_length").uint8Array("data",{lengthField:"size"}),ml=new K({littleEndian:!0}).uint32("bpp").uint32("colorSpace").uint32("size").uint32("width").uint32("height").uint32("red_offset").uint32("red_length").uint32("blue_offset").uint32("blue_length").uint32("green_offset").uint32("green_length").uint32("alpha_offset").uint32("alpha_length").uint8Array("data",{lengthField:"size"});class Xa extends Error{constructor(e,t){super(e,t)}}class bl extends Xa{constructor(e){super(`Unsupported FrameBuffer version ${e}`)}}class vl extends Xa{constructor(){super("FrameBuffer is disabled by current app")}}async function El(n){const e=await n.createSocket("framebuffer:"),t=new kr(e.readable);let i;try{({version:i}=await gl.deserialize(t))}catch(a){throw a instanceof ms?new vl:a}switch(i){case 1:return yl.deserialize(t);case 2:return ml.deserialize(t);default:throw new bl(i)}}class Sl extends Es{reboot(e=""){return this.adb.createSocketAndWait(`reboot:${e}`)}bootloader(){return this.reboot("bootloader")}fastboot(){return this.reboot("fastboot")}recovery(){return this.reboot("recovery")}sideload(){return this.reboot("sideload")}qualcommEdlMode(){return this.reboot("edl")}powerOff(){return this.adb.subprocess.spawnAndWaitLegacy(["reboot","-p"])}powerButton(e=!1){const t=["input","keyevent"];return e&&t.push("--longpress"),t.push("POWER"),this.adb.subprocess.spawnAndWaitLegacy(t)}samsungOdin(){return this.reboot("download")}}var Lt,ze;class Za{constructor(e=!1){m(this,Lt);m(this,ze,[]);b(this,Lt,e)}wait(){if(!u(this,Lt)&&(b(this,Lt,!0),u(this,ze).length===0))return Promise.resolve();const e=new re;return u(this,ze).push(e),e.promise}notifyOne(){u(this,ze).length!==0?u(this,ze).pop().resolve():b(this,Lt,!1)}dispose(){for(const e of u(this,ze))e.reject(new Error("The AutoResetEvent has been disposed"));u(this,ze).length=0}}Lt=new WeakMap,ze=new WeakMap;const H=[],Gt=61;function Lr(n,e){const t=n.charCodeAt(0),i=e.charCodeAt(0);for(let a=t;a<=i;a+=1)H.push(a)}Lr("A","Z");Lr("a","z");Lr("0","9");Lr("+","+");Lr("/","/");function eo(n){const e=n%3,t=e!==0?3-e:0;return[(n+t)/3*4,t]}function xl(n,e){const[t,i]=eo(n.length);if(e){if(e.length<t)throw new TypeError("output buffer is too small");if(e=e.subarray(0,t),n.buffer!==e.buffer)zi(n,e,i);else if(e.byteOffset+e.length-(i+1)<=n.byteOffset+n.length)zi(n,e,i);else if(e.byteOffset>=n.byteOffset-1)kl(n,e,i);else throw new TypeError("input and output cannot overlap");return t}else return e=new Uint8Array(t),zi(n,e,i),e}function zi(n,e,t){let i=0,a=0;for(;i<n.length-2;){const l=n[i];i+=1;const d=n[i];i+=1;const y=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4|d>>4],a+=1,e[a]=H[(d&15)<<2|y>>6],a+=1,e[a]=H[y&63],a+=1}if(t===2){const l=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4],a+=1,e[a]=Gt,a+=1,e[a]=Gt}else if(t===1){const l=n[i];i+=1;const d=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4|d>>4],a+=1,e[a]=H[(d&15)<<2],a+=1,e[a]=Gt}}function kl(n,e,t){let i=n.length-1,a=e.length-1;if(t===2){const l=n[i];i-=1,e[a]=Gt,a-=1,e[a]=Gt,a-=1,e[a]=H[(l&3)<<4],a-=1,e[a]=H[l>>2],a-=1}else if(t===1){const l=n[i];i-=1;const d=n[i];i-=1,e[a]=Gt,a-=1,e[a]=H[(l&15)<<2],a-=1,e[a]=H[(d&3)<<4|l>>4],a-=1,e[a]=H[d>>2],a-=1}for(;i>=0;){const l=n[i];i-=1;const d=n[i];i-=1;const y=n[i];i-=1,e[a]=H[l&63],a-=1,e[a]=H[(d&15)<<2|l>>6],a-=1,e[a]=H[(y&3)<<4|d>>4],a-=1,e[a]=H[y>>2],a-=1}}function Ll(n){if(n<48)throw new TypeError(`Invalid hex char ${n}`);if(n<58)return n-48;if(n<65)throw new TypeError(`Invalid hex char ${n}`);if(n<71)return n-55;if(n<97)throw new TypeError(`Invalid hex char ${n}`);if(n<103)return n-87;throw new TypeError(`Invalid hex char ${n}`)}function Tn(n){let e=0;for(let t=0;t<n.length;t+=1)e=e<<4|Ll(n[t]);return e}function _l(n,e,t){const i=e;for(e+=3;e>=i&&t>0;){const a=t&15;t>>=4,a<10?n[e]=a+48:n[e]=a+87,e-=1}for(;e>=i;)n[e]=48,e-=1}const es=()=>{};function to(...n){throw new Error(`Unreachable. Arguments:
|
|
2
|
+
`+n.join(`
|
|
3
|
+
`))}function Hr(n,e){if(n.length!==e.length)return!1;for(let t=0;t<n.length;t+=1)if(n[t]!==e[t])return!1;return!0}const no=new K().string("length",{length:4}).string("content",{lengthField:"length",lengthFieldRadix:16});class ro extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}class Tl extends ro{constructor(){super("ADB reverse tunnel is not supported on this device when connected wirelessly.")}}const Il=new K().concat(no).postDeserialize(n=>{throw n.content==="more than one device/emulator"?new Tl:new ro(n.content)});function Dl(n){let e=0;for(const t of n){if(t<48||t>57)return e;e=e*10+t-48}return e}const Nl=qe("OKAY");var on;class Pl extends vs{constructor(t){super();k(this,"adb");m(this,on,new Map);this.adb=t}async createBufferedStream(t){const i=await this.adb.createSocket(t);return new kr(i.readable)}async sendRequest(t){const i=await this.createBufferedStream(t),a=await i.readExactly(4);return Hr(a,Nl)||await Il.deserialize(i),i}async list(){const t=await this.createBufferedStream("reverse:list-forward");return(await no.deserialize(t)).content.split(`
|
|
4
|
+
`).filter(a=>!!a).map(a=>{const[l,d,y]=a.split(" ");return{deviceSerial:l,localName:d,remoteName:y}})}async addExternal(t,i){const a=await this.sendRequest(`reverse:forward:${t};${i}`);if(t.startsWith("tcp:")){const l=a.position;try{const d=Tn(await a.readExactly(4));t=`tcp:${Dl(await a.readExactly(d))}`}catch(d){if(!(d instanceof gs&&a.position===l))throw d}}return t}async add(t,i,a){a=await this.adb.transport.addReverseTunnel(i,a);try{return t=await this.addExternal(t,a),u(this,on).set(t,a),t}catch(l){throw await this.adb.transport.removeReverseTunnel(a),l}}async remove(t){const i=u(this,on).get(t);i&&await this.adb.transport.removeReverseTunnel(i),await this.sendRequest(`reverse:killforward:${t}`)}async removeAll(){await this.adb.transport.clearReverseTunnels(),u(this,on).clear(),await this.sendRequest("reverse:killforward-all")}}on=new WeakMap;var Ge,On,$n;const oi=class oi{constructor(e){m(this,Ge);m(this,On);m(this,$n);b(this,Ge,e),b(this,On,new Ut({start:t=>{u(this,Ge).closed.then(()=>t.close()).catch(to)}})),b(this,$n,e.closed.then(()=>0))}static isSupported(){return!0}static async pty(e,t){return new oi(await e.createSocket(`shell:${t}`))}static async raw(e,t){return new oi(await e.createSocket(`exec:${t}`))}get stdin(){return u(this,Ge).writable}get stdout(){return u(this,Ge).readable}get stderr(){return u(this,On)}get exit(){return u(this,$n)}resize(){}async kill(){await u(this,Ge).close()}};Ge=new WeakMap,On=new WeakMap,$n=new WeakMap;let Kr=oi;var O;(function(n){n.ShellV2="shell_v2",n.Cmd="cmd",n.StatV2="stat_v2",n.ListV2="ls_v2",n.FixedPushMkdir="fixed_push_mkdir",n.Abb="abb",n.AbbExec="abb_exec",n.SendReceiveV2="sendrecv_v2",n.DelayedAck="delayed_ack"})(O||(O={}));var yt;(function(n){n[n.Stdin=0]="Stdin",n[n.Stdout=1]="Stdout",n[n.Stderr=2]="Stderr",n[n.Exit=3]="Exit",n[n.CloseStdin=4]="CloseStdin",n[n.WindowSizeChange=5]="WindowSizeChange"})(yt||(yt={}));const Ui=new K({littleEndian:!0}).uint8("id",void 0).uint32("length").uint8Array("data",{lengthField:"length"});var cn,ln,An,Mn,zn,_t;const ci=class ci{constructor(e){m(this,cn);m(this,ln);m(this,An);m(this,Mn);m(this,zn);m(this,_t,new re);b(this,cn,e);let t,i;b(this,Mn,new wn(a=>{t=a})),b(this,zn,new wn(a=>{i=a})),e.readable.pipeThrough(new pl(Ui)).pipeTo(new Ce({write:async a=>{switch(a.id){case yt.Exit:u(this,_t).resolve(a.data[0]);break;case yt.Stdout:t.abortSignal.aborted||await t.enqueue(a.data);break;case yt.Stderr:i.abortSignal.aborted||await i.enqueue(a.data);break}}})).then(()=>{t.close(),i.close(),u(this,_t).reject(new Error("Socket ended without exit message"))},a=>{t.error(a),i.error(a),u(this,_t).reject(a)}),b(this,ln,u(this,cn).writable.getWriter()),b(this,An,new st.WritableStream({write:async a=>{await u(this,ln).write(Ui.serialize({id:yt.Stdin,data:a}))}}))}static isSupported(e){return e.canUseFeature(O.ShellV2)}static async pty(e,t){return new ci(await e.createSocket(`shell,v2,pty:${t}`))}static async raw(e,t){return new ci(await e.createSocket(`shell,v2,raw:${t}`))}get stdin(){return u(this,An)}get stdout(){return u(this,Mn)}get stderr(){return u(this,zn)}get exit(){return u(this,_t).promise}async resize(e,t){await u(this,ln).write(Ui.serialize({id:yt.WindowSizeChange,data:qe(`${e}x${t},0x0\0`)}))}kill(){return u(this,cn).close()}};cn=new WeakMap,ln=new WeakMap,An=new WeakMap,Mn=new WeakMap,zn=new WeakMap,_t=new WeakMap;let ts=ci;const ql={protocols:[ts,Kr]};var Un,ns;class Cl extends Es{constructor(){super(...arguments);m(this,Un)}shell(t,i){return C(this,Un,ns).call(this,"pty",t,i)}spawn(t,i){return C(this,Un,ns).call(this,"raw",t,i)}async spawnAndWait(t,i){const a=await this.spawn(t,i),[l,d,y]=await Promise.all([a.stdout.pipeThrough(new Xi).pipeThrough(new Ji),a.stderr.pipeThrough(new Xi).pipeThrough(new Ji),a.exit]);return{stdout:l,stderr:d,exitCode:y}}async spawnAndWaitLegacy(t){const{stdout:i}=await this.spawnAndWait(t,{protocols:[Kr]});return i}}Un=new WeakSet,ns=async function(t,i,a){const{protocols:l}={...ql,...a};let d;for(const y of l)if(await y.isSupported(this.adb)){d=y;break}if(!d)throw new Error("No specified protocol is supported by the device");return Array.isArray(i)?i=i.join(" "):i===void 0&&(i=""),await d[t](this.adb,i)};function rs(n){let e="";e+="'";let t=0;for(;;){const i=n.indexOf("'",t);if(i===-1){e+=n.substring(t);break}e+=n.substring(t,i),e+=String.raw`'\''`,t=i+1}return e+="'",e}function Bl(n){const e=new Uint8Array(n.length);for(let t=0;t<n.length;t+=1)e[t]=n.charCodeAt(t);return e}function V(n){const e=Bl(n);return wi(e,0)}var ae;(function(n){n.Entry=V("DENT"),n.Entry2=V("DNT2"),n.Lstat=V("STAT"),n.Stat=V("STA2"),n.Lstat2=V("LST2"),n.Done=V("DONE"),n.Data=V("DATA"),n.Ok=V("OKAY"),n.Fail=V("FAIL")})(ae||(ae={}));class Rl extends Error{}const io=new K({littleEndian:!0}).uint32("messageLength").string("message",{lengthField:"messageLength"}).postDeserialize(n=>{throw new Rl(n.message)});async function Yr(n,e,t){typeof e=="string"&&(e=V(e));const i=await n.readExactly(4);switch(wi(i,0)){case ae.Fail:throw await io.deserialize(n),new Error("Unreachable");case e:return await t.deserialize(n);default:throw new Error(`Expected '${e}', but got '${zt(i)}'`)}}async function*Gr(n,e,t){for(typeof e=="string"&&(e=V(e));;){const i=await n.readExactly(4);switch(wi(i,0)){case ae.Fail:throw await io.deserialize(n),new Error("Unreachable");case ae.Done:await n.readExactly(t.size);return;case e:yield await t.deserialize(n);break;default:throw new Error(`Expected '${e}' or '${ae.Done}', but got '${zt(i)}'`)}}}var he;(function(n){n.List=V("LIST"),n.ListV2=V("LIS2"),n.Send=V("SEND"),n.SendV2=V("SND2"),n.Lstat=V("STAT"),n.Stat=V("STA2"),n.LstatV2=V("LST2"),n.Data=V("DATA"),n.Done=V("DONE"),n.Receive=V("RECV")})(he||(he={}));const Da=new K({littleEndian:!0}).uint32("id").uint32("arg");async function Pe(n,e,t){if(typeof e=="string"&&(e=V(e)),typeof t=="number"){await n.write(Da.serialize({id:e,arg:t}));return}typeof t=="string"&&(t=qe(t)),await n.write(Da.serialize({id:e,arg:t.length})),await n.write(t)}var Jr;(function(n){n[n.Directory=4]="Directory",n[n.File=8]="File",n[n.Link=10]="Link"})(Jr||(Jr={}));const so=new K({littleEndian:!0}).int32("mode").int32("size").int32("mtime").extra({get type(){return this.mode>>12},get permission(){return this.mode&4095}}).postDeserialize(n=>{if(n.mode===0&&n.size===0&&n.mtime===0)throw new Error("lstat error")});var Xr;(function(n){n[n.SUCCESS=0]="SUCCESS",n[n.EACCES=13]="EACCES",n[n.EEXIST=17]="EEXIST",n[n.EFAULT=14]="EFAULT",n[n.EFBIG=27]="EFBIG",n[n.EINTR=4]="EINTR",n[n.EINVAL=22]="EINVAL",n[n.EIO=5]="EIO",n[n.EISDIR=21]="EISDIR",n[n.ELOOP=40]="ELOOP",n[n.EMFILE=24]="EMFILE",n[n.ENAMETOOLONG=36]="ENAMETOOLONG",n[n.ENFILE=23]="ENFILE",n[n.ENOENT=2]="ENOENT",n[n.ENOMEM=12]="ENOMEM",n[n.ENOSPC=28]="ENOSPC",n[n.ENOTDIR=20]="ENOTDIR",n[n.EOVERFLOW=75]="EOVERFLOW",n[n.EPERM=1]="EPERM",n[n.EROFS=30]="EROFS",n[n.ETXTBSY=26]="ETXTBSY"})(Xr||(Xr={}));const Ss=new K({littleEndian:!0}).uint32("error",void 0).uint64("dev").uint64("ino").uint32("mode").uint32("nlink").uint32("uid").uint32("gid").uint64("size").uint64("atime").uint64("mtime").uint64("ctime").extra({get type(){return this.mode>>12},get permission(){return this.mode&4095}}).postDeserialize(n=>{if(n.error)throw new Error(Xr[n.error])});async function Ol(n,e,t){const i=await n.lock();try{if(t)return await Pe(i,he.LstatV2,e),await Yr(i,ae.Lstat2,Ss);{await Pe(i,he.Lstat,e);const a=await Yr(i,ae.Lstat,so);return{mode:a.mode,size:BigInt(a.size),mtime:BigInt(a.mtime),get type(){return a.type},get permission(){return a.permission}}}}finally{i.release()}}async function $l(n,e){const t=await n.lock();try{return await Pe(t,he.Stat,e),await Yr(t,ae.Stat,Ss)}finally{t.release()}}const Al=new K({littleEndian:!0}).concat(so).uint32("nameLength").string("name",{lengthField:"nameLength"}),Ml=new K({littleEndian:!0}).concat(Ss).uint32("nameLength").string("name",{lengthField:"nameLength"});async function*zl(n,e){const t=await n.lock();try{await Pe(t,he.ListV2,e);for await(const i of Gr(t,ae.Entry2,Ml))i.error===Xr.SUCCESS&&(yield i)}finally{t.release()}}async function*Ul(n,e){const t=await n.lock();try{await Pe(t,he.List,e);for await(const i of Gr(t,ae.Entry,Al))yield i}finally{t.release()}}async function*Wl(n,e,t){if(t)yield*zl(n,e);else for await(const i of Ul(n,e))yield{mode:i.mode,size:BigInt(i.size),mtime:BigInt(i.mtime),get type(){return i.type},get permission(){return i.permission},name:i.name}}const Na=new K({littleEndian:!0}).uint32("dataLength").uint8Array("data",{lengthField:"dataLength"});async function*Fl(n,e){const t=await n.lock();let i=!1;try{await Pe(t,he.Receive,e);for await(const a of Gr(t,ae.Data,Na))yield a.data;i=!0}catch(a){throw i=!0,a}finally{if(!i)for await(const a of Gr(t,ae.Data,Na));t.release()}}function Vl(n,e){return new wn(async t=>{for await(const i of Fl(n,e))await t.enqueue(i)})}const ao=64*1024,jl=new K({littleEndian:!0}).uint32("unused");async function oo(n,e,t,i){const a=new xr;e.pipeThrough(new cl(t,!0)).pipeTo(new st.WritableStream({write:async l=>{await Pe(n,he.Data,l)}}),{signal:a.signal}).then(async()=>{await Pe(n,he.Done,i),await n.flush()},es),await Yr(n,ae.Ok,jl).catch(l=>{throw a.abort(),l})}async function Ql({socket:n,filename:e,file:t,type:i=Jr.File,permission:a=438,mtime:l=Date.now()/1e3|0,packetSize:d=ao}){const y=await n.lock();try{const v=i<<12|a,h=`${e},${v.toString()}`;await Pe(y,he.Send,h),await oo(y,t,d,l)}finally{y.release()}}var Zr;(function(n){n[n.None=0]="None",n[n.Brotli=1]="Brotli",n[n.Lz4=2]="Lz4",n[n.Zstd=4]="Zstd",n[n.DryRun=2147483648]="DryRun"})(Zr||(Zr={}));const Hl=new K({littleEndian:!0}).uint32("id").uint32("mode").uint32("flags",void 0);async function Kl({socket:n,filename:e,file:t,type:i=Jr.File,permission:a=438,mtime:l=Date.now()/1e3|0,packetSize:d=ao,dryRun:y=!1}){const v=await n.lock();try{await Pe(v,he.SendV2,e);const h=i<<12|a;let _=Zr.None;y&&(_|=Zr.DryRun),await v.write(Hl.serialize({id:he.SendV2,mode:h,flags:_})),await oo(v,t,d,l)}finally{v.release()}}function Yl(n){if(n.v2)return Kl(n);if(n.dryRun)throw new Error("dryRun is not supported in v1");return Ql(n)}var Wn,Tt,Fn,It,Dt,Vn,is;class Gl{constructor(e,t,i,a){m(this,Vn);m(this,Wn);m(this,Tt);m(this,Fn);m(this,It,new Za);m(this,Dt);b(this,Wn,e),b(this,Tt,t),b(this,Fn,a),b(this,Dt,new Ja(i))}get position(){return u(this,Tt).position}async flush(){try{await u(this,It).wait();const e=u(this,Dt).flush();e&&await C(this,Vn,is).call(this,e)}finally{u(this,It).notifyOne()}}async write(e){try{await u(this,It).wait();for(const t of u(this,Dt).push(e))await C(this,Vn,is).call(this,t)}finally{u(this,It).notifyOne()}}async readExactly(e){return await this.flush(),await u(this,Tt).readExactly(e)}release(){u(this,Dt).flush(),u(this,Fn).notifyOne()}async close(){await u(this,Tt).cancel()}}Wn=new WeakMap,Tt=new WeakMap,Fn=new WeakMap,It=new WeakMap,Dt=new WeakMap,Vn=new WeakSet,is=async function(e){await be.WritableStream.write(u(this,Wn),e)};var jn,Qn,un;class Jl{constructor(e,t){m(this,jn,new Za);m(this,Qn);m(this,un);b(this,Qn,e),b(this,un,new Gl(e.writable.getWriter(),new kr(e.readable),t,u(this,jn)))}async lock(){return await u(this,jn).wait(),u(this,un)}async close(){await u(this,un).close(),await u(this,Qn).close()}}jn=new WeakMap,Qn=new WeakMap,un=new WeakMap;function Xl(n){const e=n.lastIndexOf("/");if(e===-1)throw new Error("Invalid path");return e===0?"/":n.substring(0,e)}var Nt,Hn,Kn,Yn,Gn;class Zl extends vs{constructor(t,i){super();k(this,"_adb");k(this,"_socket");m(this,Nt);m(this,Hn);m(this,Kn);m(this,Yn);m(this,Gn);this._adb=t,this._socket=new Jl(i,t.maxPayloadSize),b(this,Nt,t.canUseFeature(O.StatV2)),b(this,Hn,t.canUseFeature(O.ListV2)),b(this,Kn,t.canUseFeature(O.FixedPushMkdir)),b(this,Yn,t.canUseFeature(O.SendReceiveV2)),b(this,Gn,this._adb.canUseFeature(O.ShellV2)&&!this.fixedPushMkdir)}get supportsStat(){return u(this,Nt)}get supportsListV2(){return u(this,Hn)}get fixedPushMkdir(){return u(this,Kn)}get supportsSendReceiveV2(){return u(this,Yn)}get needPushMkdirWorkaround(){return u(this,Gn)}async lstat(t){return await Ol(this._socket,t,u(this,Nt))}async stat(t){if(!u(this,Nt))throw new Error("Not supported");return await $l(this._socket,t)}async isDirectory(t){try{return await this.lstat(t+"/"),!0}catch{return!1}}opendir(t){return Wl(this._socket,t,this.supportsListV2)}async readdir(t){const i=[];for await(const a of this.opendir(t))i.push(a);return i}read(t){return Vl(this._socket,t)}async write(t){this.needPushMkdirWorkaround&&await this._adb.subprocess.spawnAndWait(["mkdir","-p",rs(Xl(t.filename))]),await Yl({v2:this.supportsSendReceiveV2,socket:this._socket,...t})}lockSocket(){return this._socket.lock()}async dispose(){super.dispose(),await this._socket.close()}}Nt=new WeakMap,Hn=new WeakMap,Kn=new WeakMap,Yn=new WeakMap,Gn=new WeakMap;var Jn,ss;class eu extends Es{constructor(){super(...arguments);m(this,Jn)}async getListenAddresses(){const t=await this.adb.getProp("service.adb.listen_addrs"),i=await this.adb.getProp("service.adb.tcp.port"),a=await this.adb.getProp("persist.adb.tcp.port");return{serviceListenAddresses:t!=""?t.split(","):[],servicePort:C(this,Jn,ss).call(this,i),persistPort:C(this,Jn,ss).call(this,a)}}async setPort(t){if(t<=0)throw new TypeError(`Invalid port ${t}`);const i=await this.adb.createSocketAndWait(`tcpip:${t}`);if(i!==`restarting in TCP mode port: ${t}
|
|
5
|
+
`)throw new Error(i);return i}async disable(){const t=await this.adb.createSocketAndWait("usb:");if(t!==`restarting in USB mode
|
|
6
|
+
`)throw new Error(t);return t}}Jn=new WeakSet,ss=function(t){if(!(!t||t==="0"))return Number.parseInt(t,10)};class tu{constructor(e){k(this,"transport");k(this,"subprocess");k(this,"power");k(this,"reverse");k(this,"tcpip");this.transport=e,this.subprocess=new Cl(this),this.power=new Sl(this),this.reverse=new Pl(this),this.tcpip=new eu(this)}get serial(){return this.transport.serial}get maxPayloadSize(){return this.transport.maxPayloadSize}get banner(){return this.transport.banner}get disconnected(){return this.transport.disconnected}get clientFeatures(){return this.transport.clientFeatures}get deviceFeatures(){return this.banner.features}canUseFeature(e){return this.clientFeatures.includes(e)&&this.deviceFeatures.includes(e)}async createSocket(e){return this.transport.connect(e)}async createSocketAndWait(e){return await(await this.createSocket(e)).readable.pipeThrough(new Xi).pipeThrough(new Ji)}async getProp(e){return(await this.subprocess.spawnAndWaitLegacy(["getprop",e])).trim()}async rm(e,t){const i=["rm"];if(t!=null&&t.recursive&&i.push("-r"),t!=null&&t.force&&i.push("-f"),Array.isArray(e))for(const l of e)i.push(rs(l));else i.push(rs(e));return i.push("</dev/null"),await this.subprocess.spawnAndWaitLegacy(i)}async sync(){const e=await this.createSocket("sync:");return new Zl(this,e)}async framebuffer(){return El(this)}async close(){await this.transport.close()}}var Kt;(function(n){n.Product="ro.product.name",n.Model="ro.product.model",n.Device="ro.product.device",n.Features="features"})(Kt||(Kt={}));var Xn,Zn,er,tr;const Ns=class Ns{constructor(e,t,i,a){m(this,Xn);m(this,Zn);m(this,er);m(this,tr,[]);b(this,Xn,e),b(this,Zn,t),b(this,er,i),b(this,tr,a)}static parse(e){let t,i,a,l=[];const d=e.split("::");if(d.length>1){const y=d[1];for(const v of y.split(";")){if(!v)continue;const h=v.split("=");if(h.length!==2)continue;const[_,B]=h;switch(_){case Kt.Product:t=B;break;case Kt.Model:i=B;break;case Kt.Device:a=B;break;case Kt.Features:l=B.split(",");break}}}return new Ns(t,i,a,l)}get product(){return u(this,Xn)}get model(){return u(this,Zn)}get device(){return u(this,er)}get features(){return u(this,tr)}};Xn=new WeakMap,Zn=new WeakMap,er=new WeakMap,tr=new WeakMap;let ei=Ns;function as(n,e,t){let i=0n;for(let a=e;a<e+t;a+=8){i<<=64n;const l=zc(n,a);i|=l}return i}function os(n,e,t,i,a){if(a)for(;i>0n;)qc(n,e,i),e+=8,i>>=64n;else{let l=e+t-8;for(;i>0n;)Cc(n,l,i),l-=8,i>>=64n}}const nu=38,ru=2048/8,iu=303,su=2048/8;function co(n){const e=as(n,nu,ru),t=as(n,iu,su);return[e,t]}function Pa(n,e){const t=n%e;return t>0?t:t+e}function au(n,e){if(n=Pa(n,e),!n||e<2)return NaN;const t=[];let i=e;for(;i;)[n,i]=[i,n%i],t.push({a:n,b:i});if(n!==1)return NaN;let a=1,l=0;for(let d=t.length-2;d>=0;d-=1)[a,l]=[l,a-l*Math.floor(t[d].a/t[d].b)];return Pa(l,e)}const bt=2048/8,ou=bt/4;function lo(){return 8+bt+bt+4}function cu(n,e){let t;const i=lo();if(!e)e=new Uint8Array(i),t="Uint8Array";else{if(e.length<i)throw new TypeError("output buffer is too small");t="number"}const a=new DataView(e.buffer,e.byteOffset,e.length);let l=0;a.setUint32(l,ou,!0),l+=4;const[d]=co(n),y=-au(Number(d%2n**32n),2**32);a.setInt32(l,y,!0),l+=4,os(e,l,bt,d,!0),l+=bt;const v=2n**4096n%d;return os(e,l,bt,v,!0),l+=bt,a.setUint32(l,65537,!0),l+=4,t==="Uint8Array"?e:i}function lu(n,e,t){if(t===1n)return 0n;let i=1n;for(n=n%t;e>0n;)BigInt.asUintN(1,e)===1n&&(i=i*n%t),n=n*n%t,e>>=1n;return i}const qa=20,Ca=48,uu=4,hu=5,du=6,Wi=new Uint8Array([Ca,13+qa,Ca,9,du,5,43,14,3,2,26,hu,0,uu,qa]);function fu(n,e){const[t,i]=co(n),a=new Uint8Array(256);let l=0;a[l]=0,l+=1,a[l]=1,l+=1;const d=a.length-Wi.length-e.length-1;for(;l<d;)a[l]=255,l+=1;a[l]=0,l+=1,a.set(Wi,l),l+=Wi.length,a.set(e,l);const y=lu(as(a,0,a.length),i,t);return os(a,0,a.length,y,!1),a}var Y;(function(n){n[n.Auth=1213486401]="Auth",n[n.Close=1163086915]="Close",n[n.Connect=1314410051]="Connect",n[n.Okay=1497451343]="Okay",n[n.Open=1313165391]="Open",n[n.Write=1163154007]="Write"})(Y||(Y={}));const ti=new K({littleEndian:!0}).uint32("command").uint32("arg0").uint32("arg1").uint32("payloadLength").uint32("checksum").int32("magic");new K({littleEndian:!0}).concat(ti).uint8Array("payload",{lengthField:"payloadLength"});function uo(n){return n.reduce((e,t)=>e+t,0)}class pu extends bs{constructor(){const e=new Uint8Array(ti.size);super({transform:async(t,i)=>{await t.tryConsume(async a=>{const l=a;l.payloadLength=l.payload.length,await be.ReadableStream.enqueue(i,ti.serialize(l,e)),l.payloadLength&&await be.ReadableStream.enqueue(i,l.payload)})}})}}var gn;(function(n){n[n.Token=1]="Token",n[n.Signature=2]="Signature",n[n.PublicKey=3]="PublicKey"})(gn||(gn={}));const wu=async function*(n,e){for await(const t of n.iterateKeys()){const i=await e();if(i.arg0!==gn.Token)return;const a=fu(t.buffer,i.payload);yield{command:Y.Auth,arg0:gn.Signature,arg1:0,payload:a}}},gu=async function*(n,e){var v;if((await e()).arg0!==gn.Token)return;let i;for await(const h of n.iterateKeys()){i=h;break}i||(i=await n.generateKey());const a=lo(),[l]=eo(a),d=(v=i.name)!=null&&v.length?qe(i.name):Ne,y=new Uint8Array(l+(d.length?d.length+1:0)+1);cu(i.buffer,y),xl(y.subarray(0,a),y),d.length&&(y[l]=32,y.set(d,l+1)),yield{command:Y.Auth,arg0:gn.PublicKey,arg1:0,payload:y}},yu=[wu,gu];var nr,hn,Pt,li,ui,ho;class mu{constructor(e,t){m(this,ui);k(this,"authenticators");m(this,nr);m(this,hn,new re);m(this,Pt);m(this,li,()=>u(this,hn).promise);this.authenticators=e,b(this,nr,t)}async process(e){u(this,Pt)||b(this,Pt,C(this,ui,ho).call(this)),u(this,hn).resolve(e);const t=await u(this,Pt).next();if(t.done)throw new Error("No authenticator can handle the request");return t.value}dispose(){var e,t;(t=(e=u(this,Pt))==null?void 0:e.return)==null||t.call(e)}}nr=new WeakMap,hn=new WeakMap,Pt=new WeakMap,li=new WeakMap,ui=new WeakSet,ho=async function*(){for(const e of this.authenticators)for await(const t of e(u(this,nr),u(this,li)))b(this,hn,new re),yield t};var qt,rr,Je,ir,sr,ar,or,Ct,Ue,hi,fo;class Ba{constructor(e){m(this,hi);m(this,qt);k(this,"localId");k(this,"remoteId");k(this,"localCreated");k(this,"service");m(this,rr);m(this,Je);m(this,ir);k(this,"writable");m(this,sr,!1);m(this,ar,new re);m(this,or);m(this,Ct);m(this,Ue,0);b(this,qt,e.dispatcher),this.localId=e.localId,this.remoteId=e.remoteId,this.localCreated=e.localCreated,this.service=e.service,b(this,rr,new wn(t=>{b(this,Je,t)})),this.writable=new st.WritableStream({start:t=>{b(this,ir,t),t.signal.addEventListener("abort",()=>{var i;(i=u(this,Ct))==null||i.reject(t.signal.reason)})},write:async t=>{const i=t.length,a=u(this,qt).options.maxPayloadSize;for(let l=0,d=a;l<i;l=d,d+=a){const y=t.subarray(l,d);await C(this,hi,fo).call(this,y)}}}),b(this,or,new bu(this)),b(this,Ue,e.availableWriteBytes)}get readable(){return u(this,rr)}get closed(){return u(this,ar).promise}get socket(){return u(this,or)}async enqueue(e){if(!u(this,Je).abortSignal.aborted)try{await u(this,Je).enqueue(e)}catch(t){if(u(this,Je).abortSignal.aborted)return;throw t}}ack(e){var t;b(this,Ue,u(this,Ue)+e),(t=u(this,Ct))==null||t.resolve()}async close(){var e;if(!u(this,sr)){b(this,sr,!0),(e=u(this,Ct))==null||e.reject(new Error("Socket closed"));try{u(this,ir).error(new Error("Socket closed"))}catch{}await u(this,qt).sendPacket(Y.Close,this.localId,this.remoteId,Ne)}}dispose(){try{u(this,Je).close()}catch{}u(this,ar).resolve()}}qt=new WeakMap,rr=new WeakMap,Je=new WeakMap,ir=new WeakMap,sr=new WeakMap,ar=new WeakMap,or=new WeakMap,Ct=new WeakMap,Ue=new WeakMap,hi=new WeakSet,fo=async function(e){const t=e.length;for(;u(this,Ue)<t;){const i=new re;b(this,Ct,i),await i.promise}u(this,Ue)===1/0?b(this,Ue,-1):b(this,Ue,u(this,Ue)-t),await u(this,qt).sendPacket(Y.Write,this.localId,this.remoteId,e)};var ge;class bu{constructor(e){m(this,ge);b(this,ge,e)}get localId(){return u(this,ge).localId}get remoteId(){return u(this,ge).remoteId}get localCreated(){return u(this,ge).localCreated}get service(){return u(this,ge).service}get readable(){return u(this,ge).readable}get writable(){return u(this,ge).writable}get closed(){return u(this,ge).closed}close(){return u(this,ge).close()}}ge=new WeakMap;var Xe,_e,Bt,cr,dn,Rt,lr,Z,po,wo,cs,go,yo,ls;class vu{constructor(e,t){m(this,Z);m(this,Xe,new nl(1));m(this,_e,new Map);m(this,Bt);k(this,"options");m(this,cr,!1);m(this,dn,new re);m(this,Rt,new Map);m(this,lr,new xr);this.options=t,this.options.initialDelayedAckBytes<0&&(this.options.initialDelayedAckBytes=0),e.readable.pipeTo(new Ce({write:async i=>{switch(i.command){case Y.Close:await C(this,Z,po).call(this,i);break;case Y.Okay:C(this,Z,wo).call(this,i);break;case Y.Open:await C(this,Z,go).call(this,i);break;case Y.Write:await C(this,Z,yo).call(this,i);break;default:throw new Error(`Unknown command: ${i.command.toString(16)}`)}}}),{preventCancel:t.preserveConnection??!1,signal:u(this,lr).signal}).then(()=>{C(this,Z,ls).call(this)},i=>{u(this,cr)||u(this,dn).reject(i),C(this,Z,ls).call(this)}),b(this,Bt,e.writable.getWriter())}get disconnected(){return u(this,dn).promise}async createSocket(e){this.options.appendNullToServiceString&&(e+="\0");const[t,i]=u(this,Xe).add();await this.sendPacket(Y.Open,t,this.options.initialDelayedAckBytes,e);const{remoteId:a,availableWriteBytes:l}=await i,d=new Ba({dispatcher:this,localId:t,remoteId:a,localCreated:!0,service:e,availableWriteBytes:l});return u(this,_e).set(t,d),d.socket}addReverseTunnel(e,t){u(this,Rt).set(e,t)}removeReverseTunnel(e){u(this,Rt).delete(e)}clearReverseTunnels(){u(this,Rt).clear()}async sendPacket(e,t,i,a){if(typeof a=="string"&&(a=qe(a)),a.length>this.options.maxPayloadSize)throw new TypeError("payload too large");await be.WritableStream.write(u(this,Bt),{command:e,arg0:t,arg1:i,payload:a,checksum:this.options.calculateChecksum?uo(a):0,magic:e^4294967295})}async close(){await Promise.all(Array.from(u(this,_e).values(),e=>e.close())),b(this,cr,!0),u(this,lr).abort(),this.options.preserveConnection?u(this,Bt).releaseLock():await u(this,Bt).close()}}Xe=new WeakMap,_e=new WeakMap,Bt=new WeakMap,cr=new WeakMap,dn=new WeakMap,Rt=new WeakMap,lr=new WeakMap,Z=new WeakSet,po=async function(e){if(e.arg0===0&&u(this,Xe).reject(e.arg1,new Error("Socket open failed")))return;const t=u(this,_e).get(e.arg1);if(t){await t.close(),t.dispose(),u(this,_e).delete(e.arg1);return}},wo=function(e){let t;if(this.options.initialDelayedAckBytes!==0){if(e.payload.length!==4)throw new Error("Invalid OKAY packet. Payload size should be 4");t=wi(e.payload,0)}else{if(e.payload.length!==0)throw new Error("Invalid OKAY packet. Payload size should be 0");t=1/0}if(u(this,Xe).resolve(e.arg1,{remoteId:e.arg0,availableWriteBytes:t}))return;const i=u(this,_e).get(e.arg1);if(i){i.ack(t);return}this.sendPacket(Y.Close,e.arg1,e.arg0,Ne)},cs=function(e,t,i){let a;return this.options.initialDelayedAckBytes!==0?(a=new Uint8Array(4),Ac(a,0,i)):a=Ne,this.sendPacket(Y.Okay,e,t,a)},go=async function(e){const[t]=u(this,Xe).add();u(this,Xe).resolve(t,void 0);const i=e.arg0;let a=e.arg1,l=zt(e.payload);if(l.endsWith("\0")&&(l=l.substring(0,l.length-1)),this.options.initialDelayedAckBytes===0){if(a!==0)throw new Error("Invalid OPEN packet. arg1 should be 0");a=1/0}else if(a===0)throw new Error("Invalid OPEN packet. arg1 should be greater than 0");const d=u(this,Rt).get(l);if(!d){await this.sendPacket(Y.Close,0,i,Ne);return}const y=new Ba({dispatcher:this,localId:t,remoteId:i,localCreated:!1,service:l,availableWriteBytes:a});try{await d(y.socket),u(this,_e).set(t,y),await C(this,Z,cs).call(this,t,i,this.options.initialDelayedAckBytes)}catch{await this.sendPacket(Y.Close,0,i,Ne)}},yo=async function(e){const t=u(this,_e).get(e.arg1);if(!t)throw new Error(`Unknown local socket id: ${e.arg1}`);let i=!1;const a=[(async()=>{await t.enqueue(e.payload),await C(this,Z,cs).call(this,e.arg1,e.arg0,e.payload.length),i=!0})()];this.options.readTimeLimit&&a.push((async()=>{if(await rl(this.options.readTimeLimit),!i)throw new Error(`readable of \`${t.service}\` has stalled for ${this.options.readTimeLimit} milliseconds`)})()),await Promise.race(a)},ls=function(){for(const e of u(this,_e).values())e.dispose();u(this,dn).resolve()};const Eu=16777217,Ra=[O.ShellV2,O.Cmd,O.StatV2,O.ListV2,O.FixedPushMkdir,"apex",O.Abb,"fixed_push_symlink_timestamp",O.AbbExec,"remount_shell","track_app",O.SendReceiveV2,"sendrecv_v2_brotli","sendrecv_v2_lz4","sendrecv_v2_zstd","sendrecv_v2_dry_run_send",O.DelayedAck],Su=32*1024*1024;var ur,Te,hr,dr,fn,fr;const Ps=class Ps{constructor({serial:e,connection:t,version:i,banner:a,features:l=Ra,initialDelayedAckBytes:d,...y}){m(this,ur);m(this,Te);m(this,hr);m(this,dr);m(this,fn);m(this,fr);if(b(this,hr,e),b(this,ur,t),b(this,fn,ei.parse(a)),b(this,fr,l),l.includes(O.DelayedAck)){if(d<=0)throw new TypeError("`initialDelayedAckBytes` must be greater than 0 when DelayedAck feature is enabled.");u(this,fn).features.includes(O.DelayedAck)||(d=0)}else d=0;let v,h;i>=Eu?(v=!1,h=!1):(v=!0,h=!0),b(this,Te,new vu(t,{calculateChecksum:v,appendNullToServiceString:h,initialDelayedAckBytes:d,...y})),b(this,dr,i)}static async authenticate({serial:e,connection:t,credentialStore:i,authenticators:a=yu,features:l=Ra,initialDelayedAckBytes:d=Su,...y}){let v=16777217,h=1024*1024;const _=new re,B=new mu(a,i),W=new xr,oe=t.readable.pipeTo(new Ce({async write(U){switch(U.command){case Y.Connect:v=Math.min(v,U.arg0),h=Math.min(h,U.arg1),_.resolve(zt(U.payload));break;case Y.Auth:{const lt=await B.process(U);await mn(lt);break}}}}),{preventCancel:!0,signal:W.signal}).then(()=>{_.reject(new Error("Connection closed unexpectedly"))},U=>{_.reject(U)}),Fe=t.writable.getWriter();async function mn(U){U.checksum=uo(U.payload),U.magic=U.command^4294967295,await be.WritableStream.write(Fe,U)}const ct=l.slice();if(d<=0){const U=l.indexOf(O.DelayedAck);U!==-1&&ct.splice(U,1)}let Wt;try{await mn({command:Y.Connect,arg0:v,arg1:h,payload:qe(`host::features=${ct.join(",")}`)}),Wt=await _.promise}finally{W.abort(),Fe.releaseLock(),await oe}return new Ps({serial:e,connection:t,version:v,maxPayloadSize:h,banner:Wt,features:ct,initialDelayedAckBytes:d,...y})}get connection(){return u(this,ur)}get serial(){return u(this,hr)}get protocolVersion(){return u(this,dr)}get maxPayloadSize(){return u(this,Te).options.maxPayloadSize}get banner(){return u(this,fn)}get disconnected(){return u(this,Te).disconnected}get clientFeatures(){return u(this,fr)}connect(e){return u(this,Te).createSocket(e)}addReverseTunnel(e,t){return t||(t=`localabstract:reverse_${Math.random().toString().substring(2)}`),u(this,Te).addReverseTunnel(t,e),t}removeReverseTunnel(e){u(this,Te).removeReverseTunnel(e)}clearReverseTunnels(){u(this,Te).clearReverseTunnels()}close(){return u(this,Te).close()}};ur=new WeakMap,Te=new WeakMap,hr=new WeakMap,dr=new WeakMap,fn=new WeakMap,fr=new WeakMap;let us=Ps;const xu=[O.ShellV2,O.Cmd,O.StatV2,O.ListV2,O.FixedPushMkdir,"apex",O.Abb,"fixed_push_symlink_timestamp",O.AbbExec,"remount_shell","track_app",O.SendReceiveV2,"sendrecv_v2_brotli","sendrecv_v2_lz4","sendrecv_v2_zstd","sendrecv_v2_dry_run_send"];var Ze,pr,wr;class ku{constructor(e,t,i,a){m(this,Ze);k(this,"serial");k(this,"transportId");k(this,"maxPayloadSize",1*1024*1024);k(this,"banner");m(this,pr,new re);m(this,wr,new xr);k(this,"disconnected");b(this,Ze,e),this.serial=t,this.banner=i,this.transportId=a,this.disconnected=Promise.race([u(this,pr).promise,e.waitFor({transportId:a},"disconnect",{signal:u(this,wr).signal,unref:!0})])}get clientFeatures(){return xu}async connect(e){return await u(this,Ze).createDeviceConnection({transportId:this.transportId},e)}async addReverseTunnel(e,t){return await u(this,Ze).connector.addReverseTunnel(e,t)}async removeReverseTunnel(e){await u(this,Ze).connector.removeReverseTunnel(e)}async clearReverseTunnels(){await u(this,Ze).connector.clearReverseTunnels()}close(){u(this,pr).resolve(),u(this,wr).abort()}}Ze=new WeakMap,pr=new WeakMap,wr=new WeakMap;const Lu=qe("OKAY"),mo=qe("FAIL");var et,Ot,$t;class Oa{constructor(e){m(this,et);m(this,Ot);m(this,$t);b(this,et,e),b(this,Ot,new kr(e.readable)),b(this,$t,e.writable.getWriter())}readExactly(e){return u(this,Ot).readExactly(e)}readString(){return We.try(()=>this.readExactly(4)).then(e=>{const t=Tn(e);return t===0?Ne:this.readExactly(t)}).then(e=>zt(e)).valueOrPromise()}async writeString(e){const t=qe(e),i=new Uint8Array(4+t.length);_l(i,0,t.length),i.set(t,4),await u(this,$t).write(i)}async readOkay(){const e=await this.readExactly(4);if(!Hr(e,Lu)){if(Hr(e,mo)){const t=await this.readString();throw new Error(t)}throw new Error(`Unexpected response: ${zt(e)}`)}}release(){return u(this,$t).releaseLock(),{readable:u(this,Ot).release(),writable:u(this,et).writable,closed:u(this,et).closed,close:()=>u(this,et).close()}}async dispose(){await u(this,Ot).cancel().catch(es),await u(this,$t).close().catch(es);try{await u(this,et).close()}catch{}}}et=new WeakMap,Ot=new WeakMap,$t=new WeakMap;const mt=class mt{constructor(e){k(this,"connector");k(this,"wireless",new mt.WirelessCommands(this));k(this,"mDns",new mt.MDnsCommands(this));this.connector=e}async createConnection(e,t){const i=await this.connector.connect(t),a=new Oa(i);try{await a.writeString(e)}catch(l){throw await a.dispose(),l}try{return await $a(()=>a.readOkay(),t==null?void 0:t.signal),a}catch(l){throw await a.dispose(),l}}async getVersion(){const e=await this.createConnection("host:version");try{const t=Tn(await e.readExactly(4));return Tn(await e.readExactly(t))}finally{await e.dispose()}}async validateVersion(){const e=await this.getVersion();if(e!==mt.VERSION)throw new Error(`adb server version (${e}) doesn't match this client (${mt.VERSION})`)}async killServer(){await(await this.createConnection("host:kill")).dispose()}async getServerFeatures(){const e=await this.createConnection("host:host-features");try{return(await e.readString()).split(",")}finally{await e.dispose()}}parseDeviceList(e){const t=[];for(const i of e.split(`
|
|
7
|
+
`)){if(!i)continue;const a=i.split(" ").filter(Boolean),l=a[0],d=a[1];if(d!=="device"&&d!=="unauthorized")continue;let y,v,h,_;for(let B=2;B<a.length;B+=1){const[W,oe]=a[B].split(":");switch(W){case"product":y=oe;break;case"model":v=oe;break;case"device":h=oe;break;case"transport_id":_=BigInt(oe);break}}if(!_)throw new Error(`No transport id for device ${l}`);t.push({serial:l,authenticating:d==="unauthorized",product:y,model:v,device:h,transportId:_})}return t}async getDevices(){const e=await this.createConnection("host:devices-l");try{const t=await e.readString();return this.parseDeviceList(t)}finally{await e.dispose()}}async*trackDevices(e){const t=await this.createConnection("host:track-devices-l");try{for(;;){const i=await $a(async()=>await t.readString(),e);yield this.parseDeviceList(i)}}catch(i){if(i===(e==null?void 0:e.reason))return}finally{await t.dispose()}}formatDeviceService(e,t){if(!e)return`host:${t}`;if("transportId"in e)return`host-transport-id:${e.transportId}:${t}`;if("serial"in e)return`host-serial:${e.serial}:${t}`;if("usb"in e)return`host-usb:${t}`;if("tcp"in e)return`host-local:${t}`;throw new TypeError("Invalid device selector")}async reconnectDevice(e){const t=await this.createConnection(e==="offline"?"host:reconnect-offline":this.formatDeviceService(e,"reconnect"));try{await t.readString()}finally{await t.dispose()}}async getDeviceFeatures(e){const t=await this.createDeviceConnection(e,"host:features"),i=new Oa(t);try{const l=(await i.readString()).split(",");return{transportId:t.transportId,features:l}}finally{await i.dispose()}}async createDeviceConnection(e,t){await this.validateVersion();let i,a;if(!e)i="host:tport:any";else if("transportId"in e)i=`host:transport-id:${e.transportId}`,a=e.transportId;else if("serial"in e)i=`host:tport:serial:${e.serial}`;else if("usb"in e)i="host:tport:usb";else if("tcp"in e)i="host:tport:local";else throw new TypeError("Invalid device selector");const l=await this.createConnection(i);try{await l.writeString(t)}catch(d){throw await l.dispose(),d}try{if(a===void 0){const y=await l.readExactly(8);a=Mc(y,0)}await l.readOkay();const d=l.release();return{transportId:a,service:t,readable:d.readable,writable:new Zi(d.writable).bePipedThroughFrom(new st.UnwrapStream),get closed(){return d.closed},async close(){await d.close()}}}catch(d){throw await l.dispose(),d}}async waitFor(e,t,i){let a;if(!e)a="any";else if("transportId"in e)a="any";else if("serial"in e)a="any";else if("usb"in e)a="usb";else if("tcp"in e)a="local";else throw new TypeError("Invalid device selector");const l=this.formatDeviceService(e,`wait-for-${a}-${t}`),d=await this.createConnection(l,i);try{await d.readOkay()}finally{await d.dispose()}}async createTransport(e){const{transportId:t,features:i}=await this.getDeviceFeatures(e),l=(await this.getDevices()).find(y=>y.transportId===t),d=new ei(l==null?void 0:l.product,l==null?void 0:l.model,l==null?void 0:l.device,i);return new ku(this,(l==null?void 0:l.serial)??"",d,t)}};k(mt,"VERSION",41);let ni=mt;async function $a(n,...e){const t=new re;function i(){t.reject(this.reason)}try{for(const a of e)if(a){if(a.aborted)throw a.reason;a.addEventListener("abort",i)}return await Promise.race([n(),t.promise])}finally{for(const a of e)a&&a.removeEventListener("abort",i)}}(function(n){var d,y;class e extends Error{constructor(h){super(h),this.name="NetworkError"}}n.NetworkError=e;class t extends Error{constructor(h){super(h),this.name="UnauthorizedError"}}n.UnauthorizedError=t;class i extends Error{constructor(h){super(h),this.name="AlreadyConnectedError"}}n.AlreadyConnectedError=i;class a{constructor(h){m(this,d);b(this,d,h)}async pair(h,_){const B=await u(this,d).createConnection(`host:pair:${_}:${h}`);try{const W=await B.readExactly(4);if(Hr(W,mo))throw new Error(await B.readString());const oe=Tn(W);await B.readExactly(oe)}finally{await B.dispose()}}async connect(h){const _=await u(this,d).createConnection(`host:connect:${h}`);try{const B=await _.readString();switch(B){case`already connected to ${h}`:throw new n.AlreadyConnectedError(B);case`failed to connect to ${h}`:case`failed to authenticate to ${h}`:throw new n.UnauthorizedError(B);case`connected to ${h}`:return;default:throw new n.NetworkError(B)}}finally{await _.dispose()}}async disconnect(h){const _=await u(this,d).createConnection(`host:disconnect:${h}`);try{await _.readString()}finally{await _.dispose()}}}d=new WeakMap,n.WirelessCommands=a;class l{constructor(h){m(this,y);b(this,y,h)}async check(){const h=await u(this,y).createConnection("host:mdns:check");try{return!(await h.readString()).startsWith("ERROR:")}finally{await h.dispose()}}async getServices(){const h=await u(this,y).createConnection("host:mdns:services");try{return(await h.readString()).split(`
|
|
8
|
+
`).filter(Boolean).map(B=>{const W=B.split(" ");return{name:W[0],service:W[1],address:W[2]}})}finally{await h.dispose()}}}y=new WeakMap,n.MDnsCommands=l})(ni||(ni={}));function bo(n,e){return typeof n=="object"&&n!==null&&"name"in n&&n.name===e}function _u(n,e){return e.some(t=>n.interfaceClass===t.classCode&&n.interfaceSubclass===t.subclassCode&&n.interfaceProtocol===t.protocolCode)}function vo(n,e){for(const t of n.configurations)for(const i of t.interfaces)for(const a of i.alternates)if(_u(a,e))return{configuration:t,interface_:i,alternate:a};throw new TypeError("No matched alternate interface found")}function Aa(n){return n.toString(16).padStart(4,"0")}function Eo(n){return n.serialNumber?n.serialNumber:Aa(n.vendorId)+"x"+Aa(n.productId)}const hs={classCode:255,subclassCode:66,protocolCode:1};function Tu(n){if(n.length===0)throw new TypeError("No endpoints given");let e,t;for(const i of n)switch(i.direction){case"in":if(e=i,t)return{inEndpoint:e,outEndpoint:t};break;case"out":if(t=i,e)return{inEndpoint:e,outEndpoint:t};break}throw e?t?new Error("unreachable"):new TypeError("No output endpoint found."):new TypeError("No input endpoint found.")}var gr,tt;class Iu{constructor(e){m(this,gr);m(this,tt);b(this,gr,e),b(this,tt,0)}get position(){return u(this,tt)}readExactly(e){const t=u(this,gr).subarray(u(this,tt),u(this,tt)+e);return b(this,tt,u(this,tt)+e),t}}gr=new WeakMap,tt=new WeakMap;var At,nt,yr,mr,br,di,So;class Du{constructor(e,t,i,a){m(this,di);m(this,At);m(this,nt);m(this,yr);m(this,mr);m(this,br);b(this,At,e),b(this,nt,t),b(this,yr,i);let l=!1;const d=new hl({close:async()=>{try{l=!0,await e.raw.close()}catch{}},dispose:()=>{l=!0,a.removeEventListener("disconnect",y)}});function y(h){h.device===e.raw&&d.dispose().catch(to)}a.addEventListener("disconnect",y),b(this,mr,d.wrapReadable(new Ut({pull:async h=>{const _=await C(this,di,So).call(this);_?h.enqueue(_):h.close()}},{highWaterMark:0})));const v=i.packetSize-1;b(this,br,fl(d.createWritable(new st.WritableStream({write:async h=>{try{await e.raw.transferOut(i.endpointNumber,h),v&&(h.length&v)===0&&await e.raw.transferOut(i.endpointNumber,Ne)}catch(_){if(l)return;throw _}}})),new pu))}get device(){return u(this,At)}get inEndpoint(){return u(this,nt)}get outEndpoint(){return u(this,yr)}get readable(){return u(this,mr)}get writable(){return u(this,br)}}At=new WeakMap,nt=new WeakMap,yr=new WeakMap,mr=new WeakMap,br=new WeakMap,di=new WeakSet,So=async function(){try{for(;;){const e=await u(this,At).raw.transferIn(u(this,nt).endpointNumber,u(this,nt).packetSize);if(e.data.byteLength!==24)continue;const t=new Uint8Array(e.data.buffer),i=new Iu(t),a=ti.deserialize(i);if(a.magic===(a.command^4294967295)){if(a.payloadLength!==0){const l=await u(this,At).raw.transferIn(u(this,nt).endpointNumber,a.payloadLength);a.payload=new Uint8Array(l.data.buffer)}else a.payload=Ne;return a}}}catch(e){if(bo(e,"NetworkError")){if(await new Promise(t=>{setTimeout(()=>{t()},100)}),closed)return;throw e}throw e}};var vr,Er,le,Sr,fi,xo;class Ma{constructor(e,t=[hs],i){m(this,fi);m(this,vr);m(this,Er);m(this,le);m(this,Sr);b(this,le,e),b(this,Sr,Eo(e)),b(this,vr,t),b(this,Er,i)}get raw(){return u(this,le)}get serial(){return u(this,Sr)}get name(){return u(this,le).productName}async connect(){const[e,t]=await C(this,fi,xo).call(this);return new Du(this,e,t,u(this,Er))}}vr=new WeakMap,Er=new WeakMap,le=new WeakMap,Sr=new WeakMap,fi=new WeakSet,xo=async function(){var d;u(this,le).opened||await u(this,le).open();const{configuration:e,interface_:t,alternate:i}=vo(u(this,le),u(this,vr));((d=u(this,le).configuration)==null?void 0:d.configurationValue)!==e.configurationValue&&await u(this,le).selectConfiguration(e.configurationValue),t.claimed||await u(this,le).claimInterface(t.interfaceNumber),t.alternate.alternateSetting!==i.alternateSetting&&await u(this,le).selectAlternateInterface(t.interfaceNumber,i.alternateSetting);const{inEndpoint:a,outEndpoint:l}=Tu(i.endpoints);return[a,l]};var rt;const pi=class pi{constructor(e){m(this,rt);b(this,rt,e)}async requestDevice(e={}){if(!e.filters)e.filters=[hs];else if(e.filters.length===0)throw new TypeError("filters must not be empty");try{const t=await u(this,rt).requestDevice(e);return new Ma(t,e.filters,u(this,rt))}catch(t){if(bo(t,"NotFoundError"))return;throw t}}async getDevices(e=[hs]){if(e.length===0)throw new TypeError("filters must not be empty");return(await u(this,rt).getDevices()).filter(i=>{for(const a of e)if(!("vendorId"in a&&i.vendorId!==a.vendorId)&&!("productId"in a&&i.productId!==a.productId)&&!("serialNumber"in a&&Eo(i)!==a.serialNumber))try{return vo(i,e),!0}catch{continue}return!1}).map(i=>new Ma(i,e,u(this,rt)))}};rt=new WeakMap,k(pi,"BROWSER",typeof globalThis.navigator<"u"&&globalThis.navigator.usb?new pi(globalThis.navigator.usb):void 0);let ds=pi;function ko(){return new Promise((n,e)=>{const t=indexedDB.open("Tango",1);t.onerror=()=>{e(t.error)},t.onupgradeneeded=()=>{t.result.createObjectStore("Authentication",{autoIncrement:!0})},t.onsuccess=()=>{const i=t.result;n(i)}})}async function Nu(n){const e=await ko();return new Promise((t,i)=>{const a=e.transaction("Authentication","readwrite"),d=a.objectStore("Authentication").add(n);d.onerror=()=>{i(d.error)},d.onsuccess=()=>{t()},a.onerror=()=>{i(a.error)},a.oncomplete=()=>{e.close()}})}async function Pu(){const n=await ko();return new Promise((e,t)=>{const i=n.transaction("Authentication","readonly"),l=i.objectStore("Authentication").getAll();l.onerror=()=>{t(l.error)},l.onsuccess=()=>{e(l.result)},i.onerror=()=>{t(i.error)},i.oncomplete=()=>{n.close()}})}var pn;class qu{constructor(e="Tango"){m(this,pn);b(this,pn,e)}async generateKey(){const{privateKey:e}=await crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:2048,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-1"},!0,["sign","verify"]),t=new Uint8Array(await crypto.subtle.exportKey("pkcs8",e));return await Nu(t),{buffer:t,name:`${u(this,pn)}@${globalThis.location.hostname}`}}async*iterateKeys(){for(const e of await Pu())yield{buffer:e,name:`${u(this,pn)}@${globalThis.location.hostname}`}}}pn=new WeakMap;const Ht=ds.BROWSER,Cu=new qu;class Bu{constructor(){this.adb=null,this.device=null,this.packageName="",this.dbName="",this.dbPath="",this.sqlite3Path="",this.mode="webusb",this.bridgeUrl="",this.bridgeSerial="",this._runAsWorks=null,this._appDataDir=""}async connectBridge(e=15555){const t=[];(location.hostname==="127.0.0.1"||location.hostname==="localhost")&&t.push(location.origin),t.push(`http://127.0.0.1:${e}`);const a=new Set;for(const l of t)if(!a.has(l)){a.add(l);try{if((await(await fetch(`${l}/api/ping`,{signal:AbortSignal.timeout(2e3)})).json()).ok)return this.mode="bridge",this.bridgeUrl=l,!0}catch{}}return!1}async _bridgeShell(e){const t=await fetch(`${this.bridgeUrl}/api/shell`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:e,serial:this.bridgeSerial||void 0})}),i=await t.json();if(!t.ok)throw new Error(i.error||"Bridge shell command failed");return(i.output||"").replace(/\r\n/g,`
|
|
9
|
+
`).trimEnd()}async _bridgeGetDevices(){const e=await fetch(`${this.bridgeUrl}/api/devices`),t=await e.json();if(!e.ok)throw new Error(t.error||"Bridge devices request failed");return t.devices||[]}async requestDevice(){if(!Ht)throw new Error("WebUSB is not supported in this browser. Use Chrome or Edge.");const e=await Ht.requestDevice();if(!e)throw new Error("No device selected.");return await this._connectDevice(e),this.getDeviceInfo()}async getDevices(){return this.mode==="bridge"?this._bridgeGetDevices():Ht?(await Ht.getDevices()).map(t=>({serial:t.serial,name:t.name,display_name:`${t.name||t.serial} (${t.serial})`})):[]}async connectBySerial(e){if(this.mode==="bridge")return this.bridgeSerial=e,this.getDeviceInfo();if(!Ht)throw new Error("WebUSB not supported.");const i=(await Ht.getDevices()).find(a=>a.serial===e);if(!i)throw new Error(`Device ${e} not found.`);return await this._connectDevice(i),this.getDeviceInfo()}async _connectDevice(e){var a;await this.disconnect();let t;try{t=await e.connect()}catch(l){throw(a=l==null?void 0:l.message)!=null&&a.includes("claimInterface")?new Error("Cannot claim USB device — another program (likely ADB) is using it. Run 'adb kill-server' in your terminal, then retry."):l}const i=await us.authenticate({serial:e.serial,connection:t,credentialStore:Cu});this.adb=new tu(i),this.device=e}async disconnect(){if(this.mode==="bridge"){this.bridgeSerial="",this.bridgeUrl="",this.mode="webusb";return}if(this.adb){try{await this.adb.close()}catch{}this.adb=null,this.device=null}}checkConnection(){const e=this.mode==="bridge"?!!this.bridgeUrl:!!this.adb;return{connected:e,device:e?this.getDeviceInfo():null,package:this.packageName,database:this.dbName}}getDeviceInfo(){return this.mode==="bridge"?this.bridgeSerial?{serial:this.bridgeSerial,name:this.bridgeSerial,display_name:`${this.bridgeSerial} (ADB Bridge)`}:null:this.device?{serial:this.device.serial,name:this.device.name,display_name:`${this.device.name||this.device.serial} (${this.device.serial})`}:null}setPackage(e){this.packageName=e,this.dbName="",this.dbPath="",this.sqlite3Path="",this._runAsWorks=null,this._appDataDir=""}setDatabase(e,t){this.dbName=e,this.dbPath=t||""}async shell(e){if(this.mode==="bridge")return this._bridgeShell(e);if(!this.adb)throw new Error("Not connected to a device.");const t=await this.adb.subprocess.spawnAndWaitLegacy(e);let i;return typeof t=="string"?i=t:t instanceof Uint8Array?i=new TextDecoder().decode(t):(t==null?void 0:t.stdout)!==void 0?i=typeof t.stdout=="string"?t.stdout:new TextDecoder().decode(t.stdout):i=String(t),i.replace(/\r\n/g,`
|
|
10
|
+
`).trimEnd()}async runAs(e){if(this._runAsWorks===null)try{await this.shell(`run-as ${this.packageName} id`),this._runAsWorks=!0}catch{this._runAsWorks=!1;try{const i=(await this.shell(`dumpsys package ${this.packageName} | grep dataDir | head -1`)).match(/dataDir=(.+)/);this._appDataDir=i?i[1].trim():`/data/data/${this.packageName}`}catch{this._appDataDir=`/data/data/${this.packageName}`}}return this._runAsWorks?this.shell(`run-as ${this.packageName} ${e}`):this.shell(`cd ${this._appDataDir} && ${e}`)}async getPackages(){let i=(await this.shell('for p in $(pm list packages --user 0 -3 2>/dev/null | tr -d "\\r" | sed "s/package://"); do run-as $p id 2>/dev/null 1>/dev/null && echo $p; done')).split(`
|
|
11
|
+
`).map(a=>a.trim()).filter(Boolean);return i.length===0&&(i=(await this.shell('pm list packages -3 2>/dev/null | tr -d "\\r" | sed "s/package://"')).split(`
|
|
12
|
+
`).map(l=>l.trim()).filter(Boolean)),i.sort(),i}async getDatabases(e){if(!(e||this.packageName))throw new Error("No package selected.");const i=["databases","files","files/SQLite"],a=[],l=new Set;for(const d of i)try{const y=await this.runAs(`ls ${d} 2>/dev/null`);for(const v of y.split(`
|
|
13
|
+
`)){const h=v.trim();h&&(h.endsWith(".db")||h.endsWith(".sqlite")||h.endsWith(".sqlite3"))&&(l.has(h)||(l.add(h),a.push({name:h,path:`${d}/${h}`})))}}catch{}return a}async searchDatabases(e,t){if(!(e||this.packageName))throw new Error("No package selected.");const a=await this.runAs('find . -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" 2>/dev/null'),l=(t||"").toLowerCase(),d=[];for(const y of a.split(`
|
|
14
|
+
`)){let v=y.trim();if(!v)continue;v.startsWith("./")&&(v=v.slice(2));const h=v.split("/").pop();h.endsWith("-journal")||h.endsWith("-wal")||h.endsWith("-shm")||(!l||h.toLowerCase().includes(l)||v.toLowerCase().includes(l))&&d.push({name:h,path:v})}return d.sort((y,v)=>y.name.toLowerCase().localeCompare(v.name.toLowerCase())),d}async ensureSqlite3(){if(this.sqlite3Path)return this.sqlite3Path;try{const t=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(t.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}const e=["/system/bin/sqlite3","/system/xbin/sqlite3","/data/local/tmp/sqlite3"];for(const t of e)try{const i=await this.shell(`${t} -version 2>&1`);if(/^3\.\d+/.test(i.trim())){try{await this.runAs(`cp ${t} ./sqlite3`),await this.runAs("chmod 755 ./sqlite3");const a=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(a.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}return this.sqlite3Path=t,this.sqlite3Path}}catch{}if(this.mode==="bridge"&&this.bridgeUrl)try{const t=await fetch(`${this.bridgeUrl}/api/push-sqlite3`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:this.bridgeSerial||void 0})}),i=await t.json();if(t.ok&&i.ok){try{await this.runAs("cp /data/local/tmp/sqlite3 ./sqlite3"),await this.runAs("chmod 755 ./sqlite3");const a=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(a.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}return this.sqlite3Path="/data/local/tmp/sqlite3",this.sqlite3Path}}catch{}throw new Error("sqlite3 not found on device. Ensure a sqlite3 binary is available at /system/bin/sqlite3 or /data/local/tmp/sqlite3.")}async findDatabasePath(){if(this.dbPath)return this.dbPath;const e=[`databases/${this.dbName}`,`files/${this.dbName}`,`files/SQLite/${this.dbName}`];for(const t of e)try{if((await this.runAs(`ls ${t}`)).includes(this.dbName))return this.dbPath=t,t}catch{}throw new Error(`Database ${this.dbName} not found on device.`)}async _sqliteJson(e){const t=await this.ensureSqlite3(),i=await this.findDatabasePath(),a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} -json "${a}"`,d=await this.runAs(l);if(!d)return[];try{const y=JSON.parse(d);return Array.isArray(y)?y:[]}catch{return this._sqliteFallback(e,t,i)}}async _sqliteFallback(e,t,i){const a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} -header -separator "|" "${a}"`,y=(await this.runAs(l)).split(`
|
|
15
|
+
`).filter(Boolean);if(y.length===0)return[];const v=y[0].split("|").map(_=>_.trim()),h=[];for(let _=1;_<y.length;_++){const B=y[_].split("|").map(W=>W.trim());if(B.length===v.length){const W={};v.forEach((oe,Fe)=>W[oe]=B[Fe]),h.push(W)}}return h}async _sqliteExec(e){const t=await this.ensureSqlite3(),i=await this.findDatabasePath(),a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} "${a}"`;await this.runAs(l)}_isWriteQuery(e){const t=e.trim().toUpperCase();return["INSERT","UPDATE","DELETE","DROP","CREATE","ALTER","REPLACE"].some(i=>t.startsWith(i))}async getTables(){return(await this._sqliteJson("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;")).map(t=>({name:t.name,row_count:0}))}async getTableStructure(e){return this._sqliteJson(`PRAGMA table_info(${e});`)}async getTableData(e,t=100,i=0){const a=await this.getTableStructure(e);if(!a.length)throw new Error(`Table ${e} not found`);const l=await this._sqliteJson(`SELECT * FROM ${e} LIMIT ${t} OFFSET ${i};`),d=await this._sqliteJson(`SELECT COUNT(*) as count FROM ${e};`),y=d.length?Number(d[0].count):0;return{columns:a.map(v=>v.name),rows:l,row_count:l.length,total_count:y,offset:i,limit:t}}async executeQuery(e,t){const i=e.trim();if(this._isWriteQuery(i))return await this._sqliteExec(i),{columns:[],rows:[],row_count:0};let a=i;t&&!i.toUpperCase().includes("LIMIT")&&i.toUpperCase().startsWith("SELECT")&&(a=`${i.replace(/;$/,"")} LIMIT ${t};`);const l=await this._sqliteJson(a);return{columns:l.length?Object.keys(l[0]):[],rows:l,row_count:l.length}}async checkDatabaseExists(){try{return await this.findDatabasePath(),!0}catch{return!1}}}function Ru(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Fi={exports:{}},za;function Ou(){return za||(za=1,(function(n,e){var t=void 0,i=function(a){return t||(t=new Promise(function(l,d){var fa,pa;var y=typeof a<"u"?a:{},v=y.onAbort;y.onAbort=function(r){d(new Error(r)),v&&v(r)},y.postRun=y.postRun||[],y.postRun.push(function(){l(y)}),n=void 0;var h;h||(h=typeof y<"u"?y:{});var _=!!globalThis.window,B=!!globalThis.WorkerGlobalScope;h.onRuntimeInitialized=function(){function r(p,S){switch(typeof S){case"boolean":xc(p,S?1:0);break;case"number":vc(p,S);break;case"string":Ec(p,S,-1,-1);break;case"object":if(S===null)va(p);else if(S.length!=null){var L=Mr(S.length);Q.set(S,L),Sc(p,L,S.length,-1),_n(L)}else Fr(p,"Wrong API use : tried to return a value of an unknown type ("+S+").",-1);break;default:va(p)}}function s(p,S){for(var L=[],T=0;T<p;T+=1){var q=Be(S+4*T,"i32"),R=wc(q);if(R===1||R===2)q=bc(q);else if(R===3)q=yc(q);else if(R===4){R=q,q=gc(R),R=mc(R);for(var Ee=new Uint8Array(q),fe=0;fe<q;fe+=1)Ee[fe]=Q[R+fe];q=Ee}else q=null;L.push(q)}return L}function o(p,S){this.Qa=p,this.db=S,this.Oa=1,this.yb=[]}function c(p,S){if(this.db=S,this.ob=Ar(p),this.ob===null)throw Error("Unable to allocate memory for the SQL string");this.ub=this.ob,this.gb=this.Fb=null}function f(p){if(this.filename="dbfile_"+(4294967295*Math.random()>>>0),p!=null){var S=this.filename,L="/",T=S;if(L&&(L=typeof L=="string"?L:Li(L),T=S?Si(L+"/"+S):L),S=Vs(!0,!0),T=Vo(T,S),p){if(typeof p=="string"){L=Array(p.length);for(var q=0,R=p.length;q<R;++q)L[q]=p.charCodeAt(q);p=L}Br(T,S|146),L=Qt(T,577),sa(L,p,0,p.length,0),Pi(L),Br(T,S)}}this.handleError(I(this.filename,g)),this.db=Be(g,"i32"),Sa(this.db),this.pb={},this.Sa={}}var g=pt(4),E=h.cwrap,I=E("sqlite3_open","number",["string","number"]),$=E("sqlite3_close_v2","number",["number"]),P=E("sqlite3_exec","number",["number","string","number","number","number"]),z=E("sqlite3_changes","number",["number"]),G=E("sqlite3_prepare_v2","number",["number","string","number","number","number"]),wa=E("sqlite3_sql","string",["number"]),Xo=E("sqlite3_normalized_sql","string",["number"]),ga=E("sqlite3_prepare_v2","number",["number","number","number","number","number"]),Zo=E("sqlite3_bind_text","number",["number","number","number","number","number"]),ya=E("sqlite3_bind_blob","number",["number","number","number","number","number"]),ec=E("sqlite3_bind_double","number",["number","number","number"]),tc=E("sqlite3_bind_int","number",["number","number","number"]),nc=E("sqlite3_bind_parameter_index","number",["number","string"]),rc=E("sqlite3_step","number",["number"]),ic=E("sqlite3_errmsg","string",["number"]),sc=E("sqlite3_column_count","number",["number"]),ac=E("sqlite3_data_count","number",["number"]),oc=E("sqlite3_column_double","number",["number","number"]),ma=E("sqlite3_column_text","string",["number","number"]),cc=E("sqlite3_column_blob","number",["number","number"]),lc=E("sqlite3_column_bytes","number",["number","number"]),uc=E("sqlite3_column_type","number",["number","number"]),hc=E("sqlite3_column_name","string",["number","number"]),dc=E("sqlite3_reset","number",["number"]),fc=E("sqlite3_clear_bindings","number",["number"]),pc=E("sqlite3_finalize","number",["number"]),ba=E("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),wc=E("sqlite3_value_type","number",["number"]),gc=E("sqlite3_value_bytes","number",["number"]),yc=E("sqlite3_value_text","string",["number"]),mc=E("sqlite3_value_blob","number",["number"]),bc=E("sqlite3_value_double","number",["number"]),vc=E("sqlite3_result_double","",["number","number"]),va=E("sqlite3_result_null","",["number"]),Ec=E("sqlite3_result_text","",["number","string","number","number"]),Sc=E("sqlite3_result_blob","",["number","number","number","number"]),xc=E("sqlite3_result_int","",["number","number"]),Fr=E("sqlite3_result_error","",["number","string","number"]),Ea=E("sqlite3_aggregate_context","number",["number","number"]),Sa=E("RegisterExtensionFunctions","number",["number"]),xa=E("sqlite3_update_hook","number",["number","number","number"]);o.prototype.bind=function(p){if(!this.Qa)throw"Statement closed";return this.reset(),Array.isArray(p)?this.Wb(p):p!=null&&typeof p=="object"?this.Xb(p):!0},o.prototype.step=function(){if(!this.Qa)throw"Statement closed";this.Oa=1;var p=rc(this.Qa);switch(p){case 100:return!0;case 101:return!1;default:throw this.db.handleError(p)}},o.prototype.Pb=function(p){return p==null&&(p=this.Oa,this.Oa+=1),oc(this.Qa,p)},o.prototype.hc=function(p){if(p==null&&(p=this.Oa,this.Oa+=1),p=ma(this.Qa,p),typeof BigInt!="function")throw Error("BigInt is not supported");return BigInt(p)},o.prototype.mc=function(p){return p==null&&(p=this.Oa,this.Oa+=1),ma(this.Qa,p)},o.prototype.getBlob=function(p){p==null&&(p=this.Oa,this.Oa+=1);var S=lc(this.Qa,p);p=cc(this.Qa,p);for(var L=new Uint8Array(S),T=0;T<S;T+=1)L[T]=Q[p+T];return L},o.prototype.get=function(p,S){S=S||{},p!=null&&this.bind(p)&&this.step(),p=[];for(var L=ac(this.Qa),T=0;T<L;T+=1)switch(uc(this.Qa,T)){case 1:var q=S.useBigInt?this.hc(T):this.Pb(T);p.push(q);break;case 2:p.push(this.Pb(T));break;case 3:p.push(this.mc(T));break;case 4:p.push(this.getBlob(T));break;default:p.push(null)}return p},o.prototype.Db=function(){for(var p=[],S=sc(this.Qa),L=0;L<S;L+=1)p.push(hc(this.Qa,L));return p},o.prototype.Ob=function(p,S){p=this.get(p,S),S=this.Db();for(var L={},T=0;T<S.length;T+=1)L[S[T]]=p[T];return L},o.prototype.lc=function(){return wa(this.Qa)},o.prototype.ic=function(){return Xo(this.Qa)},o.prototype.Jb=function(p){return p!=null&&this.bind(p),this.step(),this.reset()},o.prototype.Lb=function(p,S){S==null&&(S=this.Oa,this.Oa+=1),p=Ar(p),this.yb.push(p),this.db.handleError(Zo(this.Qa,S,p,-1,0))},o.prototype.Vb=function(p,S){S==null&&(S=this.Oa,this.Oa+=1);var L=Mr(p.length);Q.set(p,L),this.yb.push(L),this.db.handleError(ya(this.Qa,S,L,p.length,0))},o.prototype.Kb=function(p,S){S==null&&(S=this.Oa,this.Oa+=1),this.db.handleError((p===(p|0)?tc:ec)(this.Qa,S,p))},o.prototype.Yb=function(p){p==null&&(p=this.Oa,this.Oa+=1),ya(this.Qa,p,0,0,0)},o.prototype.Mb=function(p,S){switch(S==null&&(S=this.Oa,this.Oa+=1),typeof p){case"string":this.Lb(p,S);return;case"number":this.Kb(p,S);return;case"bigint":this.Lb(p.toString(),S);return;case"boolean":this.Kb(p+0,S);return;case"object":if(p===null){this.Yb(S);return}if(p.length!=null){this.Vb(p,S);return}}throw"Wrong API use : tried to bind a value of an unknown type ("+p+")."},o.prototype.Xb=function(p){var S=this;return Object.keys(p).forEach(function(L){var T=nc(S.Qa,L);T!==0&&S.Mb(p[L],T)}),!0},o.prototype.Wb=function(p){for(var S=0;S<p.length;S+=1)this.Mb(p[S],S+1);return!0},o.prototype.reset=function(){return this.Cb(),fc(this.Qa)===0&&dc(this.Qa)===0},o.prototype.Cb=function(){for(var p;(p=this.yb.pop())!==void 0;)_n(p)},o.prototype.cb=function(){this.Cb();var p=pc(this.Qa)===0;return delete this.db.pb[this.Qa],this.Qa=0,p},c.prototype.next=function(){if(this.ob===null)return{done:!0};if(this.gb!==null&&(this.gb.cb(),this.gb=null),!this.db.db)throw this.Ab(),Error("Database closed");var p=Ur(),S=pt(4);Sn(g),Sn(S);try{this.db.handleError(ga(this.db.db,this.ub,-1,g,S)),this.ub=Be(S,"i32");var L=Be(g,"i32");return L===0?(this.Ab(),{done:!0}):(this.gb=new o(L,this.db),this.db.pb[L]=this.gb,{value:this.gb,done:!1})}catch(T){throw this.Fb=j(this.ub),this.Ab(),T}finally{zr(p)}},c.prototype.Ab=function(){_n(this.ob),this.ob=null},c.prototype.jc=function(){return this.Fb!==null?this.Fb:j(this.ub)},typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"&&(c.prototype[Symbol.iterator]=function(){return this}),f.prototype.Jb=function(p,S){if(!this.db)throw"Database closed";if(S){p=this.Gb(p,S);try{p.step()}finally{p.cb()}}else this.handleError(P(this.db,p,0,0,g));return this},f.prototype.exec=function(p,S,L){if(!this.db)throw"Database closed";var T=null,q=null,R=null;try{R=q=Ar(p);var Ee=pt(4);for(p=[];Be(R,"i8")!==0;){Sn(g),Sn(Ee),this.handleError(ga(this.db,R,-1,g,Ee));var fe=Be(g,"i32");if(R=Be(Ee,"i32"),fe!==0){var ce=null;for(T=new o(fe,this),S!=null&&T.bind(S);T.step();)ce===null&&(ce={columns:T.Db(),values:[]},p.push(ce)),ce.values.push(T.get(null,L));T.cb()}}return p}catch(Se){throw T&&T.cb(),Se}finally{q&&_n(q)}},f.prototype.ec=function(p,S,L,T,q){typeof S=="function"&&(T=L,L=S,S=void 0),p=this.Gb(p,S);try{for(;p.step();)L(p.Ob(null,q))}finally{p.cb()}if(typeof T=="function")return T()},f.prototype.Gb=function(p,S){if(Sn(g),this.handleError(G(this.db,p,-1,g,0)),p=Be(g,"i32"),p===0)throw"Nothing to prepare";var L=new o(p,this);return S!=null&&L.bind(S),this.pb[p]=L},f.prototype.pc=function(p){return new c(p,this)},f.prototype.fc=function(){Object.values(this.pb).forEach(function(S){S.cb()}),Object.values(this.Sa).forEach(Qe),this.Sa={},this.handleError($(this.db));var p=jo(this.filename);return this.handleError(I(this.filename,g)),this.db=Be(g,"i32"),Sa(this.db),p},f.prototype.close=function(){this.db!==null&&(Object.values(this.pb).forEach(function(p){p.cb()}),Object.values(this.Sa).forEach(Qe),this.Sa={},this.fb&&(Qe(this.fb),this.fb=void 0),this.handleError($(this.db)),ea("/"+this.filename),this.db=null)},f.prototype.handleError=function(p){if(p===0)return null;throw p=ic(this.db),Error(p)},f.prototype.kc=function(){return z(this.db)},f.prototype.bc=function(p,S){Object.prototype.hasOwnProperty.call(this.Sa,p)&&(Qe(this.Sa[p]),delete this.Sa[p]);var L=Ln(function(T,q,R){q=s(q,R);try{var Ee=S.apply(null,q)}catch(fe){Fr(T,fe,-1);return}r(T,Ee)},"viii");return this.Sa[p]=L,this.handleError(ba(this.db,p,S.length,1,0,L,0,0,0)),this},f.prototype.ac=function(p,S){var L=S.init||function(){return null},T=S.finalize||function(ce){return ce},q=S.step;if(!q)throw"An aggregate function must have a step function in "+p;var R={};Object.hasOwnProperty.call(this.Sa,p)&&(Qe(this.Sa[p]),delete this.Sa[p]),S=p+"__finalize",Object.hasOwnProperty.call(this.Sa,S)&&(Qe(this.Sa[S]),delete this.Sa[S]);var Ee=Ln(function(ce,Se,Ai){var wt=Ea(ce,1);Object.hasOwnProperty.call(R,wt)||(R[wt]=L()),Se=s(Se,Ai),Se=[R[wt]].concat(Se);try{R[wt]=q.apply(null,Se)}catch(kc){delete R[wt],Fr(ce,kc,-1)}},"viii"),fe=Ln(function(ce){var Se=Ea(ce,1);try{var Ai=T(R[Se])}catch(wt){delete R[Se],Fr(ce,wt,-1);return}r(ce,Ai),delete R[Se]},"vi");return this.Sa[p]=Ee,this.Sa[S]=fe,this.handleError(ba(this.db,p,q.length-1,1,0,0,Ee,fe,0)),this},f.prototype.vc=function(p){return this.fb&&(xa(this.db,0,0),Qe(this.fb),this.fb=void 0),p?(this.fb=Ln(function(S,L,T,q,R){switch(L){case 18:S="insert";break;case 23:S="update";break;case 9:S="delete";break;default:throw"unknown operationCode in updateHook callback: "+L}if(T=j(T),q=j(q),R>Number.MAX_SAFE_INTEGER)throw"rowId too big to fit inside a Number";p(S,T,q,Number(R))},"viiiij"),xa(this.db,this.fb,0),this):this},o.prototype.bind=o.prototype.bind,o.prototype.step=o.prototype.step,o.prototype.get=o.prototype.get,o.prototype.getColumnNames=o.prototype.Db,o.prototype.getAsObject=o.prototype.Ob,o.prototype.getSQL=o.prototype.lc,o.prototype.getNormalizedSQL=o.prototype.ic,o.prototype.run=o.prototype.Jb,o.prototype.reset=o.prototype.reset,o.prototype.freemem=o.prototype.Cb,o.prototype.free=o.prototype.cb,c.prototype.next=c.prototype.next,c.prototype.getRemainingSQL=c.prototype.jc,f.prototype.run=f.prototype.Jb,f.prototype.exec=f.prototype.exec,f.prototype.each=f.prototype.ec,f.prototype.prepare=f.prototype.Gb,f.prototype.iterateStatements=f.prototype.pc,f.prototype.export=f.prototype.fc,f.prototype.close=f.prototype.close,f.prototype.handleError=f.prototype.handleError,f.prototype.getRowsModified=f.prototype.kc,f.prototype.create_function=f.prototype.bc,f.prototype.create_aggregate=f.prototype.ac,f.prototype.updateHook=f.prototype.vc,h.Database=f};var W="./this.program",oe=(pa=(fa=globalThis.document)==null?void 0:fa.currentScript)==null?void 0:pa.src;B&&(oe=self.location.href);var Fe="",mn,ct;if(_||B){try{Fe=new URL(".",oe).href}catch{}B&&(ct=r=>{var s=new XMLHttpRequest;return s.open("GET",r,!1),s.responseType="arraybuffer",s.send(null),new Uint8Array(s.response)}),mn=async r=>{if(r=await fetch(r,{credentials:"same-origin"}),r.ok)return r.arrayBuffer();throw Error(r.status+" : "+r.url)}}var Wt=console.log.bind(console),U=console.error.bind(console),lt,Tr=!1,mi,Q,ee,bn,F,A,bi,vi,ve;function qs(){var r=Wr.buffer;Q=new Int8Array(r),bn=new Int16Array(r),ee=new Uint8Array(r),F=new Int32Array(r),A=new Uint32Array(r),bi=new Float32Array(r),vi=new Float64Array(r),ve=new BigInt64Array(r),new BigUint64Array(r)}function vn(r){var s;throw(s=h.onAbort)==null||s.call(h,r),r="Aborted("+r+")",U(r),Tr=!0,new WebAssembly.RuntimeError(r+". Build with -sASSERTIONS for more info.")}var Ei;async function No(r){if(!lt)try{var s=await mn(r);return new Uint8Array(s)}catch{}if(r==Ei&<)r=new Uint8Array(lt);else if(ct)r=ct(r);else throw"both async and sync fetching of the wasm failed";return r}async function Po(r,s){try{var o=await No(r);return await WebAssembly.instantiate(o,s)}catch(c){U(`failed to asynchronously prepare wasm: ${c}`),vn(c)}}async function qo(r){var s=Ei;if(!lt)try{var o=fetch(s,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(o,r)}catch(c){U(`wasm streaming compile failed: ${c}`),U("falling back to ArrayBuffer instantiation")}return Po(s,r)}class Cs{constructor(s){k(this,"name","ExitStatus");this.message=`Program terminated with exit(${s})`,this.status=s}}var Bs=r=>{for(;0<r.length;)r.shift()(h)},Rs=[],Os=[],Co=()=>{var r=h.preRun.shift();Os.push(r)},ut=0,En=null;function Be(r,s="i8"){switch(s.endsWith("*")&&(s="*"),s){case"i1":return Q[r];case"i8":return Q[r];case"i16":return bn[r>>1];case"i32":return F[r>>2];case"i64":return ve[r>>3];case"float":return bi[r>>2];case"double":return vi[r>>3];case"*":return A[r>>2];default:vn(`invalid type for getValue: ${s}`)}}var Ir=!0;function Sn(r){var s="i32";switch(s.endsWith("*")&&(s="*"),s){case"i1":Q[r]=0;break;case"i8":Q[r]=0;break;case"i16":bn[r>>1]=0;break;case"i32":F[r>>2]=0;break;case"i64":ve[r>>3]=BigInt(0);break;case"float":bi[r>>2]=0;break;case"double":vi[r>>3]=0;break;case"*":A[r>>2]=0;break;default:vn(`invalid type for setValue: ${s}`)}}var $s=new TextDecoder,As=(r,s,o,c)=>{if(o=s+o,c)return o;for(;r[s]&&!(s>=o);)++s;return s},j=(r,s,o)=>r?$s.decode(ee.subarray(r,As(ee,r,s,o))):"",Ms=(r,s)=>{for(var o=0,c=r.length-1;0<=c;c--){var f=r[c];f==="."?r.splice(c,1):f===".."?(r.splice(c,1),o++):o&&(r.splice(c,1),o--)}if(s)for(;o;o--)r.unshift("..");return r},Si=r=>{var s=r.charAt(0)==="/",o=r.slice(-1)==="/";return(r=Ms(r.split("/").filter(c=>!!c),!s).join("/"))||s||(r="."),r&&o&&(r+="/"),(s?"/":"")+r},zs=r=>{var s=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(r).slice(1);return r=s[0],s=s[1],!r&&!s?".":(s&&(s=s.slice(0,-1)),r+s)},Dr=r=>r&&r.match(/([^\/]+|\/)\/*$/)[1],Bo=()=>r=>crypto.getRandomValues(r),Us=r=>{(Us=Bo())(r)},Ro=(...r)=>{for(var s="",o=!1,c=r.length-1;-1<=c&&!o;c--){if(o=0<=c?r[c]:"/",typeof o!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!o)return"";s=o+"/"+s,o=o.charAt(0)==="/"}return s=Ms(s.split("/").filter(f=>!!f),!o).join("/"),(o?"/":"")+s||"."},Nr=r=>{var s=As(r,0);return $s.decode(r.buffer?r.subarray(0,s):new Uint8Array(r.slice(0,s)))},xi=[],Ft=r=>{for(var s=0,o=0;o<r.length;++o){var c=r.charCodeAt(o);127>=c?s++:2047>=c?s+=2:55296<=c&&57343>=c?(s+=4,++o):s+=3}return s},Ie=(r,s,o,c)=>{if(!(0<c))return 0;var f=o;c=o+c-1;for(var g=0;g<r.length;++g){var E=r.codePointAt(g);if(127>=E){if(o>=c)break;s[o++]=E}else if(2047>=E){if(o+1>=c)break;s[o++]=192|E>>6,s[o++]=128|E&63}else if(65535>=E){if(o+2>=c)break;s[o++]=224|E>>12,s[o++]=128|E>>6&63,s[o++]=128|E&63}else{if(o+3>=c)break;s[o++]=240|E>>18,s[o++]=128|E>>12&63,s[o++]=128|E>>6&63,s[o++]=128|E&63,g++}}return s[o]=0,o-f},Ws=[];function Fs(r,s){Ws[r]={input:[],output:[],kb:s},Di(r,Oo)}var Oo={open(r){var s=Ws[r.node.nb];if(!s)throw new x(43);r.Va=s,r.seekable=!1},close(r){r.Va.kb.lb(r.Va)},lb(r){r.Va.kb.lb(r.Va)},read(r,s,o,c){if(!r.Va||!r.Va.kb.Qb)throw new x(60);for(var f=0,g=0;g<c;g++){try{var E=r.Va.kb.Qb(r.Va)}catch{throw new x(29)}if(E===void 0&&f===0)throw new x(6);if(E==null)break;f++,s[o+g]=E}return f&&(r.node.$a=Date.now()),f},write(r,s,o,c){if(!r.Va||!r.Va.kb.Hb)throw new x(60);try{for(var f=0;f<c;f++)r.Va.kb.Hb(r.Va,s[o+f])}catch{throw new x(29)}return c&&(r.node.Ua=r.node.Ta=Date.now()),f}},$o={Qb(){var o;e:{if(!xi.length){var r=null;if((o=globalThis.window)!=null&&o.prompt&&(r=window.prompt("Input: "),r!==null&&(r+=`
|
|
16
|
+
`)),!r){var s=null;break e}s=Array(Ft(r)+1),r=Ie(r,s,0,s.length),s.length=r,xi=s}s=xi.shift()}return s},Hb(r,s){s===null||s===10?(Wt(Nr(r.output)),r.output=[]):s!=0&&r.output.push(s)},lb(r){var s;0<((s=r.output)==null?void 0:s.length)&&(Wt(Nr(r.output)),r.output=[])},Dc(){return{yc:25856,Ac:5,xc:191,zc:35387,wc:[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]}},Ec(){return 0},Fc(){return[24,80]}},Ao={Hb(r,s){s===null||s===10?(U(Nr(r.output)),r.output=[]):s!=0&&r.output.push(s)},lb(r){var s;0<((s=r.output)==null?void 0:s.length)&&(U(Nr(r.output)),r.output=[])}},N={Za:null,ab(){return N.createNode(null,"/",16895,0)},createNode(r,s,o,c){if((o&61440)===24576||(o&61440)===4096)throw new x(63);return N.Za||(N.Za={dir:{node:{Wa:N.La.Wa,Xa:N.La.Xa,mb:N.La.mb,rb:N.La.rb,Tb:N.La.Tb,xb:N.La.xb,vb:N.La.vb,Ib:N.La.Ib,wb:N.La.wb},stream:{Ya:N.Ma.Ya}},file:{node:{Wa:N.La.Wa,Xa:N.La.Xa},stream:{Ya:N.Ma.Ya,read:N.Ma.read,write:N.Ma.write,sb:N.Ma.sb,tb:N.Ma.tb}},link:{node:{Wa:N.La.Wa,Xa:N.La.Xa,eb:N.La.eb},stream:{}},Nb:{node:{Wa:N.La.Wa,Xa:N.La.Xa},stream:Fo}}),o=Ks(r,s,o,c),ie(o.mode)?(o.La=N.Za.dir.node,o.Ma=N.Za.dir.stream,o.Na={}):(o.mode&61440)===32768?(o.La=N.Za.file.node,o.Ma=N.Za.file.stream,o.Ra=0,o.Na=null):(o.mode&61440)===40960?(o.La=N.Za.link.node,o.Ma=N.Za.link.stream):(o.mode&61440)===8192&&(o.La=N.Za.Nb.node,o.Ma=N.Za.Nb.stream),o.$a=o.Ua=o.Ta=Date.now(),r&&(r.Na[s]=o,r.$a=r.Ua=r.Ta=o.$a),o},Cc(r){return r.Na?r.Na.subarray?r.Na.subarray(0,r.Ra):new Uint8Array(r.Na):new Uint8Array(0)},La:{Wa(r){var s={};return s.cc=(r.mode&61440)===8192?r.id:1,s.oc=r.id,s.mode=r.mode,s.rc=1,s.uid=0,s.nc=0,s.nb=r.nb,ie(r.mode)?s.size=4096:(r.mode&61440)===32768?s.size=r.Ra:(r.mode&61440)===40960?s.size=r.link.length:s.size=0,s.$a=new Date(r.$a),s.Ua=new Date(r.Ua),s.Ta=new Date(r.Ta),s.Zb=4096,s.$b=Math.ceil(s.size/s.Zb),s},Xa(r,s){for(var o of["mode","atime","mtime","ctime"])s[o]!=null&&(r[o]=s[o]);s.size!==void 0&&(s=s.size,r.Ra!=s&&(s==0?(r.Na=null,r.Ra=0):(o=r.Na,r.Na=new Uint8Array(s),o&&r.Na.set(o.subarray(0,Math.min(s,r.Ra))),r.Ra=s)))},mb(){throw N.zb||(N.zb=new x(44),N.zb.stack="<generic error, no stack>"),N.zb},rb(r,s,o,c){return N.createNode(r,s,o,c)},Tb(r,s,o){try{var c=ht(s,o)}catch{}if(c){if(ie(r.mode))for(var f in c.Na)throw new x(55);Ti(c)}delete r.parent.Na[r.name],s.Na[o]=r,r.name=o,s.Ta=s.Ua=r.parent.Ta=r.parent.Ua=Date.now()},xb(r,s){delete r.Na[s],r.Ta=r.Ua=Date.now()},vb(r,s){var o=ht(r,s),c;for(c in o.Na)throw new x(55);delete r.Na[s],r.Ta=r.Ua=Date.now()},Ib(r){return[".","..",...Object.keys(r.Na)]},wb(r,s,o){return r=N.createNode(r,s,41471,0),r.link=o,r},eb(r){if((r.mode&61440)!==40960)throw new x(28);return r.link}},Ma:{read(r,s,o,c,f){var g=r.node.Na;if(f>=r.node.Ra)return 0;if(r=Math.min(r.node.Ra-f,c),8<r&&g.subarray)s.set(g.subarray(f,f+r),o);else for(c=0;c<r;c++)s[o+c]=g[f+c];return r},write(r,s,o,c,f,g){if(s.buffer===Q.buffer&&(g=!1),!c)return 0;if(r=r.node,r.Ua=r.Ta=Date.now(),s.subarray&&(!r.Na||r.Na.subarray)){if(g)return r.Na=s.subarray(o,o+c),r.Ra=c;if(r.Ra===0&&f===0)return r.Na=s.slice(o,o+c),r.Ra=c;if(f+c<=r.Ra)return r.Na.set(s.subarray(o,o+c),f),c}g=f+c;var E=r.Na?r.Na.length:0;if(E>=g||(g=Math.max(g,E*(1048576>E?2:1.125)>>>0),E!=0&&(g=Math.max(g,256)),E=r.Na,r.Na=new Uint8Array(g),0<r.Ra&&r.Na.set(E.subarray(0,r.Ra),0)),r.Na.subarray&&s.subarray)r.Na.set(s.subarray(o,o+c),f);else for(g=0;g<c;g++)r.Na[f+g]=s[o+g];return r.Ra=Math.max(r.Ra,f+c),c},Ya(r,s,o){if(o===1?s+=r.position:o===2&&(r.node.mode&61440)===32768&&(s+=r.node.Ra),0>s)throw new x(28);return s},sb(r,s,o,c,f){if((r.node.mode&61440)!==32768)throw new x(43);if(r=r.node.Na,f&2||!r||r.buffer!==Q.buffer){f=!0,c=65536*Math.ceil(s/65536);var g=ha(65536,c);if(g&&ee.fill(0,g,g+c),c=g,!c)throw new x(48);r&&((0<o||o+s<r.length)&&(r.subarray?r=r.subarray(o,o+s):r=Array.prototype.slice.call(r,o,o+s)),Q.set(r,c))}else f=!1,c=r.byteOffset;return{tc:c,Ub:f}},tb(r,s,o,c){return N.Ma.write(r,s,0,c,o,!1),0}}},Vs=(r,s)=>{var o=0;return r&&(o|=365),s&&(o|=146),o},ki=null,js={},Vt=[],Mo=1,Ve=null,Qs=!1,Hs=!0,x=class{constructor(r){k(this,"name","ErrnoError");this.Pa=r}},zo=class{constructor(){k(this,"qb",{});k(this,"node",null)}get flags(){return this.qb.flags}set flags(r){this.qb.flags=r}get position(){return this.qb.position}set position(r){this.qb.position=r}},Uo=class{constructor(r,s,o,c){k(this,"La",{});k(this,"Ma",{});k(this,"ib",null);r||(r=this),this.parent=r,this.ab=r.ab,this.id=Mo++,this.name=s,this.mode=o,this.nb=c,this.$a=this.Ua=this.Ta=Date.now()}get read(){return(this.mode&365)===365}set read(r){r?this.mode|=365:this.mode&=-366}get write(){return(this.mode&146)===146}set write(r){r?this.mode|=146:this.mode&=-147}};function de(r,s={}){if(!r)throw new x(44);s.Bb??(s.Bb=!0),r.charAt(0)==="/"||(r="//"+r);var o=0;e:for(;40>o;o++){r=r.split("/").filter(I=>!!I);for(var c=ki,f="/",g=0;g<r.length;g++){var E=g===r.length-1;if(E&&s.parent)break;if(r[g]!==".")if(r[g]==="..")if(f=zs(f),c===c.parent){r=f+"/"+r.slice(g+1).join("/"),o--;continue e}else c=c.parent;else{f=Si(f+"/"+r[g]);try{c=ht(c,r[g])}catch(I){if((I==null?void 0:I.Pa)===44&&E&&s.sc)return{path:f};throw I}if(!c.ib||E&&!s.Bb||(c=c.ib.root),(c.mode&61440)===40960&&(!E||s.hb)){if(!c.La.eb)throw new x(52);c=c.La.eb(c),c.charAt(0)==="/"||(c=zs(f)+"/"+c),r=c+"/"+r.slice(g+1).join("/");continue e}}}return{path:f,node:c}}throw new x(32)}function Li(r){for(var s;;){if(r===r.parent)return r=r.ab.Sb,s?r[r.length-1]!=="/"?`${r}/${s}`:r+s:r;s=s?`${r.name}/${s}`:r.name,r=r.parent}}function _i(r,s){for(var o=0,c=0;c<s.length;c++)o=(o<<5)-o+s.charCodeAt(c)|0;return(r+o>>>0)%Ve.length}function Ti(r){var s=_i(r.parent.id,r.name);if(Ve[s]===r)Ve[s]=r.jb;else for(s=Ve[s];s;){if(s.jb===r){s.jb=r.jb;break}s=s.jb}}function ht(r,s){var o=ie(r.mode)?(o=jt(r,"x"))?o:r.La.mb?0:2:54;if(o)throw new x(o);for(o=Ve[_i(r.id,s)];o;o=o.jb){var c=o.name;if(o.parent.id===r.id&&c===s)return o}return r.La.mb(r,s)}function Ks(r,s,o,c){return r=new Uo(r,s,o,c),s=_i(r.parent.id,r.name),r.jb=Ve[s],Ve[s]=r}function ie(r){return(r&61440)===16384}function jt(r,s){return Hs?0:s.includes("r")&&!(r.mode&292)||s.includes("w")&&!(r.mode&146)||s.includes("x")&&!(r.mode&73)?2:0}function Ys(r,s){if(!ie(r.mode))return 54;try{return ht(r,s),20}catch{}return jt(r,"wx")}function Gs(r,s,o){try{var c=ht(r,s)}catch(f){return f.Pa}if(r=jt(r,"wx"))return r;if(o){if(!ie(c.mode))return 54;if(c===c.parent||Li(c)==="/")return 10}else if(ie(c.mode))return 31;return 0}function Pr(r){if(!r)throw new x(63);return r}function te(r){if(r=Vt[r],!r)throw new x(8);return r}function Js(r,s=-1){if(r=Object.assign(new zo,r),s==-1)e:{for(s=0;4096>=s;s++)if(!Vt[s])break e;throw new x(33)}return r.bb=s,Vt[s]=r}function Wo(r,s=-1){var o,c;return r=Js(r,s),(c=(o=r.Ma)==null?void 0:o.Bc)==null||c.call(o,r),r}function Ii(r,s,o){var c=r==null?void 0:r.Ma.Xa;r=c?r:s,c??(c=s.La.Xa),Pr(c),c(r,o)}var Fo={open(r){var s,o;r.Ma=js[r.node.nb].Ma,(o=(s=r.Ma).open)==null||o.call(s,r)},Ya(){throw new x(70)}};function Di(r,s){js[r]={Ma:s}}function Xs(r,s){var o=s==="/";if(o&&ki)throw new x(10);if(!o&&s){var c=de(s,{Bb:!1});if(s=c.path,c=c.node,c.ib)throw new x(10);if(!ie(c.mode))throw new x(54)}s={type:r,Gc:{},Sb:s,qc:[]},r=r.ab(s),r.ab=s,s.root=r,o?ki=r:c&&(c.ib=s,c.ab&&c.ab.qc.push(s))}function qr(r,s,o){var c=de(r,{parent:!0}).node;if(r=Dr(r),!r)throw new x(28);if(r==="."||r==="..")throw new x(20);var f=Ys(c,r);if(f)throw new x(f);if(!c.La.rb)throw new x(63);return c.La.rb(c,r,s,o)}function Vo(r,s=438){return qr(r,s&4095|32768,0)}function De(r,s=511){return qr(r,s&1023|16384,0)}function Cr(r,s,o){typeof o>"u"&&(o=s,s=438),qr(r,s|8192,o)}function Ni(r,s){if(!Ro(r))throw new x(44);var o=de(s,{parent:!0}).node;if(!o)throw new x(44);s=Dr(s);var c=Ys(o,s);if(c)throw new x(c);if(!o.La.wb)throw new x(63);o.La.wb(o,s,r)}function Zs(r){var s=de(r,{parent:!0}).node;r=Dr(r);var o=ht(s,r),c=Gs(s,r,!0);if(c)throw new x(c);if(!s.La.vb)throw new x(63);if(o.ib)throw new x(10);s.La.vb(s,r),Ti(o)}function ea(r){var s=de(r,{parent:!0}).node;if(!s)throw new x(44);r=Dr(r);var o=ht(s,r),c=Gs(s,r,!1);if(c)throw new x(c);if(!s.La.xb)throw new x(63);if(o.ib)throw new x(10);s.La.xb(s,r),Ti(o)}function xn(r,s){return r=de(r,{hb:!s}).node,Pr(r.La.Wa)(r)}function ta(r,s,o,c){Ii(r,s,{mode:o&4095|s.mode&-4096,Ta:Date.now(),dc:c})}function Br(r,s){r=typeof r=="string"?de(r,{hb:!0}).node:r,ta(null,r,s)}function na(r,s,o){if(ie(s.mode))throw new x(31);if((s.mode&61440)!==32768)throw new x(28);var c=jt(s,"w");if(c)throw new x(c);Ii(r,s,{size:o,timestamp:Date.now()})}function Qt(r,s,o=438){if(r==="")throw new x(44);if(typeof s=="string"){var c={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[s];if(typeof c>"u")throw Error(`Unknown file open mode: ${s}`);s=c}if(o=s&64?o&4095|32768:0,typeof r=="object")c=r;else{var f=r.endsWith("/"),g=de(r,{hb:!(s&131072),sc:!0});c=g.node,r=g.path}if(g=!1,s&64)if(c){if(s&128)throw new x(20)}else{if(f)throw new x(31);c=qr(r,o|511,0),g=!0}if(!c)throw new x(44);if((c.mode&61440)===8192&&(s&=-513),s&65536&&!ie(c.mode))throw new x(54);if(!g&&(c?(c.mode&61440)===40960?f=32:(f=["r","w","rw"][s&3],s&512&&(f+="w"),f=ie(c.mode)&&(f!=="r"||s&576)?31:jt(c,f)):f=44,f))throw new x(f);return s&512&&!g&&(f=c,f=typeof f=="string"?de(f,{hb:!0}).node:f,na(null,f,0)),s=Js({node:c,path:Li(c),flags:s&-131713,seekable:!0,position:0,Ma:c.Ma,uc:[],error:!1}),s.Ma.open&&s.Ma.open(s),g&&Br(c,o&511),s}function Pi(r){if(r.bb===null)throw new x(8);r.Eb&&(r.Eb=null);try{r.Ma.close&&r.Ma.close(r)}catch(s){throw s}finally{Vt[r.bb]=null}r.bb=null}function ra(r,s,o){if(r.bb===null)throw new x(8);if(!r.seekable||!r.Ma.Ya)throw new x(70);if(o!=0&&o!=1&&o!=2)throw new x(28);r.position=r.Ma.Ya(r,s,o),r.uc=[]}function ia(r,s,o,c,f){if(0>c||0>f)throw new x(28);if(r.bb===null)throw new x(8);if((r.flags&2097155)===1)throw new x(8);if(ie(r.node.mode))throw new x(31);if(!r.Ma.read)throw new x(28);var g=typeof f<"u";if(!g)f=r.position;else if(!r.seekable)throw new x(70);return s=r.Ma.read(r,s,o,c,f),g||(r.position+=s),s}function sa(r,s,o,c,f){if(0>c||0>f)throw new x(28);if(r.bb===null)throw new x(8);if((r.flags&2097155)===0)throw new x(8);if(ie(r.node.mode))throw new x(31);if(!r.Ma.write)throw new x(28);r.seekable&&r.flags&1024&&ra(r,0,2);var g=typeof f<"u";if(!g)f=r.position;else if(!r.seekable)throw new x(70);return s=r.Ma.write(r,s,o,c,f,void 0),g||(r.position+=s),s}function jo(r){var s=s||0;s=Qt(r,s),r=xn(r).size;var o=new Uint8Array(r);return ia(s,o,0,r,0),Pi(s),o}function je(r,s,o){r=Si("/dev/"+r);var c=Vs(!!s,!!o);je.Rb??(je.Rb=64);var f=je.Rb++<<8|0;Di(f,{open(g){g.seekable=!1},close(){var g;(g=o==null?void 0:o.buffer)!=null&&g.length&&o(10)},read(g,E,I,$){for(var P=0,z=0;z<$;z++){try{var G=s()}catch{throw new x(29)}if(G===void 0&&P===0)throw new x(6);if(G==null)break;P++,E[I+z]=G}return P&&(g.node.$a=Date.now()),P},write(g,E,I,$){for(var P=0;P<$;P++)try{o(E[I+P])}catch{throw new x(29)}return $&&(g.node.Ua=g.node.Ta=Date.now()),P}}),Cr(r,c,f)}var M={};function dt(r,s,o){if(s.charAt(0)==="/")return s;if(r=r===-100?"/":te(r).path,s.length==0){if(!o)throw new x(44);return r}return r+"/"+s}function Rr(r,s){A[r>>2]=s.cc,A[r+4>>2]=s.mode,A[r+8>>2]=s.rc,A[r+12>>2]=s.uid,A[r+16>>2]=s.nc,A[r+20>>2]=s.nb,ve[r+24>>3]=BigInt(s.size),F[r+32>>2]=4096,F[r+36>>2]=s.$b;var o=s.$a.getTime(),c=s.Ua.getTime(),f=s.Ta.getTime();return ve[r+40>>3]=BigInt(Math.floor(o/1e3)),A[r+48>>2]=o%1e3*1e6,ve[r+56>>3]=BigInt(Math.floor(c/1e3)),A[r+64>>2]=c%1e3*1e6,ve[r+72>>3]=BigInt(Math.floor(f/1e3)),A[r+80>>2]=f%1e3*1e6,ve[r+88>>3]=BigInt(s.oc),0}var Or=void 0,$r=()=>{var r=F[+Or>>2];return Or+=4,r},qi=0,Qo=[0,31,60,91,121,152,182,213,244,274,305,335],Ho=[0,31,59,90,120,151,181,212,243,273,304,334],kn={},aa=r=>{if(!(r instanceof Cs||r=="unwind"))throw r},oa=r=>{var s;throw mi=r,Ir||0<qi||((s=h.onExit)==null||s.call(h,r),Tr=!0),new Cs(r)},Ko=r=>{if(!Tr)try{r()}catch(s){aa(s)}finally{if(!(Ir||0<qi))try{mi=r=mi,oa(r)}catch(s){aa(s)}}},Ci={},ca=()=>{var c;if(!Bi){var r={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(((c=globalThis.navigator)==null?void 0:c.language)??"C").replace("-","_")+".UTF-8",_:W||"./this.program"},s;for(s in Ci)Ci[s]===void 0?delete r[s]:r[s]=Ci[s];var o=[];for(s in r)o.push(`${s}=${r[s]}`);Bi=o}return Bi},Bi,Yo=(r,s,o,c)=>{var f={string:P=>{var z=0;if(P!=null&&P!==0){z=Ft(P)+1;var G=pt(z);Ie(P,ee,G,z),z=G}return z},array:P=>{var z=pt(P.length);return Q.set(P,z),z}};r=h["_"+r];var g=[],E=0;if(c)for(var I=0;I<c.length;I++){var $=f[o[I]];$?(E===0&&(E=Ur()),g[I]=$(c[I])):g[I]=c[I]}return o=r(...g),o=(function(P){return E!==0&&zr(E),s==="string"?j(P):s==="boolean"?!!P:P})(o)},Ar=r=>{var s=Ft(r)+1,o=Mr(s);return o&&Ie(r,ee,o,s),o},ft,Ri=[],Qe=r=>{ft.delete(He.get(r)),He.set(r,null),Ri.push(r)},la=r=>{const s=r.length;return[s%128|128,s>>7,...r]},Go={i:127,p:127,j:126,f:125,d:124,e:111},ua=r=>la(Array.from(r,s=>Go[s])),Ln=(r,s)=>{if(!ft){ft=new WeakMap;var o=He.length;if(ft)for(var c=0;c<0+o;c++){var f=He.get(c);f&&ft.set(f,c)}}if(o=ft.get(r)||0)return o;o=Ri.length?Ri.pop():He.grow(1);try{He.set(o,r)}catch(g){if(!(g instanceof TypeError))throw g;s=Uint8Array.of(0,97,115,109,1,0,0,0,1,...la([1,96,...ua(s.slice(1)),...ua(s[0]==="v"?"":s[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),s=new WebAssembly.Module(s),s=new WebAssembly.Instance(s,{e:{f:r}}).exports.f,He.set(o,s)}return ft.set(r,o),o};if(Ve=Array(4096),Xs(N,"/"),De("/tmp"),De("/home"),De("/home/web_user"),(function(){De("/dev"),Di(259,{read:()=>0,write:(c,f,g,E)=>E,Ya:()=>0}),Cr("/dev/null",259),Fs(1280,$o),Fs(1536,Ao),Cr("/dev/tty",1280),Cr("/dev/tty1",1536);var r=new Uint8Array(1024),s=0,o=()=>(s===0&&(Us(r),s=r.byteLength),r[--s]);je("random",o),je("urandom",o),De("/dev/shm"),De("/dev/shm/tmp")})(),(function(){De("/proc");var r=De("/proc/self");De("/proc/self/fd"),Xs({ab(){var s=Ks(r,"fd",16895,73);return s.Ma={Ya:N.Ma.Ya},s.La={mb(o,c){o=+c;var f=te(o);return o={parent:null,ab:{Sb:"fake"},La:{eb:()=>f.path},id:o+1},o.parent=o},Ib(){return Array.from(Vt.entries()).filter(([,o])=>o).map(([o])=>o.toString())}},s}},"/proc/self/fd")})(),h.noExitRuntime&&(Ir=h.noExitRuntime),h.print&&(Wt=h.print),h.printErr&&(U=h.printErr),h.wasmBinary&&(lt=h.wasmBinary),h.thisProgram&&(W=h.thisProgram),h.preInit)for(typeof h.preInit=="function"&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.shift()();h.stackSave=()=>Ur(),h.stackRestore=r=>zr(r),h.stackAlloc=r=>pt(r),h.cwrap=(r,s,o,c)=>{var f=!o||o.every(g=>g==="number"||g==="boolean");return s!=="string"&&f&&!c?h["_"+r]:(...g)=>Yo(r,s,o,g)},h.addFunction=Ln,h.removeFunction=Qe,h.UTF8ToString=j,h.stringToNewUTF8=Ar,h.writeArrayToMemory=(r,s)=>{Q.set(r,s)};var Mr,_n,ha,da,zr,pt,Ur,Wr,He,Jo={a:(r,s,o,c)=>vn(`Assertion failed: ${j(r)}, at: `+[s?j(s):"unknown filename",o,c?j(c):"unknown function"]),i:function(r,s){try{return r=j(r),Br(r,s),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},L:function(r,s,o){try{if(s=j(s),s=dt(r,s),o&-8)return-28;var c=de(s,{hb:!0}).node;return c?(r="",o&4&&(r+="r"),o&2&&(r+="w"),o&1&&(r+="x"),r&&jt(c,r)?-2:0):-44}catch(f){if(typeof M>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},j:function(r,s){try{var o=te(r);return ta(o,o.node,s,!1),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},h:function(r){try{var s=te(r);return Ii(s,s.node,{timestamp:Date.now(),dc:!1}),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},b:function(r,s,o){Or=o;try{var c=te(r);switch(s){case 0:var f=$r();if(0>f)break;for(;Vt[f];)f++;return Wo(c,f).bb;case 1:case 2:return 0;case 3:return c.flags;case 4:return f=$r(),c.flags|=f,0;case 12:return f=$r(),bn[f+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},g:function(r,s){try{var o=te(r),c=o.node,f=o.Ma.Wa;r=f?o:c,f??(f=c.La.Wa),Pr(f);var g=f(r);return Rr(s,g)}catch(E){if(typeof M>"u"||E.name!=="ErrnoError")throw E;return-E.Pa}},H:function(r,s){s=-9007199254740992>s||9007199254740992<s?NaN:Number(s);try{if(isNaN(s))return-61;var o=te(r);if(0>s||(o.flags&2097155)===0)throw new x(28);return na(o,o.node,s),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},G:function(r,s){try{if(s===0)return-28;var o=Ft("/")+1;return s<o?-68:(Ie("/",ee,r,s),o)}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},K:function(r,s){try{return r=j(r),Rr(s,xn(r,!0))}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},C:function(r,s,o){try{return s=j(s),s=dt(r,s),De(s,o),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},J:function(r,s,o,c){try{s=j(s);var f=c&256;return s=dt(r,s,c&4096),Rr(o,f?xn(s,!0):xn(s))}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},x:function(r,s,o,c){Or=c;try{s=j(s),s=dt(r,s);var f=c?$r():0;return Qt(s,o,f).bb}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},v:function(r,s,o,c){try{if(s=j(s),s=dt(r,s),0>=c)return-28;var f=de(s).node;if(!f)throw new x(44);if(!f.La.eb)throw new x(28);var g=f.La.eb(f),E=Math.min(c,Ft(g)),I=Q[o+E];return Ie(g,ee,o,c+1),Q[o+E]=I,E}catch($){if(typeof M>"u"||$.name!=="ErrnoError")throw $;return-$.Pa}},u:function(r){try{return r=j(r),Zs(r),0}catch(s){if(typeof M>"u"||s.name!=="ErrnoError")throw s;return-s.Pa}},f:function(r,s){try{return r=j(r),Rr(s,xn(r))}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},r:function(r,s,o){try{if(s=j(s),s=dt(r,s),o)if(o===512)Zs(s);else return-28;else ea(s);return 0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},q:function(r,s,o){try{s=j(s),s=dt(r,s,!0);var c=Date.now(),f,g;if(o){var E=A[o>>2]+4294967296*F[o+4>>2],I=F[o+8>>2];I==1073741823?f=c:I==1073741822?f=null:f=1e3*E+I/1e6,o+=16,E=A[o>>2]+4294967296*F[o+4>>2],I=F[o+8>>2],I==1073741823?g=c:I==1073741822?g=null:g=1e3*E+I/1e6}else g=f=c;if((g??f)!==null){r=f;var $=de(s,{hb:!0}).node;Pr($.La.Xa)($,{$a:r,Ua:g})}return 0}catch(P){if(typeof M>"u"||P.name!=="ErrnoError")throw P;return-P.Pa}},m:()=>vn(""),l:()=>{Ir=!1,qi=0},A:function(r,s){r=-9007199254740992>r||9007199254740992<r?NaN:Number(r),r=new Date(1e3*r),F[s>>2]=r.getSeconds(),F[s+4>>2]=r.getMinutes(),F[s+8>>2]=r.getHours(),F[s+12>>2]=r.getDate(),F[s+16>>2]=r.getMonth(),F[s+20>>2]=r.getFullYear()-1900,F[s+24>>2]=r.getDay();var o=r.getFullYear();F[s+28>>2]=(o%4!==0||o%100===0&&o%400!==0?Ho:Qo)[r.getMonth()]+r.getDate()-1|0,F[s+36>>2]=-(60*r.getTimezoneOffset()),o=new Date(r.getFullYear(),6,1).getTimezoneOffset();var c=new Date(r.getFullYear(),0,1).getTimezoneOffset();F[s+32>>2]=(o!=c&&r.getTimezoneOffset()==Math.min(c,o))|0},y:function(r,s,o,c,f,g,E){f=-9007199254740992>f||9007199254740992<f?NaN:Number(f);try{var I=te(c);if((s&2)!==0&&(o&2)===0&&(I.flags&2097155)!==2)throw new x(2);if((I.flags&2097155)===1)throw new x(2);if(!I.Ma.sb)throw new x(43);if(!r)throw new x(28);var $=I.Ma.sb(I,r,f,s,o),P=$.tc;return F[g>>2]=$.Ub,A[E>>2]=P,0}catch(z){if(typeof M>"u"||z.name!=="ErrnoError")throw z;return-z.Pa}},z:function(r,s,o,c,f,g){g=-9007199254740992>g||9007199254740992<g?NaN:Number(g);try{var E=te(f);if(o&2){if((E.node.mode&61440)!==32768)throw new x(43);c&2||E.Ma.tb&&E.Ma.tb(E,ee.slice(r,r+s),g,s,c)}}catch(I){if(typeof M>"u"||I.name!=="ErrnoError")throw I;return-I.Pa}},n:(r,s)=>{if(kn[r]&&(clearTimeout(kn[r].id),delete kn[r]),!s)return 0;var o=setTimeout(()=>{delete kn[r],Ko(()=>da(r,performance.now()))},s);return kn[r]={id:o,Hc:s},0},B:(r,s,o,c)=>{var f=new Date().getFullYear(),g=new Date(f,0,1).getTimezoneOffset();f=new Date(f,6,1).getTimezoneOffset(),A[r>>2]=60*Math.max(g,f),F[s>>2]=+(g!=f),s=E=>{var I=Math.abs(E);return`UTC${0<=E?"-":"+"}${String(Math.floor(I/60)).padStart(2,"0")}${String(I%60).padStart(2,"0")}`},r=s(g),s=s(f),f<g?(Ie(r,ee,o,17),Ie(s,ee,c,17)):(Ie(r,ee,c,17),Ie(s,ee,o,17))},d:()=>Date.now(),s:()=>2147483648,c:()=>performance.now(),o:r=>{var s=ee.length;if(r>>>=0,2147483648<r)return!1;for(var o=1;4>=o;o*=2){var c=s*(1+.2/o);c=Math.min(c,r+100663296);e:{c=(Math.min(2147483648,65536*Math.ceil(Math.max(r,c)/65536))-Wr.buffer.byteLength+65535)/65536|0;try{Wr.grow(c),qs();var f=1;break e}catch{}f=void 0}if(f)return!0}return!1},E:(r,s)=>{var o=0,c=0,f;for(f of ca()){var g=s+o;A[r+c>>2]=g,o+=Ie(f,ee,g,1/0)+1,c+=4}return 0},F:(r,s)=>{var o=ca();A[r>>2]=o.length,r=0;for(var c of o)r+=Ft(c)+1;return A[s>>2]=r,0},e:function(r){try{var s=te(r);return Pi(s),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return o.Pa}},p:function(r,s){try{var o=te(r);return Q[s]=o.Va?2:ie(o.mode)?3:(o.mode&61440)===40960?7:4,bn[s+2>>1]=0,ve[s+8>>3]=BigInt(0),ve[s+16>>3]=BigInt(0),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return c.Pa}},w:function(r,s,o,c){try{e:{var f=te(r);r=s;for(var g,E=s=0;E<o;E++){var I=A[r>>2],$=A[r+4>>2];r+=8;var P=ia(f,Q,I,$,g);if(0>P){var z=-1;break e}if(s+=P,P<$)break;typeof g<"u"&&(g+=P)}z=s}return A[c>>2]=z,0}catch(G){if(typeof M>"u"||G.name!=="ErrnoError")throw G;return G.Pa}},D:function(r,s,o,c){s=-9007199254740992>s||9007199254740992<s?NaN:Number(s);try{if(isNaN(s))return 61;var f=te(r);return ra(f,s,o),ve[c>>3]=BigInt(f.position),f.Eb&&s===0&&o===0&&(f.Eb=null),0}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return g.Pa}},I:function(r){var o,c;try{var s=te(r);return(c=(o=s.Ma)==null?void 0:o.lb)==null?void 0:c.call(o,s)}catch(f){if(typeof M>"u"||f.name!=="ErrnoError")throw f;return f.Pa}},t:function(r,s,o,c){try{e:{var f=te(r);r=s;for(var g,E=s=0;E<o;E++){var I=A[r>>2],$=A[r+4>>2];r+=8;var P=sa(f,Q,I,$,g);if(0>P){var z=-1;break e}if(s+=P,P<$)break;typeof g<"u"&&(g+=P)}z=s}return A[c>>2]=z,0}catch(G){if(typeof M>"u"||G.name!=="ErrnoError")throw G;return G.Pa}},k:oa};function Oi(){function r(){var f;if(h.calledRun=!0,!Tr){if(!h.noFSInit&&!Qs){var s,o;Qs=!0,s??(s=h.stdin),o??(o=h.stdout),c??(c=h.stderr),s?je("stdin",s):Ni("/dev/tty","/dev/stdin"),o?je("stdout",null,o):Ni("/dev/tty","/dev/stdout"),c?je("stderr",null,c):Ni("/dev/tty1","/dev/stderr"),Qt("/dev/stdin",0),Qt("/dev/stdout",1),Qt("/dev/stderr",1)}if($i.N(),Hs=!1,(f=h.onRuntimeInitialized)==null||f.call(h),h.postRun)for(typeof h.postRun=="function"&&(h.postRun=[h.postRun]);h.postRun.length;){var c=h.postRun.shift();Rs.push(c)}Bs(Rs)}}if(0<ut)En=Oi;else{if(h.preRun)for(typeof h.preRun=="function"&&(h.preRun=[h.preRun]);h.preRun.length;)Co();Bs(Os),0<ut?En=Oi:h.setStatus?(h.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>h.setStatus(""),1),r()},1)):r()}}var $i;return(async function(){var o;function r(c){var f;return c=$i=c.exports,h._sqlite3_free=c.P,h._sqlite3_value_text=c.Q,h._sqlite3_prepare_v2=c.R,h._sqlite3_step=c.S,h._sqlite3_reset=c.T,h._sqlite3_exec=c.U,h._sqlite3_finalize=c.V,h._sqlite3_column_name=c.W,h._sqlite3_column_text=c.X,h._sqlite3_column_type=c.Y,h._sqlite3_errmsg=c.Z,h._sqlite3_clear_bindings=c._,h._sqlite3_value_blob=c.$,h._sqlite3_value_bytes=c.aa,h._sqlite3_value_double=c.ba,h._sqlite3_value_int=c.ca,h._sqlite3_value_type=c.da,h._sqlite3_result_blob=c.ea,h._sqlite3_result_double=c.fa,h._sqlite3_result_error=c.ga,h._sqlite3_result_int=c.ha,h._sqlite3_result_int64=c.ia,h._sqlite3_result_null=c.ja,h._sqlite3_result_text=c.ka,h._sqlite3_aggregate_context=c.la,h._sqlite3_column_count=c.ma,h._sqlite3_data_count=c.na,h._sqlite3_column_blob=c.oa,h._sqlite3_column_bytes=c.pa,h._sqlite3_column_double=c.qa,h._sqlite3_bind_blob=c.ra,h._sqlite3_bind_double=c.sa,h._sqlite3_bind_int=c.ta,h._sqlite3_bind_text=c.ua,h._sqlite3_bind_parameter_index=c.va,h._sqlite3_sql=c.wa,h._sqlite3_normalized_sql=c.xa,h._sqlite3_changes=c.ya,h._sqlite3_close_v2=c.za,h._sqlite3_create_function_v2=c.Aa,h._sqlite3_update_hook=c.Ba,h._sqlite3_open=c.Ca,Mr=h._malloc=c.Da,_n=h._free=c.Ea,h._RegisterExtensionFunctions=c.Fa,ha=c.Ga,da=c.Ha,zr=c.Ia,pt=c.Ja,Ur=c.Ka,Wr=c.M,He=c.O,qs(),ut--,(f=h.monitorRunDependencies)==null||f.call(h,ut),ut==0&&En&&(c=En,En=null,c()),$i}ut++,(o=h.monitorRunDependencies)==null||o.call(h,ut);var s={a:Jo};return h.instantiateWasm?new Promise(c=>{h.instantiateWasm(s,(f,g)=>{c(r(f))})}):(Ei??(Ei=h.locateFile?h.locateFile("sql-wasm-browser.wasm",Fe):Fe+"sql-wasm-browser.wasm"),r((await qo(s)).instance))})(),Oi(),y}),t)};n.exports=i,n.exports.default=i})(Fi)),Fi.exports}var $u=Ou();const Au=Ru($u),Mu=""+new URL("sql-wasm-UFUCzYNW.wasm",import.meta.url).href;let Vi=null;async function zu(){return Vi||(Vi=await Au({locateFile:()=>Mu})),Vi}class Uu{constructor(){this.db=null,this.fileName=""}async open(e,t){const i=await zu();this.db&&this.db.close(),this.db=new i.Database(new Uint8Array(e)),this.fileName=t}close(){this.db&&(this.db.close(),this.db=null,this.fileName="")}isOpen(){return!!this.db}_ensureOpen(){if(!this.db)throw new Error("No local database open.")}_runQuery(e){this._ensureOpen();const t=this.db.exec(e);if(!t.length)return{columns:[],rows:[]};const{columns:i,values:a}=t[0],l=a.map(d=>{const y={};return i.forEach((v,h)=>y[v]=d[h]),y});return{columns:i,rows:l}}async getTables(){const{rows:e}=this._runQuery("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;");return e.map(t=>({name:t.name,row_count:0}))}async getTableStructure(e){const{rows:t}=this._runQuery(`PRAGMA table_info(\`${e}\`);`);return t}async getTableData(e,t=100,i=0){const a=await this.getTableStructure(e);if(!a.length)throw new Error(`Table ${e} not found`);const{rows:l}=this._runQuery(`SELECT * FROM \`${e}\` LIMIT ${t} OFFSET ${i};`),d=this._runQuery(`SELECT COUNT(*) as count FROM \`${e}\`;`),y=d.rows.length?Number(d.rows[0].count):0;return{columns:a.map(v=>v.name),rows:l,row_count:l.length,total_count:y,offset:i,limit:t}}async executeQuery(e,t){this._ensureOpen();const i=e.trim(),a=i.toUpperCase();if(["INSERT","UPDATE","DELETE","DROP","CREATE","ALTER","REPLACE"].some(v=>a.startsWith(v))){this.db.run(i);const v=this.db.getRowsModified();return{columns:[],rows:[],row_count:v}}let l=i;t&&!a.includes("LIMIT")&&a.startsWith("SELECT")&&(l=`${i.replace(/;$/,"")} LIMIT ${t};`);const{columns:d,rows:y}=this._runQuery(l);return{columns:d,rows:y,row_count:y.length}}async checkDatabaseExists(){return this.isOpen()}}const D=new Bu,it=new Uu;let me=null,ne=0,J=100,ue=0,Lo="query",Ua=null,Ye=[],X="",_r="device",yi=!1;function yn(){return _r==="local"?it:D}const w=n=>document.getElementById(n);window.addEventListener("DOMContentLoaded",()=>{const n=localStorage.getItem("sqliteViewerQuery");n&&(w("queryInput").value=n),localStorage.getItem("sqliteViewerConfigCollapsed")==="true"&&w("configSection").classList.remove("expanded"),w("queryInput").addEventListener("input",e=>{localStorage.setItem("sqliteViewerQuery",e.target.value)}),document.addEventListener("keydown",e=>{e.key==="F5"&&(e.preventDefault(),Wa())}),w("tableSearch").addEventListener("input",e=>th(e.target.value)),document.addEventListener("click",e=>{!e.target.closest("#searchResultsDropdown")&&!e.target.closest("#dbSearchInput")&&w("searchResultsDropdown").classList.remove("visible"),!e.target.closest("#packageDropdown")&&!e.target.closest("#packageSearchInput")&&w("packageDropdown").classList.remove("visible")}),w("configToggleBtn").addEventListener("click",Ku),w("usbConnectBtn").addEventListener("click",Hu),w("packageSearchInput").addEventListener("focus",Yu),w("packageSearchInput").addEventListener("input",xs),w("packageClearBtn").addEventListener("click",e=>Ju(e)),w("databaseSelect").addEventListener("change",()=>ks()),w("dbSearchInput").addEventListener("input",Zu),w("dbSearchInput").addEventListener("keydown",e=>{e.key==="Enter"&&ps()}),w("dbSearchBtn").addEventListener("click",ps),w("executeBtn").addEventListener("click",()=>Wa()),w("executeAllBtn").addEventListener("click",ah),w("refreshTablesBtn").addEventListener("click",ph),w("clearQueryBtn").addEventListener("click",wh),w("formatQueryBtn").addEventListener("click",gh),w("downloadDbBtn").addEventListener("click",yh),w("openLocalBtn").addEventListener("click",()=>w("localFileInput").click()),w("localFileInput").addEventListener("change",mh),w("closeLocalBtn").addEventListener("click",bh),w("dismissUpdate").addEventListener("click",()=>w("updateBar").classList.remove("visible")),w("firstBtn").addEventListener("click",ch),w("prevBtn").addEventListener("click",lh),w("nextBtn").addEventListener("click",uh),w("lastBtn").addEventListener("click",hh),w("gotoPageBtn").addEventListener("click",Fa),w("gotoPageInput").addEventListener("keypress",e=>{e.key==="Enter"&&Fa()}),w("limitSelect").addEventListener("change",dh),document.querySelectorAll(".tab").forEach(e=>{e.addEventListener("click",()=>fh(e.dataset.tab))}),Wu(),Eh()});async function Wu(){try{if(await D.connectBridge()){Fu(),await Vu();return}}catch{}await Qu()}function Fu(){const n=w("connectionStatus");n.textContent="ADB Bridge",n.className="connection-status bridge";const e=D.bridgeUrl?new URL(D.bridgeUrl).port:"15555";w("deviceStatus").textContent=`Bridge connected on :${e}`,w("deviceStatus").classList.add("ok");const t=w("usbConnectBtn");t.textContent="Disconnect Bridge",t.classList.add("disconnect")}async function Vu(){try{const n=await D.getDevices();if(n.length===0){w("deviceStatus").textContent="Bridge connected — no devices found. Plug in a phone.",w("deviceStatus").classList.remove("ok");return}const e=n[0];D.bridgeSerial=e.serial,w("deviceStatus").textContent=e.display_name,w("deviceStatus").classList.add("ok"),e.display_name&&e.display_name.toLowerCase().includes("waydroid")&&await ju(),await _o()}catch(n){w("deviceStatus").textContent=`Bridge error: ${n.message}`,w("deviceStatus").classList.remove("ok")}}async function ju(){try{(await(await fetch(`${D.bridgeUrl}/api/waydroid/detect`)).json()).detected&&(yi=!0,w("deviceStatus").textContent+=" (WayDroid host access)")}catch{}}async function Qu(){try{const n=await D.getDevices(),e=localStorage.getItem("sqliteViewerDevice");n.length===1?(w("deviceStatus").textContent="Reconnecting...",await D.connectBySerial(n[0].serial),await fs()):e&&n.find(i=>i.serial===e)&&(w("deviceStatus").textContent="Reconnecting...",await D.connectBySerial(e),await fs())}catch{}}async function Hu(){const n=w("usbConnectBtn");if(D.mode==="bridge"||D.adb){await D.disconnect(),n.textContent="Connect Device",n.classList.remove("disconnect"),w("deviceStatus").textContent="No device connected",w("deviceStatus").classList.remove("ok"),w("connectionStatus").textContent="Disconnected",w("connectionStatus").className="connection-status disconnected",w("packageSearchInput").disabled=!0,w("packageSearchInput").placeholder="Connect device first...",w("databaseSelect").disabled=!0,w("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Connect a USB device to get started.</div>';return}n.textContent="Connecting...",w("deviceStatus").textContent="Check your phone — approve USB debugging if prompted";try{await D.requestDevice(),await fs()}catch(e){n.textContent="Connect Device",w("deviceStatus").textContent=`Error: ${e.message}`,w("deviceStatus").classList.remove("ok")}}async function fs(){const n=D.getDeviceInfo(),e=w("usbConnectBtn");e.textContent="Disconnect",e.classList.add("disconnect"),w("deviceStatus").textContent=n.display_name,w("deviceStatus").classList.add("ok"),w("connectionStatus").textContent="Connected",w("connectionStatus").className="connection-status connected",localStorage.setItem("sqliteViewerDevice",n.serial),await _o()}function Ku(){const n=w("configSection");n.classList.toggle("expanded"),localStorage.setItem("sqliteViewerConfigCollapsed",!n.classList.contains("expanded"))}async function _o(){const n=w("packageSearchInput"),e=w("packageComboWrapper");n.disabled=!1,n.placeholder="Scanning debuggable apps...",n.value="",e.classList.remove("has-value"),X="",Ye=[];try{yi?Ye=(await(await fetch(`${D.bridgeUrl}/api/waydroid/packages`)).json()).packages||[]:Ye=await D.getPackages(),n.placeholder=`Search ${Ye.length} apps...`;const t=localStorage.getItem("sqliteViewerPackage");t&&Ye.includes(t)&&(X=t,n.value=t,e.classList.add("has-value")),await To(!0)}catch(t){n.placeholder=`Failed: ${t.message}`}}function Yu(){const n=w("packageSearchInput");X&&n.value===X&&n.select(),xs()}function xs(){const n=w("packageSearchInput"),e=w("packageDropdown"),t=n.value.trim().toLowerCase(),i=t?Ye.filter(a=>a.toLowerCase().includes(t)):Ye;i.length===0?e.innerHTML='<div class="combo-empty">No matching packages</div>':(e.innerHTML=i.map(a=>`<div class="combo-item${a===X?" active":""}" data-pkg="${a}">${a}</div>`).join(""),e.querySelectorAll(".combo-item").forEach(a=>{a.addEventListener("click",()=>Gu(a.dataset.pkg))})),e.classList.add("visible")}async function Gu(n){const e=w("packageSearchInput"),t=w("packageComboWrapper"),i=w("packageDropdown");X=n,e.value=n,t.classList.add("has-value"),i.classList.remove("visible"),await To()}async function Ju(n){n&&n.stopPropagation();const e=w("packageSearchInput"),t=w("packageComboWrapper");X="",e.value="",t.classList.remove("has-value"),e.focus(),xs(),w("databaseSelect").innerHTML='<option value="">Select a package first</option>',w("databaseSelect").disabled=!0,localStorage.removeItem("sqliteViewerPackage")}async function To(n=!1){if(!X){w("databaseSelect").innerHTML='<option value="">Select a package first</option>',w("databaseSelect").disabled=!0;return}localStorage.setItem("sqliteViewerPackage",X),D.setPackage(X),await Xu(n)}async function Xu(n=!1){const e=w("databaseSelect");e.disabled=!1,e.innerHTML='<option value="">Loading databases...</option>';try{let t;yi?t=(await(await fetch(`${D.bridgeUrl}/api/waydroid/databases`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageName:X})})).json()).databases||[]:t=await D.getDatabases(X);const i=localStorage.getItem("sqliteViewerDatabase");e.innerHTML='<option value="">-- Select database --</option>',t.forEach(a=>{const l=document.createElement("option");l.value=a.name,l.textContent=`${a.name} (${a.path})`,l.dataset.path=a.path,i&&a.name===i&&(l.selected=!0),e.appendChild(l)}),await ks(n)}catch(t){e.innerHTML=`<option value="">Error: ${t.message}</option>`}}async function ks(n=!1){var l;const e=w("databaseSelect"),t=e.value;if(!t){n||(w("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Select a database to view tables</div>');return}const i=e.options[e.selectedIndex],a=((l=i==null?void 0:i.dataset)==null?void 0:l.path)||"";if(localStorage.setItem("sqliteViewerDatabase",t),D.setDatabase(t,a),yi){w("statusBar").textContent=`Loading ${t} from WayDroid...`;try{const d=await fetch(`${D.bridgeUrl}/api/waydroid/read-db`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageName:X,dbPath:a})});if(!d.ok){const v=await d.json().catch(()=>({}));throw new Error(v.error||`HTTP ${d.status}`)}const y=await d.arrayBuffer();await it.open(y,t),_r="local",w("statusBar").textContent=`Loaded ${t} from WayDroid host`}catch(d){w("tablesList").innerHTML=`<div class="error" style="margin: 10px; font-size: 12px;">Failed to load WayDroid DB: ${d.message}</div>`,w("statusBar").textContent=`Error: ${d.message}`;return}}await Io(),await Ls()}function Zu(){if(clearTimeout(Ua),w("dbSearchInput").value.trim().length<1){w("searchResultsDropdown").classList.remove("visible");return}Ua=setTimeout(()=>ps(),400)}async function ps(){const n=w("dbSearchInput").value.trim(),e=w("searchResultsDropdown");if(!X){e.innerHTML='<div class="search-result-item"><span class="file-name">Select a package first</span></div>',e.classList.add("visible");return}if(!n){e.classList.remove("visible");return}e.innerHTML='<div class="search-result-item"><span class="file-name">Searching...</span></div>',e.classList.add("visible");try{const t=await D.searchDatabases(X,n);if(t.length===0){e.innerHTML='<div class="search-result-item"><span class="file-name">No databases found</span></div>';return}e.innerHTML=t.map(i=>`<div class="search-result-item" data-name="${i.name}" data-path="${i.path}">
|
|
17
|
+
<div class="file-name">${i.name}</div>
|
|
18
|
+
<div class="file-path">${i.path}</div>
|
|
19
|
+
</div>`).join(""),e.querySelectorAll(".search-result-item").forEach(i=>{i.addEventListener("click",()=>eh(i.dataset.name,i.dataset.path))})}catch(t){e.innerHTML=`<div class="search-result-item"><span class="file-name">Search failed: ${t.message}</span></div>`}}async function eh(n,e){w("searchResultsDropdown").classList.remove("visible"),w("dbSearchInput").value="";const t=w("databaseSelect");let i=!1;for(let a=0;a<t.options.length;a++)if(t.options[a].value===n){t.value=n,i=!0;break}if(!i){const a=document.createElement("option");a.value=n,a.textContent=`${n} (${e})`,a.dataset.path=e,t.appendChild(a),t.value=n}await ks()}async function Io(){const n=w("connectionStatus");if(!(D.mode==="bridge"?!!D.bridgeUrl:!!D.adb)){n.textContent="Disconnected",n.className="connection-status disconnected";return}try{await D.checkDatabaseExists()?(n.textContent=D.mode==="bridge"?"ADB Bridge":"Connected",n.className=D.mode==="bridge"?"connection-status bridge":"connection-status connected"):(n.textContent="DB not found",n.className="connection-status disconnected")}catch{n.textContent=D.mode==="bridge"?"ADB Bridge":"Connected",n.className=D.mode==="bridge"?"connection-status bridge":"connection-status connected"}}async function Ls(){const n=w("tablesList");n.innerHTML='<div class="loading">Loading tables...</div>';try{const e=await yn().getTables();if(e.length===0){n.innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">No tables found</div>';return}n.innerHTML=e.map(t=>`
|
|
20
|
+
<div class="table-item" data-table="${t.name}">
|
|
21
|
+
<div class="accordion-header">
|
|
22
|
+
<span class="arrow">▶</span>
|
|
23
|
+
<div class="table-item-name">${t.name}</div>
|
|
24
|
+
<button class="query-btn" data-select-table="${t.name}">Query</button>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="accordion-content" id="structure-${t.name}">
|
|
27
|
+
<div style="color: #95a5a6; font-style: italic;">Loading columns...</div>
|
|
28
|
+
</div>
|
|
29
|
+
</div>`).join(""),n.querySelectorAll(".accordion-header").forEach(t=>{t.addEventListener("click",i=>{if(i.target.classList.contains("query-btn"))return;const a=t.closest(".table-item").dataset.table;rh(t,a)})}),n.querySelectorAll(".query-btn").forEach(t=>{t.addEventListener("click",i=>{i.stopPropagation(),nh(t.dataset.selectTable)})})}catch(e){n.innerHTML=`<div class="error" style="margin: 10px; font-size: 12px;">Failed to load tables: ${e.message}</div>`}}function th(n){const e=document.querySelectorAll(".table-item"),t=n.toLowerCase();e.forEach(i=>{const a=i.dataset.table.toLowerCase();i.style.display=a.includes(t)?"block":"none"})}async function nh(n){me=n,ne=0,document.querySelectorAll(".table-item").forEach(a=>{const l=a.querySelector(".accordion-header"),d=a.dataset.table===n;a.style.borderLeftColor=d?"#3498db":"transparent",l.style.background=d?"#34495e":""});const e=w("queryInput"),t=e.value.trim(),i=`SELECT * FROM ${n}`;e.value=t?t+`
|
|
30
|
+
|
|
31
|
+
`+i:i,localStorage.setItem("sqliteViewerQuery",e.value),Lo==="query"?await ot(n):await Do(n)}async function rh(n,e){const t=n.closest(".table-item"),i=t.querySelector(".accordion-content"),a=t.classList.contains("expanded");t.classList.toggle("expanded"),!a&&!i.dataset.loaded&&await ih(e,i)}async function ih(n,e){try{const t=await yn().getTableStructure(n);if(e.dataset.loaded="true",!t||t.length===0){e.innerHTML='<div style="color: #95a5a6">No columns</div>';return}e.innerHTML=t.map(i=>`
|
|
32
|
+
<div class="column-item">
|
|
33
|
+
<span>${i.pk?'<span class="pk-badge" title="Primary Key">PK</span>':""}${i.name}</span>
|
|
34
|
+
<span class="column-type">${i.type}</span>
|
|
35
|
+
</div>`).join("")}catch(t){e.innerHTML=`<div style="color: #e74c3c">Error: ${t.message}</div>`}}async function ot(n,e=0){const t=w("resultsContainer"),i=w("statusBar"),a=w("welcomeMessage");t.innerHTML='<div class="loading">Loading data...</div>',a.style.display="none";try{const l=await yn().getTableData(n,J,e);ne=e,ue=l.total_count,_s(l.columns,l.rows),oh(),i.textContent=`${l.row_count} rows retrieved (${ue.toLocaleString()} total)`}catch(l){t.innerHTML=`<div class="error">Failed to load data: ${l.message}</div>`}}async function Do(n){const e=w("structureContainer");e.innerHTML='<div class="loading">Loading structure...</div>';try{const t=await yn().getTableStructure(n),i=["cid","name","type","notnull","dflt_value","pk"];e.innerHTML=`
|
|
36
|
+
<table>
|
|
37
|
+
<thead><tr>${i.map(a=>`<th>${a}</th>`).join("")}</tr></thead>
|
|
38
|
+
<tbody>
|
|
39
|
+
${t.map(a=>`<tr>${i.map(l=>`<td>${a[l]??""}</td>`).join("")}</tr>`).join("")}
|
|
40
|
+
</tbody>
|
|
41
|
+
</table>`}catch(t){e.innerHTML=`<div class="error">Failed to load structure: ${t.message}</div>`}}function sh(){const n=w("queryInput"),e=n.selectionStart,t=n.selectionEnd;return e!==t?n.value.substring(e,t).trim():null}async function Wa(){const n=sh(),e=w("queryInput").value.trim(),t=n||e,i=!!n,a=w("resultsContainer"),l=w("statusBar"),d=w("welcomeMessage");if(!t){alert("Please enter a SQL query");return}a.innerHTML='<div class="loading">Executing query...</div>',d.style.display="none",l.textContent=i?"Executing selected...":"Executing...";try{const y=await yn().executeQuery(t,J);_s(y.columns,y.rows),l.textContent=i?`${y.row_count} rows retrieved (selected query)`:`${y.row_count} rows retrieved`,w("pagination").style.display="none"}catch(y){a.innerHTML=`<div class="error">Failed to execute query: ${y.message}</div>`,l.textContent="Error"}}async function ah(){const n=w("queryInput").value.trim(),e=w("resultsContainer"),t=w("statusBar"),i=w("welcomeMessage");if(!n){alert("Please enter a SQL query");return}e.innerHTML='<div class="loading">Executing query...</div>',i.style.display="none",t.textContent="Executing...";try{const a=await yn().executeQuery(n,J);_s(a.columns,a.rows),t.textContent=`${a.row_count} rows retrieved`,w("pagination").style.display="none"}catch(a){e.innerHTML=`<div class="error">Failed to execute query: ${a.message}</div>`,t.textContent="Error"}}function _s(n,e){const t=w("resultsContainer");if(!e||e.length===0){t.innerHTML='<div class="info">No results found</div>';return}const i=`
|
|
42
|
+
<div style="padding: 15px; background: #f8f9fa; border-bottom: 2px solid #dee2e6; font-size: 13px;">
|
|
43
|
+
<strong>Table Information:</strong>
|
|
44
|
+
<span style="margin-left: 20px;"><strong>Total Rows:</strong> ${ue?ue.toLocaleString():e.length.toLocaleString()}</span>
|
|
45
|
+
<span style="margin-left: 20px;"><strong>Total Columns:</strong> ${n.length}</span>
|
|
46
|
+
<span style="margin-left: 20px;"><strong>Columns:</strong> ${n.join(", ")}</span>
|
|
47
|
+
</div>`;t.innerHTML=i+`<table>
|
|
48
|
+
<thead>
|
|
49
|
+
<tr>
|
|
50
|
+
<th style="background: #e9ecef; color: #495057; font-weight: 700;">#</th>
|
|
51
|
+
${n.map(a=>`<th style="background: #e9ecef; color: #495057; font-weight: 700;">${a}</th>`).join("")}
|
|
52
|
+
</tr>
|
|
53
|
+
</thead>
|
|
54
|
+
<tbody>
|
|
55
|
+
${e.map((a,l)=>`
|
|
56
|
+
<tr>
|
|
57
|
+
<td style="background: #f8f9fa; font-weight: 600; color: #6c757d;">${ne+l+1}</td>
|
|
58
|
+
${n.map(d=>`<td>${a[d]??'<span style="color: #999; font-style: italic;">NULL</span>'}</td>`).join("")}
|
|
59
|
+
</tr>`).join("")}
|
|
60
|
+
</tbody>
|
|
61
|
+
</table>`}function oh(){const n=w("pagination");n.style.display="flex";const e=Math.floor(ne/J)+1,t=Math.ceil(ue/J);w("firstBtn").disabled=ne===0,w("prevBtn").disabled=ne===0,w("nextBtn").disabled=ne+J>=ue,w("lastBtn").disabled=ne+J>=ue,w("gotoPageInput").max=t,w("gotoPageInput").placeholder=`1-${t}`,w("pageInfo").textContent=`Page ${e} of ${t} (${ue.toLocaleString()} total rows)`}function ch(){ne>0&&ot(me,0)}function lh(){ne>0&&ot(me,ne-J)}function uh(){ne+J<ue&&ot(me,ne+J)}function hh(){if(ne+J<ue){const n=Math.floor((ue-1)/J)*J;ot(me,n)}}function Fa(){const n=parseInt(w("gotoPageInput").value),e=Math.ceil(ue/J);n>=1&&n<=e?(ot(me,(n-1)*J),w("gotoPageInput").value=""):alert(`Please enter a page number between 1 and ${e}`)}function dh(){const n=w("limitSelect").value;n==="all"?J=ue||1e5:J=parseInt(n),ne=0,me&&ot(me,0)}function fh(n){Lo=n,document.querySelectorAll(".tab").forEach(e=>{e.classList.toggle("active",e.dataset.tab===n)}),document.querySelectorAll(".tab-content").forEach(e=>e.classList.remove("active")),n==="query"?(w("queryTab").classList.add("active"),me&&ot(me)):n==="structure"&&(w("structureTab").classList.add("active"),me&&Do(me))}async function ph(){const n=w("statusBar");n.textContent="Refreshing tables...",D.dbPath="",await Ls(),await Io(),n.textContent="Tables refreshed",setTimeout(()=>n.textContent="Ready",3e3)}function wh(){w("queryInput").value="",w("resultsContainer").innerHTML="",w("welcomeMessage").style.display="block",w("statusBar").textContent="Ready",localStorage.removeItem("sqliteViewerQuery")}function gh(){const n=w("queryInput");let e=n.value;e=e.replace(/\s+/g," ").trim(),e=e.replace(/\b(SELECT|FROM|WHERE|AND|OR|ORDER BY|GROUP BY|LIMIT|JOIN|LEFT JOIN|RIGHT JOIN|INNER JOIN)\b/gi,`
|
|
62
|
+
$1`),e=e.replace(/,/g,`,
|
|
63
|
+
`),n.value=e}async function yh(){const n=w("statusBar");if(_r==="local"&&it.isOpen()){const e=it.db.export(),t=new Blob([e],{type:"application/octet-stream"});Va(t,it.fileName||"database.db"),n.textContent=`Downloaded ${it.fileName}`;return}if(D.mode!=="bridge"||!D.bridgeUrl){n.textContent="Download requires ADB Bridge connection";return}if(!X||!D.dbPath){n.textContent="Select a package and database first";return}n.textContent="Downloading database...";try{const e=await fetch(`${D.bridgeUrl}/api/pull-db`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:D.bridgeSerial||void 0,packageName:X,dbPath:D.dbPath})});if(!e.ok){const a=await e.json().catch(()=>({}));throw new Error(a.error||`HTTP ${e.status}`)}const t=await e.blob(),i=D.dbName||"database.db";Va(t,i),n.textContent=`Downloaded ${i}`}catch(e){n.textContent=`Download failed: ${e.message}`}}function Va(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(t)}async function mh(n){const e=n.target.files[0];if(!e)return;const t=w("statusBar");t.textContent=`Opening ${e.name}...`;try{const i=await e.arrayBuffer();await it.open(i,e.name),_r="local";const a=w("connectionStatus");a.textContent="Local File",a.className="connection-status bridge",w("localFileName").textContent=e.name,w("localFileBadge").classList.add("visible"),w("packageSearchInput").disabled=!0,w("packageSearchInput").placeholder="Local file mode",w("databaseSelect").disabled=!0,w("databaseSelect").innerHTML=`<option value="">${e.name}</option>`,await Ls(),t.textContent=`Opened ${e.name}`}catch(i){t.textContent=`Failed to open file: ${i.message}`,w("tablesList").innerHTML=`<div class="error" style="margin: 10px; font-size: 12px;">Failed to open file: ${i.message}</div>`}n.target.value=""}function bh(){if(it.close(),_r="device",w("localFileBadge").classList.remove("visible"),w("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Connect a USB device to get started.</div>',w("resultsContainer").innerHTML="",w("welcomeMessage").style.display="block",w("statusBar").textContent="Ready",w("pagination").style.display="none",D.mode==="bridge"?!!D.bridgeUrl:!!D.adb){const e=w("connectionStatus");e.textContent=D.mode==="bridge"?"ADB Bridge":"Connected",e.className=D.mode==="bridge"?"connection-status bridge":"connection-status connected",w("packageSearchInput").disabled=!1,w("packageSearchInput").placeholder=`Search ${Ye.length} debuggable apps...`,w("databaseSelect").disabled=!1}else w("connectionStatus").textContent="Disconnected",w("connectionStatus").className="connection-status disconnected",w("packageSearchInput").disabled=!0,w("packageSearchInput").placeholder="Connect device first...",w("databaseSelect").disabled=!0,w("databaseSelect").innerHTML='<option value="">Select a package first</option>'}const ji="1.1.3",vh="amitwinit/SQLite-DevTools-Mobile-ReactNative";async function Eh(){if(!navigator.userAgent.includes("Electron"))try{const n=await fetch(`https://api.github.com/repos/${vh}/releases/latest`,{signal:AbortSignal.timeout(5e3)});if(!n.ok)return;const e=await n.json(),t=(e.tag_name||"").replace(/^v/,"");if(t&&t!==ji&&Sh(t,ji)){const i=w("updateBar");w("updateMessage").textContent=`Version ${t} is available (you have ${ji})`;const a=w("updateAction");a.textContent="Download",a.href=e.html_url,a.target="_blank",i.classList.add("visible")}}catch{}}function Sh(n,e){const t=n.split(".").map(Number),i=e.split(".").map(Number);for(let a=0;a<Math.max(t.length,i.length);a++){const l=t[a]||0,d=i[a]||0;if(l>d)return!0;if(l<d)return!1}return!1}
|
package/dist/index.html
CHANGED
package/electron/main.cjs
CHANGED
|
@@ -218,11 +218,6 @@ function createWindow() {
|
|
|
218
218
|
|
|
219
219
|
mainWindow.loadFile(indexPath);
|
|
220
220
|
|
|
221
|
-
// Tell renderer that Electron handles updates (skip GitHub API check)
|
|
222
|
-
mainWindow.webContents.on("did-finish-load", () => {
|
|
223
|
-
mainWindow.webContents.executeJavaScript("window.__ELECTRON_UPDATE__ = true;");
|
|
224
|
-
});
|
|
225
|
-
|
|
226
221
|
mainWindow.on("closed", () => {
|
|
227
222
|
mainWindow = null;
|
|
228
223
|
});
|
package/package.json
CHANGED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
var Lc=Object.defineProperty;var La=n=>{throw TypeError(n)};var _c=(n,e,t)=>e in n?Lc(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var L=(n,e,t)=>_c(n,typeof e!="symbol"?e+"":e,t),Ai=(n,e,t)=>e.has(n)||La("Cannot "+t);var u=(n,e,t)=>(Ai(n,e,"read from private field"),t?t.call(n):e.get(n)),y=(n,e,t)=>e.has(n)?La("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),b=(n,e,t,i)=>(Ai(n,e,"write to private field"),i?i.call(n,t):e.set(n,t),t),R=(n,e,t)=>(Ai(n,e,"access private method"),t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))i(a);new MutationObserver(a=>{for(const l of a)if(l.type==="childList")for(const d of l.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&i(d)}).observe(document,{childList:!0,subtree:!0});function t(a){const l={};return a.integrity&&(l.integrity=a.integrity),a.referrerPolicy&&(l.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?l.credentials="include":a.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function i(a){if(a.ep)return;a.ep=!0;const l=t(a);fetch(a.href,l)}})();class ws{constructor(e){L(this,"TValue");L(this,"TOmitInitKey");L(this,"options");this.options=e}}class Mt{constructor(e,t,i,a){L(this,"definition");L(this,"options");L(this,"struct");L(this,"value");this.definition=e,this.options=t,this.struct=i,this.value=a}get hasCustomAccessors(){return this.get!==Mt.prototype.get||this.set!==Mt.prototype.set}getSize(){return this.definition.getSize()}get(){return this.value}set(e){this.value=e}}const kc={littleEndian:!1};class gs extends Error{constructor(){super("ExactReadable ended"),Object.setPrototypeOf(this,new.target.prototype)}}const ms=Symbol("struct-value");function Tc(n){return typeof n=="object"&&n!==null&&ms in n}class _a{constructor(e){L(this,"fieldValues",{});L(this,"value");this.value=Object.create(e),Object.defineProperty(this.value,ms,{enumerable:!1,value:this})}set(e,t){this.fieldValues[e]=t,t.hasCustomAccessors?Object.defineProperty(this.value,e,{configurable:!0,enumerable:!0,get(){return t.get()},set(i){t.set(i)}}):this.value[e]=t.get()}get(e){return this.fieldValues[e]}}const Fe={reject(n){return new Ta(n)},resolve(n){return typeof n=="object"&&n!==null&&typeof n.then=="function"?n instanceof Vr||n instanceof ka||n instanceof Ta?n:new Vr(n):new ka(n)},try(n){try{return Fe.resolve(n())}catch(e){return Fe.reject(e)}}};var Jt;const Ts=class Ts{constructor(e){y(this,Jt);b(this,Jt,e)}then(e,t){return new Ts(u(this,Jt).then(e,t))}valueOrPromise(){return u(this,Jt)}};Jt=new WeakMap;let Vr=Ts;var Xt;class ka{constructor(e){y(this,Xt);b(this,Xt,e)}then(e){return e?Fe.try(()=>e(u(this,Xt))):this}valueOrPromise(){return u(this,Xt)}}Xt=new WeakMap;var Zt;class Ta{constructor(e){y(this,Zt);b(this,Zt,e)}then(e,t){return t?Fe.try(()=>t(u(this,Zt))):this}valueOrPromise(){throw u(this,Zt)}}Zt=new WeakMap;function Ic(n,e,t){return t?(n[e]|n[e+1]<<8)<<16>>16:(n[e]<<8|n[e+1])<<16>>16}function Nc(n,e,t){return t?n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24:n[e]<<24|n[e+1]<<16|n[e+2]<<8|n[e+3]}function Dc(n,e,t){return t?BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7]<<24)<<32n:BigInt(n[e]<<24)<<32n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function Pc(n,e,t){n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)}function qc(n,e,t){n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn)}function Rc(n,e,t,i){i?(n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)):(n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn))}function Cc(n,e){return n[e]<<24>>24}function Oc(n,e,t){return t?n[e]|n[e+1]<<8:n[e+1]|n[e]<<8}function pi(n,e){return(n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24)>>>0}function Bc(n,e,t){return t?(n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24)>>>0:(n[e]<<24|n[e+1]<<16|n[e+2]<<8|n[e+3])>>>0}function $c(n,e,t){n[e]=t,n[e+1]=t>>8,n[e+2]=t>>16,n[e+3]=t>>24}function Ac(n,e){return BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7])<<56n}function Mc(n,e){return BigInt(n[e])<<56n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function zc(n,e,t){return t?BigInt(n[e])|BigInt(n[e+1])<<8n|BigInt(n[e+2])<<16n|BigInt(n[e+3])<<24n|BigInt(n[e+4])<<32n|BigInt(n[e+5])<<40n|BigInt(n[e+6])<<48n|BigInt(n[e+7])<<56n:BigInt(n[e])<<56n|BigInt(n[e+1])<<48n|BigInt(n[e+2])<<40n|BigInt(n[e+3])<<32n|BigInt(n[e+4])<<24n|BigInt(n[e+5])<<16n|BigInt(n[e+6])<<8n|BigInt(n[e+7])}function Uc(n,e,t,i){i?(n[e]=Number(t&0xffn),n[e+1]=Number(t>>8n&0xffn),n[e+2]=Number(t>>16n&0xffn),n[e+3]=Number(t>>24n&0xffn),n[e+4]=Number(t>>32n&0xffn),n[e+5]=Number(t>>40n&0xffn),n[e+6]=Number(t>>48n&0xffn),n[e+7]=Number(t>>56n&0xffn)):(n[e]=Number(t>>56n&0xffn),n[e+1]=Number(t>>48n&0xffn),n[e+2]=Number(t>>40n&0xffn),n[e+3]=Number(t>>32n&0xffn),n[e+4]=Number(t>>24n&0xffn),n[e+5]=Number(t>>16n&0xffn),n[e+6]=Number(t>>8n&0xffn),n[e+7]=Number(t&0xffn))}const Yt=class Yt{constructor(e,t,i){L(this,"TTypeScriptType");L(this,"size");L(this,"deserialize");L(this,"serialize");this.size=e,this.deserialize=t,this.serialize=i}};L(Yt,"Int64",new Yt(8,Dc,Rc)),L(Yt,"Uint64",new Yt(8,zc,Uc));let jr=Yt;class Fc extends ws{constructor(t,i){super();L(this,"variant");this.variant=t}getSize(){return this.variant.size}create(t,i,a){return new Wc(this,t,i,a)}deserialize(t,i,a){return Fe.try(()=>i.readExactly(this.getSize())).then(l=>{const d=this.variant.deserialize(l,0,t.littleEndian);return this.create(t,a,d)}).valueOrPromise()}}class Wc extends Mt{serialize(e,t,i){this.definition.variant.serialize(t,i,this.value,this.options.littleEndian)}}const{TextEncoder:Vc,TextDecoder:jc}=globalThis,Qc=new Vc,Hc=new jc;function qe(n){return Qc.encode(n)}function zt(n){return Hc.decode(n)}class Qa{constructor(){L(this,"TTypeScriptType")}}const ni=class ni extends Qa{constructor(){super()}toBuffer(e){return e}toValue(e){return e}getSize(e){return e.length}};L(ni,"Instance",new ni);let ji=ni;const ri=class ri extends Qa{toBuffer(e){return qe(e)}toValue(e){return zt(e)}getSize(){}};L(ri,"Instance",new ri);let Qi=ri;const De=new Uint8Array(0);class Ha extends ws{constructor(t,i){super(i);L(this,"converter");L(this,"TTypeScriptType");this.converter=t}getDeserializeSize(t){return this.getSize()}create(t,i,a,l){return new Ka(this,t,i,a,l)}deserialize(t,i,a){return Fe.try(()=>{const l=this.getDeserializeSize(a);return l===0?De:i.readExactly(l)}).then(l=>{const d=this.converter.toValue(l);return this.create(t,a,d,l)}).valueOrPromise()}}class Ka extends Mt{constructor(t,i,a,l,d){super(t,i,a,l);L(this,"array");this.array=d}set(t){super.set(t),this.array=void 0}serialize(t,i,a){this.array??(this.array=this.definition.converter.toBuffer(this.value)),i.set(this.array,a)}}class Kc extends Ha{getSize(){return this.options.length}}class Yc extends Ha{getSize(){return 0}getDeserializeSize(e){let t=e.value[this.options.lengthField];return typeof t=="string"&&(t=Number.parseInt(t,this.options.lengthFieldRadix??10)),t}create(e,t,i,a){return new Gc(this,e,t,i,a)}}var ii,Ya;class Gc extends Ka{constructor(t,i,a,l,d){super(t,i,a,l,d);y(this,ii);L(this,"length");L(this,"lengthFieldValue");d&&(this.length=d.length);const m=this.definition.options.lengthField,v=a.get(m);this.lengthFieldValue=new Jc(v,this),a.set(m,this.lengthFieldValue)}getSize(){return this.length===void 0&&(this.length=R(this,ii,Ya).call(this)),this.length===void 0&&(this.array=this.definition.converter.toBuffer(this.value),this.length=this.array.length),this.length}set(t){super.set(t),this.array=void 0,this.length=void 0}}ii=new WeakSet,Ya=function(){const t=this.definition.converter.getSize(this.value);if(t!==void 0&&t<0)throw new Error("Invalid length");return t};class Jc extends Mt{constructor(t,i){super(t.definition,t.options,t.struct,0);L(this,"originalValue");L(this,"bufferValue");this.originalValue=t,this.bufferValue=i}getSize(){return this.originalValue.getSize()}get(){let t=this.bufferValue.getSize();return typeof this.originalValue.get()=="string"&&(t=t.toString(this.bufferValue.definition.options.lengthFieldRadix??10)),t}set(){}serialize(t,i,a){this.originalValue.set(this.get()),this.originalValue.serialize(t,i,a)}}var Ke;(function(n){n.Uint8={signed:!1,size:1,deserialize(e){return e[0]},serialize(e,t,i){e.setUint8(t,i)}},n.Int8={signed:!0,size:1,deserialize(e){return Cc(e,0)},serialize(e,t,i){e.setInt8(t,i)}},n.Uint16={signed:!1,size:2,deserialize(e,t){return Oc(e,0,t)},serialize(e,t,i,a){e.setUint16(t,i,a)}},n.Int16={signed:!0,size:2,deserialize(e,t){return Ic(e,0,t)},serialize(e,t,i,a){e.setInt16(t,i,a)}},n.Uint32={signed:!1,size:4,deserialize(e,t){return Bc(e,0,t)},serialize(e,t,i,a){e.setUint32(t,i,a)}},n.Int32={signed:!0,size:4,deserialize(e,t){return Nc(e,0,t)},serialize(e,t,i,a){e.setInt32(t,i,a)}}})(Ke||(Ke={}));class Xc extends ws{constructor(t,i){super();L(this,"variant");this.variant=t}getSize(){return this.variant.size}create(t,i,a){return new Zc(this,t,i,a)}deserialize(t,i,a){return Fe.try(()=>i.readExactly(this.getSize())).then(l=>{const d=this.variant.deserialize(l,t.littleEndian);return this.create(t,a,d)}).valueOrPromise()}}class Zc extends Mt{serialize(e,t,i){this.definition.variant.serialize(e,i,this.value,this.options.littleEndian)}}class Ga extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}class el extends Ga{constructor(){super("The underlying readable was ended before the struct was fully deserialized")}}class ys extends Ga{constructor(){super("The underlying readable doesn't contain any more struct")}}var vt,xe,Et,en,me,pt,Hi,In;const Is=class Is{constructor(e){y(this,me);L(this,"TFields");L(this,"TOmitInitKey");L(this,"TExtra");L(this,"TInit");L(this,"TDeserializeResult");L(this,"options");y(this,vt,0);y(this,xe,[]);y(this,Et,{});y(this,en);y(this,In,(e,t,i)=>"length"in i?this.field(e,new Kc(t,i)):this.field(e,new Yc(t,i)));L(this,"uint8Array",(e,t,i)=>u(this,In).call(this,e,ji.Instance,t,i));L(this,"string",(e,t,i)=>u(this,In).call(this,e,Qi.Instance,t,i));this.options={...kc,...e}}get size(){return u(this,vt)}get fields(){return u(this,xe)}field(e,t){for(const a of u(this,xe))if(a[0]===e){const l=String(e);throw new Error(`This struct already have a field with name '${l}'`)}u(this,xe).push([e,t]);const i=t.getSize();return b(this,vt,u(this,vt)+i),this}concat(e){if(!(e instanceof Is))throw new TypeError("The other value must be a `Struct` instance");for(const t of u(e,xe))u(this,xe).push(t);return b(this,vt,u(this,vt)+u(e,vt)),Object.defineProperties(u(this,Et),Object.getOwnPropertyDescriptors(u(e,Et))),this}int8(e,t){return R(this,me,pt).call(this,e,Ke.Int8,t)}uint8(e,t){return R(this,me,pt).call(this,e,Ke.Uint8,t)}int16(e,t){return R(this,me,pt).call(this,e,Ke.Int16,t)}uint16(e,t){return R(this,me,pt).call(this,e,Ke.Uint16,t)}int32(e,t){return R(this,me,pt).call(this,e,Ke.Int32,t)}uint32(e,t){return R(this,me,pt).call(this,e,Ke.Uint32,t)}int64(e,t){return R(this,me,Hi).call(this,e,jr.Int64,t)}uint64(e,t){return R(this,me,Hi).call(this,e,jr.Uint64,t)}extra(e){return Object.defineProperties(u(this,Et),Object.getOwnPropertyDescriptors(e)),this}postDeserialize(e){return b(this,en,e),this}deserialize(e){const t=new _a(u(this,Et));let i=Fe.resolve();const a=e.position;for(const[l,d]of u(this,xe))i=i.then(()=>d.deserialize(this.options,e,t)).then(m=>{t.set(l,m)},m=>{throw m instanceof gs?e.position===a?new ys:new el:m});return i.then(()=>{const l=t.value;if(u(this,en)){const d=u(this,en).call(l,l);if(d!==void 0)return d}return l}).valueOrPromise()}serialize(e,t){let i;if(Tc(e)){i=e[ms];for(const[v,h]of Object.entries(e)){const k=i.get(v);k&&k.set(h)}}else{i=new _a({});for(const[v,h]of u(this,xe)){const k=h.create(this.options,i,e[v]);i.set(v,k)}}let a=0;const l=[];for(const[v]of u(this,xe)){const h=i.get(v),k=h.getSize();l.push({fieldValue:h,size:k}),a+=k}if(!t)t=new Uint8Array(a);else if(t.length<a)throw new TypeError("Output buffer is too small");const d=new DataView(t.buffer,t.byteOffset,t.byteLength);let m=0;for(const{fieldValue:v,size:h}of l)v.serialize(d,t,m),m+=h;return t.length!==a?t.subarray(0,a):t}};vt=new WeakMap,xe=new WeakMap,Et=new WeakMap,en=new WeakMap,me=new WeakSet,pt=function(e,t,i){return this.field(e,new Xc(t,i))},Hi=function(e,t,i){return this.field(e,new Fc(t,i))},In=new WeakMap;let K=Is;var re=(function(){function n(){var e=this;this._state="running",this.resolve=function(t){e._resolve(t),e._state="resolved"},this.reject=function(t){e._reject(t),e._state="rejected"},this._promise=new Promise(function(t,i){e._resolve=t,e._reject=i})}return Object.defineProperty(n.prototype,"promise",{get:function(){return this._promise},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"state",{get:function(){return this._state},enumerable:!1,configurable:!0}),n})(),tl=(function(){function n(e){e===void 0&&(e=0),this.pendingResolvers=new Map,this.nextId=e}return n.prototype.add=function(){var e=this.nextId++,t=new re;return this.pendingResolvers.set(e,t),[e,t.promise]},n.prototype.getResolver=function(e){if(!this.pendingResolvers.has(e))return null;var t=this.pendingResolvers.get(e);return this.pendingResolvers.delete(e),t},n.prototype.resolve=function(e,t){var i=this.getResolver(e);return i!==null?(i.resolve(t),!0):!1},n.prototype.reject=function(e,t){var i=this.getResolver(e);return i!==null?(i.reject(t),!0):!1},n})();function nl(n){return new Promise(function(e){globalThis.setTimeout(function(){return e()},n)})}const wi=globalThis,xr=wi.AbortController,Ut=wi.ReadableStream,Re=wi.WritableStream,bs=wi.TransformStream;var tn;class wn extends Ut{constructor(t,i){let a;const l=new xr;super({start:async d=>{await Promise.resolve();const m=t({abortSignal:l.signal,enqueue:async v=>{if(l.signal.aborted)throw l.signal.reason;if(d.desiredSize===null){d.enqueue(v);return}if(u(this,tn)){b(this,tn,!1),d.enqueue(v);return}d.desiredSize<=0&&(a=new re,await a.promise),d.enqueue(v)},close(){d.close()},error(v){d.error(v)}});m&&"then"in m&&m.then(()=>{try{d.close()}catch{}},v=>{d.error(v)})},pull:()=>{if(a){a.resolve();return}(i==null?void 0:i.highWaterMark)===0&&b(this,tn,!0)},cancel:d=>{l.abort(d),a==null||a.reject(d)}},i);y(this,tn,!1)}}tn=new WeakMap;const rl=()=>{};var Oe,Be,$e,pe,it,Ki,Yi;class Lr{constructor(e){y(this,it);y(this,Oe);y(this,Be,0);y(this,$e,0);y(this,pe,0);L(this,"stream");L(this,"reader");this.stream=e,this.reader=e.getReader()}get position(){return u(this,pe)}readExactly(e){if(u(this,Oe)){const t=u(this,Oe),i=u(this,Be);return u(this,$e)>e?(b(this,Be,u(this,Be)+e),b(this,$e,u(this,$e)-e),b(this,pe,u(this,pe)+e),t.subarray(i,i+e)):(b(this,Oe,void 0),b(this,$e,0),b(this,Be,0),b(this,pe,u(this,pe)+(t.length-i)),R(this,it,Yi).call(this,e,t.subarray(i)))}return R(this,it,Yi).call(this,e)}release(){return u(this,$e)>0?new wn(async e=>{const t=u(this,Oe).subarray(u(this,Be));for(await e.enqueue(t),e.abortSignal.addEventListener("abort",()=>{this.reader.cancel().catch(rl)});;){const{done:i,value:a}=await this.reader.read();if(i)return;await e.enqueue(a)}}):(this.reader.releaseLock(),this.stream)}async cancel(e){await this.reader.cancel(e)}}Oe=new WeakMap,Be=new WeakMap,$e=new WeakMap,pe=new WeakMap,it=new WeakSet,Ki=async function(){const{done:e,value:t}=await this.reader.read();if(e)throw new gs;return t},Yi=async function(e,t){let i,a;if(t)i=new Uint8Array(e),i.set(t),a=t.length,e-=t.length;else{const l=await R(this,it,Ki).call(this);if(l.length===e)return b(this,pe,u(this,pe)+e),l;if(l.length>e)return b(this,Oe,l),b(this,Be,e),b(this,$e,l.length-e),b(this,pe,u(this,pe)+e),l.subarray(0,e);i=new Uint8Array(e),i.set(l),a=l.length,e-=l.length,b(this,pe,u(this,pe)+l.length)}for(;e>0;){const l=await R(this,it,Ki).call(this);if(l.length===e)return i.set(l,a),b(this,pe,u(this,pe)+e),i;if(l.length>e)return b(this,Oe,l),b(this,Be,e),b(this,$e,l.length-e),i.set(l.subarray(0,e),a),b(this,pe,u(this,pe)+e),i;i.set(l,a),a+=l.length,e-=l.length,b(this,pe,u(this,pe)+l.length)}return i};var Nn,Dn;class il{constructor(e){y(this,Nn);y(this,Dn);let t;const i=new Lr(new wn(a=>{t=a}));b(this,Nn,new Ut({async pull(a){try{const l=await e(i);a.enqueue(l)}catch(l){if(l instanceof ys){a.close();return}throw l}},cancel:a=>i.cancel(a)})),b(this,Dn,new Re({async write(a){await t.enqueue(a)},abort(){t.close()},close(){t.close()}}))}get readable(){return u(this,Nn)}get writable(){return u(this,Dn)}}Nn=new WeakMap,Dn=new WeakMap;var nn,Le,si,St,Pn;class Gi{constructor(){y(this,nn,"");y(this,Le,new re);y(this,si,new Re({write:e=>{b(this,nn,u(this,nn)+e)},close:()=>{u(this,Le).resolve(u(this,nn)),u(this,St).enqueue(u(this,nn)),u(this,St).close()},abort:e=>{u(this,Le).reject(e),u(this,St).error(e)}}));y(this,St);y(this,Pn,new Ut({start:e=>{b(this,St,e)}}));Object.defineProperties(u(this,Pn),{then:{get:()=>u(this,Le).promise.then.bind(u(this,Le).promise)},catch:{get:()=>u(this,Le).promise.catch.bind(u(this,Le).promise)},finally:{get:()=>u(this,Le).promise.finally.bind(u(this,Le).promise)}})}get writable(){return u(this,si)}get readable(){return u(this,Pn)}}nn=new WeakMap,Le=new WeakMap,si=new WeakMap,St=new WeakMap,Pn=new WeakMap;const{console:Wr}=globalThis;var ja;const sl=((ja=Wr==null?void 0:Wr.createTask)==null?void 0:ja.bind(Wr))??(()=>({run(n){return n()}}));function al(n){return typeof n=="object"&&n!==null&&"then"in n}var qn,_e;class be{constructor(e){y(this,qn);y(this,_e);L(this,"value");L(this,"consumed");b(this,qn,sl("Consumable")),this.value=e,b(this,_e,new re),this.consumed=u(this,_e).promise}consume(){u(this,_e).resolve()}error(e){u(this,_e).reject(e)}tryConsume(e){try{let t=u(this,qn).run(()=>e(this.value));return al(t)?t=t.then(i=>(u(this,_e).resolve(),i),i=>{throw u(this,_e).reject(i),i}):u(this,_e).resolve(),t}catch(t){throw u(this,_e).reject(t),t}}}qn=new WeakMap,_e=new WeakMap;(function(n){class e extends Re{static async write(a,l){const d=new n(l);await a.write(d),await d.consumed}constructor(a,l){let d;l&&(d={},"highWaterMark"in l&&(d.highWaterMark=l.highWaterMark),"size"in l&&(d.size=m=>l.size(m instanceof n?m.value:m))),super({start(m){var v;return(v=a.start)==null?void 0:v.call(a,m)},async write(m,v){await m.tryConsume(h=>{var k;return(k=a.write)==null?void 0:k.call(a,h,v)})},abort(m){var v;return(v=a.abort)==null?void 0:v.call(a,m)},close(){var m;return(m=a.close)==null?void 0:m.call(a)}},d)}}n.WritableStream=e;class t extends Ut{static async enqueue(a,l){const d=new n(l);a.enqueue(d),await d.consumed}constructor(a,l){let d,m;l&&(m={},"highWaterMark"in l&&(m.highWaterMark=l.highWaterMark),"size"in l&&(m.size=v=>l.size(v.value))),super({async start(v){var h;d={async enqueue(k){await t.enqueue(v,k)},close(){v.close()},error(k){v.error(k)}},await((h=a.start)==null?void 0:h.call(a,d))},async pull(){var v;await((v=a.pull)==null?void 0:v.call(a,d))},async cancel(v){var h;await((h=a.cancel)==null?void 0:h.call(a,v))}},m)}}n.ReadableStream=t})(be||(be={}));var rt;(function(n){function e(l){return l instanceof be?l.value:l}n.getValue=e;function t(l,d){return l instanceof be?l.tryConsume(d):d(l)}n.tryConsume=t;class i extends bs{constructor(){super({transform(d,m){n.tryConsume(d,v=>{m.enqueue(v)})}})}}n.UnwrapStream=i;class a extends Re{constructor(d,m){let v;m&&(v={},"highWaterMark"in m&&(v.highWaterMark=m.highWaterMark),"size"in m&&(v.size=h=>m.size(h instanceof be?h.value:h))),super({start(h){var k;return(k=d.start)==null?void 0:k.call(d,h)},async write(h,k){await n.tryConsume(h,C=>{var F;return(F=d.write)==null?void 0:F.call(d,C,k)})},abort(h){var k;return(k=d.abort)==null?void 0:k.call(d,h)},close(){var h;return(h=d.close)==null?void 0:h.call(d)}},v)}}n.WritableStream=a})(rt||(rt={}));var Ae,Me,se,we;class Ja{constructor(e){y(this,Ae);y(this,Me);y(this,se);y(this,we);b(this,Ae,e),b(this,Me,new Uint8Array(e)),b(this,se,0),b(this,we,e)}*push(e){let t=0,i=e.length;if(u(this,se)!==0)if(i>=u(this,we)){if(u(this,Me).set(e.subarray(0,u(this,we)),u(this,se)),t+=u(this,we),i-=u(this,we),yield u(this,Me),b(this,se,0),b(this,we,u(this,Ae)),i===0)return}else{u(this,Me).set(e,u(this,se)),b(this,se,u(this,se)+i),b(this,we,u(this,we)-i);return}for(;i>=u(this,Ae);){const a=t+u(this,Ae);yield e.subarray(t,a),t=a,i-=u(this,Ae)}i>0&&(u(this,Me).set(e.subarray(t),u(this,se)),b(this,se,u(this,se)+i),b(this,we,u(this,we)-i))}flush(){if(u(this,se)===0)return;const e=u(this,Me).subarray(0,u(this,se));return b(this,se,0),b(this,we,u(this,Ae)),e}}Ae=new WeakMap,Me=new WeakMap,se=new WeakMap,we=new WeakMap;class ol extends bs{constructor(e,t=!1){const i=t?new Ja(e):void 0;super({async transform(a,l){await rt.tryConsume(a,async d=>{if(i)for(const m of i.push(d))await be.ReadableStream.enqueue(l,m);else{let m=0,v=d.length;for(;v>0;){const h=m+e;await be.ReadableStream.enqueue(l,d.subarray(m,h)),m=h,v-=e}}})},flush(a){if(i){const l=i.flush();l&&a.enqueue(l)}}})}}function cl(n,e){return"start"in n?n.start(e):typeof n=="function"?n(e):n}var rn;class ll extends Ut{constructor(t,i){super({start:async a=>{await Promise.resolve(),this.readable=await cl(t,a),b(this,rn,this.readable.getReader())},pull:async a=>{var d;const l=await u(this,rn).read();l.done?(a.close(),"close"in t&&await((d=t.close)==null?void 0:d.call(t))):a.enqueue(l.value)},cancel:async a=>{var l;await u(this,rn).cancel(a),"cancel"in t&&await((l=t.cancel)==null?void 0:l.call(t,a))}},i);L(this,"readable");y(this,rn)}}rn=new WeakMap;const Ia=()=>{};var Rn,Cn,xt,On,sn;class ul{constructor(e){y(this,Rn,[]);y(this,Cn,[]);y(this,xt,!1);y(this,On,new re);y(this,sn);b(this,sn,e??{})}get writableClosed(){return u(this,xt)}get closed(){return u(this,On).promise}wrapReadable(e,t){return new ll({start:i=>(u(this,Rn).push(i),e),cancel:async()=>{await this.close()},close:async()=>{await this.dispose()}},t)}createWritable(e){const t=e.getWriter();return u(this,Cn).push(t),new Re({write:async i=>{await t.write(i)},abort:async i=>{await t.abort(i),await this.close()},close:async()=>{await t.close().catch(Ia),await this.close()}})}async close(){var e,t;if(!u(this,xt)){b(this,xt,!0),await((t=(e=u(this,sn)).close)==null?void 0:t.call(e))!==!1&&await this.dispose();for(const i of u(this,Cn))i.close().catch(Ia)}}async dispose(){var e,t;b(this,xt,!0),u(this,On).resolve();for(const i of u(this,Rn))try{i.close()}catch{}await((t=(e=u(this,sn)).dispose)==null?void 0:t.call(e))}}Rn=new WeakMap,Cn=new WeakMap,xt=new WeakMap,On=new WeakMap,sn=new WeakMap;const hl=globalThis,Ji=hl.TextDecoderStream;function dl(n,e){const t=e.writable.getWriter(),i=e.readable.pipeTo(n);return new Re({async write(a){await t.write(a)},async close(){await t.close(),await i}})}class fl extends il{constructor(e){super(t=>e.deserialize(t))}}async function pl(n){return"start"in n?await n.start():typeof n=="function"?await n():n}var Lt;const Ns=class Ns extends Re{constructor(t){super({start:async()=>{await Promise.resolve(),this.writable=await pl(t),b(this,Lt,this.writable.getWriter())},write:async i=>{await u(this,Lt).write(i)},abort:async i=>{var a;await u(this,Lt).abort(i),t!==this.writable&&"close"in t&&await((a=t.close)==null?void 0:a.call(t))},close:async()=>{var i;await u(this,Lt).close(),t!==this.writable&&"close"in t&&await((i=t.close)==null?void 0:i.call(t))}});L(this,"writable");y(this,Lt)}bePipedThroughFrom(t){let i;return new Ns({start:()=>(i=t.readable.pipeTo(this),t.writable),async close(){await i}})}};Lt=new WeakMap;let Xi=Ns;var an;class vs{constructor(){y(this,an,[]);this.dispose=this.dispose.bind(this)}addDisposable(e){return u(this,an).push(e),e}dispose(){for(const e of u(this,an))e.dispose();b(this,an,[])}}an=new WeakMap;class Es extends vs{constructor(t){super();L(this,"adb");this.adb=t}}const wl=new K({littleEndian:!0}).uint32("version"),gl=new K({littleEndian:!0}).uint32("bpp").uint32("size").uint32("width").uint32("height").uint32("red_offset").uint32("red_length").uint32("blue_offset").uint32("blue_length").uint32("green_offset").uint32("green_length").uint32("alpha_offset").uint32("alpha_length").uint8Array("data",{lengthField:"size"}),ml=new K({littleEndian:!0}).uint32("bpp").uint32("colorSpace").uint32("size").uint32("width").uint32("height").uint32("red_offset").uint32("red_length").uint32("blue_offset").uint32("blue_length").uint32("green_offset").uint32("green_length").uint32("alpha_offset").uint32("alpha_length").uint8Array("data",{lengthField:"size"});class Xa extends Error{constructor(e,t){super(e,t)}}class yl extends Xa{constructor(e){super(`Unsupported FrameBuffer version ${e}`)}}class bl extends Xa{constructor(){super("FrameBuffer is disabled by current app")}}async function vl(n){const e=await n.createSocket("framebuffer:"),t=new Lr(e.readable);let i;try{({version:i}=await wl.deserialize(t))}catch(a){throw a instanceof ys?new bl:a}switch(i){case 1:return gl.deserialize(t);case 2:return ml.deserialize(t);default:throw new yl(i)}}class El extends Es{reboot(e=""){return this.adb.createSocketAndWait(`reboot:${e}`)}bootloader(){return this.reboot("bootloader")}fastboot(){return this.reboot("fastboot")}recovery(){return this.reboot("recovery")}sideload(){return this.reboot("sideload")}qualcommEdlMode(){return this.reboot("edl")}powerOff(){return this.adb.subprocess.spawnAndWaitLegacy(["reboot","-p"])}powerButton(e=!1){const t=["input","keyevent"];return e&&t.push("--longpress"),t.push("POWER"),this.adb.subprocess.spawnAndWaitLegacy(t)}samsungOdin(){return this.reboot("download")}}var _t,ze;class Za{constructor(e=!1){y(this,_t);y(this,ze,[]);b(this,_t,e)}wait(){if(!u(this,_t)&&(b(this,_t,!0),u(this,ze).length===0))return Promise.resolve();const e=new re;return u(this,ze).push(e),e.promise}notifyOne(){u(this,ze).length!==0?u(this,ze).pop().resolve():b(this,_t,!1)}dispose(){for(const e of u(this,ze))e.reject(new Error("The AutoResetEvent has been disposed"));u(this,ze).length=0}}_t=new WeakMap,ze=new WeakMap;const H=[],Gt=61;function _r(n,e){const t=n.charCodeAt(0),i=e.charCodeAt(0);for(let a=t;a<=i;a+=1)H.push(a)}_r("A","Z");_r("a","z");_r("0","9");_r("+","+");_r("/","/");function eo(n){const e=n%3,t=e!==0?3-e:0;return[(n+t)/3*4,t]}function Sl(n,e){const[t,i]=eo(n.length);if(e){if(e.length<t)throw new TypeError("output buffer is too small");if(e=e.subarray(0,t),n.buffer!==e.buffer)Mi(n,e,i);else if(e.byteOffset+e.length-(i+1)<=n.byteOffset+n.length)Mi(n,e,i);else if(e.byteOffset>=n.byteOffset-1)xl(n,e,i);else throw new TypeError("input and output cannot overlap");return t}else return e=new Uint8Array(t),Mi(n,e,i),e}function Mi(n,e,t){let i=0,a=0;for(;i<n.length-2;){const l=n[i];i+=1;const d=n[i];i+=1;const m=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4|d>>4],a+=1,e[a]=H[(d&15)<<2|m>>6],a+=1,e[a]=H[m&63],a+=1}if(t===2){const l=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4],a+=1,e[a]=Gt,a+=1,e[a]=Gt}else if(t===1){const l=n[i];i+=1;const d=n[i];i+=1,e[a]=H[l>>2],a+=1,e[a]=H[(l&3)<<4|d>>4],a+=1,e[a]=H[(d&15)<<2],a+=1,e[a]=Gt}}function xl(n,e,t){let i=n.length-1,a=e.length-1;if(t===2){const l=n[i];i-=1,e[a]=Gt,a-=1,e[a]=Gt,a-=1,e[a]=H[(l&3)<<4],a-=1,e[a]=H[l>>2],a-=1}else if(t===1){const l=n[i];i-=1;const d=n[i];i-=1,e[a]=Gt,a-=1,e[a]=H[(l&15)<<2],a-=1,e[a]=H[(d&3)<<4|l>>4],a-=1,e[a]=H[d>>2],a-=1}for(;i>=0;){const l=n[i];i-=1;const d=n[i];i-=1;const m=n[i];i-=1,e[a]=H[l&63],a-=1,e[a]=H[(d&15)<<2|l>>6],a-=1,e[a]=H[(m&3)<<4|d>>4],a-=1,e[a]=H[m>>2],a-=1}}function Ll(n){if(n<48)throw new TypeError(`Invalid hex char ${n}`);if(n<58)return n-48;if(n<65)throw new TypeError(`Invalid hex char ${n}`);if(n<71)return n-55;if(n<97)throw new TypeError(`Invalid hex char ${n}`);if(n<103)return n-87;throw new TypeError(`Invalid hex char ${n}`)}function Tn(n){let e=0;for(let t=0;t<n.length;t+=1)e=e<<4|Ll(n[t]);return e}function _l(n,e,t){const i=e;for(e+=3;e>=i&&t>0;){const a=t&15;t>>=4,a<10?n[e]=a+48:n[e]=a+87,e-=1}for(;e>=i;)n[e]=48,e-=1}const Zi=()=>{};function to(...n){throw new Error(`Unreachable. Arguments:
|
|
2
|
-
`+n.join(`
|
|
3
|
-
`))}function Qr(n,e){if(n.length!==e.length)return!1;for(let t=0;t<n.length;t+=1)if(n[t]!==e[t])return!1;return!0}const no=new K().string("length",{length:4}).string("content",{lengthField:"length",lengthFieldRadix:16});class ro extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}class kl extends ro{constructor(){super("ADB reverse tunnel is not supported on this device when connected wirelessly.")}}const Tl=new K().concat(no).postDeserialize(n=>{throw n.content==="more than one device/emulator"?new kl:new ro(n.content)});function Il(n){let e=0;for(const t of n){if(t<48||t>57)return e;e=e*10+t-48}return e}const Nl=qe("OKAY");var on;class Dl extends vs{constructor(t){super();L(this,"adb");y(this,on,new Map);this.adb=t}async createBufferedStream(t){const i=await this.adb.createSocket(t);return new Lr(i.readable)}async sendRequest(t){const i=await this.createBufferedStream(t),a=await i.readExactly(4);return Qr(a,Nl)||await Tl.deserialize(i),i}async list(){const t=await this.createBufferedStream("reverse:list-forward");return(await no.deserialize(t)).content.split(`
|
|
4
|
-
`).filter(a=>!!a).map(a=>{const[l,d,m]=a.split(" ");return{deviceSerial:l,localName:d,remoteName:m}})}async addExternal(t,i){const a=await this.sendRequest(`reverse:forward:${t};${i}`);if(t.startsWith("tcp:")){const l=a.position;try{const d=Tn(await a.readExactly(4));t=`tcp:${Il(await a.readExactly(d))}`}catch(d){if(!(d instanceof gs&&a.position===l))throw d}}return t}async add(t,i,a){a=await this.adb.transport.addReverseTunnel(i,a);try{return t=await this.addExternal(t,a),u(this,on).set(t,a),t}catch(l){throw await this.adb.transport.removeReverseTunnel(a),l}}async remove(t){const i=u(this,on).get(t);i&&await this.adb.transport.removeReverseTunnel(i),await this.sendRequest(`reverse:killforward:${t}`)}async removeAll(){await this.adb.transport.clearReverseTunnels(),u(this,on).clear(),await this.sendRequest("reverse:killforward-all")}}on=new WeakMap;var Ye,Bn,$n;const ai=class ai{constructor(e){y(this,Ye);y(this,Bn);y(this,$n);b(this,Ye,e),b(this,Bn,new Ut({start:t=>{u(this,Ye).closed.then(()=>t.close()).catch(to)}})),b(this,$n,e.closed.then(()=>0))}static isSupported(){return!0}static async pty(e,t){return new ai(await e.createSocket(`shell:${t}`))}static async raw(e,t){return new ai(await e.createSocket(`exec:${t}`))}get stdin(){return u(this,Ye).writable}get stdout(){return u(this,Ye).readable}get stderr(){return u(this,Bn)}get exit(){return u(this,$n)}resize(){}async kill(){await u(this,Ye).close()}};Ye=new WeakMap,Bn=new WeakMap,$n=new WeakMap;let Hr=ai;var B;(function(n){n.ShellV2="shell_v2",n.Cmd="cmd",n.StatV2="stat_v2",n.ListV2="ls_v2",n.FixedPushMkdir="fixed_push_mkdir",n.Abb="abb",n.AbbExec="abb_exec",n.SendReceiveV2="sendrecv_v2",n.DelayedAck="delayed_ack"})(B||(B={}));var wt;(function(n){n[n.Stdin=0]="Stdin",n[n.Stdout=1]="Stdout",n[n.Stderr=2]="Stderr",n[n.Exit=3]="Exit",n[n.CloseStdin=4]="CloseStdin",n[n.WindowSizeChange=5]="WindowSizeChange"})(wt||(wt={}));const zi=new K({littleEndian:!0}).uint8("id",void 0).uint32("length").uint8Array("data",{lengthField:"length"});var cn,ln,An,Mn,zn,kt;const oi=class oi{constructor(e){y(this,cn);y(this,ln);y(this,An);y(this,Mn);y(this,zn);y(this,kt,new re);b(this,cn,e);let t,i;b(this,Mn,new wn(a=>{t=a})),b(this,zn,new wn(a=>{i=a})),e.readable.pipeThrough(new fl(zi)).pipeTo(new Re({write:async a=>{switch(a.id){case wt.Exit:u(this,kt).resolve(a.data[0]);break;case wt.Stdout:t.abortSignal.aborted||await t.enqueue(a.data);break;case wt.Stderr:i.abortSignal.aborted||await i.enqueue(a.data);break}}})).then(()=>{t.close(),i.close(),u(this,kt).reject(new Error("Socket ended without exit message"))},a=>{t.error(a),i.error(a),u(this,kt).reject(a)}),b(this,ln,u(this,cn).writable.getWriter()),b(this,An,new rt.WritableStream({write:async a=>{await u(this,ln).write(zi.serialize({id:wt.Stdin,data:a}))}}))}static isSupported(e){return e.canUseFeature(B.ShellV2)}static async pty(e,t){return new oi(await e.createSocket(`shell,v2,pty:${t}`))}static async raw(e,t){return new oi(await e.createSocket(`shell,v2,raw:${t}`))}get stdin(){return u(this,An)}get stdout(){return u(this,Mn)}get stderr(){return u(this,zn)}get exit(){return u(this,kt).promise}async resize(e,t){await u(this,ln).write(zi.serialize({id:wt.WindowSizeChange,data:qe(`${e}x${t},0x0\0`)}))}kill(){return u(this,cn).close()}};cn=new WeakMap,ln=new WeakMap,An=new WeakMap,Mn=new WeakMap,zn=new WeakMap,kt=new WeakMap;let es=oi;const Pl={protocols:[es,Hr]};var Un,ts;class ql extends Es{constructor(){super(...arguments);y(this,Un)}shell(t,i){return R(this,Un,ts).call(this,"pty",t,i)}spawn(t,i){return R(this,Un,ts).call(this,"raw",t,i)}async spawnAndWait(t,i){const a=await this.spawn(t,i),[l,d,m]=await Promise.all([a.stdout.pipeThrough(new Ji).pipeThrough(new Gi),a.stderr.pipeThrough(new Ji).pipeThrough(new Gi),a.exit]);return{stdout:l,stderr:d,exitCode:m}}async spawnAndWaitLegacy(t){const{stdout:i}=await this.spawnAndWait(t,{protocols:[Hr]});return i}}Un=new WeakSet,ts=async function(t,i,a){const{protocols:l}={...Pl,...a};let d;for(const m of l)if(await m.isSupported(this.adb)){d=m;break}if(!d)throw new Error("No specified protocol is supported by the device");return Array.isArray(i)?i=i.join(" "):i===void 0&&(i=""),await d[t](this.adb,i)};function ns(n){let e="";e+="'";let t=0;for(;;){const i=n.indexOf("'",t);if(i===-1){e+=n.substring(t);break}e+=n.substring(t,i),e+=String.raw`'\''`,t=i+1}return e+="'",e}function Rl(n){const e=new Uint8Array(n.length);for(let t=0;t<n.length;t+=1)e[t]=n.charCodeAt(t);return e}function V(n){const e=Rl(n);return pi(e,0)}var ae;(function(n){n.Entry=V("DENT"),n.Entry2=V("DNT2"),n.Lstat=V("STAT"),n.Stat=V("STA2"),n.Lstat2=V("LST2"),n.Done=V("DONE"),n.Data=V("DATA"),n.Ok=V("OKAY"),n.Fail=V("FAIL")})(ae||(ae={}));class Cl extends Error{}const io=new K({littleEndian:!0}).uint32("messageLength").string("message",{lengthField:"messageLength"}).postDeserialize(n=>{throw new Cl(n.message)});async function Kr(n,e,t){typeof e=="string"&&(e=V(e));const i=await n.readExactly(4);switch(pi(i,0)){case ae.Fail:throw await io.deserialize(n),new Error("Unreachable");case e:return await t.deserialize(n);default:throw new Error(`Expected '${e}', but got '${zt(i)}'`)}}async function*Yr(n,e,t){for(typeof e=="string"&&(e=V(e));;){const i=await n.readExactly(4);switch(pi(i,0)){case ae.Fail:throw await io.deserialize(n),new Error("Unreachable");case ae.Done:await n.readExactly(t.size);return;case e:yield await t.deserialize(n);break;default:throw new Error(`Expected '${e}' or '${ae.Done}', but got '${zt(i)}'`)}}}var he;(function(n){n.List=V("LIST"),n.ListV2=V("LIS2"),n.Send=V("SEND"),n.SendV2=V("SND2"),n.Lstat=V("STAT"),n.Stat=V("STA2"),n.LstatV2=V("LST2"),n.Data=V("DATA"),n.Done=V("DONE"),n.Receive=V("RECV")})(he||(he={}));const Na=new K({littleEndian:!0}).uint32("id").uint32("arg");async function Pe(n,e,t){if(typeof e=="string"&&(e=V(e)),typeof t=="number"){await n.write(Na.serialize({id:e,arg:t}));return}typeof t=="string"&&(t=qe(t)),await n.write(Na.serialize({id:e,arg:t.length})),await n.write(t)}var Gr;(function(n){n[n.Directory=4]="Directory",n[n.File=8]="File",n[n.Link=10]="Link"})(Gr||(Gr={}));const so=new K({littleEndian:!0}).int32("mode").int32("size").int32("mtime").extra({get type(){return this.mode>>12},get permission(){return this.mode&4095}}).postDeserialize(n=>{if(n.mode===0&&n.size===0&&n.mtime===0)throw new Error("lstat error")});var Jr;(function(n){n[n.SUCCESS=0]="SUCCESS",n[n.EACCES=13]="EACCES",n[n.EEXIST=17]="EEXIST",n[n.EFAULT=14]="EFAULT",n[n.EFBIG=27]="EFBIG",n[n.EINTR=4]="EINTR",n[n.EINVAL=22]="EINVAL",n[n.EIO=5]="EIO",n[n.EISDIR=21]="EISDIR",n[n.ELOOP=40]="ELOOP",n[n.EMFILE=24]="EMFILE",n[n.ENAMETOOLONG=36]="ENAMETOOLONG",n[n.ENFILE=23]="ENFILE",n[n.ENOENT=2]="ENOENT",n[n.ENOMEM=12]="ENOMEM",n[n.ENOSPC=28]="ENOSPC",n[n.ENOTDIR=20]="ENOTDIR",n[n.EOVERFLOW=75]="EOVERFLOW",n[n.EPERM=1]="EPERM",n[n.EROFS=30]="EROFS",n[n.ETXTBSY=26]="ETXTBSY"})(Jr||(Jr={}));const Ss=new K({littleEndian:!0}).uint32("error",void 0).uint64("dev").uint64("ino").uint32("mode").uint32("nlink").uint32("uid").uint32("gid").uint64("size").uint64("atime").uint64("mtime").uint64("ctime").extra({get type(){return this.mode>>12},get permission(){return this.mode&4095}}).postDeserialize(n=>{if(n.error)throw new Error(Jr[n.error])});async function Ol(n,e,t){const i=await n.lock();try{if(t)return await Pe(i,he.LstatV2,e),await Kr(i,ae.Lstat2,Ss);{await Pe(i,he.Lstat,e);const a=await Kr(i,ae.Lstat,so);return{mode:a.mode,size:BigInt(a.size),mtime:BigInt(a.mtime),get type(){return a.type},get permission(){return a.permission}}}}finally{i.release()}}async function Bl(n,e){const t=await n.lock();try{return await Pe(t,he.Stat,e),await Kr(t,ae.Stat,Ss)}finally{t.release()}}const $l=new K({littleEndian:!0}).concat(so).uint32("nameLength").string("name",{lengthField:"nameLength"}),Al=new K({littleEndian:!0}).concat(Ss).uint32("nameLength").string("name",{lengthField:"nameLength"});async function*Ml(n,e){const t=await n.lock();try{await Pe(t,he.ListV2,e);for await(const i of Yr(t,ae.Entry2,Al))i.error===Jr.SUCCESS&&(yield i)}finally{t.release()}}async function*zl(n,e){const t=await n.lock();try{await Pe(t,he.List,e);for await(const i of Yr(t,ae.Entry,$l))yield i}finally{t.release()}}async function*Ul(n,e,t){if(t)yield*Ml(n,e);else for await(const i of zl(n,e))yield{mode:i.mode,size:BigInt(i.size),mtime:BigInt(i.mtime),get type(){return i.type},get permission(){return i.permission},name:i.name}}const Da=new K({littleEndian:!0}).uint32("dataLength").uint8Array("data",{lengthField:"dataLength"});async function*Fl(n,e){const t=await n.lock();let i=!1;try{await Pe(t,he.Receive,e);for await(const a of Yr(t,ae.Data,Da))yield a.data;i=!0}catch(a){throw i=!0,a}finally{if(!i)for await(const a of Yr(t,ae.Data,Da));t.release()}}function Wl(n,e){return new wn(async t=>{for await(const i of Fl(n,e))await t.enqueue(i)})}const ao=64*1024,Vl=new K({littleEndian:!0}).uint32("unused");async function oo(n,e,t,i){const a=new xr;e.pipeThrough(new ol(t,!0)).pipeTo(new rt.WritableStream({write:async l=>{await Pe(n,he.Data,l)}}),{signal:a.signal}).then(async()=>{await Pe(n,he.Done,i),await n.flush()},Zi),await Kr(n,ae.Ok,Vl).catch(l=>{throw a.abort(),l})}async function jl({socket:n,filename:e,file:t,type:i=Gr.File,permission:a=438,mtime:l=Date.now()/1e3|0,packetSize:d=ao}){const m=await n.lock();try{const v=i<<12|a,h=`${e},${v.toString()}`;await Pe(m,he.Send,h),await oo(m,t,d,l)}finally{m.release()}}var Xr;(function(n){n[n.None=0]="None",n[n.Brotli=1]="Brotli",n[n.Lz4=2]="Lz4",n[n.Zstd=4]="Zstd",n[n.DryRun=2147483648]="DryRun"})(Xr||(Xr={}));const Ql=new K({littleEndian:!0}).uint32("id").uint32("mode").uint32("flags",void 0);async function Hl({socket:n,filename:e,file:t,type:i=Gr.File,permission:a=438,mtime:l=Date.now()/1e3|0,packetSize:d=ao,dryRun:m=!1}){const v=await n.lock();try{await Pe(v,he.SendV2,e);const h=i<<12|a;let k=Xr.None;m&&(k|=Xr.DryRun),await v.write(Ql.serialize({id:he.SendV2,mode:h,flags:k})),await oo(v,t,d,l)}finally{v.release()}}function Kl(n){if(n.v2)return Hl(n);if(n.dryRun)throw new Error("dryRun is not supported in v1");return jl(n)}var Fn,Tt,Wn,It,Nt,Vn,rs;class Yl{constructor(e,t,i,a){y(this,Vn);y(this,Fn);y(this,Tt);y(this,Wn);y(this,It,new Za);y(this,Nt);b(this,Fn,e),b(this,Tt,t),b(this,Wn,a),b(this,Nt,new Ja(i))}get position(){return u(this,Tt).position}async flush(){try{await u(this,It).wait();const e=u(this,Nt).flush();e&&await R(this,Vn,rs).call(this,e)}finally{u(this,It).notifyOne()}}async write(e){try{await u(this,It).wait();for(const t of u(this,Nt).push(e))await R(this,Vn,rs).call(this,t)}finally{u(this,It).notifyOne()}}async readExactly(e){return await this.flush(),await u(this,Tt).readExactly(e)}release(){u(this,Nt).flush(),u(this,Wn).notifyOne()}async close(){await u(this,Tt).cancel()}}Fn=new WeakMap,Tt=new WeakMap,Wn=new WeakMap,It=new WeakMap,Nt=new WeakMap,Vn=new WeakSet,rs=async function(e){await be.WritableStream.write(u(this,Fn),e)};var jn,Qn,un;class Gl{constructor(e,t){y(this,jn,new Za);y(this,Qn);y(this,un);b(this,Qn,e),b(this,un,new Yl(e.writable.getWriter(),new Lr(e.readable),t,u(this,jn)))}async lock(){return await u(this,jn).wait(),u(this,un)}async close(){await u(this,un).close(),await u(this,Qn).close()}}jn=new WeakMap,Qn=new WeakMap,un=new WeakMap;function Jl(n){const e=n.lastIndexOf("/");if(e===-1)throw new Error("Invalid path");return e===0?"/":n.substring(0,e)}var Dt,Hn,Kn,Yn,Gn;class Xl extends vs{constructor(t,i){super();L(this,"_adb");L(this,"_socket");y(this,Dt);y(this,Hn);y(this,Kn);y(this,Yn);y(this,Gn);this._adb=t,this._socket=new Gl(i,t.maxPayloadSize),b(this,Dt,t.canUseFeature(B.StatV2)),b(this,Hn,t.canUseFeature(B.ListV2)),b(this,Kn,t.canUseFeature(B.FixedPushMkdir)),b(this,Yn,t.canUseFeature(B.SendReceiveV2)),b(this,Gn,this._adb.canUseFeature(B.ShellV2)&&!this.fixedPushMkdir)}get supportsStat(){return u(this,Dt)}get supportsListV2(){return u(this,Hn)}get fixedPushMkdir(){return u(this,Kn)}get supportsSendReceiveV2(){return u(this,Yn)}get needPushMkdirWorkaround(){return u(this,Gn)}async lstat(t){return await Ol(this._socket,t,u(this,Dt))}async stat(t){if(!u(this,Dt))throw new Error("Not supported");return await Bl(this._socket,t)}async isDirectory(t){try{return await this.lstat(t+"/"),!0}catch{return!1}}opendir(t){return Ul(this._socket,t,this.supportsListV2)}async readdir(t){const i=[];for await(const a of this.opendir(t))i.push(a);return i}read(t){return Wl(this._socket,t)}async write(t){this.needPushMkdirWorkaround&&await this._adb.subprocess.spawnAndWait(["mkdir","-p",ns(Jl(t.filename))]),await Kl({v2:this.supportsSendReceiveV2,socket:this._socket,...t})}lockSocket(){return this._socket.lock()}async dispose(){super.dispose(),await this._socket.close()}}Dt=new WeakMap,Hn=new WeakMap,Kn=new WeakMap,Yn=new WeakMap,Gn=new WeakMap;var Jn,is;class Zl extends Es{constructor(){super(...arguments);y(this,Jn)}async getListenAddresses(){const t=await this.adb.getProp("service.adb.listen_addrs"),i=await this.adb.getProp("service.adb.tcp.port"),a=await this.adb.getProp("persist.adb.tcp.port");return{serviceListenAddresses:t!=""?t.split(","):[],servicePort:R(this,Jn,is).call(this,i),persistPort:R(this,Jn,is).call(this,a)}}async setPort(t){if(t<=0)throw new TypeError(`Invalid port ${t}`);const i=await this.adb.createSocketAndWait(`tcpip:${t}`);if(i!==`restarting in TCP mode port: ${t}
|
|
5
|
-
`)throw new Error(i);return i}async disable(){const t=await this.adb.createSocketAndWait("usb:");if(t!==`restarting in USB mode
|
|
6
|
-
`)throw new Error(t);return t}}Jn=new WeakSet,is=function(t){if(!(!t||t==="0"))return Number.parseInt(t,10)};class eu{constructor(e){L(this,"transport");L(this,"subprocess");L(this,"power");L(this,"reverse");L(this,"tcpip");this.transport=e,this.subprocess=new ql(this),this.power=new El(this),this.reverse=new Dl(this),this.tcpip=new Zl(this)}get serial(){return this.transport.serial}get maxPayloadSize(){return this.transport.maxPayloadSize}get banner(){return this.transport.banner}get disconnected(){return this.transport.disconnected}get clientFeatures(){return this.transport.clientFeatures}get deviceFeatures(){return this.banner.features}canUseFeature(e){return this.clientFeatures.includes(e)&&this.deviceFeatures.includes(e)}async createSocket(e){return this.transport.connect(e)}async createSocketAndWait(e){return await(await this.createSocket(e)).readable.pipeThrough(new Ji).pipeThrough(new Gi)}async getProp(e){return(await this.subprocess.spawnAndWaitLegacy(["getprop",e])).trim()}async rm(e,t){const i=["rm"];if(t!=null&&t.recursive&&i.push("-r"),t!=null&&t.force&&i.push("-f"),Array.isArray(e))for(const l of e)i.push(ns(l));else i.push(ns(e));return i.push("</dev/null"),await this.subprocess.spawnAndWaitLegacy(i)}async sync(){const e=await this.createSocket("sync:");return new Xl(this,e)}async framebuffer(){return vl(this)}async close(){await this.transport.close()}}var Kt;(function(n){n.Product="ro.product.name",n.Model="ro.product.model",n.Device="ro.product.device",n.Features="features"})(Kt||(Kt={}));var Xn,Zn,er,tr;const Ds=class Ds{constructor(e,t,i,a){y(this,Xn);y(this,Zn);y(this,er);y(this,tr,[]);b(this,Xn,e),b(this,Zn,t),b(this,er,i),b(this,tr,a)}static parse(e){let t,i,a,l=[];const d=e.split("::");if(d.length>1){const m=d[1];for(const v of m.split(";")){if(!v)continue;const h=v.split("=");if(h.length!==2)continue;const[k,C]=h;switch(k){case Kt.Product:t=C;break;case Kt.Model:i=C;break;case Kt.Device:a=C;break;case Kt.Features:l=C.split(",");break}}}return new Ds(t,i,a,l)}get product(){return u(this,Xn)}get model(){return u(this,Zn)}get device(){return u(this,er)}get features(){return u(this,tr)}};Xn=new WeakMap,Zn=new WeakMap,er=new WeakMap,tr=new WeakMap;let Zr=Ds;function ss(n,e,t){let i=0n;for(let a=e;a<e+t;a+=8){i<<=64n;const l=Mc(n,a);i|=l}return i}function as(n,e,t,i,a){if(a)for(;i>0n;)Pc(n,e,i),e+=8,i>>=64n;else{let l=e+t-8;for(;i>0n;)qc(n,l,i),l-=8,i>>=64n}}const tu=38,nu=2048/8,ru=303,iu=2048/8;function co(n){const e=ss(n,tu,nu),t=ss(n,ru,iu);return[e,t]}function Pa(n,e){const t=n%e;return t>0?t:t+e}function su(n,e){if(n=Pa(n,e),!n||e<2)return NaN;const t=[];let i=e;for(;i;)[n,i]=[i,n%i],t.push({a:n,b:i});if(n!==1)return NaN;let a=1,l=0;for(let d=t.length-2;d>=0;d-=1)[a,l]=[l,a-l*Math.floor(t[d].a/t[d].b)];return Pa(l,e)}const mt=2048/8,au=mt/4;function lo(){return 8+mt+mt+4}function ou(n,e){let t;const i=lo();if(!e)e=new Uint8Array(i),t="Uint8Array";else{if(e.length<i)throw new TypeError("output buffer is too small");t="number"}const a=new DataView(e.buffer,e.byteOffset,e.length);let l=0;a.setUint32(l,au,!0),l+=4;const[d]=co(n),m=-su(Number(d%2n**32n),2**32);a.setInt32(l,m,!0),l+=4,as(e,l,mt,d,!0),l+=mt;const v=2n**4096n%d;return as(e,l,mt,v,!0),l+=mt,a.setUint32(l,65537,!0),l+=4,t==="Uint8Array"?e:i}function cu(n,e,t){if(t===1n)return 0n;let i=1n;for(n=n%t;e>0n;)BigInt.asUintN(1,e)===1n&&(i=i*n%t),n=n*n%t,e>>=1n;return i}const qa=20,Ra=48,lu=4,uu=5,hu=6,Ui=new Uint8Array([Ra,13+qa,Ra,9,hu,5,43,14,3,2,26,uu,0,lu,qa]);function du(n,e){const[t,i]=co(n),a=new Uint8Array(256);let l=0;a[l]=0,l+=1,a[l]=1,l+=1;const d=a.length-Ui.length-e.length-1;for(;l<d;)a[l]=255,l+=1;a[l]=0,l+=1,a.set(Ui,l),l+=Ui.length,a.set(e,l);const m=cu(ss(a,0,a.length),i,t);return as(a,0,a.length,m,!1),a}var Y;(function(n){n[n.Auth=1213486401]="Auth",n[n.Close=1163086915]="Close",n[n.Connect=1314410051]="Connect",n[n.Okay=1497451343]="Okay",n[n.Open=1313165391]="Open",n[n.Write=1163154007]="Write"})(Y||(Y={}));const ei=new K({littleEndian:!0}).uint32("command").uint32("arg0").uint32("arg1").uint32("payloadLength").uint32("checksum").int32("magic");new K({littleEndian:!0}).concat(ei).uint8Array("payload",{lengthField:"payloadLength"});function uo(n){return n.reduce((e,t)=>e+t,0)}class fu extends bs{constructor(){const e=new Uint8Array(ei.size);super({transform:async(t,i)=>{await t.tryConsume(async a=>{const l=a;l.payloadLength=l.payload.length,await be.ReadableStream.enqueue(i,ei.serialize(l,e)),l.payloadLength&&await be.ReadableStream.enqueue(i,l.payload)})}})}}var gn;(function(n){n[n.Token=1]="Token",n[n.Signature=2]="Signature",n[n.PublicKey=3]="PublicKey"})(gn||(gn={}));const pu=async function*(n,e){for await(const t of n.iterateKeys()){const i=await e();if(i.arg0!==gn.Token)return;const a=du(t.buffer,i.payload);yield{command:Y.Auth,arg0:gn.Signature,arg1:0,payload:a}}},wu=async function*(n,e){var v;if((await e()).arg0!==gn.Token)return;let i;for await(const h of n.iterateKeys()){i=h;break}i||(i=await n.generateKey());const a=lo(),[l]=eo(a),d=(v=i.name)!=null&&v.length?qe(i.name):De,m=new Uint8Array(l+(d.length?d.length+1:0)+1);ou(i.buffer,m),Sl(m.subarray(0,a),m),d.length&&(m[l]=32,m.set(d,l+1)),yield{command:Y.Auth,arg0:gn.PublicKey,arg1:0,payload:m}},gu=[pu,wu];var nr,hn,Pt,ci,li,ho;class mu{constructor(e,t){y(this,li);L(this,"authenticators");y(this,nr);y(this,hn,new re);y(this,Pt);y(this,ci,()=>u(this,hn).promise);this.authenticators=e,b(this,nr,t)}async process(e){u(this,Pt)||b(this,Pt,R(this,li,ho).call(this)),u(this,hn).resolve(e);const t=await u(this,Pt).next();if(t.done)throw new Error("No authenticator can handle the request");return t.value}dispose(){var e,t;(t=(e=u(this,Pt))==null?void 0:e.return)==null||t.call(e)}}nr=new WeakMap,hn=new WeakMap,Pt=new WeakMap,ci=new WeakMap,li=new WeakSet,ho=async function*(){for(const e of this.authenticators)for await(const t of e(u(this,nr),u(this,ci)))b(this,hn,new re),yield t};var qt,rr,Ge,ir,sr,ar,or,Rt,Ue,ui,fo;class Ca{constructor(e){y(this,ui);y(this,qt);L(this,"localId");L(this,"remoteId");L(this,"localCreated");L(this,"service");y(this,rr);y(this,Ge);y(this,ir);L(this,"writable");y(this,sr,!1);y(this,ar,new re);y(this,or);y(this,Rt);y(this,Ue,0);b(this,qt,e.dispatcher),this.localId=e.localId,this.remoteId=e.remoteId,this.localCreated=e.localCreated,this.service=e.service,b(this,rr,new wn(t=>{b(this,Ge,t)})),this.writable=new rt.WritableStream({start:t=>{b(this,ir,t),t.signal.addEventListener("abort",()=>{var i;(i=u(this,Rt))==null||i.reject(t.signal.reason)})},write:async t=>{const i=t.length,a=u(this,qt).options.maxPayloadSize;for(let l=0,d=a;l<i;l=d,d+=a){const m=t.subarray(l,d);await R(this,ui,fo).call(this,m)}}}),b(this,or,new yu(this)),b(this,Ue,e.availableWriteBytes)}get readable(){return u(this,rr)}get closed(){return u(this,ar).promise}get socket(){return u(this,or)}async enqueue(e){if(!u(this,Ge).abortSignal.aborted)try{await u(this,Ge).enqueue(e)}catch(t){if(u(this,Ge).abortSignal.aborted)return;throw t}}ack(e){var t;b(this,Ue,u(this,Ue)+e),(t=u(this,Rt))==null||t.resolve()}async close(){var e;if(!u(this,sr)){b(this,sr,!0),(e=u(this,Rt))==null||e.reject(new Error("Socket closed"));try{u(this,ir).error(new Error("Socket closed"))}catch{}await u(this,qt).sendPacket(Y.Close,this.localId,this.remoteId,De)}}dispose(){try{u(this,Ge).close()}catch{}u(this,ar).resolve()}}qt=new WeakMap,rr=new WeakMap,Ge=new WeakMap,ir=new WeakMap,sr=new WeakMap,ar=new WeakMap,or=new WeakMap,Rt=new WeakMap,Ue=new WeakMap,ui=new WeakSet,fo=async function(e){const t=e.length;for(;u(this,Ue)<t;){const i=new re;b(this,Rt,i),await i.promise}u(this,Ue)===1/0?b(this,Ue,-1):b(this,Ue,u(this,Ue)-t),await u(this,qt).sendPacket(Y.Write,this.localId,this.remoteId,e)};var ge;class yu{constructor(e){y(this,ge);b(this,ge,e)}get localId(){return u(this,ge).localId}get remoteId(){return u(this,ge).remoteId}get localCreated(){return u(this,ge).localCreated}get service(){return u(this,ge).service}get readable(){return u(this,ge).readable}get writable(){return u(this,ge).writable}get closed(){return u(this,ge).closed}close(){return u(this,ge).close()}}ge=new WeakMap;var Je,ke,Ct,cr,dn,Ot,lr,X,po,wo,os,go,mo,cs;class bu{constructor(e,t){y(this,X);y(this,Je,new tl(1));y(this,ke,new Map);y(this,Ct);L(this,"options");y(this,cr,!1);y(this,dn,new re);y(this,Ot,new Map);y(this,lr,new xr);this.options=t,this.options.initialDelayedAckBytes<0&&(this.options.initialDelayedAckBytes=0),e.readable.pipeTo(new Re({write:async i=>{switch(i.command){case Y.Close:await R(this,X,po).call(this,i);break;case Y.Okay:R(this,X,wo).call(this,i);break;case Y.Open:await R(this,X,go).call(this,i);break;case Y.Write:await R(this,X,mo).call(this,i);break;default:throw new Error(`Unknown command: ${i.command.toString(16)}`)}}}),{preventCancel:t.preserveConnection??!1,signal:u(this,lr).signal}).then(()=>{R(this,X,cs).call(this)},i=>{u(this,cr)||u(this,dn).reject(i),R(this,X,cs).call(this)}),b(this,Ct,e.writable.getWriter())}get disconnected(){return u(this,dn).promise}async createSocket(e){this.options.appendNullToServiceString&&(e+="\0");const[t,i]=u(this,Je).add();await this.sendPacket(Y.Open,t,this.options.initialDelayedAckBytes,e);const{remoteId:a,availableWriteBytes:l}=await i,d=new Ca({dispatcher:this,localId:t,remoteId:a,localCreated:!0,service:e,availableWriteBytes:l});return u(this,ke).set(t,d),d.socket}addReverseTunnel(e,t){u(this,Ot).set(e,t)}removeReverseTunnel(e){u(this,Ot).delete(e)}clearReverseTunnels(){u(this,Ot).clear()}async sendPacket(e,t,i,a){if(typeof a=="string"&&(a=qe(a)),a.length>this.options.maxPayloadSize)throw new TypeError("payload too large");await be.WritableStream.write(u(this,Ct),{command:e,arg0:t,arg1:i,payload:a,checksum:this.options.calculateChecksum?uo(a):0,magic:e^4294967295})}async close(){await Promise.all(Array.from(u(this,ke).values(),e=>e.close())),b(this,cr,!0),u(this,lr).abort(),this.options.preserveConnection?u(this,Ct).releaseLock():await u(this,Ct).close()}}Je=new WeakMap,ke=new WeakMap,Ct=new WeakMap,cr=new WeakMap,dn=new WeakMap,Ot=new WeakMap,lr=new WeakMap,X=new WeakSet,po=async function(e){if(e.arg0===0&&u(this,Je).reject(e.arg1,new Error("Socket open failed")))return;const t=u(this,ke).get(e.arg1);if(t){await t.close(),t.dispose(),u(this,ke).delete(e.arg1);return}},wo=function(e){let t;if(this.options.initialDelayedAckBytes!==0){if(e.payload.length!==4)throw new Error("Invalid OKAY packet. Payload size should be 4");t=pi(e.payload,0)}else{if(e.payload.length!==0)throw new Error("Invalid OKAY packet. Payload size should be 0");t=1/0}if(u(this,Je).resolve(e.arg1,{remoteId:e.arg0,availableWriteBytes:t}))return;const i=u(this,ke).get(e.arg1);if(i){i.ack(t);return}this.sendPacket(Y.Close,e.arg1,e.arg0,De)},os=function(e,t,i){let a;return this.options.initialDelayedAckBytes!==0?(a=new Uint8Array(4),$c(a,0,i)):a=De,this.sendPacket(Y.Okay,e,t,a)},go=async function(e){const[t]=u(this,Je).add();u(this,Je).resolve(t,void 0);const i=e.arg0;let a=e.arg1,l=zt(e.payload);if(l.endsWith("\0")&&(l=l.substring(0,l.length-1)),this.options.initialDelayedAckBytes===0){if(a!==0)throw new Error("Invalid OPEN packet. arg1 should be 0");a=1/0}else if(a===0)throw new Error("Invalid OPEN packet. arg1 should be greater than 0");const d=u(this,Ot).get(l);if(!d){await this.sendPacket(Y.Close,0,i,De);return}const m=new Ca({dispatcher:this,localId:t,remoteId:i,localCreated:!1,service:l,availableWriteBytes:a});try{await d(m.socket),u(this,ke).set(t,m),await R(this,X,os).call(this,t,i,this.options.initialDelayedAckBytes)}catch{await this.sendPacket(Y.Close,0,i,De)}},mo=async function(e){const t=u(this,ke).get(e.arg1);if(!t)throw new Error(`Unknown local socket id: ${e.arg1}`);let i=!1;const a=[(async()=>{await t.enqueue(e.payload),await R(this,X,os).call(this,e.arg1,e.arg0,e.payload.length),i=!0})()];this.options.readTimeLimit&&a.push((async()=>{if(await nl(this.options.readTimeLimit),!i)throw new Error(`readable of \`${t.service}\` has stalled for ${this.options.readTimeLimit} milliseconds`)})()),await Promise.race(a)},cs=function(){for(const e of u(this,ke).values())e.dispose();u(this,dn).resolve()};const vu=16777217,Oa=[B.ShellV2,B.Cmd,B.StatV2,B.ListV2,B.FixedPushMkdir,"apex",B.Abb,"fixed_push_symlink_timestamp",B.AbbExec,"remount_shell","track_app",B.SendReceiveV2,"sendrecv_v2_brotli","sendrecv_v2_lz4","sendrecv_v2_zstd","sendrecv_v2_dry_run_send",B.DelayedAck],Eu=32*1024*1024;var ur,Te,hr,dr,fn,fr;const Ps=class Ps{constructor({serial:e,connection:t,version:i,banner:a,features:l=Oa,initialDelayedAckBytes:d,...m}){y(this,ur);y(this,Te);y(this,hr);y(this,dr);y(this,fn);y(this,fr);if(b(this,hr,e),b(this,ur,t),b(this,fn,Zr.parse(a)),b(this,fr,l),l.includes(B.DelayedAck)){if(d<=0)throw new TypeError("`initialDelayedAckBytes` must be greater than 0 when DelayedAck feature is enabled.");u(this,fn).features.includes(B.DelayedAck)||(d=0)}else d=0;let v,h;i>=vu?(v=!1,h=!1):(v=!0,h=!0),b(this,Te,new bu(t,{calculateChecksum:v,appendNullToServiceString:h,initialDelayedAckBytes:d,...m})),b(this,dr,i)}static async authenticate({serial:e,connection:t,credentialStore:i,authenticators:a=gu,features:l=Oa,initialDelayedAckBytes:d=Eu,...m}){let v=16777217,h=1024*1024;const k=new re,C=new mu(a,i),F=new xr,oe=t.readable.pipeTo(new Re({async write(U){switch(U.command){case Y.Connect:v=Math.min(v,U.arg0),h=Math.min(h,U.arg1),k.resolve(zt(U.payload));break;case Y.Auth:{const ot=await C.process(U);await yn(ot);break}}}}),{preventCancel:!0,signal:F.signal}).then(()=>{k.reject(new Error("Connection closed unexpectedly"))},U=>{k.reject(U)}),We=t.writable.getWriter();async function yn(U){U.checksum=uo(U.payload),U.magic=U.command^4294967295,await be.WritableStream.write(We,U)}const at=l.slice();if(d<=0){const U=l.indexOf(B.DelayedAck);U!==-1&&at.splice(U,1)}let Ft;try{await yn({command:Y.Connect,arg0:v,arg1:h,payload:qe(`host::features=${at.join(",")}`)}),Ft=await k.promise}finally{F.abort(),We.releaseLock(),await oe}return new Ps({serial:e,connection:t,version:v,maxPayloadSize:h,banner:Ft,features:at,initialDelayedAckBytes:d,...m})}get connection(){return u(this,ur)}get serial(){return u(this,hr)}get protocolVersion(){return u(this,dr)}get maxPayloadSize(){return u(this,Te).options.maxPayloadSize}get banner(){return u(this,fn)}get disconnected(){return u(this,Te).disconnected}get clientFeatures(){return u(this,fr)}connect(e){return u(this,Te).createSocket(e)}addReverseTunnel(e,t){return t||(t=`localabstract:reverse_${Math.random().toString().substring(2)}`),u(this,Te).addReverseTunnel(t,e),t}removeReverseTunnel(e){u(this,Te).removeReverseTunnel(e)}clearReverseTunnels(){u(this,Te).clearReverseTunnels()}close(){return u(this,Te).close()}};ur=new WeakMap,Te=new WeakMap,hr=new WeakMap,dr=new WeakMap,fn=new WeakMap,fr=new WeakMap;let ls=Ps;const Su=[B.ShellV2,B.Cmd,B.StatV2,B.ListV2,B.FixedPushMkdir,"apex",B.Abb,"fixed_push_symlink_timestamp",B.AbbExec,"remount_shell","track_app",B.SendReceiveV2,"sendrecv_v2_brotli","sendrecv_v2_lz4","sendrecv_v2_zstd","sendrecv_v2_dry_run_send"];var Xe,pr,wr;class xu{constructor(e,t,i,a){y(this,Xe);L(this,"serial");L(this,"transportId");L(this,"maxPayloadSize",1*1024*1024);L(this,"banner");y(this,pr,new re);y(this,wr,new xr);L(this,"disconnected");b(this,Xe,e),this.serial=t,this.banner=i,this.transportId=a,this.disconnected=Promise.race([u(this,pr).promise,e.waitFor({transportId:a},"disconnect",{signal:u(this,wr).signal,unref:!0})])}get clientFeatures(){return Su}async connect(e){return await u(this,Xe).createDeviceConnection({transportId:this.transportId},e)}async addReverseTunnel(e,t){return await u(this,Xe).connector.addReverseTunnel(e,t)}async removeReverseTunnel(e){await u(this,Xe).connector.removeReverseTunnel(e)}async clearReverseTunnels(){await u(this,Xe).connector.clearReverseTunnels()}close(){u(this,pr).resolve(),u(this,wr).abort()}}Xe=new WeakMap,pr=new WeakMap,wr=new WeakMap;const Lu=qe("OKAY"),yo=qe("FAIL");var Ze,Bt,$t;class Ba{constructor(e){y(this,Ze);y(this,Bt);y(this,$t);b(this,Ze,e),b(this,Bt,new Lr(e.readable)),b(this,$t,e.writable.getWriter())}readExactly(e){return u(this,Bt).readExactly(e)}readString(){return Fe.try(()=>this.readExactly(4)).then(e=>{const t=Tn(e);return t===0?De:this.readExactly(t)}).then(e=>zt(e)).valueOrPromise()}async writeString(e){const t=qe(e),i=new Uint8Array(4+t.length);_l(i,0,t.length),i.set(t,4),await u(this,$t).write(i)}async readOkay(){const e=await this.readExactly(4);if(!Qr(e,Lu)){if(Qr(e,yo)){const t=await this.readString();throw new Error(t)}throw new Error(`Unexpected response: ${zt(e)}`)}}release(){return u(this,$t).releaseLock(),{readable:u(this,Bt).release(),writable:u(this,Ze).writable,closed:u(this,Ze).closed,close:()=>u(this,Ze).close()}}async dispose(){await u(this,Bt).cancel().catch(Zi),await u(this,$t).close().catch(Zi);try{await u(this,Ze).close()}catch{}}}Ze=new WeakMap,Bt=new WeakMap,$t=new WeakMap;const gt=class gt{constructor(e){L(this,"connector");L(this,"wireless",new gt.WirelessCommands(this));L(this,"mDns",new gt.MDnsCommands(this));this.connector=e}async createConnection(e,t){const i=await this.connector.connect(t),a=new Ba(i);try{await a.writeString(e)}catch(l){throw await a.dispose(),l}try{return await $a(()=>a.readOkay(),t==null?void 0:t.signal),a}catch(l){throw await a.dispose(),l}}async getVersion(){const e=await this.createConnection("host:version");try{const t=Tn(await e.readExactly(4));return Tn(await e.readExactly(t))}finally{await e.dispose()}}async validateVersion(){const e=await this.getVersion();if(e!==gt.VERSION)throw new Error(`adb server version (${e}) doesn't match this client (${gt.VERSION})`)}async killServer(){await(await this.createConnection("host:kill")).dispose()}async getServerFeatures(){const e=await this.createConnection("host:host-features");try{return(await e.readString()).split(",")}finally{await e.dispose()}}parseDeviceList(e){const t=[];for(const i of e.split(`
|
|
7
|
-
`)){if(!i)continue;const a=i.split(" ").filter(Boolean),l=a[0],d=a[1];if(d!=="device"&&d!=="unauthorized")continue;let m,v,h,k;for(let C=2;C<a.length;C+=1){const[F,oe]=a[C].split(":");switch(F){case"product":m=oe;break;case"model":v=oe;break;case"device":h=oe;break;case"transport_id":k=BigInt(oe);break}}if(!k)throw new Error(`No transport id for device ${l}`);t.push({serial:l,authenticating:d==="unauthorized",product:m,model:v,device:h,transportId:k})}return t}async getDevices(){const e=await this.createConnection("host:devices-l");try{const t=await e.readString();return this.parseDeviceList(t)}finally{await e.dispose()}}async*trackDevices(e){const t=await this.createConnection("host:track-devices-l");try{for(;;){const i=await $a(async()=>await t.readString(),e);yield this.parseDeviceList(i)}}catch(i){if(i===(e==null?void 0:e.reason))return}finally{await t.dispose()}}formatDeviceService(e,t){if(!e)return`host:${t}`;if("transportId"in e)return`host-transport-id:${e.transportId}:${t}`;if("serial"in e)return`host-serial:${e.serial}:${t}`;if("usb"in e)return`host-usb:${t}`;if("tcp"in e)return`host-local:${t}`;throw new TypeError("Invalid device selector")}async reconnectDevice(e){const t=await this.createConnection(e==="offline"?"host:reconnect-offline":this.formatDeviceService(e,"reconnect"));try{await t.readString()}finally{await t.dispose()}}async getDeviceFeatures(e){const t=await this.createDeviceConnection(e,"host:features"),i=new Ba(t);try{const l=(await i.readString()).split(",");return{transportId:t.transportId,features:l}}finally{await i.dispose()}}async createDeviceConnection(e,t){await this.validateVersion();let i,a;if(!e)i="host:tport:any";else if("transportId"in e)i=`host:transport-id:${e.transportId}`,a=e.transportId;else if("serial"in e)i=`host:tport:serial:${e.serial}`;else if("usb"in e)i="host:tport:usb";else if("tcp"in e)i="host:tport:local";else throw new TypeError("Invalid device selector");const l=await this.createConnection(i);try{await l.writeString(t)}catch(d){throw await l.dispose(),d}try{if(a===void 0){const m=await l.readExactly(8);a=Ac(m,0)}await l.readOkay();const d=l.release();return{transportId:a,service:t,readable:d.readable,writable:new Xi(d.writable).bePipedThroughFrom(new rt.UnwrapStream),get closed(){return d.closed},async close(){await d.close()}}}catch(d){throw await l.dispose(),d}}async waitFor(e,t,i){let a;if(!e)a="any";else if("transportId"in e)a="any";else if("serial"in e)a="any";else if("usb"in e)a="usb";else if("tcp"in e)a="local";else throw new TypeError("Invalid device selector");const l=this.formatDeviceService(e,`wait-for-${a}-${t}`),d=await this.createConnection(l,i);try{await d.readOkay()}finally{await d.dispose()}}async createTransport(e){const{transportId:t,features:i}=await this.getDeviceFeatures(e),l=(await this.getDevices()).find(m=>m.transportId===t),d=new Zr(l==null?void 0:l.product,l==null?void 0:l.model,l==null?void 0:l.device,i);return new xu(this,(l==null?void 0:l.serial)??"",d,t)}};L(gt,"VERSION",41);let ti=gt;async function $a(n,...e){const t=new re;function i(){t.reject(this.reason)}try{for(const a of e)if(a){if(a.aborted)throw a.reason;a.addEventListener("abort",i)}return await Promise.race([n(),t.promise])}finally{for(const a of e)a&&a.removeEventListener("abort",i)}}(function(n){var d,m;class e extends Error{constructor(h){super(h),this.name="NetworkError"}}n.NetworkError=e;class t extends Error{constructor(h){super(h),this.name="UnauthorizedError"}}n.UnauthorizedError=t;class i extends Error{constructor(h){super(h),this.name="AlreadyConnectedError"}}n.AlreadyConnectedError=i;class a{constructor(h){y(this,d);b(this,d,h)}async pair(h,k){const C=await u(this,d).createConnection(`host:pair:${k}:${h}`);try{const F=await C.readExactly(4);if(Qr(F,yo))throw new Error(await C.readString());const oe=Tn(F);await C.readExactly(oe)}finally{await C.dispose()}}async connect(h){const k=await u(this,d).createConnection(`host:connect:${h}`);try{const C=await k.readString();switch(C){case`already connected to ${h}`:throw new n.AlreadyConnectedError(C);case`failed to connect to ${h}`:case`failed to authenticate to ${h}`:throw new n.UnauthorizedError(C);case`connected to ${h}`:return;default:throw new n.NetworkError(C)}}finally{await k.dispose()}}async disconnect(h){const k=await u(this,d).createConnection(`host:disconnect:${h}`);try{await k.readString()}finally{await k.dispose()}}}d=new WeakMap,n.WirelessCommands=a;class l{constructor(h){y(this,m);b(this,m,h)}async check(){const h=await u(this,m).createConnection("host:mdns:check");try{return!(await h.readString()).startsWith("ERROR:")}finally{await h.dispose()}}async getServices(){const h=await u(this,m).createConnection("host:mdns:services");try{return(await h.readString()).split(`
|
|
8
|
-
`).filter(Boolean).map(C=>{const F=C.split(" ");return{name:F[0],service:F[1],address:F[2]}})}finally{await h.dispose()}}}m=new WeakMap,n.MDnsCommands=l})(ti||(ti={}));function bo(n,e){return typeof n=="object"&&n!==null&&"name"in n&&n.name===e}function _u(n,e){return e.some(t=>n.interfaceClass===t.classCode&&n.interfaceSubclass===t.subclassCode&&n.interfaceProtocol===t.protocolCode)}function vo(n,e){for(const t of n.configurations)for(const i of t.interfaces)for(const a of i.alternates)if(_u(a,e))return{configuration:t,interface_:i,alternate:a};throw new TypeError("No matched alternate interface found")}function Aa(n){return n.toString(16).padStart(4,"0")}function Eo(n){return n.serialNumber?n.serialNumber:Aa(n.vendorId)+"x"+Aa(n.productId)}const us={classCode:255,subclassCode:66,protocolCode:1};function ku(n){if(n.length===0)throw new TypeError("No endpoints given");let e,t;for(const i of n)switch(i.direction){case"in":if(e=i,t)return{inEndpoint:e,outEndpoint:t};break;case"out":if(t=i,e)return{inEndpoint:e,outEndpoint:t};break}throw e?t?new Error("unreachable"):new TypeError("No output endpoint found."):new TypeError("No input endpoint found.")}var gr,et;class Tu{constructor(e){y(this,gr);y(this,et);b(this,gr,e),b(this,et,0)}get position(){return u(this,et)}readExactly(e){const t=u(this,gr).subarray(u(this,et),u(this,et)+e);return b(this,et,u(this,et)+e),t}}gr=new WeakMap,et=new WeakMap;var At,tt,mr,yr,br,hi,So;class Iu{constructor(e,t,i,a){y(this,hi);y(this,At);y(this,tt);y(this,mr);y(this,yr);y(this,br);b(this,At,e),b(this,tt,t),b(this,mr,i);let l=!1;const d=new ul({close:async()=>{try{l=!0,await e.raw.close()}catch{}},dispose:()=>{l=!0,a.removeEventListener("disconnect",m)}});function m(h){h.device===e.raw&&d.dispose().catch(to)}a.addEventListener("disconnect",m),b(this,yr,d.wrapReadable(new Ut({pull:async h=>{const k=await R(this,hi,So).call(this);k?h.enqueue(k):h.close()}},{highWaterMark:0})));const v=i.packetSize-1;b(this,br,dl(d.createWritable(new rt.WritableStream({write:async h=>{try{await e.raw.transferOut(i.endpointNumber,h),v&&(h.length&v)===0&&await e.raw.transferOut(i.endpointNumber,De)}catch(k){if(l)return;throw k}}})),new fu))}get device(){return u(this,At)}get inEndpoint(){return u(this,tt)}get outEndpoint(){return u(this,mr)}get readable(){return u(this,yr)}get writable(){return u(this,br)}}At=new WeakMap,tt=new WeakMap,mr=new WeakMap,yr=new WeakMap,br=new WeakMap,hi=new WeakSet,So=async function(){try{for(;;){const e=await u(this,At).raw.transferIn(u(this,tt).endpointNumber,u(this,tt).packetSize);if(e.data.byteLength!==24)continue;const t=new Uint8Array(e.data.buffer),i=new Tu(t),a=ei.deserialize(i);if(a.magic===(a.command^4294967295)){if(a.payloadLength!==0){const l=await u(this,At).raw.transferIn(u(this,tt).endpointNumber,a.payloadLength);a.payload=new Uint8Array(l.data.buffer)}else a.payload=De;return a}}}catch(e){if(bo(e,"NetworkError")){if(await new Promise(t=>{setTimeout(()=>{t()},100)}),closed)return;throw e}throw e}};var vr,Er,le,Sr,di,xo;class Ma{constructor(e,t=[us],i){y(this,di);y(this,vr);y(this,Er);y(this,le);y(this,Sr);b(this,le,e),b(this,Sr,Eo(e)),b(this,vr,t),b(this,Er,i)}get raw(){return u(this,le)}get serial(){return u(this,Sr)}get name(){return u(this,le).productName}async connect(){const[e,t]=await R(this,di,xo).call(this);return new Iu(this,e,t,u(this,Er))}}vr=new WeakMap,Er=new WeakMap,le=new WeakMap,Sr=new WeakMap,di=new WeakSet,xo=async function(){var d;u(this,le).opened||await u(this,le).open();const{configuration:e,interface_:t,alternate:i}=vo(u(this,le),u(this,vr));((d=u(this,le).configuration)==null?void 0:d.configurationValue)!==e.configurationValue&&await u(this,le).selectConfiguration(e.configurationValue),t.claimed||await u(this,le).claimInterface(t.interfaceNumber),t.alternate.alternateSetting!==i.alternateSetting&&await u(this,le).selectAlternateInterface(t.interfaceNumber,i.alternateSetting);const{inEndpoint:a,outEndpoint:l}=ku(i.endpoints);return[a,l]};var nt;const fi=class fi{constructor(e){y(this,nt);b(this,nt,e)}async requestDevice(e={}){if(!e.filters)e.filters=[us];else if(e.filters.length===0)throw new TypeError("filters must not be empty");try{const t=await u(this,nt).requestDevice(e);return new Ma(t,e.filters,u(this,nt))}catch(t){if(bo(t,"NotFoundError"))return;throw t}}async getDevices(e=[us]){if(e.length===0)throw new TypeError("filters must not be empty");return(await u(this,nt).getDevices()).filter(i=>{for(const a of e)if(!("vendorId"in a&&i.vendorId!==a.vendorId)&&!("productId"in a&&i.productId!==a.productId)&&!("serialNumber"in a&&Eo(i)!==a.serialNumber))try{return vo(i,e),!0}catch{continue}return!1}).map(i=>new Ma(i,e,u(this,nt)))}};nt=new WeakMap,L(fi,"BROWSER",typeof globalThis.navigator<"u"&&globalThis.navigator.usb?new fi(globalThis.navigator.usb):void 0);let hs=fi;function Lo(){return new Promise((n,e)=>{const t=indexedDB.open("Tango",1);t.onerror=()=>{e(t.error)},t.onupgradeneeded=()=>{t.result.createObjectStore("Authentication",{autoIncrement:!0})},t.onsuccess=()=>{const i=t.result;n(i)}})}async function Nu(n){const e=await Lo();return new Promise((t,i)=>{const a=e.transaction("Authentication","readwrite"),d=a.objectStore("Authentication").add(n);d.onerror=()=>{i(d.error)},d.onsuccess=()=>{t()},a.onerror=()=>{i(a.error)},a.oncomplete=()=>{e.close()}})}async function Du(){const n=await Lo();return new Promise((e,t)=>{const i=n.transaction("Authentication","readonly"),l=i.objectStore("Authentication").getAll();l.onerror=()=>{t(l.error)},l.onsuccess=()=>{e(l.result)},i.onerror=()=>{t(i.error)},i.oncomplete=()=>{n.close()}})}var pn;class Pu{constructor(e="Tango"){y(this,pn);b(this,pn,e)}async generateKey(){const{privateKey:e}=await crypto.subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:2048,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-1"},!0,["sign","verify"]),t=new Uint8Array(await crypto.subtle.exportKey("pkcs8",e));return await Nu(t),{buffer:t,name:`${u(this,pn)}@${globalThis.location.hostname}`}}async*iterateKeys(){for(const e of await Du())yield{buffer:e,name:`${u(this,pn)}@${globalThis.location.hostname}`}}}pn=new WeakMap;const Ht=hs.BROWSER,qu=new Pu;class Ru{constructor(){this.adb=null,this.device=null,this.packageName="",this.dbName="",this.dbPath="",this.sqlite3Path="",this.mode="webusb",this.bridgeUrl="",this.bridgeSerial=""}async connectBridge(e=15555){const t=[];(location.hostname==="127.0.0.1"||location.hostname==="localhost")&&t.push(location.origin),t.push(`http://127.0.0.1:${e}`);const a=new Set;for(const l of t)if(!a.has(l)){a.add(l);try{if((await(await fetch(`${l}/api/ping`,{signal:AbortSignal.timeout(2e3)})).json()).ok)return this.mode="bridge",this.bridgeUrl=l,!0}catch{}}return!1}async _bridgeShell(e){const t=await fetch(`${this.bridgeUrl}/api/shell`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:e,serial:this.bridgeSerial||void 0})}),i=await t.json();if(!t.ok)throw new Error(i.error||"Bridge shell command failed");return(i.output||"").replace(/\r\n/g,`
|
|
9
|
-
`).trimEnd()}async _bridgeGetDevices(){const e=await fetch(`${this.bridgeUrl}/api/devices`),t=await e.json();if(!e.ok)throw new Error(t.error||"Bridge devices request failed");return t.devices||[]}async requestDevice(){if(!Ht)throw new Error("WebUSB is not supported in this browser. Use Chrome or Edge.");const e=await Ht.requestDevice();if(!e)throw new Error("No device selected.");return await this._connectDevice(e),this.getDeviceInfo()}async getDevices(){return this.mode==="bridge"?this._bridgeGetDevices():Ht?(await Ht.getDevices()).map(t=>({serial:t.serial,name:t.name,display_name:`${t.name||t.serial} (${t.serial})`})):[]}async connectBySerial(e){if(this.mode==="bridge")return this.bridgeSerial=e,this.getDeviceInfo();if(!Ht)throw new Error("WebUSB not supported.");const i=(await Ht.getDevices()).find(a=>a.serial===e);if(!i)throw new Error(`Device ${e} not found.`);return await this._connectDevice(i),this.getDeviceInfo()}async _connectDevice(e){var a;await this.disconnect();let t;try{t=await e.connect()}catch(l){throw(a=l==null?void 0:l.message)!=null&&a.includes("claimInterface")?new Error("Cannot claim USB device — another program (likely ADB) is using it. Run 'adb kill-server' in your terminal, then retry."):l}const i=await ls.authenticate({serial:e.serial,connection:t,credentialStore:qu});this.adb=new eu(i),this.device=e}async disconnect(){if(this.mode==="bridge"){this.bridgeSerial="",this.bridgeUrl="",this.mode="webusb";return}if(this.adb){try{await this.adb.close()}catch{}this.adb=null,this.device=null}}checkConnection(){const e=this.mode==="bridge"?!!this.bridgeUrl:!!this.adb;return{connected:e,device:e?this.getDeviceInfo():null,package:this.packageName,database:this.dbName}}getDeviceInfo(){return this.mode==="bridge"?this.bridgeSerial?{serial:this.bridgeSerial,name:this.bridgeSerial,display_name:`${this.bridgeSerial} (ADB Bridge)`}:null:this.device?{serial:this.device.serial,name:this.device.name,display_name:`${this.device.name||this.device.serial} (${this.device.serial})`}:null}setPackage(e){this.packageName=e,this.dbName="",this.dbPath="",this.sqlite3Path=""}setDatabase(e,t){this.dbName=e,this.dbPath=t||""}async shell(e){if(this.mode==="bridge")return this._bridgeShell(e);if(!this.adb)throw new Error("Not connected to a device.");const t=await this.adb.subprocess.spawnAndWaitLegacy(e);let i;return typeof t=="string"?i=t:t instanceof Uint8Array?i=new TextDecoder().decode(t):(t==null?void 0:t.stdout)!==void 0?i=typeof t.stdout=="string"?t.stdout:new TextDecoder().decode(t.stdout):i=String(t),i.replace(/\r\n/g,`
|
|
10
|
-
`).trimEnd()}async runAs(e){return this.shell(`run-as ${this.packageName} ${e}`)}async getPackages(){let i=(await this.shell('for p in $(pm list packages --user 0 -3 2>/dev/null | tr -d "\\r" | sed "s/package://"); do run-as $p id 2>/dev/null 1>/dev/null && echo $p; done')).split(`
|
|
11
|
-
`).map(a=>a.trim()).filter(Boolean);return i.length===0&&(i=(await this.shell('pm list packages -3 2>/dev/null | tr -d "\\r" | sed "s/package://"')).split(`
|
|
12
|
-
`).map(l=>l.trim()).filter(Boolean)),i.sort(),i}async getDatabases(e){const t=e||this.packageName;if(!t)throw new Error("No package selected.");const i=["databases","files","files/SQLite"],a=[],l=new Set;for(const d of i)try{const m=await this.shell(`run-as ${t} ls ${d} 2>/dev/null`);for(const v of m.split(`
|
|
13
|
-
`)){const h=v.trim();h&&(h.endsWith(".db")||h.endsWith(".sqlite")||h.endsWith(".sqlite3"))&&(l.has(h)||(l.add(h),a.push({name:h,path:`${d}/${h}`})))}}catch{}return a}async searchDatabases(e,t){const i=e||this.packageName;if(!i)throw new Error("No package selected.");const a=await this.shell(`run-as ${i} find . -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" 2>/dev/null`),l=(t||"").toLowerCase(),d=[];for(const m of a.split(`
|
|
14
|
-
`)){let v=m.trim();if(!v)continue;v.startsWith("./")&&(v=v.slice(2));const h=v.split("/").pop();h.endsWith("-journal")||h.endsWith("-wal")||h.endsWith("-shm")||(!l||h.toLowerCase().includes(l)||v.toLowerCase().includes(l))&&d.push({name:h,path:v})}return d.sort((m,v)=>m.name.toLowerCase().localeCompare(v.name.toLowerCase())),d}async ensureSqlite3(){if(this.sqlite3Path)return this.sqlite3Path;try{const t=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(t.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}const e=["/system/bin/sqlite3","/system/xbin/sqlite3","/data/local/tmp/sqlite3"];for(const t of e)try{const i=await this.shell(`${t} -version 2>&1`);if(/^3\.\d+/.test(i.trim())){try{await this.runAs(`cp ${t} ./sqlite3`),await this.runAs("chmod 755 ./sqlite3");const a=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(a.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}return this.sqlite3Path=t,this.sqlite3Path}}catch{}if(this.mode==="bridge"&&this.bridgeUrl)try{const t=await fetch(`${this.bridgeUrl}/api/push-sqlite3`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:this.bridgeSerial||void 0})}),i=await t.json();if(t.ok&&i.ok){try{await this.runAs("cp /data/local/tmp/sqlite3 ./sqlite3"),await this.runAs("chmod 755 ./sqlite3");const a=await this.runAs("./sqlite3 -version");if(/^3\.\d+/.test(a.trim()))return this.sqlite3Path="./sqlite3",this.sqlite3Path}catch{}return this.sqlite3Path="/data/local/tmp/sqlite3",this.sqlite3Path}}catch{}throw new Error("sqlite3 not found on device. Ensure a sqlite3 binary is available at /system/bin/sqlite3 or /data/local/tmp/sqlite3.")}async findDatabasePath(){if(this.dbPath)return this.dbPath;const e=[`databases/${this.dbName}`,`files/${this.dbName}`,`files/SQLite/${this.dbName}`];for(const t of e)try{if((await this.runAs(`ls ${t}`)).includes(this.dbName))return this.dbPath=t,t}catch{}throw new Error(`Database ${this.dbName} not found on device.`)}async _sqliteJson(e){const t=await this.ensureSqlite3(),i=await this.findDatabasePath(),a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} -json "${a}"`,d=await this.runAs(l);if(!d)return[];try{const m=JSON.parse(d);return Array.isArray(m)?m:[]}catch{return this._sqliteFallback(e,t,i)}}async _sqliteFallback(e,t,i){const a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} -header -separator "|" "${a}"`,m=(await this.runAs(l)).split(`
|
|
15
|
-
`).filter(Boolean);if(m.length===0)return[];const v=m[0].split("|").map(k=>k.trim()),h=[];for(let k=1;k<m.length;k++){const C=m[k].split("|").map(F=>F.trim());if(C.length===v.length){const F={};v.forEach((oe,We)=>F[oe]=C[We]),h.push(F)}}return h}async _sqliteExec(e){const t=await this.ensureSqlite3(),i=await this.findDatabasePath(),a=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\$/g,"\\$").replace(/`/g,"\\`"),l=`${t} ${i} "${a}"`;await this.runAs(l)}_isWriteQuery(e){const t=e.trim().toUpperCase();return["INSERT","UPDATE","DELETE","DROP","CREATE","ALTER","REPLACE"].some(i=>t.startsWith(i))}async getTables(){return(await this._sqliteJson("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;")).map(t=>({name:t.name,row_count:0}))}async getTableStructure(e){return this._sqliteJson(`PRAGMA table_info(${e});`)}async getTableData(e,t=100,i=0){const a=await this.getTableStructure(e);if(!a.length)throw new Error(`Table ${e} not found`);const l=await this._sqliteJson(`SELECT * FROM ${e} LIMIT ${t} OFFSET ${i};`),d=await this._sqliteJson(`SELECT COUNT(*) as count FROM ${e};`),m=d.length?Number(d[0].count):0;return{columns:a.map(v=>v.name),rows:l,row_count:l.length,total_count:m,offset:i,limit:t}}async executeQuery(e,t){const i=e.trim();if(this._isWriteQuery(i))return await this._sqliteExec(i),{columns:[],rows:[],row_count:0};let a=i;t&&!i.toUpperCase().includes("LIMIT")&&i.toUpperCase().startsWith("SELECT")&&(a=`${i.replace(/;$/,"")} LIMIT ${t};`);const l=await this._sqliteJson(a);return{columns:l.length?Object.keys(l[0]):[],rows:l,row_count:l.length}}async checkDatabaseExists(){try{return await this.findDatabasePath(),!0}catch{return!1}}}function Cu(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Fi={exports:{}},za;function Ou(){return za||(za=1,(function(n,e){var t=void 0,i=function(a){return t||(t=new Promise(function(l,d){var fa,pa;var m=typeof a<"u"?a:{},v=m.onAbort;m.onAbort=function(r){d(new Error(r)),v&&v(r)},m.postRun=m.postRun||[],m.postRun.push(function(){l(m)}),n=void 0;var h;h||(h=typeof m<"u"?m:{});var k=!!globalThis.window,C=!!globalThis.WorkerGlobalScope;h.onRuntimeInitialized=function(){function r(p,S){switch(typeof S){case"boolean":Sc(p,S?1:0);break;case"number":bc(p,S);break;case"string":vc(p,S,-1,-1);break;case"object":if(S===null)va(p);else if(S.length!=null){var _=Ar(S.length);Q.set(S,_),Ec(p,_,S.length,-1),kn(_)}else Fr(p,"Wrong API use : tried to return a value of an unknown type ("+S+").",-1);break;default:va(p)}}function s(p,S){for(var _=[],T=0;T<p;T+=1){var q=Ce(S+4*T,"i32"),O=pc(q);if(O===1||O===2)q=yc(q);else if(O===3)q=gc(q);else if(O===4){O=q,q=wc(O),O=mc(O);for(var Ee=new Uint8Array(q),fe=0;fe<q;fe+=1)Ee[fe]=Q[O+fe];q=Ee}else q=null;_.push(q)}return _}function o(p,S){this.Qa=p,this.db=S,this.Oa=1,this.yb=[]}function c(p,S){if(this.db=S,this.ob=$r(p),this.ob===null)throw Error("Unable to allocate memory for the SQL string");this.ub=this.ob,this.gb=this.Fb=null}function f(p){if(this.filename="dbfile_"+(4294967295*Math.random()>>>0),p!=null){var S=this.filename,_="/",T=S;if(_&&(_=typeof _=="string"?_:Li(_),T=S?Ei(_+"/"+S):_),S=Vs(!0,!0),T=Wo(T,S),p){if(typeof p=="string"){_=Array(p.length);for(var q=0,O=p.length;q<O;++q)_[q]=p.charCodeAt(q);p=_}Rr(T,S|146),_=Qt(T,577),sa(_,p,0,p.length,0),Di(_),Rr(T,S)}}this.handleError(I(this.filename,g)),this.db=Ce(g,"i32"),Sa(this.db),this.pb={},this.Sa={}}var g=dt(4),E=h.cwrap,I=E("sqlite3_open","number",["string","number"]),$=E("sqlite3_close_v2","number",["number"]),P=E("sqlite3_exec","number",["number","string","number","number","number"]),z=E("sqlite3_changes","number",["number"]),G=E("sqlite3_prepare_v2","number",["number","string","number","number","number"]),wa=E("sqlite3_sql","string",["number"]),Jo=E("sqlite3_normalized_sql","string",["number"]),ga=E("sqlite3_prepare_v2","number",["number","number","number","number","number"]),Xo=E("sqlite3_bind_text","number",["number","number","number","number","number"]),ma=E("sqlite3_bind_blob","number",["number","number","number","number","number"]),Zo=E("sqlite3_bind_double","number",["number","number","number"]),ec=E("sqlite3_bind_int","number",["number","number","number"]),tc=E("sqlite3_bind_parameter_index","number",["number","string"]),nc=E("sqlite3_step","number",["number"]),rc=E("sqlite3_errmsg","string",["number"]),ic=E("sqlite3_column_count","number",["number"]),sc=E("sqlite3_data_count","number",["number"]),ac=E("sqlite3_column_double","number",["number","number"]),ya=E("sqlite3_column_text","string",["number","number"]),oc=E("sqlite3_column_blob","number",["number","number"]),cc=E("sqlite3_column_bytes","number",["number","number"]),lc=E("sqlite3_column_type","number",["number","number"]),uc=E("sqlite3_column_name","string",["number","number"]),hc=E("sqlite3_reset","number",["number"]),dc=E("sqlite3_clear_bindings","number",["number"]),fc=E("sqlite3_finalize","number",["number"]),ba=E("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")),pc=E("sqlite3_value_type","number",["number"]),wc=E("sqlite3_value_bytes","number",["number"]),gc=E("sqlite3_value_text","string",["number"]),mc=E("sqlite3_value_blob","number",["number"]),yc=E("sqlite3_value_double","number",["number"]),bc=E("sqlite3_result_double","",["number","number"]),va=E("sqlite3_result_null","",["number"]),vc=E("sqlite3_result_text","",["number","string","number","number"]),Ec=E("sqlite3_result_blob","",["number","number","number","number"]),Sc=E("sqlite3_result_int","",["number","number"]),Fr=E("sqlite3_result_error","",["number","string","number"]),Ea=E("sqlite3_aggregate_context","number",["number","number"]),Sa=E("RegisterExtensionFunctions","number",["number"]),xa=E("sqlite3_update_hook","number",["number","number","number"]);o.prototype.bind=function(p){if(!this.Qa)throw"Statement closed";return this.reset(),Array.isArray(p)?this.Wb(p):p!=null&&typeof p=="object"?this.Xb(p):!0},o.prototype.step=function(){if(!this.Qa)throw"Statement closed";this.Oa=1;var p=nc(this.Qa);switch(p){case 100:return!0;case 101:return!1;default:throw this.db.handleError(p)}},o.prototype.Pb=function(p){return p==null&&(p=this.Oa,this.Oa+=1),ac(this.Qa,p)},o.prototype.hc=function(p){if(p==null&&(p=this.Oa,this.Oa+=1),p=ya(this.Qa,p),typeof BigInt!="function")throw Error("BigInt is not supported");return BigInt(p)},o.prototype.mc=function(p){return p==null&&(p=this.Oa,this.Oa+=1),ya(this.Qa,p)},o.prototype.getBlob=function(p){p==null&&(p=this.Oa,this.Oa+=1);var S=cc(this.Qa,p);p=oc(this.Qa,p);for(var _=new Uint8Array(S),T=0;T<S;T+=1)_[T]=Q[p+T];return _},o.prototype.get=function(p,S){S=S||{},p!=null&&this.bind(p)&&this.step(),p=[];for(var _=sc(this.Qa),T=0;T<_;T+=1)switch(lc(this.Qa,T)){case 1:var q=S.useBigInt?this.hc(T):this.Pb(T);p.push(q);break;case 2:p.push(this.Pb(T));break;case 3:p.push(this.mc(T));break;case 4:p.push(this.getBlob(T));break;default:p.push(null)}return p},o.prototype.Db=function(){for(var p=[],S=ic(this.Qa),_=0;_<S;_+=1)p.push(uc(this.Qa,_));return p},o.prototype.Ob=function(p,S){p=this.get(p,S),S=this.Db();for(var _={},T=0;T<S.length;T+=1)_[S[T]]=p[T];return _},o.prototype.lc=function(){return wa(this.Qa)},o.prototype.ic=function(){return Jo(this.Qa)},o.prototype.Jb=function(p){return p!=null&&this.bind(p),this.step(),this.reset()},o.prototype.Lb=function(p,S){S==null&&(S=this.Oa,this.Oa+=1),p=$r(p),this.yb.push(p),this.db.handleError(Xo(this.Qa,S,p,-1,0))},o.prototype.Vb=function(p,S){S==null&&(S=this.Oa,this.Oa+=1);var _=Ar(p.length);Q.set(p,_),this.yb.push(_),this.db.handleError(ma(this.Qa,S,_,p.length,0))},o.prototype.Kb=function(p,S){S==null&&(S=this.Oa,this.Oa+=1),this.db.handleError((p===(p|0)?ec:Zo)(this.Qa,S,p))},o.prototype.Yb=function(p){p==null&&(p=this.Oa,this.Oa+=1),ma(this.Qa,p,0,0,0)},o.prototype.Mb=function(p,S){switch(S==null&&(S=this.Oa,this.Oa+=1),typeof p){case"string":this.Lb(p,S);return;case"number":this.Kb(p,S);return;case"bigint":this.Lb(p.toString(),S);return;case"boolean":this.Kb(p+0,S);return;case"object":if(p===null){this.Yb(S);return}if(p.length!=null){this.Vb(p,S);return}}throw"Wrong API use : tried to bind a value of an unknown type ("+p+")."},o.prototype.Xb=function(p){var S=this;return Object.keys(p).forEach(function(_){var T=tc(S.Qa,_);T!==0&&S.Mb(p[_],T)}),!0},o.prototype.Wb=function(p){for(var S=0;S<p.length;S+=1)this.Mb(p[S],S+1);return!0},o.prototype.reset=function(){return this.Cb(),dc(this.Qa)===0&&hc(this.Qa)===0},o.prototype.Cb=function(){for(var p;(p=this.yb.pop())!==void 0;)kn(p)},o.prototype.cb=function(){this.Cb();var p=fc(this.Qa)===0;return delete this.db.pb[this.Qa],this.Qa=0,p},c.prototype.next=function(){if(this.ob===null)return{done:!0};if(this.gb!==null&&(this.gb.cb(),this.gb=null),!this.db.db)throw this.Ab(),Error("Database closed");var p=zr(),S=dt(4);Sn(g),Sn(S);try{this.db.handleError(ga(this.db.db,this.ub,-1,g,S)),this.ub=Ce(S,"i32");var _=Ce(g,"i32");return _===0?(this.Ab(),{done:!0}):(this.gb=new o(_,this.db),this.db.pb[_]=this.gb,{value:this.gb,done:!1})}catch(T){throw this.Fb=j(this.ub),this.Ab(),T}finally{Mr(p)}},c.prototype.Ab=function(){kn(this.ob),this.ob=null},c.prototype.jc=function(){return this.Fb!==null?this.Fb:j(this.ub)},typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"&&(c.prototype[Symbol.iterator]=function(){return this}),f.prototype.Jb=function(p,S){if(!this.db)throw"Database closed";if(S){p=this.Gb(p,S);try{p.step()}finally{p.cb()}}else this.handleError(P(this.db,p,0,0,g));return this},f.prototype.exec=function(p,S,_){if(!this.db)throw"Database closed";var T=null,q=null,O=null;try{O=q=$r(p);var Ee=dt(4);for(p=[];Ce(O,"i8")!==0;){Sn(g),Sn(Ee),this.handleError(ga(this.db,O,-1,g,Ee));var fe=Ce(g,"i32");if(O=Ce(Ee,"i32"),fe!==0){var ce=null;for(T=new o(fe,this),S!=null&&T.bind(S);T.step();)ce===null&&(ce={columns:T.Db(),values:[]},p.push(ce)),ce.values.push(T.get(null,_));T.cb()}}return p}catch(Se){throw T&&T.cb(),Se}finally{q&&kn(q)}},f.prototype.ec=function(p,S,_,T,q){typeof S=="function"&&(T=_,_=S,S=void 0),p=this.Gb(p,S);try{for(;p.step();)_(p.Ob(null,q))}finally{p.cb()}if(typeof T=="function")return T()},f.prototype.Gb=function(p,S){if(Sn(g),this.handleError(G(this.db,p,-1,g,0)),p=Ce(g,"i32"),p===0)throw"Nothing to prepare";var _=new o(p,this);return S!=null&&_.bind(S),this.pb[p]=_},f.prototype.pc=function(p){return new c(p,this)},f.prototype.fc=function(){Object.values(this.pb).forEach(function(S){S.cb()}),Object.values(this.Sa).forEach(Qe),this.Sa={},this.handleError($(this.db));var p=Vo(this.filename);return this.handleError(I(this.filename,g)),this.db=Ce(g,"i32"),Sa(this.db),p},f.prototype.close=function(){this.db!==null&&(Object.values(this.pb).forEach(function(p){p.cb()}),Object.values(this.Sa).forEach(Qe),this.Sa={},this.fb&&(Qe(this.fb),this.fb=void 0),this.handleError($(this.db)),ea("/"+this.filename),this.db=null)},f.prototype.handleError=function(p){if(p===0)return null;throw p=rc(this.db),Error(p)},f.prototype.kc=function(){return z(this.db)},f.prototype.bc=function(p,S){Object.prototype.hasOwnProperty.call(this.Sa,p)&&(Qe(this.Sa[p]),delete this.Sa[p]);var _=_n(function(T,q,O){q=s(q,O);try{var Ee=S.apply(null,q)}catch(fe){Fr(T,fe,-1);return}r(T,Ee)},"viii");return this.Sa[p]=_,this.handleError(ba(this.db,p,S.length,1,0,_,0,0,0)),this},f.prototype.ac=function(p,S){var _=S.init||function(){return null},T=S.finalize||function(ce){return ce},q=S.step;if(!q)throw"An aggregate function must have a step function in "+p;var O={};Object.hasOwnProperty.call(this.Sa,p)&&(Qe(this.Sa[p]),delete this.Sa[p]),S=p+"__finalize",Object.hasOwnProperty.call(this.Sa,S)&&(Qe(this.Sa[S]),delete this.Sa[S]);var Ee=_n(function(ce,Se,$i){var ft=Ea(ce,1);Object.hasOwnProperty.call(O,ft)||(O[ft]=_()),Se=s(Se,$i),Se=[O[ft]].concat(Se);try{O[ft]=q.apply(null,Se)}catch(xc){delete O[ft],Fr(ce,xc,-1)}},"viii"),fe=_n(function(ce){var Se=Ea(ce,1);try{var $i=T(O[Se])}catch(ft){delete O[Se],Fr(ce,ft,-1);return}r(ce,$i),delete O[Se]},"vi");return this.Sa[p]=Ee,this.Sa[S]=fe,this.handleError(ba(this.db,p,q.length-1,1,0,0,Ee,fe,0)),this},f.prototype.vc=function(p){return this.fb&&(xa(this.db,0,0),Qe(this.fb),this.fb=void 0),p?(this.fb=_n(function(S,_,T,q,O){switch(_){case 18:S="insert";break;case 23:S="update";break;case 9:S="delete";break;default:throw"unknown operationCode in updateHook callback: "+_}if(T=j(T),q=j(q),O>Number.MAX_SAFE_INTEGER)throw"rowId too big to fit inside a Number";p(S,T,q,Number(O))},"viiiij"),xa(this.db,this.fb,0),this):this},o.prototype.bind=o.prototype.bind,o.prototype.step=o.prototype.step,o.prototype.get=o.prototype.get,o.prototype.getColumnNames=o.prototype.Db,o.prototype.getAsObject=o.prototype.Ob,o.prototype.getSQL=o.prototype.lc,o.prototype.getNormalizedSQL=o.prototype.ic,o.prototype.run=o.prototype.Jb,o.prototype.reset=o.prototype.reset,o.prototype.freemem=o.prototype.Cb,o.prototype.free=o.prototype.cb,c.prototype.next=c.prototype.next,c.prototype.getRemainingSQL=c.prototype.jc,f.prototype.run=f.prototype.Jb,f.prototype.exec=f.prototype.exec,f.prototype.each=f.prototype.ec,f.prototype.prepare=f.prototype.Gb,f.prototype.iterateStatements=f.prototype.pc,f.prototype.export=f.prototype.fc,f.prototype.close=f.prototype.close,f.prototype.handleError=f.prototype.handleError,f.prototype.getRowsModified=f.prototype.kc,f.prototype.create_function=f.prototype.bc,f.prototype.create_aggregate=f.prototype.ac,f.prototype.updateHook=f.prototype.vc,h.Database=f};var F="./this.program",oe=(pa=(fa=globalThis.document)==null?void 0:fa.currentScript)==null?void 0:pa.src;C&&(oe=self.location.href);var We="",yn,at;if(k||C){try{We=new URL(".",oe).href}catch{}C&&(at=r=>{var s=new XMLHttpRequest;return s.open("GET",r,!1),s.responseType="arraybuffer",s.send(null),new Uint8Array(s.response)}),yn=async r=>{if(r=await fetch(r,{credentials:"same-origin"}),r.ok)return r.arrayBuffer();throw Error(r.status+" : "+r.url)}}var Ft=console.log.bind(console),U=console.error.bind(console),ot,kr=!1,mi,Q,Z,bn,W,A,yi,bi,ve;function qs(){var r=Ur.buffer;Q=new Int8Array(r),bn=new Int16Array(r),Z=new Uint8Array(r),W=new Int32Array(r),A=new Uint32Array(r),yi=new Float32Array(r),bi=new Float64Array(r),ve=new BigInt64Array(r),new BigUint64Array(r)}function vn(r){var s;throw(s=h.onAbort)==null||s.call(h,r),r="Aborted("+r+")",U(r),kr=!0,new WebAssembly.RuntimeError(r+". Build with -sASSERTIONS for more info.")}var vi;async function No(r){if(!ot)try{var s=await yn(r);return new Uint8Array(s)}catch{}if(r==vi&&ot)r=new Uint8Array(ot);else if(at)r=at(r);else throw"both async and sync fetching of the wasm failed";return r}async function Do(r,s){try{var o=await No(r);return await WebAssembly.instantiate(o,s)}catch(c){U(`failed to asynchronously prepare wasm: ${c}`),vn(c)}}async function Po(r){var s=vi;if(!ot)try{var o=fetch(s,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(o,r)}catch(c){U(`wasm streaming compile failed: ${c}`),U("falling back to ArrayBuffer instantiation")}return Do(s,r)}class Rs{constructor(s){L(this,"name","ExitStatus");this.message=`Program terminated with exit(${s})`,this.status=s}}var Cs=r=>{for(;0<r.length;)r.shift()(h)},Os=[],Bs=[],qo=()=>{var r=h.preRun.shift();Bs.push(r)},ct=0,En=null;function Ce(r,s="i8"){switch(s.endsWith("*")&&(s="*"),s){case"i1":return Q[r];case"i8":return Q[r];case"i16":return bn[r>>1];case"i32":return W[r>>2];case"i64":return ve[r>>3];case"float":return yi[r>>2];case"double":return bi[r>>3];case"*":return A[r>>2];default:vn(`invalid type for getValue: ${s}`)}}var Tr=!0;function Sn(r){var s="i32";switch(s.endsWith("*")&&(s="*"),s){case"i1":Q[r]=0;break;case"i8":Q[r]=0;break;case"i16":bn[r>>1]=0;break;case"i32":W[r>>2]=0;break;case"i64":ve[r>>3]=BigInt(0);break;case"float":yi[r>>2]=0;break;case"double":bi[r>>3]=0;break;case"*":A[r>>2]=0;break;default:vn(`invalid type for setValue: ${s}`)}}var $s=new TextDecoder,As=(r,s,o,c)=>{if(o=s+o,c)return o;for(;r[s]&&!(s>=o);)++s;return s},j=(r,s,o)=>r?$s.decode(Z.subarray(r,As(Z,r,s,o))):"",Ms=(r,s)=>{for(var o=0,c=r.length-1;0<=c;c--){var f=r[c];f==="."?r.splice(c,1):f===".."?(r.splice(c,1),o++):o&&(r.splice(c,1),o--)}if(s)for(;o;o--)r.unshift("..");return r},Ei=r=>{var s=r.charAt(0)==="/",o=r.slice(-1)==="/";return(r=Ms(r.split("/").filter(c=>!!c),!s).join("/"))||s||(r="."),r&&o&&(r+="/"),(s?"/":"")+r},zs=r=>{var s=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(r).slice(1);return r=s[0],s=s[1],!r&&!s?".":(s&&(s=s.slice(0,-1)),r+s)},Ir=r=>r&&r.match(/([^\/]+|\/)\/*$/)[1],Ro=()=>r=>crypto.getRandomValues(r),Us=r=>{(Us=Ro())(r)},Co=(...r)=>{for(var s="",o=!1,c=r.length-1;-1<=c&&!o;c--){if(o=0<=c?r[c]:"/",typeof o!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!o)return"";s=o+"/"+s,o=o.charAt(0)==="/"}return s=Ms(s.split("/").filter(f=>!!f),!o).join("/"),(o?"/":"")+s||"."},Nr=r=>{var s=As(r,0);return $s.decode(r.buffer?r.subarray(0,s):new Uint8Array(r.slice(0,s)))},Si=[],Wt=r=>{for(var s=0,o=0;o<r.length;++o){var c=r.charCodeAt(o);127>=c?s++:2047>=c?s+=2:55296<=c&&57343>=c?(s+=4,++o):s+=3}return s},Ie=(r,s,o,c)=>{if(!(0<c))return 0;var f=o;c=o+c-1;for(var g=0;g<r.length;++g){var E=r.codePointAt(g);if(127>=E){if(o>=c)break;s[o++]=E}else if(2047>=E){if(o+1>=c)break;s[o++]=192|E>>6,s[o++]=128|E&63}else if(65535>=E){if(o+2>=c)break;s[o++]=224|E>>12,s[o++]=128|E>>6&63,s[o++]=128|E&63}else{if(o+3>=c)break;s[o++]=240|E>>18,s[o++]=128|E>>12&63,s[o++]=128|E>>6&63,s[o++]=128|E&63,g++}}return s[o]=0,o-f},Fs=[];function Ws(r,s){Fs[r]={input:[],output:[],kb:s},Ii(r,Oo)}var Oo={open(r){var s=Fs[r.node.nb];if(!s)throw new x(43);r.Va=s,r.seekable=!1},close(r){r.Va.kb.lb(r.Va)},lb(r){r.Va.kb.lb(r.Va)},read(r,s,o,c){if(!r.Va||!r.Va.kb.Qb)throw new x(60);for(var f=0,g=0;g<c;g++){try{var E=r.Va.kb.Qb(r.Va)}catch{throw new x(29)}if(E===void 0&&f===0)throw new x(6);if(E==null)break;f++,s[o+g]=E}return f&&(r.node.$a=Date.now()),f},write(r,s,o,c){if(!r.Va||!r.Va.kb.Hb)throw new x(60);try{for(var f=0;f<c;f++)r.Va.kb.Hb(r.Va,s[o+f])}catch{throw new x(29)}return c&&(r.node.Ua=r.node.Ta=Date.now()),f}},Bo={Qb(){var o;e:{if(!Si.length){var r=null;if((o=globalThis.window)!=null&&o.prompt&&(r=window.prompt("Input: "),r!==null&&(r+=`
|
|
16
|
-
`)),!r){var s=null;break e}s=Array(Wt(r)+1),r=Ie(r,s,0,s.length),s.length=r,Si=s}s=Si.shift()}return s},Hb(r,s){s===null||s===10?(Ft(Nr(r.output)),r.output=[]):s!=0&&r.output.push(s)},lb(r){var s;0<((s=r.output)==null?void 0:s.length)&&(Ft(Nr(r.output)),r.output=[])},Dc(){return{yc:25856,Ac:5,xc:191,zc:35387,wc:[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]}},Ec(){return 0},Fc(){return[24,80]}},$o={Hb(r,s){s===null||s===10?(U(Nr(r.output)),r.output=[]):s!=0&&r.output.push(s)},lb(r){var s;0<((s=r.output)==null?void 0:s.length)&&(U(Nr(r.output)),r.output=[])}},N={Za:null,ab(){return N.createNode(null,"/",16895,0)},createNode(r,s,o,c){if((o&61440)===24576||(o&61440)===4096)throw new x(63);return N.Za||(N.Za={dir:{node:{Wa:N.La.Wa,Xa:N.La.Xa,mb:N.La.mb,rb:N.La.rb,Tb:N.La.Tb,xb:N.La.xb,vb:N.La.vb,Ib:N.La.Ib,wb:N.La.wb},stream:{Ya:N.Ma.Ya}},file:{node:{Wa:N.La.Wa,Xa:N.La.Xa},stream:{Ya:N.Ma.Ya,read:N.Ma.read,write:N.Ma.write,sb:N.Ma.sb,tb:N.Ma.tb}},link:{node:{Wa:N.La.Wa,Xa:N.La.Xa,eb:N.La.eb},stream:{}},Nb:{node:{Wa:N.La.Wa,Xa:N.La.Xa},stream:Fo}}),o=Ks(r,s,o,c),ie(o.mode)?(o.La=N.Za.dir.node,o.Ma=N.Za.dir.stream,o.Na={}):(o.mode&61440)===32768?(o.La=N.Za.file.node,o.Ma=N.Za.file.stream,o.Ra=0,o.Na=null):(o.mode&61440)===40960?(o.La=N.Za.link.node,o.Ma=N.Za.link.stream):(o.mode&61440)===8192&&(o.La=N.Za.Nb.node,o.Ma=N.Za.Nb.stream),o.$a=o.Ua=o.Ta=Date.now(),r&&(r.Na[s]=o,r.$a=r.Ua=r.Ta=o.$a),o},Cc(r){return r.Na?r.Na.subarray?r.Na.subarray(0,r.Ra):new Uint8Array(r.Na):new Uint8Array(0)},La:{Wa(r){var s={};return s.cc=(r.mode&61440)===8192?r.id:1,s.oc=r.id,s.mode=r.mode,s.rc=1,s.uid=0,s.nc=0,s.nb=r.nb,ie(r.mode)?s.size=4096:(r.mode&61440)===32768?s.size=r.Ra:(r.mode&61440)===40960?s.size=r.link.length:s.size=0,s.$a=new Date(r.$a),s.Ua=new Date(r.Ua),s.Ta=new Date(r.Ta),s.Zb=4096,s.$b=Math.ceil(s.size/s.Zb),s},Xa(r,s){for(var o of["mode","atime","mtime","ctime"])s[o]!=null&&(r[o]=s[o]);s.size!==void 0&&(s=s.size,r.Ra!=s&&(s==0?(r.Na=null,r.Ra=0):(o=r.Na,r.Na=new Uint8Array(s),o&&r.Na.set(o.subarray(0,Math.min(s,r.Ra))),r.Ra=s)))},mb(){throw N.zb||(N.zb=new x(44),N.zb.stack="<generic error, no stack>"),N.zb},rb(r,s,o,c){return N.createNode(r,s,o,c)},Tb(r,s,o){try{var c=lt(s,o)}catch{}if(c){if(ie(r.mode))for(var f in c.Na)throw new x(55);ki(c)}delete r.parent.Na[r.name],s.Na[o]=r,r.name=o,s.Ta=s.Ua=r.parent.Ta=r.parent.Ua=Date.now()},xb(r,s){delete r.Na[s],r.Ta=r.Ua=Date.now()},vb(r,s){var o=lt(r,s),c;for(c in o.Na)throw new x(55);delete r.Na[s],r.Ta=r.Ua=Date.now()},Ib(r){return[".","..",...Object.keys(r.Na)]},wb(r,s,o){return r=N.createNode(r,s,41471,0),r.link=o,r},eb(r){if((r.mode&61440)!==40960)throw new x(28);return r.link}},Ma:{read(r,s,o,c,f){var g=r.node.Na;if(f>=r.node.Ra)return 0;if(r=Math.min(r.node.Ra-f,c),8<r&&g.subarray)s.set(g.subarray(f,f+r),o);else for(c=0;c<r;c++)s[o+c]=g[f+c];return r},write(r,s,o,c,f,g){if(s.buffer===Q.buffer&&(g=!1),!c)return 0;if(r=r.node,r.Ua=r.Ta=Date.now(),s.subarray&&(!r.Na||r.Na.subarray)){if(g)return r.Na=s.subarray(o,o+c),r.Ra=c;if(r.Ra===0&&f===0)return r.Na=s.slice(o,o+c),r.Ra=c;if(f+c<=r.Ra)return r.Na.set(s.subarray(o,o+c),f),c}g=f+c;var E=r.Na?r.Na.length:0;if(E>=g||(g=Math.max(g,E*(1048576>E?2:1.125)>>>0),E!=0&&(g=Math.max(g,256)),E=r.Na,r.Na=new Uint8Array(g),0<r.Ra&&r.Na.set(E.subarray(0,r.Ra),0)),r.Na.subarray&&s.subarray)r.Na.set(s.subarray(o,o+c),f);else for(g=0;g<c;g++)r.Na[f+g]=s[o+g];return r.Ra=Math.max(r.Ra,f+c),c},Ya(r,s,o){if(o===1?s+=r.position:o===2&&(r.node.mode&61440)===32768&&(s+=r.node.Ra),0>s)throw new x(28);return s},sb(r,s,o,c,f){if((r.node.mode&61440)!==32768)throw new x(43);if(r=r.node.Na,f&2||!r||r.buffer!==Q.buffer){f=!0,c=65536*Math.ceil(s/65536);var g=ha(65536,c);if(g&&Z.fill(0,g,g+c),c=g,!c)throw new x(48);r&&((0<o||o+s<r.length)&&(r.subarray?r=r.subarray(o,o+s):r=Array.prototype.slice.call(r,o,o+s)),Q.set(r,c))}else f=!1,c=r.byteOffset;return{tc:c,Ub:f}},tb(r,s,o,c){return N.Ma.write(r,s,0,c,o,!1),0}}},Vs=(r,s)=>{var o=0;return r&&(o|=365),s&&(o|=146),o},xi=null,js={},Vt=[],Ao=1,Ve=null,Qs=!1,Hs=!0,x=class{constructor(r){L(this,"name","ErrnoError");this.Pa=r}},Mo=class{constructor(){L(this,"qb",{});L(this,"node",null)}get flags(){return this.qb.flags}set flags(r){this.qb.flags=r}get position(){return this.qb.position}set position(r){this.qb.position=r}},zo=class{constructor(r,s,o,c){L(this,"La",{});L(this,"Ma",{});L(this,"ib",null);r||(r=this),this.parent=r,this.ab=r.ab,this.id=Ao++,this.name=s,this.mode=o,this.nb=c,this.$a=this.Ua=this.Ta=Date.now()}get read(){return(this.mode&365)===365}set read(r){r?this.mode|=365:this.mode&=-366}get write(){return(this.mode&146)===146}set write(r){r?this.mode|=146:this.mode&=-147}};function de(r,s={}){if(!r)throw new x(44);s.Bb??(s.Bb=!0),r.charAt(0)==="/"||(r="//"+r);var o=0;e:for(;40>o;o++){r=r.split("/").filter(I=>!!I);for(var c=xi,f="/",g=0;g<r.length;g++){var E=g===r.length-1;if(E&&s.parent)break;if(r[g]!==".")if(r[g]==="..")if(f=zs(f),c===c.parent){r=f+"/"+r.slice(g+1).join("/"),o--;continue e}else c=c.parent;else{f=Ei(f+"/"+r[g]);try{c=lt(c,r[g])}catch(I){if((I==null?void 0:I.Pa)===44&&E&&s.sc)return{path:f};throw I}if(!c.ib||E&&!s.Bb||(c=c.ib.root),(c.mode&61440)===40960&&(!E||s.hb)){if(!c.La.eb)throw new x(52);c=c.La.eb(c),c.charAt(0)==="/"||(c=zs(f)+"/"+c),r=c+"/"+r.slice(g+1).join("/");continue e}}}return{path:f,node:c}}throw new x(32)}function Li(r){for(var s;;){if(r===r.parent)return r=r.ab.Sb,s?r[r.length-1]!=="/"?`${r}/${s}`:r+s:r;s=s?`${r.name}/${s}`:r.name,r=r.parent}}function _i(r,s){for(var o=0,c=0;c<s.length;c++)o=(o<<5)-o+s.charCodeAt(c)|0;return(r+o>>>0)%Ve.length}function ki(r){var s=_i(r.parent.id,r.name);if(Ve[s]===r)Ve[s]=r.jb;else for(s=Ve[s];s;){if(s.jb===r){s.jb=r.jb;break}s=s.jb}}function lt(r,s){var o=ie(r.mode)?(o=jt(r,"x"))?o:r.La.mb?0:2:54;if(o)throw new x(o);for(o=Ve[_i(r.id,s)];o;o=o.jb){var c=o.name;if(o.parent.id===r.id&&c===s)return o}return r.La.mb(r,s)}function Ks(r,s,o,c){return r=new zo(r,s,o,c),s=_i(r.parent.id,r.name),r.jb=Ve[s],Ve[s]=r}function ie(r){return(r&61440)===16384}function jt(r,s){return Hs?0:s.includes("r")&&!(r.mode&292)||s.includes("w")&&!(r.mode&146)||s.includes("x")&&!(r.mode&73)?2:0}function Ys(r,s){if(!ie(r.mode))return 54;try{return lt(r,s),20}catch{}return jt(r,"wx")}function Gs(r,s,o){try{var c=lt(r,s)}catch(f){return f.Pa}if(r=jt(r,"wx"))return r;if(o){if(!ie(c.mode))return 54;if(c===c.parent||Li(c)==="/")return 10}else if(ie(c.mode))return 31;return 0}function Dr(r){if(!r)throw new x(63);return r}function ee(r){if(r=Vt[r],!r)throw new x(8);return r}function Js(r,s=-1){if(r=Object.assign(new Mo,r),s==-1)e:{for(s=0;4096>=s;s++)if(!Vt[s])break e;throw new x(33)}return r.bb=s,Vt[s]=r}function Uo(r,s=-1){var o,c;return r=Js(r,s),(c=(o=r.Ma)==null?void 0:o.Bc)==null||c.call(o,r),r}function Ti(r,s,o){var c=r==null?void 0:r.Ma.Xa;r=c?r:s,c??(c=s.La.Xa),Dr(c),c(r,o)}var Fo={open(r){var s,o;r.Ma=js[r.node.nb].Ma,(o=(s=r.Ma).open)==null||o.call(s,r)},Ya(){throw new x(70)}};function Ii(r,s){js[r]={Ma:s}}function Xs(r,s){var o=s==="/";if(o&&xi)throw new x(10);if(!o&&s){var c=de(s,{Bb:!1});if(s=c.path,c=c.node,c.ib)throw new x(10);if(!ie(c.mode))throw new x(54)}s={type:r,Gc:{},Sb:s,qc:[]},r=r.ab(s),r.ab=s,s.root=r,o?xi=r:c&&(c.ib=s,c.ab&&c.ab.qc.push(s))}function Pr(r,s,o){var c=de(r,{parent:!0}).node;if(r=Ir(r),!r)throw new x(28);if(r==="."||r==="..")throw new x(20);var f=Ys(c,r);if(f)throw new x(f);if(!c.La.rb)throw new x(63);return c.La.rb(c,r,s,o)}function Wo(r,s=438){return Pr(r,s&4095|32768,0)}function Ne(r,s=511){return Pr(r,s&1023|16384,0)}function qr(r,s,o){typeof o>"u"&&(o=s,s=438),Pr(r,s|8192,o)}function Ni(r,s){if(!Co(r))throw new x(44);var o=de(s,{parent:!0}).node;if(!o)throw new x(44);s=Ir(s);var c=Ys(o,s);if(c)throw new x(c);if(!o.La.wb)throw new x(63);o.La.wb(o,s,r)}function Zs(r){var s=de(r,{parent:!0}).node;r=Ir(r);var o=lt(s,r),c=Gs(s,r,!0);if(c)throw new x(c);if(!s.La.vb)throw new x(63);if(o.ib)throw new x(10);s.La.vb(s,r),ki(o)}function ea(r){var s=de(r,{parent:!0}).node;if(!s)throw new x(44);r=Ir(r);var o=lt(s,r),c=Gs(s,r,!1);if(c)throw new x(c);if(!s.La.xb)throw new x(63);if(o.ib)throw new x(10);s.La.xb(s,r),ki(o)}function xn(r,s){return r=de(r,{hb:!s}).node,Dr(r.La.Wa)(r)}function ta(r,s,o,c){Ti(r,s,{mode:o&4095|s.mode&-4096,Ta:Date.now(),dc:c})}function Rr(r,s){r=typeof r=="string"?de(r,{hb:!0}).node:r,ta(null,r,s)}function na(r,s,o){if(ie(s.mode))throw new x(31);if((s.mode&61440)!==32768)throw new x(28);var c=jt(s,"w");if(c)throw new x(c);Ti(r,s,{size:o,timestamp:Date.now()})}function Qt(r,s,o=438){if(r==="")throw new x(44);if(typeof s=="string"){var c={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[s];if(typeof c>"u")throw Error(`Unknown file open mode: ${s}`);s=c}if(o=s&64?o&4095|32768:0,typeof r=="object")c=r;else{var f=r.endsWith("/"),g=de(r,{hb:!(s&131072),sc:!0});c=g.node,r=g.path}if(g=!1,s&64)if(c){if(s&128)throw new x(20)}else{if(f)throw new x(31);c=Pr(r,o|511,0),g=!0}if(!c)throw new x(44);if((c.mode&61440)===8192&&(s&=-513),s&65536&&!ie(c.mode))throw new x(54);if(!g&&(c?(c.mode&61440)===40960?f=32:(f=["r","w","rw"][s&3],s&512&&(f+="w"),f=ie(c.mode)&&(f!=="r"||s&576)?31:jt(c,f)):f=44,f))throw new x(f);return s&512&&!g&&(f=c,f=typeof f=="string"?de(f,{hb:!0}).node:f,na(null,f,0)),s=Js({node:c,path:Li(c),flags:s&-131713,seekable:!0,position:0,Ma:c.Ma,uc:[],error:!1}),s.Ma.open&&s.Ma.open(s),g&&Rr(c,o&511),s}function Di(r){if(r.bb===null)throw new x(8);r.Eb&&(r.Eb=null);try{r.Ma.close&&r.Ma.close(r)}catch(s){throw s}finally{Vt[r.bb]=null}r.bb=null}function ra(r,s,o){if(r.bb===null)throw new x(8);if(!r.seekable||!r.Ma.Ya)throw new x(70);if(o!=0&&o!=1&&o!=2)throw new x(28);r.position=r.Ma.Ya(r,s,o),r.uc=[]}function ia(r,s,o,c,f){if(0>c||0>f)throw new x(28);if(r.bb===null)throw new x(8);if((r.flags&2097155)===1)throw new x(8);if(ie(r.node.mode))throw new x(31);if(!r.Ma.read)throw new x(28);var g=typeof f<"u";if(!g)f=r.position;else if(!r.seekable)throw new x(70);return s=r.Ma.read(r,s,o,c,f),g||(r.position+=s),s}function sa(r,s,o,c,f){if(0>c||0>f)throw new x(28);if(r.bb===null)throw new x(8);if((r.flags&2097155)===0)throw new x(8);if(ie(r.node.mode))throw new x(31);if(!r.Ma.write)throw new x(28);r.seekable&&r.flags&1024&&ra(r,0,2);var g=typeof f<"u";if(!g)f=r.position;else if(!r.seekable)throw new x(70);return s=r.Ma.write(r,s,o,c,f,void 0),g||(r.position+=s),s}function Vo(r){var s=s||0;s=Qt(r,s),r=xn(r).size;var o=new Uint8Array(r);return ia(s,o,0,r,0),Di(s),o}function je(r,s,o){r=Ei("/dev/"+r);var c=Vs(!!s,!!o);je.Rb??(je.Rb=64);var f=je.Rb++<<8|0;Ii(f,{open(g){g.seekable=!1},close(){var g;(g=o==null?void 0:o.buffer)!=null&&g.length&&o(10)},read(g,E,I,$){for(var P=0,z=0;z<$;z++){try{var G=s()}catch{throw new x(29)}if(G===void 0&&P===0)throw new x(6);if(G==null)break;P++,E[I+z]=G}return P&&(g.node.$a=Date.now()),P},write(g,E,I,$){for(var P=0;P<$;P++)try{o(E[I+P])}catch{throw new x(29)}return $&&(g.node.Ua=g.node.Ta=Date.now()),P}}),qr(r,c,f)}var M={};function ut(r,s,o){if(s.charAt(0)==="/")return s;if(r=r===-100?"/":ee(r).path,s.length==0){if(!o)throw new x(44);return r}return r+"/"+s}function Cr(r,s){A[r>>2]=s.cc,A[r+4>>2]=s.mode,A[r+8>>2]=s.rc,A[r+12>>2]=s.uid,A[r+16>>2]=s.nc,A[r+20>>2]=s.nb,ve[r+24>>3]=BigInt(s.size),W[r+32>>2]=4096,W[r+36>>2]=s.$b;var o=s.$a.getTime(),c=s.Ua.getTime(),f=s.Ta.getTime();return ve[r+40>>3]=BigInt(Math.floor(o/1e3)),A[r+48>>2]=o%1e3*1e6,ve[r+56>>3]=BigInt(Math.floor(c/1e3)),A[r+64>>2]=c%1e3*1e6,ve[r+72>>3]=BigInt(Math.floor(f/1e3)),A[r+80>>2]=f%1e3*1e6,ve[r+88>>3]=BigInt(s.oc),0}var Or=void 0,Br=()=>{var r=W[+Or>>2];return Or+=4,r},Pi=0,jo=[0,31,60,91,121,152,182,213,244,274,305,335],Qo=[0,31,59,90,120,151,181,212,243,273,304,334],Ln={},aa=r=>{if(!(r instanceof Rs||r=="unwind"))throw r},oa=r=>{var s;throw mi=r,Tr||0<Pi||((s=h.onExit)==null||s.call(h,r),kr=!0),new Rs(r)},Ho=r=>{if(!kr)try{r()}catch(s){aa(s)}finally{if(!(Tr||0<Pi))try{mi=r=mi,oa(r)}catch(s){aa(s)}}},qi={},ca=()=>{var c;if(!Ri){var r={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(((c=globalThis.navigator)==null?void 0:c.language)??"C").replace("-","_")+".UTF-8",_:F||"./this.program"},s;for(s in qi)qi[s]===void 0?delete r[s]:r[s]=qi[s];var o=[];for(s in r)o.push(`${s}=${r[s]}`);Ri=o}return Ri},Ri,Ko=(r,s,o,c)=>{var f={string:P=>{var z=0;if(P!=null&&P!==0){z=Wt(P)+1;var G=dt(z);Ie(P,Z,G,z),z=G}return z},array:P=>{var z=dt(P.length);return Q.set(P,z),z}};r=h["_"+r];var g=[],E=0;if(c)for(var I=0;I<c.length;I++){var $=f[o[I]];$?(E===0&&(E=zr()),g[I]=$(c[I])):g[I]=c[I]}return o=r(...g),o=(function(P){return E!==0&&Mr(E),s==="string"?j(P):s==="boolean"?!!P:P})(o)},$r=r=>{var s=Wt(r)+1,o=Ar(s);return o&&Ie(r,Z,o,s),o},ht,Ci=[],Qe=r=>{ht.delete(He.get(r)),He.set(r,null),Ci.push(r)},la=r=>{const s=r.length;return[s%128|128,s>>7,...r]},Yo={i:127,p:127,j:126,f:125,d:124,e:111},ua=r=>la(Array.from(r,s=>Yo[s])),_n=(r,s)=>{if(!ht){ht=new WeakMap;var o=He.length;if(ht)for(var c=0;c<0+o;c++){var f=He.get(c);f&&ht.set(f,c)}}if(o=ht.get(r)||0)return o;o=Ci.length?Ci.pop():He.grow(1);try{He.set(o,r)}catch(g){if(!(g instanceof TypeError))throw g;s=Uint8Array.of(0,97,115,109,1,0,0,0,1,...la([1,96,...ua(s.slice(1)),...ua(s[0]==="v"?"":s[0])]),2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0),s=new WebAssembly.Module(s),s=new WebAssembly.Instance(s,{e:{f:r}}).exports.f,He.set(o,s)}return ht.set(r,o),o};if(Ve=Array(4096),Xs(N,"/"),Ne("/tmp"),Ne("/home"),Ne("/home/web_user"),(function(){Ne("/dev"),Ii(259,{read:()=>0,write:(c,f,g,E)=>E,Ya:()=>0}),qr("/dev/null",259),Ws(1280,Bo),Ws(1536,$o),qr("/dev/tty",1280),qr("/dev/tty1",1536);var r=new Uint8Array(1024),s=0,o=()=>(s===0&&(Us(r),s=r.byteLength),r[--s]);je("random",o),je("urandom",o),Ne("/dev/shm"),Ne("/dev/shm/tmp")})(),(function(){Ne("/proc");var r=Ne("/proc/self");Ne("/proc/self/fd"),Xs({ab(){var s=Ks(r,"fd",16895,73);return s.Ma={Ya:N.Ma.Ya},s.La={mb(o,c){o=+c;var f=ee(o);return o={parent:null,ab:{Sb:"fake"},La:{eb:()=>f.path},id:o+1},o.parent=o},Ib(){return Array.from(Vt.entries()).filter(([,o])=>o).map(([o])=>o.toString())}},s}},"/proc/self/fd")})(),h.noExitRuntime&&(Tr=h.noExitRuntime),h.print&&(Ft=h.print),h.printErr&&(U=h.printErr),h.wasmBinary&&(ot=h.wasmBinary),h.thisProgram&&(F=h.thisProgram),h.preInit)for(typeof h.preInit=="function"&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.shift()();h.stackSave=()=>zr(),h.stackRestore=r=>Mr(r),h.stackAlloc=r=>dt(r),h.cwrap=(r,s,o,c)=>{var f=!o||o.every(g=>g==="number"||g==="boolean");return s!=="string"&&f&&!c?h["_"+r]:(...g)=>Ko(r,s,o,g)},h.addFunction=_n,h.removeFunction=Qe,h.UTF8ToString=j,h.stringToNewUTF8=$r,h.writeArrayToMemory=(r,s)=>{Q.set(r,s)};var Ar,kn,ha,da,Mr,dt,zr,Ur,He,Go={a:(r,s,o,c)=>vn(`Assertion failed: ${j(r)}, at: `+[s?j(s):"unknown filename",o,c?j(c):"unknown function"]),i:function(r,s){try{return r=j(r),Rr(r,s),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},L:function(r,s,o){try{if(s=j(s),s=ut(r,s),o&-8)return-28;var c=de(s,{hb:!0}).node;return c?(r="",o&4&&(r+="r"),o&2&&(r+="w"),o&1&&(r+="x"),r&&jt(c,r)?-2:0):-44}catch(f){if(typeof M>"u"||f.name!=="ErrnoError")throw f;return-f.Pa}},j:function(r,s){try{var o=ee(r);return ta(o,o.node,s,!1),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},h:function(r){try{var s=ee(r);return Ti(s,s.node,{timestamp:Date.now(),dc:!1}),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},b:function(r,s,o){Or=o;try{var c=ee(r);switch(s){case 0:var f=Br();if(0>f)break;for(;Vt[f];)f++;return Uo(c,f).bb;case 1:case 2:return 0;case 3:return c.flags;case 4:return f=Br(),c.flags|=f,0;case 12:return f=Br(),bn[f+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},g:function(r,s){try{var o=ee(r),c=o.node,f=o.Ma.Wa;r=f?o:c,f??(f=c.La.Wa),Dr(f);var g=f(r);return Cr(s,g)}catch(E){if(typeof M>"u"||E.name!=="ErrnoError")throw E;return-E.Pa}},H:function(r,s){s=-9007199254740992>s||9007199254740992<s?NaN:Number(s);try{if(isNaN(s))return-61;var o=ee(r);if(0>s||(o.flags&2097155)===0)throw new x(28);return na(o,o.node,s),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},G:function(r,s){try{if(s===0)return-28;var o=Wt("/")+1;return s<o?-68:(Ie("/",Z,r,s),o)}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},K:function(r,s){try{return r=j(r),Cr(s,xn(r,!0))}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},C:function(r,s,o){try{return s=j(s),s=ut(r,s),Ne(s,o),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},J:function(r,s,o,c){try{s=j(s);var f=c&256;return s=ut(r,s,c&4096),Cr(o,f?xn(s,!0):xn(s))}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},x:function(r,s,o,c){Or=c;try{s=j(s),s=ut(r,s);var f=c?Br():0;return Qt(s,o,f).bb}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return-g.Pa}},v:function(r,s,o,c){try{if(s=j(s),s=ut(r,s),0>=c)return-28;var f=de(s).node;if(!f)throw new x(44);if(!f.La.eb)throw new x(28);var g=f.La.eb(f),E=Math.min(c,Wt(g)),I=Q[o+E];return Ie(g,Z,o,c+1),Q[o+E]=I,E}catch($){if(typeof M>"u"||$.name!=="ErrnoError")throw $;return-$.Pa}},u:function(r){try{return r=j(r),Zs(r),0}catch(s){if(typeof M>"u"||s.name!=="ErrnoError")throw s;return-s.Pa}},f:function(r,s){try{return r=j(r),Cr(s,xn(r))}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return-o.Pa}},r:function(r,s,o){try{if(s=j(s),s=ut(r,s),o)if(o===512)Zs(s);else return-28;else ea(s);return 0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return-c.Pa}},q:function(r,s,o){try{s=j(s),s=ut(r,s,!0);var c=Date.now(),f,g;if(o){var E=A[o>>2]+4294967296*W[o+4>>2],I=W[o+8>>2];I==1073741823?f=c:I==1073741822?f=null:f=1e3*E+I/1e6,o+=16,E=A[o>>2]+4294967296*W[o+4>>2],I=W[o+8>>2],I==1073741823?g=c:I==1073741822?g=null:g=1e3*E+I/1e6}else g=f=c;if((g??f)!==null){r=f;var $=de(s,{hb:!0}).node;Dr($.La.Xa)($,{$a:r,Ua:g})}return 0}catch(P){if(typeof M>"u"||P.name!=="ErrnoError")throw P;return-P.Pa}},m:()=>vn(""),l:()=>{Tr=!1,Pi=0},A:function(r,s){r=-9007199254740992>r||9007199254740992<r?NaN:Number(r),r=new Date(1e3*r),W[s>>2]=r.getSeconds(),W[s+4>>2]=r.getMinutes(),W[s+8>>2]=r.getHours(),W[s+12>>2]=r.getDate(),W[s+16>>2]=r.getMonth(),W[s+20>>2]=r.getFullYear()-1900,W[s+24>>2]=r.getDay();var o=r.getFullYear();W[s+28>>2]=(o%4!==0||o%100===0&&o%400!==0?Qo:jo)[r.getMonth()]+r.getDate()-1|0,W[s+36>>2]=-(60*r.getTimezoneOffset()),o=new Date(r.getFullYear(),6,1).getTimezoneOffset();var c=new Date(r.getFullYear(),0,1).getTimezoneOffset();W[s+32>>2]=(o!=c&&r.getTimezoneOffset()==Math.min(c,o))|0},y:function(r,s,o,c,f,g,E){f=-9007199254740992>f||9007199254740992<f?NaN:Number(f);try{var I=ee(c);if((s&2)!==0&&(o&2)===0&&(I.flags&2097155)!==2)throw new x(2);if((I.flags&2097155)===1)throw new x(2);if(!I.Ma.sb)throw new x(43);if(!r)throw new x(28);var $=I.Ma.sb(I,r,f,s,o),P=$.tc;return W[g>>2]=$.Ub,A[E>>2]=P,0}catch(z){if(typeof M>"u"||z.name!=="ErrnoError")throw z;return-z.Pa}},z:function(r,s,o,c,f,g){g=-9007199254740992>g||9007199254740992<g?NaN:Number(g);try{var E=ee(f);if(o&2){if((E.node.mode&61440)!==32768)throw new x(43);c&2||E.Ma.tb&&E.Ma.tb(E,Z.slice(r,r+s),g,s,c)}}catch(I){if(typeof M>"u"||I.name!=="ErrnoError")throw I;return-I.Pa}},n:(r,s)=>{if(Ln[r]&&(clearTimeout(Ln[r].id),delete Ln[r]),!s)return 0;var o=setTimeout(()=>{delete Ln[r],Ho(()=>da(r,performance.now()))},s);return Ln[r]={id:o,Hc:s},0},B:(r,s,o,c)=>{var f=new Date().getFullYear(),g=new Date(f,0,1).getTimezoneOffset();f=new Date(f,6,1).getTimezoneOffset(),A[r>>2]=60*Math.max(g,f),W[s>>2]=+(g!=f),s=E=>{var I=Math.abs(E);return`UTC${0<=E?"-":"+"}${String(Math.floor(I/60)).padStart(2,"0")}${String(I%60).padStart(2,"0")}`},r=s(g),s=s(f),f<g?(Ie(r,Z,o,17),Ie(s,Z,c,17)):(Ie(r,Z,c,17),Ie(s,Z,o,17))},d:()=>Date.now(),s:()=>2147483648,c:()=>performance.now(),o:r=>{var s=Z.length;if(r>>>=0,2147483648<r)return!1;for(var o=1;4>=o;o*=2){var c=s*(1+.2/o);c=Math.min(c,r+100663296);e:{c=(Math.min(2147483648,65536*Math.ceil(Math.max(r,c)/65536))-Ur.buffer.byteLength+65535)/65536|0;try{Ur.grow(c),qs();var f=1;break e}catch{}f=void 0}if(f)return!0}return!1},E:(r,s)=>{var o=0,c=0,f;for(f of ca()){var g=s+o;A[r+c>>2]=g,o+=Ie(f,Z,g,1/0)+1,c+=4}return 0},F:(r,s)=>{var o=ca();A[r>>2]=o.length,r=0;for(var c of o)r+=Wt(c)+1;return A[s>>2]=r,0},e:function(r){try{var s=ee(r);return Di(s),0}catch(o){if(typeof M>"u"||o.name!=="ErrnoError")throw o;return o.Pa}},p:function(r,s){try{var o=ee(r);return Q[s]=o.Va?2:ie(o.mode)?3:(o.mode&61440)===40960?7:4,bn[s+2>>1]=0,ve[s+8>>3]=BigInt(0),ve[s+16>>3]=BigInt(0),0}catch(c){if(typeof M>"u"||c.name!=="ErrnoError")throw c;return c.Pa}},w:function(r,s,o,c){try{e:{var f=ee(r);r=s;for(var g,E=s=0;E<o;E++){var I=A[r>>2],$=A[r+4>>2];r+=8;var P=ia(f,Q,I,$,g);if(0>P){var z=-1;break e}if(s+=P,P<$)break;typeof g<"u"&&(g+=P)}z=s}return A[c>>2]=z,0}catch(G){if(typeof M>"u"||G.name!=="ErrnoError")throw G;return G.Pa}},D:function(r,s,o,c){s=-9007199254740992>s||9007199254740992<s?NaN:Number(s);try{if(isNaN(s))return 61;var f=ee(r);return ra(f,s,o),ve[c>>3]=BigInt(f.position),f.Eb&&s===0&&o===0&&(f.Eb=null),0}catch(g){if(typeof M>"u"||g.name!=="ErrnoError")throw g;return g.Pa}},I:function(r){var o,c;try{var s=ee(r);return(c=(o=s.Ma)==null?void 0:o.lb)==null?void 0:c.call(o,s)}catch(f){if(typeof M>"u"||f.name!=="ErrnoError")throw f;return f.Pa}},t:function(r,s,o,c){try{e:{var f=ee(r);r=s;for(var g,E=s=0;E<o;E++){var I=A[r>>2],$=A[r+4>>2];r+=8;var P=sa(f,Q,I,$,g);if(0>P){var z=-1;break e}if(s+=P,P<$)break;typeof g<"u"&&(g+=P)}z=s}return A[c>>2]=z,0}catch(G){if(typeof M>"u"||G.name!=="ErrnoError")throw G;return G.Pa}},k:oa};function Oi(){function r(){var f;if(h.calledRun=!0,!kr){if(!h.noFSInit&&!Qs){var s,o;Qs=!0,s??(s=h.stdin),o??(o=h.stdout),c??(c=h.stderr),s?je("stdin",s):Ni("/dev/tty","/dev/stdin"),o?je("stdout",null,o):Ni("/dev/tty","/dev/stdout"),c?je("stderr",null,c):Ni("/dev/tty1","/dev/stderr"),Qt("/dev/stdin",0),Qt("/dev/stdout",1),Qt("/dev/stderr",1)}if(Bi.N(),Hs=!1,(f=h.onRuntimeInitialized)==null||f.call(h),h.postRun)for(typeof h.postRun=="function"&&(h.postRun=[h.postRun]);h.postRun.length;){var c=h.postRun.shift();Os.push(c)}Cs(Os)}}if(0<ct)En=Oi;else{if(h.preRun)for(typeof h.preRun=="function"&&(h.preRun=[h.preRun]);h.preRun.length;)qo();Cs(Bs),0<ct?En=Oi:h.setStatus?(h.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>h.setStatus(""),1),r()},1)):r()}}var Bi;return(async function(){var o;function r(c){var f;return c=Bi=c.exports,h._sqlite3_free=c.P,h._sqlite3_value_text=c.Q,h._sqlite3_prepare_v2=c.R,h._sqlite3_step=c.S,h._sqlite3_reset=c.T,h._sqlite3_exec=c.U,h._sqlite3_finalize=c.V,h._sqlite3_column_name=c.W,h._sqlite3_column_text=c.X,h._sqlite3_column_type=c.Y,h._sqlite3_errmsg=c.Z,h._sqlite3_clear_bindings=c._,h._sqlite3_value_blob=c.$,h._sqlite3_value_bytes=c.aa,h._sqlite3_value_double=c.ba,h._sqlite3_value_int=c.ca,h._sqlite3_value_type=c.da,h._sqlite3_result_blob=c.ea,h._sqlite3_result_double=c.fa,h._sqlite3_result_error=c.ga,h._sqlite3_result_int=c.ha,h._sqlite3_result_int64=c.ia,h._sqlite3_result_null=c.ja,h._sqlite3_result_text=c.ka,h._sqlite3_aggregate_context=c.la,h._sqlite3_column_count=c.ma,h._sqlite3_data_count=c.na,h._sqlite3_column_blob=c.oa,h._sqlite3_column_bytes=c.pa,h._sqlite3_column_double=c.qa,h._sqlite3_bind_blob=c.ra,h._sqlite3_bind_double=c.sa,h._sqlite3_bind_int=c.ta,h._sqlite3_bind_text=c.ua,h._sqlite3_bind_parameter_index=c.va,h._sqlite3_sql=c.wa,h._sqlite3_normalized_sql=c.xa,h._sqlite3_changes=c.ya,h._sqlite3_close_v2=c.za,h._sqlite3_create_function_v2=c.Aa,h._sqlite3_update_hook=c.Ba,h._sqlite3_open=c.Ca,Ar=h._malloc=c.Da,kn=h._free=c.Ea,h._RegisterExtensionFunctions=c.Fa,ha=c.Ga,da=c.Ha,Mr=c.Ia,dt=c.Ja,zr=c.Ka,Ur=c.M,He=c.O,qs(),ct--,(f=h.monitorRunDependencies)==null||f.call(h,ct),ct==0&&En&&(c=En,En=null,c()),Bi}ct++,(o=h.monitorRunDependencies)==null||o.call(h,ct);var s={a:Go};return h.instantiateWasm?new Promise(c=>{h.instantiateWasm(s,(f,g)=>{c(r(f))})}):(vi??(vi=h.locateFile?h.locateFile("sql-wasm-browser.wasm",We):We+"sql-wasm-browser.wasm"),r((await Po(s)).instance))})(),Oi(),m}),t)};n.exports=i,n.exports.default=i})(Fi)),Fi.exports}var Bu=Ou();const $u=Cu(Bu),Au=""+new URL("sql-wasm-UFUCzYNW.wasm",import.meta.url).href;let Wi=null;async function Mu(){return Wi||(Wi=await $u({locateFile:()=>Au})),Wi}class zu{constructor(){this.db=null,this.fileName=""}async open(e,t){const i=await Mu();this.db&&this.db.close(),this.db=new i.Database(new Uint8Array(e)),this.fileName=t}close(){this.db&&(this.db.close(),this.db=null,this.fileName="")}isOpen(){return!!this.db}_ensureOpen(){if(!this.db)throw new Error("No local database open.")}_runQuery(e){this._ensureOpen();const t=this.db.exec(e);if(!t.length)return{columns:[],rows:[]};const{columns:i,values:a}=t[0],l=a.map(d=>{const m={};return i.forEach((v,h)=>m[v]=d[h]),m});return{columns:i,rows:l}}async getTables(){const{rows:e}=this._runQuery("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;");return e.map(t=>({name:t.name,row_count:0}))}async getTableStructure(e){const{rows:t}=this._runQuery(`PRAGMA table_info(\`${e}\`);`);return t}async getTableData(e,t=100,i=0){const a=await this.getTableStructure(e);if(!a.length)throw new Error(`Table ${e} not found`);const{rows:l}=this._runQuery(`SELECT * FROM \`${e}\` LIMIT ${t} OFFSET ${i};`),d=this._runQuery(`SELECT COUNT(*) as count FROM \`${e}\`;`),m=d.rows.length?Number(d.rows[0].count):0;return{columns:a.map(v=>v.name),rows:l,row_count:l.length,total_count:m,offset:i,limit:t}}async executeQuery(e,t){this._ensureOpen();const i=e.trim(),a=i.toUpperCase();if(["INSERT","UPDATE","DELETE","DROP","CREATE","ALTER","REPLACE"].some(v=>a.startsWith(v))){this.db.run(i);const v=this.db.getRowsModified();return{columns:[],rows:[],row_count:v}}let l=i;t&&!a.includes("LIMIT")&&a.startsWith("SELECT")&&(l=`${i.replace(/;$/,"")} LIMIT ${t};`);const{columns:d,rows:m}=this._runQuery(l);return{columns:d,rows:m,row_count:m.length}}async checkDatabaseExists(){return this.isOpen()}}const D=new Ru,yt=new zu;let ye=null,te=0,J=100,ue=0,_o="query",Ua=null,bt=[],ne="",gi="device";function mn(){return gi==="local"?yt:D}const w=n=>document.getElementById(n);window.addEventListener("DOMContentLoaded",()=>{const n=localStorage.getItem("sqliteViewerQuery");n&&(w("queryInput").value=n),localStorage.getItem("sqliteViewerConfigCollapsed")==="true"&&w("configSection").classList.remove("expanded"),w("queryInput").addEventListener("input",e=>{localStorage.setItem("sqliteViewerQuery",e.target.value)}),document.addEventListener("keydown",e=>{e.key==="F5"&&(e.preventDefault(),Fa())}),w("tableSearch").addEventListener("input",e=>Zu(e.target.value)),document.addEventListener("click",e=>{!e.target.closest("#searchResultsDropdown")&&!e.target.closest("#dbSearchInput")&&w("searchResultsDropdown").classList.remove("visible"),!e.target.closest("#packageDropdown")&&!e.target.closest("#packageSearchInput")&&w("packageDropdown").classList.remove("visible")}),w("configToggleBtn").addEventListener("click",Qu),w("usbConnectBtn").addEventListener("click",ju),w("packageSearchInput").addEventListener("focus",Hu),w("packageSearchInput").addEventListener("input",xs),w("packageClearBtn").addEventListener("click",e=>Yu(e)),w("databaseSelect").addEventListener("change",()=>Ls()),w("dbSearchInput").addEventListener("input",Ju),w("dbSearchInput").addEventListener("keydown",e=>{e.key==="Enter"&&ps()}),w("dbSearchBtn").addEventListener("click",ps),w("executeBtn").addEventListener("click",()=>Fa()),w("executeAllBtn").addEventListener("click",ih),w("refreshTablesBtn").addEventListener("click",dh),w("clearQueryBtn").addEventListener("click",fh),w("formatQueryBtn").addEventListener("click",ph),w("downloadDbBtn").addEventListener("click",wh),w("openLocalBtn").addEventListener("click",()=>w("localFileInput").click()),w("localFileInput").addEventListener("change",gh),w("closeLocalBtn").addEventListener("click",mh),w("dismissUpdate").addEventListener("click",()=>w("updateBar").classList.remove("visible")),w("firstBtn").addEventListener("click",ah),w("prevBtn").addEventListener("click",oh),w("nextBtn").addEventListener("click",ch),w("lastBtn").addEventListener("click",lh),w("gotoPageBtn").addEventListener("click",Wa),w("gotoPageInput").addEventListener("keypress",e=>{e.key==="Enter"&&Wa()}),w("limitSelect").addEventListener("change",uh),document.querySelectorAll(".tab").forEach(e=>{e.addEventListener("click",()=>hh(e.dataset.tab))}),Uu(),bh()});async function Uu(){try{if(await D.connectBridge()){Fu(),await Wu();return}}catch{}await Vu()}function Fu(){const n=w("connectionStatus");n.textContent="ADB Bridge",n.className="connection-status bridge";const e=D.bridgeUrl?new URL(D.bridgeUrl).port:"15555";w("deviceStatus").textContent=`Bridge connected on :${e}`,w("deviceStatus").classList.add("ok");const t=w("usbConnectBtn");t.textContent="Disconnect Bridge",t.classList.add("disconnect")}async function Wu(){try{const n=await D.getDevices();if(n.length===0){w("deviceStatus").textContent="Bridge connected — no devices found. Plug in a phone.",w("deviceStatus").classList.remove("ok");return}if(n.length===1){D.bridgeSerial=n[0].serial,w("deviceStatus").textContent=n[0].display_name,w("deviceStatus").classList.add("ok"),await fs();return}D.bridgeSerial=n[0].serial,w("deviceStatus").textContent=n[0].display_name,w("deviceStatus").classList.add("ok"),await fs()}catch(n){w("deviceStatus").textContent=`Bridge error: ${n.message}`,w("deviceStatus").classList.remove("ok")}}async function Vu(){try{const n=await D.getDevices(),e=localStorage.getItem("sqliteViewerDevice");n.length===1?(w("deviceStatus").textContent="Reconnecting...",await D.connectBySerial(n[0].serial),await ds()):e&&n.find(i=>i.serial===e)&&(w("deviceStatus").textContent="Reconnecting...",await D.connectBySerial(e),await ds())}catch{}}async function ju(){const n=w("usbConnectBtn");if(D.mode==="bridge"||D.adb){await D.disconnect(),n.textContent="Connect Device",n.classList.remove("disconnect"),w("deviceStatus").textContent="No device connected",w("deviceStatus").classList.remove("ok"),w("connectionStatus").textContent="Disconnected",w("connectionStatus").className="connection-status disconnected",w("packageSearchInput").disabled=!0,w("packageSearchInput").placeholder="Connect device first...",w("databaseSelect").disabled=!0,w("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Connect a USB device to get started.</div>';return}n.textContent="Connecting...",w("deviceStatus").textContent="Check your phone — approve USB debugging if prompted";try{await D.requestDevice(),await ds()}catch(e){n.textContent="Connect Device",w("deviceStatus").textContent=`Error: ${e.message}`,w("deviceStatus").classList.remove("ok")}}async function ds(){const n=D.getDeviceInfo(),e=w("usbConnectBtn");e.textContent="Disconnect",e.classList.add("disconnect"),w("deviceStatus").textContent=n.display_name,w("deviceStatus").classList.add("ok"),w("connectionStatus").textContent="Connected",w("connectionStatus").className="connection-status connected",localStorage.setItem("sqliteViewerDevice",n.serial),await fs()}function Qu(){const n=w("configSection");n.classList.toggle("expanded"),localStorage.setItem("sqliteViewerConfigCollapsed",!n.classList.contains("expanded"))}async function fs(){const n=w("packageSearchInput"),e=w("packageComboWrapper");n.disabled=!1,n.placeholder="Scanning debuggable apps...",n.value="",e.classList.remove("has-value"),ne="",bt=[];try{bt=await D.getPackages(),n.placeholder=`Search ${bt.length} debuggable apps...`;const t=localStorage.getItem("sqliteViewerPackage");t&&bt.includes(t)&&(ne=t,n.value=t,e.classList.add("has-value")),await ko(!0)}catch(t){n.placeholder=`Failed: ${t.message}`}}function Hu(){const n=w("packageSearchInput");ne&&n.value===ne&&n.select(),xs()}function xs(){const n=w("packageSearchInput"),e=w("packageDropdown"),t=n.value.trim().toLowerCase(),i=t?bt.filter(a=>a.toLowerCase().includes(t)):bt;i.length===0?e.innerHTML='<div class="combo-empty">No matching packages</div>':(e.innerHTML=i.map(a=>`<div class="combo-item${a===ne?" active":""}" data-pkg="${a}">${a}</div>`).join(""),e.querySelectorAll(".combo-item").forEach(a=>{a.addEventListener("click",()=>Ku(a.dataset.pkg))})),e.classList.add("visible")}async function Ku(n){const e=w("packageSearchInput"),t=w("packageComboWrapper"),i=w("packageDropdown");ne=n,e.value=n,t.classList.add("has-value"),i.classList.remove("visible"),await ko()}async function Yu(n){n&&n.stopPropagation();const e=w("packageSearchInput"),t=w("packageComboWrapper");ne="",e.value="",t.classList.remove("has-value"),e.focus(),xs(),w("databaseSelect").innerHTML='<option value="">Select a package first</option>',w("databaseSelect").disabled=!0,localStorage.removeItem("sqliteViewerPackage")}async function ko(n=!1){if(!ne){w("databaseSelect").innerHTML='<option value="">Select a package first</option>',w("databaseSelect").disabled=!0;return}localStorage.setItem("sqliteViewerPackage",ne),D.setPackage(ne),await Gu(n)}async function Gu(n=!1){const e=w("databaseSelect");e.disabled=!1,e.innerHTML='<option value="">Loading databases...</option>';try{const t=await D.getDatabases(ne),i=localStorage.getItem("sqliteViewerDatabase");e.innerHTML='<option value="">-- Select database --</option>',t.forEach(a=>{const l=document.createElement("option");l.value=a.name,l.textContent=`${a.name} (${a.path})`,l.dataset.path=a.path,i&&a.name===i&&(l.selected=!0),e.appendChild(l)}),await Ls(n)}catch(t){e.innerHTML=`<option value="">Error: ${t.message}</option>`}}async function Ls(n=!1){var l;const e=w("databaseSelect"),t=e.value;if(!t){n||(w("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Select a database to view tables</div>');return}const i=e.options[e.selectedIndex],a=((l=i==null?void 0:i.dataset)==null?void 0:l.path)||"";localStorage.setItem("sqliteViewerDatabase",t),D.setDatabase(t,a),await To(),await _s()}function Ju(){if(clearTimeout(Ua),w("dbSearchInput").value.trim().length<1){w("searchResultsDropdown").classList.remove("visible");return}Ua=setTimeout(()=>ps(),400)}async function ps(){const n=w("dbSearchInput").value.trim(),e=w("searchResultsDropdown");if(!ne){e.innerHTML='<div class="search-result-item"><span class="file-name">Select a package first</span></div>',e.classList.add("visible");return}if(!n){e.classList.remove("visible");return}e.innerHTML='<div class="search-result-item"><span class="file-name">Searching...</span></div>',e.classList.add("visible");try{const t=await D.searchDatabases(ne,n);if(t.length===0){e.innerHTML='<div class="search-result-item"><span class="file-name">No databases found</span></div>';return}e.innerHTML=t.map(i=>`<div class="search-result-item" data-name="${i.name}" data-path="${i.path}">
|
|
17
|
-
<div class="file-name">${i.name}</div>
|
|
18
|
-
<div class="file-path">${i.path}</div>
|
|
19
|
-
</div>`).join(""),e.querySelectorAll(".search-result-item").forEach(i=>{i.addEventListener("click",()=>Xu(i.dataset.name,i.dataset.path))})}catch(t){e.innerHTML=`<div class="search-result-item"><span class="file-name">Search failed: ${t.message}</span></div>`}}async function Xu(n,e){w("searchResultsDropdown").classList.remove("visible"),w("dbSearchInput").value="";const t=w("databaseSelect");let i=!1;for(let a=0;a<t.options.length;a++)if(t.options[a].value===n){t.value=n,i=!0;break}if(!i){const a=document.createElement("option");a.value=n,a.textContent=`${n} (${e})`,a.dataset.path=e,t.appendChild(a),t.value=n}await Ls()}async function To(){const n=w("connectionStatus");if(!(D.mode==="bridge"?!!D.bridgeUrl:!!D.adb)){n.textContent="Disconnected",n.className="connection-status disconnected";return}try{await D.checkDatabaseExists()?(n.textContent=D.mode==="bridge"?"ADB Bridge":"Connected",n.className=D.mode==="bridge"?"connection-status bridge":"connection-status connected"):(n.textContent="DB not found",n.className="connection-status disconnected")}catch{n.textContent=D.mode==="bridge"?"ADB Bridge":"Connected",n.className=D.mode==="bridge"?"connection-status bridge":"connection-status connected"}}async function _s(){const n=w("tablesList");n.innerHTML='<div class="loading">Loading tables...</div>';try{const e=await mn().getTables();if(e.length===0){n.innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">No tables found</div>';return}n.innerHTML=e.map(t=>`
|
|
20
|
-
<div class="table-item" data-table="${t.name}">
|
|
21
|
-
<div class="accordion-header">
|
|
22
|
-
<span class="arrow">▶</span>
|
|
23
|
-
<div class="table-item-name">${t.name}</div>
|
|
24
|
-
<button class="query-btn" data-select-table="${t.name}">Query</button>
|
|
25
|
-
</div>
|
|
26
|
-
<div class="accordion-content" id="structure-${t.name}">
|
|
27
|
-
<div style="color: #95a5a6; font-style: italic;">Loading columns...</div>
|
|
28
|
-
</div>
|
|
29
|
-
</div>`).join(""),n.querySelectorAll(".accordion-header").forEach(t=>{t.addEventListener("click",i=>{if(i.target.classList.contains("query-btn"))return;const a=t.closest(".table-item").dataset.table;th(t,a)})}),n.querySelectorAll(".query-btn").forEach(t=>{t.addEventListener("click",i=>{i.stopPropagation(),eh(t.dataset.selectTable)})})}catch(e){n.innerHTML=`<div class="error" style="margin: 10px; font-size: 12px;">Failed to load tables: ${e.message}</div>`}}function Zu(n){const e=document.querySelectorAll(".table-item"),t=n.toLowerCase();e.forEach(i=>{const a=i.dataset.table.toLowerCase();i.style.display=a.includes(t)?"block":"none"})}async function eh(n){ye=n,te=0,document.querySelectorAll(".table-item").forEach(a=>{const l=a.querySelector(".accordion-header"),d=a.dataset.table===n;a.style.borderLeftColor=d?"#3498db":"transparent",l.style.background=d?"#34495e":""});const e=w("queryInput"),t=e.value.trim(),i=`SELECT * FROM ${n}`;e.value=t?t+`
|
|
30
|
-
|
|
31
|
-
`+i:i,localStorage.setItem("sqliteViewerQuery",e.value),_o==="query"?await st(n):await Io(n)}async function th(n,e){const t=n.closest(".table-item"),i=t.querySelector(".accordion-content"),a=t.classList.contains("expanded");t.classList.toggle("expanded"),!a&&!i.dataset.loaded&&await nh(e,i)}async function nh(n,e){try{const t=await mn().getTableStructure(n);if(e.dataset.loaded="true",!t||t.length===0){e.innerHTML='<div style="color: #95a5a6">No columns</div>';return}e.innerHTML=t.map(i=>`
|
|
32
|
-
<div class="column-item">
|
|
33
|
-
<span>${i.pk?'<span class="pk-badge" title="Primary Key">PK</span>':""}${i.name}</span>
|
|
34
|
-
<span class="column-type">${i.type}</span>
|
|
35
|
-
</div>`).join("")}catch(t){e.innerHTML=`<div style="color: #e74c3c">Error: ${t.message}</div>`}}async function st(n,e=0){const t=w("resultsContainer"),i=w("statusBar"),a=w("welcomeMessage");t.innerHTML='<div class="loading">Loading data...</div>',a.style.display="none";try{const l=await mn().getTableData(n,J,e);te=e,ue=l.total_count,ks(l.columns,l.rows),sh(),i.textContent=`${l.row_count} rows retrieved (${ue.toLocaleString()} total)`}catch(l){t.innerHTML=`<div class="error">Failed to load data: ${l.message}</div>`}}async function Io(n){const e=w("structureContainer");e.innerHTML='<div class="loading">Loading structure...</div>';try{const t=await mn().getTableStructure(n),i=["cid","name","type","notnull","dflt_value","pk"];e.innerHTML=`
|
|
36
|
-
<table>
|
|
37
|
-
<thead><tr>${i.map(a=>`<th>${a}</th>`).join("")}</tr></thead>
|
|
38
|
-
<tbody>
|
|
39
|
-
${t.map(a=>`<tr>${i.map(l=>`<td>${a[l]??""}</td>`).join("")}</tr>`).join("")}
|
|
40
|
-
</tbody>
|
|
41
|
-
</table>`}catch(t){e.innerHTML=`<div class="error">Failed to load structure: ${t.message}</div>`}}function rh(){const n=w("queryInput"),e=n.selectionStart,t=n.selectionEnd;return e!==t?n.value.substring(e,t).trim():null}async function Fa(){const n=rh(),e=w("queryInput").value.trim(),t=n||e,i=!!n,a=w("resultsContainer"),l=w("statusBar"),d=w("welcomeMessage");if(!t){alert("Please enter a SQL query");return}a.innerHTML='<div class="loading">Executing query...</div>',d.style.display="none",l.textContent=i?"Executing selected...":"Executing...";try{const m=await mn().executeQuery(t,J);ks(m.columns,m.rows),l.textContent=i?`${m.row_count} rows retrieved (selected query)`:`${m.row_count} rows retrieved`,w("pagination").style.display="none"}catch(m){a.innerHTML=`<div class="error">Failed to execute query: ${m.message}</div>`,l.textContent="Error"}}async function ih(){const n=w("queryInput").value.trim(),e=w("resultsContainer"),t=w("statusBar"),i=w("welcomeMessage");if(!n){alert("Please enter a SQL query");return}e.innerHTML='<div class="loading">Executing query...</div>',i.style.display="none",t.textContent="Executing...";try{const a=await mn().executeQuery(n,J);ks(a.columns,a.rows),t.textContent=`${a.row_count} rows retrieved`,w("pagination").style.display="none"}catch(a){e.innerHTML=`<div class="error">Failed to execute query: ${a.message}</div>`,t.textContent="Error"}}function ks(n,e){const t=w("resultsContainer");if(!e||e.length===0){t.innerHTML='<div class="info">No results found</div>';return}const i=`
|
|
42
|
-
<div style="padding: 15px; background: #f8f9fa; border-bottom: 2px solid #dee2e6; font-size: 13px;">
|
|
43
|
-
<strong>Table Information:</strong>
|
|
44
|
-
<span style="margin-left: 20px;"><strong>Total Rows:</strong> ${ue?ue.toLocaleString():e.length.toLocaleString()}</span>
|
|
45
|
-
<span style="margin-left: 20px;"><strong>Total Columns:</strong> ${n.length}</span>
|
|
46
|
-
<span style="margin-left: 20px;"><strong>Columns:</strong> ${n.join(", ")}</span>
|
|
47
|
-
</div>`;t.innerHTML=i+`<table>
|
|
48
|
-
<thead>
|
|
49
|
-
<tr>
|
|
50
|
-
<th style="background: #e9ecef; color: #495057; font-weight: 700;">#</th>
|
|
51
|
-
${n.map(a=>`<th style="background: #e9ecef; color: #495057; font-weight: 700;">${a}</th>`).join("")}
|
|
52
|
-
</tr>
|
|
53
|
-
</thead>
|
|
54
|
-
<tbody>
|
|
55
|
-
${e.map((a,l)=>`
|
|
56
|
-
<tr>
|
|
57
|
-
<td style="background: #f8f9fa; font-weight: 600; color: #6c757d;">${te+l+1}</td>
|
|
58
|
-
${n.map(d=>`<td>${a[d]??'<span style="color: #999; font-style: italic;">NULL</span>'}</td>`).join("")}
|
|
59
|
-
</tr>`).join("")}
|
|
60
|
-
</tbody>
|
|
61
|
-
</table>`}function sh(){const n=w("pagination");n.style.display="flex";const e=Math.floor(te/J)+1,t=Math.ceil(ue/J);w("firstBtn").disabled=te===0,w("prevBtn").disabled=te===0,w("nextBtn").disabled=te+J>=ue,w("lastBtn").disabled=te+J>=ue,w("gotoPageInput").max=t,w("gotoPageInput").placeholder=`1-${t}`,w("pageInfo").textContent=`Page ${e} of ${t} (${ue.toLocaleString()} total rows)`}function ah(){te>0&&st(ye,0)}function oh(){te>0&&st(ye,te-J)}function ch(){te+J<ue&&st(ye,te+J)}function lh(){if(te+J<ue){const n=Math.floor((ue-1)/J)*J;st(ye,n)}}function Wa(){const n=parseInt(w("gotoPageInput").value),e=Math.ceil(ue/J);n>=1&&n<=e?(st(ye,(n-1)*J),w("gotoPageInput").value=""):alert(`Please enter a page number between 1 and ${e}`)}function uh(){const n=w("limitSelect").value;n==="all"?J=ue||1e5:J=parseInt(n),te=0,ye&&st(ye,0)}function hh(n){_o=n,document.querySelectorAll(".tab").forEach(e=>{e.classList.toggle("active",e.dataset.tab===n)}),document.querySelectorAll(".tab-content").forEach(e=>e.classList.remove("active")),n==="query"?(w("queryTab").classList.add("active"),ye&&st(ye)):n==="structure"&&(w("structureTab").classList.add("active"),ye&&Io(ye))}async function dh(){const n=w("statusBar");n.textContent="Refreshing tables...",D.dbPath="",await _s(),await To(),n.textContent="Tables refreshed",setTimeout(()=>n.textContent="Ready",3e3)}function fh(){w("queryInput").value="",w("resultsContainer").innerHTML="",w("welcomeMessage").style.display="block",w("statusBar").textContent="Ready",localStorage.removeItem("sqliteViewerQuery")}function ph(){const n=w("queryInput");let e=n.value;e=e.replace(/\s+/g," ").trim(),e=e.replace(/\b(SELECT|FROM|WHERE|AND|OR|ORDER BY|GROUP BY|LIMIT|JOIN|LEFT JOIN|RIGHT JOIN|INNER JOIN)\b/gi,`
|
|
62
|
-
$1`),e=e.replace(/,/g,`,
|
|
63
|
-
`),n.value=e}async function wh(){const n=w("statusBar");if(gi==="local"&&yt.isOpen()){const e=yt.db.export(),t=new Blob([e],{type:"application/octet-stream"});Va(t,yt.fileName||"database.db"),n.textContent=`Downloaded ${yt.fileName}`;return}if(D.mode!=="bridge"||!D.bridgeUrl){n.textContent="Download requires ADB Bridge connection";return}if(!ne||!D.dbPath){n.textContent="Select a package and database first";return}n.textContent="Downloading database...";try{const e=await fetch(`${D.bridgeUrl}/api/pull-db`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serial:D.bridgeSerial||void 0,packageName:ne,dbPath:D.dbPath})});if(!e.ok){const a=await e.json().catch(()=>({}));throw new Error(a.error||`HTTP ${e.status}`)}const t=await e.blob(),i=D.dbName||"database.db";Va(t,i),n.textContent=`Downloaded ${i}`}catch(e){n.textContent=`Download failed: ${e.message}`}}function Va(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(t)}async function gh(n){const e=n.target.files[0];if(!e)return;const t=w("statusBar");t.textContent=`Opening ${e.name}...`;try{const i=await e.arrayBuffer();await yt.open(i,e.name),gi="local";const a=w("connectionStatus");a.textContent="Local File",a.className="connection-status bridge",w("localFileName").textContent=e.name,w("localFileBadge").classList.add("visible"),w("packageSearchInput").disabled=!0,w("packageSearchInput").placeholder="Local file mode",w("databaseSelect").disabled=!0,w("databaseSelect").innerHTML=`<option value="">${e.name}</option>`,await _s(),t.textContent=`Opened ${e.name}`}catch(i){t.textContent=`Failed to open file: ${i.message}`,w("tablesList").innerHTML=`<div class="error" style="margin: 10px; font-size: 12px;">Failed to open file: ${i.message}</div>`}n.target.value=""}function mh(){if(yt.close(),gi="device",w("localFileBadge").classList.remove("visible"),w("tablesList").innerHTML='<div class="info" style="margin: 10px; font-size: 12px;">Connect a USB device to get started.</div>',w("resultsContainer").innerHTML="",w("welcomeMessage").style.display="block",w("statusBar").textContent="Ready",w("pagination").style.display="none",D.mode==="bridge"?!!D.bridgeUrl:!!D.adb){const e=w("connectionStatus");e.textContent=D.mode==="bridge"?"ADB Bridge":"Connected",e.className=D.mode==="bridge"?"connection-status bridge":"connection-status connected",w("packageSearchInput").disabled=!1,w("packageSearchInput").placeholder=`Search ${bt.length} debuggable apps...`,w("databaseSelect").disabled=!1}else w("connectionStatus").textContent="Disconnected",w("connectionStatus").className="connection-status disconnected",w("packageSearchInput").disabled=!0,w("packageSearchInput").placeholder="Connect device first...",w("databaseSelect").disabled=!0,w("databaseSelect").innerHTML='<option value="">Select a package first</option>'}const Vi="1.1.1",yh="amitwinit/SQLite-DevTools-Mobile-ReactNative";async function bh(){if(!window.__ELECTRON_UPDATE__)try{const n=await fetch(`https://api.github.com/repos/${yh}/releases/latest`,{signal:AbortSignal.timeout(5e3)});if(!n.ok)return;const e=await n.json(),t=(e.tag_name||"").replace(/^v/,"");if(t&&t!==Vi&&vh(t,Vi)){const i=w("updateBar");w("updateMessage").textContent=`Version ${t} is available (you have ${Vi})`;const a=w("updateAction");a.textContent="Download",a.href=e.html_url,a.target="_blank",i.classList.add("visible")}}catch{}}function vh(n,e){const t=n.split(".").map(Number),i=e.split(".").map(Number);for(let a=0;a<Math.max(t.length,i.length);a++){const l=t[a]||0,d=i[a]||0;if(l>d)return!0;if(l<d)return!1}return!1}
|