tasmota-webserial-esptool 7.3.2 → 7.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esp_loader.d.ts +3 -1
- package/dist/esp_loader.js +67 -22
- package/dist/web/index.js +1 -1
- package/js/modules/esptool.js +1 -1
- package/package.json +1 -1
- package/src/esp_loader.ts +84 -31
package/dist/esp_loader.d.ts
CHANGED
|
@@ -21,13 +21,15 @@ export declare class ESPLoader extends EventTarget {
|
|
|
21
21
|
private _isESP32S2NativeUSB;
|
|
22
22
|
private _initializationSucceeded;
|
|
23
23
|
private __commandLock;
|
|
24
|
-
private
|
|
24
|
+
private __isReconfiguring;
|
|
25
25
|
constructor(port: SerialPort, logger: Logger, _parent?: ESPLoader | undefined);
|
|
26
26
|
private get _inputBuffer();
|
|
27
27
|
private get _totalBytesRead();
|
|
28
28
|
private set _totalBytesRead(value);
|
|
29
29
|
private get _commandLock();
|
|
30
30
|
private set _commandLock(value);
|
|
31
|
+
private get _isReconfiguring();
|
|
32
|
+
private set _isReconfiguring(value);
|
|
31
33
|
private detectUSBSerialChip;
|
|
32
34
|
initialize(): Promise<void>;
|
|
33
35
|
/**
|
package/dist/esp_loader.js
CHANGED
|
@@ -24,7 +24,7 @@ export class ESPLoader extends EventTarget {
|
|
|
24
24
|
this._isESP32S2NativeUSB = false;
|
|
25
25
|
this._initializationSucceeded = false;
|
|
26
26
|
this.__commandLock = Promise.resolve([0, []]);
|
|
27
|
-
this.
|
|
27
|
+
this.__isReconfiguring = false;
|
|
28
28
|
this.state_DTR = false;
|
|
29
29
|
this.__writeChain = Promise.resolve();
|
|
30
30
|
}
|
|
@@ -55,6 +55,19 @@ export class ESPLoader extends EventTarget {
|
|
|
55
55
|
this.__commandLock = value;
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
+
get _isReconfiguring() {
|
|
59
|
+
return this._parent
|
|
60
|
+
? this._parent._isReconfiguring
|
|
61
|
+
: this.__isReconfiguring;
|
|
62
|
+
}
|
|
63
|
+
set _isReconfiguring(value) {
|
|
64
|
+
if (this._parent) {
|
|
65
|
+
this._parent._isReconfiguring = value;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this.__isReconfiguring = value;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
58
71
|
detectUSBSerialChip(vendorId, productId) {
|
|
59
72
|
// Common USB-Serial chip vendors and their products
|
|
60
73
|
const chips = {
|
|
@@ -503,22 +516,27 @@ export class ESPLoader extends EventTarget {
|
|
|
503
516
|
async readPacket(timeout) {
|
|
504
517
|
let partialPacket = null;
|
|
505
518
|
let inEscape = false;
|
|
506
|
-
|
|
519
|
+
let readBytes = [];
|
|
507
520
|
while (true) {
|
|
508
|
-
|
|
509
|
-
|
|
521
|
+
const stamp = Date.now();
|
|
522
|
+
readBytes = [];
|
|
523
|
+
while (Date.now() - stamp < timeout) {
|
|
524
|
+
if (this._inputBuffer.length > 0) {
|
|
525
|
+
readBytes.push(this._inputBuffer.shift());
|
|
526
|
+
break;
|
|
527
|
+
}
|
|
528
|
+
else {
|
|
529
|
+
// Reduced sleep time for faster response during high-speed transfers
|
|
530
|
+
await sleep(1);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
if (readBytes.length == 0) {
|
|
510
534
|
const waitingFor = partialPacket === null ? "header" : "content";
|
|
511
535
|
throw new SlipReadError("Timed out waiting for packet " + waitingFor);
|
|
512
536
|
}
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
continue;
|
|
517
|
-
}
|
|
518
|
-
// Process all available bytes without going back to outer loop
|
|
519
|
-
// This is critical for handling high-speed burst transfers
|
|
520
|
-
while (this._inputBuffer.length > 0) {
|
|
521
|
-
const b = this._inputBuffer.shift();
|
|
537
|
+
if (this.debug)
|
|
538
|
+
this.logger.debug("Read " + readBytes.length + " bytes: " + hexFormatter(readBytes));
|
|
539
|
+
for (const b of readBytes) {
|
|
522
540
|
if (partialPacket === null) {
|
|
523
541
|
// waiting for packet header
|
|
524
542
|
if (b == 0xc0) {
|
|
@@ -648,7 +666,6 @@ export class ESPLoader extends EventTarget {
|
|
|
648
666
|
async reconfigurePort(baud) {
|
|
649
667
|
var _a;
|
|
650
668
|
try {
|
|
651
|
-
this._isReconfiguring = true;
|
|
652
669
|
// Wait for pending writes to complete
|
|
653
670
|
try {
|
|
654
671
|
await this._writeChain;
|
|
@@ -656,6 +673,8 @@ export class ESPLoader extends EventTarget {
|
|
|
656
673
|
catch (err) {
|
|
657
674
|
this.logger.debug(`Pending write error during reconfigure: ${err}`);
|
|
658
675
|
}
|
|
676
|
+
// Block new writes during port close/open
|
|
677
|
+
this._isReconfiguring = true;
|
|
659
678
|
// Release persistent writer before closing
|
|
660
679
|
if (this._writer) {
|
|
661
680
|
try {
|
|
@@ -674,18 +693,18 @@ export class ESPLoader extends EventTarget {
|
|
|
674
693
|
await this.port.close();
|
|
675
694
|
// Reopen Port
|
|
676
695
|
await this.port.open({ baudRate: baud });
|
|
696
|
+
// Port is now open - allow writes again
|
|
697
|
+
this._isReconfiguring = false;
|
|
677
698
|
// Clear buffer again
|
|
678
699
|
await this.flushSerialBuffers();
|
|
679
700
|
// Restart Readloop
|
|
680
701
|
this.readLoop();
|
|
681
702
|
}
|
|
682
703
|
catch (e) {
|
|
704
|
+
this._isReconfiguring = false;
|
|
683
705
|
this.logger.error(`Reconfigure port error: ${e}`);
|
|
684
706
|
throw new Error(`Unable to change the baud rate to ${baud}: ${e}`);
|
|
685
707
|
}
|
|
686
|
-
finally {
|
|
687
|
-
this._isReconfiguring = false;
|
|
688
|
-
}
|
|
689
708
|
}
|
|
690
709
|
/**
|
|
691
710
|
* @name connectWithResetStrategies
|
|
@@ -1333,7 +1352,6 @@ export class ESPLoader extends EventTarget {
|
|
|
1333
1352
|
return;
|
|
1334
1353
|
}
|
|
1335
1354
|
try {
|
|
1336
|
-
this._isReconfiguring = true;
|
|
1337
1355
|
// Wait for pending writes to complete
|
|
1338
1356
|
try {
|
|
1339
1357
|
await this._writeChain;
|
|
@@ -1341,6 +1359,8 @@ export class ESPLoader extends EventTarget {
|
|
|
1341
1359
|
catch (err) {
|
|
1342
1360
|
this.logger.debug(`Pending write error during disconnect: ${err}`);
|
|
1343
1361
|
}
|
|
1362
|
+
// Block new writes during disconnect
|
|
1363
|
+
this._isReconfiguring = true;
|
|
1344
1364
|
// Release persistent writer before closing
|
|
1345
1365
|
if (this._writer) {
|
|
1346
1366
|
try {
|
|
@@ -1387,7 +1407,6 @@ export class ESPLoader extends EventTarget {
|
|
|
1387
1407
|
return;
|
|
1388
1408
|
}
|
|
1389
1409
|
try {
|
|
1390
|
-
this._isReconfiguring = true;
|
|
1391
1410
|
this.logger.log("Reconnecting serial port...");
|
|
1392
1411
|
this.connected = false;
|
|
1393
1412
|
this.__inputBuffer = [];
|
|
@@ -1398,6 +1417,8 @@ export class ESPLoader extends EventTarget {
|
|
|
1398
1417
|
catch (err) {
|
|
1399
1418
|
this.logger.debug(`Pending write error during reconnect: ${err}`);
|
|
1400
1419
|
}
|
|
1420
|
+
// Block new writes during port close/open
|
|
1421
|
+
this._isReconfiguring = true;
|
|
1401
1422
|
// Release persistent writer
|
|
1402
1423
|
if (this._writer) {
|
|
1403
1424
|
try {
|
|
@@ -1439,6 +1460,8 @@ export class ESPLoader extends EventTarget {
|
|
|
1439
1460
|
if (!this.port.readable || !this.port.writable) {
|
|
1440
1461
|
throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);
|
|
1441
1462
|
}
|
|
1463
|
+
// Port is now open and ready - allow writes for initialization
|
|
1464
|
+
this._isReconfiguring = false;
|
|
1442
1465
|
// Save chip info and flash size (no need to detect again)
|
|
1443
1466
|
const savedChipFamily = this.chipFamily;
|
|
1444
1467
|
const savedChipName = this.chipName;
|
|
@@ -1482,8 +1505,10 @@ export class ESPLoader extends EventTarget {
|
|
|
1482
1505
|
}
|
|
1483
1506
|
this.logger.debug("Reconnection successful");
|
|
1484
1507
|
}
|
|
1485
|
-
|
|
1508
|
+
catch (err) {
|
|
1509
|
+
// Ensure flag is reset on error
|
|
1486
1510
|
this._isReconfiguring = false;
|
|
1511
|
+
throw err;
|
|
1487
1512
|
}
|
|
1488
1513
|
}
|
|
1489
1514
|
/**
|
|
@@ -1569,7 +1594,8 @@ export class ESPLoader extends EventTarget {
|
|
|
1569
1594
|
const chunkSize = Math.min(CHUNK_SIZE, remainingSize);
|
|
1570
1595
|
let chunkSuccess = false;
|
|
1571
1596
|
let retryCount = 0;
|
|
1572
|
-
const MAX_RETRIES =
|
|
1597
|
+
const MAX_RETRIES = 5;
|
|
1598
|
+
let deepRecoveryAttempted = false;
|
|
1573
1599
|
// Retry loop for this chunk
|
|
1574
1600
|
while (!chunkSuccess && retryCount <= MAX_RETRIES) {
|
|
1575
1601
|
let resp = new Uint8Array(0);
|
|
@@ -1655,7 +1681,26 @@ export class ESPLoader extends EventTarget {
|
|
|
1655
1681
|
}
|
|
1656
1682
|
}
|
|
1657
1683
|
else {
|
|
1658
|
-
|
|
1684
|
+
// All retries exhausted - attempt deep recovery by reconnecting and reloading stub
|
|
1685
|
+
if (!deepRecoveryAttempted) {
|
|
1686
|
+
deepRecoveryAttempted = true;
|
|
1687
|
+
this.logger.log(`All retries exhausted at 0x${currentAddr.toString(16)}. Attempting deep recovery (reconnect + reload stub)...`);
|
|
1688
|
+
try {
|
|
1689
|
+
// Reconnect will close port, reopen, and reload stub
|
|
1690
|
+
await this.reconnect();
|
|
1691
|
+
this.logger.log("Deep recovery successful. Resuming read from current position...");
|
|
1692
|
+
// Reset retry counter to give it another chance after recovery
|
|
1693
|
+
retryCount = 0;
|
|
1694
|
+
continue;
|
|
1695
|
+
}
|
|
1696
|
+
catch (reconnectErr) {
|
|
1697
|
+
throw new Error(`Failed to read chunk at 0x${currentAddr.toString(16)} after ${MAX_RETRIES} retries and deep recovery failed: ${reconnectErr}`);
|
|
1698
|
+
}
|
|
1699
|
+
}
|
|
1700
|
+
else {
|
|
1701
|
+
// Deep recovery already attempted, give up
|
|
1702
|
+
throw new Error(`Failed to read chunk at 0x${currentAddr.toString(16)} after ${MAX_RETRIES} retries and deep recovery attempt`);
|
|
1703
|
+
}
|
|
1659
1704
|
}
|
|
1660
1705
|
}
|
|
1661
1706
|
else {
|
package/dist/web/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const t=t=>{let e=[192];for(const i of t)219==i?e=e.concat([219,221]):192==i?e=e.concat([219,220]):e.push(i);return e.push(192),e},e=t=>{const e=[];for(let i=0;i<t.length;i++){const a=t.charCodeAt(i);a<=255&&e.push(a)}return e},i=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{const i=t.toString(16).toUpperCase();return i.startsWith("-")?"-0x"+i.substring(1).padStart(e,"0"):"0x"+i.padStart(e,"0")},s=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,c=12882,u=12883,_=12994,f=12995,g=12997,w=12998,p=207969,m=12914,y=12916,b=12917,S=12928,v=12849,B={5:{name:"ESP32-C3",family:f},9:{name:"ESP32-S3",family:u},12:{name:"ESP32-C2",family:_},13:{name:"ESP32-C6",family:w},16:{name:"ESP32-H2",family:m},18:{name:"ESP32-P4",family:S},20:{name:"ESP32-C61",family:p},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:v}},k={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:c}},R=3e3,x=15e4,U=100,I=(t,e)=>{const i=Math.floor(t*(e/486));return i<R?R:i},z=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case c:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case _:case f:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case p:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case v:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class F extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,i)=>{let a;return t==y||t==b||t==v?null:(t==d?a=await import("./esp32-BRKoi17y.js"):t==c?a=await import("./esp32s2-iX3WoDbg.js"):t==u?a=await import("./esp32s3-DGwDVIgz.js"):t==l?a=await import("./esp8266-CUwxJpGa.js"):t==_?a=await import("./esp32c2-Btgr_lwh.js"):t==f?a=await import("./esp32c3-CHKfoI8W.js"):t==g?a=await import("./esp32c5-BDW4KtLo.js"):t==w?a=await import("./esp32c6-il8tTxAG.js"):t==p?a=await import("./esp32c61-thKzxBGf.js"):t==m?a=await import("./esp32h2-CxoUHv_P.js"):t==S&&(a=null!=i&&i>=300?await import("./esp32p4r3-CqI71ojR.js"):await import("./esp32p4-D3jLP-jY.js")),{...a,text:e(atob(a.text)),data:e(atob(a.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,C=30,T=15,$=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),P=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const W=new Array(29);D(W);const j=new Array(C);function G(t,e,i,a,s){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=a,this.max_length=s,this.has_stree=t&&t.length}let K,Y,J;function q(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(j);const X=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,i)=>{t.bi_valid>16-i?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=i)},et=(t,e,i)=>{tt(t,i[2*e],i[2*e+1])},it=(t,e)=>{let i=0;do{i|=1&t,t>>>=1,i<<=1}while(--e>0);return i>>>1},at=(t,e,i)=>{const a=new Array(16);let s,r,n=0;for(s=1;s<=T;s++)n=n+i[s-1]<<1,a[s]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=it(a[e]++,e))}},st=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<C;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,i,a)=>{const s=2*e,r=2*i;return t[s]<t[r]||t[s]===t[r]&&a[e]<=a[i]},ht=(t,e,i)=>{const a=t.heap[i];let s=i<<1;for(;s<=t.heap_len&&(s<t.heap_len&&nt(e,t.heap[s+1],t.heap[s],t.depth)&&s++,!nt(e,a,t.heap[s],t.depth));)t.heap[i]=t.heap[s],i=s,s<<=1;t.heap[i]=a},ot=(t,e,i)=>{let a,s,r,n,h=0;if(0!==t.sym_next)do{a=255&t.pending_buf[t.sym_buf+h++],a+=(255&t.pending_buf[t.sym_buf+h++])<<8,s=t.pending_buf[t.sym_buf+h++],0===a?et(t,s,e):(r=V[s],et(t,r+E+1,e),n=$[r],0!==n&&(s-=W[r],tt(t,s,n)),a--,r=X(a),et(t,r,i),n=P[r],0!==n&&(a-=j[r],tt(t,a,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const i=e.dyn_tree,a=e.stat_desc.static_tree,s=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==i[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):i[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,i[2*o]=1,t.depth[o]=0,t.opt_len--,s&&(t.static_len-=a[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,i,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,i,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,i[2*o]=i[2*n]+i[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,i[2*n+1]=i[2*h+1]=o,t.heap[1]=o++,ht(t,i,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const i=e.dyn_tree,a=e.max_code,s=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,c,u,_,f,g=0;for(u=0;u<=T;u++)t.bl_count[u]=0;for(i[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],u=i[2*i[2*d+1]+1]+1,u>o&&(u=o,g++),i[2*d+1]=u,d>a||(t.bl_count[u]++,_=0,d>=h&&(_=n[d-h]),f=i[2*d],t.opt_len+=f*(u+_),r&&(t.static_len+=f*(s[2*d+1]+_)));if(0!==g){do{for(u=o-1;0===t.bl_count[u];)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(u=o;0!==u;u--)for(d=t.bl_count[u];0!==d;)c=t.heap[--l],c>a||(i[2*c+1]!==u&&(t.opt_len+=(u-i[2*c+1])*i[2*c],i[2*c+1]=u),d--)}})(t,e),at(i,l,t.bl_count)},dt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(i+1)+1]=65535,a=0;a<=i;a++)s=n,n=e[2*(a+1)+1],++h<o&&s===n||(h<l?t.bl_tree[2*s]+=h:0!==s?(s!==r&&t.bl_tree[2*s]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4))},ct=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),a=0;a<=i;a++)if(s=n,n=e[2*(a+1)+1],!(++h<o&&s===n)){if(h<l)do{et(t,s,t.bl_tree)}while(0!==--h);else 0!==s?(s!==r&&(et(t,s,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4)}};let ut=!1;const _t=(t,e,i,a)=>{tt(t,0+(a?1:0),3),rt(t),Q(t,i),Q(t,~i),i&&t.pending_buf.set(t.window.subarray(e,e+i),t.pending),t.pending+=i};var ft=(t,e,i,a)=>{let s,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),s=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=s&&(s=r)):s=r=i+5,i+4<=s&&-1!==e?_t(t,e,i,a):4===t.strategy||r===s?(tt(t,2+(a?1:0),3),ot(t,M,Z)):(tt(t,4+(a?1:0),3),((t,e,i,a)=>{let s;for(tt(t,e-257,5),tt(t,i-1,5),tt(t,a-4,4),s=0;s<a;s++)tt(t,t.bl_tree[2*N[s]+1],3);ct(t,t.dyn_ltree,e-1),ct(t,t.dyn_dtree,i-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),st(t),a&&rt(t)},gt={_tr_init:t=>{ut||((()=>{let t,e,i,a,s;const r=new Array(16);for(i=0,a=0;a<28;a++)for(W[a]=i,t=0;t<1<<$[a];t++)V[i++]=a;for(V[i-1]=a,s=0,a=0;a<16;a++)for(j[a]=s,t=0;t<1<<P[a];t++)H[s++]=a;for(s>>=7;a<C;a++)for(j[a]=s<<7,t=0;t<1<<P[a]-7;t++)H[256+s++]=a;for(e=0;e<=T;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(at(M,287,r),t=0;t<C;t++)Z[2*t+1]=5,Z[2*t]=it(t,5);K=new G(M,$,257,A,T),Y=new G(Z,P,0,C,T),J=new G(new Array(0),L,0,19,7)})(),ut=!0),t.l_desc=new q(t.dyn_ltree,K),t.d_desc=new q(t.dyn_dtree,Y),t.bl_desc=new q(t.bl_tree,J),t.bi_buf=0,t.bi_valid=0,st(t)},_tr_stored_block:_t,_tr_flush_block:ft,_tr_tally:(t,e,i)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(V[i]+E+1)]++,t.dyn_dtree[2*X(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var wt=(t,e,i,a)=>{let s=65535&t,r=t>>>16&65535,n=0;for(;0!==i;){n=i>2e3?2e3:i,i-=n;do{s=s+e[a++]|0,r=r+s|0}while(--n);s%=65521,r%=65521}return s|r<<16};const pt=new Uint32Array((()=>{let t,e=[];for(var i=0;i<256;i++){t=i;for(var a=0;a<8;a++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e})());var mt=(t,e,i,a)=>{const s=pt,r=a+i;t^=-1;for(let i=a;i<r;i++)t=t>>>8^s[255&(t^e[i])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:St,_tr_stored_block:vt,_tr_flush_block:Bt,_tr_tally:kt,_tr_align:Rt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:Ut,Z_FULL_FLUSH:It,Z_FINISH:zt,Z_BLOCK:Ft,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Ct,Z_DEFAULT_COMPRESSION:Tt,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,Wt=262,jt=42,Gt=113,Kt=666,Yt=(t,e)=>(t.msg=yt[e],e),Jt=t=>2*t-(t>4?9:0),qt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Xt=t=>{let e,i,a,s=t.w_size;e=t.hash_size,a=e;do{i=t.head[--a],t.head[a]=i>=s?i-s:0}while(--e);e=s,a=e;do{i=t.prev[--a],t.prev[a]=i>=s?i-s:0}while(--e)};let Qt=(t,e,i)=>(e<<t.hash_shift^i)&t.hash_mask;const te=t=>{const e=t.state;let i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+i),t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ie=(t,e)=>{t.pending_buf[t.pending++]=e},ae=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},se=(t,e,i,a)=>{let s=t.avail_in;return s>a&&(s=a),0===s?0:(t.avail_in-=s,e.set(t.input.subarray(t.next_in,t.next_in+s),i),1===t.state.wrap?t.adler=wt(t.adler,e,s,i):2===t.state.wrap&&(t.adler=mt(t.adler,e,s,i)),t.next_in+=s,t.total_in+=s,s)},re=(t,e)=>{let i,a,s=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-Wt?t.strstart-(t.w_size-Wt):0,l=t.window,d=t.w_mask,c=t.prev,u=t.strstart+Vt;let _=l[r+n-1],f=l[r+n];t.prev_length>=t.good_match&&(s>>=2),h>t.lookahead&&(h=t.lookahead);do{if(i=e,l[i+n]===f&&l[i+n-1]===_&&l[i]===l[r]&&l[++i]===l[r+1]){r+=2,i++;do{}while(l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&r<u);if(a=Vt-(u-r),r=u-Vt,a>n){if(t.match_start=e,n=a,a>=h)break;_=l[r+n-1],f=l[r+n]}}}while((e=c[e&d])>o&&0!==--s);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let i,a,s;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Wt)&&(t.window.set(t.window.subarray(e,e+e-a),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Xt(t),a+=e),0===t.strm.avail_in)break;if(i=se(t.strm,t.window,t.strstart+t.lookahead,a),t.lookahead+=i,t.lookahead+t.insert>=3)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=Qt(t,t.ins_h,t.window[s+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[s+3-1]),t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Wt&&0!==t.strm.avail_in)},he=(t,e)=>{let i,a,s,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(i=65535,s=t.bi_valid+42>>3,t.strm.avail_out<s)break;if(s=t.strm.avail_out-s,a=t.strstart-t.block_start,i>a+t.strm.avail_in&&(i=a+t.strm.avail_in),i>s&&(i=s),i<r&&(0===i&&e!==zt||e===xt||i!==a+t.strm.avail_in))break;n=e===zt&&i===a+t.strm.avail_in?1:0,vt(t,0,0,n),t.pending_buf[t.pending-4]=i,t.pending_buf[t.pending-3]=i>>8,t.pending_buf[t.pending-2]=~i,t.pending_buf[t.pending-1]=~i>>8,te(t.strm),a&&(a>i&&(a=i),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+a),t.strm.next_out),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a,t.block_start+=a,i-=a),i&&(se(t.strm,t.strm.output,t.strm.next_out,i),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==zt&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(s=t.window_size-t.strstart,t.strm.avail_in>s&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(se(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water<t.strstart&&(t.high_water=t.strstart),s=t.bi_valid+42>>3,s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s,r=s>t.w_size?t.w_size:s,a=t.strstart-t.block_start,(a>=r||(a||e===zt)&&e!==xt&&0===t.strm.avail_in&&a<=s)&&(i=a>s?s:a,n=e===zt&&0===t.strm.avail_in&&i===a?1:0,vt(t,t.block_start,i,n),t.block_start+=i,te(t.strm)),n?3:1)},oe=(t,e)=>{let i,a;for(;;){if(t.lookahead<Wt){if(ne(t),t.lookahead<Wt&&e===xt)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==i&&t.strstart-i<=t.w_size-Wt&&(t.match_length=re(t,i)),t.match_length>=3)if(a=kt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else a=kt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let i,a,s;for(;;){if(t.lookahead<Wt){if(ne(t),t.lookahead<Wt&&e===xt)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==i&&t.prev_length<t.max_lazy_match&&t.strstart-i<=t.w_size-Wt&&(t.match_length=re(t,i),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){s=t.strstart+t.lookahead-3,a=kt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=s&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(a=kt(t,0,t.window[t.strstart-1]),a&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(a=kt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,i,a,s){this.good_length=t,this.max_lazy=e,this.nice_length=i,this.max_chain=a,this.func=s}const ce=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function ue(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),qt(this.dyn_ltree),qt(this.dyn_dtree),qt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),qt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),qt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const _e=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==jt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Gt&&e.status!==Kt?1:0},fe=t=>{if(_e(t))return Yt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?jt:Gt,t.adler=2===e.wrap?0:1,e.last_flush=-2,St(e),Ot},ge=t=>{const e=fe(t);var i;return e===Ot&&((i=t.state).window_size=2*i.w_size,qt(i.head),i.max_lazy_match=ce[i.level].max_lazy,i.good_match=ce[i.level].good_length,i.nice_match=ce[i.level].nice_length,i.max_chain_length=ce[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),e},we=(t,e,i,a,s,r)=>{if(!t)return Et;let n=1;if(e===Tt&&(e=6),a<0?(n=0,a=-a):a>15&&(n=2,a-=16),s<1||s>9||i!==Ht||a<8||a>15||e<0||e>9||r<0||r>Nt||8===a&&1!==n)return Yt(t,Et);8===a&&(a=9);const h=new ue;return t.state=h,h.strm=t,h.status=jt,h.wrap=n,h.gzhead=null,h.w_bits=a,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=s+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<s+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=i,ge(t)};var pe={deflateInit:(t,e)=>we(t,e,Ht,15,8,Mt),deflateInit2:we,deflateReset:ge,deflateResetKeep:fe,deflateSetHeader:(t,e)=>_e(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(_e(t)||e>Ft||e<0)return t?Yt(t,Et):Et;const i=t.state;if(!t.output||0!==t.avail_in&&!t.input||i.status===Kt&&e!==zt)return Yt(t,0===t.avail_out?Ct:Et);const a=i.last_flush;if(i.last_flush=e,0!==i.pending){if(te(t),0===t.avail_out)return i.last_flush=-1,Ot}else if(0===t.avail_in&&Jt(e)<=Jt(a)&&e!==zt)return Yt(t,Ct);if(i.status===Kt&&0!==t.avail_in)return Yt(t,Ct);if(i.status===jt&&0===i.wrap&&(i.status=Gt),i.status===jt){let e=Ht+(i.w_bits-8<<4)<<8,a=-1;if(a=i.strategy>=Pt||i.level<2?0:i.level<6?1:6===i.level?2:3,e|=a<<6,0!==i.strstart&&(e|=32),e+=31-e%31,ae(i,e),0!==i.strstart&&(ae(i,t.adler>>>16),ae(i,65535&t.adler)),t.adler=1,i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot}if(57===i.status)if(t.adler=0,ie(i,31),ie(i,139),ie(i,8),i.gzhead)ie(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),ie(i,255&i.gzhead.time),ie(i,i.gzhead.time>>8&255),ie(i,i.gzhead.time>>16&255),ie(i,i.gzhead.time>>24&255),ie(i,9===i.level?2:i.strategy>=Pt||i.level<2?4:0),ie(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(ie(i,255&i.gzhead.extra.length),ie(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=mt(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(ie(i,0),ie(i,0),ie(i,0),ie(i,0),ie(i,0),ie(i,9===i.level?2:i.strategy>=Pt||i.level<2?4:0),ie(i,3),i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot;if(69===i.status){if(i.gzhead.extra){let e=i.pending,a=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+a>i.pending_buf_size;){let s=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+s),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>e&&(t.adler=mt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex+=s,te(t),0!==i.pending)return i.last_flush=-1,Ot;e=0,a-=s}let s=new Uint8Array(i.gzhead.extra);i.pending_buf.set(s.subarray(i.gzindex,i.gzindex+a),i.pending),i.pending+=a,i.gzhead.hcrc&&i.pending>e&&(t.adler=mt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),te(t),0!==i.pending)return i.last_flush=-1,Ot;a=0}e=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,ie(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),te(t),0!==i.pending)return i.last_flush=-1,Ot;a=0}e=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,ie(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(te(t),0!==i.pending))return i.last_flush=-1,Ot;ie(i,255&t.adler),ie(i,t.adler>>8&255),t.adler=0}if(i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot}if(0!==t.avail_in||0!==i.lookahead||e!==xt&&i.status!==Kt){let a=0===i.level?he(i,e):i.strategy===Pt?((t,e)=>{let i;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,i=kt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(i,e):i.strategy===Lt?((t,e)=>{let i,a,s,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(s=t.strstart-1,a=n[s],a===n[++s]&&a===n[++s]&&a===n[++s])){r=t.strstart+Vt;do{}while(a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&s<r);t.match_length=Vt-(r-s),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=kt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=kt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(i,e):ce[i.level].func(i,e);if(3!==a&&4!==a||(i.status=Kt),1===a||3===a)return 0===t.avail_out&&(i.last_flush=-1),Ot;if(2===a&&(e===Ut?Rt(i):e!==Ft&&(vt(i,0,0,!1),e===It&&(qt(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),te(t),0===t.avail_out))return i.last_flush=-1,Ot}return e!==zt?Ot:i.wrap<=0?Dt:(2===i.wrap?(ie(i,255&t.adler),ie(i,t.adler>>8&255),ie(i,t.adler>>16&255),ie(i,t.adler>>24&255),ie(i,255&t.total_in),ie(i,t.total_in>>8&255),ie(i,t.total_in>>16&255),ie(i,t.total_in>>24&255)):(ae(i,t.adler>>>16),ae(i,65535&t.adler)),te(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?Ot:Dt)},deflateEnd:t=>{if(_e(t))return Et;const e=t.state.status;return t.state=null,e===Gt?Yt(t,At):Ot},deflateSetDictionary:(t,e)=>{let i=e.length;if(_e(t))return Et;const a=t.state,s=a.wrap;if(2===s||1===s&&a.status!==jt||a.lookahead)return Et;if(1===s&&(t.adler=wt(t.adler,e,i,0)),a.wrap=0,i>=a.w_size){0===s&&(qt(a.head),a.strstart=0,a.block_start=0,a.insert=0);let t=new Uint8Array(a.w_size);t.set(e.subarray(i-a.w_size,i),0),e=t,i=a.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=i,t.next_in=0,t.input=e,ne(a);a.lookahead>=3;){let t=a.strstart,e=a.lookahead-2;do{a.ins_h=Qt(a,a.ins_h,a.window[t+3-1]),a.prev[t&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=t,t++}while(--e);a.strstart=t,a.lookahead=2,ne(a)}return a.strstart+=a.lookahead,a.block_start=a.strstart,a.insert=a.lookahead,a.lookahead=0,a.match_length=a.prev_length=2,a.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,a.wrap=s,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const me=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const i=e.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const e in i)me(i,e)&&(t[e]=i[e])}}return t},be=t=>{let e=0;for(let i=0,a=t.length;i<a;i++)e+=t[i].length;const i=new Uint8Array(e);for(let e=0,a=0,s=t.length;e<s;e++){let s=t[e];i.set(s,a),a+=s.length}return i};let Se=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Se=!1}const ve=new Uint8Array(256);for(let t=0;t<256;t++)ve[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ve[254]=ve[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,i,a,s,r,n=t.length,h=0;for(s=0;s<n;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),h+=i<128?1:i<2048?2:i<65536?3:4;for(e=new Uint8Array(h),r=0,s=0;r<h;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),i<128?e[r++]=i:i<2048?(e[r++]=192|i>>>6,e[r++]=128|63&i):i<65536?(e[r++]=224|i>>>12,e[r++]=128|i>>>6&63,e[r++]=128|63&i):(e[r++]=240|i>>>18,e[r++]=128|i>>>12&63,e[r++]=128|i>>>6&63,e[r++]=128|63&i);return e};var ke=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const Re=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:Ue,Z_FULL_FLUSH:Ie,Z_FINISH:ze,Z_OK:Fe,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Ce(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new ke,this.strm.avail_out=0;let i=pe.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(i!==Fe)throw new Error(yt[i]);if(e.header&&pe.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===Re.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,i=pe.deflateSetDictionary(this.strm,t),i!==Fe)throw new Error(yt[i]);this._dict_set=!0}}Ce.prototype.push=function(t,e){const i=this.strm,a=this.options.chunkSize;let s,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?ze:xe,"string"==typeof t?i.input=Be(t):"[object ArrayBuffer]"===Re.call(t)?i.input=new Uint8Array(t):i.input=t,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(a),i.next_out=0,i.avail_out=a),(r===Ue||r===Ie)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(s=pe.deflate(i,r),s===Oe)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),s=pe.deflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===Fe;if(0!==i.avail_out){if(r>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},Ce.prototype.onData=function(t){this.chunks.push(t)},Ce.prototype.onEnd=function(t){t===Fe&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Te={deflate:function(t,e){const i=new Ce(e);if(i.push(t,!0),i.err)throw i.msg||yt[i.err];return i.result}};const{deflate:$e}=Te;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let i=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const a=[];let s=!0;for(let a=0;a<t.length;a++)"<"==t[a]?s=!0:">"==t[a]?s=!1:(r(t[a],e[i]),i++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const i=Le[t].bytes,r=new DataView(new ArrayBuffer(i));Le[t].p.bind(r)(0,e,s);for(let t=0;t<i;t++)a.push(r.getUint8(t))}return a},Me=(t,e)=>{let i=0;const a=[];let s=!0;for(const e of t)"<"==e?s=!0:">"==e?s=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[i+t]);const h=Le[t].u.bind(n);a.push(h(0,s)),i+=r}return a};class Ze extends EventTarget{constructor(t,e,i){super(),this.port=t,this.logger=e,this._parent=i,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.__commandLock=Promise.resolve([0,[]]),this._isReconfiguring=!1,this.state_DTR=!1,this.__writeChain=Promise.resolve()}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}get _commandLock(){return this._parent?this._parent._commandLock:this.__commandLock}set _commandLock(t){this._parent?this._parent._commandLock=t:this.__commandLock=t}detectUSBSerialChip(t,e){const i={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return i&&i[e]?i[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.connectWithResetStrategies(),await this.detectChip();const t=z(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),await this.drainInputBuffer(200),this._inputBuffer.length=0,await s(U);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=k[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${a(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${a(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==S)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:i}=await this._reader.read();if(i){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const a=Array.from(e);Array.prototype.push.apply(this._inputBuffer,a),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.hardResetUSBJTAGSerial(),this.logger.log("USB-JTAG/Serial reset.")):(await this.hardResetClassic(),this.logger.log("Classic reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],i=this._efuses[1],a=this._efuses[2],s=this._efuses[3];let r;if(this.chipFamily==l){if(0!=s)r=[s>>16&255,s>>8&255,255&s];else if(i>>16&255){if(1!=(i>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=i>>8&255,t[4]=255&i,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=a>>8&255,t[1]=255&a,t[2]=i>>24&255,t[3]=i>>16&255,t[4]=i>>8&255,t[5]=255&i;else{if(this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=i>>8&255,t[1]=255&i,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+a(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[i]=await this.getResponse(10);return i}async checkCommand(t,e,i=0,s=3e3){const r=async()=>{s=Math.min(s,3e5),await this.sendCommand(t,e,i);const[r,n]=await this.getResponse(t,s);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,c,u,_,f,g,w,p,m,y,b,S,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+a(t))):new Error("Command failure error code "+a(B[1]));return[r,h]};return this._commandLock=this._commandLock.then(r,r),this._commandLock}async sendCommand(e,i,a=0){const s=t([...Ne("<BBHI",0,e,i.length,a),...i]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let e=null,r=!1;const n=Date.now();for(;;){if(Date.now()-n>t){throw new F("Timed out waiting for packet "+(null===e?"header":"content"))}if(0!==this._inputBuffer.length)for(;this._inputBuffer.length>0;){const t=this._inputBuffer.shift();if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new F("Invalid head of packet ("+a(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new F("Invalid SLIP escape (0xdb, "+a(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+i(e)),e;e.push(t)}}else await s(1)}}async getResponse(t,e=3e3){for(let i=0;i<100;i++){const i=await this.readPacket(e);if(i.length<8)continue;const[s,r,,n]=Me("<BBHI",i.slice(0,8));if(1!=s)continue;const h=i.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${a(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const i of t)e^=i;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await s(U),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{this._isReconfiguring=!0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconfigure: ${t}`)}if(this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconfigure: ${t}`)}this._writer=void 0}await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}finally{this._isReconfiguring=!1}}async connectWithResetStrategies(){var t,e;const i=this.port.getInfo(),a=4097===i.usbProductId,s=12346===i.usbVendorId;this.logger.log(`Detected USB: VID=0x${(null===(t=i.usbVendorId)||void 0===t?void 0:t.toString(16))||"unknown"}, PID=0x${(null===(e=i.usbProductId)||void 0===e?void 0:e.toString(16))||"unknown"}`);const r=[];(a||s)&&r.push({name:"USB-JTAG/Serial",fn:async()=>await this.hardResetUSBJTAGSerial()}),r.push({name:"Classic",fn:async()=>await this.hardResetClassic()}),a||s||r.push({name:"USB-JTAG/Serial (fallback)",fn:async()=>await this.hardResetUSBJTAGSerial()});let n=null;for(const t of r)try{if(this.logger.log(`Trying ${t.name} reset...`),!this.connected||!this.port.writable){this.logger.log(`Port disconnected, skipping ${t.name} reset`);continue}return await t.fn(),await this.sync(),void this.logger.log(`Connected successfully with ${t.name} reset.`)}catch(e){if(n=e,this.logger.log(`${t.name} reset failed: ${e.message}`),!this.connected||!this.port.writable){this.logger.log("Port disconnected during reset attempt");break}this._inputBuffer.length=0,await this.drainInputBuffer(200),await this.flushSerialBuffers()}throw new Error(`Couldn't sync to ESP. Try resetting manually. Last error: ${null==n?void 0:n.message}`)}async hardResetUSBJTAGSerial(){await this.setRTS(!1),await this.setDTR(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),await this.sleep(200)}async hardResetClassic(){await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),await this.sleep(200)}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await s(U),!0;await s(U)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,U);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,i=0,s=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),i=e[0],s=e[2],r=e[3];this.logger.log(`Image header, Magic=${a(i)}, FlashMode=${a(s)}, FlashSizeFreq=${a(r)}`)}const r=t.byteLength;let n,h=0,o=R;s?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,i)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,i));let l=[],d=0,c=0,u=0;const _=Date.now(),f=this.getFlashWriteSize(),g=s?h:r;for(;g-u>0;)this.debug&&this.logger.log(`Writing at ${a(i+d*f,8)} `),g-u>=f?l=Array.from(new Uint8Array(n,u,f)):(l=Array.from(new Uint8Array(n,u,g-u)),s||(l=l.concat(new Array(f-l.length).fill(255)))),s?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,c+=s?Math.round(l.length*r/h):l.length,u+=f,e(Math.min(c,r),r);this.logger.log("Took "+(Date.now()-_)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),s?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,i=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashDeflBlock(t,e,i=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashBegin(t=0,e=0,i=!1){let s;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,c,u,_,f,g,w,p,m,y,b,S,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);s=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?R:I(3e4,t),o=Date.now();let B=Ne("<IIII",s,n,r,e);return this.chipFamily!=d&&this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v||(B=B.concat(Ne("<I",i?1:0))),this.logger.log("Erase size "+s+", blocks "+n+", block size "+a(r,4)+", offset "+a(e,4)+", encrypted "+(i?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,i=0){const a=this.getFlashWriteSize(),s=Math.floor((e+a-1)/a),r=Math.floor((t+a-1)/a);let n=0,h=0;this.IS_STUB?(n=t,h=I(3e4,n)):(n=r*a,h=R);const o=Ne("<IIII",n,s,a,i);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return z(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,i=4294967295,a=0,s=0){let r=Ne("<IIII",t,e,i,a);s>0&&(r=r.concat(Ne("<IIII",z(this.getChipFamily()).uartDateReg,0,0,s))),await this.checkCommand(9,r)}async setDataLengths(t,e,i){if(-1!=t.mosiDlenOffs){const a=t.regBase+t.mosiDlenOffs,s=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(a,e-1),i>0&&await this.writeRegister(s,i-1)}else{const a=t.regBase+t.usr1Offs,s=(0==i?0:i-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(a,s)}}async waitDone(t,e){for(let i=0;i<10;i++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,i=0){const s=z(this.getChipFamily()),r=s.regBase,n=r,h=r+s.usrOffs,o=r+s.usr2Offs,l=r+s.w0Offs,d=1<<18;if(i>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const c=8*e.length,u=await this.readRegister(h),_=await this.readRegister(o);let f=1<<31;if(i>0&&(f|=268435456),c>0&&(f|=134217728),await this.setDataLengths(s,c,i),await this.writeRegister(h,f),await this.writeRegister(o,7<<28|t),0==c)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const i=Me("I".repeat(Math.floor(e.length/4)),e);let s=l;this.logger.debug(`Words Length: ${i.length}`);for(const t of i)this.logger.debug(`Writing word ${a(t)} to register offset ${a(s)}`),await this.writeRegister(s,t),s+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,u),await this.writeRegister(o,_),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,i=t>>16&255;this.logger.log(`FlashId: ${a(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${i.toString(16)}`),this.flashSize=r[i],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const i=4096,a=Math.floor((e+i-1)/i);let s=16-Math.floor(t/i)%16;return a<s&&(s=a),a<2*s?Math.floor((a+1)/2*i):(a-s)*i}async memBegin(t,e,i,a){return await this.checkCommand(5,Ne("<IIII",t,e,i,a))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?R:500,i=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,i,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const i=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const a=e[t],s=e[`${t}_start`],r=a.length,n=Math.floor((r+i-1)/i);await this.memBegin(r,n,i,s);for(const t of Array(n).keys()){const e=t*i;let s=e+i;s>r&&(s=r),await this.memBlock(a.slice(e,s),t)}}await this.memFinish(e.entry);const a=await this.readPacket(500),s=String.fromCharCode(...a);if("OHAI"!=s)throw new Error("Failed to start stub. Unexpected response: "+s);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}get _writer(){return this._parent?this._parent._writer:this.__writer}set _writer(t){this._parent?this._parent._writer=t:this.__writer=t}get _writeChain(){return this._parent?this._parent._writeChain:this.__writeChain}set _writeChain(t){this._parent?this._parent._writeChain=t:this.__writeChain=t}async writeToStream(t){if(this.port.writable){if(this._isReconfiguring)throw new Error("Cannot write during port reconfiguration");this._writeChain=this._writeChain.then(async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.error(`Failed to get writer: ${t}`),t}await this._writer.write(new Uint8Array(t))},async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");this._writer||(this._writer=this.port.writable.getWriter()),await this._writer.write(new Uint8Array(t))}).catch(t=>{if(this.logger.error(`Write error: ${t}`),this._writer){try{this._writer.releaseLock()}catch(t){}this._writer=void 0}throw t}),await this._writeChain}else this.logger.debug("Port writable stream not available, skipping write")}async disconnect(){if(this._parent)await this._parent.disconnect();else if(this.port.writable)try{this._isReconfiguring=!0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during disconnect: ${t}`)}if(this._writer){try{await this._writer.close(),this._writer.releaseLock()}catch(t){this.logger.debug(`Writer close/release error: ${t}`)}this._writer=void 0}else try{const t=this.port.writable.getWriter();await t.close(),t.releaseLock()}catch(t){this.logger.debug(`Direct writer close error: ${t}`)}await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1}finally{this._isReconfiguring=!1}else this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)await this._parent.reconnect();else try{this._isReconfiguring=!0,this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[];try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,i=this.chipRevision,a=this.chipVariant,s=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=i,this.chipVariant=a,this.flashSize=s,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}finally{this._isReconfiguring=!1}}async drainInputBuffer(t=200){await s(t);let e=0;const i=Date.now();for(;e<112&&Date.now()-i<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await s(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await s(U),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,i,a){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${i} bytes from flash at address 0x${e.toString(16)}...`);let r=new Uint8Array(0),n=e,h=i;for(;h>0;){const e=Math.min(65536,h);let o=!1,l=0;const d=15;for(;!o&&l<=d;){let i=new Uint8Array(0);try{0===l&&this.logger.debug(`Reading chunk at 0x${n.toString(16)}, size: 0x${e.toString(16)}`);const a=Ne("<IIII",n,e,4096,1024),[h]=await this.checkCommand(210,a);if(0!=h)throw new Error("Failed to read memory: "+h);for(;i.length<e;){let a;try{a=await this.readPacket(100)}catch(t){if(t instanceof F){this.logger.debug(`SLIP read error at ${i.length} bytes: ${t.message}`);try{const t=[192,192];await this.writeToStream(t),this.logger.debug("Sent abort frame to stub"),await s(50)}catch(t){this.logger.debug(`Abort frame error: ${t}`)}if(await this.drainInputBuffer(200),i.length>=e)break}throw t}if(a&&a.length>0){const e=new Uint8Array(a),s=new Uint8Array(i.length+e.length);s.set(i),s.set(e,i.length),i=s;const r=Ne("<I",i.length),n=t(r);await this.writeToStream(n)}}const d=new Uint8Array(r.length+i.length);d.set(r),d.set(i,r.length),r=d,o=!0}catch(t){if(l++,!(t instanceof F))throw t;if(!(l<=d))throw new Error(`Failed to read chunk at 0x${n.toString(16)} after ${d} retries: ${t}`);this.logger.log(`${t.message} at 0x${n.toString(16)}. Draining buffer and retrying (attempt ${l}/${d})...`);try{await this.drainInputBuffer(200),await this.flushSerialBuffers(),await s(U)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}}a&&a(new Uint8Array(e),r.length,i),n+=e,h-=e,this.logger.debug(`Total progress: 0x${r.length.toString(16)} from 0x${i.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${r.length} bytes from flash`),r}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,i,s){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=s,h=s+t;this.logger.debug(`Load range: ${a(n,8)}-${a(h,8)}`),this.logger.debug(`Stub data: ${a(r.data_start,8)}, len: ${r.data.length}, text: ${a(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+a(t,8)+"-"+a(e,8)+". Can't load binary at overlapping address range "+a(n,8)+"-"+a(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,_ as CHIP_FAMILY_ESP32C2,f as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,w as CHIP_FAMILY_ESP32C6,p as CHIP_FAMILY_ESP32C61,m as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,S as CHIP_FAMILY_ESP32P4,c as CHIP_FAMILY_ESP32S2,u as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
|
|
1
|
+
const t=t=>{let e=[192];for(const i of t)219==i?e=e.concat([219,221]):192==i?e=e.concat([219,220]):e.push(i);return e.push(192),e},e=t=>{const e=[];for(let i=0;i<t.length;i++){const a=t.charCodeAt(i);a<=255&&e.push(a)}return e},i=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{const i=t.toString(16).toUpperCase();return i.startsWith("-")?"-0x"+i.substring(1).padStart(e,"0"):"0x"+i.padStart(e,"0")},s=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,c=12882,u=12883,_=12994,f=12995,g=12997,w=12998,p=207969,m=12914,y=12916,b=12917,S=12928,v=12849,B={5:{name:"ESP32-C3",family:f},9:{name:"ESP32-S3",family:u},12:{name:"ESP32-C2",family:_},13:{name:"ESP32-C6",family:w},16:{name:"ESP32-H2",family:m},18:{name:"ESP32-P4",family:S},20:{name:"ESP32-C61",family:p},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:v}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:c}},k=3e3,x=15e4,U=100,I=(t,e)=>{const i=Math.floor(t*(e/486));return i<k?k:i},F=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case c:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case _:case f:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case p:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case v:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class z extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,i)=>{let a;return t==y||t==b||t==v?null:(t==d?a=await import("./esp32-BRKoi17y.js"):t==c?a=await import("./esp32s2-iX3WoDbg.js"):t==u?a=await import("./esp32s3-DGwDVIgz.js"):t==l?a=await import("./esp8266-CUwxJpGa.js"):t==_?a=await import("./esp32c2-Btgr_lwh.js"):t==f?a=await import("./esp32c3-CHKfoI8W.js"):t==g?a=await import("./esp32c5-BDW4KtLo.js"):t==w?a=await import("./esp32c6-il8tTxAG.js"):t==p?a=await import("./esp32c61-thKzxBGf.js"):t==m?a=await import("./esp32h2-CxoUHv_P.js"):t==S&&(a=null!=i&&i>=300?await import("./esp32p4r3-CqI71ojR.js"):await import("./esp32p4-D3jLP-jY.js")),{...a,text:e(atob(a.text)),data:e(atob(a.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,C=30,$=15,T=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),P=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const W=new Array(29);D(W);const j=new Array(C);function G(t,e,i,a,s){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=a,this.max_length=s,this.has_stree=t&&t.length}let K,Y,J;function q(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(j);const X=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,i)=>{t.bi_valid>16-i?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=i)},et=(t,e,i)=>{tt(t,i[2*e],i[2*e+1])},it=(t,e)=>{let i=0;do{i|=1&t,t>>>=1,i<<=1}while(--e>0);return i>>>1},at=(t,e,i)=>{const a=new Array(16);let s,r,n=0;for(s=1;s<=$;s++)n=n+i[s-1]<<1,a[s]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=it(a[e]++,e))}},st=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<C;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,i,a)=>{const s=2*e,r=2*i;return t[s]<t[r]||t[s]===t[r]&&a[e]<=a[i]},ht=(t,e,i)=>{const a=t.heap[i];let s=i<<1;for(;s<=t.heap_len&&(s<t.heap_len&&nt(e,t.heap[s+1],t.heap[s],t.depth)&&s++,!nt(e,a,t.heap[s],t.depth));)t.heap[i]=t.heap[s],i=s,s<<=1;t.heap[i]=a},ot=(t,e,i)=>{let a,s,r,n,h=0;if(0!==t.sym_next)do{a=255&t.pending_buf[t.sym_buf+h++],a+=(255&t.pending_buf[t.sym_buf+h++])<<8,s=t.pending_buf[t.sym_buf+h++],0===a?et(t,s,e):(r=V[s],et(t,r+E+1,e),n=T[r],0!==n&&(s-=W[r],tt(t,s,n)),a--,r=X(a),et(t,r,i),n=P[r],0!==n&&(a-=j[r],tt(t,a,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const i=e.dyn_tree,a=e.stat_desc.static_tree,s=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==i[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):i[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,i[2*o]=1,t.depth[o]=0,t.opt_len--,s&&(t.static_len-=a[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,i,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,i,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,i[2*o]=i[2*n]+i[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,i[2*n+1]=i[2*h+1]=o,t.heap[1]=o++,ht(t,i,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const i=e.dyn_tree,a=e.max_code,s=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,c,u,_,f,g=0;for(u=0;u<=$;u++)t.bl_count[u]=0;for(i[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],u=i[2*i[2*d+1]+1]+1,u>o&&(u=o,g++),i[2*d+1]=u,d>a||(t.bl_count[u]++,_=0,d>=h&&(_=n[d-h]),f=i[2*d],t.opt_len+=f*(u+_),r&&(t.static_len+=f*(s[2*d+1]+_)));if(0!==g){do{for(u=o-1;0===t.bl_count[u];)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(u=o;0!==u;u--)for(d=t.bl_count[u];0!==d;)c=t.heap[--l],c>a||(i[2*c+1]!==u&&(t.opt_len+=(u-i[2*c+1])*i[2*c],i[2*c+1]=u),d--)}})(t,e),at(i,l,t.bl_count)},dt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(i+1)+1]=65535,a=0;a<=i;a++)s=n,n=e[2*(a+1)+1],++h<o&&s===n||(h<l?t.bl_tree[2*s]+=h:0!==s?(s!==r&&t.bl_tree[2*s]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4))},ct=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),a=0;a<=i;a++)if(s=n,n=e[2*(a+1)+1],!(++h<o&&s===n)){if(h<l)do{et(t,s,t.bl_tree)}while(0!==--h);else 0!==s?(s!==r&&(et(t,s,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4)}};let ut=!1;const _t=(t,e,i,a)=>{tt(t,0+(a?1:0),3),rt(t),Q(t,i),Q(t,~i),i&&t.pending_buf.set(t.window.subarray(e,e+i),t.pending),t.pending+=i};var ft=(t,e,i,a)=>{let s,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),s=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=s&&(s=r)):s=r=i+5,i+4<=s&&-1!==e?_t(t,e,i,a):4===t.strategy||r===s?(tt(t,2+(a?1:0),3),ot(t,M,Z)):(tt(t,4+(a?1:0),3),((t,e,i,a)=>{let s;for(tt(t,e-257,5),tt(t,i-1,5),tt(t,a-4,4),s=0;s<a;s++)tt(t,t.bl_tree[2*N[s]+1],3);ct(t,t.dyn_ltree,e-1),ct(t,t.dyn_dtree,i-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),st(t),a&&rt(t)},gt={_tr_init:t=>{ut||((()=>{let t,e,i,a,s;const r=new Array(16);for(i=0,a=0;a<28;a++)for(W[a]=i,t=0;t<1<<T[a];t++)V[i++]=a;for(V[i-1]=a,s=0,a=0;a<16;a++)for(j[a]=s,t=0;t<1<<P[a];t++)H[s++]=a;for(s>>=7;a<C;a++)for(j[a]=s<<7,t=0;t<1<<P[a]-7;t++)H[256+s++]=a;for(e=0;e<=$;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(at(M,287,r),t=0;t<C;t++)Z[2*t+1]=5,Z[2*t]=it(t,5);K=new G(M,T,257,A,$),Y=new G(Z,P,0,C,$),J=new G(new Array(0),L,0,19,7)})(),ut=!0),t.l_desc=new q(t.dyn_ltree,K),t.d_desc=new q(t.dyn_dtree,Y),t.bl_desc=new q(t.bl_tree,J),t.bi_buf=0,t.bi_valid=0,st(t)},_tr_stored_block:_t,_tr_flush_block:ft,_tr_tally:(t,e,i)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(V[i]+E+1)]++,t.dyn_dtree[2*X(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var wt=(t,e,i,a)=>{let s=65535&t,r=t>>>16&65535,n=0;for(;0!==i;){n=i>2e3?2e3:i,i-=n;do{s=s+e[a++]|0,r=r+s|0}while(--n);s%=65521,r%=65521}return s|r<<16};const pt=new Uint32Array((()=>{let t,e=[];for(var i=0;i<256;i++){t=i;for(var a=0;a<8;a++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e})());var mt=(t,e,i,a)=>{const s=pt,r=a+i;t^=-1;for(let i=a;i<r;i++)t=t>>>8^s[255&(t^e[i])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:St,_tr_stored_block:vt,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:Ut,Z_FULL_FLUSH:It,Z_FINISH:Ft,Z_BLOCK:zt,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Ct,Z_DEFAULT_COMPRESSION:$t,Z_FILTERED:Tt,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,Wt=262,jt=42,Gt=113,Kt=666,Yt=(t,e)=>(t.msg=yt[e],e),Jt=t=>2*t-(t>4?9:0),qt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Xt=t=>{let e,i,a,s=t.w_size;e=t.hash_size,a=e;do{i=t.head[--a],t.head[a]=i>=s?i-s:0}while(--e);e=s,a=e;do{i=t.prev[--a],t.prev[a]=i>=s?i-s:0}while(--e)};let Qt=(t,e,i)=>(e<<t.hash_shift^i)&t.hash_mask;const te=t=>{const e=t.state;let i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+i),t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ie=(t,e)=>{t.pending_buf[t.pending++]=e},ae=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},se=(t,e,i,a)=>{let s=t.avail_in;return s>a&&(s=a),0===s?0:(t.avail_in-=s,e.set(t.input.subarray(t.next_in,t.next_in+s),i),1===t.state.wrap?t.adler=wt(t.adler,e,s,i):2===t.state.wrap&&(t.adler=mt(t.adler,e,s,i)),t.next_in+=s,t.total_in+=s,s)},re=(t,e)=>{let i,a,s=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-Wt?t.strstart-(t.w_size-Wt):0,l=t.window,d=t.w_mask,c=t.prev,u=t.strstart+Vt;let _=l[r+n-1],f=l[r+n];t.prev_length>=t.good_match&&(s>>=2),h>t.lookahead&&(h=t.lookahead);do{if(i=e,l[i+n]===f&&l[i+n-1]===_&&l[i]===l[r]&&l[++i]===l[r+1]){r+=2,i++;do{}while(l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&r<u);if(a=Vt-(u-r),r=u-Vt,a>n){if(t.match_start=e,n=a,a>=h)break;_=l[r+n-1],f=l[r+n]}}}while((e=c[e&d])>o&&0!==--s);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let i,a,s;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Wt)&&(t.window.set(t.window.subarray(e,e+e-a),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Xt(t),a+=e),0===t.strm.avail_in)break;if(i=se(t.strm,t.window,t.strstart+t.lookahead,a),t.lookahead+=i,t.lookahead+t.insert>=3)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=Qt(t,t.ins_h,t.window[s+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[s+3-1]),t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Wt&&0!==t.strm.avail_in)},he=(t,e)=>{let i,a,s,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(i=65535,s=t.bi_valid+42>>3,t.strm.avail_out<s)break;if(s=t.strm.avail_out-s,a=t.strstart-t.block_start,i>a+t.strm.avail_in&&(i=a+t.strm.avail_in),i>s&&(i=s),i<r&&(0===i&&e!==Ft||e===xt||i!==a+t.strm.avail_in))break;n=e===Ft&&i===a+t.strm.avail_in?1:0,vt(t,0,0,n),t.pending_buf[t.pending-4]=i,t.pending_buf[t.pending-3]=i>>8,t.pending_buf[t.pending-2]=~i,t.pending_buf[t.pending-1]=~i>>8,te(t.strm),a&&(a>i&&(a=i),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+a),t.strm.next_out),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a,t.block_start+=a,i-=a),i&&(se(t.strm,t.strm.output,t.strm.next_out,i),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==Ft&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(s=t.window_size-t.strstart,t.strm.avail_in>s&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(se(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water<t.strstart&&(t.high_water=t.strstart),s=t.bi_valid+42>>3,s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s,r=s>t.w_size?t.w_size:s,a=t.strstart-t.block_start,(a>=r||(a||e===Ft)&&e!==xt&&0===t.strm.avail_in&&a<=s)&&(i=a>s?s:a,n=e===Ft&&0===t.strm.avail_in&&i===a?1:0,vt(t,t.block_start,i,n),t.block_start+=i,te(t.strm)),n?3:1)},oe=(t,e)=>{let i,a;for(;;){if(t.lookahead<Wt){if(ne(t),t.lookahead<Wt&&e===xt)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==i&&t.strstart-i<=t.w_size-Wt&&(t.match_length=re(t,i)),t.match_length>=3)if(a=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===Ft?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let i,a,s;for(;;){if(t.lookahead<Wt){if(ne(t),t.lookahead<Wt&&e===xt)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==i&&t.prev_length<t.max_lazy_match&&t.strstart-i<=t.w_size-Wt&&(t.match_length=re(t,i),t.match_length<=5&&(t.strategy===Tt||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){s=t.strstart+t.lookahead-3,a=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=s&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(a=Rt(t,0,t.window[t.strstart-1]),a&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(a=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===Ft?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,i,a,s){this.good_length=t,this.max_lazy=e,this.nice_length=i,this.max_chain=a,this.func=s}const ce=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function ue(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),qt(this.dyn_ltree),qt(this.dyn_dtree),qt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),qt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),qt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const _e=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==jt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Gt&&e.status!==Kt?1:0},fe=t=>{if(_e(t))return Yt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?jt:Gt,t.adler=2===e.wrap?0:1,e.last_flush=-2,St(e),Ot},ge=t=>{const e=fe(t);var i;return e===Ot&&((i=t.state).window_size=2*i.w_size,qt(i.head),i.max_lazy_match=ce[i.level].max_lazy,i.good_match=ce[i.level].good_length,i.nice_match=ce[i.level].nice_length,i.max_chain_length=ce[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),e},we=(t,e,i,a,s,r)=>{if(!t)return Et;let n=1;if(e===$t&&(e=6),a<0?(n=0,a=-a):a>15&&(n=2,a-=16),s<1||s>9||i!==Ht||a<8||a>15||e<0||e>9||r<0||r>Nt||8===a&&1!==n)return Yt(t,Et);8===a&&(a=9);const h=new ue;return t.state=h,h.strm=t,h.status=jt,h.wrap=n,h.gzhead=null,h.w_bits=a,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=s+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<s+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=i,ge(t)};var pe={deflateInit:(t,e)=>we(t,e,Ht,15,8,Mt),deflateInit2:we,deflateReset:ge,deflateResetKeep:fe,deflateSetHeader:(t,e)=>_e(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(_e(t)||e>zt||e<0)return t?Yt(t,Et):Et;const i=t.state;if(!t.output||0!==t.avail_in&&!t.input||i.status===Kt&&e!==Ft)return Yt(t,0===t.avail_out?Ct:Et);const a=i.last_flush;if(i.last_flush=e,0!==i.pending){if(te(t),0===t.avail_out)return i.last_flush=-1,Ot}else if(0===t.avail_in&&Jt(e)<=Jt(a)&&e!==Ft)return Yt(t,Ct);if(i.status===Kt&&0!==t.avail_in)return Yt(t,Ct);if(i.status===jt&&0===i.wrap&&(i.status=Gt),i.status===jt){let e=Ht+(i.w_bits-8<<4)<<8,a=-1;if(a=i.strategy>=Pt||i.level<2?0:i.level<6?1:6===i.level?2:3,e|=a<<6,0!==i.strstart&&(e|=32),e+=31-e%31,ae(i,e),0!==i.strstart&&(ae(i,t.adler>>>16),ae(i,65535&t.adler)),t.adler=1,i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot}if(57===i.status)if(t.adler=0,ie(i,31),ie(i,139),ie(i,8),i.gzhead)ie(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),ie(i,255&i.gzhead.time),ie(i,i.gzhead.time>>8&255),ie(i,i.gzhead.time>>16&255),ie(i,i.gzhead.time>>24&255),ie(i,9===i.level?2:i.strategy>=Pt||i.level<2?4:0),ie(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(ie(i,255&i.gzhead.extra.length),ie(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=mt(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(ie(i,0),ie(i,0),ie(i,0),ie(i,0),ie(i,0),ie(i,9===i.level?2:i.strategy>=Pt||i.level<2?4:0),ie(i,3),i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot;if(69===i.status){if(i.gzhead.extra){let e=i.pending,a=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+a>i.pending_buf_size;){let s=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+s),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>e&&(t.adler=mt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex+=s,te(t),0!==i.pending)return i.last_flush=-1,Ot;e=0,a-=s}let s=new Uint8Array(i.gzhead.extra);i.pending_buf.set(s.subarray(i.gzindex,i.gzindex+a),i.pending),i.pending+=a,i.gzhead.hcrc&&i.pending>e&&(t.adler=mt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),te(t),0!==i.pending)return i.last_flush=-1,Ot;a=0}e=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,ie(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),te(t),0!==i.pending)return i.last_flush=-1,Ot;a=0}e=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,ie(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(te(t),0!==i.pending))return i.last_flush=-1,Ot;ie(i,255&t.adler),ie(i,t.adler>>8&255),t.adler=0}if(i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot}if(0!==t.avail_in||0!==i.lookahead||e!==xt&&i.status!==Kt){let a=0===i.level?he(i,e):i.strategy===Pt?((t,e)=>{let i;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,i=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ft?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(i,e):i.strategy===Lt?((t,e)=>{let i,a,s,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(s=t.strstart-1,a=n[s],a===n[++s]&&a===n[++s]&&a===n[++s])){r=t.strstart+Vt;do{}while(a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&s<r);t.match_length=Vt-(r-s),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ft?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(i,e):ce[i.level].func(i,e);if(3!==a&&4!==a||(i.status=Kt),1===a||3===a)return 0===t.avail_out&&(i.last_flush=-1),Ot;if(2===a&&(e===Ut?kt(i):e!==zt&&(vt(i,0,0,!1),e===It&&(qt(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),te(t),0===t.avail_out))return i.last_flush=-1,Ot}return e!==Ft?Ot:i.wrap<=0?Dt:(2===i.wrap?(ie(i,255&t.adler),ie(i,t.adler>>8&255),ie(i,t.adler>>16&255),ie(i,t.adler>>24&255),ie(i,255&t.total_in),ie(i,t.total_in>>8&255),ie(i,t.total_in>>16&255),ie(i,t.total_in>>24&255)):(ae(i,t.adler>>>16),ae(i,65535&t.adler)),te(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?Ot:Dt)},deflateEnd:t=>{if(_e(t))return Et;const e=t.state.status;return t.state=null,e===Gt?Yt(t,At):Ot},deflateSetDictionary:(t,e)=>{let i=e.length;if(_e(t))return Et;const a=t.state,s=a.wrap;if(2===s||1===s&&a.status!==jt||a.lookahead)return Et;if(1===s&&(t.adler=wt(t.adler,e,i,0)),a.wrap=0,i>=a.w_size){0===s&&(qt(a.head),a.strstart=0,a.block_start=0,a.insert=0);let t=new Uint8Array(a.w_size);t.set(e.subarray(i-a.w_size,i),0),e=t,i=a.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=i,t.next_in=0,t.input=e,ne(a);a.lookahead>=3;){let t=a.strstart,e=a.lookahead-2;do{a.ins_h=Qt(a,a.ins_h,a.window[t+3-1]),a.prev[t&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=t,t++}while(--e);a.strstart=t,a.lookahead=2,ne(a)}return a.strstart+=a.lookahead,a.block_start=a.strstart,a.insert=a.lookahead,a.lookahead=0,a.match_length=a.prev_length=2,a.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,a.wrap=s,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const me=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const i=e.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const e in i)me(i,e)&&(t[e]=i[e])}}return t},be=t=>{let e=0;for(let i=0,a=t.length;i<a;i++)e+=t[i].length;const i=new Uint8Array(e);for(let e=0,a=0,s=t.length;e<s;e++){let s=t[e];i.set(s,a),a+=s.length}return i};let Se=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Se=!1}const ve=new Uint8Array(256);for(let t=0;t<256;t++)ve[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ve[254]=ve[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,i,a,s,r,n=t.length,h=0;for(s=0;s<n;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),h+=i<128?1:i<2048?2:i<65536?3:4;for(e=new Uint8Array(h),r=0,s=0;r<h;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),i<128?e[r++]=i:i<2048?(e[r++]=192|i>>>6,e[r++]=128|63&i):i<65536?(e[r++]=224|i>>>12,e[r++]=128|i>>>6&63,e[r++]=128|63&i):(e[r++]=240|i>>>18,e[r++]=128|i>>>12&63,e[r++]=128|i>>>6&63,e[r++]=128|63&i);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:Ue,Z_FULL_FLUSH:Ie,Z_FINISH:Fe,Z_OK:ze,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Ce(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let i=pe.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(i!==ze)throw new Error(yt[i]);if(e.header&&pe.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,i=pe.deflateSetDictionary(this.strm,t),i!==ze)throw new Error(yt[i]);this._dict_set=!0}}Ce.prototype.push=function(t,e){const i=this.strm,a=this.options.chunkSize;let s,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?Fe:xe,"string"==typeof t?i.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?i.input=new Uint8Array(t):i.input=t,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(a),i.next_out=0,i.avail_out=a),(r===Ue||r===Ie)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(s=pe.deflate(i,r),s===Oe)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),s=pe.deflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===ze;if(0!==i.avail_out){if(r>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},Ce.prototype.onData=function(t){this.chunks.push(t)},Ce.prototype.onEnd=function(t){t===ze&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var $e={deflate:function(t,e){const i=new Ce(e);if(i.push(t,!0),i.err)throw i.msg||yt[i.err];return i.result}};const{deflate:Te}=$e;var Pe=Te;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let i=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const a=[];let s=!0;for(let a=0;a<t.length;a++)"<"==t[a]?s=!0:">"==t[a]?s=!1:(r(t[a],e[i]),i++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const i=Le[t].bytes,r=new DataView(new ArrayBuffer(i));Le[t].p.bind(r)(0,e,s);for(let t=0;t<i;t++)a.push(r.getUint8(t))}return a},Me=(t,e)=>{let i=0;const a=[];let s=!0;for(const e of t)"<"==e?s=!0:">"==e?s=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[i+t]);const h=Le[t].u.bind(n);a.push(h(0,s)),i+=r}return a};class Ze extends EventTarget{constructor(t,e,i){super(),this.port=t,this.logger=e,this._parent=i,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.__commandLock=Promise.resolve([0,[]]),this.__isReconfiguring=!1,this.state_DTR=!1,this.__writeChain=Promise.resolve()}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}get _commandLock(){return this._parent?this._parent._commandLock:this.__commandLock}set _commandLock(t){this._parent?this._parent._commandLock=t:this.__commandLock=t}get _isReconfiguring(){return this._parent?this._parent._isReconfiguring:this.__isReconfiguring}set _isReconfiguring(t){this._parent?this._parent._isReconfiguring=t:this.__isReconfiguring=t}detectUSBSerialChip(t,e){const i={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return i&&i[e]?i[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.connectWithResetStrategies(),await this.detectChip();const t=F(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),await this.drainInputBuffer(200),this._inputBuffer.length=0,await s(U);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${a(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${a(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==S)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:i}=await this._reader.read();if(i){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const a=Array.from(e);Array.prototype.push.apply(this._inputBuffer,a),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.hardResetUSBJTAGSerial(),this.logger.log("USB-JTAG/Serial reset.")):(await this.hardResetClassic(),this.logger.log("Classic reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],i=this._efuses[1],a=this._efuses[2],s=this._efuses[3];let r;if(this.chipFamily==l){if(0!=s)r=[s>>16&255,s>>8&255,255&s];else if(i>>16&255){if(1!=(i>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=i>>8&255,t[4]=255&i,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=a>>8&255,t[1]=255&a,t[2]=i>>24&255,t[3]=i>>16&255,t[4]=i>>8&255,t[5]=255&i;else{if(this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=i>>8&255,t[1]=255&i,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+a(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[i]=await this.getResponse(10);return i}async checkCommand(t,e,i=0,s=3e3){const r=async()=>{s=Math.min(s,3e5),await this.sendCommand(t,e,i);const[r,n]=await this.getResponse(t,s);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,c,u,_,f,g,w,p,m,y,b,S,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+a(t))):new Error("Command failure error code "+a(B[1]));return[r,h]};return this._commandLock=this._commandLock.then(r,r),this._commandLock}async sendCommand(e,i,a=0){const s=t([...Ne("<BBHI",0,e,i.length,a),...i]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let e=null,r=!1,n=[];for(;;){const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await s(1)}if(0==n.length){throw new z("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+i(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new z("Invalid head of packet ("+a(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new z("Invalid SLIP escape (0xdb, "+a(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+i(e)),e;e.push(t)}}}async getResponse(t,e=3e3){for(let i=0;i<100;i++){const i=await this.readPacket(e);if(i.length<8)continue;const[s,r,,n]=Me("<BBHI",i.slice(0,8));if(1!=s)continue;const h=i.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${a(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const i of t)e^=i;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await s(U),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconfigure: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconfigure: ${t}`)}this._writer=void 0}await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),this._isReconfiguring=!1,await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this._isReconfiguring=!1,this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async connectWithResetStrategies(){var t,e;const i=this.port.getInfo(),a=4097===i.usbProductId,s=12346===i.usbVendorId;this.logger.log(`Detected USB: VID=0x${(null===(t=i.usbVendorId)||void 0===t?void 0:t.toString(16))||"unknown"}, PID=0x${(null===(e=i.usbProductId)||void 0===e?void 0:e.toString(16))||"unknown"}`);const r=[];(a||s)&&r.push({name:"USB-JTAG/Serial",fn:async()=>await this.hardResetUSBJTAGSerial()}),r.push({name:"Classic",fn:async()=>await this.hardResetClassic()}),a||s||r.push({name:"USB-JTAG/Serial (fallback)",fn:async()=>await this.hardResetUSBJTAGSerial()});let n=null;for(const t of r)try{if(this.logger.log(`Trying ${t.name} reset...`),!this.connected||!this.port.writable){this.logger.log(`Port disconnected, skipping ${t.name} reset`);continue}return await t.fn(),await this.sync(),void this.logger.log(`Connected successfully with ${t.name} reset.`)}catch(e){if(n=e,this.logger.log(`${t.name} reset failed: ${e.message}`),!this.connected||!this.port.writable){this.logger.log("Port disconnected during reset attempt");break}this._inputBuffer.length=0,await this.drainInputBuffer(200),await this.flushSerialBuffers()}throw new Error(`Couldn't sync to ESP. Try resetting manually. Last error: ${null==n?void 0:n.message}`)}async hardResetUSBJTAGSerial(){await this.setRTS(!1),await this.setDTR(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),await this.sleep(200)}async hardResetClassic(){await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),await this.sleep(200)}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await s(U),!0;await s(U)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,U);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,i=0,s=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),i=e[0],s=e[2],r=e[3];this.logger.log(`Image header, Magic=${a(i)}, FlashMode=${a(s)}, FlashSizeFreq=${a(r)}`)}const r=t.byteLength;let n,h=0,o=k;s?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,i)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,i));let l=[],d=0,c=0,u=0;const _=Date.now(),f=this.getFlashWriteSize(),g=s?h:r;for(;g-u>0;)this.debug&&this.logger.log(`Writing at ${a(i+d*f,8)} `),g-u>=f?l=Array.from(new Uint8Array(n,u,f)):(l=Array.from(new Uint8Array(n,u,g-u)),s||(l=l.concat(new Array(f-l.length).fill(255)))),s?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,c+=s?Math.round(l.length*r/h):l.length,u+=f,e(Math.min(c,r),r);this.logger.log("Took "+(Date.now()-_)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),s?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,i=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashDeflBlock(t,e,i=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashBegin(t=0,e=0,i=!1){let s;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,c,u,_,f,g,w,p,m,y,b,S,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);s=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:I(3e4,t),o=Date.now();let B=Ne("<IIII",s,n,r,e);return this.chipFamily!=d&&this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v||(B=B.concat(Ne("<I",i?1:0))),this.logger.log("Erase size "+s+", blocks "+n+", block size "+a(r,4)+", offset "+a(e,4)+", encrypted "+(i?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,i=0){const a=this.getFlashWriteSize(),s=Math.floor((e+a-1)/a),r=Math.floor((t+a-1)/a);let n=0,h=0;this.IS_STUB?(n=t,h=I(3e4,n)):(n=r*a,h=k);const o=Ne("<IIII",n,s,a,i);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return F(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,i=4294967295,a=0,s=0){let r=Ne("<IIII",t,e,i,a);s>0&&(r=r.concat(Ne("<IIII",F(this.getChipFamily()).uartDateReg,0,0,s))),await this.checkCommand(9,r)}async setDataLengths(t,e,i){if(-1!=t.mosiDlenOffs){const a=t.regBase+t.mosiDlenOffs,s=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(a,e-1),i>0&&await this.writeRegister(s,i-1)}else{const a=t.regBase+t.usr1Offs,s=(0==i?0:i-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(a,s)}}async waitDone(t,e){for(let i=0;i<10;i++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,i=0){const s=F(this.getChipFamily()),r=s.regBase,n=r,h=r+s.usrOffs,o=r+s.usr2Offs,l=r+s.w0Offs,d=1<<18;if(i>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const c=8*e.length,u=await this.readRegister(h),_=await this.readRegister(o);let f=1<<31;if(i>0&&(f|=268435456),c>0&&(f|=134217728),await this.setDataLengths(s,c,i),await this.writeRegister(h,f),await this.writeRegister(o,7<<28|t),0==c)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const i=Me("I".repeat(Math.floor(e.length/4)),e);let s=l;this.logger.debug(`Words Length: ${i.length}`);for(const t of i)this.logger.debug(`Writing word ${a(t)} to register offset ${a(s)}`),await this.writeRegister(s,t),s+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,u),await this.writeRegister(o,_),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,i=t>>16&255;this.logger.log(`FlashId: ${a(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${i.toString(16)}`),this.flashSize=r[i],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const i=4096,a=Math.floor((e+i-1)/i);let s=16-Math.floor(t/i)%16;return a<s&&(s=a),a<2*s?Math.floor((a+1)/2*i):(a-s)*i}async memBegin(t,e,i,a){return await this.checkCommand(5,Ne("<IIII",t,e,i,a))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,i=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,i,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const i=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const a=e[t],s=e[`${t}_start`],r=a.length,n=Math.floor((r+i-1)/i);await this.memBegin(r,n,i,s);for(const t of Array(n).keys()){const e=t*i;let s=e+i;s>r&&(s=r),await this.memBlock(a.slice(e,s),t)}}await this.memFinish(e.entry);const a=await this.readPacket(500),s=String.fromCharCode(...a);if("OHAI"!=s)throw new Error("Failed to start stub. Unexpected response: "+s);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}get _writer(){return this._parent?this._parent._writer:this.__writer}set _writer(t){this._parent?this._parent._writer=t:this.__writer=t}get _writeChain(){return this._parent?this._parent._writeChain:this.__writeChain}set _writeChain(t){this._parent?this._parent._writeChain=t:this.__writeChain=t}async writeToStream(t){if(this.port.writable){if(this._isReconfiguring)throw new Error("Cannot write during port reconfiguration");this._writeChain=this._writeChain.then(async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.error(`Failed to get writer: ${t}`),t}await this._writer.write(new Uint8Array(t))},async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");this._writer||(this._writer=this.port.writable.getWriter()),await this._writer.write(new Uint8Array(t))}).catch(t=>{if(this.logger.error(`Write error: ${t}`),this._writer){try{this._writer.releaseLock()}catch(t){}this._writer=void 0}throw t}),await this._writeChain}else this.logger.debug("Port writable stream not available, skipping write")}async disconnect(){if(this._parent)await this._parent.disconnect();else if(this.port.writable)try{try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during disconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{await this._writer.close(),this._writer.releaseLock()}catch(t){this.logger.debug(`Writer close/release error: ${t}`)}this._writer=void 0}else try{const t=this.port.writable.getWriter();await t.close(),t.releaseLock()}catch(t){this.logger.debug(`Direct writer close error: ${t}`)}await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1}finally{this._isReconfiguring=!1}else this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)await this._parent.reconnect();else try{this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[];try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this._isReconfiguring=!1;const t=this.chipFamily,e=this.chipName,i=this.chipRevision,a=this.chipVariant,s=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=i,this.chipVariant=a,this.flashSize=s,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}catch(t){throw this._isReconfiguring=!1,t}}async drainInputBuffer(t=200){await s(t);let e=0;const i=Date.now();for(;e<112&&Date.now()-i<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await s(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await s(U),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,i,a){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${i} bytes from flash at address 0x${e.toString(16)}...`);let r=new Uint8Array(0),n=e,h=i;for(;h>0;){const e=Math.min(65536,h);let o=!1,l=0;const d=5;let c=!1;for(;!o&&l<=d;){let i=new Uint8Array(0);try{0===l&&this.logger.debug(`Reading chunk at 0x${n.toString(16)}, size: 0x${e.toString(16)}`);const a=Ne("<IIII",n,e,4096,1024),[h]=await this.checkCommand(210,a);if(0!=h)throw new Error("Failed to read memory: "+h);for(;i.length<e;){let a;try{a=await this.readPacket(100)}catch(t){if(t instanceof z){this.logger.debug(`SLIP read error at ${i.length} bytes: ${t.message}`);try{const t=[192,192];await this.writeToStream(t),this.logger.debug("Sent abort frame to stub"),await s(50)}catch(t){this.logger.debug(`Abort frame error: ${t}`)}if(await this.drainInputBuffer(200),i.length>=e)break}throw t}if(a&&a.length>0){const e=new Uint8Array(a),s=new Uint8Array(i.length+e.length);s.set(i),s.set(e,i.length),i=s;const r=Ne("<I",i.length),n=t(r);await this.writeToStream(n)}}const d=new Uint8Array(r.length+i.length);d.set(r),d.set(i,r.length),r=d,o=!0}catch(t){if(l++,!(t instanceof z))throw t;if(l<=d){this.logger.log(`${t.message} at 0x${n.toString(16)}. Draining buffer and retrying (attempt ${l}/${d})...`);try{await this.drainInputBuffer(200),await this.flushSerialBuffers(),await s(U)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}else{if(c)throw new Error(`Failed to read chunk at 0x${n.toString(16)} after ${d} retries and deep recovery attempt`);c=!0,this.logger.log(`All retries exhausted at 0x${n.toString(16)}. Attempting deep recovery (reconnect + reload stub)...`);try{await this.reconnect(),this.logger.log("Deep recovery successful. Resuming read from current position..."),l=0;continue}catch(t){throw new Error(`Failed to read chunk at 0x${n.toString(16)} after ${d} retries and deep recovery failed: ${t}`)}}}}a&&a(new Uint8Array(e),r.length,i),n+=e,h-=e,this.logger.debug(`Total progress: 0x${r.length.toString(16)} from 0x${i.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${r.length} bytes from flash`),r}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,i,s){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=s,h=s+t;this.logger.debug(`Load range: ${a(n,8)}-${a(h,8)}`),this.logger.debug(`Stub data: ${a(r.data_start,8)}, len: ${r.data.length}, text: ${a(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+a(t,8)+"-"+a(e,8)+". Can't load binary at overlapping address range "+a(n,8)+"-"+a(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,_ as CHIP_FAMILY_ESP32C2,f as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,w as CHIP_FAMILY_ESP32C6,p as CHIP_FAMILY_ESP32C61,m as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,S as CHIP_FAMILY_ESP32P4,c as CHIP_FAMILY_ESP32S2,u as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
|
package/js/modules/esptool.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const t=t=>{let e=[192];for(const i of t)219==i?e=e.concat([219,221]):192==i?e=e.concat([219,220]):e.push(i);return e.push(192),e},e=t=>{const e=[];for(let i=0;i<t.length;i++){const a=t.charCodeAt(i);a<=255&&e.push(a)}return e},i=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{const i=t.toString(16).toUpperCase();return i.startsWith("-")?"-0x"+i.substring(1).padStart(e,"0"):"0x"+i.padStart(e,"0")},s=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,c=12882,u=12883,_=12994,f=12995,g=12997,w=12998,p=207969,m=12914,y=12916,b=12917,S=12928,v=12849,B={5:{name:"ESP32-C3",family:f},9:{name:"ESP32-S3",family:u},12:{name:"ESP32-C2",family:_},13:{name:"ESP32-C6",family:w},16:{name:"ESP32-H2",family:m},18:{name:"ESP32-P4",family:S},20:{name:"ESP32-C61",family:p},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:v}},k={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:c}},R=3e3,x=15e4,U=100,I=(t,e)=>{const i=Math.floor(t*(e/486));return i<R?R:i},z=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case c:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case _:case f:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case p:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case v:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class F extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,i)=>{let a;return t==y||t==b||t==v?null:(t==d?a=await import("./esp32-BRKoi17y.js"):t==c?a=await import("./esp32s2-iX3WoDbg.js"):t==u?a=await import("./esp32s3-DGwDVIgz.js"):t==l?a=await import("./esp8266-CUwxJpGa.js"):t==_?a=await import("./esp32c2-Btgr_lwh.js"):t==f?a=await import("./esp32c3-CHKfoI8W.js"):t==g?a=await import("./esp32c5-BDW4KtLo.js"):t==w?a=await import("./esp32c6-il8tTxAG.js"):t==p?a=await import("./esp32c61-thKzxBGf.js"):t==m?a=await import("./esp32h2-CxoUHv_P.js"):t==S&&(a=null!=i&&i>=300?await import("./esp32p4r3-CqI71ojR.js"):await import("./esp32p4-D3jLP-jY.js")),{...a,text:e(atob(a.text)),data:e(atob(a.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,C=30,T=15,$=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),P=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const W=new Array(29);D(W);const j=new Array(C);function G(t,e,i,a,s){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=a,this.max_length=s,this.has_stree=t&&t.length}let K,Y,J;function q(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(j);const X=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,i)=>{t.bi_valid>16-i?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=i)},et=(t,e,i)=>{tt(t,i[2*e],i[2*e+1])},it=(t,e)=>{let i=0;do{i|=1&t,t>>>=1,i<<=1}while(--e>0);return i>>>1},at=(t,e,i)=>{const a=new Array(16);let s,r,n=0;for(s=1;s<=T;s++)n=n+i[s-1]<<1,a[s]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=it(a[e]++,e))}},st=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<C;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,i,a)=>{const s=2*e,r=2*i;return t[s]<t[r]||t[s]===t[r]&&a[e]<=a[i]},ht=(t,e,i)=>{const a=t.heap[i];let s=i<<1;for(;s<=t.heap_len&&(s<t.heap_len&&nt(e,t.heap[s+1],t.heap[s],t.depth)&&s++,!nt(e,a,t.heap[s],t.depth));)t.heap[i]=t.heap[s],i=s,s<<=1;t.heap[i]=a},ot=(t,e,i)=>{let a,s,r,n,h=0;if(0!==t.sym_next)do{a=255&t.pending_buf[t.sym_buf+h++],a+=(255&t.pending_buf[t.sym_buf+h++])<<8,s=t.pending_buf[t.sym_buf+h++],0===a?et(t,s,e):(r=V[s],et(t,r+E+1,e),n=$[r],0!==n&&(s-=W[r],tt(t,s,n)),a--,r=X(a),et(t,r,i),n=P[r],0!==n&&(a-=j[r],tt(t,a,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const i=e.dyn_tree,a=e.stat_desc.static_tree,s=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==i[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):i[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,i[2*o]=1,t.depth[o]=0,t.opt_len--,s&&(t.static_len-=a[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,i,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,i,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,i[2*o]=i[2*n]+i[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,i[2*n+1]=i[2*h+1]=o,t.heap[1]=o++,ht(t,i,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const i=e.dyn_tree,a=e.max_code,s=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,c,u,_,f,g=0;for(u=0;u<=T;u++)t.bl_count[u]=0;for(i[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],u=i[2*i[2*d+1]+1]+1,u>o&&(u=o,g++),i[2*d+1]=u,d>a||(t.bl_count[u]++,_=0,d>=h&&(_=n[d-h]),f=i[2*d],t.opt_len+=f*(u+_),r&&(t.static_len+=f*(s[2*d+1]+_)));if(0!==g){do{for(u=o-1;0===t.bl_count[u];)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(u=o;0!==u;u--)for(d=t.bl_count[u];0!==d;)c=t.heap[--l],c>a||(i[2*c+1]!==u&&(t.opt_len+=(u-i[2*c+1])*i[2*c],i[2*c+1]=u),d--)}})(t,e),at(i,l,t.bl_count)},dt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(i+1)+1]=65535,a=0;a<=i;a++)s=n,n=e[2*(a+1)+1],++h<o&&s===n||(h<l?t.bl_tree[2*s]+=h:0!==s?(s!==r&&t.bl_tree[2*s]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4))},ct=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),a=0;a<=i;a++)if(s=n,n=e[2*(a+1)+1],!(++h<o&&s===n)){if(h<l)do{et(t,s,t.bl_tree)}while(0!==--h);else 0!==s?(s!==r&&(et(t,s,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4)}};let ut=!1;const _t=(t,e,i,a)=>{tt(t,0+(a?1:0),3),rt(t),Q(t,i),Q(t,~i),i&&t.pending_buf.set(t.window.subarray(e,e+i),t.pending),t.pending+=i};var ft=(t,e,i,a)=>{let s,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),s=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=s&&(s=r)):s=r=i+5,i+4<=s&&-1!==e?_t(t,e,i,a):4===t.strategy||r===s?(tt(t,2+(a?1:0),3),ot(t,M,Z)):(tt(t,4+(a?1:0),3),((t,e,i,a)=>{let s;for(tt(t,e-257,5),tt(t,i-1,5),tt(t,a-4,4),s=0;s<a;s++)tt(t,t.bl_tree[2*N[s]+1],3);ct(t,t.dyn_ltree,e-1),ct(t,t.dyn_dtree,i-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),st(t),a&&rt(t)},gt={_tr_init:t=>{ut||((()=>{let t,e,i,a,s;const r=new Array(16);for(i=0,a=0;a<28;a++)for(W[a]=i,t=0;t<1<<$[a];t++)V[i++]=a;for(V[i-1]=a,s=0,a=0;a<16;a++)for(j[a]=s,t=0;t<1<<P[a];t++)H[s++]=a;for(s>>=7;a<C;a++)for(j[a]=s<<7,t=0;t<1<<P[a]-7;t++)H[256+s++]=a;for(e=0;e<=T;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(at(M,287,r),t=0;t<C;t++)Z[2*t+1]=5,Z[2*t]=it(t,5);K=new G(M,$,257,A,T),Y=new G(Z,P,0,C,T),J=new G(new Array(0),L,0,19,7)})(),ut=!0),t.l_desc=new q(t.dyn_ltree,K),t.d_desc=new q(t.dyn_dtree,Y),t.bl_desc=new q(t.bl_tree,J),t.bi_buf=0,t.bi_valid=0,st(t)},_tr_stored_block:_t,_tr_flush_block:ft,_tr_tally:(t,e,i)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(V[i]+E+1)]++,t.dyn_dtree[2*X(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var wt=(t,e,i,a)=>{let s=65535&t,r=t>>>16&65535,n=0;for(;0!==i;){n=i>2e3?2e3:i,i-=n;do{s=s+e[a++]|0,r=r+s|0}while(--n);s%=65521,r%=65521}return s|r<<16};const pt=new Uint32Array((()=>{let t,e=[];for(var i=0;i<256;i++){t=i;for(var a=0;a<8;a++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e})());var mt=(t,e,i,a)=>{const s=pt,r=a+i;t^=-1;for(let i=a;i<r;i++)t=t>>>8^s[255&(t^e[i])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:St,_tr_stored_block:vt,_tr_flush_block:Bt,_tr_tally:kt,_tr_align:Rt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:Ut,Z_FULL_FLUSH:It,Z_FINISH:zt,Z_BLOCK:Ft,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Ct,Z_DEFAULT_COMPRESSION:Tt,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,Wt=262,jt=42,Gt=113,Kt=666,Yt=(t,e)=>(t.msg=yt[e],e),Jt=t=>2*t-(t>4?9:0),qt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Xt=t=>{let e,i,a,s=t.w_size;e=t.hash_size,a=e;do{i=t.head[--a],t.head[a]=i>=s?i-s:0}while(--e);e=s,a=e;do{i=t.prev[--a],t.prev[a]=i>=s?i-s:0}while(--e)};let Qt=(t,e,i)=>(e<<t.hash_shift^i)&t.hash_mask;const te=t=>{const e=t.state;let i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+i),t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ie=(t,e)=>{t.pending_buf[t.pending++]=e},ae=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},se=(t,e,i,a)=>{let s=t.avail_in;return s>a&&(s=a),0===s?0:(t.avail_in-=s,e.set(t.input.subarray(t.next_in,t.next_in+s),i),1===t.state.wrap?t.adler=wt(t.adler,e,s,i):2===t.state.wrap&&(t.adler=mt(t.adler,e,s,i)),t.next_in+=s,t.total_in+=s,s)},re=(t,e)=>{let i,a,s=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-Wt?t.strstart-(t.w_size-Wt):0,l=t.window,d=t.w_mask,c=t.prev,u=t.strstart+Vt;let _=l[r+n-1],f=l[r+n];t.prev_length>=t.good_match&&(s>>=2),h>t.lookahead&&(h=t.lookahead);do{if(i=e,l[i+n]===f&&l[i+n-1]===_&&l[i]===l[r]&&l[++i]===l[r+1]){r+=2,i++;do{}while(l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&r<u);if(a=Vt-(u-r),r=u-Vt,a>n){if(t.match_start=e,n=a,a>=h)break;_=l[r+n-1],f=l[r+n]}}}while((e=c[e&d])>o&&0!==--s);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let i,a,s;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Wt)&&(t.window.set(t.window.subarray(e,e+e-a),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Xt(t),a+=e),0===t.strm.avail_in)break;if(i=se(t.strm,t.window,t.strstart+t.lookahead,a),t.lookahead+=i,t.lookahead+t.insert>=3)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=Qt(t,t.ins_h,t.window[s+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[s+3-1]),t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Wt&&0!==t.strm.avail_in)},he=(t,e)=>{let i,a,s,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(i=65535,s=t.bi_valid+42>>3,t.strm.avail_out<s)break;if(s=t.strm.avail_out-s,a=t.strstart-t.block_start,i>a+t.strm.avail_in&&(i=a+t.strm.avail_in),i>s&&(i=s),i<r&&(0===i&&e!==zt||e===xt||i!==a+t.strm.avail_in))break;n=e===zt&&i===a+t.strm.avail_in?1:0,vt(t,0,0,n),t.pending_buf[t.pending-4]=i,t.pending_buf[t.pending-3]=i>>8,t.pending_buf[t.pending-2]=~i,t.pending_buf[t.pending-1]=~i>>8,te(t.strm),a&&(a>i&&(a=i),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+a),t.strm.next_out),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a,t.block_start+=a,i-=a),i&&(se(t.strm,t.strm.output,t.strm.next_out,i),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==zt&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(s=t.window_size-t.strstart,t.strm.avail_in>s&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(se(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water<t.strstart&&(t.high_water=t.strstart),s=t.bi_valid+42>>3,s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s,r=s>t.w_size?t.w_size:s,a=t.strstart-t.block_start,(a>=r||(a||e===zt)&&e!==xt&&0===t.strm.avail_in&&a<=s)&&(i=a>s?s:a,n=e===zt&&0===t.strm.avail_in&&i===a?1:0,vt(t,t.block_start,i,n),t.block_start+=i,te(t.strm)),n?3:1)},oe=(t,e)=>{let i,a;for(;;){if(t.lookahead<Wt){if(ne(t),t.lookahead<Wt&&e===xt)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==i&&t.strstart-i<=t.w_size-Wt&&(t.match_length=re(t,i)),t.match_length>=3)if(a=kt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else a=kt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let i,a,s;for(;;){if(t.lookahead<Wt){if(ne(t),t.lookahead<Wt&&e===xt)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==i&&t.prev_length<t.max_lazy_match&&t.strstart-i<=t.w_size-Wt&&(t.match_length=re(t,i),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){s=t.strstart+t.lookahead-3,a=kt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=s&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(a=kt(t,0,t.window[t.strstart-1]),a&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(a=kt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,i,a,s){this.good_length=t,this.max_lazy=e,this.nice_length=i,this.max_chain=a,this.func=s}const ce=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function ue(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),qt(this.dyn_ltree),qt(this.dyn_dtree),qt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),qt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),qt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const _e=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==jt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Gt&&e.status!==Kt?1:0},fe=t=>{if(_e(t))return Yt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?jt:Gt,t.adler=2===e.wrap?0:1,e.last_flush=-2,St(e),Ot},ge=t=>{const e=fe(t);var i;return e===Ot&&((i=t.state).window_size=2*i.w_size,qt(i.head),i.max_lazy_match=ce[i.level].max_lazy,i.good_match=ce[i.level].good_length,i.nice_match=ce[i.level].nice_length,i.max_chain_length=ce[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),e},we=(t,e,i,a,s,r)=>{if(!t)return Et;let n=1;if(e===Tt&&(e=6),a<0?(n=0,a=-a):a>15&&(n=2,a-=16),s<1||s>9||i!==Ht||a<8||a>15||e<0||e>9||r<0||r>Nt||8===a&&1!==n)return Yt(t,Et);8===a&&(a=9);const h=new ue;return t.state=h,h.strm=t,h.status=jt,h.wrap=n,h.gzhead=null,h.w_bits=a,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=s+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<s+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=i,ge(t)};var pe={deflateInit:(t,e)=>we(t,e,Ht,15,8,Mt),deflateInit2:we,deflateReset:ge,deflateResetKeep:fe,deflateSetHeader:(t,e)=>_e(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(_e(t)||e>Ft||e<0)return t?Yt(t,Et):Et;const i=t.state;if(!t.output||0!==t.avail_in&&!t.input||i.status===Kt&&e!==zt)return Yt(t,0===t.avail_out?Ct:Et);const a=i.last_flush;if(i.last_flush=e,0!==i.pending){if(te(t),0===t.avail_out)return i.last_flush=-1,Ot}else if(0===t.avail_in&&Jt(e)<=Jt(a)&&e!==zt)return Yt(t,Ct);if(i.status===Kt&&0!==t.avail_in)return Yt(t,Ct);if(i.status===jt&&0===i.wrap&&(i.status=Gt),i.status===jt){let e=Ht+(i.w_bits-8<<4)<<8,a=-1;if(a=i.strategy>=Pt||i.level<2?0:i.level<6?1:6===i.level?2:3,e|=a<<6,0!==i.strstart&&(e|=32),e+=31-e%31,ae(i,e),0!==i.strstart&&(ae(i,t.adler>>>16),ae(i,65535&t.adler)),t.adler=1,i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot}if(57===i.status)if(t.adler=0,ie(i,31),ie(i,139),ie(i,8),i.gzhead)ie(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),ie(i,255&i.gzhead.time),ie(i,i.gzhead.time>>8&255),ie(i,i.gzhead.time>>16&255),ie(i,i.gzhead.time>>24&255),ie(i,9===i.level?2:i.strategy>=Pt||i.level<2?4:0),ie(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(ie(i,255&i.gzhead.extra.length),ie(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=mt(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(ie(i,0),ie(i,0),ie(i,0),ie(i,0),ie(i,0),ie(i,9===i.level?2:i.strategy>=Pt||i.level<2?4:0),ie(i,3),i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot;if(69===i.status){if(i.gzhead.extra){let e=i.pending,a=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+a>i.pending_buf_size;){let s=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+s),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>e&&(t.adler=mt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex+=s,te(t),0!==i.pending)return i.last_flush=-1,Ot;e=0,a-=s}let s=new Uint8Array(i.gzhead.extra);i.pending_buf.set(s.subarray(i.gzindex,i.gzindex+a),i.pending),i.pending+=a,i.gzhead.hcrc&&i.pending>e&&(t.adler=mt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),te(t),0!==i.pending)return i.last_flush=-1,Ot;a=0}e=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,ie(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),te(t),0!==i.pending)return i.last_flush=-1,Ot;a=0}e=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,ie(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(te(t),0!==i.pending))return i.last_flush=-1,Ot;ie(i,255&t.adler),ie(i,t.adler>>8&255),t.adler=0}if(i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot}if(0!==t.avail_in||0!==i.lookahead||e!==xt&&i.status!==Kt){let a=0===i.level?he(i,e):i.strategy===Pt?((t,e)=>{let i;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,i=kt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(i,e):i.strategy===Lt?((t,e)=>{let i,a,s,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(s=t.strstart-1,a=n[s],a===n[++s]&&a===n[++s]&&a===n[++s])){r=t.strstart+Vt;do{}while(a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&s<r);t.match_length=Vt-(r-s),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=kt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=kt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(i,e):ce[i.level].func(i,e);if(3!==a&&4!==a||(i.status=Kt),1===a||3===a)return 0===t.avail_out&&(i.last_flush=-1),Ot;if(2===a&&(e===Ut?Rt(i):e!==Ft&&(vt(i,0,0,!1),e===It&&(qt(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),te(t),0===t.avail_out))return i.last_flush=-1,Ot}return e!==zt?Ot:i.wrap<=0?Dt:(2===i.wrap?(ie(i,255&t.adler),ie(i,t.adler>>8&255),ie(i,t.adler>>16&255),ie(i,t.adler>>24&255),ie(i,255&t.total_in),ie(i,t.total_in>>8&255),ie(i,t.total_in>>16&255),ie(i,t.total_in>>24&255)):(ae(i,t.adler>>>16),ae(i,65535&t.adler)),te(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?Ot:Dt)},deflateEnd:t=>{if(_e(t))return Et;const e=t.state.status;return t.state=null,e===Gt?Yt(t,At):Ot},deflateSetDictionary:(t,e)=>{let i=e.length;if(_e(t))return Et;const a=t.state,s=a.wrap;if(2===s||1===s&&a.status!==jt||a.lookahead)return Et;if(1===s&&(t.adler=wt(t.adler,e,i,0)),a.wrap=0,i>=a.w_size){0===s&&(qt(a.head),a.strstart=0,a.block_start=0,a.insert=0);let t=new Uint8Array(a.w_size);t.set(e.subarray(i-a.w_size,i),0),e=t,i=a.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=i,t.next_in=0,t.input=e,ne(a);a.lookahead>=3;){let t=a.strstart,e=a.lookahead-2;do{a.ins_h=Qt(a,a.ins_h,a.window[t+3-1]),a.prev[t&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=t,t++}while(--e);a.strstart=t,a.lookahead=2,ne(a)}return a.strstart+=a.lookahead,a.block_start=a.strstart,a.insert=a.lookahead,a.lookahead=0,a.match_length=a.prev_length=2,a.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,a.wrap=s,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const me=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const i=e.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const e in i)me(i,e)&&(t[e]=i[e])}}return t},be=t=>{let e=0;for(let i=0,a=t.length;i<a;i++)e+=t[i].length;const i=new Uint8Array(e);for(let e=0,a=0,s=t.length;e<s;e++){let s=t[e];i.set(s,a),a+=s.length}return i};let Se=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Se=!1}const ve=new Uint8Array(256);for(let t=0;t<256;t++)ve[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ve[254]=ve[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,i,a,s,r,n=t.length,h=0;for(s=0;s<n;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),h+=i<128?1:i<2048?2:i<65536?3:4;for(e=new Uint8Array(h),r=0,s=0;r<h;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),i<128?e[r++]=i:i<2048?(e[r++]=192|i>>>6,e[r++]=128|63&i):i<65536?(e[r++]=224|i>>>12,e[r++]=128|i>>>6&63,e[r++]=128|63&i):(e[r++]=240|i>>>18,e[r++]=128|i>>>12&63,e[r++]=128|i>>>6&63,e[r++]=128|63&i);return e};var ke=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const Re=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:Ue,Z_FULL_FLUSH:Ie,Z_FINISH:ze,Z_OK:Fe,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Ce(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new ke,this.strm.avail_out=0;let i=pe.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(i!==Fe)throw new Error(yt[i]);if(e.header&&pe.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===Re.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,i=pe.deflateSetDictionary(this.strm,t),i!==Fe)throw new Error(yt[i]);this._dict_set=!0}}Ce.prototype.push=function(t,e){const i=this.strm,a=this.options.chunkSize;let s,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?ze:xe,"string"==typeof t?i.input=Be(t):"[object ArrayBuffer]"===Re.call(t)?i.input=new Uint8Array(t):i.input=t,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(a),i.next_out=0,i.avail_out=a),(r===Ue||r===Ie)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(s=pe.deflate(i,r),s===Oe)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),s=pe.deflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===Fe;if(0!==i.avail_out){if(r>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},Ce.prototype.onData=function(t){this.chunks.push(t)},Ce.prototype.onEnd=function(t){t===Fe&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Te={deflate:function(t,e){const i=new Ce(e);if(i.push(t,!0),i.err)throw i.msg||yt[i.err];return i.result}};const{deflate:$e}=Te;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let i=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const a=[];let s=!0;for(let a=0;a<t.length;a++)"<"==t[a]?s=!0:">"==t[a]?s=!1:(r(t[a],e[i]),i++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const i=Le[t].bytes,r=new DataView(new ArrayBuffer(i));Le[t].p.bind(r)(0,e,s);for(let t=0;t<i;t++)a.push(r.getUint8(t))}return a},Me=(t,e)=>{let i=0;const a=[];let s=!0;for(const e of t)"<"==e?s=!0:">"==e?s=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[i+t]);const h=Le[t].u.bind(n);a.push(h(0,s)),i+=r}return a};class Ze extends EventTarget{constructor(t,e,i){super(),this.port=t,this.logger=e,this._parent=i,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.__commandLock=Promise.resolve([0,[]]),this._isReconfiguring=!1,this.state_DTR=!1,this.__writeChain=Promise.resolve()}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}get _commandLock(){return this._parent?this._parent._commandLock:this.__commandLock}set _commandLock(t){this._parent?this._parent._commandLock=t:this.__commandLock=t}detectUSBSerialChip(t,e){const i={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return i&&i[e]?i[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.connectWithResetStrategies(),await this.detectChip();const t=z(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),await this.drainInputBuffer(200),this._inputBuffer.length=0,await s(U);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=k[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${a(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${a(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==S)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:i}=await this._reader.read();if(i){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const a=Array.from(e);Array.prototype.push.apply(this._inputBuffer,a),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.hardResetUSBJTAGSerial(),this.logger.log("USB-JTAG/Serial reset.")):(await this.hardResetClassic(),this.logger.log("Classic reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],i=this._efuses[1],a=this._efuses[2],s=this._efuses[3];let r;if(this.chipFamily==l){if(0!=s)r=[s>>16&255,s>>8&255,255&s];else if(i>>16&255){if(1!=(i>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=i>>8&255,t[4]=255&i,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=a>>8&255,t[1]=255&a,t[2]=i>>24&255,t[3]=i>>16&255,t[4]=i>>8&255,t[5]=255&i;else{if(this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=i>>8&255,t[1]=255&i,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+a(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[i]=await this.getResponse(10);return i}async checkCommand(t,e,i=0,s=3e3){const r=async()=>{s=Math.min(s,3e5),await this.sendCommand(t,e,i);const[r,n]=await this.getResponse(t,s);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,c,u,_,f,g,w,p,m,y,b,S,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+a(t))):new Error("Command failure error code "+a(B[1]));return[r,h]};return this._commandLock=this._commandLock.then(r,r),this._commandLock}async sendCommand(e,i,a=0){const s=t([...Ne("<BBHI",0,e,i.length,a),...i]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let e=null,r=!1;const n=Date.now();for(;;){if(Date.now()-n>t){throw new F("Timed out waiting for packet "+(null===e?"header":"content"))}if(0!==this._inputBuffer.length)for(;this._inputBuffer.length>0;){const t=this._inputBuffer.shift();if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new F("Invalid head of packet ("+a(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new F("Invalid SLIP escape (0xdb, "+a(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+i(e)),e;e.push(t)}}else await s(1)}}async getResponse(t,e=3e3){for(let i=0;i<100;i++){const i=await this.readPacket(e);if(i.length<8)continue;const[s,r,,n]=Me("<BBHI",i.slice(0,8));if(1!=s)continue;const h=i.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${a(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const i of t)e^=i;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await s(U),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{this._isReconfiguring=!0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconfigure: ${t}`)}if(this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconfigure: ${t}`)}this._writer=void 0}await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}finally{this._isReconfiguring=!1}}async connectWithResetStrategies(){var t,e;const i=this.port.getInfo(),a=4097===i.usbProductId,s=12346===i.usbVendorId;this.logger.log(`Detected USB: VID=0x${(null===(t=i.usbVendorId)||void 0===t?void 0:t.toString(16))||"unknown"}, PID=0x${(null===(e=i.usbProductId)||void 0===e?void 0:e.toString(16))||"unknown"}`);const r=[];(a||s)&&r.push({name:"USB-JTAG/Serial",fn:async()=>await this.hardResetUSBJTAGSerial()}),r.push({name:"Classic",fn:async()=>await this.hardResetClassic()}),a||s||r.push({name:"USB-JTAG/Serial (fallback)",fn:async()=>await this.hardResetUSBJTAGSerial()});let n=null;for(const t of r)try{if(this.logger.log(`Trying ${t.name} reset...`),!this.connected||!this.port.writable){this.logger.log(`Port disconnected, skipping ${t.name} reset`);continue}return await t.fn(),await this.sync(),void this.logger.log(`Connected successfully with ${t.name} reset.`)}catch(e){if(n=e,this.logger.log(`${t.name} reset failed: ${e.message}`),!this.connected||!this.port.writable){this.logger.log("Port disconnected during reset attempt");break}this._inputBuffer.length=0,await this.drainInputBuffer(200),await this.flushSerialBuffers()}throw new Error(`Couldn't sync to ESP. Try resetting manually. Last error: ${null==n?void 0:n.message}`)}async hardResetUSBJTAGSerial(){await this.setRTS(!1),await this.setDTR(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),await this.sleep(200)}async hardResetClassic(){await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),await this.sleep(200)}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await s(U),!0;await s(U)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,U);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,i=0,s=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),i=e[0],s=e[2],r=e[3];this.logger.log(`Image header, Magic=${a(i)}, FlashMode=${a(s)}, FlashSizeFreq=${a(r)}`)}const r=t.byteLength;let n,h=0,o=R;s?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,i)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,i));let l=[],d=0,c=0,u=0;const _=Date.now(),f=this.getFlashWriteSize(),g=s?h:r;for(;g-u>0;)this.debug&&this.logger.log(`Writing at ${a(i+d*f,8)} `),g-u>=f?l=Array.from(new Uint8Array(n,u,f)):(l=Array.from(new Uint8Array(n,u,g-u)),s||(l=l.concat(new Array(f-l.length).fill(255)))),s?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,c+=s?Math.round(l.length*r/h):l.length,u+=f,e(Math.min(c,r),r);this.logger.log("Took "+(Date.now()-_)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),s?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,i=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashDeflBlock(t,e,i=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashBegin(t=0,e=0,i=!1){let s;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,c,u,_,f,g,w,p,m,y,b,S,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);s=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?R:I(3e4,t),o=Date.now();let B=Ne("<IIII",s,n,r,e);return this.chipFamily!=d&&this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v||(B=B.concat(Ne("<I",i?1:0))),this.logger.log("Erase size "+s+", blocks "+n+", block size "+a(r,4)+", offset "+a(e,4)+", encrypted "+(i?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,i=0){const a=this.getFlashWriteSize(),s=Math.floor((e+a-1)/a),r=Math.floor((t+a-1)/a);let n=0,h=0;this.IS_STUB?(n=t,h=I(3e4,n)):(n=r*a,h=R);const o=Ne("<IIII",n,s,a,i);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return z(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,i=4294967295,a=0,s=0){let r=Ne("<IIII",t,e,i,a);s>0&&(r=r.concat(Ne("<IIII",z(this.getChipFamily()).uartDateReg,0,0,s))),await this.checkCommand(9,r)}async setDataLengths(t,e,i){if(-1!=t.mosiDlenOffs){const a=t.regBase+t.mosiDlenOffs,s=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(a,e-1),i>0&&await this.writeRegister(s,i-1)}else{const a=t.regBase+t.usr1Offs,s=(0==i?0:i-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(a,s)}}async waitDone(t,e){for(let i=0;i<10;i++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,i=0){const s=z(this.getChipFamily()),r=s.regBase,n=r,h=r+s.usrOffs,o=r+s.usr2Offs,l=r+s.w0Offs,d=1<<18;if(i>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const c=8*e.length,u=await this.readRegister(h),_=await this.readRegister(o);let f=1<<31;if(i>0&&(f|=268435456),c>0&&(f|=134217728),await this.setDataLengths(s,c,i),await this.writeRegister(h,f),await this.writeRegister(o,7<<28|t),0==c)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const i=Me("I".repeat(Math.floor(e.length/4)),e);let s=l;this.logger.debug(`Words Length: ${i.length}`);for(const t of i)this.logger.debug(`Writing word ${a(t)} to register offset ${a(s)}`),await this.writeRegister(s,t),s+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,u),await this.writeRegister(o,_),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,i=t>>16&255;this.logger.log(`FlashId: ${a(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${i.toString(16)}`),this.flashSize=r[i],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const i=4096,a=Math.floor((e+i-1)/i);let s=16-Math.floor(t/i)%16;return a<s&&(s=a),a<2*s?Math.floor((a+1)/2*i):(a-s)*i}async memBegin(t,e,i,a){return await this.checkCommand(5,Ne("<IIII",t,e,i,a))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?R:500,i=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,i,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const i=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const a=e[t],s=e[`${t}_start`],r=a.length,n=Math.floor((r+i-1)/i);await this.memBegin(r,n,i,s);for(const t of Array(n).keys()){const e=t*i;let s=e+i;s>r&&(s=r),await this.memBlock(a.slice(e,s),t)}}await this.memFinish(e.entry);const a=await this.readPacket(500),s=String.fromCharCode(...a);if("OHAI"!=s)throw new Error("Failed to start stub. Unexpected response: "+s);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}get _writer(){return this._parent?this._parent._writer:this.__writer}set _writer(t){this._parent?this._parent._writer=t:this.__writer=t}get _writeChain(){return this._parent?this._parent._writeChain:this.__writeChain}set _writeChain(t){this._parent?this._parent._writeChain=t:this.__writeChain=t}async writeToStream(t){if(this.port.writable){if(this._isReconfiguring)throw new Error("Cannot write during port reconfiguration");this._writeChain=this._writeChain.then(async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.error(`Failed to get writer: ${t}`),t}await this._writer.write(new Uint8Array(t))},async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");this._writer||(this._writer=this.port.writable.getWriter()),await this._writer.write(new Uint8Array(t))}).catch(t=>{if(this.logger.error(`Write error: ${t}`),this._writer){try{this._writer.releaseLock()}catch(t){}this._writer=void 0}throw t}),await this._writeChain}else this.logger.debug("Port writable stream not available, skipping write")}async disconnect(){if(this._parent)await this._parent.disconnect();else if(this.port.writable)try{this._isReconfiguring=!0;try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during disconnect: ${t}`)}if(this._writer){try{await this._writer.close(),this._writer.releaseLock()}catch(t){this.logger.debug(`Writer close/release error: ${t}`)}this._writer=void 0}else try{const t=this.port.writable.getWriter();await t.close(),t.releaseLock()}catch(t){this.logger.debug(`Direct writer close error: ${t}`)}await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1}finally{this._isReconfiguring=!1}else this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)await this._parent.reconnect();else try{this._isReconfiguring=!0,this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[];try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,i=this.chipRevision,a=this.chipVariant,s=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=i,this.chipVariant=a,this.flashSize=s,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}finally{this._isReconfiguring=!1}}async drainInputBuffer(t=200){await s(t);let e=0;const i=Date.now();for(;e<112&&Date.now()-i<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await s(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await s(U),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,i,a){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${i} bytes from flash at address 0x${e.toString(16)}...`);let r=new Uint8Array(0),n=e,h=i;for(;h>0;){const e=Math.min(65536,h);let o=!1,l=0;const d=15;for(;!o&&l<=d;){let i=new Uint8Array(0);try{0===l&&this.logger.debug(`Reading chunk at 0x${n.toString(16)}, size: 0x${e.toString(16)}`);const a=Ne("<IIII",n,e,4096,1024),[h]=await this.checkCommand(210,a);if(0!=h)throw new Error("Failed to read memory: "+h);for(;i.length<e;){let a;try{a=await this.readPacket(100)}catch(t){if(t instanceof F){this.logger.debug(`SLIP read error at ${i.length} bytes: ${t.message}`);try{const t=[192,192];await this.writeToStream(t),this.logger.debug("Sent abort frame to stub"),await s(50)}catch(t){this.logger.debug(`Abort frame error: ${t}`)}if(await this.drainInputBuffer(200),i.length>=e)break}throw t}if(a&&a.length>0){const e=new Uint8Array(a),s=new Uint8Array(i.length+e.length);s.set(i),s.set(e,i.length),i=s;const r=Ne("<I",i.length),n=t(r);await this.writeToStream(n)}}const d=new Uint8Array(r.length+i.length);d.set(r),d.set(i,r.length),r=d,o=!0}catch(t){if(l++,!(t instanceof F))throw t;if(!(l<=d))throw new Error(`Failed to read chunk at 0x${n.toString(16)} after ${d} retries: ${t}`);this.logger.log(`${t.message} at 0x${n.toString(16)}. Draining buffer and retrying (attempt ${l}/${d})...`);try{await this.drainInputBuffer(200),await this.flushSerialBuffers(),await s(U)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}}a&&a(new Uint8Array(e),r.length,i),n+=e,h-=e,this.logger.debug(`Total progress: 0x${r.length.toString(16)} from 0x${i.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${r.length} bytes from flash`),r}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,i,s){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=s,h=s+t;this.logger.debug(`Load range: ${a(n,8)}-${a(h,8)}`),this.logger.debug(`Stub data: ${a(r.data_start,8)}, len: ${r.data.length}, text: ${a(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+a(t,8)+"-"+a(e,8)+". Can't load binary at overlapping address range "+a(n,8)+"-"+a(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,_ as CHIP_FAMILY_ESP32C2,f as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,w as CHIP_FAMILY_ESP32C6,p as CHIP_FAMILY_ESP32C61,m as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,S as CHIP_FAMILY_ESP32P4,c as CHIP_FAMILY_ESP32S2,u as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
|
|
1
|
+
const t=t=>{let e=[192];for(const i of t)219==i?e=e.concat([219,221]):192==i?e=e.concat([219,220]):e.push(i);return e.push(192),e},e=t=>{const e=[];for(let i=0;i<t.length;i++){const a=t.charCodeAt(i);a<=255&&e.push(a)}return e},i=t=>"["+t.map(t=>a(t)).join(", ")+"]",a=(t,e=2)=>{const i=t.toString(16).toUpperCase();return i.startsWith("-")?"-0x"+i.substring(1).padStart(e,"0"):"0x"+i.padStart(e,"0")},s=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,c=12882,u=12883,_=12994,f=12995,g=12997,w=12998,p=207969,m=12914,y=12916,b=12917,S=12928,v=12849,B={5:{name:"ESP32-C3",family:f},9:{name:"ESP32-S3",family:u},12:{name:"ESP32-C2",family:_},13:{name:"ESP32-C6",family:w},16:{name:"ESP32-H2",family:m},18:{name:"ESP32-P4",family:S},20:{name:"ESP32-C61",family:p},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:v}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:c}},k=3e3,x=15e4,U=100,I=(t,e)=>{const i=Math.floor(t*(e/486));return i<k?k:i},F=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case c:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case _:case f:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case p:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case v:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class z extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,i)=>{let a;return t==y||t==b||t==v?null:(t==d?a=await import("./esp32-BRKoi17y.js"):t==c?a=await import("./esp32s2-iX3WoDbg.js"):t==u?a=await import("./esp32s3-DGwDVIgz.js"):t==l?a=await import("./esp8266-CUwxJpGa.js"):t==_?a=await import("./esp32c2-Btgr_lwh.js"):t==f?a=await import("./esp32c3-CHKfoI8W.js"):t==g?a=await import("./esp32c5-BDW4KtLo.js"):t==w?a=await import("./esp32c6-il8tTxAG.js"):t==p?a=await import("./esp32c61-thKzxBGf.js"):t==m?a=await import("./esp32h2-CxoUHv_P.js"):t==S&&(a=null!=i&&i>=300?await import("./esp32p4r3-CqI71ojR.js"):await import("./esp32p4-D3jLP-jY.js")),{...a,text:e(atob(a.text)),data:e(atob(a.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,C=30,$=15,T=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),P=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const W=new Array(29);D(W);const j=new Array(C);function G(t,e,i,a,s){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=a,this.max_length=s,this.has_stree=t&&t.length}let K,Y,J;function q(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(j);const X=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,i)=>{t.bi_valid>16-i?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=i)},et=(t,e,i)=>{tt(t,i[2*e],i[2*e+1])},it=(t,e)=>{let i=0;do{i|=1&t,t>>>=1,i<<=1}while(--e>0);return i>>>1},at=(t,e,i)=>{const a=new Array(16);let s,r,n=0;for(s=1;s<=$;s++)n=n+i[s-1]<<1,a[s]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=it(a[e]++,e))}},st=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<C;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,i,a)=>{const s=2*e,r=2*i;return t[s]<t[r]||t[s]===t[r]&&a[e]<=a[i]},ht=(t,e,i)=>{const a=t.heap[i];let s=i<<1;for(;s<=t.heap_len&&(s<t.heap_len&&nt(e,t.heap[s+1],t.heap[s],t.depth)&&s++,!nt(e,a,t.heap[s],t.depth));)t.heap[i]=t.heap[s],i=s,s<<=1;t.heap[i]=a},ot=(t,e,i)=>{let a,s,r,n,h=0;if(0!==t.sym_next)do{a=255&t.pending_buf[t.sym_buf+h++],a+=(255&t.pending_buf[t.sym_buf+h++])<<8,s=t.pending_buf[t.sym_buf+h++],0===a?et(t,s,e):(r=V[s],et(t,r+E+1,e),n=T[r],0!==n&&(s-=W[r],tt(t,s,n)),a--,r=X(a),et(t,r,i),n=P[r],0!==n&&(a-=j[r],tt(t,a,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const i=e.dyn_tree,a=e.stat_desc.static_tree,s=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==i[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):i[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,i[2*o]=1,t.depth[o]=0,t.opt_len--,s&&(t.static_len-=a[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,i,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,i,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,i[2*o]=i[2*n]+i[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,i[2*n+1]=i[2*h+1]=o,t.heap[1]=o++,ht(t,i,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const i=e.dyn_tree,a=e.max_code,s=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,c,u,_,f,g=0;for(u=0;u<=$;u++)t.bl_count[u]=0;for(i[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],u=i[2*i[2*d+1]+1]+1,u>o&&(u=o,g++),i[2*d+1]=u,d>a||(t.bl_count[u]++,_=0,d>=h&&(_=n[d-h]),f=i[2*d],t.opt_len+=f*(u+_),r&&(t.static_len+=f*(s[2*d+1]+_)));if(0!==g){do{for(u=o-1;0===t.bl_count[u];)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(u=o;0!==u;u--)for(d=t.bl_count[u];0!==d;)c=t.heap[--l],c>a||(i[2*c+1]!==u&&(t.opt_len+=(u-i[2*c+1])*i[2*c],i[2*c+1]=u),d--)}})(t,e),at(i,l,t.bl_count)},dt=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(i+1)+1]=65535,a=0;a<=i;a++)s=n,n=e[2*(a+1)+1],++h<o&&s===n||(h<l?t.bl_tree[2*s]+=h:0!==s?(s!==r&&t.bl_tree[2*s]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4))},ct=(t,e,i)=>{let a,s,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),a=0;a<=i;a++)if(s=n,n=e[2*(a+1)+1],!(++h<o&&s===n)){if(h<l)do{et(t,s,t.bl_tree)}while(0!==--h);else 0!==s?(s!==r&&(et(t,s,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=s,0===n?(o=138,l=3):s===n?(o=6,l=3):(o=7,l=4)}};let ut=!1;const _t=(t,e,i,a)=>{tt(t,0+(a?1:0),3),rt(t),Q(t,i),Q(t,~i),i&&t.pending_buf.set(t.window.subarray(e,e+i),t.pending),t.pending+=i};var ft=(t,e,i,a)=>{let s,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),s=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=s&&(s=r)):s=r=i+5,i+4<=s&&-1!==e?_t(t,e,i,a):4===t.strategy||r===s?(tt(t,2+(a?1:0),3),ot(t,M,Z)):(tt(t,4+(a?1:0),3),((t,e,i,a)=>{let s;for(tt(t,e-257,5),tt(t,i-1,5),tt(t,a-4,4),s=0;s<a;s++)tt(t,t.bl_tree[2*N[s]+1],3);ct(t,t.dyn_ltree,e-1),ct(t,t.dyn_dtree,i-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),st(t),a&&rt(t)},gt={_tr_init:t=>{ut||((()=>{let t,e,i,a,s;const r=new Array(16);for(i=0,a=0;a<28;a++)for(W[a]=i,t=0;t<1<<T[a];t++)V[i++]=a;for(V[i-1]=a,s=0,a=0;a<16;a++)for(j[a]=s,t=0;t<1<<P[a];t++)H[s++]=a;for(s>>=7;a<C;a++)for(j[a]=s<<7,t=0;t<1<<P[a]-7;t++)H[256+s++]=a;for(e=0;e<=$;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(at(M,287,r),t=0;t<C;t++)Z[2*t+1]=5,Z[2*t]=it(t,5);K=new G(M,T,257,A,$),Y=new G(Z,P,0,C,$),J=new G(new Array(0),L,0,19,7)})(),ut=!0),t.l_desc=new q(t.dyn_ltree,K),t.d_desc=new q(t.dyn_dtree,Y),t.bl_desc=new q(t.bl_tree,J),t.bi_buf=0,t.bi_valid=0,st(t)},_tr_stored_block:_t,_tr_flush_block:ft,_tr_tally:(t,e,i)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(V[i]+E+1)]++,t.dyn_dtree[2*X(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var wt=(t,e,i,a)=>{let s=65535&t,r=t>>>16&65535,n=0;for(;0!==i;){n=i>2e3?2e3:i,i-=n;do{s=s+e[a++]|0,r=r+s|0}while(--n);s%=65521,r%=65521}return s|r<<16};const pt=new Uint32Array((()=>{let t,e=[];for(var i=0;i<256;i++){t=i;for(var a=0;a<8;a++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e})());var mt=(t,e,i,a)=>{const s=pt,r=a+i;t^=-1;for(let i=a;i<r;i++)t=t>>>8^s[255&(t^e[i])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:St,_tr_stored_block:vt,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:Ut,Z_FULL_FLUSH:It,Z_FINISH:Ft,Z_BLOCK:zt,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Ct,Z_DEFAULT_COMPRESSION:$t,Z_FILTERED:Tt,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,Wt=262,jt=42,Gt=113,Kt=666,Yt=(t,e)=>(t.msg=yt[e],e),Jt=t=>2*t-(t>4?9:0),qt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Xt=t=>{let e,i,a,s=t.w_size;e=t.hash_size,a=e;do{i=t.head[--a],t.head[a]=i>=s?i-s:0}while(--e);e=s,a=e;do{i=t.prev[--a],t.prev[a]=i>=s?i-s:0}while(--e)};let Qt=(t,e,i)=>(e<<t.hash_shift^i)&t.hash_mask;const te=t=>{const e=t.state;let i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+i),t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ie=(t,e)=>{t.pending_buf[t.pending++]=e},ae=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},se=(t,e,i,a)=>{let s=t.avail_in;return s>a&&(s=a),0===s?0:(t.avail_in-=s,e.set(t.input.subarray(t.next_in,t.next_in+s),i),1===t.state.wrap?t.adler=wt(t.adler,e,s,i):2===t.state.wrap&&(t.adler=mt(t.adler,e,s,i)),t.next_in+=s,t.total_in+=s,s)},re=(t,e)=>{let i,a,s=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-Wt?t.strstart-(t.w_size-Wt):0,l=t.window,d=t.w_mask,c=t.prev,u=t.strstart+Vt;let _=l[r+n-1],f=l[r+n];t.prev_length>=t.good_match&&(s>>=2),h>t.lookahead&&(h=t.lookahead);do{if(i=e,l[i+n]===f&&l[i+n-1]===_&&l[i]===l[r]&&l[++i]===l[r+1]){r+=2,i++;do{}while(l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&r<u);if(a=Vt-(u-r),r=u-Vt,a>n){if(t.match_start=e,n=a,a>=h)break;_=l[r+n-1],f=l[r+n]}}}while((e=c[e&d])>o&&0!==--s);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let i,a,s;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-Wt)&&(t.window.set(t.window.subarray(e,e+e-a),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Xt(t),a+=e),0===t.strm.avail_in)break;if(i=se(t.strm,t.window,t.strstart+t.lookahead,a),t.lookahead+=i,t.lookahead+t.insert>=3)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=Qt(t,t.ins_h,t.window[s+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[s+3-1]),t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<Wt&&0!==t.strm.avail_in)},he=(t,e)=>{let i,a,s,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(i=65535,s=t.bi_valid+42>>3,t.strm.avail_out<s)break;if(s=t.strm.avail_out-s,a=t.strstart-t.block_start,i>a+t.strm.avail_in&&(i=a+t.strm.avail_in),i>s&&(i=s),i<r&&(0===i&&e!==Ft||e===xt||i!==a+t.strm.avail_in))break;n=e===Ft&&i===a+t.strm.avail_in?1:0,vt(t,0,0,n),t.pending_buf[t.pending-4]=i,t.pending_buf[t.pending-3]=i>>8,t.pending_buf[t.pending-2]=~i,t.pending_buf[t.pending-1]=~i>>8,te(t.strm),a&&(a>i&&(a=i),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+a),t.strm.next_out),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a,t.block_start+=a,i-=a),i&&(se(t.strm,t.strm.output,t.strm.next_out,i),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==Ft&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(s=t.window_size-t.strstart,t.strm.avail_in>s&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(se(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water<t.strstart&&(t.high_water=t.strstart),s=t.bi_valid+42>>3,s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s,r=s>t.w_size?t.w_size:s,a=t.strstart-t.block_start,(a>=r||(a||e===Ft)&&e!==xt&&0===t.strm.avail_in&&a<=s)&&(i=a>s?s:a,n=e===Ft&&0===t.strm.avail_in&&i===a?1:0,vt(t,t.block_start,i,n),t.block_start+=i,te(t.strm)),n?3:1)},oe=(t,e)=>{let i,a;for(;;){if(t.lookahead<Wt){if(ne(t),t.lookahead<Wt&&e===xt)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==i&&t.strstart-i<=t.w_size-Wt&&(t.match_length=re(t,i)),t.match_length>=3)if(a=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===Ft?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let i,a,s;for(;;){if(t.lookahead<Wt){if(ne(t),t.lookahead<Wt&&e===xt)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==i&&t.prev_length<t.max_lazy_match&&t.strstart-i<=t.w_size-Wt&&(t.match_length=re(t,i),t.match_length<=5&&(t.strategy===Tt||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){s=t.strstart+t.lookahead-3,a=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=s&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(a=Rt(t,0,t.window[t.strstart-1]),a&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(a=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===Ft?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,i,a,s){this.good_length=t,this.max_lazy=e,this.nice_length=i,this.max_chain=a,this.func=s}const ce=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function ue(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),qt(this.dyn_ltree),qt(this.dyn_dtree),qt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),qt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),qt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const _e=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==jt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Gt&&e.status!==Kt?1:0},fe=t=>{if(_e(t))return Yt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?jt:Gt,t.adler=2===e.wrap?0:1,e.last_flush=-2,St(e),Ot},ge=t=>{const e=fe(t);var i;return e===Ot&&((i=t.state).window_size=2*i.w_size,qt(i.head),i.max_lazy_match=ce[i.level].max_lazy,i.good_match=ce[i.level].good_length,i.nice_match=ce[i.level].nice_length,i.max_chain_length=ce[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),e},we=(t,e,i,a,s,r)=>{if(!t)return Et;let n=1;if(e===$t&&(e=6),a<0?(n=0,a=-a):a>15&&(n=2,a-=16),s<1||s>9||i!==Ht||a<8||a>15||e<0||e>9||r<0||r>Nt||8===a&&1!==n)return Yt(t,Et);8===a&&(a=9);const h=new ue;return t.state=h,h.strm=t,h.status=jt,h.wrap=n,h.gzhead=null,h.w_bits=a,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=s+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<s+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=i,ge(t)};var pe={deflateInit:(t,e)=>we(t,e,Ht,15,8,Mt),deflateInit2:we,deflateReset:ge,deflateResetKeep:fe,deflateSetHeader:(t,e)=>_e(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(_e(t)||e>zt||e<0)return t?Yt(t,Et):Et;const i=t.state;if(!t.output||0!==t.avail_in&&!t.input||i.status===Kt&&e!==Ft)return Yt(t,0===t.avail_out?Ct:Et);const a=i.last_flush;if(i.last_flush=e,0!==i.pending){if(te(t),0===t.avail_out)return i.last_flush=-1,Ot}else if(0===t.avail_in&&Jt(e)<=Jt(a)&&e!==Ft)return Yt(t,Ct);if(i.status===Kt&&0!==t.avail_in)return Yt(t,Ct);if(i.status===jt&&0===i.wrap&&(i.status=Gt),i.status===jt){let e=Ht+(i.w_bits-8<<4)<<8,a=-1;if(a=i.strategy>=Pt||i.level<2?0:i.level<6?1:6===i.level?2:3,e|=a<<6,0!==i.strstart&&(e|=32),e+=31-e%31,ae(i,e),0!==i.strstart&&(ae(i,t.adler>>>16),ae(i,65535&t.adler)),t.adler=1,i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot}if(57===i.status)if(t.adler=0,ie(i,31),ie(i,139),ie(i,8),i.gzhead)ie(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),ie(i,255&i.gzhead.time),ie(i,i.gzhead.time>>8&255),ie(i,i.gzhead.time>>16&255),ie(i,i.gzhead.time>>24&255),ie(i,9===i.level?2:i.strategy>=Pt||i.level<2?4:0),ie(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(ie(i,255&i.gzhead.extra.length),ie(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=mt(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(ie(i,0),ie(i,0),ie(i,0),ie(i,0),ie(i,0),ie(i,9===i.level?2:i.strategy>=Pt||i.level<2?4:0),ie(i,3),i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot;if(69===i.status){if(i.gzhead.extra){let e=i.pending,a=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+a>i.pending_buf_size;){let s=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+s),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>e&&(t.adler=mt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex+=s,te(t),0!==i.pending)return i.last_flush=-1,Ot;e=0,a-=s}let s=new Uint8Array(i.gzhead.extra);i.pending_buf.set(s.subarray(i.gzindex,i.gzindex+a),i.pending),i.pending+=a,i.gzhead.hcrc&&i.pending>e&&(t.adler=mt(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),te(t),0!==i.pending)return i.last_flush=-1,Ot;a=0}e=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,ie(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let e,a=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a)),te(t),0!==i.pending)return i.last_flush=-1,Ot;a=0}e=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,ie(i,e)}while(0!==e);i.gzhead.hcrc&&i.pending>a&&(t.adler=mt(t.adler,i.pending_buf,i.pending-a,a))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(te(t),0!==i.pending))return i.last_flush=-1,Ot;ie(i,255&t.adler),ie(i,t.adler>>8&255),t.adler=0}if(i.status=Gt,te(t),0!==i.pending)return i.last_flush=-1,Ot}if(0!==t.avail_in||0!==i.lookahead||e!==xt&&i.status!==Kt){let a=0===i.level?he(i,e):i.strategy===Pt?((t,e)=>{let i;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,i=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ft?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(i,e):i.strategy===Lt?((t,e)=>{let i,a,s,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(s=t.strstart-1,a=n[s],a===n[++s]&&a===n[++s]&&a===n[++s])){r=t.strstart+Vt;do{}while(a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&a===n[++s]&&s<r);t.match_length=Vt-(r-s),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ft?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(i,e):ce[i.level].func(i,e);if(3!==a&&4!==a||(i.status=Kt),1===a||3===a)return 0===t.avail_out&&(i.last_flush=-1),Ot;if(2===a&&(e===Ut?kt(i):e!==zt&&(vt(i,0,0,!1),e===It&&(qt(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),te(t),0===t.avail_out))return i.last_flush=-1,Ot}return e!==Ft?Ot:i.wrap<=0?Dt:(2===i.wrap?(ie(i,255&t.adler),ie(i,t.adler>>8&255),ie(i,t.adler>>16&255),ie(i,t.adler>>24&255),ie(i,255&t.total_in),ie(i,t.total_in>>8&255),ie(i,t.total_in>>16&255),ie(i,t.total_in>>24&255)):(ae(i,t.adler>>>16),ae(i,65535&t.adler)),te(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?Ot:Dt)},deflateEnd:t=>{if(_e(t))return Et;const e=t.state.status;return t.state=null,e===Gt?Yt(t,At):Ot},deflateSetDictionary:(t,e)=>{let i=e.length;if(_e(t))return Et;const a=t.state,s=a.wrap;if(2===s||1===s&&a.status!==jt||a.lookahead)return Et;if(1===s&&(t.adler=wt(t.adler,e,i,0)),a.wrap=0,i>=a.w_size){0===s&&(qt(a.head),a.strstart=0,a.block_start=0,a.insert=0);let t=new Uint8Array(a.w_size);t.set(e.subarray(i-a.w_size,i),0),e=t,i=a.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=i,t.next_in=0,t.input=e,ne(a);a.lookahead>=3;){let t=a.strstart,e=a.lookahead-2;do{a.ins_h=Qt(a,a.ins_h,a.window[t+3-1]),a.prev[t&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=t,t++}while(--e);a.strstart=t,a.lookahead=2,ne(a)}return a.strstart+=a.lookahead,a.block_start=a.strstart,a.insert=a.lookahead,a.lookahead=0,a.match_length=a.prev_length=2,a.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,a.wrap=s,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const me=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const i=e.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const e in i)me(i,e)&&(t[e]=i[e])}}return t},be=t=>{let e=0;for(let i=0,a=t.length;i<a;i++)e+=t[i].length;const i=new Uint8Array(e);for(let e=0,a=0,s=t.length;e<s;e++){let s=t[e];i.set(s,a),a+=s.length}return i};let Se=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Se=!1}const ve=new Uint8Array(256);for(let t=0;t<256;t++)ve[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ve[254]=ve[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,i,a,s,r,n=t.length,h=0;for(s=0;s<n;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),h+=i<128?1:i<2048?2:i<65536?3:4;for(e=new Uint8Array(h),r=0,s=0;r<h;s++)i=t.charCodeAt(s),55296==(64512&i)&&s+1<n&&(a=t.charCodeAt(s+1),56320==(64512&a)&&(i=65536+(i-55296<<10)+(a-56320),s++)),i<128?e[r++]=i:i<2048?(e[r++]=192|i>>>6,e[r++]=128|63&i):i<65536?(e[r++]=224|i>>>12,e[r++]=128|i>>>6&63,e[r++]=128|63&i):(e[r++]=240|i>>>18,e[r++]=128|i>>>12&63,e[r++]=128|i>>>6&63,e[r++]=128|63&i);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:Ue,Z_FULL_FLUSH:Ie,Z_FINISH:Fe,Z_OK:ze,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Ce(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let i=pe.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(i!==ze)throw new Error(yt[i]);if(e.header&&pe.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,i=pe.deflateSetDictionary(this.strm,t),i!==ze)throw new Error(yt[i]);this._dict_set=!0}}Ce.prototype.push=function(t,e){const i=this.strm,a=this.options.chunkSize;let s,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?Fe:xe,"string"==typeof t?i.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?i.input=new Uint8Array(t):i.input=t,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(a),i.next_out=0,i.avail_out=a),(r===Ue||r===Ie)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(s=pe.deflate(i,r),s===Oe)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),s=pe.deflateEnd(this.strm),this.onEnd(s),this.ended=!0,s===ze;if(0!==i.avail_out){if(r>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},Ce.prototype.onData=function(t){this.chunks.push(t)},Ce.prototype.onEnd=function(t){t===ze&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var $e={deflate:function(t,e){const i=new Ce(e);if(i.push(t,!0),i.err)throw i.msg||yt[i.err];return i.result}};const{deflate:Te}=$e;var Pe=Te;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let i=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const a=[];let s=!0;for(let a=0;a<t.length;a++)"<"==t[a]?s=!0:">"==t[a]?s=!1:(r(t[a],e[i]),i++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const i=Le[t].bytes,r=new DataView(new ArrayBuffer(i));Le[t].p.bind(r)(0,e,s);for(let t=0;t<i;t++)a.push(r.getUint8(t))}return a},Me=(t,e)=>{let i=0;const a=[];let s=!0;for(const e of t)"<"==e?s=!0:">"==e?s=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[i+t]);const h=Le[t].u.bind(n);a.push(h(0,s)),i+=r}return a};class Ze extends EventTarget{constructor(t,e,i){super(),this.port=t,this.logger=e,this._parent=i,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.__commandLock=Promise.resolve([0,[]]),this.__isReconfiguring=!1,this.state_DTR=!1,this.__writeChain=Promise.resolve()}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}get _commandLock(){return this._parent?this._parent._commandLock:this.__commandLock}set _commandLock(t){this._parent?this._parent._commandLock=t:this.__commandLock=t}get _isReconfiguring(){return this._parent?this._parent._isReconfiguring:this.__isReconfiguring}set _isReconfiguring(t){this._parent?this._parent._isReconfiguring=t:this.__isReconfiguring=t}detectUSBSerialChip(t,e){const i={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return i&&i[e]?i[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.connectWithResetStrategies(),await this.detectChip();const t=F(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),await this.drainInputBuffer(200),this._inputBuffer.length=0,await s(U);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${a(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${a(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==S)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:i}=await this._reader.read();if(i){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const a=Array.from(e);Array.prototype.push.apply(this._inputBuffer,a),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.hardResetUSBJTAGSerial(),this.logger.log("USB-JTAG/Serial reset.")):(await this.hardResetClassic(),this.logger.log("Classic reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],i=this._efuses[1],a=this._efuses[2],s=this._efuses[3];let r;if(this.chipFamily==l){if(0!=s)r=[s>>16&255,s>>8&255,255&s];else if(i>>16&255){if(1!=(i>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=i>>8&255,t[4]=255&i,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=a>>8&255,t[1]=255&a,t[2]=i>>24&255,t[3]=i>>16&255,t[4]=i>>8&255,t[5]=255&i;else{if(this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=i>>8&255,t[1]=255&i,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+a(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[i]=await this.getResponse(10);return i}async checkCommand(t,e,i=0,s=3e3){const r=async()=>{s=Math.min(s,3e5),await this.sendCommand(t,e,i);const[r,n]=await this.getResponse(t,s);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,c,u,_,f,g,w,p,m,y,b,S,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+a(t))):new Error("Command failure error code "+a(B[1]));return[r,h]};return this._commandLock=this._commandLock.then(r,r),this._commandLock}async sendCommand(e,i,a=0){const s=t([...Ne("<BBHI",0,e,i.length,a),...i]);this.debug&&this.logger.debug(`Writing ${s.length} byte${1==s.length?"":"s"}:`,s),await this.writeToStream(s)}async readPacket(t){let e=null,r=!1,n=[];for(;;){const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await s(1)}if(0==n.length){throw new z("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+i(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new z("Invalid head of packet ("+a(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(t)),this.logger.debug("Remaining data in serial buffer: "+i(this._inputBuffer))),new z("Invalid SLIP escape (0xdb, "+a(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+i(e)),e;e.push(t)}}}async getResponse(t,e=3e3){for(let i=0;i<100;i++){const i=await this.readPacket(e);if(i.length<8)continue;const[s,r,,n]=Me("<BBHI",i.slice(0,8));if(1!=s)continue;const h=i.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${a(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const i of t)e^=i;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await s(U),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconfigure: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconfigure: ${t}`)}this._writer=void 0}await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),this._isReconfiguring=!1,await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this._isReconfiguring=!1,this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async connectWithResetStrategies(){var t,e;const i=this.port.getInfo(),a=4097===i.usbProductId,s=12346===i.usbVendorId;this.logger.log(`Detected USB: VID=0x${(null===(t=i.usbVendorId)||void 0===t?void 0:t.toString(16))||"unknown"}, PID=0x${(null===(e=i.usbProductId)||void 0===e?void 0:e.toString(16))||"unknown"}`);const r=[];(a||s)&&r.push({name:"USB-JTAG/Serial",fn:async()=>await this.hardResetUSBJTAGSerial()}),r.push({name:"Classic",fn:async()=>await this.hardResetClassic()}),a||s||r.push({name:"USB-JTAG/Serial (fallback)",fn:async()=>await this.hardResetUSBJTAGSerial()});let n=null;for(const t of r)try{if(this.logger.log(`Trying ${t.name} reset...`),!this.connected||!this.port.writable){this.logger.log(`Port disconnected, skipping ${t.name} reset`);continue}return await t.fn(),await this.sync(),void this.logger.log(`Connected successfully with ${t.name} reset.`)}catch(e){if(n=e,this.logger.log(`${t.name} reset failed: ${e.message}`),!this.connected||!this.port.writable){this.logger.log("Port disconnected during reset attempt");break}this._inputBuffer.length=0,await this.drainInputBuffer(200),await this.flushSerialBuffers()}throw new Error(`Couldn't sync to ESP. Try resetting manually. Last error: ${null==n?void 0:n.message}`)}async hardResetUSBJTAGSerial(){await this.setRTS(!1),await this.setDTR(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),await this.sleep(200)}async hardResetClassic(){await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),await this.sleep(200)}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await s(U),!0;await s(U)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,U);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,i=0,s=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),i=e[0],s=e[2],r=e[3];this.logger.log(`Image header, Magic=${a(i)}, FlashMode=${a(s)}, FlashSizeFreq=${a(r)}`)}const r=t.byteLength;let n,h=0,o=k;s?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,i)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,i));let l=[],d=0,c=0,u=0;const _=Date.now(),f=this.getFlashWriteSize(),g=s?h:r;for(;g-u>0;)this.debug&&this.logger.log(`Writing at ${a(i+d*f,8)} `),g-u>=f?l=Array.from(new Uint8Array(n,u,f)):(l=Array.from(new Uint8Array(n,u,g-u)),s||(l=l.concat(new Array(f-l.length).fill(255)))),s?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,c+=s?Math.round(l.length*r/h):l.length,u+=f,e(Math.min(c,r),r);this.logger.log("Took "+(Date.now()-_)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),s?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,i=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashDeflBlock(t,e,i=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),i)}async flashBegin(t=0,e=0,i=!1){let s;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,c,u,_,f,g,w,p,m,y,b,S,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);s=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:I(3e4,t),o=Date.now();let B=Ne("<IIII",s,n,r,e);return this.chipFamily!=d&&this.chipFamily!=c&&this.chipFamily!=u&&this.chipFamily!=_&&this.chipFamily!=f&&this.chipFamily!=g&&this.chipFamily!=w&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v||(B=B.concat(Ne("<I",i?1:0))),this.logger.log("Erase size "+s+", blocks "+n+", block size "+a(r,4)+", offset "+a(e,4)+", encrypted "+(i?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,i=0){const a=this.getFlashWriteSize(),s=Math.floor((e+a-1)/a),r=Math.floor((t+a-1)/a);let n=0,h=0;this.IS_STUB?(n=t,h=I(3e4,n)):(n=r*a,h=k);const o=Ne("<IIII",n,s,a,i);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return F(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,i=4294967295,a=0,s=0){let r=Ne("<IIII",t,e,i,a);s>0&&(r=r.concat(Ne("<IIII",F(this.getChipFamily()).uartDateReg,0,0,s))),await this.checkCommand(9,r)}async setDataLengths(t,e,i){if(-1!=t.mosiDlenOffs){const a=t.regBase+t.mosiDlenOffs,s=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(a,e-1),i>0&&await this.writeRegister(s,i-1)}else{const a=t.regBase+t.usr1Offs,s=(0==i?0:i-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(a,s)}}async waitDone(t,e){for(let i=0;i<10;i++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,i=0){const s=F(this.getChipFamily()),r=s.regBase,n=r,h=r+s.usrOffs,o=r+s.usr2Offs,l=r+s.w0Offs,d=1<<18;if(i>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const c=8*e.length,u=await this.readRegister(h),_=await this.readRegister(o);let f=1<<31;if(i>0&&(f|=268435456),c>0&&(f|=134217728),await this.setDataLengths(s,c,i),await this.writeRegister(h,f),await this.writeRegister(o,7<<28|t),0==c)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const i=Me("I".repeat(Math.floor(e.length/4)),e);let s=l;this.logger.debug(`Words Length: ${i.length}`);for(const t of i)this.logger.debug(`Writing word ${a(t)} to register offset ${a(s)}`),await this.writeRegister(s,t),s+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,u),await this.writeRegister(o,_),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,i=t>>16&255;this.logger.log(`FlashId: ${a(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${i.toString(16)}`),this.flashSize=r[i],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const i=4096,a=Math.floor((e+i-1)/i);let s=16-Math.floor(t/i)%16;return a<s&&(s=a),a<2*s?Math.floor((a+1)/2*i):(a-s)*i}async memBegin(t,e,i,a){return await this.checkCommand(5,Ne("<IIII",t,e,i,a))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,i=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,i,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const i=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const a=e[t],s=e[`${t}_start`],r=a.length,n=Math.floor((r+i-1)/i);await this.memBegin(r,n,i,s);for(const t of Array(n).keys()){const e=t*i;let s=e+i;s>r&&(s=r),await this.memBlock(a.slice(e,s),t)}}await this.memFinish(e.entry);const a=await this.readPacket(500),s=String.fromCharCode(...a);if("OHAI"!=s)throw new Error("Failed to start stub. Unexpected response: "+s);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}get _writer(){return this._parent?this._parent._writer:this.__writer}set _writer(t){this._parent?this._parent._writer=t:this.__writer=t}get _writeChain(){return this._parent?this._parent._writeChain:this.__writeChain}set _writeChain(t){this._parent?this._parent._writeChain=t:this.__writeChain=t}async writeToStream(t){if(this.port.writable){if(this._isReconfiguring)throw new Error("Cannot write during port reconfiguration");this._writeChain=this._writeChain.then(async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");if(!this._writer)try{this._writer=this.port.writable.getWriter()}catch(t){throw this.logger.error(`Failed to get writer: ${t}`),t}await this._writer.write(new Uint8Array(t))},async()=>{if(!this.port.writable)throw new Error("Port became unavailable during write");this._writer||(this._writer=this.port.writable.getWriter()),await this._writer.write(new Uint8Array(t))}).catch(t=>{if(this.logger.error(`Write error: ${t}`),this._writer){try{this._writer.releaseLock()}catch(t){}this._writer=void 0}throw t}),await this._writeChain}else this.logger.debug("Port writable stream not available, skipping write")}async disconnect(){if(this._parent)await this._parent.disconnect();else if(this.port.writable)try{try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during disconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{await this._writer.close(),this._writer.releaseLock()}catch(t){this.logger.debug(`Writer close/release error: ${t}`)}this._writer=void 0}else try{const t=this.port.writable.getWriter();await t.close(),t.releaseLock()}catch(t){this.logger.debug(`Direct writer close error: ${t}`)}await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1}finally{this._isReconfiguring=!1}else this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)await this._parent.reconnect();else try{this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[];try{await this._writeChain}catch(t){this.logger.debug(`Pending write error during reconnect: ${t}`)}if(this._isReconfiguring=!0,this._writer){try{this._writer.releaseLock()}catch(t){this.logger.debug(`Writer release error during reconnect: ${t}`)}this._writer=void 0}if(this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this._isReconfiguring=!1;const t=this.chipFamily,e=this.chipName,i=this.chipRevision,a=this.chipVariant,s=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=i,this.chipVariant=a,this.flashSize=s,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}catch(t){throw this._isReconfiguring=!1,t}}async drainInputBuffer(t=200){await s(t);let e=0;const i=Date.now();for(;e<112&&Date.now()-i<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await s(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await s(U),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,i,a){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${i} bytes from flash at address 0x${e.toString(16)}...`);let r=new Uint8Array(0),n=e,h=i;for(;h>0;){const e=Math.min(65536,h);let o=!1,l=0;const d=5;let c=!1;for(;!o&&l<=d;){let i=new Uint8Array(0);try{0===l&&this.logger.debug(`Reading chunk at 0x${n.toString(16)}, size: 0x${e.toString(16)}`);const a=Ne("<IIII",n,e,4096,1024),[h]=await this.checkCommand(210,a);if(0!=h)throw new Error("Failed to read memory: "+h);for(;i.length<e;){let a;try{a=await this.readPacket(100)}catch(t){if(t instanceof z){this.logger.debug(`SLIP read error at ${i.length} bytes: ${t.message}`);try{const t=[192,192];await this.writeToStream(t),this.logger.debug("Sent abort frame to stub"),await s(50)}catch(t){this.logger.debug(`Abort frame error: ${t}`)}if(await this.drainInputBuffer(200),i.length>=e)break}throw t}if(a&&a.length>0){const e=new Uint8Array(a),s=new Uint8Array(i.length+e.length);s.set(i),s.set(e,i.length),i=s;const r=Ne("<I",i.length),n=t(r);await this.writeToStream(n)}}const d=new Uint8Array(r.length+i.length);d.set(r),d.set(i,r.length),r=d,o=!0}catch(t){if(l++,!(t instanceof z))throw t;if(l<=d){this.logger.log(`${t.message} at 0x${n.toString(16)}. Draining buffer and retrying (attempt ${l}/${d})...`);try{await this.drainInputBuffer(200),await this.flushSerialBuffers(),await s(U)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}else{if(c)throw new Error(`Failed to read chunk at 0x${n.toString(16)} after ${d} retries and deep recovery attempt`);c=!0,this.logger.log(`All retries exhausted at 0x${n.toString(16)}. Attempting deep recovery (reconnect + reload stub)...`);try{await this.reconnect(),this.logger.log("Deep recovery successful. Resuming read from current position..."),l=0;continue}catch(t){throw new Error(`Failed to read chunk at 0x${n.toString(16)} after ${d} retries and deep recovery failed: ${t}`)}}}}a&&a(new Uint8Array(e),r.length,i),n+=e,h-=e,this.logger.debug(`Total progress: 0x${r.length.toString(16)} from 0x${i.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${r.length} bytes from flash`),r}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,i,s){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=s,h=s+t;this.logger.debug(`Load range: ${a(n,8)}-${a(h,8)}`),this.logger.debug(`Stub data: ${a(r.data_start,8)}, len: ${r.data.length}, text: ${a(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+a(t,8)+"-"+a(e,8)+". Can't load binary at overlapping address range "+a(n,8)+"-"+a(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,_ as CHIP_FAMILY_ESP32C2,f as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,w as CHIP_FAMILY_ESP32C6,p as CHIP_FAMILY_ESP32C61,m as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,S as CHIP_FAMILY_ESP32P4,c as CHIP_FAMILY_ESP32S2,u as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
|
package/package.json
CHANGED
package/src/esp_loader.ts
CHANGED
|
@@ -86,7 +86,7 @@ export class ESPLoader extends EventTarget {
|
|
|
86
86
|
private _isESP32S2NativeUSB: boolean = false;
|
|
87
87
|
private _initializationSucceeded: boolean = false;
|
|
88
88
|
private __commandLock: Promise<[number, number[]]> = Promise.resolve([0, []]);
|
|
89
|
-
private
|
|
89
|
+
private __isReconfiguring: boolean = false;
|
|
90
90
|
|
|
91
91
|
constructor(
|
|
92
92
|
public port: SerialPort,
|
|
@@ -126,6 +126,20 @@ export class ESPLoader extends EventTarget {
|
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
+
private get _isReconfiguring(): boolean {
|
|
130
|
+
return this._parent
|
|
131
|
+
? this._parent._isReconfiguring
|
|
132
|
+
: this.__isReconfiguring;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
private set _isReconfiguring(value: boolean) {
|
|
136
|
+
if (this._parent) {
|
|
137
|
+
this._parent._isReconfiguring = value;
|
|
138
|
+
} else {
|
|
139
|
+
this.__isReconfiguring = value;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
129
143
|
private detectUSBSerialChip(
|
|
130
144
|
vendorId: number,
|
|
131
145
|
productId: number,
|
|
@@ -674,27 +688,28 @@ export class ESPLoader extends EventTarget {
|
|
|
674
688
|
async readPacket(timeout: number): Promise<number[]> {
|
|
675
689
|
let partialPacket: number[] | null = null;
|
|
676
690
|
let inEscape = false;
|
|
677
|
-
|
|
678
|
-
const startTime = Date.now();
|
|
679
|
-
|
|
691
|
+
let readBytes: number[] = [];
|
|
680
692
|
while (true) {
|
|
681
|
-
|
|
682
|
-
|
|
693
|
+
const stamp = Date.now();
|
|
694
|
+
readBytes = [];
|
|
695
|
+
while (Date.now() - stamp < timeout) {
|
|
696
|
+
if (this._inputBuffer.length > 0) {
|
|
697
|
+
readBytes.push(this._inputBuffer.shift()!);
|
|
698
|
+
break;
|
|
699
|
+
} else {
|
|
700
|
+
// Reduced sleep time for faster response during high-speed transfers
|
|
701
|
+
await sleep(1);
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
if (readBytes.length == 0) {
|
|
683
705
|
const waitingFor = partialPacket === null ? "header" : "content";
|
|
684
706
|
throw new SlipReadError("Timed out waiting for packet " + waitingFor);
|
|
685
707
|
}
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
}
|
|
692
|
-
|
|
693
|
-
// Process all available bytes without going back to outer loop
|
|
694
|
-
// This is critical for handling high-speed burst transfers
|
|
695
|
-
while (this._inputBuffer.length > 0) {
|
|
696
|
-
const b = this._inputBuffer.shift()!;
|
|
697
|
-
|
|
708
|
+
if (this.debug)
|
|
709
|
+
this.logger.debug(
|
|
710
|
+
"Read " + readBytes.length + " bytes: " + hexFormatter(readBytes),
|
|
711
|
+
);
|
|
712
|
+
for (const b of readBytes) {
|
|
698
713
|
if (partialPacket === null) {
|
|
699
714
|
// waiting for packet header
|
|
700
715
|
if (b == 0xc0) {
|
|
@@ -844,8 +859,6 @@ export class ESPLoader extends EventTarget {
|
|
|
844
859
|
|
|
845
860
|
async reconfigurePort(baud: number) {
|
|
846
861
|
try {
|
|
847
|
-
this._isReconfiguring = true;
|
|
848
|
-
|
|
849
862
|
// Wait for pending writes to complete
|
|
850
863
|
try {
|
|
851
864
|
await this._writeChain;
|
|
@@ -853,6 +866,9 @@ export class ESPLoader extends EventTarget {
|
|
|
853
866
|
this.logger.debug(`Pending write error during reconfigure: ${err}`);
|
|
854
867
|
}
|
|
855
868
|
|
|
869
|
+
// Block new writes during port close/open
|
|
870
|
+
this._isReconfiguring = true;
|
|
871
|
+
|
|
856
872
|
// Release persistent writer before closing
|
|
857
873
|
if (this._writer) {
|
|
858
874
|
try {
|
|
@@ -873,16 +889,18 @@ export class ESPLoader extends EventTarget {
|
|
|
873
889
|
// Reopen Port
|
|
874
890
|
await this.port.open({ baudRate: baud });
|
|
875
891
|
|
|
892
|
+
// Port is now open - allow writes again
|
|
893
|
+
this._isReconfiguring = false;
|
|
894
|
+
|
|
876
895
|
// Clear buffer again
|
|
877
896
|
await this.flushSerialBuffers();
|
|
878
897
|
|
|
879
898
|
// Restart Readloop
|
|
880
899
|
this.readLoop();
|
|
881
900
|
} catch (e) {
|
|
901
|
+
this._isReconfiguring = false;
|
|
882
902
|
this.logger.error(`Reconfigure port error: ${e}`);
|
|
883
903
|
throw new Error(`Unable to change the baud rate to ${baud}: ${e}`);
|
|
884
|
-
} finally {
|
|
885
|
-
this._isReconfiguring = false;
|
|
886
904
|
}
|
|
887
905
|
}
|
|
888
906
|
|
|
@@ -1734,8 +1752,6 @@ export class ESPLoader extends EventTarget {
|
|
|
1734
1752
|
}
|
|
1735
1753
|
|
|
1736
1754
|
try {
|
|
1737
|
-
this._isReconfiguring = true;
|
|
1738
|
-
|
|
1739
1755
|
// Wait for pending writes to complete
|
|
1740
1756
|
try {
|
|
1741
1757
|
await this._writeChain;
|
|
@@ -1743,6 +1759,9 @@ export class ESPLoader extends EventTarget {
|
|
|
1743
1759
|
this.logger.debug(`Pending write error during disconnect: ${err}`);
|
|
1744
1760
|
}
|
|
1745
1761
|
|
|
1762
|
+
// Block new writes during disconnect
|
|
1763
|
+
this._isReconfiguring = true;
|
|
1764
|
+
|
|
1746
1765
|
// Release persistent writer before closing
|
|
1747
1766
|
if (this._writer) {
|
|
1748
1767
|
try {
|
|
@@ -1788,8 +1807,6 @@ export class ESPLoader extends EventTarget {
|
|
|
1788
1807
|
}
|
|
1789
1808
|
|
|
1790
1809
|
try {
|
|
1791
|
-
this._isReconfiguring = true;
|
|
1792
|
-
|
|
1793
1810
|
this.logger.log("Reconnecting serial port...");
|
|
1794
1811
|
|
|
1795
1812
|
this.connected = false;
|
|
@@ -1802,6 +1819,9 @@ export class ESPLoader extends EventTarget {
|
|
|
1802
1819
|
this.logger.debug(`Pending write error during reconnect: ${err}`);
|
|
1803
1820
|
}
|
|
1804
1821
|
|
|
1822
|
+
// Block new writes during port close/open
|
|
1823
|
+
this._isReconfiguring = true;
|
|
1824
|
+
|
|
1805
1825
|
// Release persistent writer
|
|
1806
1826
|
if (this._writer) {
|
|
1807
1827
|
try {
|
|
@@ -1846,6 +1866,9 @@ export class ESPLoader extends EventTarget {
|
|
|
1846
1866
|
);
|
|
1847
1867
|
}
|
|
1848
1868
|
|
|
1869
|
+
// Port is now open and ready - allow writes for initialization
|
|
1870
|
+
this._isReconfiguring = false;
|
|
1871
|
+
|
|
1849
1872
|
// Save chip info and flash size (no need to detect again)
|
|
1850
1873
|
const savedChipFamily = this.chipFamily;
|
|
1851
1874
|
const savedChipName = this.chipName;
|
|
@@ -1900,8 +1923,10 @@ export class ESPLoader extends EventTarget {
|
|
|
1900
1923
|
Object.assign(this, stubLoader);
|
|
1901
1924
|
}
|
|
1902
1925
|
this.logger.debug("Reconnection successful");
|
|
1903
|
-
}
|
|
1926
|
+
} catch (err) {
|
|
1927
|
+
// Ensure flag is reset on error
|
|
1904
1928
|
this._isReconfiguring = false;
|
|
1929
|
+
throw err;
|
|
1905
1930
|
}
|
|
1906
1931
|
}
|
|
1907
1932
|
|
|
@@ -2014,7 +2039,8 @@ export class ESPLoader extends EventTarget {
|
|
|
2014
2039
|
const chunkSize = Math.min(CHUNK_SIZE, remainingSize);
|
|
2015
2040
|
let chunkSuccess = false;
|
|
2016
2041
|
let retryCount = 0;
|
|
2017
|
-
const MAX_RETRIES =
|
|
2042
|
+
const MAX_RETRIES = 5;
|
|
2043
|
+
let deepRecoveryAttempted = false;
|
|
2018
2044
|
|
|
2019
2045
|
// Retry loop for this chunk
|
|
2020
2046
|
while (!chunkSuccess && retryCount <= MAX_RETRIES) {
|
|
@@ -2120,9 +2146,36 @@ export class ESPLoader extends EventTarget {
|
|
|
2120
2146
|
this.logger.debug(`Buffer drain error: ${drainErr}`);
|
|
2121
2147
|
}
|
|
2122
2148
|
} else {
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2149
|
+
// All retries exhausted - attempt deep recovery by reconnecting and reloading stub
|
|
2150
|
+
if (!deepRecoveryAttempted) {
|
|
2151
|
+
deepRecoveryAttempted = true;
|
|
2152
|
+
|
|
2153
|
+
this.logger.log(
|
|
2154
|
+
`All retries exhausted at 0x${currentAddr.toString(16)}. Attempting deep recovery (reconnect + reload stub)...`,
|
|
2155
|
+
);
|
|
2156
|
+
|
|
2157
|
+
try {
|
|
2158
|
+
// Reconnect will close port, reopen, and reload stub
|
|
2159
|
+
await this.reconnect();
|
|
2160
|
+
|
|
2161
|
+
this.logger.log(
|
|
2162
|
+
"Deep recovery successful. Resuming read from current position...",
|
|
2163
|
+
);
|
|
2164
|
+
|
|
2165
|
+
// Reset retry counter to give it another chance after recovery
|
|
2166
|
+
retryCount = 0;
|
|
2167
|
+
continue;
|
|
2168
|
+
} catch (reconnectErr) {
|
|
2169
|
+
throw new Error(
|
|
2170
|
+
`Failed to read chunk at 0x${currentAddr.toString(16)} after ${MAX_RETRIES} retries and deep recovery failed: ${reconnectErr}`,
|
|
2171
|
+
);
|
|
2172
|
+
}
|
|
2173
|
+
} else {
|
|
2174
|
+
// Deep recovery already attempted, give up
|
|
2175
|
+
throw new Error(
|
|
2176
|
+
`Failed to read chunk at 0x${currentAddr.toString(16)} after ${MAX_RETRIES} retries and deep recovery attempt`,
|
|
2177
|
+
);
|
|
2178
|
+
}
|
|
2126
2179
|
}
|
|
2127
2180
|
} else {
|
|
2128
2181
|
// Non-SLIP error, don't retry
|