@apocaliss92/scrypted-reolink-native 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.nodejs.js +1 -1
- package/dist/plugin.zip +0 -0
- package/package.json +1 -1
- package/src/camera.ts +89 -83
- package/src/connect.ts +146 -0
- package/src/main.ts +18 -6
package/dist/main.nodejs.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see main.nodejs.js.LICENSE.txt */
|
|
2
|
-
(()=>{var e={9038:(e,t,A)=>{"use strict";const r=A(1167),s=A(5497),n=A(8542),i=A(8055),o=A(3315),a=A(9246),c=A(4667),g=A(8712),l=A(8297),h=A(4465),d=A(2858),{InvalidArgumentError:u}=h,E=A(9713),I=A(1986),Q=A(615),{MockCallHistory:B,MockCallHistoryLog:C}=A(4969),p=A(7467),f=A(5846),m=A(1313),y=A(3123),D=A(6294),{getGlobalDispatcher:S,setGlobalDispatcher:w}=A(9879),b=A(6917),R=A(8064);Object.assign(s.prototype,E),A(5132),A(2936),A(532),A(3562),A(6677),A(5752),A(4951),A(9903);function N(e){return(t,A,r)=>{if("function"==typeof A&&(r=A,A=null),!t||"string"!=typeof t&&"object"!=typeof t&&!(t instanceof URL))throw new u("invalid url");if(null!=A&&"object"!=typeof A)throw new u("invalid opts");if(A&&null!=A.path){if("string"!=typeof A.path)throw new u("invalid opts.path");let e=A.path;A.path.startsWith("/")||(e=`/${e}`),t=new URL(d.parseOrigin(t).origin+e)}else A||(A="object"==typeof t?t:{}),t=d.parseURL(t);const{agent:s,dispatcher:n=S()}=A;if(s)throw new u("unsupported opts.agent. Did you mean opts.client?");return e.call(n,{...A,origin:t.origin,path:t.search?`${t.pathname}${t.search}`:t.pathname,method:A.method||(A.body?"PUT":"GET")},r)}}A(2636),d.parseHeaders,d.headerNameToString;const k=A(7388).fetch;e.exports.hd=function(e,t=void 0){return k(e,t).catch((e=>{throw e&&"object"==typeof e&&Error.captureStackTrace(e),e}))},e.exports.Headers=A(6558).Headers,e.exports.Response=A(4821).Response,e.exports.Request=A(4609).Request,e.exports.FormData=A(3944).FormData;const{setGlobalOrigin:F,getGlobalOrigin:U}=A(2837);const{CacheStorage:M}=A(6939),{kConstruct:T}=A(257);new M(T);const{deleteCookie:v,getCookies:L,getSetCookies:H,setCookie:Y,parseCookie:x}=A(9391);const{parseMIMEType:V,serializeAMimeType:P}=A(9934);const{CloseEvent:G,ErrorEvent:O,MessageEvent:J}=A(878),{WebSocket:W,ping:q}=A(2984);e.exports.kb=W,e.exports.rd=G,e.exports.NN=O,e.exports.aM=J,A(27).WebSocketStream,A(7053).WebSocketError,N(E.request),N(E.stream),N(E.pipeline),N(E.connect),N(E.upgrade);const{EventSource:_}=A(7928);e.exports.GD=_},3904:(e,t,A)=>{"use strict";const{addAbortListener:r}=A(2858),{RequestAbortedError:s}=A(4465),n=Symbol("kListener"),i=Symbol("kSignal");function o(e){e.abort?e.abort(e[i]?.reason):e.reason=e[i]?.reason??new s,a(e)}function a(e){e[i]&&("removeEventListener"in e[i]?e[i].removeEventListener("abort",e[n]):e[i].removeListener("abort",e[n]),e[i]=null,e[n]=null)}e.exports={addSignal:function(e,t){e.reason=null,e[i]=null,e[n]=null,t&&(t.aborted?o(e):(e[i]=t,e[n]=()=>{o(e)},r(e[i],e[n])))},removeSignal:a}},3102:(e,t,A)=>{"use strict";const r=A(4589),{AsyncResource:s}=A(6698),{InvalidArgumentError:n,SocketError:i}=A(4465),o=A(2858),{addSignal:a,removeSignal:c}=A(3904);class g extends s{constructor(e,t){if(!e||"object"!=typeof e)throw new n("invalid opts");if("function"!=typeof t)throw new n("invalid callback");const{signal:A,opaque:r,responseHeaders:s}=e;if(A&&"function"!=typeof A.on&&"function"!=typeof A.addEventListener)throw new n("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=r||null,this.responseHeaders=s||null,this.callback=t,this.abort=null,a(this,A)}onConnect(e,t){this.reason?e(this.reason):(r(this.callback),this.abort=e,this.context=t)}onHeaders(){throw new i("bad connect",null)}onUpgrade(e,t,A){const{callback:r,opaque:s,context:n}=this;c(this),this.callback=null;let i=t;null!=i&&(i="raw"===this.responseHeaders?o.parseRawHeaders(t):o.parseHeaders(t)),this.runInAsyncScope(r,null,null,{statusCode:e,headers:i,socket:A,opaque:s,context:n})}onError(e){const{callback:t,opaque:A}=this;c(this),t&&(this.callback=null,queueMicrotask((()=>{this.runInAsyncScope(t,null,e,{opaque:A})})))}}e.exports=function e(t,A){if(void 0===A)return new Promise(((A,r)=>{e.call(this,t,((e,t)=>e?r(e):A(t)))}));try{const e=new g(t,A),r={...t,method:"CONNECT"};this.dispatch(r,e)}catch(e){if("function"!=typeof A)throw e;const r=t?.opaque;queueMicrotask((()=>A(e,{opaque:r})))}}},8660:(e,t,A)=>{"use strict";const{Readable:r,Duplex:s,PassThrough:n}=A(7075),i=A(4589),{AsyncResource:o}=A(6698),{InvalidArgumentError:a,InvalidReturnValueError:c,RequestAbortedError:g}=A(4465),l=A(2858),{addSignal:h,removeSignal:d}=A(3904);function u(){}const E=Symbol("resume");class I extends r{constructor(){super({autoDestroy:!0}),this[E]=null}_read(){const{[E]:e}=this;e&&(this[E]=null,e())}_destroy(e,t){this._read(),t(e)}}class Q extends r{constructor(e){super({autoDestroy:!0}),this[E]=e}_read(){this[E]()}_destroy(e,t){e||this._readableState.endEmitted||(e=new g),t(e)}}class B extends o{constructor(e,t){if(!e||"object"!=typeof e)throw new a("invalid opts");if("function"!=typeof t)throw new a("invalid handler");const{signal:A,method:r,opaque:n,onInfo:i,responseHeaders:o}=e;if(A&&"function"!=typeof A.on&&"function"!=typeof A.addEventListener)throw new a("signal must be an EventEmitter or EventTarget");if("CONNECT"===r)throw new a("invalid method");if(i&&"function"!=typeof i)throw new a("invalid onInfo callback");super("UNDICI_PIPELINE"),this.opaque=n||null,this.responseHeaders=o||null,this.handler=t,this.abort=null,this.context=null,this.onInfo=i||null,this.req=(new I).on("error",u),this.ret=new s({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{const{body:e}=this;e?.resume&&e.resume()},write:(e,t,A)=>{const{req:r}=this;r.push(e,t)||r._readableState.destroyed?A():r[E]=A},destroy:(e,t)=>{const{body:A,req:r,res:s,ret:n,abort:i}=this;e||n._readableState.endEmitted||(e=new g),i&&e&&i(),l.destroy(A,e),l.destroy(r,e),l.destroy(s,e),d(this),t(e)}}).on("prefinish",(()=>{const{req:e}=this;e.push(null)})),this.res=null,h(this,A)}onConnect(e,t){const{res:A}=this;this.reason?e(this.reason):(i(!A,"pipeline cannot be retried"),this.abort=e,this.context=t)}onHeaders(e,t,A){const{opaque:r,handler:s,context:n}=this;if(e<200){if(this.onInfo){const A="raw"===this.responseHeaders?l.parseRawHeaders(t):l.parseHeaders(t);this.onInfo({statusCode:e,headers:A})}return}let i;this.res=new Q(A);try{this.handler=null;const A="raw"===this.responseHeaders?l.parseRawHeaders(t):l.parseHeaders(t);i=this.runInAsyncScope(s,null,{statusCode:e,headers:A,opaque:r,body:this.res,context:n})}catch(e){throw this.res.on("error",u),e}if(!i||"function"!=typeof i.on)throw new c("expected Readable");i.on("data",(e=>{const{ret:t,body:A}=this;!t.push(e)&&A.pause&&A.pause()})).on("error",(e=>{const{ret:t}=this;l.destroy(t,e)})).on("end",(()=>{const{ret:e}=this;e.push(null)})).on("close",(()=>{const{ret:e}=this;e._readableState.ended||l.destroy(e,new g)})),this.body=i}onData(e){const{res:t}=this;return t.push(e)}onComplete(e){const{res:t}=this;t.push(null)}onError(e){const{ret:t}=this;this.handler=null,l.destroy(t,e)}}e.exports=function(e,t){try{const A=new B(e,t);return this.dispatch({...e,body:A.req},A),A.ret}catch(e){return(new n).destroy(e)}}},7745:(e,t,A)=>{"use strict";const r=A(4589),{AsyncResource:s}=A(6698),{Readable:n}=A(777),{InvalidArgumentError:i,RequestAbortedError:o}=A(4465),a=A(2858);function c(){}class g extends s{constructor(e,t){if(!e||"object"!=typeof e)throw new i("invalid opts");const{signal:A,method:r,opaque:s,body:n,onInfo:g,responseHeaders:l,highWaterMark:h}=e;try{if("function"!=typeof t)throw new i("invalid callback");if(h&&("number"!=typeof h||h<0))throw new i("invalid highWaterMark");if(A&&"function"!=typeof A.on&&"function"!=typeof A.addEventListener)throw new i("signal must be an EventEmitter or EventTarget");if("CONNECT"===r)throw new i("invalid method");if(g&&"function"!=typeof g)throw new i("invalid onInfo callback");super("UNDICI_REQUEST")}catch(e){throw a.isStream(n)&&a.destroy(n.on("error",c),e),e}this.method=r,this.responseHeaders=l||null,this.opaque=s||null,this.callback=t,this.res=null,this.abort=null,this.body=n,this.trailers={},this.context=null,this.onInfo=g||null,this.highWaterMark=h,this.reason=null,this.removeAbortListener=null,A?.aborted?this.reason=A.reason??new o:A&&(this.removeAbortListener=a.addAbortListener(A,(()=>{this.reason=A.reason??new o,this.res?a.destroy(this.res.on("error",c),this.reason):this.abort&&this.abort(this.reason)})))}onConnect(e,t){this.reason?e(this.reason):(r(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,A,r){const{callback:s,opaque:i,abort:o,context:g,responseHeaders:l,highWaterMark:h}=this,d="raw"===l?a.parseRawHeaders(t):a.parseHeaders(t);if(e<200)return void(this.onInfo&&this.onInfo({statusCode:e,headers:d}));const u="raw"===l?a.parseHeaders(t):d,E=u["content-type"],I=u["content-length"],Q=new n({resume:A,abort:o,contentType:E,contentLength:"HEAD"!==this.method&&I?Number(I):null,highWaterMark:h});if(this.removeAbortListener&&(Q.on("close",this.removeAbortListener),this.removeAbortListener=null),this.callback=null,this.res=Q,null!==s)try{this.runInAsyncScope(s,null,null,{statusCode:e,headers:d,trailers:this.trailers,opaque:i,body:Q,context:g})}catch(e){this.res=null,a.destroy(Q.on("error",c),e),queueMicrotask((()=>{throw e}))}}onData(e){return this.res.push(e)}onComplete(e){a.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){const{res:t,callback:A,body:r,opaque:s}=this;A&&(this.callback=null,queueMicrotask((()=>{this.runInAsyncScope(A,null,e,{opaque:s})}))),t&&(this.res=null,queueMicrotask((()=>{a.destroy(t.on("error",c),e)}))),r&&(this.body=null,a.isStream(r)&&(r.on("error",c),a.destroy(r,e))),this.removeAbortListener&&(this.removeAbortListener(),this.removeAbortListener=null)}}e.exports=function e(t,A){if(void 0===A)return new Promise(((A,r)=>{e.call(this,t,((e,t)=>e?r(e):A(t)))}));try{const e=new g(t,A);this.dispatch(t,e)}catch(e){if("function"!=typeof A)throw e;const r=t?.opaque;queueMicrotask((()=>A(e,{opaque:r})))}},e.exports.RequestHandler=g},322:(e,t,A)=>{"use strict";const r=A(4589),{finished:s}=A(7075),{AsyncResource:n}=A(6698),{InvalidArgumentError:i,InvalidReturnValueError:o}=A(4465),a=A(2858),{addSignal:c,removeSignal:g}=A(3904);function l(){}class h extends n{constructor(e,t,A){if(!e||"object"!=typeof e)throw new i("invalid opts");const{signal:r,method:s,opaque:n,body:o,onInfo:g,responseHeaders:h}=e;try{if("function"!=typeof A)throw new i("invalid callback");if("function"!=typeof t)throw new i("invalid factory");if(r&&"function"!=typeof r.on&&"function"!=typeof r.addEventListener)throw new i("signal must be an EventEmitter or EventTarget");if("CONNECT"===s)throw new i("invalid method");if(g&&"function"!=typeof g)throw new i("invalid onInfo callback");super("UNDICI_STREAM")}catch(e){throw a.isStream(o)&&a.destroy(o.on("error",l),e),e}this.responseHeaders=h||null,this.opaque=n||null,this.factory=t,this.callback=A,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=o,this.onInfo=g||null,a.isStream(o)&&o.on("error",(e=>{this.onError(e)})),c(this,r)}onConnect(e,t){this.reason?e(this.reason):(r(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,A,r){const{factory:n,opaque:i,context:c,responseHeaders:g}=this,l="raw"===g?a.parseRawHeaders(t):a.parseHeaders(t);if(e<200)return void(this.onInfo&&this.onInfo({statusCode:e,headers:l}));if(this.factory=null,null===n)return;const h=this.runInAsyncScope(n,null,{statusCode:e,headers:l,opaque:i,context:c});if(!h||"function"!=typeof h.write||"function"!=typeof h.end||"function"!=typeof h.on)throw new o("expected Writable");s(h,{readable:!1},(e=>{const{callback:t,res:A,opaque:r,trailers:s,abort:n}=this;this.res=null,!e&&A?.readable||a.destroy(A,e),this.callback=null,this.runInAsyncScope(t,null,e||null,{opaque:r,trailers:s}),e&&n()})),h.on("drain",A),this.res=h;return!0!==(void 0!==h.writableNeedDrain?h.writableNeedDrain:h._writableState?.needDrain)}onData(e){const{res:t}=this;return!t||t.write(e)}onComplete(e){const{res:t}=this;g(this),t&&(this.trailers=a.parseHeaders(e),t.end())}onError(e){const{res:t,callback:A,opaque:r,body:s}=this;g(this),this.factory=null,t?(this.res=null,a.destroy(t,e)):A&&(this.callback=null,queueMicrotask((()=>{this.runInAsyncScope(A,null,e,{opaque:r})}))),s&&(this.body=null,a.destroy(s,e))}}e.exports=function e(t,A,r){if(void 0===r)return new Promise(((r,s)=>{e.call(this,t,A,((e,t)=>e?s(e):r(t)))}));try{const e=new h(t,A,r);this.dispatch(t,e)}catch(e){if("function"!=typeof r)throw e;const A=t?.opaque;queueMicrotask((()=>r(e,{opaque:A})))}}},3936:(e,t,A)=>{"use strict";const{InvalidArgumentError:r,SocketError:s}=A(4465),{AsyncResource:n}=A(6698),i=A(4589),o=A(2858),{addSignal:a,removeSignal:c}=A(3904);class g extends n{constructor(e,t){if(!e||"object"!=typeof e)throw new r("invalid opts");if("function"!=typeof t)throw new r("invalid callback");const{signal:A,opaque:s,responseHeaders:n}=e;if(A&&"function"!=typeof A.on&&"function"!=typeof A.addEventListener)throw new r("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE"),this.responseHeaders=n||null,this.opaque=s||null,this.callback=t,this.abort=null,this.context=null,a(this,A)}onConnect(e,t){this.reason?e(this.reason):(i(this.callback),this.abort=e,this.context=null)}onHeaders(){throw new s("bad upgrade",null)}onUpgrade(e,t,A){i(101===e);const{callback:r,opaque:s,context:n}=this;c(this),this.callback=null;const a="raw"===this.responseHeaders?o.parseRawHeaders(t):o.parseHeaders(t);this.runInAsyncScope(r,null,null,{headers:a,socket:A,opaque:s,context:n})}onError(e){const{callback:t,opaque:A}=this;c(this),t&&(this.callback=null,queueMicrotask((()=>{this.runInAsyncScope(t,null,e,{opaque:A})})))}}e.exports=function e(t,A){if(void 0===A)return new Promise(((A,r)=>{e.call(this,t,((e,t)=>e?r(e):A(t)))}));try{const e=new g(t,A),r={...t,method:t.method||"GET",upgrade:t.protocol||"Websocket"};this.dispatch(r,e)}catch(e){if("function"!=typeof A)throw e;const r=t?.opaque;queueMicrotask((()=>A(e,{opaque:r})))}}},9713:(e,t,A)=>{"use strict";e.exports.request=A(7745),e.exports.stream=A(322),e.exports.pipeline=A(8660),e.exports.upgrade=A(3936),e.exports.connect=A(3102)},777:(e,t,A)=>{"use strict";const r=A(4589),{Readable:s}=A(7075),{RequestAbortedError:n,NotSupportedError:i,InvalidArgumentError:o,AbortError:a}=A(4465),c=A(2858),{ReadableStreamFrom:g}=A(2858),l=Symbol("kConsume"),h=Symbol("kReading"),d=Symbol("kBody"),u=Symbol("kAbort"),E=Symbol("kContentType"),I=Symbol("kContentLength"),Q=Symbol("kUsed"),B=Symbol("kBytesRead"),C=()=>{};function p(e){return c.isDisturbed(e)||function(e){return!0===e[d]?.locked||null!==e[l]}(e)}function f(e,t){return r(!e[l]),new Promise(((A,r)=>{if(p(e)){const t=e._readableState;t.destroyed&&!1===t.closeEmitted?e.on("error",r).on("close",(()=>{r(new TypeError("unusable"))})):r(t.errored??new TypeError("unusable"))}else queueMicrotask((()=>{e[l]={type:t,stream:e,resolve:A,reject:r,length:0,body:[]},e.on("error",(function(e){w(this[l],e)})).on("close",(function(){null!==this[l].body&&w(this[l],new n)})),function(e){if(null===e.body)return;const{_readableState:t}=e.stream;if(t.bufferIndex){const A=t.bufferIndex,r=t.buffer.length;for(let s=A;s<r;s++)S(e,t.buffer[s])}else for(const A of t.buffer)S(e,A);t.endEmitted?D(this[l],this._readableState.encoding):e.stream.on("end",(function(){D(this[l],this._readableState.encoding)}));e.stream.resume();for(;null!=e.stream.read(););}(e[l])}))}))}function m(e,t,A){if(0===e.length||0===t)return"";const r=1===e.length?e[0]:Buffer.concat(e,t),s=r.length,n=s>2&&239===r[0]&&187===r[1]&&191===r[2]?3:0;return A&&"utf8"!==A&&"utf-8"!==A?r.subarray(n,s).toString(A):r.utf8Slice(n,s)}function y(e,t){if(0===e.length||0===t)return new Uint8Array(0);if(1===e.length)return new Uint8Array(e[0]);const A=new Uint8Array(Buffer.allocUnsafeSlow(t).buffer);let r=0;for(let t=0;t<e.length;++t){const s=e[t];A.set(s,r),r+=s.length}return A}function D(e,t){const{type:A,body:r,resolve:s,stream:n,length:i}=e;try{"text"===A?s(m(r,i,t)):"json"===A?s(JSON.parse(m(r,i,t))):"arrayBuffer"===A?s(y(r,i).buffer):"blob"===A?s(new Blob(r,{type:n[E]})):"bytes"===A&&s(y(r,i)),w(e)}catch(e){n.destroy(e)}}function S(e,t){e.length+=t.length,e.body.push(t)}function w(e,t){null!==e.body&&(t?e.reject(t):e.resolve(),e.type=null,e.stream=null,e.resolve=null,e.reject=null,e.length=0,e.body=null)}e.exports={Readable:class extends s{constructor({resume:e,abort:t,contentType:A="",contentLength:r,highWaterMark:s=65536}){super({autoDestroy:!0,read:e,highWaterMark:s}),this._readableState.dataEmitted=!1,this[u]=t,this[l]=null,this[B]=0,this[d]=null,this[Q]=!1,this[E]=A,this[I]=Number.isFinite(r)?r:null,this[h]=!1}_destroy(e,t){e||this._readableState.endEmitted||(e=new n),e&&this[u](),this[Q]?t(e):setImmediate(t,e)}on(e,t){return"data"!==e&&"readable"!==e||(this[h]=!0,this[Q]=!0),super.on(e,t)}addListener(e,t){return this.on(e,t)}off(e,t){const A=super.off(e,t);return"data"!==e&&"readable"!==e||(this[h]=this.listenerCount("data")>0||this.listenerCount("readable")>0),A}removeListener(e,t){return this.off(e,t)}push(e){return e&&(this[B]+=e.length,this[l])?(S(this[l],e),!this[h]||super.push(e)):super.push(e)}text(){return f(this,"text")}json(){return f(this,"json")}blob(){return f(this,"blob")}bytes(){return f(this,"bytes")}arrayBuffer(){return f(this,"arrayBuffer")}async formData(){throw new i}get bodyUsed(){return c.isDisturbed(this)}get body(){return this[d]||(this[d]=g(this),this[l]&&(this[d].getReader(),r(this[d].locked))),this[d]}dump(e){const t=e?.signal;if(null!=t&&("object"!=typeof t||!("aborted"in t)))return Promise.reject(new o("signal must be an AbortSignal"));const A=e?.limit&&Number.isFinite(e.limit)?e.limit:131072;return t?.aborted?Promise.reject(t.reason??new a):this._readableState.closeEmitted?Promise.resolve(null):new Promise(((e,r)=>{if((this[I]&&this[I]>A||this[B]>A)&&this.destroy(new a),t){const A=()=>{this.destroy(t.reason??new a)};t.addEventListener("abort",A),this.on("close",(function(){t.removeEventListener("abort",A),t.aborted?r(t.reason??new a):e(null)}))}else this.on("close",e);this.on("error",C).on("data",(()=>{this[B]>A&&this.destroy()})).resume()}))}setEncoding(e){return Buffer.isEncoding(e)&&(this._readableState.encoding=e),this}},chunksDecode:m}},9903:(e,t,A)=>{"use strict";const{Writable:r}=A(7075),{EventEmitter:s}=A(8474),{assertCacheKey:n,assertCacheValue:i}=A(9453);function o(e,t,A){return t.find((t=>t.deleteAt>A&&t.method===e.method&&(null==t.vary||Object.keys(t.vary).every((A=>null===t.vary[A]?void 0===e.headers[A]:t.vary[A]===e.headers[A])))))}e.exports=class extends s{#e=1024;#t=104857600;#A=5242880;#r=0;#s=0;#n=new Map;#i=!1;constructor(e){if(super(),e){if("object"!=typeof e)throw new TypeError("MemoryCacheStore options must be an object");if(void 0!==e.maxCount){if("number"!=typeof e.maxCount||!Number.isInteger(e.maxCount)||e.maxCount<0)throw new TypeError("MemoryCacheStore options.maxCount must be a non-negative integer");this.#e=e.maxCount}if(void 0!==e.maxSize){if("number"!=typeof e.maxSize||!Number.isInteger(e.maxSize)||e.maxSize<0)throw new TypeError("MemoryCacheStore options.maxSize must be a non-negative integer");this.#t=e.maxSize}if(void 0!==e.maxEntrySize){if("number"!=typeof e.maxEntrySize||!Number.isInteger(e.maxEntrySize)||e.maxEntrySize<0)throw new TypeError("MemoryCacheStore options.maxEntrySize must be a non-negative integer");this.#A=e.maxEntrySize}}}get size(){return this.#r}isFull(){return this.#r>=this.#t||this.#s>=this.#e}get(e){n(e);const t=`${e.origin}:${e.path}`,A=Date.now(),r=this.#n.get(t),s=r?o(e,r,A):null;return null==s?void 0:{statusMessage:s.statusMessage,statusCode:s.statusCode,headers:s.headers,body:s.body,vary:s.vary?s.vary:void 0,etag:s.etag,cacheControlDirectives:s.cacheControlDirectives,cachedAt:s.cachedAt,staleAt:s.staleAt,deleteAt:s.deleteAt}}createWriteStream(e,t){n(e),i(t);const A=`${e.origin}:${e.path}`,s=this,a={...e,...t,body:[],size:0};return new r({write(e,t,A){"string"==typeof e&&(e=Buffer.from(e,t)),a.size+=e.byteLength,a.size>=s.#A?this.destroy():a.body.push(e),A(null)},final(t){let r=s.#n.get(A);r||(r=[],s.#n.set(A,r));const n=o(e,r,Date.now());if(n){const e=r.indexOf(n);r.splice(e,1,a),s.#r-=n.size}else r.push(a),s.#s+=1;if(s.#r+=a.size,s.#r>s.#t||s.#s>s.#e){s.#i||(s.emit("maxSizeExceeded",{size:s.#r,maxSize:s.#t,count:s.#s,maxCount:s.#e}),s.#i=!0);for(const[e,t]of s.#n){for(const e of t.splice(0,t.length/2))s.#r-=e.size,s.#s-=1;0===t.length&&s.#n.delete(e)}s.#r<s.#t&&s.#s<s.#e&&(s.#i=!1)}t(null)}})}delete(e){if("object"!=typeof e)throw new TypeError("expected key to be object, got "+typeof e);const t=`${e.origin}:${e.path}`;for(const e of this.#n.get(t)??[])this.#r-=e.size,this.#s-=1;this.#n.delete(t)}}},2636:(e,t,A)=>{"use strict";const{Writable:r}=A(7075),{assertCacheKey:s,assertCacheValue:n}=A(9453);let i;const o=2e9;function a(e,t){return null==e&&null==t||!(null==e&&null!=t||null!=e&&null==t)&&(Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every(((e,A)=>e===t[A])):e===t)}e.exports=class{#A=o;#e=1/0;#o;#a;#c;#g;#l;#h;#d;#u;constructor(e){if(e){if("object"!=typeof e)throw new TypeError("SqliteCacheStore options must be an object");if(void 0!==e.maxEntrySize){if("number"!=typeof e.maxEntrySize||!Number.isInteger(e.maxEntrySize)||e.maxEntrySize<0)throw new TypeError("SqliteCacheStore options.maxEntrySize must be a non-negative integer");if(e.maxEntrySize>o)throw new TypeError("SqliteCacheStore options.maxEntrySize must be less than 2gb");this.#A=e.maxEntrySize}if(void 0!==e.maxCount){if("number"!=typeof e.maxCount||!Number.isInteger(e.maxCount)||e.maxCount<0)throw new TypeError("SqliteCacheStore options.maxCount must be a non-negative integer");this.#e=e.maxCount}}i||(i=A(99).DatabaseSync),this.#o=new i(e?.location??":memory:"),this.#o.exec("\n PRAGMA journal_mode = WAL;\n PRAGMA synchronous = NORMAL;\n PRAGMA temp_store = memory;\n PRAGMA optimize;\n\n CREATE TABLE IF NOT EXISTS cacheInterceptorV3 (\n -- Data specific to us\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n url TEXT NOT NULL,\n method TEXT NOT NULL,\n\n -- Data returned to the interceptor\n body BUF NULL,\n deleteAt INTEGER NOT NULL,\n statusCode INTEGER NOT NULL,\n statusMessage TEXT NOT NULL,\n headers TEXT NULL,\n cacheControlDirectives TEXT NULL,\n etag TEXT NULL,\n vary TEXT NULL,\n cachedAt INTEGER NOT NULL,\n staleAt INTEGER NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV3_getValuesQuery ON cacheInterceptorV3(url, method, deleteAt);\n CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV3_deleteByUrlQuery ON cacheInterceptorV3(deleteAt);\n "),this.#a=this.#o.prepare("\n SELECT\n id,\n body,\n deleteAt,\n statusCode,\n statusMessage,\n headers,\n etag,\n cacheControlDirectives,\n vary,\n cachedAt,\n staleAt\n FROM cacheInterceptorV3\n WHERE\n url = ?\n AND method = ?\n ORDER BY\n deleteAt ASC\n "),this.#c=this.#o.prepare("\n UPDATE cacheInterceptorV3 SET\n body = ?,\n deleteAt = ?,\n statusCode = ?,\n statusMessage = ?,\n headers = ?,\n etag = ?,\n cacheControlDirectives = ?,\n cachedAt = ?,\n staleAt = ?\n WHERE\n id = ?\n "),this.#g=this.#o.prepare("\n INSERT INTO cacheInterceptorV3 (\n url,\n method,\n body,\n deleteAt,\n statusCode,\n statusMessage,\n headers,\n etag,\n cacheControlDirectives,\n vary,\n cachedAt,\n staleAt\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n "),this.#h=this.#o.prepare("DELETE FROM cacheInterceptorV3 WHERE url = ?"),this.#d=this.#o.prepare("SELECT COUNT(*) AS total FROM cacheInterceptorV3"),this.#l=this.#o.prepare("DELETE FROM cacheInterceptorV3 WHERE deleteAt <= ?"),this.#u=this.#e===1/0?null:this.#o.prepare("\n DELETE FROM cacheInterceptorV3\n WHERE id IN (\n SELECT\n id\n FROM cacheInterceptorV3\n ORDER BY cachedAt DESC\n LIMIT ?\n )\n ")}close(){this.#o.close()}get(e){s(e);const t=this.#E(e);return t?{body:t.body?Buffer.from(t.body.buffer,t.body.byteOffset,t.body.byteLength):void 0,statusCode:t.statusCode,statusMessage:t.statusMessage,headers:t.headers?JSON.parse(t.headers):void 0,etag:t.etag?t.etag:void 0,vary:t.vary?JSON.parse(t.vary):void 0,cacheControlDirectives:t.cacheControlDirectives?JSON.parse(t.cacheControlDirectives):void 0,cachedAt:t.cachedAt,staleAt:t.staleAt,deleteAt:t.deleteAt}:void 0}set(e,t){s(e);const A=this.#I(e),r=Array.isArray(t.body)?Buffer.concat(t.body):t.body,n=r?.byteLength;if(n&&n>this.#A)return;const i=this.#E(e,!0);i?this.#c.run(r,t.deleteAt,t.statusCode,t.statusMessage,t.headers?JSON.stringify(t.headers):null,t.etag?t.etag:null,t.cacheControlDirectives?JSON.stringify(t.cacheControlDirectives):null,t.cachedAt,t.staleAt,i.id):(this.#Q(),this.#g.run(A,e.method,r,t.deleteAt,t.statusCode,t.statusMessage,t.headers?JSON.stringify(t.headers):null,t.etag?t.etag:null,t.cacheControlDirectives?JSON.stringify(t.cacheControlDirectives):null,t.vary?JSON.stringify(t.vary):null,t.cachedAt,t.staleAt))}createWriteStream(e,t){s(e),n(t);let A=0;const i=[],o=this;return new r({decodeStrings:!0,write(e,t,r){A+=e.byteLength,A<o.#A?i.push(e):this.destroy(),r()},final(A){o.set(e,{...t,body:i}),A()}})}delete(e){if("object"!=typeof e)throw new TypeError("expected key to be object, got "+typeof e);this.#h.run(this.#I(e))}#Q(){if(Number.isFinite(this.#e)&&this.size<=this.#e)return 0;{const e=this.#l.run(Date.now()).changes;if(e)return e}{const e=this.#u?.run(Math.max(Math.floor(.1*this.#e),1)).changes;if(e)return e}return 0}get size(){const{total:e}=this.#d.get();return e}#I(e){return`${e.origin}/${e.path}`}#E(e,t=!1){const A=this.#I(e),{headers:r,method:s}=e,n=this.#a.all(A,s);if(0===n.length)return;const i=Date.now();for(const e of n){if(i>=e.deleteAt&&!t)return;let A=!0;if(e.vary){const t=JSON.parse(e.vary);for(const e in t)if(!a(r[e],t[e])){A=!1;break}}if(A)return e}}}},1986:(e,t,A)=>{"use strict";const r=A(7030),s=A(4589),n=A(2858),{InvalidArgumentError:i}=A(4465);let o;const a=class{constructor(e){this._maxCachedSessions=e,this._sessionCache=new Map,this._sessionRegistry=new FinalizationRegistry((e=>{if(this._sessionCache.size<this._maxCachedSessions)return;const t=this._sessionCache.get(e);void 0!==t&&void 0===t.deref()&&this._sessionCache.delete(e)}))}get(e){const t=this._sessionCache.get(e);return t?t.deref():null}set(e,t){0!==this._maxCachedSessions&&(this._sessionCache.set(e,new WeakRef(t)),this._sessionRegistry.register(t,e))}};e.exports=function({allowH2:e,maxCachedSessions:t,socketPath:c,timeout:g,session:l,...h}){if(null!=t&&(!Number.isInteger(t)||t<0))throw new i("maxCachedSessions must be a positive integer or zero");const d={path:c,...h},u=new a(null==t?100:t);return g=null==g?1e4:g,e=null!=e&&e,function({hostname:t,host:i,protocol:a,port:c,servername:h,localAddress:E,httpSocket:I},Q){let B;if("https:"===a){o||(o=A(1692));const r=(h=h||d.servername||n.getServerName(i)||null)||t;s(r);const a=l||u.get(r)||null;c=c||443,B=o.connect({highWaterMark:16384,...d,servername:h,session:a,localAddress:E,ALPNProtocols:e?["http/1.1","h2"]:["http/1.1"],socket:I,port:c,host:t}),B.on("session",(function(e){u.set(r,e)}))}else s(!I,"httpSocket can only be sent on TLS update"),c=c||80,B=r.connect({highWaterMark:65536,...d,localAddress:E,port:c,host:t});if(null==d.keepAlive||d.keepAlive){const e=void 0===d.keepAliveInitialDelay?6e4:d.keepAliveInitialDelay;B.setKeepAlive(!0,e)}const C=n.setupConnectTimeout(new WeakRef(B),{timeout:g,hostname:t,port:c});return B.setNoDelay(!0).once("https:"===a?"secureConnect":"connect",(function(){if(queueMicrotask(C),Q){const e=Q;Q=null,e(null,this)}})).on("error",(function(e){if(queueMicrotask(C),Q){const t=Q;Q=null,t(e)}})),B}}},9605:e=>{"use strict";const t=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"],A={};Object.setPrototypeOf(A,null);const r={};Object.setPrototypeOf(r,null);for(let e=0;e<t.length;++e){const r=t[e],s=r.toLowerCase();A[r]=A[s]=s}e.exports={wellknownHeaderNames:t,headerNameLowerCasedRecord:A,getHeaderNameAsBuffer:function(e){let t=r[e];return void 0===t&&(t=Buffer.from(e)),t}}},772:(e,t,A)=>{"use strict";const r=A(3053),s=A(7975),n=s.debuglog("undici"),i=s.debuglog("fetch"),o=s.debuglog("websocket"),a={beforeConnect:r.channel("undici:client:beforeConnect"),connected:r.channel("undici:client:connected"),connectError:r.channel("undici:client:connectError"),sendHeaders:r.channel("undici:client:sendHeaders"),create:r.channel("undici:request:create"),bodySent:r.channel("undici:request:bodySent"),bodyChunkSent:r.channel("undici:request:bodyChunkSent"),bodyChunkReceived:r.channel("undici:request:bodyChunkReceived"),headers:r.channel("undici:request:headers"),trailers:r.channel("undici:request:trailers"),error:r.channel("undici:request:error"),open:r.channel("undici:websocket:open"),close:r.channel("undici:websocket:close"),socketError:r.channel("undici:websocket:socket_error"),ping:r.channel("undici:websocket:ping"),pong:r.channel("undici:websocket:pong")};let c=!1;function g(e=n){c||(c=!0,r.subscribe("undici:client:beforeConnect",(t=>{const{connectParams:{version:A,protocol:r,port:s,host:n}}=t;e("connecting to %s%s using %s%s",n,s?`:${s}`:"",r,A)})),r.subscribe("undici:client:connected",(t=>{const{connectParams:{version:A,protocol:r,port:s,host:n}}=t;e("connected to %s%s using %s%s",n,s?`:${s}`:"",r,A)})),r.subscribe("undici:client:connectError",(t=>{const{connectParams:{version:A,protocol:r,port:s,host:n},error:i}=t;e("connection to %s%s using %s%s errored - %s",n,s?`:${s}`:"",r,A,i.message)})),r.subscribe("undici:client:sendHeaders",(t=>{const{request:{method:A,path:r,origin:s}}=t;e("sending request to %s %s%s",A,s,r)})))}let l=!1;let h=!1;(n.enabled||i.enabled)&&(g(i.enabled?i:n),function(e=n){l||(l=!0,r.subscribe("undici:request:headers",(t=>{const{request:{method:A,path:r,origin:s},response:{statusCode:n}}=t;e("received response to %s %s%s - HTTP %d",A,s,r,n)})),r.subscribe("undici:request:trailers",(t=>{const{request:{method:A,path:r,origin:s}}=t;e("trailers received from %s %s%s",A,s,r)})),r.subscribe("undici:request:error",(t=>{const{request:{method:A,path:r,origin:s},error:n}=t;e("request to %s %s%s errored - %s",A,s,r,n.message)})))}(i.enabled?i:n)),o.enabled&&(g(n.enabled?n:o),function(e=o){h||(h=!0,r.subscribe("undici:websocket:open",(t=>{const{address:{address:A,port:r}}=t;e("connection opened %s%s",A,r?`:${r}`:"")})),r.subscribe("undici:websocket:close",(t=>{const{websocket:A,code:r,reason:s}=t;e("closed connection to %s - %s %s",A.url,r,s)})),r.subscribe("undici:websocket:socket_error",(t=>{e("connection errored - %s",t.message)})),r.subscribe("undici:websocket:ping",(t=>{e("ping received")})),r.subscribe("undici:websocket:pong",(t=>{e("pong received")})))}(o)),e.exports={channels:a}},4465:e=>{"use strict";const t=Symbol.for("undici.error.UND_ERR");class A extends Error{constructor(e,t){super(e,t),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](e){return e&&!0===e[t]}get[t](){return!0}}const r=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT");class s extends A{constructor(e){super(e),this.name="ConnectTimeoutError",this.message=e||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](e){return e&&!0===e[r]}get[r](){return!0}}const n=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT");class i extends A{constructor(e){super(e),this.name="HeadersTimeoutError",this.message=e||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](e){return e&&!0===e[n]}get[n](){return!0}}const o=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW");class a extends A{constructor(e){super(e),this.name="HeadersOverflowError",this.message=e||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](e){return e&&!0===e[o]}get[o](){return!0}}const c=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT");class g extends A{constructor(e){super(e),this.name="BodyTimeoutError",this.message=e||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](e){return e&&!0===e[c]}get[c](){return!0}}const l=Symbol.for("undici.error.UND_ERR_INVALID_ARG");class h extends A{constructor(e){super(e),this.name="InvalidArgumentError",this.message=e||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](e){return e&&!0===e[l]}get[l](){return!0}}const d=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE");class u extends A{constructor(e){super(e),this.name="InvalidReturnValueError",this.message=e||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](e){return e&&!0===e[d]}get[d](){return!0}}const E=Symbol.for("undici.error.UND_ERR_ABORT");class I extends A{constructor(e){super(e),this.name="AbortError",this.message=e||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](e){return e&&!0===e[E]}get[E](){return!0}}const Q=Symbol.for("undici.error.UND_ERR_ABORTED");class B extends I{constructor(e){super(e),this.name="AbortError",this.message=e||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](e){return e&&!0===e[Q]}get[Q](){return!0}}const C=Symbol.for("undici.error.UND_ERR_INFO");class p extends A{constructor(e){super(e),this.name="InformationalError",this.message=e||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](e){return e&&!0===e[C]}get[C](){return!0}}const f=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH");class m extends A{constructor(e){super(e),this.name="RequestContentLengthMismatchError",this.message=e||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&!0===e[f]}get[f](){return!0}}const y=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH");class D extends A{constructor(e){super(e),this.name="ResponseContentLengthMismatchError",this.message=e||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&!0===e[y]}get[y](){return!0}}const S=Symbol.for("undici.error.UND_ERR_DESTROYED");class w extends A{constructor(e){super(e),this.name="ClientDestroyedError",this.message=e||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](e){return e&&!0===e[S]}get[S](){return!0}}const b=Symbol.for("undici.error.UND_ERR_CLOSED");class R extends A{constructor(e){super(e),this.name="ClientClosedError",this.message=e||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](e){return e&&!0===e[b]}get[b](){return!0}}const N=Symbol.for("undici.error.UND_ERR_SOCKET");class k extends A{constructor(e,t){super(e),this.name="SocketError",this.message=e||"Socket error",this.code="UND_ERR_SOCKET",this.socket=t}static[Symbol.hasInstance](e){return e&&!0===e[N]}get[N](){return!0}}const F=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED");class U extends A{constructor(e){super(e),this.name="NotSupportedError",this.message=e||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](e){return e&&!0===e[F]}get[F](){return!0}}const M=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM");class T extends A{constructor(e){super(e),this.name="MissingUpstreamError",this.message=e||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](e){return e&&!0===e[M]}get[M](){return!0}}const v=Symbol.for("undici.error.UND_ERR_HTTP_PARSER");class L extends Error{constructor(e,t,A){super(e),this.name="HTTPParserError",this.code=t?`HPE_${t}`:void 0,this.data=A?A.toString():void 0}static[Symbol.hasInstance](e){return e&&!0===e[v]}get[v](){return!0}}const H=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE");class Y extends A{constructor(e){super(e),this.name="ResponseExceededMaxSizeError",this.message=e||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](e){return e&&!0===e[H]}get[H](){return!0}}const x=Symbol.for("undici.error.UND_ERR_REQ_RETRY");class V extends A{constructor(e,t,{headers:A,data:r}){super(e),this.name="RequestRetryError",this.message=e||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=t,this.data=r,this.headers=A}static[Symbol.hasInstance](e){return e&&!0===e[x]}get[x](){return!0}}const P=Symbol.for("undici.error.UND_ERR_RESPONSE");class G extends A{constructor(e,t,{headers:A,body:r}){super(e),this.name="ResponseError",this.message=e||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=t,this.body=r,this.headers=A}static[Symbol.hasInstance](e){return e&&!0===e[P]}get[P](){return!0}}const O=Symbol.for("undici.error.UND_ERR_PRX_TLS");class J extends A{constructor(e,t,A={}){super(t,{cause:e,...A}),this.name="SecureProxyConnectionError",this.message=t||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=e}static[Symbol.hasInstance](e){return e&&!0===e[O]}get[O](){return!0}}const W=Symbol.for("undici.error.UND_ERR_MAX_ORIGINS_REACHED");class q extends A{constructor(e){super(e),this.name="MaxOriginsReachedError",this.message=e||"Maximum allowed origins reached",this.code="UND_ERR_MAX_ORIGINS_REACHED"}static[Symbol.hasInstance](e){return e&&!0===e[W]}get[W](){return!0}}e.exports={AbortError:I,HTTPParserError:L,UndiciError:A,HeadersTimeoutError:i,HeadersOverflowError:a,BodyTimeoutError:g,RequestContentLengthMismatchError:m,ConnectTimeoutError:s,InvalidArgumentError:h,InvalidReturnValueError:u,RequestAbortedError:B,ClientDestroyedError:w,ClientClosedError:R,InformationalError:p,SocketError:k,NotSupportedError:U,ResponseContentLengthMismatchError:D,BalancedPoolMissingUpstreamError:T,ResponseExceededMaxSizeError:Y,RequestRetryError:V,ResponseError:G,SecureProxyConnectionError:J,MaxOriginsReachedError:q}},5837:(e,t,A)=>{"use strict";const{InvalidArgumentError:r,NotSupportedError:s}=A(4465),n=A(4589),{isValidHTTPToken:i,isValidHeaderValue:o,isStream:a,destroy:c,isBuffer:g,isFormDataLike:l,isIterable:h,isBlobLike:d,serializePathWithQuery:u,assertRequestHandler:E,getServerName:I,normalizedMethodRecords:Q,getProtocolFromUrlString:B}=A(2858),{channels:C}=A(772),{headerNameLowerCasedRecord:p}=A(9605),f=/[^\u0021-\u00ff]/,m=Symbol("handler");function y(e,t,A){if(A&&"object"==typeof A&&!Array.isArray(A))throw new r(`invalid ${t} header`);if(void 0===A)return;let n=p[t];if(void 0===n&&(n=t.toLowerCase(),void 0===p[n]&&!i(n)))throw new r("invalid header key");if(Array.isArray(A)){const e=[];for(let s=0;s<A.length;s++)if("string"==typeof A[s]){if(!o(A[s]))throw new r(`invalid ${t} header`);e.push(A[s])}else if(null===A[s])e.push("");else{if("object"==typeof A[s])throw new r(`invalid ${t} header`);e.push(`${A[s]}`)}A=e}else if("string"==typeof A){if(!o(A))throw new r(`invalid ${t} header`)}else A=null===A?"":`${A}`;if(null===e.host&&"host"===n){if("string"!=typeof A)throw new r("invalid host header");e.host=A}else if(null===e.contentLength&&"content-length"===n){if(e.contentLength=parseInt(A,10),!Number.isFinite(e.contentLength))throw new r("invalid content-length header")}else if(null===e.contentType&&"content-type"===n)e.contentType=A,e.headers.push(t,A);else{if("transfer-encoding"===n||"keep-alive"===n||"upgrade"===n)throw new r(`invalid ${n} header`);if("connection"===n){const t="string"==typeof A?A.toLowerCase():null;if("close"!==t&&"keep-alive"!==t)throw new r("invalid connection header");"close"===t&&(e.reset=!0)}else{if("expect"===n)throw new s("expect header not supported");e.headers.push(t,A)}}}e.exports=class{constructor(e,{path:t,method:A,body:s,headers:n,query:o,idempotent:p,blocking:D,upgrade:S,headersTimeout:w,bodyTimeout:b,reset:R,expectContinue:N,servername:k,throwOnError:F,maxRedirections:U},M){if("string"!=typeof t)throw new r("path must be a string");if("/"!==t[0]&&!t.startsWith("http://")&&!t.startsWith("https://")&&"CONNECT"!==A)throw new r("path must be an absolute URL or start with a slash");if(f.test(t))throw new r("invalid request path");if("string"!=typeof A)throw new r("method must be a string");if(void 0===Q[A]&&!i(A))throw new r("invalid request method");if(S&&"string"!=typeof S)throw new r("upgrade must be a string");if(null!=w&&(!Number.isFinite(w)||w<0))throw new r("invalid headersTimeout");if(null!=b&&(!Number.isFinite(b)||b<0))throw new r("invalid bodyTimeout");if(null!=R&&"boolean"!=typeof R)throw new r("invalid reset");if(null!=N&&"boolean"!=typeof N)throw new r("invalid expectContinue");if(null!=F)throw new r("invalid throwOnError");if(null!=U&&0!==U)throw new r("maxRedirections is not supported, use the redirect interceptor");if(this.headersTimeout=w,this.bodyTimeout=b,this.method=A,this.abort=null,null==s)this.body=null;else if(a(s)){this.body=s;const e=this.body._readableState;e&&e.autoDestroy||(this.endHandler=function(){c(this)},this.body.on("end",this.endHandler)),this.errorHandler=e=>{this.abort?this.abort(e):this.error=e},this.body.on("error",this.errorHandler)}else if(g(s))this.body=s.byteLength?s:null;else if(ArrayBuffer.isView(s))this.body=s.buffer.byteLength?Buffer.from(s.buffer,s.byteOffset,s.byteLength):null;else if(s instanceof ArrayBuffer)this.body=s.byteLength?Buffer.from(s):null;else if("string"==typeof s)this.body=s.length?Buffer.from(s):null;else{if(!(l(s)||h(s)||d(s)))throw new r("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");this.body=s}if(this.completed=!1,this.aborted=!1,this.upgrade=S||null,this.path=o?u(t,o):t,this.origin=e,this.protocol=B(e),this.idempotent=null==p?"HEAD"===A||"GET"===A:p,this.blocking=D??"HEAD"!==this.method,this.reset=null==R?null:R,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=null!=N&&N,Array.isArray(n)){if(n.length%2!=0)throw new r("headers array must be even");for(let e=0;e<n.length;e+=2)y(this,n[e],n[e+1])}else if(n&&"object"==typeof n)if(n[Symbol.iterator])for(const e of n){if(!Array.isArray(e)||2!==e.length)throw new r("headers must be in key-value pair format");y(this,e[0],e[1])}else{const e=Object.keys(n);for(let t=0;t<e.length;++t)y(this,e[t],n[e[t]])}else if(null!=n)throw new r("headers must be an object or an array");E(M,A,S),this.servername=k||I(this.host)||null,this[m]=M,C.create.hasSubscribers&&C.create.publish({request:this})}onBodySent(e){if(C.bodyChunkSent.hasSubscribers&&C.bodyChunkSent.publish({request:this,chunk:e}),this[m].onBodySent)try{return this[m].onBodySent(e)}catch(e){this.abort(e)}}onRequestSent(){if(C.bodySent.hasSubscribers&&C.bodySent.publish({request:this}),this[m].onRequestSent)try{return this[m].onRequestSent()}catch(e){this.abort(e)}}onConnect(e){if(n(!this.aborted),n(!this.completed),!this.error)return this.abort=e,this[m].onConnect(e);e(this.error)}onResponseStarted(){return this[m].onResponseStarted?.()}onHeaders(e,t,A,r){n(!this.aborted),n(!this.completed),C.headers.hasSubscribers&&C.headers.publish({request:this,response:{statusCode:e,headers:t,statusText:r}});try{return this[m].onHeaders(e,t,A,r)}catch(e){this.abort(e)}}onData(e){n(!this.aborted),n(!this.completed),C.bodyChunkReceived.hasSubscribers&&C.bodyChunkReceived.publish({request:this,chunk:e});try{return this[m].onData(e)}catch(e){return this.abort(e),!1}}onUpgrade(e,t,A){return n(!this.aborted),n(!this.completed),this[m].onUpgrade(e,t,A)}onComplete(e){this.onFinally(),n(!this.aborted),n(!this.completed),this.completed=!0,C.trailers.hasSubscribers&&C.trailers.publish({request:this,trailers:e});try{return this[m].onComplete(e)}catch(e){this.onError(e)}}onError(e){if(this.onFinally(),C.error.hasSubscribers&&C.error.publish({request:this,error:e}),!this.aborted)return this.aborted=!0,this[m].onError(e)}onFinally(){this.errorHandler&&(this.body.off("error",this.errorHandler),this.errorHandler=null),this.endHandler&&(this.body.off("end",this.endHandler),this.endHandler=null)}addHeader(e,t){return y(this,e,t),this}}},257:e=>{"use strict";e.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}},1310:(e,t,A)=>{"use strict";const{wellknownHeaderNames:r,headerNameLowerCasedRecord:s}=A(9605);class n{value=null;left=null;middle=null;right=null;code;constructor(e,t,A){if(void 0===A||A>=e.length)throw new TypeError("Unreachable");if((this.code=e.charCodeAt(A))>127)throw new TypeError("key must be ascii string");e.length!==++A?this.middle=new n(e,t,A):this.value=t}add(e,t){const A=e.length;if(0===A)throw new TypeError("Unreachable");let r=0,s=this;for(;;){const i=e.charCodeAt(r);if(i>127)throw new TypeError("key must be ascii string");if(s.code===i){if(A===++r){s.value=t;break}if(null===s.middle){s.middle=new n(e,t,r);break}s=s.middle}else if(s.code<i){if(null===s.left){s.left=new n(e,t,r);break}s=s.left}else{if(null===s.right){s.right=new n(e,t,r);break}s=s.right}}}search(e){const t=e.length;let A=0,r=this;for(;null!==r&&A<t;){let s=e[A];for(s<=90&&s>=65&&(s|=32);null!==r;){if(s===r.code){if(t===++A)return r;r=r.middle;break}r=r.code<s?r.left:r.right}}return null}}class i{node=null;insert(e,t){null===this.node?this.node=new n(e,t,0):this.node.add(e,t)}lookup(e){return this.node?.search(e)?.value??null}}const o=new i;for(let e=0;e<r.length;++e){const t=s[r[e]];o.insert(t,t)}e.exports={TernarySearchTree:i,tree:o}},2858:(e,t,A)=>{"use strict";const r=A(4589),{kDestroyed:s,kBodyUsed:n,kListeners:i,kBody:o}=A(257),{IncomingMessage:a}=A(7067),c=A(7075),g=A(7030),{stringify:l}=A(1792),{EventEmitter:h}=A(8474),d=A(3801),{InvalidArgumentError:u,ConnectTimeoutError:E}=A(4465),{headerNameLowerCasedRecord:I}=A(9605),{tree:Q}=A(1310),[B,C]=process.versions.node.split(".",2).map((e=>Number(e)));class p{constructor(e){this[o]=e,this[n]=!1}async*[Symbol.asyncIterator](){r(!this[n],"disturbed"),this[n]=!0,yield*this[o]}}function f(){}function m(e){return e&&"object"==typeof e&&"function"==typeof e.pipe&&"function"==typeof e.on}function y(e){if(null===e)return!1;if(e instanceof Blob)return!0;if("object"!=typeof e)return!1;{const t=e[Symbol.toStringTag];return("Blob"===t||"File"===t)&&("stream"in e&&"function"==typeof e.stream||"arrayBuffer"in e&&"function"==typeof e.arrayBuffer)}}function D(e){return e.includes("?")||e.includes("#")}function S(e){const t=parseInt(e,10);return t===Number(e)&&t>=0&&t<=65535}function w(e){return null!=e&&"h"===e[0]&&"t"===e[1]&&"t"===e[2]&&"p"===e[3]&&(":"===e[4]||"s"===e[4]&&":"===e[5])}function b(e){if("string"==typeof e){if(!w((e=new URL(e)).origin||e.protocol))throw new u("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}if(!e||"object"!=typeof e)throw new u("Invalid URL: The URL argument must be a non-null object.");if(!(e instanceof URL)){if(null!=e.port&&""!==e.port&&!1===S(e.port))throw new u("Invalid URL: port must be a valid integer or a string representation of an integer.");if(null!=e.path&&"string"!=typeof e.path)throw new u("Invalid URL path: the path must be a string or null/undefined.");if(null!=e.pathname&&"string"!=typeof e.pathname)throw new u("Invalid URL pathname: the pathname must be a string or null/undefined.");if(null!=e.hostname&&"string"!=typeof e.hostname)throw new u("Invalid URL hostname: the hostname must be a string or null/undefined.");if(null!=e.origin&&"string"!=typeof e.origin)throw new u("Invalid URL origin: the origin must be a string or null/undefined.");if(!w(e.origin||e.protocol))throw new u("Invalid URL protocol: the URL must start with `http:` or `https:`.");const t=null!=e.port?e.port:"https:"===e.protocol?443:80;let A=null!=e.origin?e.origin:`${e.protocol||""}//${e.hostname||""}:${t}`,r=null!=e.path?e.path:`${e.pathname||""}${e.search||""}`;return"/"===A[A.length-1]&&(A=A.slice(0,A.length-1)),r&&"/"!==r[0]&&(r=`/${r}`),new URL(`${A}${r}`)}if(!w(e.origin||e.protocol))throw new u("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}function R(e){return!(null==e||"function"!=typeof e[Symbol.iterator]&&"function"!=typeof e[Symbol.asyncIterator])}function N(e){if(null==e)return 0;if(m(e)){const t=e._readableState;return t&&!1===t.objectMode&&!0===t.ended&&Number.isFinite(t.length)?t.length:null}return y(e)?null!=e.size?e.size:null:T(e)?e.byteLength:null}function k(e){return e&&!!(e.destroyed||e[s]||c.isDestroyed?.(e))}function F(e,t){null!=e&&m(e)&&!k(e)&&("function"==typeof e.destroy?(Object.getPrototypeOf(e).constructor===a&&(e.socket=null),e.destroy(t)):t&&queueMicrotask((()=>{e.emit("error",t)})),!0!==e.destroyed&&(e[s]=!0))}const U=/timeout=(\d+)/;function M(e){return"string"==typeof e?I[e]??e.toLowerCase():Q.lookup(e)??e.toString("latin1").toLowerCase()}function T(e){return e instanceof Uint8Array||Buffer.isBuffer(e)}function v(e){switch(e){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return e>=33&&e<=126}}const L=/[^\t\x20-\x7e\x80-\xff]/;const H=/^bytes (\d+)-(\d+)\/(\d+)?$/;const Y="win32"===process.platform?(e,t)=>{if(!t.timeout)return f;let A=null,r=null;const s=d.setFastTimeout((()=>{A=setImmediate((()=>{r=setImmediate((()=>x(e.deref(),t)))}))}),t.timeout);return()=>{d.clearFastTimeout(s),clearImmediate(A),clearImmediate(r)}}:(e,t)=>{if(!t.timeout)return f;let A=null;const r=d.setFastTimeout((()=>{A=setImmediate((()=>{x(e.deref(),t)}))}),t.timeout);return()=>{d.clearFastTimeout(r),clearImmediate(A)}};function x(e,t){if(null==e)return;let A="Connect Timeout Error";Array.isArray(e.autoSelectFamilyAttemptedAddresses)?A+=` (attempted addresses: ${e.autoSelectFamilyAttemptedAddresses.join(", ")},`:A+=` (attempted address: ${t.hostname}:${t.port},`,A+=` timeout: ${t.timeout}ms)`,F(e,new E(A))}const V=Object.create(null);V.enumerable=!0;const P={delete:"DELETE",DELETE:"DELETE",get:"GET",GET:"GET",head:"HEAD",HEAD:"HEAD",options:"OPTIONS",OPTIONS:"OPTIONS",post:"POST",POST:"POST",put:"PUT",PUT:"PUT"},G={...P,patch:"patch",PATCH:"PATCH"};Object.setPrototypeOf(P,null),Object.setPrototypeOf(G,null),e.exports={kEnumerableProperty:V,isDisturbed:function(e){return!(!e||!c.isDisturbed(e)&&!e[n])},isBlobLike:y,parseOrigin:function(e){if("/"!==(e=b(e)).pathname||e.search||e.hash)throw new u("invalid url");return e},parseURL:b,getServerName:function(e){if(!e)return null;r("string"==typeof e);const t=function(e){if("["===e[0]){const t=e.indexOf("]");return r(-1!==t),e.substring(1,t)}const t=e.indexOf(":");return-1===t?e:e.substring(0,t)}(e);return g.isIP(t)?"":t},isStream:m,isIterable:R,isAsyncIterable:function(e){return!(null==e||"function"!=typeof e[Symbol.asyncIterator])},isDestroyed:k,headerNameToString:M,bufferToLowerCasedHeaderName:function(e){return Q.lookup(e)??e.toString("latin1").toLowerCase()},addListener:function(e,t,A){return(e[i]??=[]).push([t,A]),e.on(t,A),e},removeAllListeners:function(e){if(null!=e[i]){for(const[t,A]of e[i])e.removeListener(t,A);e[i]=null}return e},errorRequest:function(e,t,A){try{t.onError(A),r(t.aborted)}catch(A){e.emit("error",A)}},parseRawHeaders:function(e){const t=e.length,A=new Array(t);let r,s,n=!1,i=-1,o=0;for(let a=0;a<t;a+=2)r=e[a],s=e[a+1],"string"!=typeof r&&(r=r.toString()),"string"!=typeof s&&(s=s.toString("utf8")),o=r.length,14!==o||"-"!==r[7]||"content-length"!==r&&"content-length"!==r.toLowerCase()?19!==o||"-"!==r[7]||"content-disposition"!==r&&"content-disposition"!==r.toLowerCase()||(i=a+1):n=!0,A[a]=r,A[a+1]=s;return n&&-1!==i&&(A[i]=Buffer.from(A[i]).toString("latin1")),A},encodeRawHeaders:function(e){if(!Array.isArray(e))throw new TypeError("expected headers to be an array");return e.map((e=>Buffer.from(e)))},parseHeaders:function(e,t){void 0===t&&(t={});for(let A=0;A<e.length;A+=2){const r=M(e[A]);let s=t[r];if(s)"string"==typeof s&&(s=[s],t[r]=s),s.push(e[A+1].toString("utf8"));else{const s=e[A+1];t[r]="string"==typeof s?s:Array.isArray(s)?s.map((e=>e.toString("utf8"))):s.toString("utf8")}}return"content-length"in t&&"content-disposition"in t&&(t["content-disposition"]=Buffer.from(t["content-disposition"]).toString("latin1")),t},parseKeepAliveTimeout:function(e){const t=e.match(U);return t?1e3*parseInt(t[1],10):null},destroy:F,bodyLength:N,deepClone:function(e){return JSON.parse(JSON.stringify(e))},ReadableStreamFrom:function(e){let t;return new ReadableStream({start(){t=e[Symbol.asyncIterator]()},pull(e){return t.next().then((({done:t,value:A})=>{if(t)queueMicrotask((()=>{e.close(),e.byobRequest?.respond(0)}));else{const t=Buffer.isBuffer(A)?A:Buffer.from(A);if(!t.byteLength)return this.pull(e);e.enqueue(new Uint8Array(t))}}))},cancel:()=>t.return(),type:"bytes"})},isBuffer:T,assertRequestHandler:function(e,t,A){if(!e||"object"!=typeof e)throw new u("handler must be an object");if("function"!=typeof e.onRequestStart){if("function"!=typeof e.onConnect)throw new u("invalid onConnect method");if("function"!=typeof e.onError)throw new u("invalid onError method");if("function"!=typeof e.onBodySent&&void 0!==e.onBodySent)throw new u("invalid onBodySent method");if(A||"CONNECT"===t){if("function"!=typeof e.onUpgrade)throw new u("invalid onUpgrade method")}else{if("function"!=typeof e.onHeaders)throw new u("invalid onHeaders method");if("function"!=typeof e.onData)throw new u("invalid onData method");if("function"!=typeof e.onComplete)throw new u("invalid onComplete method")}}},getSocketInfo:function(e){return{localAddress:e.localAddress,localPort:e.localPort,remoteAddress:e.remoteAddress,remotePort:e.remotePort,remoteFamily:e.remoteFamily,timeout:e.timeout,bytesWritten:e.bytesWritten,bytesRead:e.bytesRead}},isFormDataLike:function(e){return e&&"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"FormData"===e[Symbol.toStringTag]},pathHasQueryOrFragment:D,serializePathWithQuery:function(e,t){if(D(e))throw new Error('Query params cannot be passed when url already contains "?" or "#".');const A=l(t);return A&&(e+="?"+A),e},addAbortListener:function(e,t){return"addEventListener"in e?(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)):(e.once("abort",t),()=>e.removeListener("abort",t))},isValidHTTPToken:function(e){if(0===e.length)return!1;for(let t=0;t<e.length;++t)if(!v(e.charCodeAt(t)))return!1;return!0},isValidHeaderValue:function(e){return!L.test(e)},isTokenCharCode:v,parseRangeHeader:function(e){if(null==e||""===e)return{start:0,end:null,size:null};const t=e?e.match(H):null;return t?{start:parseInt(t[1]),end:t[2]?parseInt(t[2]):null,size:t[3]?parseInt(t[3]):null}:null},normalizedMethodRecordsBase:P,normalizedMethodRecords:G,isValidPort:S,isHttpOrHttpsPrefixed:w,nodeMajor:B,nodeMinor:C,safeHTTPMethods:Object.freeze(["GET","HEAD","OPTIONS","TRACE"]),wrapRequestBody:function(e){return m(e)?(0===N(e)&&e.on("data",(function(){r(!1)})),"boolean"!=typeof e.readableDidRead&&(e[n]=!1,h.prototype.on.call(e,"data",(function(){this[n]=!0}))),e):e&&"function"==typeof e.pipeTo||e&&"string"!=typeof e&&!ArrayBuffer.isView(e)&&R(e)?new p(e):e},setupConnectTimeout:Y,getProtocolFromUrlString:function(e){if("h"===e[0]&&"t"===e[1]&&"t"===e[2]&&"p"===e[3])switch(e[4]){case":":return"http:";case"s":if(":"===e[5])return"https:"}return e.slice(0,e.indexOf(":")+1)}}},3315:(e,t,A)=>{"use strict";const{InvalidArgumentError:r,MaxOriginsReachedError:s}=A(4465),{kClients:n,kRunning:i,kClose:o,kDestroy:a,kDispatch:c,kUrl:g}=A(257),l=A(7779),h=A(8542),d=A(1167),u=A(2858),E=Symbol("onConnect"),I=Symbol("onDisconnect"),Q=Symbol("onConnectionError"),B=Symbol("onDrain"),C=Symbol("factory"),p=Symbol("options"),f=Symbol("origins");function m(e,t){return t&&1===t.connections?new d(e,t):new h(e,t)}e.exports=class extends l{constructor({factory:e=m,maxOrigins:t=1/0,connect:A,...s}={}){if("function"!=typeof e)throw new r("factory must be a function.");if(null!=A&&"function"!=typeof A&&"object"!=typeof A)throw new r("connect must be a function or an object");if("number"!=typeof t||Number.isNaN(t)||t<=0)throw new r("maxOrigins must be a number greater than 0");super(),A&&"function"!=typeof A&&(A={...A}),this[p]={...u.deepClone(s),maxOrigins:t,connect:A},this[C]=e,this[n]=new Map,this[f]=new Set,this[B]=(e,t)=>{this.emit("drain",e,[this,...t])},this[E]=(e,t)=>{this.emit("connect",e,[this,...t])},this[I]=(e,t,A)=>{this.emit("disconnect",e,[this,...t],A)},this[Q]=(e,t,A)=>{this.emit("connectionError",e,[this,...t],A)}}get[i](){let e=0;for(const{dispatcher:t}of this[n].values())e+=t[i];return e}[c](e,t){let A;if(!e.origin||!("string"==typeof e.origin||e.origin instanceof URL))throw new r("opts.origin must be a non-empty string or URL.");if(A=String(e.origin),this[f].size>=this[p].maxOrigins&&!this[f].has(A))throw new s;const i=this[n].get(A);let o=i&&i.dispatcher;if(!o){const t=e=>{const t=this[n].get(A);t&&(e&&(t.count-=1),t.count<=0&&(this[n].delete(A),t.dispatcher.close()),this[f].delete(A))};o=this[C](e.origin,this[p]).on("drain",this[B]).on("connect",((e,t)=>{const r=this[n].get(A);r&&(r.count+=1),this[E](e,t)})).on("disconnect",((e,A,r)=>{t(!0),this[I](e,A,r)})).on("connectionError",((e,A,r)=>{t(!1),this[Q](e,A,r)})),this[n].set(A,{count:0,dispatcher:o}),this[f].add(A)}return o.dispatch(e,t)}[o](){const e=[];for(const{dispatcher:t}of this[n].values())e.push(t.close());return this[n].clear(),Promise.all(e)}[a](e){const t=[];for(const{dispatcher:A}of this[n].values())t.push(A.destroy(e));return this[n].clear(),Promise.all(t)}get stats(){const e={};for(const{dispatcher:t}of this[n].values())t.stats&&(e[t[g].origin]=t.stats);return e}}},8055:(e,t,A)=>{"use strict";const{BalancedPoolMissingUpstreamError:r,InvalidArgumentError:s}=A(4465),{PoolBase:n,kClients:i,kNeedDrain:o,kAddClient:a,kRemoveClient:c,kGetDispatcher:g}=A(1694),l=A(8542),{kUrl:h}=A(257),{parseOrigin:d}=A(2858),u=Symbol("factory"),E=Symbol("options"),I=Symbol("kGreatestCommonDivisor"),Q=Symbol("kCurrentWeight"),B=Symbol("kIndex"),C=Symbol("kWeight"),p=Symbol("kMaxWeightPerServer"),f=Symbol("kErrorPenalty");function m(e,t){if(0===e)return t;for(;0!==t;){const A=t;t=e%t,e=A}return e}function y(e,t){return new l(e,t)}e.exports=class extends n{constructor(e=[],{factory:t=y,...A}={}){if("function"!=typeof t)throw new s("factory must be a function.");super(),this[E]=A,this[B]=-1,this[Q]=0,this[p]=this[E].maxWeightPerServer||100,this[f]=this[E].errorPenalty||15,Array.isArray(e)||(e=[e]),this[u]=t;for(const t of e)this.addUpstream(t);this._updateBalancedPoolStats()}addUpstream(e){const t=d(e).origin;if(this[i].find((e=>e[h].origin===t&&!0!==e.closed&&!0!==e.destroyed)))return this;const A=this[u](t,Object.assign({},this[E]));this[a](A),A.on("connect",(()=>{A[C]=Math.min(this[p],A[C]+this[f])})),A.on("connectionError",(()=>{A[C]=Math.max(1,A[C]-this[f]),this._updateBalancedPoolStats()})),A.on("disconnect",((...e)=>{const t=e[2];t&&"UND_ERR_SOCKET"===t.code&&(A[C]=Math.max(1,A[C]-this[f]),this._updateBalancedPoolStats())}));for(const e of this[i])e[C]=this[p];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let t=0;t<this[i].length;t++)e=m(this[i][t][C],e);this[I]=e}removeUpstream(e){const t=d(e).origin,A=this[i].find((e=>e[h].origin===t&&!0!==e.closed&&!0!==e.destroyed));return A&&this[c](A),this}get upstreams(){return this[i].filter((e=>!0!==e.closed&&!0!==e.destroyed)).map((e=>e[h].origin))}[g](){if(0===this[i].length)throw new r;if(!this[i].find((e=>!e[o]&&!0!==e.closed&&!0!==e.destroyed)))return;if(this[i].map((e=>e[o])).reduce(((e,t)=>e&&t),!0))return;let e=0,t=this[i].findIndex((e=>!e[o]));for(;e++<this[i].length;){this[B]=(this[B]+1)%this[i].length;const e=this[i][this[B]];if(e[C]>this[i][t][C]&&!e[o]&&(t=this[B]),0===this[B]&&(this[Q]=this[Q]-this[I],this[Q]<=0&&(this[Q]=this[p])),e[C]>=this[Q]&&!e[o])return e}return this[Q]=this[i][t][C],this[B]=t,this[i][t]}}},9355:(e,t,A)=>{"use strict";const r=A(4589),s=A(2858),{channels:n}=A(772),i=A(3801),{RequestContentLengthMismatchError:o,ResponseContentLengthMismatchError:a,RequestAbortedError:c,HeadersTimeoutError:g,HeadersOverflowError:l,SocketError:h,InformationalError:d,BodyTimeoutError:u,HTTPParserError:E,ResponseExceededMaxSizeError:I}=A(4465),{kUrl:Q,kReset:B,kClient:C,kParser:p,kBlocking:f,kRunning:m,kPending:y,kSize:D,kWriting:S,kQueue:w,kNoRef:b,kKeepAliveDefaultTimeout:R,kHostHeader:N,kPendingIdx:k,kRunningIdx:F,kError:U,kPipelining:M,kSocket:T,kKeepAliveTimeoutValue:v,kMaxHeadersSize:L,kKeepAliveMaxTimeout:H,kKeepAliveTimeoutThreshold:Y,kHeadersTimeout:x,kBodyTimeout:V,kStrictContentLength:P,kMaxRequests:G,kCounter:O,kMaxResponseSize:J,kOnError:W,kResume:q,kHTTPContext:_,kClosed:X}=A(257),Z=A(4178),z=Buffer.alloc(0),j=Buffer[Symbol.species],$=s.removeAllListeners;let K;let ee=null,te=null,Ae=null,re=0,se=null;class ne{constructor(e,t,{exports:A}){this.llhttp=A,this.ptr=this.llhttp.llhttp_alloc(Z.TYPE.RESPONSE),this.client=e,this.socket=t,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=0,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[L],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=e[J]}setTimeout(e,t){e!==this.timeoutValue||1&t^1&this.timeoutType?(this.timeout&&(i.clearTimeout(this.timeout),this.timeout=null),e&&(1&t?this.timeout=i.setFastTimeout(ie,e,new WeakRef(this)):(this.timeout=setTimeout(ie,e,new WeakRef(this)),this.timeout?.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=t}resume(){!this.socket.destroyed&&this.paused&&(r(null!=this.ptr),r(null===te),this.llhttp.llhttp_resume(this.ptr),r(5===this.timeoutType),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||z),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){const e=this.socket.read();if(null===e)break;this.execute(e)}}execute(e){r(null===te),r(null!=this.ptr),r(!this.paused);const{socket:t,llhttp:A}=this;e.length>re&&(se&&A.free(se),re=4096*Math.ceil(e.length/4096),se=A.malloc(re)),new Uint8Array(A.memory.buffer,se,re).set(e);try{let r;try{Ae=e,te=this,r=A.llhttp_execute(this.ptr,se,e.length)}finally{te=null,Ae=null}if(r!==Z.ERROR.OK){const s=e.subarray(A.llhttp_get_error_pos(this.ptr)-se);if(r===Z.ERROR.PAUSED_UPGRADE)this.onUpgrade(s);else{if(r!==Z.ERROR.PAUSED){const e=A.llhttp_get_error_reason(this.ptr);let t="";if(e){const r=new Uint8Array(A.memory.buffer,e).indexOf(0);t="Response does not match the HTTP/1.1 protocol ("+Buffer.from(A.memory.buffer,e,r).toString()+")"}throw new E(t,Z.ERROR[r],s)}this.paused=!0,t.unshift(s)}}}catch(e){s.destroy(t,e)}}destroy(){r(null===te),r(null!=this.ptr),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&i.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){return this.statusText=e.toString(),0}onMessageBegin(){const{socket:e,client:t}=this;if(e.destroyed)return-1;const A=t[w][t[F]];return A?(A.onResponseStarted(),0):-1}onHeaderField(e){const t=this.headers.length;return 1&t?this.headers[t-1]=Buffer.concat([this.headers[t-1],e]):this.headers.push(e),this.trackHeader(e.length),0}onHeaderValue(e){let t=this.headers.length;1&~t?this.headers[t-1]=Buffer.concat([this.headers[t-1],e]):(this.headers.push(e),t+=1);const A=this.headers[t-2];if(10===A.length){const t=s.bufferToLowerCasedHeaderName(A);"keep-alive"===t?this.keepAlive+=e.toString():"connection"===t&&(this.connection+=e.toString())}else 14===A.length&&"content-length"===s.bufferToLowerCasedHeaderName(A)&&(this.contentLength+=e.toString());return this.trackHeader(e.length),0}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&s.destroy(this.socket,new l)}onUpgrade(e){const{upgrade:t,client:A,socket:n,headers:i,statusCode:o}=this;r(t),r(A[T]===n),r(!n.destroyed),r(!this.paused),r(!(1&i.length));const a=A[w][A[F]];r(a),r(a.upgrade||"CONNECT"===a.method),this.statusCode=0,this.statusText="",this.shouldKeepAlive=!1,this.headers=[],this.headersSize=0,n.unshift(e),n[p].destroy(),n[p]=null,n[C]=null,n[U]=null,$(n),A[T]=null,A[_]=null,A[w][A[F]++]=null,A.emit("disconnect",A[Q],[A],new d("upgrade"));try{a.onUpgrade(o,i,n)}catch(e){s.destroy(n,e)}A[q]()}onHeadersComplete(e,t,A){const{client:n,socket:i,headers:o,statusText:a}=this;if(i.destroyed)return-1;const c=n[w][n[F]];if(!c)return-1;if(r(!this.upgrade),r(this.statusCode<200),100===e)return s.destroy(i,new h("bad response",s.getSocketInfo(i))),-1;if(t&&!c.upgrade)return s.destroy(i,new h("bad upgrade",s.getSocketInfo(i))),-1;if(r(3===this.timeoutType),this.statusCode=e,this.shouldKeepAlive=A||"HEAD"===c.method&&!i[B]&&"keep-alive"===this.connection.toLowerCase(),this.statusCode>=200){const e=null!=c.bodyTimeout?c.bodyTimeout:n[V];this.setTimeout(e,5)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if("CONNECT"===c.method)return r(1===n[m]),this.upgrade=!0,2;if(t)return r(1===n[m]),this.upgrade=!0,2;if(r(!(1&this.headers.length)),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&n[M]){const e=this.keepAlive?s.parseKeepAliveTimeout(this.keepAlive):null;if(null!=e){const t=Math.min(e-n[Y],n[H]);t<=0?i[B]=!0:n[v]=t}else n[v]=n[R]}else i[B]=!0;const g=!1===c.onHeaders(e,o,this.resume,a);return c.aborted?-1:"HEAD"===c.method||e<200?1:(i[f]&&(i[f]=!1,n[q]()),g?Z.ERROR.PAUSED:0)}onBody(e){const{client:t,socket:A,statusCode:n,maxResponseSize:i}=this;if(A.destroyed)return-1;const o=t[w][t[F]];return r(o),r(5===this.timeoutType),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),r(n>=200),i>-1&&this.bytesRead+e.length>i?(s.destroy(A,new I),-1):(this.bytesRead+=e.length,!1===o.onData(e)?Z.ERROR.PAUSED:0)}onMessageComplete(){const{client:e,socket:t,statusCode:A,upgrade:n,headers:i,contentLength:o,bytesRead:c,shouldKeepAlive:g}=this;if(t.destroyed&&(!A||g))return-1;if(n)return 0;r(A>=100),r(!(1&this.headers.length));const l=e[w][e[F]];return r(l),this.statusCode=0,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",this.headers=[],this.headersSize=0,A<200?0:"HEAD"!==l.method&&o&&c!==parseInt(o,10)?(s.destroy(t,new a),-1):(l.onComplete(i),e[w][e[F]++]=null,t[S]?(r(0===e[m]),s.destroy(t,new d("reset")),Z.ERROR.PAUSED):g?t[B]&&0===e[m]?(s.destroy(t,new d("reset")),Z.ERROR.PAUSED):(null==e[M]||1===e[M]?setImmediate(e[q]):e[q](),0):(s.destroy(t,new d("reset")),Z.ERROR.PAUSED))}}function ie(e){const{socket:t,timeoutType:A,client:n,paused:i}=e.deref();3===A?(!t[S]||t.writableNeedDrain||n[m]>1)&&(r(!i,"cannot be paused while waiting for headers"),s.destroy(t,new g)):5===A?i||s.destroy(t,new u):8===A&&(r(0===n[m]&&n[v]),s.destroy(t,new d("socket idle timeout")))}function oe(e){r("ERR_TLS_CERT_ALTNAME_INVALID"!==e.code);const t=this[p];"ECONNRESET"!==e.code||!t.statusCode||t.shouldKeepAlive?(this[U]=e,this[C][W](e)):t.onMessageComplete()}function ae(){this[p]?.readMore()}function ce(){const e=this[p];!e.statusCode||e.shouldKeepAlive?s.destroy(this,new h("other side closed",s.getSocketInfo(this))):e.onMessageComplete()}function ge(){const e=this[p];e&&(this[U]||!e.statusCode||e.shouldKeepAlive||e.onMessageComplete(),this[p].destroy(),this[p]=null);const t=this[U]||new h("closed",s.getSocketInfo(this)),A=this[C];if(A[T]=null,A[_]=null,A.destroyed){r(0===A[y]);const e=A[w].splice(A[F]);for(let r=0;r<e.length;r++){const n=e[r];s.errorRequest(A,n,t)}}else if(A[m]>0&&"UND_ERR_INFO"!==t.code){const e=A[w][A[F]];A[w][A[F]++]=null,s.errorRequest(A,e,t)}A[k]=A[F],r(0===A[m]),A.emit("disconnect",A[Q],[A],t),A[q]()}function le(){this[X]=!0}function he(e,t,A,n,i,o,a,c){try{t?s.isBuffer(t)&&(r(o===t.byteLength,"buffer body must have content length"),i.cork(),i.write(`${a}content-length: ${o}\r\n\r\n`,"latin1"),i.write(t),i.uncork(),n.onBodySent(t),c||!1===n.reset||(i[B]=!0)):0===o?i.write(`${a}content-length: 0\r\n\r\n`,"latin1"):(r(null===o,"no body must not have content length"),i.write(`${a}\r\n`,"latin1")),n.onRequestSent(),A[q]()}catch(t){e(t)}}async function de(e,t,A,s,n,i,o,a){r(0!==i||0===A[m],"iterator body cannot be pipelined");let c=null;function g(){if(c){const e=c;c=null,e()}}n.on("close",g).on("drain",g);const l=new ue({abort:e,socket:n,request:s,contentLength:i,client:A,expectsPayload:a,header:o});try{for await(const e of t){if(n[U])throw n[U];l.write(e)||await new Promise(((e,t)=>{r(null===c),n[U]?t(n[U]):c=e}))}l.end()}catch(e){l.destroy(e)}finally{n.off("close",g).off("drain",g)}}class ue{constructor({abort:e,socket:t,request:A,contentLength:r,client:s,expectsPayload:n,header:i}){this.socket=t,this.request=A,this.contentLength=r,this.client=s,this.bytesWritten=0,this.expectsPayload=n,this.header=i,this.abort=e,t[S]=!0}write(e){const{socket:t,request:A,contentLength:r,client:s,bytesWritten:n,expectsPayload:i,header:a}=this;if(t[U])throw t[U];if(t.destroyed)return!1;const c=Buffer.byteLength(e);if(!c)return!0;if(null!==r&&n+c>r){if(s[P])throw new o;process.emitWarning(new o)}t.cork(),0===n&&(i||!1===A.reset||(t[B]=!0),null===r?t.write(`${a}transfer-encoding: chunked\r\n`,"latin1"):t.write(`${a}content-length: ${r}\r\n\r\n`,"latin1")),null===r&&t.write(`\r\n${c.toString(16)}\r\n`,"latin1"),this.bytesWritten+=c;const g=t.write(e);return t.uncork(),A.onBodySent(e),g||t[p].timeout&&3===t[p].timeoutType&&t[p].timeout.refresh&&t[p].timeout.refresh(),g}end(){const{socket:e,contentLength:t,client:A,bytesWritten:r,expectsPayload:s,header:n,request:i}=this;if(i.onRequestSent(),e[S]=!1,e[U])throw e[U];if(!e.destroyed){if(0===r?s?e.write(`${n}content-length: 0\r\n\r\n`,"latin1"):e.write(`${n}\r\n`,"latin1"):null===t&&e.write("\r\n0\r\n\r\n","latin1"),null!==t&&r!==t){if(A[P])throw new o;process.emitWarning(new o)}e[p].timeout&&3===e[p].timeoutType&&e[p].timeout.refresh&&e[p].timeout.refresh(),A[q]()}}destroy(e){const{socket:t,client:A,abort:s}=this;t[S]=!1,e&&(r(A[m]<=1,"pipeline should only contain this request"),s(e))}}e.exports=function(e,t){if(e[T]=t,ee||(ee=function(){const e=process.env.JEST_WORKER_ID?A(4744):void 0;let t,s="ppc64"!==process.arch;if("1"===process.env.UNDICI_NO_WASM_SIMD?s=!0:"0"===process.env.UNDICI_NO_WASM_SIMD&&(s=!1),s)try{t=new WebAssembly.Module(A(7136))}catch{}return t||(t=new WebAssembly.Module(e||A(4744))),new WebAssembly.Instance(t,{env:{wasm_on_url:(e,t,A)=>0,wasm_on_status:(e,t,A)=>{r(te.ptr===e);const s=t-se+Ae.byteOffset;return te.onStatus(new j(Ae.buffer,s,A))},wasm_on_message_begin:e=>(r(te.ptr===e),te.onMessageBegin()),wasm_on_header_field:(e,t,A)=>{r(te.ptr===e);const s=t-se+Ae.byteOffset;return te.onHeaderField(new j(Ae.buffer,s,A))},wasm_on_header_value:(e,t,A)=>{r(te.ptr===e);const s=t-se+Ae.byteOffset;return te.onHeaderValue(new j(Ae.buffer,s,A))},wasm_on_headers_complete:(e,t,A,s)=>(r(te.ptr===e),te.onHeadersComplete(t,1===A,1===s)),wasm_on_body:(e,t,A)=>{r(te.ptr===e);const s=t-se+Ae.byteOffset;return te.onBody(new j(Ae.buffer,s,A))},wasm_on_message_complete:e=>(r(te.ptr===e),te.onMessageComplete())}})}()),t.errored)throw t.errored;if(t.destroyed)throw new h("destroyed");return t[b]=!1,t[S]=!1,t[B]=!1,t[f]=!1,t[p]=new ne(e,t,ee),s.addListener(t,"error",oe),s.addListener(t,"readable",ae),s.addListener(t,"end",ce),s.addListener(t,"close",ge),t[X]=!1,t.on("close",le),{version:"h1",defaultPipelining:1,write:t=>function(e,t){const{method:i,path:a,host:g,upgrade:l,blocking:h,reset:u}=t;let{body:E,headers:I,contentLength:Q}=t;const C="PUT"===i||"POST"===i||"PATCH"===i||"QUERY"===i||"PROPFIND"===i||"PROPPATCH"===i;if(s.isFormDataLike(E)){K||(K=A(2530).extractBody);const[e,r]=K(E);null==t.contentType&&I.push("content-type",r),E=e.stream,Q=e.length}else s.isBlobLike(E)&&null==t.contentType&&E.type&&I.push("content-type",E.type);E&&"function"==typeof E.read&&E.read(0);const p=s.bodyLength(E);Q=p??Q,null===Q&&(Q=t.contentLength);0!==Q||C||(Q=null);if(function(e){return"GET"!==e&&"HEAD"!==e&&"OPTIONS"!==e&&"TRACE"!==e&&"CONNECT"!==e}(i)&&Q>0&&null!==t.contentLength&&t.contentLength!==Q){if(e[P])return s.errorRequest(e,t,new o),!1;process.emitWarning(new o)}const y=e[T],D=A=>{t.aborted||t.completed||(s.errorRequest(e,t,A||new c),s.destroy(E),s.destroy(y,new d("aborted")))};try{t.onConnect(D)}catch(A){s.errorRequest(e,t,A)}if(t.aborted)return!1;"HEAD"===i&&(y[B]=!0);(l||"CONNECT"===i)&&(y[B]=!0);null!=u&&(y[B]=u);e[G]&&y[O]++>=e[G]&&(y[B]=!0);h&&(y[f]=!0);let w=`${i} ${a} HTTP/1.1\r\n`;w+="string"==typeof g?`host: ${g}\r\n`:e[N];l?w+=`connection: upgrade\r\nupgrade: ${l}\r\n`:e[M]&&!y[B]?w+="connection: keep-alive\r\n":w+="connection: close\r\n";if(Array.isArray(I))for(let e=0;e<I.length;e+=2){const t=I[e+0],A=I[e+1];if(Array.isArray(A))for(let e=0;e<A.length;e++)w+=`${t}: ${A[e]}\r\n`;else w+=`${t}: ${A}\r\n`}n.sendHeaders.hasSubscribers&&n.sendHeaders.publish({request:t,headers:w,socket:y});E&&0!==p?s.isBuffer(E)?he(D,E,e,t,y,Q,w,C):s.isBlobLike(E)?"function"==typeof E.stream?de(D,E.stream(),e,t,y,Q,w,C):async function(e,t,A,s,n,i,a,c){r(i===t.size,"blob body must have content length");try{if(null!=i&&i!==t.size)throw new o;const e=Buffer.from(await t.arrayBuffer());n.cork(),n.write(`${a}content-length: ${i}\r\n\r\n`,"latin1"),n.write(e),n.uncork(),s.onBodySent(e),s.onRequestSent(),c||!1===s.reset||(n[B]=!0),A[q]()}catch(t){e(t)}}(D,E,e,t,y,Q,w,C):s.isStream(E)?function(e,t,A,n,i,o,a,g){r(0!==o||0===A[m],"stream body cannot be pipelined");let l=!1;const h=new ue({abort:e,socket:i,request:n,contentLength:o,client:A,expectsPayload:g,header:a}),d=function(e){if(!l)try{!h.write(e)&&this.pause&&this.pause()}catch(e){s.destroy(this,e)}},u=function(){l||t.resume&&t.resume()},E=function(){if(queueMicrotask((()=>{t.removeListener("error",I)})),!l){const e=new c;queueMicrotask((()=>I(e)))}},I=function(e){if(!l){if(l=!0,r(i.destroyed||i[S]&&A[m]<=1),i.off("drain",u).off("error",I),t.removeListener("data",d).removeListener("end",I).removeListener("close",E),!e)try{h.end()}catch(t){e=t}h.destroy(e),!e||"UND_ERR_INFO"===e.code&&"reset"===e.message?s.destroy(t):s.destroy(t,e)}};t.on("data",d).on("end",I).on("error",I).on("close",E),t.resume&&t.resume();i.on("drain",u).on("error",I),t.errorEmitted??t.errored?setImmediate(I,t.errored):(t.endEmitted??t.readableEnded)&&setImmediate(I,null);(t.closeEmitted??t.closed)&&setImmediate(E)}(D,E,e,t,y,Q,w,C):s.isIterable(E)?de(D,E,e,t,y,Q,w,C):r(!1):he(D,null,e,t,y,Q,w,C);return!0}(e,t),resume(){!function(e){const t=e[T];if(t&&!t.destroyed)if(0===e[D]?!t[b]&&t.unref&&(t.unref(),t[b]=!0):t[b]&&t.ref&&(t.ref(),t[b]=!1),0===e[D])8!==t[p].timeoutType&&t[p].setTimeout(e[v],8);else if(e[m]>0&&t[p].statusCode<200&&3!==t[p].timeoutType){const A=e[w][e[F]],r=null!=A.headersTimeout?A.headersTimeout:e[x];t[p].setTimeout(r,3)}}(e)},destroy(e,A){t[X]?queueMicrotask(A):(t.on("close",A),t.destroy(e))},get destroyed(){return t.destroyed},busy(A){if(t[S]||t[B]||t[f])return!0;if(A){if(e[m]>0&&!A.idempotent)return!0;if(e[m]>0&&(A.upgrade||"CONNECT"===A.method))return!0;if(e[m]>0&&0!==s.bodyLength(A.body)&&(s.isStream(A.body)||s.isAsyncIterable(A.body)||s.isFormDataLike(A.body)))return!0}return!1}}}},8142:(e,t,A)=>{"use strict";const r=A(4589),{pipeline:s}=A(7075),n=A(2858),{RequestContentLengthMismatchError:i,RequestAbortedError:o,SocketError:a,InformationalError:c}=A(4465),{kUrl:g,kReset:l,kClient:h,kRunning:d,kPending:u,kQueue:E,kPendingIdx:I,kRunningIdx:Q,kError:B,kSocket:C,kStrictContentLength:p,kOnError:f,kMaxConcurrentStreams:m,kHTTP2Session:y,kResume:D,kSize:S,kHTTPContext:w,kClosed:b,kBodyTimeout:R}=A(257),{channels:N}=A(772),k=Symbol("open streams");let F,U;try{U=A(2467)}catch{U={constants:{}}}const{constants:{HTTP2_HEADER_AUTHORITY:M,HTTP2_HEADER_METHOD:T,HTTP2_HEADER_PATH:v,HTTP2_HEADER_SCHEME:L,HTTP2_HEADER_CONTENT_LENGTH:H,HTTP2_HEADER_EXPECT:Y,HTTP2_HEADER_STATUS:x}}=U;function V(e){r("ERR_TLS_CERT_ALTNAME_INVALID"!==e.code),this[C][B]=e,this[h][f](e)}function P(e,t,A){if(0===A){const A=new c(`HTTP/2: "frameError" received - type ${e}, code ${t}`);this[C][B]=A,this[h][f](A)}}function G(){const e=new a("other side closed",n.getSocketInfo(this[C]));this.destroy(e),n.destroy(this[C],e)}function O(e){const t=this[B]||new a(`HTTP/2: "GOAWAY" frame received with code ${e}`,n.getSocketInfo(this[C])),A=this[h];if(A[C]=null,A[w]=null,this.close(),this[y]=null,n.destroy(this[C],t),A[Q]<A[E].length){const e=A[E][A[Q]];A[E][A[Q]++]=null,n.errorRequest(A,e,t),A[I]=A[Q]}r(0===A[d]),A.emit("disconnect",A[g],[A],t),A.emit("connectionError",A[g],[A],t),A[D]()}function J(){const{[h]:e}=this,{[C]:t}=e,A=this[C][B]||this[B]||new a("closed",n.getSocketInfo(t));if(e[C]=null,e[w]=null,e.destroyed){r(0===e[u]);const t=e[E].splice(e[Q]);for(let r=0;r<t.length;r++){const s=t[r];n.errorRequest(e,s,A)}}}function W(){const e=this[B]||new a("closed",n.getSocketInfo(this)),t=this[y][h];t[C]=null,t[w]=null,null!==this[y]&&this[y].destroy(e),t[I]=t[Q],r(0===t[d]),t.emit("disconnect",t[g],[t],e),t[D]()}function q(e){r("ERR_TLS_CERT_ALTNAME_INVALID"!==e.code),this[B]=e,this[h][f](e)}function _(){n.destroy(this,new a("other side closed",n.getSocketInfo(this)))}function X(){this[b]=!0}function Z(e,t,A,s,i,o,a,c){try{null!=A&&n.isBuffer(A)&&(r(a===A.byteLength,"buffer body must have content length"),t.cork(),t.write(A),t.uncork(),t.end(),i.onBodySent(A)),c||(o[l]=!0),i.onRequestSent(),s[D]()}catch(t){e(t)}}async function z(e,t,A,s,n,i,o,a){r(0!==o||0===s[d],"iterator body cannot be pipelined");let c=null;function g(){if(c){const e=c;c=null,e()}}t.on("close",g).on("drain",g);try{for await(const e of A){if(i[B])throw i[B];const A=t.write(e);n.onBodySent(e),A||await new Promise(((e,t)=>{r(null===c),i[B]?t(i[B]):c=e}))}t.end(),n.onRequestSent(),a||(i[l]=!0),s[D]()}catch(t){e(t)}finally{t.off("close",g).off("drain",g)}}e.exports=function(e,t){e[C]=t;const a=U.connect(e[g],{createConnection:()=>t,peerMaxConcurrentStreams:e[m],settings:{enablePush:!1}});return a[k]=0,a[h]=e,a[C]=t,a[y]=null,n.addListener(a,"error",V),n.addListener(a,"frameError",P),n.addListener(a,"end",G),n.addListener(a,"goaway",O),n.addListener(a,"close",J),a.unref(),e[y]=a,t[y]=a,n.addListener(t,"error",q),n.addListener(t,"end",_),n.addListener(t,"close",W),t[b]=!1,t.on("close",X),{version:"h2",defaultPipelining:1/0,write:t=>function(e,t){const a=t.bodyTimeout??e[R],h=e[y],{method:u,path:B,host:m,upgrade:S,expectContinue:w,signal:b,protocol:U,headers:V}=t;let{body:P}=t;if(S)return n.errorRequest(e,t,new Error("Upgrade not supported for H2")),!1;const G={};for(let e=0;e<V.length;e+=2){const t=V[e+0],A=V[e+1];if("cookie"!==t)if(Array.isArray(A))for(let e=0;e<A.length;e++)G[t]?G[t]+=`, ${A[e]}`:G[t]=A[e];else G[t]?G[t]+=`, ${A}`:G[t]=A;else null!=G[t]?G[t]=Array.isArray(G[t])?(G[t].push(A),G[t]):[G[t],A]:G[t]=A}let O=null;const{hostname:J,port:W}=e[g];G[M]=m||`${J}${W?`:${W}`:""}`,G[T]=u;const q=A=>{t.aborted||t.completed||(A=A||new o,n.errorRequest(e,t,A),null!=O&&(O.removeAllListeners("data"),O.close(),e[f](A),e[D]()),n.destroy(P,A))};try{t.onConnect(q)}catch(A){n.errorRequest(e,t,A)}if(t.aborted)return!1;if("CONNECT"===u)return h.ref(),O=h.request(G,{endStream:!1,signal:b}),O.pending?O.once("ready",(()=>{t.onUpgrade(null,null,O),++h[k],e[E][e[Q]++]=null})):(t.onUpgrade(null,null,O),++h[k],e[E][e[Q]++]=null),O.once("close",(()=>{h[k]-=1,0===h[k]&&h.unref()})),O.setTimeout(a),!0;G[v]=B,G[L]="http:"===U?"http":"https";const _="PUT"===u||"POST"===u||"PATCH"===u;P&&"function"==typeof P.read&&P.read(0);let X=n.bodyLength(P);if(n.isFormDataLike(P)){F??=A(2530).extractBody;const[e,t]=F(P);G["content-type"]=t,P=e.stream,X=e.length}null==X&&(X=t.contentLength);0!==X&&_||(X=null);if(function(e){return"GET"!==e&&"HEAD"!==e&&"OPTIONS"!==e&&"TRACE"!==e&&"CONNECT"!==e}(u)&&X>0&&null!=t.contentLength&&t.contentLength!==X){if(e[p])return n.errorRequest(e,t,new i),!1;process.emitWarning(new i)}null!=X&&(r(P,"no body must not have content length"),G[H]=`${X}`);if(h.ref(),N.sendHeaders.hasSubscribers){let e="";for(const t in G)e+=`${t}: ${G[t]}\r\n`;N.sendHeaders.publish({request:t,headers:e,socket:h[C]})}const j="GET"===u||"HEAD"===u||null===P;w?(G[Y]="100-continue",O=h.request(G,{endStream:j,signal:b}),O.once("continue",$)):(O=h.request(G,{endStream:j,signal:b}),$());return++h[k],O.setTimeout(a),O.once("response",(e=>{const{[x]:A,...r}=e;t.onResponseStarted(),t.aborted?O.removeAllListeners("data"):!1===t.onHeaders(Number(A),function(e){const t=[];for(const[A,r]of Object.entries(e))if(Array.isArray(r))for(const e of r)t.push(Buffer.from(A),Buffer.from(e));else t.push(Buffer.from(A),Buffer.from(r));return t}(r),O.resume.bind(O),"")&&O.pause()})),O.on("data",(e=>{!1===t.onData(e)&&O.pause()})),O.once("end",(A=>{O.removeAllListeners("data"),null==O.state?.state||O.state.state<6?(t.aborted||t.completed||t.onComplete({}),e[E][e[Q]++]=null,e[D]()):(--h[k],0===h[k]&&h.unref(),q(A??new c("HTTP/2: stream half-closed (remote)")),e[E][e[Q]++]=null,e[I]=e[Q],e[D]())})),O.once("close",(()=>{O.removeAllListeners("data"),h[k]-=1,0===h[k]&&h.unref()})),O.once("error",(function(e){O.removeAllListeners("data"),q(e)})),O.once("frameError",((e,t)=>{O.removeAllListeners("data"),q(new c(`HTTP/2: "frameError" received - type ${e}, code ${t}`))})),O.on("aborted",(()=>{O.removeAllListeners("data")})),O.on("timeout",(()=>{const e=new c(`HTTP/2: "stream timeout after ${a}"`);O.removeAllListeners("data"),h[k]-=1,0===h[k]&&h.unref(),q(e)})),O.once("trailers",(e=>{t.aborted||t.completed||t.onComplete(e)})),!0;function $(){P&&0!==X?n.isBuffer(P)?Z(q,O,P,e,t,e[C],X,_):n.isBlobLike(P)?"function"==typeof P.stream?z(q,O,P.stream(),e,t,e[C],X,_):async function(e,t,A,s,n,o,a,c){r(a===A.size,"blob body must have content length");try{if(null!=a&&a!==A.size)throw new i;const e=Buffer.from(await A.arrayBuffer());t.cork(),t.write(e),t.uncork(),t.end(),n.onBodySent(e),n.onRequestSent(),c||(o[l]=!0),s[D]()}catch(t){e(t)}}(q,O,P,e,t,e[C],X,_):n.isStream(P)?function(e,t,A,i,o,a,c,g){r(0!==g||0===a[d],"stream body cannot be pipelined");const h=s(o,i,(r=>{r?(n.destroy(h,r),e(r)):(n.removeAllListeners(h),c.onRequestSent(),A||(t[l]=!0),a[D]())}));function u(e){c.onBodySent(e)}n.addListener(h,"data",u)}(q,e[C],_,O,P,e,t,X):n.isIterable(P)?z(q,O,P,e,t,e[C],X,_):r(!1):Z(q,O,null,e,t,e[C],X,_)}}(e,t),resume(){!function(e){const t=e[C];!1===t?.destroyed&&(0===e[S]||0===e[m]?(t.unref(),e[y].unref()):(t.ref(),e[y].ref()))}(e)},destroy(e,A){t[b]?queueMicrotask(A):t.destroy(e).on("close",A)},get destroyed(){return t.destroyed},busy:()=>!1}}},1167:(e,t,A)=>{"use strict";const r=A(4589),s=A(7030),n=A(7067),i=A(2858),{ClientStats:o}=A(4304),{channels:a}=A(772),c=A(5837),g=A(7779),{InvalidArgumentError:l,InformationalError:h,ClientDestroyedError:d}=A(4465),u=A(1986),{kUrl:E,kServerName:I,kClient:Q,kBusy:B,kConnect:C,kResuming:p,kRunning:f,kPending:m,kSize:y,kQueue:D,kConnected:S,kConnecting:w,kNeedDrain:b,kKeepAliveDefaultTimeout:R,kHostHeader:N,kPendingIdx:k,kRunningIdx:F,kError:U,kPipelining:M,kKeepAliveTimeoutValue:T,kMaxHeadersSize:v,kKeepAliveMaxTimeout:L,kKeepAliveTimeoutThreshold:H,kHeadersTimeout:Y,kBodyTimeout:x,kStrictContentLength:V,kConnector:P,kMaxRequests:G,kCounter:O,kClose:J,kDestroy:W,kDispatch:q,kLocalAddress:_,kMaxResponseSize:X,kOnError:Z,kHTTPContext:z,kMaxConcurrentStreams:j,kResume:$}=A(257),K=A(9355),ee=A(8142),te=Symbol("kClosedResolve"),Ae=n&&n.maxHeaderSize&&Number.isInteger(n.maxHeaderSize)&&n.maxHeaderSize>0?()=>n.maxHeaderSize:()=>{throw new l("http module not available or http.maxHeaderSize invalid")},re=()=>{};function se(e){return e[M]??e[z]?.defaultPipelining??1}function ne(e,t){if(0===e[f]&&"UND_ERR_INFO"!==t.code&&"UND_ERR_SOCKET"!==t.code){r(e[k]===e[F]);const A=e[D].splice(e[F]);for(let r=0;r<A.length;r++){const s=A[r];i.errorRequest(e,s,t)}r(0===e[y])}}function ie(e){r(!e[w]),r(!e[z]);let{host:t,hostname:A,protocol:n,port:o}=e[E];if("["===A[0]){const e=A.indexOf("]");r(-1!==e);const t=A.substring(1,e);r(s.isIPv6(t)),A=t}e[w]=!0,a.beforeConnect.hasSubscribers&&a.beforeConnect.publish({connectParams:{host:t,hostname:A,protocol:n,port:o,version:e[z]?.version,servername:e[I],localAddress:e[_]},connector:e[P]}),e[P]({host:t,hostname:A,protocol:n,port:o,servername:e[I],localAddress:e[_]},((s,c)=>{if(s)return oe(e,s,{host:t,hostname:A,protocol:n,port:o}),void e[$]();if(e.destroyed)return i.destroy(c.on("error",re),new d),void e[$]();r(c);try{e[z]="h2"===c.alpnProtocol?ee(e,c):K(e,c)}catch(s){return c.destroy().on("error",re),oe(e,s,{host:t,hostname:A,protocol:n,port:o}),void e[$]()}e[w]=!1,c[O]=0,c[G]=e[G],c[Q]=e,c[U]=null,a.connected.hasSubscribers&&a.connected.publish({connectParams:{host:t,hostname:A,protocol:n,port:o,version:e[z]?.version,servername:e[I],localAddress:e[_]},connector:e[P],socket:c}),e.emit("connect",e[E],[e]),e[$]()}))}function oe(e,t,{host:A,hostname:s,protocol:n,port:o}){if(!e.destroyed){if(e[w]=!1,a.connectError.hasSubscribers&&a.connectError.publish({connectParams:{host:A,hostname:s,protocol:n,port:o,version:e[z]?.version,servername:e[I],localAddress:e[_]},connector:e[P],error:t}),"ERR_TLS_CERT_ALTNAME_INVALID"===t.code)for(r(0===e[f]);e[m]>0&&e[D][e[k]].servername===e[I];){const A=e[D][e[k]++];i.errorRequest(e,A,t)}else ne(e,t);e.emit("connectionError",e[E],[e],t)}}function ae(e){e[b]=0,e.emit("drain",e[E],[e])}function ce(e,t){2!==e[p]&&(e[p]=2,function(e,t){for(;;){if(e.destroyed)return void r(0===e[m]);if(e[te]&&!e[y])return e[te](),void(e[te]=null);if(e[z]&&e[z].resume(),e[B])e[b]=2;else if(2===e[b]){t?(e[b]=1,queueMicrotask((()=>ae(e)))):ae(e);continue}if(0===e[m])return;if(e[f]>=(se(e)||1))return;const A=e[D][e[k]];if("https:"===e[E].protocol&&e[I]!==A.servername){if(e[f]>0)return;e[I]=A.servername,e[z]?.destroy(new h("servername changed"),(()=>{e[z]=null,ce(e)}))}if(e[w])return;if(!e[z])return void ie(e);if(e[z].destroyed)return;if(e[z].busy(A))return;!A.aborted&&e[z].write(A)?e[k]++:e[D].splice(e[k],1)}}(e,t),e[p]=0,e[F]>256&&(e[D].splice(0,e[F]),e[k]-=e[F],e[F]=0))}e.exports=class extends g{constructor(e,{maxHeaderSize:t,headersTimeout:A,socketTimeout:r,requestTimeout:n,connectTimeout:o,bodyTimeout:a,idleTimeout:c,keepAlive:g,keepAliveTimeout:h,maxKeepAliveTimeout:d,keepAliveMaxTimeout:Q,keepAliveTimeoutThreshold:B,socketPath:C,pipelining:f,tls:m,strictContentLength:y,maxCachedSessions:S,connect:w,maxRequestsPerClient:U,localAddress:O,maxResponseSize:J,autoSelectFamily:W,autoSelectFamilyAttemptTimeout:q,maxConcurrentStreams:K,allowH2:ee}={}){if(void 0!==g)throw new l("unsupported keepAlive, use pipelining=0 instead");if(void 0!==r)throw new l("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(void 0!==n)throw new l("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(void 0!==c)throw new l("unsupported idleTimeout, use keepAliveTimeout instead");if(void 0!==d)throw new l("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(null!=t){if(!Number.isInteger(t)||t<1)throw new l("invalid maxHeaderSize")}else t=Ae();if(null!=C&&"string"!=typeof C)throw new l("invalid socketPath");if(null!=o&&(!Number.isFinite(o)||o<0))throw new l("invalid connectTimeout");if(null!=h&&(!Number.isFinite(h)||h<=0))throw new l("invalid keepAliveTimeout");if(null!=Q&&(!Number.isFinite(Q)||Q<=0))throw new l("invalid keepAliveMaxTimeout");if(null!=B&&!Number.isFinite(B))throw new l("invalid keepAliveTimeoutThreshold");if(null!=A&&(!Number.isInteger(A)||A<0))throw new l("headersTimeout must be a positive integer or zero");if(null!=a&&(!Number.isInteger(a)||a<0))throw new l("bodyTimeout must be a positive integer or zero");if(null!=w&&"function"!=typeof w&&"object"!=typeof w)throw new l("connect must be a function or an object");if(null!=U&&(!Number.isInteger(U)||U<0))throw new l("maxRequestsPerClient must be a positive number");if(null!=O&&("string"!=typeof O||0===s.isIP(O)))throw new l("localAddress must be valid string IP address");if(null!=J&&(!Number.isInteger(J)||J<-1))throw new l("maxResponseSize must be a positive number");if(null!=q&&(!Number.isInteger(q)||q<-1))throw new l("autoSelectFamilyAttemptTimeout must be a positive number");if(null!=ee&&"boolean"!=typeof ee)throw new l("allowH2 must be a valid boolean value");if(null!=K&&("number"!=typeof K||K<1))throw new l("maxConcurrentStreams must be a positive integer, greater than 0");super(),"function"!=typeof w&&(w=u({...m,maxCachedSessions:S,allowH2:ee,socketPath:C,timeout:o,..."boolean"==typeof W?{autoSelectFamily:W,autoSelectFamilyAttemptTimeout:q}:void 0,...w})),this[E]=i.parseOrigin(e),this[P]=w,this[M]=null!=f?f:1,this[v]=t,this[R]=null==h?4e3:h,this[L]=null==Q?6e5:Q,this[H]=null==B?2e3:B,this[T]=this[R],this[I]=null,this[_]=null!=O?O:null,this[p]=0,this[b]=0,this[N]=`host: ${this[E].hostname}${this[E].port?`:${this[E].port}`:""}\r\n`,this[x]=null!=a?a:3e5,this[Y]=null!=A?A:3e5,this[V]=null==y||y,this[G]=U,this[te]=null,this[X]=J>-1?J:-1,this[j]=null!=K?K:100,this[z]=null,this[D]=[],this[F]=0,this[k]=0,this[$]=e=>ce(this,e),this[Z]=e=>ne(this,e)}get pipelining(){return this[M]}set pipelining(e){this[M]=e,this[$](!0)}get stats(){return new o(this)}get[m](){return this[D].length-this[k]}get[f](){return this[k]-this[F]}get[y](){return this[D].length-this[F]}get[S](){return!!this[z]&&!this[w]&&!this[z].destroyed}get[B](){return Boolean(this[z]?.busy(null)||this[y]>=(se(this)||1)||this[m]>0)}[C](e){ie(this),this.once("connect",e)}[q](e,t){const A=new c(this[E].origin,e,t);return this[D].push(A),this[p]||(null==i.bodyLength(A.body)&&i.isIterable(A.body)?(this[p]=1,queueMicrotask((()=>ce(this)))):this[$](!0)),this[p]&&2!==this[b]&&this[B]&&(this[b]=2),this[b]<2}[J](){return new Promise((e=>{this[y]?this[te]=e:e(null)}))}[W](e){return new Promise((t=>{const A=this[D].splice(this[k]);for(let t=0;t<A.length;t++){const r=A[t];i.errorRequest(this,r,e)}const r=()=>{this[te]&&(this[te](),this[te]=null),t(null)};this[z]?(this[z].destroy(e,r),this[z]=null):queueMicrotask(r),this[$]()}))}}},7779:(e,t,A)=>{"use strict";const r=A(5497),s=A(4555),{ClientDestroyedError:n,ClientClosedError:i,InvalidArgumentError:o}=A(4465),{kDestroy:a,kClose:c,kClosed:g,kDestroyed:l,kDispatch:h}=A(257),d=Symbol("onDestroyed"),u=Symbol("onClosed");e.exports=class extends r{[l]=!1;[d]=null;[g]=!1;[u]=[];get destroyed(){return this[l]}get closed(){return this[g]}close(e){if(void 0===e)return new Promise(((e,t)=>{this.close(((A,r)=>A?t(A):e(r)))}));if("function"!=typeof e)throw new o("invalid callback");if(this[l])return void queueMicrotask((()=>e(new n,null)));if(this[g])return void(this[u]?this[u].push(e):queueMicrotask((()=>e(null,null))));this[g]=!0,this[u].push(e);const t=()=>{const e=this[u];this[u]=null;for(let t=0;t<e.length;t++)e[t](null,null)};this[c]().then((()=>this.destroy())).then((()=>{queueMicrotask(t)}))}destroy(e,t){if("function"==typeof e&&(t=e,e=null),void 0===t)return new Promise(((t,A)=>{this.destroy(e,((e,r)=>e?A(e):t(r)))}));if("function"!=typeof t)throw new o("invalid callback");if(this[l])return void(this[d]?this[d].push(t):queueMicrotask((()=>t(null,null))));e||(e=new n),this[l]=!0,this[d]=this[d]||[],this[d].push(t);const A=()=>{const e=this[d];this[d]=null;for(let t=0;t<e.length;t++)e[t](null,null)};this[a](e).then((()=>{queueMicrotask(A)}))}dispatch(e,t){if(!t||"object"!=typeof t)throw new o("handler must be an object");t=s.unwrap(t);try{if(!e||"object"!=typeof e)throw new o("opts must be an object.");if(this[l]||this[d])throw new n;if(this[g])throw new i;return this[h](e,t)}catch(e){if("function"!=typeof t.onError)throw e;return t.onError(e),!1}}}},5497:(e,t,A)=>{"use strict";const r=A(8474),s=A(832),n=e=>(t,A)=>e(t,s.wrap(A));e.exports=class extends r{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...e){const t=Array.isArray(e[0])?e[0]:e;let A=this.dispatch.bind(this);for(const e of t)if(null!=e){if("function"!=typeof e)throw new TypeError("invalid interceptor, expected function received "+typeof e);if(A=e(A),A=n(A),null==A||"function"!=typeof A||2!==A.length)throw new TypeError("invalid interceptor")}return new Proxy(this,{get:(e,t)=>"dispatch"===t?A:e[t]})}}},4667:(e,t,A)=>{"use strict";const r=A(7779),{kClose:s,kDestroy:n,kClosed:i,kDestroyed:o,kDispatch:a,kNoProxyAgent:c,kHttpProxyAgent:g,kHttpsProxyAgent:l}=A(257),h=A(9246),d=A(3315),u={"http:":80,"https:":443};e.exports=class extends r{#B=null;#C=null;#p=null;constructor(e={}){super(),this.#p=e;const{httpProxy:t,httpsProxy:A,noProxy:r,...s}=e;this[c]=new d(s);const n=t??process.env.http_proxy??process.env.HTTP_PROXY;this[g]=n?new h({...s,uri:n}):this[c];const i=A??process.env.https_proxy??process.env.HTTPS_PROXY;this[l]=i?new h({...s,uri:i}):this[g],this.#f()}[a](e,t){const A=new URL(e.origin);return this.#m(A).dispatch(e,t)}[s](){return Promise.all([this[c].close(),!this[g][i]&&this[g].close(),!this[l][i]&&this[l].close()])}[n](e){return Promise.all([this[c].destroy(e),!this[g][o]&&this[g].destroy(e),!this[l][o]&&this[l].destroy(e)])}#m(e){let{protocol:t,host:A,port:r}=e;return A=A.replace(/:\d*$/,"").toLowerCase(),r=Number.parseInt(r,10)||u[t]||0,this.#y(A,r)?"https:"===t?this[l]:this[g]:this[c]}#y(e,t){if(this.#D&&this.#f(),0===this.#C.length)return!0;if("*"===this.#B)return!1;for(let A=0;A<this.#C.length;A++){const r=this.#C[A];if(!r.port||r.port===t)if(/^[.*]/.test(r.hostname)){if(e.endsWith(r.hostname.replace(/^\*/,"")))return!1}else if(e===r.hostname)return!1}return!0}#f(){const e=this.#p.noProxy??this.#S,t=e.split(/[,\s]/),A=[];for(let e=0;e<t.length;e++){const r=t[e];if(!r)continue;const s=r.match(/^(.+):(\d+)$/);A.push({hostname:(s?s[1]:r).toLowerCase(),port:s?Number.parseInt(s[2],10):0})}this.#B=e,this.#C=A}get#D(){return void 0===this.#p.noProxy&&this.#B!==this.#S}get#S(){return process.env.no_proxy??process.env.NO_PROXY??""}}},1726:e=>{"use strict";const t=2047;class A{bottom=0;top=0;list=new Array(2048).fill(void 0);next=null;isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&t)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&t}shift(){const e=this.list[this.bottom];return void 0===e?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&t,e)}}e.exports=class{constructor(){this.head=this.tail=new A}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new A),this.head.push(e)}shift(){const e=this.tail,t=e.shift();return e.isEmpty()&&null!==e.next&&(this.tail=e.next,e.next=null),t}}},8297:(e,t,A)=>{"use strict";const{connect:r}=A(7030),{kClose:s,kDestroy:n}=A(257),{InvalidArgumentError:i}=A(4465),o=A(2858),a=A(1167),c=A(7779);e.exports=class extends c{#w=null;constructor(e,t){if("string"==typeof e&&(e=new URL(e)),"http:"!==e.protocol)throw new i("h2c-client: Only h2c protocol is supported");const{connect:A,maxConcurrentStreams:r,pipelining:s,...n}=t??{};let o=100,c=100;if(null!=r&&Number.isInteger(r)&&r>0&&(o=r),null!=s&&Number.isInteger(s)&&s>0&&(c=s),c>o)throw new i("h2c-client: pipelining cannot be greater than maxConcurrentStreams");super(),this.#w=new a(e,{...n,connect:this.#b(A),maxConcurrentStreams:o,pipelining:c,allowH2:!0})}#b(e){return(t,A)=>{const s=e?.connectOpts??1e4,{hostname:n,port:i,pathname:a}=t,c=r({...t,host:n,port:i,pathname:a});if(null==t.keepAlive||t.keepAlive){const e=null==t.keepAliveInitialDelay?6e4:t.keepAliveInitialDelay;c.setKeepAlive(!0,e)}c.alpnProtocol="h2";const g=o.setupConnectTimeout(new WeakRef(c),{timeout:s,hostname:n,port:i});return c.setNoDelay(!0).once("connect",(function(){if(queueMicrotask(g),A){const e=A;A=null,e(null,this)}})).on("error",(function(e){if(queueMicrotask(g),A){const t=A;A=null,t(e)}})),c}}dispatch(e,t){return this.#w.dispatch(e,t)}[s](){return this.#w.close()}[n](){return this.#w.destroy()}}},1694:(e,t,A)=>{"use strict";const{PoolStats:r}=A(4304),s=A(7779),n=A(1726),{kConnected:i,kSize:o,kRunning:a,kPending:c,kQueued:g,kBusy:l,kFree:h,kUrl:d,kClose:u,kDestroy:E,kDispatch:I}=A(257),Q=Symbol("clients"),B=Symbol("needDrain"),C=Symbol("queue"),p=Symbol("closed resolve"),f=Symbol("onDrain"),m=Symbol("onConnect"),y=Symbol("onDisconnect"),D=Symbol("onConnectionError"),S=Symbol("get dispatcher"),w=Symbol("add client"),b=Symbol("remove client");e.exports={PoolBase:class extends s{[C]=new n;[g]=0;[Q]=[];[B]=!1;[f](e,t,A){const r=this[C];let s=!1;for(;!s;){const t=r.shift();if(!t)break;this[g]--,s=!e.dispatch(t.opts,t.handler)}if(e[B]=s,!s&&this[B]&&(this[B]=!1,this.emit("drain",t,[this,...A])),this[p]&&r.isEmpty()){const e=new Array(this[Q].length);for(let t=0;t<this[Q].length;t++)e[t]=this[Q][t].close();Promise.all(e).then(this[p])}}[m]=(e,t)=>{this.emit("connect",e,[this,...t])};[y]=(e,t,A)=>{this.emit("disconnect",e,[this,...t],A)};[D]=(e,t,A)=>{this.emit("connectionError",e,[this,...t],A)};get[l](){return this[B]}get[i](){let e=0;for(const{[i]:t}of this[Q])e+=t;return e}get[h](){let e=0;for(const{[i]:t,[B]:A}of this[Q])e+=t&&!A;return e}get[c](){let e=this[g];for(const{[c]:t}of this[Q])e+=t;return e}get[a](){let e=0;for(const{[a]:t}of this[Q])e+=t;return e}get[o](){let e=this[g];for(const{[o]:t}of this[Q])e+=t;return e}get stats(){return new r(this)}[u](){if(this[C].isEmpty()){const e=new Array(this[Q].length);for(let t=0;t<this[Q].length;t++)e[t]=this[Q][t].close();return Promise.all(e)}return new Promise((e=>{this[p]=e}))}[E](e){for(;;){const t=this[C].shift();if(!t)break;t.handler.onError(e)}const t=new Array(this[Q].length);for(let A=0;A<this[Q].length;A++)t[A]=this[Q][A].destroy(e);return Promise.all(t)}[I](e,t){const A=this[S]();return A?A.dispatch(e,t)||(A[B]=!0,this[B]=!this[S]()):(this[B]=!0,this[C].push({opts:e,handler:t}),this[g]++),!this[B]}[w](e){return e.on("drain",this[f].bind(this,e)).on("connect",this[m]).on("disconnect",this[y]).on("connectionError",this[D]),this[Q].push(e),this[B]&&queueMicrotask((()=>{this[B]&&this[f](e,e[d],[e,this])})),this}[b](e){e.close((()=>{const t=this[Q].indexOf(e);-1!==t&&this[Q].splice(t,1)})),this[B]=this[Q].some((e=>!e[B]&&!0!==e.closed&&!0!==e.destroyed))}},kClients:Q,kNeedDrain:B,kAddClient:w,kRemoveClient:b,kGetDispatcher:S}},8542:(e,t,A)=>{"use strict";const{PoolBase:r,kClients:s,kNeedDrain:n,kAddClient:i,kGetDispatcher:o,kRemoveClient:a}=A(1694),c=A(1167),{InvalidArgumentError:g}=A(4465),l=A(2858),{kUrl:h}=A(257),d=A(1986),u=Symbol("options"),E=Symbol("connections"),I=Symbol("factory");function Q(e,t){return new c(e,t)}e.exports=class extends r{constructor(e,{connections:t,factory:A=Q,connect:r,connectTimeout:n,tls:i,maxCachedSessions:o,socketPath:a,autoSelectFamily:c,autoSelectFamilyAttemptTimeout:B,allowH2:C,clientTtl:p,...f}={}){if(null!=t&&(!Number.isFinite(t)||t<0))throw new g("invalid connections");if("function"!=typeof A)throw new g("factory must be a function.");if(null!=r&&"function"!=typeof r&&"object"!=typeof r)throw new g("connect must be a function or an object");"function"!=typeof r&&(r=d({...i,maxCachedSessions:o,allowH2:C,socketPath:a,timeout:n,..."boolean"==typeof c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:B}:void 0,...r})),super(),this[E]=t||null,this[h]=l.parseOrigin(e),this[u]={...l.deepClone(f),connect:r,allowH2:C,clientTtl:p},this[u].interceptors=f.interceptors?{...f.interceptors}:void 0,this[I]=A,this.on("connect",((e,t)=>{if(null!=p&&p>0)for(const e of t)Object.assign(e,{ttl:Date.now()})})),this.on("connectionError",((e,t,A)=>{for(const e of t){const t=this[s].indexOf(e);-1!==t&&this[s].splice(t,1)}}))}[o](){const e=this[u].clientTtl;for(const t of this[s])if(null!=e&&e>0&&t.ttl&&Date.now()-t.ttl>e)this[a](t);else if(!t[n])return t;if(!this[E]||this[s].length<this[E]){const e=this[I](this[h],this[u]);return this[i](e),e}}}},9246:(e,t,A)=>{"use strict";const{kProxy:r,kClose:s,kDestroy:n,kDispatch:i}=A(257),o=A(3315),a=A(8542),c=A(7779),{InvalidArgumentError:g,RequestAbortedError:l,SecureProxyConnectionError:h}=A(4465),d=A(1986),u=A(1167),E=Symbol("proxy agent"),I=Symbol("proxy client"),Q=Symbol("proxy headers"),B=Symbol("request tls settings"),C=Symbol("proxy tls settings"),p=Symbol("connect endpoint function"),f=Symbol("tunnel proxy");function m(e,t){return new a(e,t)}const y=()=>{};function D(e,t){return 1===t.connections?new u(e,t):new a(e,t)}class S extends c{#w;constructor(e,{headers:t={},connect:A,factory:r}){if(!e)throw new g("Proxy URL is mandatory");super(),this[Q]=t,this.#w=r?r(e,{connect:A}):new u(e,{connect:A})}[i](e,t){const A=t.onHeaders;t.onHeaders=function(e,r,s){407!==e?A&&A.call(this,e,r,s):"function"==typeof t.onError&&t.onError(new g("Proxy Authentication Required (407)"))};const{origin:r,path:s="/",headers:n={}}=e;if(e.path=r+s,!("host"in n)&&!("Host"in n)){const{host:e}=new URL(r);n.host=e}return e.headers={...this[Q],...n},this.#w[i](e,t)}[s](){return this.#w.close()}[n](e){return this.#w.destroy(e)}}e.exports=class extends c{constructor(e){if(!e||"object"==typeof e&&!(e instanceof URL)&&!e.uri)throw new g("Proxy uri is mandatory");const{clientFactory:t=m}=e;if("function"!=typeof t)throw new g("Proxy opts.clientFactory must be a function.");const{proxyTunnel:A=!0}=e;super();const s=this.#R(e),{href:n,origin:i,port:a,protocol:c,username:u,password:w,hostname:b}=s;if(this[r]={uri:n,protocol:c},this[B]=e.requestTls,this[C]=e.proxyTls,this[Q]=e.headers||{},this[f]=A,e.auth&&e.token)throw new g("opts.auth cannot be used in combination with opts.token");e.auth?this[Q]["proxy-authorization"]=`Basic ${e.auth}`:e.token?this[Q]["proxy-authorization"]=e.token:u&&w&&(this[Q]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(u)}:${decodeURIComponent(w)}`).toString("base64")}`);const R=d({...e.proxyTls});this[p]=d({...e.requestTls});const N=e.factory||D;this[I]=t(s,{connect:R}),this[E]=new o({...e,factory:(e,t)=>{const{protocol:A}=new URL(e);return this[f]||"http:"!==A||"http:"!==this[r].protocol?N(e,t):new S(this[r].uri,{headers:this[Q],connect:R,factory:N})},connect:async(e,t)=>{let A=e.host;e.port||(A+=`:${function(e){return"https:"===e?443:80}(e.protocol)}`);try{const{socket:r,statusCode:s}=await this[I].connect({origin:i,port:a,path:A,signal:e.signal,headers:{...this[Q],host:e.host,...null==e.connections||e.connections>0?{"proxy-connection":"keep-alive"}:{}},servername:this[C]?.servername||b});if(200!==s&&(r.on("error",y).destroy(),t(new l(`Proxy response (${s}) !== 200 when HTTP Tunneling`))),"https:"!==e.protocol)return void t(null,r);let n;n=this[B]?this[B].servername:e.servername,this[p]({...e,servername:n,httpSocket:r},t)}catch(e){"ERR_TLS_CERT_ALTNAME_INVALID"===e.code?t(new h(e)):t(e)}}})}dispatch(e,t){const A=function(e){if(Array.isArray(e)){const t={};for(let A=0;A<e.length;A+=2)t[e[A]]=e[A+1];return t}return e}(e.headers);if(function(e){const t=e&&Object.keys(e).find((e=>"proxy-authorization"===e.toLowerCase()));if(t)throw new g("Proxy-Authorization should be sent in ProxyAgent constructor")}(A),A&&!("host"in A)&&!("Host"in A)){const{host:t}=new URL(e.origin);A.host=t}return this[E].dispatch({...e,headers:A},t)}#R(e){return"string"==typeof e?new URL(e):e instanceof URL?e:new URL(e.uri)}[s](){return Promise.all([this[E].close(),this[I].close()])}[n](){return Promise.all([this[E].destroy(),this[I].destroy()])}}},8712:(e,t,A)=>{"use strict";const r=A(5497),s=A(6294);e.exports=class extends r{#N=null;#k=null;constructor(e,t={}){super(t),this.#N=e,this.#k=t}dispatch(e,t){const A=new s({...e,retryOptions:this.#k},{dispatch:this.#N.dispatch.bind(this.#N),handler:t});return this.#N.dispatch(e,A)}close(){return this.#N.close()}destroy(){return this.#N.destroy()}}},9879:(e,t,A)=>{"use strict";const r=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:s}=A(4465),n=A(3315);function i(e){if(!e||"function"!=typeof e.dispatch)throw new s("Argument agent must implement Agent");Object.defineProperty(globalThis,r,{value:e,writable:!0,enumerable:!1,configurable:!1})}function o(){return globalThis[r]}void 0===o()&&i(new n);e.exports={setGlobalDispatcher:i,getGlobalDispatcher:o,installedExports:["fetch","Headers","Response","Request","FormData","WebSocket","CloseEvent","ErrorEvent","MessageEvent","EventSource"]}},8358:(e,t,A)=>{"use strict";const r=A(2858),{parseCacheControlHeader:s,parseVaryHeader:n,isEtagUsable:i}=A(9453),{parseHttpDate:o}=A(8851);function a(){}const c=[200,203,204,206,300,301,308,404,405,410,414,501],g=[206,304];e.exports=class{#F;#U;#M;#T;#v;#L;constructor({store:e,type:t,cacheByDefault:A},r,s){this.#T=e,this.#U=t,this.#M=A,this.#F=r,this.#v=s}onRequestStart(e,t){this.#L?.destroy(),this.#L=void 0,this.#v.onRequestStart?.(e,t)}onRequestUpgrade(e,t,A,r){this.#v.onRequestUpgrade?.(e,t,A,r)}onResponseStart(e,t,A,l){const h=()=>this.#v.onResponseStart?.(e,t,A,l);if(!r.safeHTTPMethods.includes(this.#F.method)&&t>=200&&t<=399){try{this.#T.delete(this.#F)?.catch?.(a)}catch{}return h()}const d=A["cache-control"],u=A["last-modified"]&&c.includes(t);if(!(d||A.expires||u||this.#M))return h();const E=d?s(d):{};if(!function(e,t,A,r){if(t<200||g.includes(t))return!1;if(!(c.includes(t)||A.expires||r.public||void 0!==r["max-age"]||r.private&&"private"===e||void 0!==r["s-maxage"]&&"shared"===e))return!1;if(r["no-store"])return!1;if("shared"===e&&!0===r.private)return!1;if(A.vary?.includes("*"))return!1;if(A.authorization){if(!r.public||"string"!=typeof A.authorization)return!1;if(Array.isArray(r["no-cache"])&&r["no-cache"].includes("authorization"))return!1;if(Array.isArray(r.private)&&r.private.includes("authorization"))return!1}return!0}(this.#U,t,A,E))return h();const I=Date.now(),Q=A.age?function(e){const t=parseInt(Array.isArray(e)?e[0]:e);return isNaN(t)?void 0:1e3*t}(A.age):void 0;if(Q&&Q>=2147483647e3)return h();const B="string"==typeof A.date?o(A.date):void 0,C=function(e,t,A,r,s,n){if("shared"===e){const e=n["s-maxage"];if(void 0!==e)return e>0?1e3*e:void 0}const i=n["max-age"];if(void 0!==i)return i>0?1e3*i:void 0;if("string"==typeof r.expires){const e=o(r.expires);if(e){if(t>=e.getTime())return;if(s){if(s>=e)return;if(void 0!==A&&A>e-s)return}return e.getTime()-t}}if("string"==typeof r["last-modified"]){const e=new Date(r["last-modified"]);if((a=e)instanceof Date&&Number.isFinite(a.valueOf())){if(e.getTime()>=t)return;return.1*(t-e.getTime())}}var a;if(n.immutable)return 31536e3;return}(this.#U,I,Q,A,B,E)??this.#M;if(void 0===C||Q&&Q>C)return h();const p=B?B.getTime():I,f=C+p;if(I>=f)return h();let m;if(this.#F.headers&&A.vary&&(m=n(A.vary,this.#F.headers),!m))return h();const y=function(e,t,A){let r=-1/0,s=-1/0,n=-1/0;t["stale-while-revalidate"]&&(r=A+1e3*t["stale-while-revalidate"]);t["stale-if-error"]&&(s=A+1e3*t["stale-if-error"]);r===-1/0&&s===-1/0&&(n=e+31536e6);return Math.max(A,r,s,n)}(p,E,f),D=function(e,t){const A=["connection","proxy-authenticate","proxy-authentication-info","proxy-authorization","proxy-connection","te","transfer-encoding","upgrade","age"];e.connection&&(Array.isArray(e.connection)?A.push(...e.connection.map((e=>e.trim()))):A.push(...e.connection.split(",").map((e=>e.trim()))));Array.isArray(t["no-cache"])&&A.push(...t["no-cache"]);Array.isArray(t.private)&&A.push(...t.private);let r;for(const t of A)e[t]&&(r??={...e},delete r[t]);return r??e}(A,E),S={statusCode:t,statusMessage:l,headers:D,vary:m,cacheControlDirectives:E,cachedAt:Q?I-Q:I,staleAt:f,deleteAt:y};if("string"==typeof A.etag&&i(A.etag)&&(S.etag=A.etag),this.#L=this.#T.createWriteStream(this.#F,S),!this.#L)return h();const w=this;return this.#L.on("drain",(()=>e.resume())).on("error",(function(){w.#L=void 0,w.#T.delete(w.#F)})).on("close",(function(){w.#L===this&&(w.#L=void 0),e.resume()})),h()}onResponseData(e,t){!1===this.#L?.write(t)&&e.pause(),this.#v.onResponseData?.(e,t)}onResponseEnd(e,t){this.#L?.end(),this.#v.onResponseEnd?.(e,t)}onResponseError(e,t){this.#L?.destroy(t),this.#L=void 0,this.#v.onResponseError?.(e,t)}}},6607:(e,t,A)=>{"use strict";const r=A(4589);e.exports=class{#H=!1;#Y;#v;#x;#V;constructor(e,t,A){if("function"!=typeof e)throw new TypeError("callback must be a function");this.#Y=e,this.#v=t,this.#V=A}onRequestStart(e,t){this.#H=!1,this.#x=t}onRequestUpgrade(e,t,A,r){this.#v.onRequestUpgrade?.(e,t,A,r)}onResponseStart(e,t,A,s){if(r(null!=this.#Y),this.#H=304===t||this.#V&&t>=500&&t<=504,this.#Y(this.#H,this.#x),this.#Y=null,this.#H)return!0;this.#v.onRequestStart?.(e,this.#x),this.#v.onResponseStart?.(e,t,A,s)}onResponseData(e,t){if(!this.#H)return this.#v.onResponseData?.(e,t)}onResponseEnd(e,t){this.#H||this.#v.onResponseEnd?.(e,t)}onResponseError(e,t){if(!this.#H){if(this.#Y&&(this.#Y(!1),this.#Y=null),"function"!=typeof this.#v.onResponseError)throw t;this.#v.onResponseError(e,t)}}}},6917:(e,t,A)=>{"use strict";const r=A(4589),s=A(832);e.exports=class{#v;#P=!1;#G=!1;#O=!1;constructor(e){if("object"!=typeof e||null===e)throw new TypeError("handler must be an object");this.#v=s.wrap(e)}onRequestStart(...e){this.#v.onRequestStart?.(...e)}onRequestUpgrade(...e){return r(!this.#P),r(!this.#G),this.#v.onRequestUpgrade?.(...e)}onResponseStart(...e){return r(!this.#P),r(!this.#G),r(!this.#O),this.#O=!0,this.#v.onResponseStart?.(...e)}onResponseData(...e){return r(!this.#P),r(!this.#G),this.#v.onResponseData?.(...e)}onResponseEnd(...e){return r(!this.#P),r(!this.#G),this.#P=!0,this.#v.onResponseEnd?.(...e)}onResponseError(...e){return this.#G=!0,this.#v.onResponseError?.(...e)}onBodySent(){}}},8064:(e,t,A)=>{"use strict";const r=A(2858),{kBodyUsed:s}=A(257),n=A(4589),{InvalidArgumentError:i}=A(4465),o=A(8474),a=[300,301,302,303,307,308],c=Symbol("body"),g=()=>{};class l{constructor(e){this[c]=e,this[s]=!1}async*[Symbol.asyncIterator](){n(!this[s],"disturbed"),this[s]=!0,yield*this[c]}}class h{static buildDispatch(e,t){if(null!=t&&(!Number.isInteger(t)||t<0))throw new i("maxRedirections must be a positive number");const A=e.dispatch.bind(e);return(e,r)=>A(e,new h(A,t,e,r))}constructor(e,t,A,a){if(null!=t&&(!Number.isInteger(t)||t<0))throw new i("maxRedirections must be a positive number");this.dispatch=e,this.location=null;const{maxRedirections:c,...g}=A;this.opts=g,this.maxRedirections=t,this.handler=a,this.history=[],r.isStream(this.opts.body)?(0===r.bodyLength(this.opts.body)&&this.opts.body.on("data",(function(){n(!1)})),"boolean"!=typeof this.opts.body.readableDidRead&&(this.opts.body[s]=!1,o.prototype.on.call(this.opts.body,"data",(function(){this[s]=!0})))):(this.opts.body&&"function"==typeof this.opts.body.pipeTo||this.opts.body&&"string"!=typeof this.opts.body&&!ArrayBuffer.isView(this.opts.body)&&r.isIterable(this.opts.body)&&!r.isFormDataLike(this.opts.body))&&(this.opts.body=new l(this.opts.body))}onRequestStart(e,t){this.handler.onRequestStart?.(e,{...t,history:this.history})}onRequestUpgrade(e,t,A,r){this.handler.onRequestUpgrade?.(e,t,A,r)}onResponseStart(e,t,A,s){if(this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections)throw new Error("max redirects");if(301!==t&&302!==t||"POST"!==this.opts.method||(this.opts.method="GET",r.isStream(this.opts.body)&&r.destroy(this.opts.body.on("error",g)),this.opts.body=null),303===t&&"HEAD"!==this.opts.method&&(this.opts.method="GET",r.isStream(this.opts.body)&&r.destroy(this.opts.body.on("error",g)),this.opts.body=null),this.location=this.history.length>=this.maxRedirections||r.isDisturbed(this.opts.body)||-1===a.indexOf(t)?null:A.location,this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return void this.handler.onResponseStart?.(e,t,A,s);const{origin:o,pathname:c,search:l}=r.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),h=l?`${c}${l}`:c,u=`${o}${h}`;for(const e of this.history)if(e.toString()===u)throw new i(`Redirect loop detected. Cannot redirect to ${o}. This typically happens when using a Client or Pool with cross-origin redirects. Use an Agent for cross-origin redirects.`);this.opts.headers=function(e,t,A){const r=[];if(Array.isArray(e))for(let s=0;s<e.length;s+=2)d(e[s],t,A)||r.push(e[s],e[s+1]);else if(e&&"object"==typeof e){const s="function"==typeof e[Symbol.iterator]?e:Object.entries(e);for(const[e,n]of s)d(e,t,A)||r.push(e,n)}else n(null==e,"headers must be an object or an array");return r}(this.opts.headers,303===t,this.opts.origin!==o),this.opts.path=h,this.opts.origin=o,this.opts.query=null}onResponseData(e,t){this.location||this.handler.onResponseData?.(e,t)}onResponseEnd(e,t){this.location?this.dispatch(this.opts,this):this.handler.onResponseEnd(e,t)}onResponseError(e,t){this.handler.onResponseError?.(e,t)}}function d(e,t,A){if(4===e.length)return"host"===r.headerNameToString(e);if(t&&r.headerNameToString(e).startsWith("content-"))return!0;if(A&&(13===e.length||6===e.length||19===e.length)){const t=r.headerNameToString(e);return"authorization"===t||"cookie"===t||"proxy-authorization"===t}return!1}e.exports=h},6294:(e,t,A)=>{"use strict";const r=A(4589),{kRetryHandlerDefaultRetry:s}=A(257),{RequestRetryError:n}=A(4465),i=A(832),{isDisturbed:o,parseRangeHeader:a,wrapRequestBody:c}=A(2858);class g{constructor(e,{dispatch:t,handler:A}){const{retryOptions:r,...n}=e,{retry:o,maxRetries:a,maxTimeout:l,minTimeout:h,timeoutFactor:d,methods:u,errorCodes:E,retryAfter:I,statusCodes:Q,throwOnError:B}=r??{};this.error=null,this.dispatch=t,this.handler=i.wrap(A),this.opts={...n,body:c(e.body)},this.retryOpts={throwOnError:B??!0,retry:o??g[s],retryAfter:I??!0,maxTimeout:l??3e4,minTimeout:h??500,timeoutFactor:d??2,maxRetries:a??5,methods:u??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:Q??[500,502,503,504,429],errorCodes:E??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET"]},this.retryCount=0,this.retryCountCheckpoint=0,this.headersSent=!1,this.start=0,this.end=null,this.etag=null}onResponseStartWithRetry(e,t,A,r,s){if(this.retryOpts.throwOnError)!1===this.retryOpts.statusCodes.includes(t)?(this.headersSent=!0,this.handler.onResponseStart?.(e,t,A,r)):this.error=s;else{if(o(this.opts.body))return this.headersSent=!0,void this.handler.onResponseStart?.(e,t,A,r);e.pause(),this.retryOpts.retry(s,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},function(n){if(n)return this.headersSent=!0,this.headersSent=!0,this.handler.onResponseStart?.(e,t,A,r),void e.resume();this.error=s,e.resume()}.bind(this))}}onRequestStart(e,t){this.headersSent||this.handler.onRequestStart?.(e,t)}onRequestUpgrade(e,t,A,r){this.handler.onRequestUpgrade?.(e,t,A,r)}static[s](e,{state:t,opts:A},r){const{statusCode:s,code:n,headers:i}=e,{method:o,retryOptions:a}=A,{maxRetries:c,minTimeout:g,maxTimeout:l,timeoutFactor:h,statusCodes:d,errorCodes:u,methods:E}=a,{counter:I}=t;if(n&&"UND_ERR_REQ_RETRY"!==n&&!u.includes(n))return void r(e);if(Array.isArray(E)&&!E.includes(o))return void r(e);if(null!=s&&Array.isArray(d)&&!d.includes(s))return void r(e);if(I>c)return void r(e);let Q=i?.["retry-after"];Q&&(Q=Number(Q),Q=Number.isNaN(Q)?function(e){const t=new Date(e).getTime();return isNaN(t)?0:t-Date.now()}(i["retry-after"]):1e3*Q);const B=Q>0?Math.min(Q,l):Math.min(g*h**(I-1),l);setTimeout((()=>r(null)),B)}onResponseStart(e,t,A,s){if(this.error=null,this.retryCount+=1,t>=300){const r=new n("Request failed",t,{headers:A,data:{count:this.retryCount}});this.onResponseStartWithRetry(e,t,A,s,r)}else{if(this.headersSent){if(206!==t&&(this.start>0||200!==t))throw new n("server does not support the range header and the payload was partially consumed",t,{headers:A,data:{count:this.retryCount}});const e=a(A["content-range"]);if(!e)throw new n("Content-Range mismatch",t,{headers:A,data:{count:this.retryCount}});if(null!=this.etag&&this.etag!==A.etag)throw new n("ETag mismatch",t,{headers:A,data:{count:this.retryCount}});const{start:s,size:i,end:o=(i?i-1:null)}=e;return r(this.start===s,"content-range mismatch"),void r(null==this.end||this.end===o,"content-range mismatch")}if(null!=this.end)throw new n("Request failed",t,{headers:A,data:{count:this.retryCount}});if(206===t){const n=a(A["content-range"]);if(null==n)return this.headersSent=!0,void this.handler.onResponseStart?.(e,t,A,s);const{start:i,size:o,end:c=(o?o-1:null)}=n;r(null!=i&&Number.isFinite(i),"content-range mismatch"),r(null!=c&&Number.isFinite(c),"invalid content-length"),this.start=i,this.end=c}if(null==this.end){const e=A["content-length"];this.end=null!=e?Number(e)-1:null}r(Number.isFinite(this.start)),r(null==this.end||Number.isFinite(this.end),"invalid content-length"),this.resume=!0,this.etag=null!=A.etag?A.etag:null,null!=this.etag&&"W"===this.etag[0]&&"/"===this.etag[1]&&(this.etag=null),this.headersSent=!0,this.handler.onResponseStart?.(e,t,A,s)}}onResponseData(e,t){this.error||(this.start+=t.length,this.handler.onResponseData?.(e,t))}onResponseEnd(e,t){if(this.error&&this.retryOpts.throwOnError)throw this.error;if(!this.error)return this.retryCount=0,this.handler.onResponseEnd?.(e,t);this.retry(e)}retry(e){if(0!==this.start){const e={range:`bytes=${this.start}-${this.end??""}`};null!=this.etag&&(e["if-match"]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...e}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(t){this.handler.onResponseError?.(e,t)}}onResponseError(e,t){e?.aborted||o(this.opts.body)?this.handler.onResponseError?.(e,t):(this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(t,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},function(t){t?this.handler?.onResponseError?.(e,t):this.retry(e)}.bind(this)))}}e.exports=g},4555:(e,t,A)=>{"use strict";const{parseHeaders:r}=A(2858),{InvalidArgumentError:s}=A(4465),n=Symbol("resume");class i{#J=!1;#W=null;#q=!1;#_;[n]=null;constructor(e){this.#_=e}pause(){this.#J=!0}resume(){this.#J&&(this.#J=!1,this[n]?.())}abort(e){this.#q||(this.#q=!0,this.#W=e,this.#_(e))}get aborted(){return this.#q}get reason(){return this.#W}get paused(){return this.#J}}e.exports=class e{#v;#X;constructor(e){this.#v=e}static unwrap(t){return t.onRequestStart?new e(t):t}onConnect(e,t){this.#X=new i(e),this.#v.onRequestStart?.(this.#X,t)}onUpgrade(e,t,A){this.#v.onRequestUpgrade?.(this.#X,e,r(t),A)}onHeaders(e,t,A,s){return this.#X[n]=A,this.#v.onResponseStart?.(this.#X,e,r(t),s),!this.#X.paused}onData(e){return this.#v.onResponseData?.(this.#X,e),!this.#X.paused}onComplete(e){this.#v.onResponseEnd?.(this.#X,r(e))}onError(e){if(!this.#v.onResponseError)throw new s("invalid onError method");this.#v.onResponseError?.(this.#X,e)}}},832:(e,t,A)=>{"use strict";const{InvalidArgumentError:r}=A(4465);e.exports=class e{#v;constructor(e){this.#v=e}static wrap(t){return t.onRequestStart?t:new e(t)}onConnect(e,t){return this.#v.onConnect?.(e,t)}onHeaders(e,t,A,r){return this.#v.onHeaders?.(e,t,A,r)}onUpgrade(e,t,A){return this.#v.onUpgrade?.(e,t,A)}onData(e){return this.#v.onData?.(e)}onComplete(e){return this.#v.onComplete?.(e)}onError(e){if(!this.#v.onError)throw e;return this.#v.onError?.(e)}onRequestStart(e,t){this.#v.onConnect?.((t=>e.abort(t)),t)}onRequestUpgrade(e,t,A,r){const s=[];for(const[e,t]of Object.entries(A))s.push(Buffer.from(e),Array.isArray(t)?t.map((e=>Buffer.from(e))):Buffer.from(t));this.#v.onUpgrade?.(t,s,r)}onResponseStart(e,t,A,r){const s=[];for(const[e,t]of Object.entries(A))s.push(Buffer.from(e),Array.isArray(t)?t.map((e=>Buffer.from(e))):Buffer.from(t));!1===this.#v.onHeaders?.(t,s,(()=>e.resume()),r)&&e.pause()}onResponseData(e,t){!1===this.#v.onData?.(t)&&e.pause()}onResponseEnd(e,t){const A=[];for(const[e,r]of Object.entries(t))A.push(Buffer.from(e),Array.isArray(r)?r.map((e=>Buffer.from(e))):Buffer.from(r));this.#v.onComplete?.(A)}onResponseError(e,t){if(!this.#v.onError)throw new r("invalid onError method");this.#v.onError?.(t)}}},5752:(e,t,A)=>{"use strict";const r=A(4589),{Readable:s}=A(7075),n=A(2858),i=A(8358),o=A(9903),a=A(6607),{assertCacheStore:c,assertCacheMethods:g,makeCacheKey:l,normalizeHeaders:h,parseCacheControlHeader:d}=A(9453),{AbortError:u}=A(4465);function E(e,t,A,i,o,a){const c=n.isStream(A.body)?A.body:s.from(A.body??[]);r(!c.destroyed,"stream should not be destroyed"),r(!c.readableDidRead,"stream should not be readableDidRead");const g={resume(){c.resume()},pause(){c.pause()},get paused(){return c.isPaused()},get aborted(){return c.destroyed},get reason(){return c.errored},abort(e){c.destroy(e??new u)}};if(c.on("error",(function(t){if(!this.readableEnded){if("function"!=typeof e.onResponseError)throw t;e.onResponseError(g,t)}})).on("close",(function(){this.errored||e.onResponseEnd?.(g,{})})),e.onRequestStart?.(g,o),c.destroyed)return;const l={...A.headers,age:String(i)};a&&(l.warning='110 - "response is stale"'),e.onResponseStart?.(g,A.statusCode,l,A.statusMessage),"HEAD"===t.method?c.destroy():c.on("data",(function(t){e.onResponseData?.(g,t)}))}function I(e,t,A,r,s,o,c){if(!c)return function(e,t,A,r,s,n){if(n?.["only-if-cached"]){let e=!1;try{if("function"==typeof r.onConnect&&(r.onConnect((()=>{e=!0})),e))return;if("function"==typeof r.onHeaders&&(r.onHeaders(504,[],(()=>{}),"Gateway Timeout"),e))return;"function"==typeof r.onComplete&&r.onComplete([])}catch(e){"function"==typeof r.onError&&r.onError(e)}return!0}return e(s,new i(t,A,r))}(e,t,A,r,s,o);const g=Date.now();if(g>c.deleteAt)return e(s,new i(t,A,r));const l=Math.round((g-c.cachedAt)/1e3);if(o?.["max-age"]&&l>=o["max-age"])return e(s,r);if(function(e,t){if(t?.["no-cache"])return!0;if(e.cacheControlDirectives?.["no-cache"]&&!Array.isArray(e.cacheControlDirectives["no-cache"]))return!0;const A=Date.now();if(A>e.staleAt)return!t?.["max-stale"]||A>e.staleAt+1e3*t["max-stale"];if(t?.["min-fresh"])return e.staleAt-A<=1e3*t["min-fresh"];return!1}(c,o)){if(n.isStream(s.body)&&0!==n.bodyLength(s.body))return e(s,new i(t,A,r));if(function(e){const t=e.cacheControlDirectives?.["stale-while-revalidate"];return!!t&&Date.now()<=e.staleAt+1e3*t}(c))return E(r,s,c,l,null,!0),queueMicrotask((()=>{let r={...s.headers,"if-modified-since":new Date(c.cachedAt).toUTCString()};c.etag&&(r["if-none-match"]=c.etag),c.vary&&(r={...r,...c.vary}),e({...s,headers:r},new i(t,A,{onRequestStart(){},onRequestUpgrade(){},onResponseStart(){},onResponseData(){},onResponseEnd(){},onResponseError(){}}))})),!0;let h=!1;const d=c.cacheControlDirectives["stale-if-error"]??o?.["stale-if-error"];d&&(h=g<c.staleAt+1e3*d);let u={...s.headers,"if-modified-since":new Date(c.cachedAt).toUTCString()};return c.etag&&(u["if-none-match"]=c.etag),c.vary&&(u={...u,...c.vary}),e({...s,headers:u},new a(((e,t)=>{e?E(r,s,c,l,t,!0):n.isStream(c.body)&&c.body.on("error",(()=>{})).destroy()}),new i(t,A,r),h))}n.isStream(s.body)&&s.body.on("error",(()=>{})).destroy(),E(r,s,c,l,null,!1)}e.exports=(e={})=>{const{store:t=new o,methods:A=["GET"],cacheByDefault:r,type:s="shared"}=e;if("object"!=typeof e||null===e)throw new TypeError("expected type of opts to be an Object, got "+(null===e?"null":typeof e));if(c(t,"opts.store"),g(A,"opts.methods"),"undefined"!=typeof r&&"number"!=typeof r)throw new TypeError("expected opts.cacheByDefault to be number or undefined, got "+typeof r);if("undefined"!=typeof s&&"shared"!==s&&"private"!==s)throw new TypeError("expected opts.type to be shared, private, or undefined, got "+typeof s);const i={store:t,methods:A,cacheByDefault:r,type:s},a=n.safeHTTPMethods.filter((e=>!1===A.includes(e)));return e=>(A,r)=>{if(!A.origin||a.includes(A.method))return e(A,r);A={...A,headers:h(A)};const s=A.headers?.["cache-control"]?d(A.headers["cache-control"]):void 0;if(s?.["no-store"])return e(A,r);const n=l(A),o=t.get(n);return o&&"function"==typeof o.then?o.then((t=>{I(e,i,n,r,A,s,t)})):I(e,i,n,r,A,s,o),!0}}},4951:(e,t,A)=>{"use strict";const{createInflate:r,createGunzip:s,createBrotliDecompress:n,createZstdDecompress:i}=A(8522),{pipeline:o}=A(7075),a=A(6917),c={gzip:s,"x-gzip":s,br:n,deflate:r,compress:r,"x-compress":r,...i?{zstd:i}:{}},g=[204,304];let l=!1;class h extends a{#Z=[];#z;#j;#$;constructor(e,{skipStatusCodes:t=g,skipErrorResponses:A=!0}={}){super(e),this.#j=t,this.#$=A}#K(e,t){return!e||t<200||(!!this.#j.includes(t)||!!(this.#$&&t>=400))}#ee(e){const t=e.split(","),A=[];for(let e=t.length-1;e>=0;e--){const r=t[e].trim();if(r){if(!c[r])return A.length=0,A;A.push(c[r]())}}return A}#te(e,t){e.on("readable",(()=>{let A;for(;null!==(A=e.read());){if(!1===super.onResponseData(t,A))break}})),e.on("error",(e=>{super.onResponseError(t,e)}))}#Ae(e){const t=this.#Z[0];this.#te(t,e),t.on("end",(()=>{super.onResponseEnd(e,{})}))}#re(e){const t=this.#Z[this.#Z.length-1];this.#te(t,e),this.#z=o(this.#Z,(t=>{t?super.onResponseError(e,t):super.onResponseEnd(e,{})}))}#se(){this.#Z.length=0,this.#z=null}onResponseStart(e,t,A,r){const s=A["content-encoding"];if(this.#K(s,t))return super.onResponseStart(e,t,A,r);const n=this.#ee(s.toLowerCase());if(0===n.length)return this.#se(),super.onResponseStart(e,t,A,r);this.#Z=n;const{"content-encoding":i,"content-length":o,...a}=A;1===this.#Z.length?this.#Ae(e):this.#re(e),super.onResponseStart(e,t,a,r)}onResponseData(e,t){this.#Z.length>0?this.#Z[0].write(t):super.onResponseData(e,t)}onResponseEnd(e,t){if(this.#Z.length>0)return this.#Z[0].end(),void this.#se();super.onResponseEnd(e,t)}onResponseError(e,t){if(this.#Z.length>0){for(const e of this.#Z)e.destroy(t);this.#se()}super.onResponseError(e,t)}}e.exports=function(e={}){return l||(process.emitWarning("DecompressInterceptor is experimental and subject to change","ExperimentalWarning"),l=!0),t=>(A,r)=>{const s=new h(r,e);return t(A,s)}}},6677:(e,t,A)=>{"use strict";const{isIP:r}=A(7030),{lookup:s}=A(610),n=A(6917),{InvalidArgumentError:i,InformationalError:o}=A(4465),a=Math.pow(2,31)-1;class c{#ne=0;#ie=0;#oe=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#ne=e.maxTTL,this.#ie=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#ae,this.pick=e.pick??this.#ce}get full(){return this.#oe.size===this.#ie}runLookup(e,t,A){const r=this.#oe.get(e.hostname);if(null==r&&this.full)return void A(null,e);const s={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...t.dns,maxTTL:this.#ne,maxItems:this.#ie};if(null==r)this.lookup(e,s,((t,r)=>{if(t||null==r||0===r.length)return void A(t??new o("No DNS entries found"));this.setRecords(e,r);const n=this.#oe.get(e.hostname),i=this.pick(e,n,s.affinity);let a;a="number"==typeof i.port?`:${i.port}`:""!==e.port?`:${e.port}`:"",A(null,new URL(`${e.protocol}//${6===i.family?`[${i.address}]`:i.address}${a}`))}));else{const n=this.pick(e,r,s.affinity);if(null==n)return this.#oe.delete(e.hostname),void this.runLookup(e,t,A);let i;i="number"==typeof n.port?`:${n.port}`:""!==e.port?`:${e.port}`:"",A(null,new URL(`${e.protocol}//${6===n.family?`[${n.address}]`:n.address}${i}`))}}#ae(e,t,A){s(e.hostname,{all:!0,family:!1===this.dualStack?this.affinity:0,order:"ipv4first"},((e,t)=>{if(e)return A(e);const r=new Map;for(const e of t)r.set(`${e.address}:${e.family}`,e);A(null,r.values())}))}#ce(e,t,A){let r=null;const{records:s,offset:n}=t;let i;if(this.dualStack?(null==A&&(null==n||n===a?(t.offset=0,A=4):(t.offset++,A=1&~t.offset?4:6)),i=null!=s[A]&&s[A].ips.length>0?s[A]:s[4===A?6:4]):i=s[A],null==i||0===i.ips.length)return r;null==i.offset||i.offset===a?i.offset=0:i.offset++;const o=i.offset%i.ips.length;return r=i.ips[o]??null,null==r?r:Date.now()-r.timestamp>r.ttl?(i.ips.splice(o,1),this.pick(e,t,A)):r}pickFamily(e,t){const A=this.#oe.get(e.hostname)?.records;if(!A)return null;const r=A[t];if(!r)return null;null==r.offset||r.offset===a?r.offset=0:r.offset++;const s=r.offset%r.ips.length,n=r.ips[s]??null;return null==n||Date.now()-n.timestamp>n.ttl&&r.ips.splice(s,1),n}setRecords(e,t){const A=Date.now(),r={records:{4:null,6:null}};for(const e of t){e.timestamp=A,"number"==typeof e.ttl?e.ttl=Math.min(e.ttl,this.#ne):e.ttl=this.#ne;const t=r.records[e.family]??{ips:[]};t.ips.push(e),r.records[e.family]=t}this.#oe.set(e.hostname,r)}deleteRecords(e){this.#oe.delete(e.hostname)}getHandler(e,t){return new g(this,e,t)}}class g extends n{#ge=null;#p=null;#le=null;#he=null;#X=null;#de=null;#ue=!0;constructor(e,{origin:t,handler:A,dispatch:r,newOrigin:s},n){super(A),this.#he=t,this.#de=s,this.#p={...n},this.#ge=e,this.#le=r}onResponseError(e,t){switch(t.code){case"ETIMEDOUT":case"ECONNREFUSED":if(this.#ge.dualStack){if(!this.#ue)return void super.onResponseError(e,t);this.#ue=!1;const A="["===this.#de.hostname[0]?4:6,r=this.#ge.pickFamily(this.#he,A);if(null==r)return void super.onResponseError(e,t);let s;s="number"==typeof r.port?`:${r.port}`:""!==this.#he.port?`:${this.#he.port}`:"";const n={...this.#p,origin:`${this.#he.protocol}//${6===r.family?`[${r.address}]`:r.address}${s}`};return void this.#le(n,this)}super.onResponseError(e,t);break;case"ENOTFOUND":this.#ge.deleteRecords(this.#he),super.onResponseError(e,t);break;default:super.onResponseError(e,t)}}}e.exports=e=>{if(null!=e?.maxTTL&&("number"!=typeof e?.maxTTL||e?.maxTTL<0))throw new i("Invalid maxTTL. Must be a positive number");if(null!=e?.maxItems&&("number"!=typeof e?.maxItems||e?.maxItems<1))throw new i("Invalid maxItems. Must be a positive number and greater than zero");if(null!=e?.affinity&&4!==e?.affinity&&6!==e?.affinity)throw new i("Invalid affinity. Must be either 4 or 6");if(null!=e?.dualStack&&"boolean"!=typeof e?.dualStack)throw new i("Invalid dualStack. Must be a boolean");if(null!=e?.lookup&&"function"!=typeof e?.lookup)throw new i("Invalid lookup. Must be a function");if(null!=e?.pick&&"function"!=typeof e?.pick)throw new i("Invalid pick. Must be a function");const t=e?.dualStack??!0;let A;A=t?e?.affinity??null:e?.affinity??4;const s=new c({maxTTL:e?.maxTTL??1e4,lookup:e?.lookup??null,pick:e?.pick??null,dualStack:t,affinity:A,maxItems:e?.maxItems??1/0});return e=>function(t,A){const n=t.origin.constructor===URL?t.origin:new URL(t.origin);return 0!==r(n.hostname)?e(t,A):(s.runLookup(n,t,((r,i)=>{if(r)return A.onResponseError(null,r);const o={...t,servername:n.hostname,origin:i.origin,headers:{host:n.host,...t.headers}};e(o,s.getHandler({origin:n,dispatch:e,handler:A,newOrigin:i},t))})),!0)}}},3562:(e,t,A)=>{"use strict";const{InvalidArgumentError:r,RequestAbortedError:s}=A(4465),n=A(6917);class i extends n{#t=1048576;#Ee=!1;#r=0;#X=null;aborted=!1;reason=!1;constructor({maxSize:e,signal:t},A){if(null!=e&&(!Number.isFinite(e)||e<1))throw new r("maxSize must be a number greater than 0");super(A),this.#t=e??this.#t}#_(e){this.aborted=!0,this.reason=e}onRequestStart(e,t){return e.abort=this.#_.bind(this),this.#X=e,super.onRequestStart(e,t)}onResponseStart(e,t,A,r){const n=A["content-length"];if(null!=n&&n>this.#t)throw new s(`Response size (${n}) larger than maxSize (${this.#t})`);return!0===this.aborted||super.onResponseStart(e,t,A,r)}onResponseError(e,t){this.#Ee||(t=this.#X?.reason??t,super.onResponseError(e,t))}onResponseData(e,t){return this.#r=this.#r+t.length,this.#r>=this.#t&&(this.#Ee=!0,!0===this.aborted?super.onResponseError(e,this.reason):super.onResponseEnd(e,{})),!0}onResponseEnd(e,t){this.#Ee||(!0!==this.#X.aborted?super.onResponseEnd(e,t):super.onResponseError(e,this.reason))}}e.exports=function({maxSize:e}={maxSize:1048576}){return t=>function(A,r){const{dumpMaxSize:s=e}=A,n=new i({maxSize:s,signal:A.signal},r);return t(A,n)}}},5132:(e,t,A)=>{"use strict";const r=A(8064);e.exports=function({maxRedirections:e}={}){return t=>function(A,s){const{maxRedirections:n=e,...i}=A;if(null==n||0===n)return t(A,s);const o={...i},a=new r(t,n,o,s);return t(o,a)}}},2936:(e,t,A)=>{"use strict";const r=A(6917),{ResponseError:s}=A(4465);class n extends r{#Ie;#Qe;#Be;#Ce;#pe;constructor(e,{handler:t}){super(t)}#fe(e){return 0===(this.#Qe??"").indexOf(e)}onRequestStart(e,t){return this.#Ie=0,this.#Qe=null,this.#Be=null,this.#Ce=null,this.#pe="",super.onRequestStart(e,t)}onResponseStart(e,t,A,r){if(this.#Ie=t,this.#Ce=A,this.#Qe=A["content-type"],this.#Ie<400)return super.onResponseStart(e,t,A,r);(this.#fe("application/json")||this.#fe("text/plain"))&&(this.#Be=new TextDecoder("utf-8"))}onResponseData(e,t){if(this.#Ie<400)return super.onResponseData(e,t);this.#pe+=this.#Be?.decode(t,{stream:!0})??""}onResponseEnd(e,t){if(this.#Ie>=400){if(this.#pe+=this.#Be?.decode(void 0,{stream:!1})??"",this.#fe("application/json"))try{this.#pe=JSON.parse(this.#pe)}catch{}let t;const A=Error.stackTraceLimit;Error.stackTraceLimit=0;try{t=new s("Response Error",this.#Ie,{body:this.#pe,headers:this.#Ce})}finally{Error.stackTraceLimit=A}super.onResponseError(e,t)}else super.onResponseEnd(e,t)}onResponseError(e,t){super.onResponseError(e,t)}}e.exports=()=>e=>function(t,A){return e(t,new n(t,{handler:A}))}},532:(e,t,A)=>{"use strict";const r=A(6294);e.exports=e=>t=>function(A,s){return t(A,new r({...A,retryOptions:{...e,...A.retryOptions}},{handler:s,dispatch:t}))}},4178:(e,t,A)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SPECIAL_HEADERS=t.MINOR=t.MAJOR=t.HTAB_SP_VCHAR_OBS_TEXT=t.QUOTED_STRING=t.CONNECTION_TOKEN_CHARS=t.HEADER_CHARS=t.TOKEN=t.HEX=t.URL_CHAR=t.USERINFO_CHARS=t.MARK=t.ALPHANUM=t.NUM=t.HEX_MAP=t.NUM_MAP=t.ALPHA=t.STATUSES_HTTP=t.H_METHOD_MAP=t.METHOD_MAP=t.METHODS_RTSP=t.METHODS_ICE=t.METHODS_HTTP=t.HEADER_STATE=t.FINISH=t.STATUSES=t.METHODS=t.LENIENT_FLAGS=t.FLAGS=t.TYPE=t.ERROR=void 0;const r=A(3530);t.ERROR={OK:0,INTERNAL:1,STRICT:2,CR_EXPECTED:25,LF_EXPECTED:3,UNEXPECTED_CONTENT_LENGTH:4,UNEXPECTED_SPACE:30,CLOSED_CONNECTION:5,INVALID_METHOD:6,INVALID_URL:7,INVALID_CONSTANT:8,INVALID_VERSION:9,INVALID_HEADER_TOKEN:10,INVALID_CONTENT_LENGTH:11,INVALID_CHUNK_SIZE:12,INVALID_STATUS:13,INVALID_EOF_STATE:14,INVALID_TRANSFER_ENCODING:15,CB_MESSAGE_BEGIN:16,CB_HEADERS_COMPLETE:17,CB_MESSAGE_COMPLETE:18,CB_CHUNK_HEADER:19,CB_CHUNK_COMPLETE:20,PAUSED:21,PAUSED_UPGRADE:22,PAUSED_H2_UPGRADE:23,USER:24,CB_URL_COMPLETE:26,CB_STATUS_COMPLETE:27,CB_METHOD_COMPLETE:32,CB_VERSION_COMPLETE:33,CB_HEADER_FIELD_COMPLETE:28,CB_HEADER_VALUE_COMPLETE:29,CB_CHUNK_EXTENSION_NAME_COMPLETE:34,CB_CHUNK_EXTENSION_VALUE_COMPLETE:35,CB_RESET:31,CB_PROTOCOL_COMPLETE:38},t.TYPE={BOTH:0,REQUEST:1,RESPONSE:2},t.FLAGS={CONNECTION_KEEP_ALIVE:1,CONNECTION_CLOSE:2,CONNECTION_UPGRADE:4,CHUNKED:8,UPGRADE:16,CONTENT_LENGTH:32,SKIPBODY:64,TRAILING:128,TRANSFER_ENCODING:512},t.LENIENT_FLAGS={HEADERS:1,CHUNKED_LENGTH:2,KEEP_ALIVE:4,TRANSFER_ENCODING:8,VERSION:16,DATA_AFTER_CLOSE:32,OPTIONAL_LF_AFTER_CR:64,OPTIONAL_CRLF_AFTER_CHUNK:128,OPTIONAL_CR_BEFORE_LF:256,SPACES_AFTER_CHUNK_SIZE:512},t.METHODS={DELETE:0,GET:1,HEAD:2,POST:3,PUT:4,CONNECT:5,OPTIONS:6,TRACE:7,COPY:8,LOCK:9,MKCOL:10,MOVE:11,PROPFIND:12,PROPPATCH:13,SEARCH:14,UNLOCK:15,BIND:16,REBIND:17,UNBIND:18,ACL:19,REPORT:20,MKACTIVITY:21,CHECKOUT:22,MERGE:23,"M-SEARCH":24,NOTIFY:25,SUBSCRIBE:26,UNSUBSCRIBE:27,PATCH:28,PURGE:29,MKCALENDAR:30,LINK:31,UNLINK:32,SOURCE:33,PRI:34,DESCRIBE:35,ANNOUNCE:36,SETUP:37,PLAY:38,PAUSE:39,TEARDOWN:40,GET_PARAMETER:41,SET_PARAMETER:42,REDIRECT:43,RECORD:44,FLUSH:45,QUERY:46},t.STATUSES={CONTINUE:100,SWITCHING_PROTOCOLS:101,PROCESSING:102,EARLY_HINTS:103,RESPONSE_IS_STALE:110,REVALIDATION_FAILED:111,DISCONNECTED_OPERATION:112,HEURISTIC_EXPIRATION:113,MISCELLANEOUS_WARNING:199,OK:200,CREATED:201,ACCEPTED:202,NON_AUTHORITATIVE_INFORMATION:203,NO_CONTENT:204,RESET_CONTENT:205,PARTIAL_CONTENT:206,MULTI_STATUS:207,ALREADY_REPORTED:208,TRANSFORMATION_APPLIED:214,IM_USED:226,MISCELLANEOUS_PERSISTENT_WARNING:299,MULTIPLE_CHOICES:300,MOVED_PERMANENTLY:301,FOUND:302,SEE_OTHER:303,NOT_MODIFIED:304,USE_PROXY:305,SWITCH_PROXY:306,TEMPORARY_REDIRECT:307,PERMANENT_REDIRECT:308,BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,NOT_ACCEPTABLE:406,PROXY_AUTHENTICATION_REQUIRED:407,REQUEST_TIMEOUT:408,CONFLICT:409,GONE:410,LENGTH_REQUIRED:411,PRECONDITION_FAILED:412,PAYLOAD_TOO_LARGE:413,URI_TOO_LONG:414,UNSUPPORTED_MEDIA_TYPE:415,RANGE_NOT_SATISFIABLE:416,EXPECTATION_FAILED:417,IM_A_TEAPOT:418,PAGE_EXPIRED:419,ENHANCE_YOUR_CALM:420,MISDIRECTED_REQUEST:421,UNPROCESSABLE_ENTITY:422,LOCKED:423,FAILED_DEPENDENCY:424,TOO_EARLY:425,UPGRADE_REQUIRED:426,PRECONDITION_REQUIRED:428,TOO_MANY_REQUESTS:429,REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL:430,REQUEST_HEADER_FIELDS_TOO_LARGE:431,LOGIN_TIMEOUT:440,NO_RESPONSE:444,RETRY_WITH:449,BLOCKED_BY_PARENTAL_CONTROL:450,UNAVAILABLE_FOR_LEGAL_REASONS:451,CLIENT_CLOSED_LOAD_BALANCED_REQUEST:460,INVALID_X_FORWARDED_FOR:463,REQUEST_HEADER_TOO_LARGE:494,SSL_CERTIFICATE_ERROR:495,SSL_CERTIFICATE_REQUIRED:496,HTTP_REQUEST_SENT_TO_HTTPS_PORT:497,INVALID_TOKEN:498,CLIENT_CLOSED_REQUEST:499,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,VARIANT_ALSO_NEGOTIATES:506,INSUFFICIENT_STORAGE:507,LOOP_DETECTED:508,BANDWIDTH_LIMIT_EXCEEDED:509,NOT_EXTENDED:510,NETWORK_AUTHENTICATION_REQUIRED:511,WEB_SERVER_UNKNOWN_ERROR:520,WEB_SERVER_IS_DOWN:521,CONNECTION_TIMEOUT:522,ORIGIN_IS_UNREACHABLE:523,TIMEOUT_OCCURED:524,SSL_HANDSHAKE_FAILED:525,INVALID_SSL_CERTIFICATE:526,RAILGUN_ERROR:527,SITE_IS_OVERLOADED:529,SITE_IS_FROZEN:530,IDENTITY_PROVIDER_AUTHENTICATION_ERROR:561,NETWORK_READ_TIMEOUT:598,NETWORK_CONNECT_TIMEOUT:599},t.FINISH={SAFE:0,SAFE_WITH_CB:1,UNSAFE:2},t.HEADER_STATE={GENERAL:0,CONNECTION:1,CONTENT_LENGTH:2,TRANSFER_ENCODING:3,UPGRADE:4,CONNECTION_KEEP_ALIVE:5,CONNECTION_CLOSE:6,CONNECTION_UPGRADE:7,TRANSFER_ENCODING_CHUNKED:8},t.METHODS_HTTP=[t.METHODS.DELETE,t.METHODS.GET,t.METHODS.HEAD,t.METHODS.POST,t.METHODS.PUT,t.METHODS.CONNECT,t.METHODS.OPTIONS,t.METHODS.TRACE,t.METHODS.COPY,t.METHODS.LOCK,t.METHODS.MKCOL,t.METHODS.MOVE,t.METHODS.PROPFIND,t.METHODS.PROPPATCH,t.METHODS.SEARCH,t.METHODS.UNLOCK,t.METHODS.BIND,t.METHODS.REBIND,t.METHODS.UNBIND,t.METHODS.ACL,t.METHODS.REPORT,t.METHODS.MKACTIVITY,t.METHODS.CHECKOUT,t.METHODS.MERGE,t.METHODS["M-SEARCH"],t.METHODS.NOTIFY,t.METHODS.SUBSCRIBE,t.METHODS.UNSUBSCRIBE,t.METHODS.PATCH,t.METHODS.PURGE,t.METHODS.MKCALENDAR,t.METHODS.LINK,t.METHODS.UNLINK,t.METHODS.PRI,t.METHODS.SOURCE,t.METHODS.QUERY],t.METHODS_ICE=[t.METHODS.SOURCE],t.METHODS_RTSP=[t.METHODS.OPTIONS,t.METHODS.DESCRIBE,t.METHODS.ANNOUNCE,t.METHODS.SETUP,t.METHODS.PLAY,t.METHODS.PAUSE,t.METHODS.TEARDOWN,t.METHODS.GET_PARAMETER,t.METHODS.SET_PARAMETER,t.METHODS.REDIRECT,t.METHODS.RECORD,t.METHODS.FLUSH,t.METHODS.GET,t.METHODS.POST],t.METHOD_MAP=(0,r.enumToMap)(t.METHODS),t.H_METHOD_MAP=Object.fromEntries(Object.entries(t.METHODS).filter((([e])=>e.startsWith("H")))),t.STATUSES_HTTP=[t.STATUSES.CONTINUE,t.STATUSES.SWITCHING_PROTOCOLS,t.STATUSES.PROCESSING,t.STATUSES.EARLY_HINTS,t.STATUSES.RESPONSE_IS_STALE,t.STATUSES.REVALIDATION_FAILED,t.STATUSES.DISCONNECTED_OPERATION,t.STATUSES.HEURISTIC_EXPIRATION,t.STATUSES.MISCELLANEOUS_WARNING,t.STATUSES.OK,t.STATUSES.CREATED,t.STATUSES.ACCEPTED,t.STATUSES.NON_AUTHORITATIVE_INFORMATION,t.STATUSES.NO_CONTENT,t.STATUSES.RESET_CONTENT,t.STATUSES.PARTIAL_CONTENT,t.STATUSES.MULTI_STATUS,t.STATUSES.ALREADY_REPORTED,t.STATUSES.TRANSFORMATION_APPLIED,t.STATUSES.IM_USED,t.STATUSES.MISCELLANEOUS_PERSISTENT_WARNING,t.STATUSES.MULTIPLE_CHOICES,t.STATUSES.MOVED_PERMANENTLY,t.STATUSES.FOUND,t.STATUSES.SEE_OTHER,t.STATUSES.NOT_MODIFIED,t.STATUSES.USE_PROXY,t.STATUSES.SWITCH_PROXY,t.STATUSES.TEMPORARY_REDIRECT,t.STATUSES.PERMANENT_REDIRECT,t.STATUSES.BAD_REQUEST,t.STATUSES.UNAUTHORIZED,t.STATUSES.PAYMENT_REQUIRED,t.STATUSES.FORBIDDEN,t.STATUSES.NOT_FOUND,t.STATUSES.METHOD_NOT_ALLOWED,t.STATUSES.NOT_ACCEPTABLE,t.STATUSES.PROXY_AUTHENTICATION_REQUIRED,t.STATUSES.REQUEST_TIMEOUT,t.STATUSES.CONFLICT,t.STATUSES.GONE,t.STATUSES.LENGTH_REQUIRED,t.STATUSES.PRECONDITION_FAILED,t.STATUSES.PAYLOAD_TOO_LARGE,t.STATUSES.URI_TOO_LONG,t.STATUSES.UNSUPPORTED_MEDIA_TYPE,t.STATUSES.RANGE_NOT_SATISFIABLE,t.STATUSES.EXPECTATION_FAILED,t.STATUSES.IM_A_TEAPOT,t.STATUSES.PAGE_EXPIRED,t.STATUSES.ENHANCE_YOUR_CALM,t.STATUSES.MISDIRECTED_REQUEST,t.STATUSES.UNPROCESSABLE_ENTITY,t.STATUSES.LOCKED,t.STATUSES.FAILED_DEPENDENCY,t.STATUSES.TOO_EARLY,t.STATUSES.UPGRADE_REQUIRED,t.STATUSES.PRECONDITION_REQUIRED,t.STATUSES.TOO_MANY_REQUESTS,t.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL,t.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE,t.STATUSES.LOGIN_TIMEOUT,t.STATUSES.NO_RESPONSE,t.STATUSES.RETRY_WITH,t.STATUSES.BLOCKED_BY_PARENTAL_CONTROL,t.STATUSES.UNAVAILABLE_FOR_LEGAL_REASONS,t.STATUSES.CLIENT_CLOSED_LOAD_BALANCED_REQUEST,t.STATUSES.INVALID_X_FORWARDED_FOR,t.STATUSES.REQUEST_HEADER_TOO_LARGE,t.STATUSES.SSL_CERTIFICATE_ERROR,t.STATUSES.SSL_CERTIFICATE_REQUIRED,t.STATUSES.HTTP_REQUEST_SENT_TO_HTTPS_PORT,t.STATUSES.INVALID_TOKEN,t.STATUSES.CLIENT_CLOSED_REQUEST,t.STATUSES.INTERNAL_SERVER_ERROR,t.STATUSES.NOT_IMPLEMENTED,t.STATUSES.BAD_GATEWAY,t.STATUSES.SERVICE_UNAVAILABLE,t.STATUSES.GATEWAY_TIMEOUT,t.STATUSES.HTTP_VERSION_NOT_SUPPORTED,t.STATUSES.VARIANT_ALSO_NEGOTIATES,t.STATUSES.INSUFFICIENT_STORAGE,t.STATUSES.LOOP_DETECTED,t.STATUSES.BANDWIDTH_LIMIT_EXCEEDED,t.STATUSES.NOT_EXTENDED,t.STATUSES.NETWORK_AUTHENTICATION_REQUIRED,t.STATUSES.WEB_SERVER_UNKNOWN_ERROR,t.STATUSES.WEB_SERVER_IS_DOWN,t.STATUSES.CONNECTION_TIMEOUT,t.STATUSES.ORIGIN_IS_UNREACHABLE,t.STATUSES.TIMEOUT_OCCURED,t.STATUSES.SSL_HANDSHAKE_FAILED,t.STATUSES.INVALID_SSL_CERTIFICATE,t.STATUSES.RAILGUN_ERROR,t.STATUSES.SITE_IS_OVERLOADED,t.STATUSES.SITE_IS_FROZEN,t.STATUSES.IDENTITY_PROVIDER_AUTHENTICATION_ERROR,t.STATUSES.NETWORK_READ_TIMEOUT,t.STATUSES.NETWORK_CONNECT_TIMEOUT],t.ALPHA=[];for(let e="A".charCodeAt(0);e<="Z".charCodeAt(0);e++)t.ALPHA.push(String.fromCharCode(e)),t.ALPHA.push(String.fromCharCode(e+32));t.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},t.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},t.NUM=["0","1","2","3","4","5","6","7","8","9"],t.ALPHANUM=t.ALPHA.concat(t.NUM),t.MARK=["-","_",".","!","~","*","'","(",")"],t.USERINFO_CHARS=t.ALPHANUM.concat(t.MARK).concat(["%",";",":","&","=","+","$",","]),t.URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(t.ALPHANUM),t.HEX=t.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]),t.TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(t.ALPHANUM),t.HEADER_CHARS=["\t"];for(let e=32;e<=255;e++)127!==e&&t.HEADER_CHARS.push(e);t.CONNECTION_TOKEN_CHARS=t.HEADER_CHARS.filter((e=>44!==e)),t.QUOTED_STRING=["\t"," "];for(let e=33;e<=255;e++)34!==e&&92!==e&&t.QUOTED_STRING.push(e);t.HTAB_SP_VCHAR_OBS_TEXT=["\t"," "];for(let e=33;e<=126;e++)t.HTAB_SP_VCHAR_OBS_TEXT.push(e);for(let e=128;e<=255;e++)t.HTAB_SP_VCHAR_OBS_TEXT.push(e);t.MAJOR=t.NUM_MAP,t.MINOR=t.MAJOR,t.SPECIAL_HEADERS={connection:t.HEADER_STATE.CONNECTION,"content-length":t.HEADER_STATE.CONTENT_LENGTH,"proxy-connection":t.HEADER_STATE.CONNECTION,"transfer-encoding":t.HEADER_STATE.TRANSFER_ENCODING,upgrade:t.HEADER_STATE.UPGRADE},t.default={ERROR:t.ERROR,TYPE:t.TYPE,FLAGS:t.FLAGS,LENIENT_FLAGS:t.LENIENT_FLAGS,METHODS:t.METHODS,STATUSES:t.STATUSES,FINISH:t.FINISH,HEADER_STATE:t.HEADER_STATE,ALPHA:t.ALPHA,NUM_MAP:t.NUM_MAP,HEX_MAP:t.HEX_MAP,NUM:t.NUM,ALPHANUM:t.ALPHANUM,MARK:t.MARK,USERINFO_CHARS:t.USERINFO_CHARS,URL_CHAR:t.URL_CHAR,HEX:t.HEX,TOKEN:t.TOKEN,HEADER_CHARS:t.HEADER_CHARS,CONNECTION_TOKEN_CHARS:t.CONNECTION_TOKEN_CHARS,QUOTED_STRING:t.QUOTED_STRING,HTAB_SP_VCHAR_OBS_TEXT:t.HTAB_SP_VCHAR_OBS_TEXT,MAJOR:t.MAJOR,MINOR:t.MINOR,SPECIAL_HEADERS:t.SPECIAL_HEADERS,METHODS_HTTP:t.METHODS_HTTP,METHODS_ICE:t.METHODS_ICE,METHODS_RTSP:t.METHODS_RTSP,METHOD_MAP:t.METHOD_MAP,H_METHOD_MAP:t.H_METHOD_MAP,STATUSES_HTTP:t.STATUSES_HTTP}},4744:(e,t,A)=>{"use strict";e=A.nmd(e);const{Buffer:r}=A(4573);let s;Object.defineProperty(e,"exports",{get:()=>s||(s=r.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgL5YUCAgd/A34gASACaiEEAkAgACIDKAIMIgANACADKAIEBEAgAyABNgIECyMAQRBrIgkkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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C0HjAQwHC0HXAQwGC0HYAQwFC0HZAQwEC0HaAQwDC0HbAQwCC0HdAQwBC0HcAQshAgNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAg7jAQABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEjJCUnKCmeA5sDmgORA4oDgwOAA/0C+wL4AvIC8QLvAu0C6ALnAuYC5QLkAtwC2wLaAtkC2ALXAtYC1QLPAs4CzALLAsoCyQLIAscCxgLEAsMCvgK8AroCuQK4ArcCtgK1ArQCswKyArECsAKuAq0CqQKoAqcCpgKlAqQCowKiAqECoAKfApgCkAKMAosCigKBAv4B/QH8AfsB+gH5AfgB9wH1AfMB8AHrAekB6AHnAeYB5QHkAeMB4gHhAeAB3wHeAd0B3AHaAdkB2AHXAdYB1QHUAdMB0gHRAdABzwHOAc0BzAHLAcoByQHIAccBxgHFAcQBwwHCAcEBwAG/Ab4BvQG8AbsBugG5AbgBtwG2AbUBtAGzAbIBsQGwAa8BrgGtAawBqwGqAakBqAGnAaYBpQGkAaMBogGfAZ4BmQGYAZcBlgGVAZQBkwGSAZEBkAGPAY0BjAGHAYYBhQGEAYMBggF9fHt6eXZ1dFBRUlNUVQsgASAERw1yQf0BIQIMvgMLIAEgBEcNmAFB2wEhAgy9AwsgASAERw3xAUGOASECDLwDCyABIARHDfwBQYQBIQIMuwMLIAEgBEcNigJB/wAhAgy6AwsgASAERw2RAkH9ACECDLkDCyABIARHDZQCQfsAIQIMuAMLIAEgBEcNHkEeIQIMtwMLIAEgBEcNGUEYIQIMtgMLIAEgBEcNygJBzQAhAgy1AwsgASAERw3VAkHGACECDLQDCyABIARHDdYCQcMAIQIMswMLIAEgBEcN3AJBOCECDLIDCyADLQAwQQFGDa0DDIkDC0EAIQACQAJAAkAgAy0AKkUNACADLQArRQ0AIAMvATIiAkECcUUNAQwCCyADLwEyIgJBAXFFDQELQQEhACADLQAoQQFGDQAgAy8BNCIGQeQAa0HkAEkNACAGQcwBRg0AIAZBsAJGDQAgAkHAAHENAEEAIQAgAkGIBHFBgARGDQAgAkEocUEARyEACyADQQA7ATIgA0EAOgAxAkAgAEUEQCADQQA6ADEgAy0ALkEEcQ0BDLEDCyADQgA3AyALIANBADoAMSADQQE6ADYMSAtBACEAAkAgAygCOCICRQ0AIAIoAjAiAkUNACADIAIRAAAhAAsgAEUNSCAAQRVHDWIgA0EENgIcIAMgATYCFCADQdIbNgIQIANBFTYCDEEAIQIMrwMLIAEgBEYEQEEGIQIMrwMLIAEtAABBCkcNGSABQQFqIQEMGgsgA0IANwMgQRIhAgyUAwsgASAERw2KA0EjIQIMrAMLIAEgBEYEQEEHIQIMrAMLAkACQCABLQAAQQprDgQBGBgAGAsgAUEBaiEBQRAhAgyTAwsgAUEBaiEBIANBL2otAABBAXENF0EAIQIgA0EANgIcIAMgATYCFCADQZkgNgIQIANBGTYCDAyrAwsgAyADKQMgIgwgBCABa60iCn0iC0IAIAsgDFgbNwMgIAogDFoNGEEIIQIMqgMLIAEgBEcEQCADQQk2AgggAyABNgIEQRQhAgyRAwtBCSECDKkDCyADKQMgUA2uAgxDCyABIARGBEBBCyECDKgDCyABLQAAQQpHDRYgAUEBaiEBDBcLIANBL2otAABBAXFFDRkMJgtBACEAAkAgAygCOCICRQ0AIAIoAlAiAkUNACADIAIRAAAhAAsgAA0ZDEILQQAhAAJAIAMoAjgiAkUNACACKAJQIgJFDQAgAyACEQAAIQALIAANGgwkC0EAIQACQCADKAI4IgJFDQAgAigCUCICRQ0AIAMgAhEAACEACyAADRsMMgsgA0Evai0AAEEBcUUNHAwiC0EAIQACQCADKAI4IgJFDQAgAigCVCICRQ0AIAMgAhEAACEACyAADRwMQgtBACEAAkAgAygCOCICRQ0AIAIoAlQiAkUNACADIAIRAAAhAAsgAA0dDCALIAEgBEYEQEETIQIMoAMLAkAgAS0AACIAQQprDgQfIyMAIgsgAUEBaiEBDB8LQQAhAAJAIAMoAjgiAkUNACACKAJUIgJFDQAgAyACEQAAIQALIAANIgxCCyABIARGBEBBFiECDJ4DCyABLQAAQcDBAGotAABBAUcNIwyDAwsCQANAIAEtAABBsDtqLQAAIgBBAUcEQAJAIABBAmsOAgMAJwsgAUEBaiEBQSEhAgyGAwsgBCABQQFqIgFHDQALQRghAgydAwsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAFBAWoiARA0IgANIQxBC0EAIQACQCADKAI4IgJFDQAgAigCVCICRQ0AIAMgAhEAACEACyAADSMMKgsgASAERgRAQRwhAgybAwsgA0EKNgIIIAMgATYCBEEAIQACQCADKAI4IgJFDQAgAigCUCICRQ0AIAMgAhEAACEACyAADSVBJCECDIEDCyABIARHBEADQCABLQAAQbA9ai0AACIAQQNHBEAgAEEBaw4FGBomggMlJgsgBCABQQFqIgFHDQALQRshAgyaAwtBGyECDJkDCwNAIAEtAABBsD9qLQAAIgBBA0cEQCAAQQFrDgUPEScTJicLIAQgAUEBaiIBRw0AC0EeIQIMmAMLIAEgBEcEQCADQQs2AgggAyABNgIEQQchAgz/AgtBHyECDJcDCyABIARGBEBBICECDJcDCwJAIAEtAABBDWsOFC4/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8APwtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQMlgMLIANBL2ohAgNAIAEgBEYEQEEhIQIMlwMLAkACQAJAIAEtAAAiAEEJaw4YAgApKQEpKSkpKSkpKSkpKSkpKSkpKSkCJwsgAUEBaiEBIANBL2otAABBAXFFDQoMGAsgAUEBaiEBDBcLIAFBAWohASACLQAAQQJxDQALQQAhAiADQQA2AhwgAyABNgIUIANBnxU2AhAgA0EMNgIMDJUDCyADLQAuQYABcUUNAQtBACEAAkAgAygCOCICRQ0AIAIoAlwiAkUNACADIAIRAAAhAAsgAEUN5gIgAEEVRgRAIANBJDYCHCADIAE2AhQgA0GbGzYCECADQRU2AgxBACECDJQDC0EAIQIgA0EANgIcIAMgATYCFCADQZAONgIQIANBFDYCDAyTAwtBACECIANBADYCHCADIAE2AhQgA0G+IDYCECADQQI2AgwMkgMLIAMoAgQhAEEAIQIgA0EANgIEIAMgACABIAynaiIBEDIiAEUNKyADQQc2AhwgAyABNgIUIAMgADYCDAyRAwsgAy0ALkHAAHFFDQELQQAhAAJAIAMoAjgiAkUNACACKAJYIgJFDQAgAyACEQAAIQALIABFDSsgAEEVRgRAIANBCjYCHCADIAE2AhQgA0HrGTYCECADQRU2AgxBACECDJADC0EAIQIgA0EANgIcIAMgATYCFCADQZMMNgIQIANBEzYCDAyPAwtBACECIANBADYCHCADIAE2AhQgA0GCFTYCECADQQI2AgwMjgMLQQAhAiADQQA2AhwgAyABNgIUIANB3RQ2AhAgA0EZNgIMDI0DC0EAIQIgA0EANgIcIAMgATYCFCADQeYdNgIQIANBGTYCDAyMAwsgAEEVRg09QQAhAiADQQA2AhwgAyABNgIUIANB0A82AhAgA0EiNgIMDIsDCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFDSggA0ENNgIcIAMgATYCFCADIAA2AgwMigMLIABBFUYNOkEAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAyJAwsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQMyIARQRAIAFBAWohAQwoCyADQQ42AhwgAyAANgIMIAMgAUEBajYCFAyIAwsgAEEVRg03QQAhAiADQQA2AhwgAyABNgIUIANB0A82AhAgA0EiNgIMDIcDCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDCcLIANBDzYCHCADIAA2AgwgAyABQQFqNgIUDIYDC0EAIQIgA0EANgIcIAMgATYCFCADQeIXNgIQIANBGTYCDAyFAwsgAEEVRg0zQQAhAiADQQA2AhwgAyABNgIUIANB1gw2AhAgA0EjNgIMDIQDCyADKAIEIQBBACECIANBADYCBCADIAAgARA0IgBFDSUgA0ERNgIcIAMgATYCFCADIAA2AgwMgwMLIABBFUYNMEEAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAyCAwsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwlCyADQRI2AhwgAyAANgIMIAMgAUEBajYCFAyBAwsgA0Evai0AAEEBcUUNAQtBFyECDOYCC0EAIQIgA0EANgIcIAMgATYCFCADQeIXNgIQIANBGTYCDAz+AgsgAEE7Rw0AIAFBAWohAQwMC0EAIQIgA0EANgIcIAMgATYCFCADQZIYNgIQIANBAjYCDAz8AgsgAEEVRg0oQQAhAiADQQA2AhwgAyABNgIUIANB1gw2AhAgA0EjNgIMDPsCCyADQRQ2AhwgAyABNgIUIAMgADYCDAz6AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQz1AgsgA0EVNgIcIAMgADYCDCADIAFBAWo2AhQM+QILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDQiAEUEQCABQQFqIQEM8wILIANBFzYCHCADIAA2AgwgAyABQQFqNgIUDPgCCyAAQRVGDSNBACECIANBADYCHCADIAE2AhQgA0HWDDYCECADQSM2AgwM9wILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDQiAEUEQCABQQFqIQEMHQsgA0EZNgIcIAMgADYCDCADIAFBAWo2AhQM9gILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDQiAEUEQCABQQFqIQEM7wILIANBGjYCHCADIAA2AgwgAyABQQFqNgIUDPUCCyAAQRVGDR9BACECIANBADYCHCADIAE2AhQgA0HQDzYCECADQSI2AgwM9AILIAMoAgQhACADQQA2AgQgAyAAIAEQMyIARQRAIAFBAWohAQwbCyADQRw2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8wILIAMoAgQhACADQQA2AgQgAyAAIAEQMyIARQRAIAFBAWohAQzrAgsgA0EdNgIcIAMgADYCDCADIAFBAWo2AhRBACECDPICCyAAQTtHDQEgAUEBaiEBC0EmIQIM1wILQQAhAiADQQA2AhwgAyABNgIUIANBnxU2AhAgA0EMNgIMDO8CCyABIARHBEADQCABLQAAQSBHDYQCIAQgAUEBaiIBRw0AC0EsIQIM7wILQSwhAgzuAgsgASAERgRAQTQhAgzuAgsCQAJAA0ACQCABLQAAQQprDgQCAAADAAsgBCABQQFqIgFHDQALQTQhAgzvAgsgAygCBCEAIANBADYCBCADIAAgARAxIgBFDZ8CIANBMjYCHCADIAE2AhQgAyAANgIMQQAhAgzuAgsgAygCBCEAIANBADYCBCADIAAgARAxIgBFBEAgAUEBaiEBDJ8CCyADQTI2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM7QILIAEgBEcEQAJAA0AgAS0AAEEwayIAQf8BcUEKTwRAQTohAgzXAgsgAykDICILQpmz5syZs+bMGVYNASADIAtCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAMgCiALfDcDICAEIAFBAWoiAUcNAAtBwAAhAgzuAgsgAygCBCEAIANBADYCBCADIAAgAUEBaiIBEDEiAA0XDOICC0HAACECDOwCCyABIARGBEBByQAhAgzsAgsCQANAAkAgAS0AAEEJaw4YAAKiAqICqQKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/AgtBJSECDL4CC0HlACECDL0CCyADQT02AhwgAyABNgIUIAMgADYCDEEAIQIM1QILIANBGzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDNQCCyADQSA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzTAgsgA0ETNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0gILIANBCzYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNECCyADQRA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzQAgsgA0EgNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzwILIANBCzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM4CCyADQQw2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzNAgtBACECIANBADYCHCADIAE2AhQgA0HdDjYCECADQRI2AgwMzAILAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB/QEhAgzMAgsCQAJAIAMtADZBAUcNAEEAIQACQCADKAI4IgJFDQAgAigCYCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUcNASADQfwBNgIcIAMgATYCFCADQdwZNgIQIANBFTYCDEEAIQIMzQILQdwBIQIMswILIANBADYCHCADIAE2AhQgA0H5CzYCECADQR82AgxBACECDMsCCwJAAkAgAy0AKEEBaw4CBAEAC0HbASECDLICC0HUASECDLECCyADQQI6ADFBACEAAkAgAygCOCICRQ0AIAIoAgAiAkUNACADIAIRAAAhAAsgAEUEQEHdASECDLECCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQbQMNgIQIANBEDYCDEEAIQIMygILIANB+wE2AhwgAyABNgIUIANBgRo2AhAgA0EVNgIMQQAhAgzJAgsgASAERgRAQfoBIQIMyQILIAEtAABByABGDQEgA0EBOgAoC0HAASECDK4CC0HaASECDK0CCyABIARHBEAgA0EMNgIIIAMgATYCBEHZASECDK0CC0H5ASECDMUCCyABIARGBEBB+AEhAgzFAgsgAS0AAEHIAEcNBCABQQFqIQFB2AEhAgyrAgsgASAERgRAQfcBIQIMxAILAkACQCABLQAAQcUAaw4QAAUFBQUFBQUFBQUFBQUFAQULIAFBAWohAUHWASECDKsCCyABQQFqIQFB1wEhAgyqAgtB9gEhAiABIARGDcICIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbrVAGotAABHDQMgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMMCCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIARQRAQeMBIQIMqgILIANB9QE2AhwgAyABNgIUIAMgADYCDEEAIQIMwgILQfQBIQIgASAERg3BAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEG41QBqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzCAgsgA0GBBDsBKCADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIADQMMAgsgA0EANgIAC0EAIQIgA0EANgIcIAMgATYCFCADQeUfNgIQIANBCDYCDAy/AgtB1QEhAgylAgsgA0HzATYCHCADIAE2AhQgAyAANgIMQQAhAgy9AgtBACEAAkAgAygCOCICRQ0AIAIoAkAiAkUNACADIAIRAAAhAAsgAEUNbiAAQRVHBEAgA0EANgIcIAMgATYCFCADQYIPNgIQIANBIDYCDEEAIQIMvQILIANBjwE2AhwgAyABNgIUIANB7Bs2AhAgA0EVNgIMQQAhAgy8AgsgASAERwRAIANBDTYCCCADIAE2AgRB0wEhAgyjAgtB8gEhAgy7AgsgASAERgRAQfEBIQIMuwILAkACQAJAIAEtAABByABrDgsAAQgICAgICAgIAggLIAFBAWohAUHQASECDKMCCyABQQFqIQFB0QEhAgyiAgsgAUEBaiEBQdIBIQIMoQILQfABIQIgASAERg25AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBtdUAai0AAEcNBCAAQQJGDQMgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuQILQe8BIQIgASAERg24AiADKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABBs9UAai0AAEcNAyAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuAILQe4BIQIgASAERg23AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMtwILIAMoAgQhACADQgA3AwAgAyAAIAVBAWoiARArIgBFDQIgA0HsATYCHCADIAE2AhQgAyAANgIMQQAhAgy2AgsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNnAIgA0HtATYCHCADIAE2AhQgAyAANgIMQQAhAgy0AgtBzwEhAgyaAgtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDLQCC0HOASECDJoCCyADQesBNgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMsgILIAEgBEYEQEHrASECDLICCyABLQAAQS9GBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GyODYCECADQQg2AgxBACECDLECC0HNASECDJcCCyABIARHBEAgA0EONgIIIAMgATYCBEHMASECDJcCC0HqASECDK8CCyABIARGBEBB6QEhAgyvAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBywEhAgyWAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZcCIANB6AE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAEgBEYEQEHnASECDK4CCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5gE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILQcoBIQIMlAILIAEgBEYEQEHlASECDK0CC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDQIgA0HiATYCHCADIAE2AhQgAyAANgIMQQAhAgyvAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZoCIANB4wE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ2YAiADQeQBNgIcIAMgATYCFCADIAA2AgwMrQILQckBIQIMkwILQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgytAgtByAEhAgyTAgsgA0HhATYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDKsCCyABIARGBEBB4QEhAgyrAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBmRE2AhAgA0EJNgIMQQAhAgyrAgtBxwEhAgyRAgsgASAERgRAQeABIQIMqgILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyrAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqgILQcYBIQIMkAILIAEgBEYEQEHfASECDKkCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqgILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKkCC0HFASECDI8CCyABIARGBEBB3gEhAgyoAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKkCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyoAgtBxAEhAgyOAgsgASAERgRAQd0BIQIMpwILAkACQAJAAkAgAS0AAEEKaw4XAgMDAAMDAwMDAwMDAwMDAwMDAwMDAwEDCyABQQFqDAULIAFBAWohAUHDASECDI8CCyABQQFqIQEgA0Evai0AAEEBcQ0IIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKcCCyADQQA2AhwgAyABNgIUIANBjQs2AhAgA0ENNgIMQQAhAgymAgsgASAERwRAIANBDzYCCCADIAE2AgRBASECDI0CC0HcASECDKUCCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtB2wEhAgymAgsgAygCBCEAIANBADYCBCADIAAgARAtIgBFBEAgAUEBaiEBDAQLIANB2gE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMpQILIAMoAgQhACADQQA2AgQgAyAAIAEQLSIADQEgAUEBagshAUHBASECDIoCCyADQdkBNgIcIAMgADYCDCADIAFBAWo2AhRBACECDKICC0HCASECDIgCCyADQS9qLQAAQQFxDQEgA0EANgIcIAMgATYCFCADQeQcNgIQIANBGTYCDEEAIQIMoAILIAEgBEYEQEHZASEC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IAFBAWohAUGeASECDOQBCyABQQFqIQFBnwEhAgzjAQtBtwEhAiABIARGDfsBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQezUAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPwBCyADQQA2AgAgBkEBaiEBQQ0MKAtBtgEhAiABIARGDfoBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPsBCyADQQA2AgAgBkEBaiEBQQwMJwtBtQEhAiABIARGDfkBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQerUAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPoBCyADQQA2AgAgBkEBaiEBQQMMJgtBtAEhAiABIARGDfgBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQejUAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPkBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQbMBIQIM+AELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBmQEhAgzfAQsgAUEBaiEBQZoBIQIM3gELQbIBIQIgASAERg32ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHm1ABqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz3AQsgA0EANgIAIAZBAWohAUEnDCMLQbEBIQIgASAERg31ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHk1ABqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz2AQsgA0EANgIAIAZBAWohAUEcDCILQbABIQIgASAERg30ASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHe1ABqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz1AQsgA0EANgIAIAZBAWohAUEGDCELQa8BIQIgASAERg3zASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHZ1ABqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz0AQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGuASECDPMBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQY4BIQIM3AELIAFBAWohAUGPASECDNsBCyABQQFqIQFBlAEhAgzaAQsgAUEBaiEBQZUBIQIM2QELQa0BIQIgASAERg3xASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHX1ABqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzyAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGsASECDPEBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGQASECDNgBCyABQQFqIQFBkwEhAgzXAQsgASAERgRAQasBIQIM8AELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQZEBIQIM1wELIAFBAWohAUGSASECDNYBCyABIARGBEBBqgEhAgzvAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GpASECIAEgBEYN7QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABB0dQAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7gELIANBADYCACAGQQFqIQFBHgwaC0GoASECIAEgBEYN7AEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBytQAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7QELIANBADYCACAGQQFqIQFBFQwZC0GnASECIAEgBEYN6wEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBx9QAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7AELIANBADYCACAGQQFqIQFBFwwYC0GmASECIAEgBEYN6gEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBwdQAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6wELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBpQEhAgzqAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYsBIQIM0QELIAFBAWohAUGMASECDNABC0GkASECIAEgBEYN6AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBptUAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6QELIANBADYCACAGQQFqIQFBCQwVC0GjASECIAEgBEYN5wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBpNUAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6AELIANBADYCACAGQQFqIQFBHwwUC0GiASECIAEgBEYN5gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBvtQAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5wELIANBADYCACAGQQFqIQFBAgwTC0GhASECIAEgBEYN5QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQbzUAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOUBCyABIARGBEBBoAEhAgzlAQtBASABLQAAQd8ARw0RGiABQQFqIQFBhwEhAgzLAQsgA0EANgIAIAZBAWohAUGIASECDMoBC0GfASECIAEgBEYN4gEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4wELIANBADYCACAGQQFqIQFBKQwPC0GeASECIAEgBEYN4QEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBuNQAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4gELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBnQEhAgzhAQsgAS0AAEHFAEcNDiABQQFqIQFBhAEhAgzHAQsgASAERgRAQZwBIQIM4AELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFBggEhAgzHAQsgAUEBaiEBQYMBIQIMxgELQZsBIQIgASAERg3eASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGz1ABqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzfAQsgA0EANgIAIAZBAWohAUEjDAsLQZoBIQIgASAERg3dASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGw1ABqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzeAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGZASECDN0BCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQf0AIQIMxAELIAFBAWohAUGAASECDMMBCyABIARGBEBBmAEhAgzcAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB/gAhAgzDAQsgAUEBaiEBQf8AIQIMwgELIAEgBEYEQEGXASECDNsBCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQZYBIQIgASAERg3ZASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEGs1ABqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzaAQsgA0EANgIAIAZBAWohAUEFDAYLQZUBIQIgASAERg3YASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGm1ABqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzZAQsgA0EANgIAIAZBAWohAUEWDAULQZQBIQIgASAERg3XASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzYAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGTASECDNcBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUH5ACECDL4BCyABQQFqIQFB+gAhAgy9AQtBkgEhAiABIARGDdUBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQaDUAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNYBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGRASECDNQBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC4iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB/h82AhAgA0EGNgIMDNEBC0H4ACECDLcBCyADQZABNgIcIAMgATYCFCADIAA2AgxBACECDM8BC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgzOAQtB9wAhAgy0AQsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDMwBCyABIARGBEBBjwEhAgzMAQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GbHzYCECADQQY2AgxBACECDMwBC0ECIQIMsgELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GOASECDMoBCyABIARGBEBBjQEhAgzKAQsCQCABLQAAQQlrDgRKAABKAAtB9QAhAgywAQsgAy0AKUEFRgRAQfYAIQIMsAELQfQAIQIMrwELIAEgBEYEQEGMASECDMgBCyADQRA2AgggAyABNgIEDAoLIAEgBEYEQEGLASECDMcBCwJAIAEtAABBCWsOBEcAAEcAC0HzACECDK0BCyABIARHBEAgA0EQNgIIIAMgATYCBEHxACECDK0BC0GKASECDMUBCwJAIAEgBEcEQANAIAEtAABBoNAAai0AACIAQQNHBEACQCAAQQFrDgJJAAQLQfAAIQIMrwELIAQgAUEBaiIBRw0AC0GIASEC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BCABQQFqIgFHDQALQfsAIQIMpwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMpgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMpQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMpAELIANBADYCHCADIAE2AhQgA0G8CjYCECADQQc2AgxBACECDKMBC0HPACECDIkBC0HRACECDIgBC0HnACECDIcBCyABIARGBEBB+gAhAgygAQsCQCABLQAAQQlrDgQgAAAgAAsgAUEBaiEBQeYAIQIMhgELIAEgBEYEQEH5ACECDJ8BCwJAIAEtAABBCWsOBB8AAB8AC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQRAQeIBIQIMhgELIABBFUcEQCADQQA2AhwgAyABNgIUIANByQ02AhAgA0EaNgIMQQAhAgyfAQsgA0H4ADYCHCADIAE2AhQgA0HqGjYCECADQRU2AgxBACECDJ4BCyABIARHBEAgA0ENNgIIIAMgATYCBEHkACECDIUBC0H3ACECDJ0BCyABIARGBEBB9gAhAgydAQsCQAJAAkAgAS0AAEHIAGsOCwABCwsLCwsLCwsCCwsgAUEBaiEBQd0AIQIMhQELIAFBAWohAUHgACECDIQBCyABQQFqIQFB4wAhAgyDAQtB9QAhAiABIARGDZsBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbXVAGotAABHDQggAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJwBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIABEAgA0H0ADYCHCADIAE2AhQgAyAANgIMQQAhAgycAQtB4gAhAgyCAQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJwBC0HhACECDIIBCyADQfMANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMmgELIAMtACkiAEEja0ELSQ0JAkAgAEEGSw0AQQEgAHRBygBxRQ0ADAoLQQAhAiADQQA2AhwgAyABNgIUIANB7Qk2AhAgA0EINgIMDJkBC0HyACECIAEgBEYNmAEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBs9UAai0AAEcNBSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMmQELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfEANgIcIAMgATYCFCADIAA2AgxBACECDJkBC0HfACECDH8LQQAhAAJAIAMoAjgiAkUNACACKAI0IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANB6g02AhAgA0EmNgIMQQAhAgyZAQtB3gAhAgx/CyADQfAANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMlwELIAMtAClBIUYNBiADQQA2AhwgAyABNgIUIANBkQo2AhAgA0EINgIMQQAhAgyWAQtB7wAhAiABIARGDZUBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDVAGotAABHDQIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJYBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIARQ0CIANB7QA2AhwgAyABNgIUIAMgADYCDEEAIQIMlQELIANBADYCAAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDYABIANB7gA2AhwgAyABNgIUIAMgADYCDEEAIQIMkwELQdwAIQIMeQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJMBC0HbACECDHkLIANB7AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyRAQsgAy0AKSIAQSNJDQAgAEEuRg0AIANBADYCHCADIAE2AhQgA0HJCTYCECADQQg2AgxBACECDJABC0HaACECDHYLIAEgBEYEQEHrACECDI8BCwJAIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMjwELQdkAIQIMdQsgASAERwRAIANBDjYCCCADIAE2AgRB2AAhAgx1C0HqACECDI0BCyABIARGBEBB6QAhAgyNAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1wAhAgx0CyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeiADQegANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyABIARGBEBB5wAhAgyMAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ17IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELQdYAIQIMcgsgASAERgRAQeUAIQIMiwELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDI0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNfSADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeyADQeQANgIcIAMgATYCFCADIAA2AgwMiwELQdQAIQIMcQsgAy0AKUEiRg2GAUHTACECDHALQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALIABFBEBB1QAhAgxwCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQaQNNgIQIANBITYCDEEAIQIMiQELIANB4QA2AhwgAyABNgIUIANB0Bo2AhAgA0EVNgIMQQAhAgyIAQsgASAERgRAQeAAIQIMiAELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HSACECDHALIANBADYCHCADIAE2AhQgA0G2ETYCECADQQk2AgxBACECDIgBCyADQQA2AhwgAyABNgIUIANBthE2AhAgA0EJNgIMQQAhAgyHAQsgASAERgRAQd8AIQIMhwELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBthE2AhAgA0ECNgIMQQAhAgyGAQsgASAERgRAQd0AIQIMhgELIAEtAAAiAkENRgRAIAFBAWohAUHQACECDG0LIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyFAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0HKLTYCECADQQc2AgwMgwELIAEgBEYEQEHbACECDIMBCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc4AIQIMaAsgASAERgRAQdoAIQIMgQELIAEtAABBCWsOBAABAQABC0EAIQIgA0EANgIcIANBmhI2AhAgA0EHNgIMIAMgAUEBajYCFAx/CyADQYASOwEqQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB2QA2AhwgAyABNgIUIANB6ho2AhAgA0EVNgIMQQAhAgx+C0HNACECDGQLIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDHwLIAEgBEYEQEHZACECDHwLIAEtAABBIEcNPSABQQFqIQEgAy0ALkEBcQ09IANBADYCHCADIAE2AhQgA0HCHDYCECADQR42AgxBACECDHsLIAEgBEYEQEHYACECDHsLAkACQAJAAkACQCABLQAAIgBBCmsOBAIDAwABCyABQQFqIQFBLCECDGULIABBOkcNASADQQA2AhwgAyABNgIUIANB5xE2AhAgA0EKNgIMQQAhAgx9CyABQQFqIQEgA0Evai0AAEEBcUUNcyADLQAyQYABcUUEQCADQTJqIQIgAxA1QQAhAAJAIAMoAjgiBkUNACAGKAIoIgZFDQAgAyAGEQAAIQALAkACQCAADhZNTEsBAQEBAQEBAQEBAQEBAQEBAQEAAQsgA0EpNgIcIAMgATYCFCADQawZNgIQIANBFTYCDEEAIQIMfgsg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c3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw==","base64"))})},7136:(e,t,A)=>{"use strict";e=A.nmd(e);const{Buffer:r}=A(4573);let s;Object.defineProperty(e,"exports",{get:()=>s||(s=r.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgLhocCAwd/A34BeyABIAJqIQQCQCAAIgMoAgwiAA0AIAMoAgQEQCADIAE2AgQLIwBBEGsiCSQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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DAgLQeMBDAcLQdcBDAYLQdgBDAULQdkBDAQLQdoBDAMLQdsBDAILQd0BDAELQdwBCyECA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAn8CQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAwJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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A0EXNgIcIAMgADYCDCADIAFBAWo2AhQM+AILIABBFUYNI0EAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAz3AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwdCyADQRk2AhwgAyAANgIMIAMgAUEBajYCFAz2AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQzvAgsgA0EaNgIcIAMgADYCDCADIAFBAWo2AhQM9QILIABBFUYNH0EAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAz0AgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDBsLIANBHDYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgzzAgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDOsCCyADQR02AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8gILIABBO0cNASABQQFqIQELQSYhAgzXAgtBACECIANBADYCHCADIAE2AhQgA0GfFTYCECADQQw2AgwM7wILIAEgBEcEQANAIAEtAABBIEcNhAIgBCABQQFqIgFHDQALQSwhAgzvAgtBLCECDO4CCyABIARGBEBBNCECDO4CCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtBNCECDO8CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUNnwIgA0EyNgIcIAMgATYCFCADIAA2AgxBACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUEQCABQQFqIQEMnwILIANBMjYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgztAgsgASAERwRAAkADQCABLQAAQTBrIgBB/wFxQQpPBEBBOiECDNcCCyADKQMgIgtCmbPmzJmz5swZVg0BIAMgC0IKfiIKNwMgIAogAK1C/wGDIgtCf4VWDQEgAyAKIAt8NwMgIAQgAUEBaiIBRw0AC0HAACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABQQFqIgEQMSIADRcM4gILQcAAIQIM7AILIAEgBEYEQEHJACECDOwCCwJAA0ACQCABLQAAQQlrDhgAAqICogKpAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAgCiAgsgBCABQQFqIgFHDQALQckAIQIM7AILIAFBAWohASADQS9qLQAAQQFxDaUCIANBADYCHCADIAE2AhQgA0GXEDYCECADQQo2AgxBACECDOsCCyABIARHBEADQCABLQAAQSBHDRUgBCABQQFqIgFHDQALQfgAIQIM6wILQfgAIQIM6gILIANBAjoAKAw4C0EAIQIgA0EANgIcIANBvws2AhAgA0ECNgIMIAMgAUEBajYCFAzoAgtBACECDM4CC0ENIQIMzQILQRMhAgzMAgtBFSECDMsCC0EWIQIMygILQRghAgzJAgtBGSECDMgCC0EaIQIMxwILQRshAgzGAgtBHCECDMUCC0EdIQIMxAILQR4hAgzDAgtBHyECDMICC0EgIQIMwQILQSIhAgzAAgtBIyECDL8CC0ElIQIMvgILQeUAIQIMvQILIANBPTYCHCADIAE2AhQgAyAANgIMQQAhAgzVAgsgA0EbNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIM1AILIANBIDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNMCCyADQRM2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzSAgsgA0ELNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0QILIANBEDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNACCyADQSA2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzPAgsgA0ELNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzgILIANBDDYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM0CC0EAIQIgA0EANgIcIAMgATYCFCADQd0ONgIQIANBEjYCDAzMAgsCQANAAkAgAS0AAEEKaw4EAAICAAILIAQgAUEBaiIBRw0AC0H9ASECDMwCCwJAAkAgAy0ANkEBRw0AQQAhAAJAIAMoAjgiAkUNACACKAJgIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB/AE2AhwgAyABNgIUIANB3Bk2AhAgA0EVNgIMQQAhAgzNAgtB3AEhAgyzAgsgA0EANgIcIAMgATYCFCADQfkLNgIQIANBHzYCDEEAIQIMywILAkACQCADLQAoQQFrDgIEAQALQdsBIQIMsgILQdQBIQIMsQILIANBAjoAMUEAIQACQCADKAI4IgJFDQAgAigCACICRQ0AIAMgAhEAACEACyAARQRAQd0BIQIMsQILIABBFUcEQCADQQA2AhwgAyABNgIUIANBtAw2AhAgA0EQNgIMQQAhAgzKAgsgA0H7ATYCHCADIAE2AhQgA0GBGjYCECADQRU2AgxBACECDMkCCyABIARGBEBB+gEhAgzJAgsgAS0AAEHIAEYNASADQQE6ACgLQcABIQIMrgILQdoBIQIMrQILIAEgBEcEQCADQQw2AgggAyABNgIEQdkBIQIMrQILQfkBIQIMxQILIAEgBEYEQEH4ASECDMUCCyABLQAAQcgARw0EIAFBAWohAUHYASECDKsCCyABIARGBEBB9wEhAgzEAgsCQAJAIAEtAABBxQBrDhAABQUFBQUFBQUFBQUFBQUBBQsgAUEBaiEBQdYBIQIMqwILIAFBAWohAUHXASECDKoCC0H2ASECIAEgBEYNwgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABButUAai0AAEcNAyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMwwILIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgBFBEBB4wEhAgyqAgsgA0H1ATYCHCADIAE2AhQgAyAANgIMQQAhAgzCAgtB9AEhAiABIARGDcECIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjVAGotAABHDQIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMICCyADQYEEOwEoIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgANAwwCCyADQQA2AgALQQAhAiADQQA2AhwgAyABNgIUIANB5R82AhAgA0EINgIMDL8CC0HVASECDKUCCyADQfMBNgIcIAMgATYCFCADIAA2AgxBACECDL0CC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ1uIABBFUcEQCADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgy9AgsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDLwCCyABIARHBEAgA0ENNgIIIAMgATYCBEHTASECDKMCC0HyASECDLsCCyABIARGBEBB8QEhAgy7AgsCQAJAAkAgAS0AAEHIAGsOCwABCAgICAgICAgCCAsgAUEBaiEBQdABIQIMowILIAFBAWohAUHRASECDKICCyABQQFqIQFB0gEhAgyhAgtB8AEhAiABIARGDbkCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEG11QBqLQAARw0EIABBAkYNAyAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy5AgtB7wEhAiABIARGDbgCIAMoAgAiACAEIAFraiEGIAEgAGtBAWohBQNAIAEtAAAgAEGz1QBqLQAARw0DIABBAUYNAiAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy4AgtB7gEhAiABIARGDbcCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEGw1QBqLQAARw0CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy3AgsgAygCBCEAIANCADcDACADIAAgBUEBaiIBECsiAEUNAiADQewBNgIcIAMgATYCFCADIAA2AgxBACECDLYCCyADQQA2AgALIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ2cAiADQe0BNgIcIAMgATYCFCADIAA2AgxBACECDLQCC0HPASECDJoCC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMtAILQc4BIQIMmgILIANB6wE2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyyAgsgASAERgRAQesBIQIMsgILIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMsQILQc0BIQIMlwILIAEgBEcEQCADQQ42AgggAyABNgIEQcwBIQIMlwILQeoBIQIMrwILIAEgBEYEQEHpASECDK8CCyABLQAAQTBrIgBB/wFxQQpJBEAgAyAAOgAqIAFBAWohAUHLASECDJYCCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNlwIgA0HoATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgASAERgRAQecBIQIMrgILAkAgAS0AAEEuRgRAIAFBAWohAQwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmAIgA0HmATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgtBygEhAgyUAgsgASAERgRAQeUBIQIMrQILQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIBNgIcIAMgATYCFCADIAA2AgxBACECDK8CCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmgIgA0HjATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5AE2AhwgAyABNgIUIAMgADYCDAytAgtByQEhAgyTAgtBACEAAkAgAygCOCICRQ0AIAIoAkQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GkDTYCECADQSE2AgxBACECDK0CC0HIASECDJMCCyADQeEBNgIcIAMgATYCFCADQdAaNgIQIANBFTYCDEEAIQIMqwILIAEgBEYEQEHhASECDKsCCwJAIAEtAABBIEYEQCADQQA7ATQgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GZETYCECADQQk2AgxBACECDKsCC0HHASECDJECCyABIARGBEBB4AEhAgyqAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKsCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyqAgtBxgEhAgyQAgsgASAERgRAQd8BIQIMqQILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyqAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqQILQcUBIQIMjwILIAEgBEYEQEHeASECDKgCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqQILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKgCC0HEASECDI4CCyABIARGBEBB3QEhAgynAgsCQAJAAkACQCABLQAAQQprDhcCAwMAAwMDAwMDAwMDAwMDAwMDAwMDAQMLIAFBAWoMBQsgAUEBaiEBQcMBIQIMjwILIAFBAWohASADQS9qLQAAQQFxDQggA0EANgIcIAMgATYCFCADQY0LNgIQIANBDTYCDEEAIQIMpwILIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKYCCyABIARHBEAgA0EPNgIIIAMgATYCBEEBIQIMjQILQdwBIQIMpQILAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0HbASECDKYCCyADKAIEIQAgA0EANgIEIAMgACABEC0iAEUEQCABQQFqIQEMBAsgA0HaATYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgylAgsgAygCBCEAIANBADYCBCADIAAgARAtIgANASABQQFqCyEBQcEBIQIMigILIANB2QE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMogILQcIBIQIMiAILIANBL2otAABBAXENASADQQA2AhwgAyABNgIUIANB5Bw2AhAgA0EZNgIMQQAhAgygAgsgASAERgRAQdkB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CyADIAU2AgAMkAILIANBADYCACAGQQFqIQFBGgw8C0HKASECIAEgBEYNjgIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBjdUAai0AAEcNOyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjwILIANBADYCACAGQQFqIQFBIQw7CyABIARGBEBByQEhAgyOAgsCQAJAIAEtAABBwQBrDhQAPT09PT09PT09PT09PT09PT09AT0LIAFBAWohAUGtASECDPUBCyABQQFqIQFBsAEhAgz0AQsgASAERgRAQcgBIQIMjQILAkACQCABLQAAQdUAaw4LADw8PDw8PDw8PAE8CyABQQFqIQFBrgEhAgz0AQsgAUEBaiEBQa8BIQIM8wELQccBIQIgASAERg2LAiADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw04IABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyMAgsgA0EANgIAIAZBAWohAUEqDDgLIAEgBEYEQEHGASECDIsCCyABLQAAQdAARw04IAFBAWohAUElDDcLQcUBIQIgASAERg2JAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGB1QBqLQAARw02IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyKAgsgA0EANgIAIAZBAWohAUEODDYLIAEgBEYEQEHEASECDIkCCyABLQAAQcUARw02IAFBAWohAUGrASECDO8BCyABIARGBEBBwwEhAgyIAgsCQAJAAkACQCABLQAAQcIAaw4PAAECOTk5OTk5OTk5OTkDOQsgAUEBaiEBQacBIQIM8QELIAFBAWohAUGoASECDPABCyABQQFqIQFBqQEhAgzvAQsgAUEBaiEBQaoBIQIM7gELQcIBIQIgASAERg2GAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEH+1ABqLQAARw0zIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyHAgsgA0EANgIAIAZBAWohAUEUDDMLQcEBIQIgASAERg2FAiADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANA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BTYCAAzsAQsgA0EANgIAIAZBAWohAUEXDBgLQaYBIQIgASAERg3qASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHB1ABqLQAARw0XIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzrAQsgA0EANgIAIAZBAWohAUEYDBcLIAEgBEYEQEGlASECDOoBCwJAAkAgAS0AAEHJAGsOBwAZGRkZGQEZCyABQQFqIQFBiwEhAgzRAQsgAUEBaiEBQYwBIQIM0AELQaQBIQIgASAERg3oASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw0VIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzpAQsgA0EANgIAIAZBAWohAUEJDBULQaMBIQIgASAERg3nASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw0UIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzoAQsgA0EANgIAIAZBAWohAUEfDBQLQaIBIQIgASAERg3mASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEG+1ABqLQAARw0TIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAznAQsgA0EANgIAIAZBAWohAUECDBMLQaEBIQIgASAERg3lASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYDQCABLQAAIABBvNQAai0AAEcNESAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5QELIAEgBEYEQEGgASECDOUBC0EBIAEtAABB3wBHDREaIAFBAWohAUGHASECDMsBCyADQQA2AgAgBkEBaiEBQYgBIQIMygELQZ8BIQIgASAERg3iASADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw0PIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzjAQsgA0EANgIAIAZBAWohAUEpDA8LQZ4BIQIgASAERg3hASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEG41ABqLQAARw0OIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAziAQsgA0EANgIAIAZBAWohAUEtDA4LIAEgBEYEQEGdASECDOEBCyABLQAAQcUARw0OIAFBAWohAUGEASECDMcBCyABIARGBEBBnAEhAgzgAQsCQAJAIAEtAABBzABrDggADw8PDw8PAQ8LIAFBAWohAUGCASECDMcBCyABQQFqIQFBgwEhAgzGAQtBmwEhAiABIARGDd4BIAMoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQbPUAGotAABHDQsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN8BCyADQQA2AgAgBkEBaiEBQSMMCwtBmgEhAiABIARGDd0BIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDUAGotAABHDQogAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN4BCyADQQA2AgAgBkEBaiEBQQAMCgsgASAERgRAQZkBIQIM3QELAkACQCABLQAAQcgAaw4IAAwMDAwMDAEMCyABQQFqIQFB/QAhAgzEAQsgAUEBaiEBQYABIQIMwwELIAEgBEYEQEGYASECDNwBCwJAAkAgAS0AAEHOAGsOAwALAQsLIAFBAWohAUH+ACECDMMBCyABQQFqIQFB/wAhAgzCAQsgASAERgRAQZcBIQIM2wELIAEtAABB2QBHDQggAUEBaiEBQQgMBwtBlgEhAiABIARGDdkBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQazUAGotAABHDQYgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNoBCyADQQA2AgAgBkEBaiEBQQUMBgtBlQEhAiABIARGDdgBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQabUAGotAABHDQUgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNkBCyADQQA2AgAgBkEBaiEBQRYMBQtBlAEhAiABIARGDdcBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDQQgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNgBCyADQQA2AgAgBkEBaiEBQRAMBAsgASAERgRAQZMBIQIM1wELAkACQCABLQAAQcMAaw4MAAYGBgYGBgYGBgYBBgsgAUEBaiEBQfkAIQIMvgELIAFBAWohAUH6ACECDL0BC0GSASECIAEgBEYN1QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBoNQAai0AAEcNAiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1gELIANBADYCACAGQQFqIQFBJAwCCyADQQA2AgAMAgsgASAERgRAQZEBIQIM1AELIAEtAABBzABHDQEgAUEBaiEBQRMLOgApIAMoAgQhACADQQA2AgQgAyAAIAEQLiIADQIMAQtBACECIANBADYCHCADIAE2AhQgA0H+HzYCECADQQY2AgwM0QELQfgAIQIMtwELIANBkAE2AhwgAyABNgIUIAMgADYCDEEAIQIMzwELQQAhAAJAIAMoAjgiAkUNACACKAJAIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GCDzYCECADQSA2AgxBACECDM4BC0H3ACECDLQBCyADQY8BNgIcIAMgATYCFCADQewbNgIQIANBFTYCDEEAIQIMzAELIAEgBEYEQEGPASECDMwBCwJAIAEtAABBIEYEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQZsfNgIQIANBBjYCDEEAIQIMzAELQQIhAgyyAQsDQCABLQAAQSBHDQIgBCABQQFqIgFHDQALQY4BIQIMygELIAEgBEYEQEGNASECDMoBCwJAIAEtAABBCWsOBEoAAEoAC0H1ACECDLABCyADLQApQQVGBEBB9gAhAgywAQtB9AAhAgyvAQsgASAERgRAQYwBIQIMyAELIANBEDYCCCADIAE2AgQMCgsgASAERgRAQYsBIQIMxwELAkAgAS0AAEEJaw4ERwAARwALQfMAIQIMrQELIAEgBEcEQCADQRA2AgggAyABNgIEQfEAIQIMrQELQYoBIQIMxQELAkAgASAERwRAA0AgAS0AAEGg0ABqLQAAIgBBA0cEQAJAIABBAWsOAkkABAtB8AAhAgyvAQsgBCABQQFqIgFHDQALQYgBIQIMxgELQYgBIQIMxQELIANBADYCHCADIAE2AhQgA0HbIDYCECADQQc2AgxBACECDMQBCyABIARGBEBBiQEhAgzEAQsCQAJAAkAgAS0AAEGg0gBqLQAAQQFrDgNGAgABC0HyACECDKwBCyADQQA2AhwgAyABNgIUIANBtBI2AhAgA0EHNgIMQQAhAgzEAQtB6gAhAgyqAQsgASAERwRAIAFBAWohAUHvACECDKoBC0GHASECDMIBCyAEIAEiAEYEQEGGASECDMIBCyAALQAAIgFBL0YEQCAAQQFqIQFB7gAhAgypAQsgAUEJayICQRdLDQEgACEBQQEgAnRBm4CABHENQQwBCyAEIAEiAEYEQEGFASECDMEBCyAALQAAQS9HDQAgAEEBaiEBDAMLQQAhAiADQQA2AhwgAyAANgIUIANB2yA2AhAgA0EHNgIMDL8BCwJAAkACQAJAAkADQCABLQAAQaDOAGotAAAiAEEFRwRAAkACQCAAQQFrDghHBQYHCAAEAQgLQesAIQIMrQELIAFBAWohAUHtACECDKwBCyAEIAFBAWoiAUcNAAtBhAEhAgzDAQsgAUEBagwUCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDMEBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDMABCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDL8BCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy+AQsgASAERgRAQYMBIQIMvgELAkAgAS0AAEGgzgBqLQAAQQFrDgg+BAUGAAgCAwcLIAFBAWohAQtBAyECDKMBCyABQQFqDA0LQQAhAiADQQA2AhwgA0HREjYCECADQQc2AgwgAyABQQFqNgIUDLoBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDLkBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDLgBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDLcBCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy2AQtB7AAhAgycAQsgASAERgRAQYIBIQIMtQELIAFBAWoMAgsgASAERgRAQYEBIQIMtAELIAFBAWoMAQsgASAERg0BIAFBAWoLIQFBBCECDJgBC0GAASECDLABCwNAIAEtAABBoMwAai0AACIAQQJHBEAgAEEBRwRAQekAIQIMmQELDDELIAQgAUEBaiIBRw0AC0H/ACECDK8BCyABIARGBEBB/gAhAgyvAQsCQCABLQAAQQlrDjcvAwYvBAYGBgYGBgYGBgYGBgYGBgYGBgUGBgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYABgsgAUEBagshAUEFIQIMlAELIAFBAWoMBgsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgyrAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyqAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgypAQsgA0EANgIcIAMgATYCFCADQY0UNgIQIANBBzYCDEEAIQIMqAELAkACQAJAAkADQCABLQAAQaDKAGotAAAiAEEFRwRAAkAgAEEBaw4GLgMEBQYABgtB6AAhAgyUAQsgBCABQQFqIgFHDQALQf0AIQIMqwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMqgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMqQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMqAELIANBADYCHCADIAE2AhQgA0HkCDYCECADQQc2AgxBACECDKcBCyABIARGDQEgAUEBagshAUEGIQIMjAELQfwAIQIMpAELAkACQAJAAkADQCABLQAAQaDIAGotAAAiAEEFRwRAIABBAWsOBCkCAwQFCyAEIAFBAWoiAUcNAAtB+wAhAgynAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgymAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgylAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgykAQsgA0EANgIcIAMgATYCFCADQbwKNgIQIANBBzYCDEEAIQIMowELQc8AIQIMiQELQdEAIQIMiAELQecAIQIMhwELIAEgBEYEQEH6ACECDKABCwJAIAEtAABBCWsOBCAAACAACyABQQFqIQFB5gAhAgyGAQsgASAERgRAQfkAIQIMnwELAkAgAS0AAEEJaw4EHwAAHwALQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFBEBB4gEhAgyGAQsgAEEVRwRAIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDJ8BCyADQfgANgIcIAMgATYCFCADQeoaNgIQIANBFTYCDEEAIQIMngELIAEgBEcEQCADQQ02AgggAyABNgIEQeQAIQIMhQELQfcAIQIMnQELIAEgBEYEQEH2ACECDJ0BCwJAAkACQCABLQAAQcgAaw4LAAELCwsLCwsLCwILCyABQQFqIQFB3QAhAgyFAQsgAUEBaiEBQeAAIQIMhAELIAFBAWohAUHjACECDIMBC0H1ACECIAEgBEYNmwEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBtdUAai0AAEcNCCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMnAELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfQANgIcIAMgATYCFCADIAA2AgxBACECDJwBC0HiACECDIIBC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMnAELQeEAIQIMggELIANB8wA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyaAQsgAy0AKSIAQSNrQQtJDQkCQCAAQQZLDQBBASAAdEHKAHFFDQAMCgtBACECIANBADYCHCADIAE2AhQgA0HtCTYCECADQQg2AgwMmQELQfIAIQIgASAERg2YASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGz1QBqLQAARw0FIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAQsgAygCBCEAIANCADcDACADIAAgBkEBaiIBECsiAARAIANB8QA2AhwgAyABNgIUIAMgADYCDEEAIQIMmQELQd8AIQIMfwtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJkBC0HeACECDH8LIANB8AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyXAQsgAy0AKUEhRg0GIANBADYCHCADIAE2AhQgA0GRCjYCECADQQg2AgxBACECDJYBC0HvACECIAEgBEYNlQEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMlgELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgBFDQIgA0HtADYCHCADIAE2AhQgAyAANgIMQQAhAgyVAQsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNgAEgA0HuADYCHCADIAE2AhQgAyAANgIMQQAhAgyTAQtB3AAhAgx5C0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMkwELQdsAIQIMeQsgA0HsADYCHCADIAE2AhQgA0GAGzYCECADQRU2AgxBACECDJEBCyADLQApIgBBI0kNACAAQS5GDQAgA0EANgIcIAMgATYCFCADQckJNgIQIANBCDYCDEEAIQIMkAELQdoAIQIMdgsgASAERgRAQesAIQIMjwELAkAgAS0AAEEvRgRAIAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBsjg2AhAgA0EINgIMQQAhAgyPAQtB2QAhAgx1CyABIARHBEAgA0EONgIIIAMgATYCBEHYACECDHULQeoAIQIMjQELIAEgBEYEQEHpACECDI0BCyABLQAAQTBrIgBB/wFxQQpJBEAgAyAAOgAqIAFBAWohAUHXACECDHQLIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ16IANB6AA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELIAEgBEYEQEHnACECDIwBCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDXsgA0HmADYCHCADIAE2AhQgAyAANgIMQQAhAgyMAQtB1gAhAgxyCyABIARGBEBB5QAhAgyLAQtBACEAQQEhBUEBIQdBACECAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkAgAS0AAEEwaw4KCgkAAQIDBAUGCAsLQQIMBgtBAwwFC0EEDAQLQQUMAwtBBgwCC0EHDAELQQgLIQJBACEFQQAhBwwCC0EJIQJBASEAQQAhBUEAIQcMAQtBACEFQQEhAgsgAyACOgArIAFBAWohAQJAAkAgAy0ALkEQcQ0AAkACQAJAIAMtACoOAwEAAgQLIAdFDQMMAgsgAA0BDAILIAVFDQELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ0CIANB4gA2AhwgAyABNgIUIAMgADYCDEEAIQIMjQELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ19IANB4wA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ17IANB5AA2AhwgAyABNgIUIAMgADYCDAyLAQtB1AAhAgxxCyADLQApQSJGDYYBQdMAIQIMcAtBACEAAkAgAygCOCICRQ0AIAIoAkQiAkUNACADIAIRAAAhAAsgAEUEQEHVACECDHALIABBFUcEQCADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgyJAQsgA0HhADYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDIgBCyABIARGBEBB4AAhAgyIAQsCQAJAAkACQAJAIAEtAABBCmsOBAEEBAAECyABQQFqIQEMAQsgAUEBaiEBIANBL2otAABBAXFFDQELQdIAIQIMcAsgA0EANgIcIAMgATYCFCADQbYRNgIQIANBCTYCDEEAIQIMiAELIANBADYCHCADIAE2AhQgA0G2ETYCECADQQk2AgxBACECDIcBCyABIARGBEBB3wAhAgyHAQsgAS0AAEEKRgRAIAFBAWohAQwJCyADLQAuQcAAcQ0IIANBADYCHCADIAE2AhQgA0G2ETYCECADQQI2AgxBACECDIYBCyABIARGBEBB3QAhAgyGAQsgAS0AACICQQ1GBEAgAUEBaiEBQdAAIQIMbQsgASEAIAJBCWsOBAUBAQUBCyAEIAEiAEYEQEHcACECDIUBCyAALQAAQQpHDQAgAEEBagwCC0EAIQIgA0EANgIcIAMgADYCFCADQcotNgIQIANBBzYCDAyDAQsgASAERgRAQdsAIQIMgwELAkAgAS0AAEEJaw4EAwAAAwALIAFBAWoLIQFBzgAhAgxoCyABIARGBEBB2gAhAgyBAQsgAS0AAEEJaw4EAAEBAAELQQAhAiADQQA2AhwgA0GaEjYCECADQQc2AgwgAyABQQFqNgIUDH8LIANBgBI7ASpBACEAAkAgAygCOCICRQ0AIAIoAjgiAkUNACADIAIRAAAhAAsgAEUNACAAQRVHDQEgA0HZADYCHCADIAE2AhQgA0HqGjYCECADQRU2AgxBACECDH4LQc0AIQIMZAsgA0EANgIcIAMgATYCFCADQckNNgIQIANBGjYCDEEAIQIMfAsgASAERgRAQdkAIQIMfAsgAS0AAEEgRw09IAFBAWohASADLQAuQQFxDT0gA0EANgIcIAMgATYCFCADQcIcNgIQIANBHjYCDEEAIQIMewsgASAERgRAQdgAIQIMewsCQAJAAkACQAJAIAEtAAAiAEEKaw4EAgMDAAELIAFBAWohAUEsIQIMZQsgAEE6Rw0BIANBADYCHCADIAE2AhQgA0HnETYCECADQQo2AgxBACECDH0LIAFBAWohASADQS9qLQAAQQFxRQ1zIAMtADJBgAFxRQRAIANBMmohAiADEDVBACEAAkAgAygCOCIGRQ0AIAYoAigiBkUNACADIAYRAAAhAAsCQAJAIAAOFk1MSwEBAQEBAQEBAQEBAQEBAQEBAQABCyADQSk2AhwgAyABNgIUIANBrBk2AhAgA0EVNgIMQQAhAgx+CyADQQA2AhwgAyABNgIUIANB5Qs2AhAgA0ERNgIMQQAhAgx9C0EAIQACQCADKAI4IgJFDQAgAigCXCICRQ0AIAMgAhEAACEACyAARQ1ZIABBFUcNASADQQU2AhwgAyABNgIUIANBmxs2AhAgA0EVNgIMQQAhAgx8C0HLACECDGILQQAhAiADQQA2AhwgAyABNgIUIANBkA42AhAgA0EUNgIMDHoLIAMgAy8BMkGAAXI7ATIMOwsgASAERwRAIANBETYCCCADIAE2AgRBygAhAgxgC0HXACECDHgLIAEgBEYEQEHWACECDHgLAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAQEBAQEBAQEBAQEBAAUBAQAIDQAsgAUEBaiEBQcYAIQIMYQsgAUEBaiEBQccAIQIMYAsgAUEBaiEBQcgAIQIMXwsgAUEBaiEBQckAIQIMXgtB1QAhAiAEIAEiAEYNdiAEIAFrIAMoAgAiAWohBiAAIAFrQQVqIQcDQCABQZDIAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQhBBCABQQVGDQoaIAFBAWohASAEIABBAWoiAEcNAAsgAyAGNgIADHYLQdQAIQIgBCABIgBGDXUgBCABayADKAIAIgFqIQYgACABa0EPaiEHA0AgAUGAyABqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0HQQMgAUEPRg0JGiABQQFqIQEgBCAAQQFqIgBHDQALIAMgBjYCAAx1C0HTACECIAQgASIARg10IAQgAWsgAygCACIBaiEGIAAgAWtBDmohBwNAIAFB4scAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNBiABQQ5GDQcgAUEBaiEBIAQgAEEBaiIARw0ACyADIAY2AgAMdAtB0gAhAiAEIAEiAEYNcyAEIAFrIAMoAgAiAWohBSAAIAFrQQFqIQYDQCABQeDHAGotAAAgAC0AACIHQSByIAcgB0HBAGtB/wFxQRpJG0H/AXFHDQUgAUEBRg0CIAFBAWohASAEIABBAWoiAEcNAAsgAyAFNgIADHMLIAEgBEYEQEHRACECDHMLAkACQCABLQAAIgBBIHIgACAAQcEAa0H/AXFBGkkbQf8BcUHuAGsOBwA5OTk5OQE5CyABQQFqIQFBwwAhAgxaCyABQQFqIQFBxAAhAgxZCyADQQA2AgAgBkEBaiEBQcUAIQIMWAtB0AAhAiAEIAEiAEYNcCAEIAFrIAMoAgAiAWohBiAAIAFrQQlqIQcDQCABQdbHAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQJBAiABQQlGDQQaIAFBAWohASAEIABBAWoiAEcNAAsgAyAGNgIADHALQc8AIQIgBCABIgBGDW8gBCABayADKAIAIgFqIQYgACABa0EFaiEHA0AgAUHQxwBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYNAiABQQFqIQEgBCAAQQFqIgBHDQALIAMgBjYCAAxvCyAAIQEgA0EANgIADDMLQQELOgAsIANBADYCACAHQQFqIQELQS0hAgxSCwJAA0AgAS0AAEHQxQBqLQAAQQFHDQEgBCABQQFqIgFHDQALQc0AIQIMawtBwgAhAgxRCyABIARGBEBBzAAhAgxqCyABLQAAQTpGBEAgAygCBCEAIANBADYCBCADIAAgARAwIgBFDTMgA0HLADYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgxqCyADQQA2AhwgAyABNgIUIANB5xE2AhAgA0EKNgIMQQAhAgxpCwJAAkAgAy0ALEECaw4CAAEnCyADQTNqLQAAQQJxRQ0mIAMtAC5BAnENJiADQQA2AhwgAyABNgIUIANBphQ2AhAgA0ELNgIMQQAhAgxpCyADLQAyQSBxRQ0lIAMtAC5BAnENJSADQQA2AhwgAyABNgIUIANBvRM2AhAgA0EPNgIMQQAhAgxoC0EAIQACQCADKAI4IgJFDQAgAigCSCICRQ0AIAMgAhEAACEACyAARQRAQcEAIQIMTwsgAEEVRwRAIANBADYCHCADIAE2AhQgA0GmDzYCECADQRw2AgxBACECDGgLIANBygA2AhwgAyABNgIUIANBhRw2AhAgA0EVNgIMQQAhAgxnCyABIARHBEAgASECA0AgBCACIgFrQRBOBEAgAUEQaiEC/Qz/////////////////////IAH9AAAAIg1BB/1sIA39DODg4ODg4ODg4ODg4ODg4OD9bv0MX19fX19fX19fX19fX19fX/0mIA39DAkJCQkJCQkJCQkJCQkJCQn9I/1Q/VL9ZEF/c2giAEEQRg0BIAAgAWohAQwYCyABIARGBEBBxAAhAgxpCyABLQAAQcDBAGotAABBAUcNFyAEIAFBAWoiAkcNAAtBxAAhAgxnC0HEACECDGYLIAEgBEcEQANAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXEiAEEJRg0AIABBIEYNAAJAAkACQAJAIABB4wBrDhMAAwMDAwMDAwEDAwMDAwMDAwMCAwsgAUEBaiEBQTYhAgxSCyABQQFqIQFBNyECDFELIAFBAWohAUE4IQIMUAsMFQsgBCABQQFqIgFHDQALQTwhAgxmC0E8IQIMZQsgASAERgRAQcgAIQIMZQsgA0ESNgIIIAMgATYCBAJAAkACQAJAAkAgAy0ALEEBaw4EFAABAgkLIAMtADJBIHENA0HgASECDE8LAkAgAy8BMiIAQQhxRQ0AIAMtAChBAUcNACADLQAuQQhxRQ0CCyADIABB9/sDcUGABHI7ATIMCwsgAyADLwEyQRByOwEyDAQLIANBADYCBCADIAEgARAxIgAEQCADQcEANgIcIAMgADYCDCADIAFBAWo2AhRBACECDGYLIAFBAWohAQxYCyADQQA2AhwgAyABNgIUIANB9BM2AhAgA0EENgIMQQAhAgxkC0HHACECIAEgBEYNYyADKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIABBwMUAai0AACABLQAAQSByRw0BIABBBkYNSiAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAxkCyADQQA2AgAMBQsCQCABIARHBEADQCABLQAAQcDDAGotAAAiAEEBRwRAIABBAkcNAyABQQFqIQEMBQsgBCABQQFqIgFHDQALQcUAIQIMZAtBxQAhAgxjCwsgA0EAOgAsDAELQQshAgxHC0E/IQIMRgsCQAJAA0AgAS0AACIAQSBHBEACQCAAQQprDgQDBQUDAAsgAEEsRg0DDAQLIAQgAUEBaiIBRw0AC0HGACECDGALIANBCDoALAwOCyADLQAoQQFHDQIgAy0ALkEIcQ0CIAMoAgQhACADQQA2AgQgAyAAIAEQMSIABEAgA0HCADYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgxfCyABQQFqIQEMUAtBOyECDEQLAkADQCABLQAAIgBBIEcgAEEJR3ENASAEIAFBAWoiAUcNAAtBwwAhAgxdCwtBPCECDEILAkACQCABIARHBEADQCABLQAAIgBBIEcEQCAAQQprDgQDBAQDBAsgBCABQQFqIgFHDQALQT8hAgxdC0E/IQIMXAsgAyADLwEyQSByOwEyDAoLIAMoAgQhACADQQA2AgQgAyAAIAEQMSIARQ1OIANBPjYCHCADIAE2AhQgAyAANgIMQQAhAgxaCwJAIAEgBEcEQANAIAEtAABBwMMAai0AACIAQQFHBEAgAEECRg0DDAwLIAQgAUEBaiIBRw0AC0E3IQIMWwtBNyECDFoLIAFBAWohAQwEC0E7IQIgBCABIgBGDVggBCABayADKAIAIgFqIQYgACABa0EFaiEHAkADQCABQZDIAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAUEFRgRAQQchAQw/CyABQQFqIQEgBCAAQQFqIgBHDQALIAMgBjYCAAxZCyADQQA2AgAgACEBDAULQTohAiAEIAEiAEYNVyAEIAFrIAMoAgAiAWohBiAAIAFrQQhqIQcCQANAIAFBtMEAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNASABQQhGBEBBBSEBDD4LIAFBAWohASAEIABBAWoiAEcNAAsgAyAGNgIADFgLIANBADYCACAAIQEMBAtBOSECIAQgASIARg1WIAQgAWsgAygCACIBaiEGIAAgAWtBA2ohBwJAA0AgAUGwwQBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBA0YEQEEGIQEMPQsgAUEBaiEBIAQgAEEBaiIARw0ACyADIAY2AgAMVwsgA0EANgIAIAAhAQwDCwJAA0AgAS0AACIAQSBHBEAgAEEKaw4EBwQEBwILIAQgAUEBaiIBRw0AC0E4IQIMVgsgAEEsRw0BIAFBAWohAEEBIQECQAJAAkACQAJAIAMtACxBBWsOBAMBAgQACyAAIQEMBAtBAiEBDAELQQQhAQsgA0EBOgAsIAMgAy8BMiABcjsBMiAAIQEMAQsgAyADLwEyQQhyOwEyIAAhAQtBPiECDDsLIANBADoALAtBOSECDDkLIAEgBEYEQEE2IQIMUgsCQAJAAkACQAJAIAEtAABBCmsOBAACAgECCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUNAiADQTM2AhwgAyABNgIUIAMgADYCDEEAIQIMVQsgAygCBCEAIANBADYCBCADIAAgARAxIgBFBEAgAUEBaiEBDAYLIANBMjYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgxUCyADLQAuQQFxBEBB3wEhAgw7CyADKAIEIQAgA0EANgIEIAMgACABEDEiAA0BDEkLQTQhAgw5CyADQTU2AhwgAyABNgIUIAMgADYCDEEAIQIMUQtBNSECDDcLIANBL2otAABBAXENACADQQA2AhwgAyABNgIUIANB6xY2AhAgA0EZNgIMQQAhAgxPC0EzIQIMNQsgASAERgRAQTIhAgxOCwJAIAEtAABBCkYEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQZIXNgIQIANBAzYCDEEAIQIMTgtBMiECDDQLIAEgBEYEQEExIQIMTQsCQCABLQAAIgBBCUYNACAAQSBGDQBBASECAkAgAy0ALEEFaw4EBgQFAA0LIAMgAy8BMkEIcjsBMgwMCyADLQAuQQFxRQ0BIAMtACxBCEcNACADQQA6ACwLQT0hAgwyCyADQQA2AhwgAyABNgIUIANBwhY2AhAgA0EKNgIMQQAhAgxKC0ECIQIMAQtBBCECCyADQQE6ACwgAyADLwEyIAJyOwEyDAYLIAEgBEYEQEEwIQIMRwsgAS0AAEEKRgRAIAFBAWohAQwBCyADLQAuQQFxDQAgA0EANgIcIAMgATYCFCADQdwoNgIQIANBAjYCDEEAIQIMRgtBMCECDCwLIAFBAWohAUExIQIMKwsgASAERgRAQS8hAgxECyABLQAAIgBBCUcgAEEgR3FFBEAgAUEBaiEBIAMtAC5BAXENASADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgxEC0EBIQICQAJAAkACQAJAAkAgAy0ALEECaw4HBQQEAwECAAQLIAMgAy8BMkEIcjsBMgwDC0ECIQIMAQtBBCECCyADQQE6ACwgAyADLwEyIAJyOwEyC0EvIQIMKwsgA0EANgIcIAMgATYCFCADQYQTNgIQIANBCzYCDEEAIQIMQwtB4QEhAgwpCyABIARGBEBBLiECDEILIANBADYCBCADQRI2AgggAyABIAEQMSIADQELQS4hAgwnCyADQS02AhwgAyABNgIUIAMgADYCDEEAIQIMPwtBACEAAkAgAygCOCICRQ0AIAIoAkwiAkUNACADIAIRAAAhAAsgAEUNACAAQRVHDQEgA0HYADYCHCADIAE2AhQgA0GzGzYCECADQRU2AgxBACECDD4LQcwAIQIMJAsgA0EANgIcIAMgATYCFCADQbMONgIQIANBHTYCDEEAIQIMPAsgASAERgRAQc4AIQIMPAsgAS0AACIAQSBGDQIgAEE6Rg0BCyADQQA6ACxBCSECDCELIAMoAgQhACADQQA2AgQgAyAAIAEQMCIADQEMAgsgAy0ALkEBcQRAQd4BIQIMIAsgAygCBCEAIANBADYCBCADIAAgARAwIgBFDQIgA0EqNgIcIAMgADYCDCADIAFBAWo2AhRBACECDDgLIANBywA2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMNwsgAUEBaiEBQcAAIQIMHQsgAUEBaiEBDCwLIAEgBEYEQEErIQIMNQsCQCABLQAAQQpGBEAgAUEBaiEBDAELIAMtAC5BwABxRQ0GCyADLQAyQYABcQRAQQAhAAJAIAMoAjgiAkUNACACKAJcIgJFDQAgAyACEQAAIQALIABFDRIgAEEVRgRAIANBBTYCHCADIAE2AhQgA0GbGzYCECADQRU2AgxBACECDDYLIANBADYCHCADIAE2AhQgA0GQDjYCECADQRQ2AgxBACECDDULIANBMmohAiADEDVBACEAAkAgAygCOCIGRQ0AIAYoAigiBkUNACADIAYRAAAhAAsgAA4WAgEABAQEBAQEBAQEBAQEBAQEBAQEAwQLIANBAToAMAsgAiACLwEAQcAAcjsBAAtBKyECDBgLIANBKTYCHCADIAE2AhQgA0GsGTYCECADQRU2AgxBACECDDALIANBADYCHCADIAE2AhQgA0HlCzYCECADQRE2AgxBACECDC8LIANBADYCHCADIAE2AhQgA0GlCzYCECADQQI2AgxBACECDC4LQQEhByADLwEyIgVBCHFFBEAgAykDIEIAUiEHCwJAIAMtADAEQEEBIQAgAy0AKUEFRg0BIAVBwABxRSAHcUUNAQsCQCADLQAoIgJBAkYEQEEBIQAgAy8BNCIGQeUARg0CQQAhACAFQcAAcQ0CIAZB5ABGDQIgBkHmAGtBAkkNAiAGQcwBRg0CIAZBsAJGDQIMAQtBACEAIAVBwABxDQELQQIhACAFQQhxDQAgBUGABHEEQAJAIAJBAUcNACADLQAuQQpxDQBBBSEADAILQQQhAAwBCyAFQSBxRQRAIAMQNkEAR0ECdCEADAELQQBBAyADKQMgUBshAAsgAEEBaw4FAgAHAQMEC0ERIQIMEwsgA0EBOgAxDCkLQQAhAgJAIAMoAjgiAEUNACAAKAIwIgBFDQAgAyAAEQAAIQILIAJFDSYgAkEVRgRAIANBAzYCHCADIAE2AhQgA0HSGzYCECADQRU2AgxBACECDCsLQQAhAiADQQA2AhwgAyABNgIUIANB3Q42AhAgA0ESNgIMDCoLIANBADYCHCADIAE2AhQgA0H5IDYCECADQQ82AgxBACECDCkLQQAhAAJAIAMoAjgiAkUNACACKAIwIgJFDQAgAyACEQAAIQALIAANAQtBDiECDA4LIABBFUYEQCADQQI2AhwgAyABNgIUIANB0hs2AhAgA0EVNgIMQQAhAgwnCyADQQA2AhwgAyABNgIUIANB3Q42AhAgA0ESNgIMQQAhAgwmC0EqIQIMDAsgASAERwRAIANBCTYCCCADIAE2AgRBKSECDAwLQSYhAgwkCyADIAMpAyAiDCAEIAFrrSIKfSILQgAgCyAMWBs3AyAgCiAMVARAQSUhAgwkCyADKAIEIQAgA0EANgIEIAMgACABIAynaiIBEDIiAEUNACADQQU2AhwgAyABNgIUIAMgADYCDEEAIQIMIwtBDyECDAkLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQTBrDjcXFgABAgMEBQYHFBQUFBQUFAgJCgsMDRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUDg8QERITFAtCAiEKDBYLQgMhCgwVC0IEIQoMFAtCBSEKDBMLQgYhCgwSC0IHIQoMEQtCCCEKDBALQgkhCgwPC0IKIQoMDgtCCyEKDA0LQgwhCgwMC0INIQoMCwtCDiEKDAoLQg8hCgwJC0IKIQoMCAtCCyEKDAcLQgwhCgwGC0INIQoMBQtCDiEKDAQLQg8hCgwDCyADQQA2AhwgAyABNgIUIANBnxU2AhAgA0EMNgIMQQAhAgwhCyABIARGBEBBIiECDCELQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43FRQAAQIDBAUGBxYWFhYWFhYICQoLDA0WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFg4PEBESExYLQgIhCgwUC0IDIQoMEwtCBCEKDBILQgUhCgwRC0IGIQoMEAtCByEKDA8LQgghCgwOC0IJIQoMDQtCCiEKDAwLQgshCgwLC0IMIQoMCgtCDSEKDAkLQg4hCgwIC0IPIQoMBwtCCiEKDAYLQgshCgwFC0IMIQoMBAtCDSEKDAMLQg4hCgwCC0IPIQoMAQtCASEKCyABQQFqIQEgAykDICILQv//////////D1gEQCADIAtCBIYgCoQ3AyAMAgsgA0EANgIcIAMgATYCFCADQbUJNgIQIANBDDYCDEEAIQIMHgtBJyECDAQLQSghAgwDCyADIAE6ACwgA0EANgIAIAdBAWohAUEMIQIMAgsgA0EANgIAIAZBAWohAUEKIQIMAQsgAUEBaiEBQQghAgwACwALQQAhAiADQQA2AhwgAyABNgIUIANBsjg2AhAgA0EINgIMDBcLQQAhAiADQQA2AhwgAyABNgIUIANBgxE2AhAgA0EJNgIMDBYLQQAhAiADQQA2AhwgAyABNgIUIANB3wo2AhAgA0EJNgIMDBULQQAhAiADQQA2AhwgAyABNgIUIANB7RA2AhAgA0EJNgIMDBQLQQAhAiADQQA2AhwgAyABNgIUIANB0hE2AhAgA0EJNgIMDBMLQQAhAiADQQA2AhwgAyABNgIUIANBsjg2AhAgA0EINgIMDBILQQAhAiADQQA2AhwgAyABNgIUIANBgxE2AhAgA0EJNgIMDBELQQAhAiADQQA2AhwgAyABNgIUIANB3wo2AhAgA0EJNgIMDBALQQAhAiADQQA2AhwgAyABNgIUIANB7RA2AhAgA0EJNgIMDA8LQQAhAiADQQA2AhwgAyABNgIUIANB0hE2AhAgA0EJNgIMDA4LQQAhAiADQQA2AhwgAyABNgIUIANBuRc2AhAgA0EPNgIMDA0LQQAhAiADQQA2AhwgAyABNgIUIANBuRc2AhAgA0EPNgIMDAwLQQAhAiADQQA2AhwgAyABNgIUIANBmRM2AhAgA0ELNgIMDAsLQQAhAiADQQA2AhwgAyABNgIUIANBnQk2AhAgA0ELNgIMDAoLQQAhAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMDAkLQQAhAiADQQA2AhwgAyABNgIUIANBsRA2AhAgA0EKNgIMDAgLQQAhAiADQQA2AhwgAyABNgIUIANBux02AhAgA0ECNgIMDAcLQQAhAiADQQA2AhwgAyABNgIUIANBlhY2AhAgA0ECNgIMDAYLQQAhAiADQQA2AhwgAyABNgIUIANB+Rg2AhAgA0ECNgIMDAULQQAhAiADQQA2AhwgAyABNgIUIANBxBg2AhAgA0ECNgIMDAQLIANBAjYCHCADIAE2AhQgA0GpHjYCECADQRY2AgxBACECDAMLQd4AIQIgASAERg0CIAlBCGohByADKAIAIQUCQAJAIAEgBEcEQCAFQZbIAGohCCAEIAVqIAFrIQYgBUF/c0EKaiIFIAFqIQADQCABLQAAIAgtAABHBEBBAiEIDAMLIAVFBEBBACEIIAAhAQwDCyAFQQFrIQUgCEEBaiEIIAQgAUEBaiIBRw0ACyAGIQUgBCEBCyAHQQE2AgAgAyAFNgIADAELIANBADYCACAHIAg2AgALIAcgATYCBCAJKAIMIQACQAJAIAkoAghBAWsOAgQBAAsgA0EANgIcIANBwh42AhAgA0EXNgIMIAMgAEEBajYCFEEAIQIMAwsgA0EANgIcIAMgADYCFCADQdceNgIQIANBCTYCDEEAIQIMAgsgASAERgRAQSghAgwCCyADQQk2AgggAyABNgIEQSchAgwBCyABIARGBEBBASECDAELA0ACQAJAAkAgAS0AAEEKaw4EAAEBAAELIAFBAWohAQwBCyABQQFqIQEgAy0ALkEgcQ0AQQAhAiADQQA2AhwgAyABNgIUIANBoSE2AhAgA0EFNgIMDAILQQEhAiABIARHDQALCyAJQRBqJAAgAkUEQCADKAIMIQAMAQsgAyACNgIcQQAhACADKAIEIgFFDQAgAyABIAQgAygCCBEBACIBRQ0AIAMgBDYCFCADIAE2AgwgASEACyAAC74CAQJ/IABBADoAACAAQeQAaiIBQQFrQQA6AAAgAEEAOgACIABBADoAASABQQNrQQA6AAAgAUECa0EAOgAAIABBADoAAyABQQRrQQA6AABBACAAa0EDcSIBIABqIgBBADYCAEHkACABa0F8cSICIABqIgFBBGtBADYCAAJAIAJBCUkNACAAQQA2AgggAEEANgIEIAFBCGtBADYCACABQQxrQQA2AgAgAkEZSQ0AIABBADYCGCAAQQA2AhQgAEEANgIQIABBADYCDCABQRBrQQA2AgAgAUEUa0EANgIAIAFBGGtBADYCACABQRxrQQA2AgAgAiAAQQRxQRhyIgJrIgFBIEkNACAAIAJqIQADQCAAQgA3AxggAEIANwMQIABCADcDCCAAQgA3AwAgAEEgaiEAIAFBIGsiAUEfSw0ACwsLVgEBfwJAIAAoAgwNAAJAAkACQAJAIAAtADEOAwEAAwILIAAoAjgiAUUNACABKAIwIgFFDQAgACABEQAAIgENAwtBAA8LAAsgAEHKGTYCEEEOIQELIAELGgAgACgCDEUEQCAAQd4fNgIQIABBFTYCDAsLFAAgACgCDEEVRgRAIABBADYCDAsLFAAgACgCDEEWRgRAIABBADYCDAsLBwAgACgCDAsHACAAKAIQCwkAIAAgATYCEAsHACAAKAIUCysAAkAgAEEnTw0AQv//////CSAArYhCAYNQDQAgAEECdEHQOGooAgAPCwALFwAgAEEvTwRAAAsgAEECdEHsOWooAgALvwkBAX9B9C0hAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HqLA8LQZgmDwtB7TEPC0GgNw8LQckpDwtBtCkPC0GWLQ8LQesrDwtBojUPC0HbNA8LQeApDwtB4yQPC0HVJA8LQe4kDwtB5iUPC0HKNA8LQdA3DwtBqjUPC0H1LA8LQfYmDwtBgiIPC0HyMw8LQb4oDwtB5zcPC0HNIQ8LQcAhDwtBuCUPC0HLJQ8LQZYkDwtBjzQPC0HNNQ8LQd0qDwtB7jMPC0GcNA8LQZ4xDwtB9DUPC0HlIg8LQa8lDwtBmTEPC0GyNg8LQfk2DwtBxDIPC0HdLA8LQYIxDwtBwTEPC0GNNw8LQckkDwtB7DYPC0HnKg8LQcgjDwtB4iEPC0HJNw8LQaUiDwtBlCIPC0HbNg8LQd41DwtBhiYPC0G8Kw8LQYsyDwtBoCMPC0H2MA8LQYAsDwtBiSsPC0GkJg8LQfIjDwtBgSgPC0GrMg8LQesnDwtBwjYPC0GiJA8LQc8qDwtB3CMPC0GHJw8LQeQ0DwtBtyIPC0GtMQ8LQdUiDwtBrzQPC0HeJg8LQdYyDwtB9DQPC0GBOA8LQfQ3DwtBkjYPC0GdJw8LQYIpDwtBjSMPC0HXMQ8LQb01DwtBtDcPC0HYMA8LQbYnDwtBmjgPC0GnKg8LQcQnDwtBriMPC0H1Ig8LAAtByiYhAQsgAQsXACAAIAAvAS5B/v8DcSABQQBHcjsBLgsaACAAIAAvAS5B/f8DcSABQQBHQQF0cjsBLgsaACAAIAAvAS5B+/8DcSABQQBHQQJ0cjsBLgsaACAAIAAvAS5B9/8DcSABQQBHQQN0cjsBLgsaACAAIAAvAS5B7/8DcSABQQBHQQR0cjsBLgsaACAAIAAvAS5B3/8DcSABQQBHQQV0cjsBLgsaACAAIAAvAS5Bv/8DcSABQQBHQQZ0cjsBLgsaACAAIAAvAS5B//4DcSABQQBHQQd0cjsBLgsaACAAIAAvAS5B//0DcSABQQBHQQh0cjsBLgsaACAAIAAvAS5B//sDcSABQQBHQQl0cjsBLgs+AQJ/AkAgACgCOCIDRQ0AIAMoAgQiA0UNACAAIAEgAiABayADEQEAIgRBf0cNACAAQeESNgIQQRghBAsgBAs+AQJ/AkAgACgCOCIDRQ0AIAMoAggiA0UNACAAIAEgAiABayADEQEAIgRBf0cNACAAQfwRNgIQQRghBAsgBAs+AQJ/AkAgACgCOCIDRQ0AIAMoAgwiA0UNACAAIAEgAiABayADEQEAIgRBf0cNACAAQewKNgIQQRghBAsgBAs+AQJ/AkAgACgCOCIDRQ0AIAMoAhAiA0UNACAAIAEgAiABayADEQEAIgRBf0cNACAAQfoeNgIQQRghBAsgBAs+AQJ/AkAgACgCOCIDRQ0AIAMoAhQiA0UNACAAIAEgAiABayADEQEAIgRBf0cNACAAQcsQNgIQQRghBAsgBAs+AQJ/AkAgACgCOCIDRQ0AIAMoAhgiA0UNACAAIAEgAiABayADEQEAIgRBf0cNACAAQbcfNgIQQRghBAsgBAs+AQJ/AkAgACgCOCIDRQ0AIAMoAhwiA0UNACAAIAEgAiABayADEQEAIgRBf0cNACAAQb8VNgIQQRghBAsgBAs+AQJ/AkAgACgCOCIDRQ0AIAMoAiwiA0UNACAAIAEgAiABayADEQEAIgRBf0cNACAAQf4INgIQQRghBAsgBAs+AQJ/AkAgACgCOCIDRQ0AIAMoAiAiA0UNACAAIAEgAiABayADEQEAIgRBf0cNACAAQYwdNgIQQRghBAsgBAs+AQJ/AkAgACgCOCIDRQ0AIAMoAiQiA0UNACAAIAEgAiABayADEQEAIgRBf0cNACAAQeYVNgIQQRghBAsgBAs4ACAAAn8gAC8BMkEUcUEURgRAQQEgAC0AKEEBRg0BGiAALwE0QeUARgwBCyAALQApQQVGCzoAMAtZAQJ/AkAgAC0AKEEBRg0AIAAvATQiAUHkAGtB5ABJDQAgAUHMAUYNACABQbACRg0AIAAvATIiAEHAAHENAEEBIQIgAEGIBHFBgARGDQAgAEEocUUhAgsgAguMAQECfwJAAkACQCAALQAqRQ0AIAAtACtFDQAgAC8BMiIBQQJxRQ0BDAILIAAvATIiAUEBcUUNAQtBASECIAAtAChBAUYNACAALwE0IgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNACABQcAAcQ0AQQAhAiABQYgEcUGABEYNACABQShxQQBHIQILIAILcwAgAEEQav0MAAAAAAAAAAAAAAAAAAAAAP0LAwAgAP0MAAAAAAAAAAAAAAAAAAAAAP0LAwAgAEEwav0MAAAAAAAAAAAAAAAAAAAAAP0LAwAgAEEgav0MAAAAAAAAAAAAAAAAAAAAAP0LAwAgAEH9ATYCHAsGACAAEDoLmi0BC38jAEEQayIKJABB3NUAKAIAIglFBEBBnNkAKAIAIgVFBEBBqNkAQn83AgBBoNkAQoCAhICAgMAANwIAQZzZACAKQQhqQXBxQdiq1aoFcyIFNgIAQbDZAEEANgIAQYDZAEEANgIAC0GE2QBBwNkENgIAQdTVAEHA2QQ2AgBB6NUAIAU2AgBB5NUAQX82AgBBiNkAQcCmAzYCAANAIAFBgNYAaiABQfTVAGoiAjYCACACIAFB7NUAaiIDNgIAIAFB+NUAaiADNgIAIAFBiNYAaiABQfzVAGoiAzYCACADIAI2AgAgAUGQ1gBqIAFBhNYAaiICNgIAIAIgAzYCACABQYzWAGogAjYCACABQSBqIgFBgAJHDQALQczZBEGBpgM2AgBB4NUAQazZACgCADYCAEHQ1QBBgKYDNgIAQdzVAEHI2QQ2AgBBzP8HQTg2AgBByNkEIQkLAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEHsAU0EQEHE1QAoAgAiBkEQIABBE2pBcHEgAEELSRsiBEEDdiIAdiIBQQNxBEACQCABQQFxIAByQQFzIgJBA3QiAEHs1QBqIgEgAEH01QBqKAIAIgAoAggiA0YEQEHE1QAgBkF+IAJ3cTYCAAwBCyABIAM2AgggAyABNgIMCyAAQQhqIQEgACACQQN0IgJBA3I2AgQgACACaiIAIAAoAgRBAXI2AgQMEQtBzNUAKAIAIgggBE8NASABBEACQEECIAB0IgJBACACa3IgASAAdHFoIgBBA3QiAkHs1QBqIgEgAkH01QBqKAIAIgIoAggiA0YEQEHE1QAgBkF+IAB3cSIGNgIADAELIAEgAzYCCCADIAE2AgwLIAIgBEEDcjYCBCAAQQN0IgAgBGshBSAAIAJqIAU2AgAgAiAEaiIEIAVBAXI2AgQgCARAIAhBeHFB7NUAaiEAQdjVACgCACEDAn9BASAIQQN2dCIBIAZxRQRAQcTVACABIAZyNgIAIAAMAQsgACgCCAsiASADNgIMIAAgAzYCCCADIAA2AgwgAyABNgIICyACQQhqIQFB2NUAIAQ2AgBBzNUAIAU2AgAMEQtByNUAKAIAIgtFDQEgC2hBAnRB9NcAaigCACIAKAIEQXhxIARrIQUgACECA0ACQCACKAIQIgFFBEAgAkEUaigCACIBRQ0BCyABKAIEQXhxIARrIgMgBUkhAiADIAUgAhshBSABIAAgAhshACABIQIMAQsLIAAoAhghCSAAKAIMIgMgAEcEQEHU1QAoAgAaIAMgACgCCCIBNgIIIAEgAzYCDAwQCyAAQRRqIgIoAgAiAUUEQCAAKAIQIgFFDQMgAEEQaiECCwNAIAIhByABIgNBFGoiAigCACIBDQAgA0EQaiECIAMoAhAiAQ0ACyAHQQA2AgAMDwtBfyEEIABBv39LDQAgAEETaiIBQXBxIQRByNUAKAIAIghFDQBBACAEayEFAkACQAJAAn9BACAEQYACSQ0AGkEfIARB////B0sNABogBEEmIAFBCHZnIgBrdkEBcSAAQQF0a0E+agsiBkECdEH01wBqKAIAIgJFBEBBACEBQQAhAwwBC0EAIQEgBEEZIAZBAXZrQQAgBkEfRxt0IQBBACEDA0ACQCACKAIEQXhxIARrIgcgBU8NACACIQMgByIFDQBBACEFIAIhAQwDCyABIAJBFGooAgAiByAHIAIgAEEddkEEcWpBEGooAgAiAkYbIAEgBxshASAAQQF0IQAgAg0ACwsgASADckUEQEEAIQNBAiAGdCIAQQAgAGtyIAhxIgBFDQMgAGhBAnRB9NcAaigCACEBCyABRQ0BCwNAIAEoAgRBeHEgBGsiAiAFSSEAIAIgBSAAGyEFIAEgAyAAGyEDIAEoAhAiAAR/IAAFIAFBFGooAgALIgENAAsLIANFDQAgBUHM1QAoAgAgBGtPDQAgAygCGCEHIAMgAygCDCIARwRAQdTVACgCABogACADKAIIIgE2AgggASAANgIMDA4LIANBFGoiAigCACIBRQRAIAMoAhAiAUUNAyADQRBqIQILA0AgAiEGIAEiAEEUaiICKAIAIgENACAAQRBqIQIgACgCECIBDQALIAZBADYCAAwNC0HM1QAoAgAiAyAETwRAQdjVACgCACEBAkAgAyAEayICQRBPBEAgASAEaiIAIAJBAXI2AgQgASADaiACNgIAIAEgBEEDcjYCBAwBCyABIANBA3I2AgQgASADaiIAIAAoAgRBAXI2AgRBACEAQQAhAgtBzNUAIAI2AgBB2NUAIAA2AgAgAUEIaiEBDA8LQdDVACgCACIDIARLBEAgBCAJaiIAIAMgBGsiAUEBcjYCBEHc1QAgADYCAEHQ1QAgATYCACAJIARBA3I2AgQgCUEIaiEBDA8LQQAhASAEAn9BnNkAKAIABEBBpNkAKAIADAELQajZAEJ/NwIAQaDZAEKAgISAgIDAADcCAEGc2QAgCkEMakFwcUHYqtWqBXM2AgBBsNkAQQA2AgBBgNkAQQA2AgBBgIAECyIAIARBxwBqIgVqIgZBACAAayIHcSICTwRAQbTZAEEwNgIADA8LAkBB/NgAKAIAIgFFDQBB9NgAKAIAIgggAmohACAAIAFNIAAgCEtxDQBBACEBQbTZAEEwNgIADA8LQYDZAC0AAEEEcQ0EAkACQCAJBEBBhNkAIQEDQCABKAIAIgAgCU0EQCAAIAEoAgRqIAlLDQMLIAEoAggiAQ0ACwtBABA7IgBBf0YNBSACIQZBoNkAKAIAIgFBAWsiAyAAcQRAIAIgAGsgACADakEAIAFrcWohBgsgBCAGTw0FIAZB/v///wdLDQVB/NgAKAIAIgMEQEH02AAoAgAiByAGaiEBIAEgB00NBiABIANLDQYLIAYQOyIBIABHDQEMBwsgBiADayAHcSIGQf7///8HSw0EIAYQOyEAIAAgASgCACABKAIEakYNAyAAIQELAkAgBiAEQcgAak8NACABQX9GDQBBpNkAKAIAIgAgBSAGa2pBACAAa3EiAEH+////B0sEQCABIQAMBwsgABA7QX9HBEAgACAGaiEGIAEhAAwHC0EAIAZrEDsaDAQLIAEiAEF/Rw0FDAMLQQAhAwwMC0EAIQAMCgsgAEF/Rw0CC0GA2QBBgNkAKAIAQQRyNgIACyACQf7///8HSw0BIAIQOyEAQQAQOyEBIABBf0YNASABQX9GDQEgACABTw0BIAEgAGsiBiAEQThqTQ0BC0H02ABB9NgAKAIAIAZqIgE2AgBB+NgAKAIAIAFJBEBB+NgAIAE2AgALAkACQAJAQdzVACgCACICBEBBhNkAIQEDQCAAIAEoAgAiAyABKAIEIgVqRg0CIAEoAggiAQ0ACwwCC0HU1QAoAgAiAUEARyAAIAFPcUUEQEHU1QAgADYCAAtBACEBQYjZACAGNgIAQYTZACAANgIAQeTVAEF/NgIAQejVAEGc2QAoAgA2AgBBkNkAQQA2AgADQCABQYDWAGogAUH01QBqIgI2AgAgAiABQezVAGoiAzYCACABQfjVAGogAzYCACABQYjWAGogAUH81QBqIgM2AgAgAyACNgIAIAFBkNYAaiABQYTWAGoiAjYCACACIAM2AgAgAUGM1gBqIAI2AgAgAUEgaiIBQYACRw0AC0F4IABrQQ9xIgEgAGoiAiAGQThrIgMgAWsiAUEBcjYCBEHg1QBBrNkAKAIANgIAQdDVACABNgIAQdzVACACNgIAIAAgA2pBODYCBAwCCyAAIAJNDQAgAiADSQ0AIAEoAgxBCHENAEF4IAJrQQ9xIgAgAmoiA0HQ1QAoAgAgBmoiByAAayIAQQFyNgIEIAEgBSAGajYCBEHg1QBBrNkAKAIANgIAQdDVACAANgIAQdzVACADNgIAIAIgB2pBODYCBAwBCyAAQdTVACgCAEkEQEHU1QAgADYCAAsgACAGaiEDQYTZACEBAkACQAJAA0AgAyABKAIARwRAIAEoAggiAQ0BDAILCyABLQAMQQhxRQ0BC0GE2QAhAQNAIAEoAgAiAyACTQRAIAMgASgCBGoiBSACSw0DCyABKAIIIQEMAAsACyABIAA2AgAgASABKAIEIAZqNgIEIABBeCAAa0EPcWoiCSAEQQNyNgIEIANBeCADa0EPcWoiBiAEIAlqIgRrIQEgAiAGRgRAQdzVACAENgIAQdDVAEHQ1QAoAgAgAWoiADYCACAEIABBAXI2AgQMCAtB2NUAKAIAIAZGBEBB2NUAIAQ2AgBBzNUAQczVACgCACABaiIANgIAIAQgAEEBcjYCBCAAIARqIAA2AgAMCAsgBigCBCIFQQNxQQFHDQYgBUF4cSEIIAVB/wFNBEAgBUEDdiEDIAYoAggiACAGKAIMIgJGBEBBxNUAQcTVACgCAEF+IAN3cTYCAAwHCyACIAA2AgggACACNgIMDAYLIAYoAhghByAGIAYoAgwiAEcEQCAAIAYoAggiAjYCCCACIAA2AgwMBQsgBkEUaiICKAIAIgVFBEAgBigCECIFRQ0EIAZBEGohAgsDQCACIQMgBSIAQRRqIgIoAgAiBQ0AIABBEGohAiAAKAIQIgUNAAsgA0EANgIADAQLQXggAGtBD3EiASAAaiIHIAZBOGsiAyABayIBQQFyNgIEIAAgA2pBODYCBCACIAVBNyAFa0EPcWpBP2siAyADIAJBEGpJGyIDQSM2AgRB4NUAQazZACgCADYCAEHQ1QAgATYCAEHc1QAgBzYCACADQRBqQYzZACkCADcCACADQYTZACkCADcCCEGM2QAgA0EIajYCAEGI2QAgBjYCAEGE2QAgADYCAEGQ2QBBADYCACADQSRqIQEDQCABQQc2AgAgBSABQQRqIgFLDQALIAIgA0YNACADIAMoAgRBfnE2AgQgAyADIAJrIgU2AgAgAiAFQQFyNgIEIAVB/wFNBEAgBUF4cUHs1QBqIQACf0HE1QAoAgAiAUEBIAVBA3Z0IgNxRQRAQcTVACABIANyNgIAIAAMAQsgACgCCAsiASACNgIMIAAgAjYCCCACIAA2AgwgAiABNgIIDAELQR8hASAFQf///wdNBEAgBUEmIAVBCHZnIgBrdkEBcSAAQQF0a0E+aiEBCyACIAE2AhwgAkIANwIQIAFBAnRB9NcAaiEAQcjVACgCACIDQQEgAXQiBnFFBEAgACACNgIAQcjVACADIAZyNgIAIAIgADYCGCACIAI2AgggAiACNgIMDAELIAVBGSABQQF2a0EAIAFBH0cbdCEBIAAoAgAhAwJAA0AgAyIAKAIEQXhxIAVGDQEgAUEddiEDIAFBAXQhASAAIANBBHFqQRBqIgYoAgAiAw0ACyAGIAI2AgAgAiAANgIYIAIgAjYCDCACIAI2AggMAQsgACgCCCIBIAI2AgwgACACNgIIIAJBADYCGCACIAA2AgwgAiABNgIIC0HQ1QAoAgAiASAETQ0AQdzVACgCACIAIARqIgIgASAEayIBQQFyNgIEQdDVACABNgIAQdzVACACNgIAIAAgBEEDcjYCBCAAQQhqIQEMCAtBACEBQbTZAEEwNgIADAcLQQAhAAsgB0UNAAJAIAYoAhwiAkECdEH01wBqIgMoAgAgBkYEQCADIAA2AgAgAA0BQcjVAEHI1QAoAgBBfiACd3E2AgAMAgsgB0EQQRQgBygCECAGRhtqIAA2AgAgAEUNAQsgACAHNgIYIAYoAhAiAgRAIAAgAjYCECACIAA2AhgLIAZBFGooAgAiAkUNACAAQRRqIAI2AgAgAiAANgIYCyABIAhqIQEgBiAIaiIGKAIEIQULIAYgBUF+cTYCBCABIARqIAE2AgAgBCABQQFyNgIEIAFB/wFNBEAgAUF4cUHs1QBqIQACf0HE1QAoAgAiAkEBIAFBA3Z0IgFxRQRAQcTVACABIAJyNgIAIAAMAQsgACgCCAsiASAENgIMIAAgBDYCCCAEIAA2AgwgBCABNgIIDAELQR8hBSABQf///wdNBEAgAUEmIAFBCHZnIgBrdkEBcSAAQQF0a0E+aiEFCyAEIAU2AhwgBEIANwIQIAVBAnRB9NcAaiEAQcjVACgCACICQQEgBXQiA3FFBEAgACAENgIAQcjVACACIANyNgIAIAQgADYCGCAEIAQ2AgggBCAENgIMDAELIAFBGSAFQQF2a0EAIAVBH0cbdCEFIAAoAgAhAAJAA0AgACICKAIEQXhxIAFGDQEgBUEddiEAIAVBAXQhBSACIABBBHFqQRBqIgMoAgAiAA0ACyADIAQ2AgAgBCACNgIYIAQgBDYCDCAEIAQ2AggMAQsgAigCCCIAIAQ2AgwgAiAENgIIIARBADYCGCAEIAI2AgwgBCAANgIICyAJQQhqIQEMAgsCQCAHRQ0AAkAgAygCHCIBQQJ0QfTXAGoiAigCACADRgRAIAIgADYCACAADQFByNUAIAhBfiABd3EiCDYCAAwCCyAHQRBBFCAHKAIQIANGG2ogADYCACAARQ0BCyAAIAc2AhggAygCECIBBEAgACABNgIQIAEgADYCGAsgA0EUaigCACIBRQ0AIABBFGogATYCACABIAA2AhgLAkAgBUEPTQRAIAMgBCAFaiIAQQNyNgIEIAAgA2oiACAAKAIEQQFyNgIEDAELIAMgBGoiAiAFQQFyNgIEIAMgBEEDcjYCBCACIAVqIAU2AgAgBUH/AU0EQCAFQXhxQezVAGohAAJ/QcTVACgCACIBQQEgBUEDdnQiBXFFBEBBxNUAIAEgBXI2AgAgAAwBCyAAKAIICyIBIAI2AgwgACACNgIIIAIgADYCDCACIAE2AggMAQtBHyEBIAVB////B00EQCAFQSYgBUEIdmciAGt2QQFxIABBAXRrQT5qIQELIAIgATYCHCACQgA3AhAgAUECdEH01wBqIQBBASABdCIEIAhxRQRAIAAgAjYCAEHI1QAgBCAIcjYCACACIAA2AhggAiACNgIIIAIgAjYCDAwBCyAFQRkgAUEBdmtBACABQR9HG3QhASAAKAIAIQQCQANAIAQiACgCBEF4cSAFRg0BIAFBHXYhBCABQQF0IQEgACAEQQRxakEQaiIGKAIAIgQNAAsgBiACNgIAIAIgADYCGCACIAI2AgwgAiACNgIIDAELIAAoAggiASACNgIMIAAgAjYCCCACQQA2AhggAiAANgIMIAIgATYCCAsgA0EIaiEBDAELAkAgCUUNAAJAIAAoAhwiAUECdEH01wBqIgIoAgAgAEYEQCACIAM2AgAgAw0BQcjVACALQX4gAXdxNgIADAILIAlBEEEUIAkoAhAgAEYbaiADNgIAIANFDQELIAMgCTYCGCAAKAIQIgEEQCADIAE2AhAgASADNgIYCyAAQRRqKAIAIgFFDQAgA0EUaiABNgIAIAEgAzYCGAsCQCAFQQ9NBEAgACAEIAVqIgFBA3I2AgQgACABaiIBIAEoAgRBAXI2AgQMAQsgACAEaiIHIAVBAXI2AgQgACAEQQNyNgIEIAUgB2ogBTYCACAIBEAgCEF4cUHs1QBqIQFB2NUAKAIAIQMCf0EBIAhBA3Z0IgIgBnFFBEBBxNUAIAIgBnI2AgAgAQwBCyABKAIICyICIAM2AgwgASADNgIIIAMgATYCDCADIAI2AggLQdjVACAHNgIAQczVACAFNgIACyAAQQhqIQELIApBEGokACABC0MAIABFBEA/AEEQdA8LAkAgAEH//wNxDQAgAEEASA0AIABBEHZAACIAQX9GBEBBtNkAQTA2AgBBfw8LIABBEHQPCwALC5lCIgBBgAgLDQEAAAAAAAAAAgAAAAMAQZgICwUEAAAABQBBqAgLCQYAAAAHAAAACABB5AgLwjJJbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw==","base64"))})},3530:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.enumToMap=function(e,t=[],A=[]){const r=0===(t?.length??0),s=0===(A?.length??0);return Object.fromEntries(Object.entries(e).filter((([,e])=>"number"==typeof e&&(r||t.includes(e))&&(s||!A.includes(e)))))}},7467:(e,t,A)=>{"use strict";const{kClients:r}=A(257),s=A(3315),{kAgent:n,kMockAgentSet:i,kMockAgentGet:o,kDispatches:a,kIsMockActive:c,kNetConnect:g,kGetNetConnect:l,kOptions:h,kFactory:d,kMockAgentRegisterCallHistory:u,kMockAgentIsCallHistoryEnabled:E,kMockAgentAddCallHistoryLog:I,kMockAgentMockCallHistoryInstance:Q,kMockAgentAcceptsNonStandardSearchParameters:B,kMockCallHistoryAddLog:C,kIgnoreTrailingSlash:p}=A(3435),f=A(615),m=A(5846),{matchValue:y,normalizeSearchParams:D,buildAndValidateMockOptions:S}=A(991),{InvalidArgumentError:w,UndiciError:b}=A(4465),R=A(5497),N=A(164),{MockCallHistory:k}=A(4969);e.exports=class extends R{constructor(e={}){super(e);const t=S(e);if(this[g]=!0,this[c]=!0,this[E]=t.enableCallHistory??!1,this[B]=t.acceptNonStandardSearchParameters??!1,this[p]=t.ignoreTrailingSlash??!1,e?.agent&&"function"!=typeof e.agent.dispatch)throw new w("Argument opts.agent must implement Agent");const A=e?.agent?e.agent:new s(e);this[n]=A,this[r]=A[r],this[h]=t,this[E]&&this[u]()}get(e){const t=this[p]?e.replace(/\/$/,""):e;let A=this[o](t);return A||(A=this[d](t),this[i](t,A)),A}dispatch(e,t){this.get(e.origin),this[I](e);const A=this[B],r={...e};if(A&&r.path){const[e,t]=r.path.split("?"),s=D(t,A);r.path=`${e}?${s}`}return this[n].dispatch(r,t)}async close(){this.clearCallHistory(),await this[n].close(),this[r].clear()}deactivate(){this[c]=!1}activate(){this[c]=!0}enableNetConnect(e){if("string"==typeof e||"function"==typeof e||e instanceof RegExp)Array.isArray(this[g])?this[g].push(e):this[g]=[e];else{if("undefined"!=typeof e)throw new w("Unsupported matcher. Must be one of String|Function|RegExp.");this[g]=!0}}disableNetConnect(){this[g]=!1}enableCallHistory(){return this[E]=!0,this}disableCallHistory(){return this[E]=!1,this}getCallHistory(){return this[Q]}clearCallHistory(){void 0!==this[Q]&&this[Q].clear()}get isMockActive(){return this[c]}[u](){void 0===this[Q]&&(this[Q]=new k)}[I](e){this[E]&&(this[u](),this[Q][C](e))}[i](e,t){this[r].set(e,{count:0,dispatcher:t})}[d](e){const t=Object.assign({agent:this},this[h]);return this[h]&&1===this[h].connections?new f(e,t):new m(e,t)}[o](e){const t=this[r].get(e);if(t?.dispatcher)return t.dispatcher;if("string"!=typeof e){const t=this[d]("http://localhost:9999");return this[i](e,t),t}for(const[t,A]of Array.from(this[r]))if(A&&"string"!=typeof t&&y(t,e)){const t=this[d](e);return this[i](e,t),t[a]=A.dispatcher[a],t}}[l](){return this[g]}pendingInterceptors(){const e=this[r];return Array.from(e.entries()).flatMap((([e,t])=>t.dispatcher[a].map((t=>({...t,origin:e}))))).filter((({pending:e})=>e))}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new N}={}){const t=this.pendingInterceptors();if(0!==t.length)throw new b(1===t.length?`1 interceptor is pending:\n\n${e.format(t)}`.trim():`${t.length} interceptors are pending:\n\n${e.format(t)}`.trim())}}},4969:(e,t,A)=>{"use strict";const{kMockCallHistoryAddLog:r}=A(3435),{InvalidArgumentError:s}=A(4465);function n(e,t,A,r){switch(t.operator){case"OR":return r.push(...A(e)),r;case"AND":return A.call({logs:r},e);default:throw new s("options.operator must to be a case insensitive string equal to 'OR' or 'AND'")}}function i(e={}){const t={};if("operator"in e){if("string"!=typeof e.operator||"OR"!==e.operator.toUpperCase()&&"AND"!==e.operator.toUpperCase())throw new s("options.operator must to be a case insensitive string equal to 'OR' or 'AND'");return{...t,operator:e.operator.toUpperCase()}}return t}function o(e){return t=>{if("string"==typeof t||null==t)return this.logs.filter((A=>A[e]===t));if(t instanceof RegExp)return this.logs.filter((A=>t.test(A[e])));throw new s(`${e} parameter should be one of string, regexp, undefined or null`)}}class a{constructor(e={}){this.body=e.body,this.headers=e.headers,this.method=e.method;const t=function(e){try{const t=new URL(e.path,e.origin);return 0!==t.search.length||(t.search=new URLSearchParams(e.query).toString()),t}catch(e){throw new s("An error occurred when computing MockCallHistoryLog.url",{cause:e})}}(e);this.fullUrl=t.toString(),this.origin=t.origin,this.path=t.pathname,this.searchParams=Object.fromEntries(t.searchParams),this.protocol=t.protocol,this.host=t.host,this.port=t.port,this.hash=t.hash}toMap(){return new Map([["protocol",this.protocol],["host",this.host],["port",this.port],["origin",this.origin],["path",this.path],["hash",this.hash],["searchParams",this.searchParams],["fullUrl",this.fullUrl],["method",this.method],["body",this.body],["headers",this.headers]])}toString(){const e="->",t="|";let A="";return this.toMap().forEach(((r,s)=>{"string"!=typeof r&&null!=r||(A=`${A}${s}${e}${r}${t}`),("object"==typeof r&&null!==r||Array.isArray(r))&&(A=`${A}${s}${e}${JSON.stringify(r)}${t}`)})),A.slice(0,-1)}}class c{logs=[];calls(){return this.logs}firstCall(){return this.logs.at(0)}lastCall(){return this.logs.at(-1)}nthCall(e){if("number"!=typeof e)throw new s("nthCall must be called with a number");if(!Number.isInteger(e))throw new s("nthCall must be called with an integer");if(1!==Math.sign(e))throw new s("nthCall must be called with a positive value. use firstCall or lastCall instead");return this.logs.at(e-1)}filterCalls(e,t){if(0===this.logs.length)return this.logs;if("function"==typeof e)return this.logs.filter(e);if(e instanceof RegExp)return this.logs.filter((t=>e.test(t.toString())));if("object"==typeof e&&null!==e){if(0===Object.keys(e).length)return this.logs;const A={operator:"OR",...i(t)};let r=[];"protocol"in e&&(r=n(e.protocol,A,this.filterCallsByProtocol,r)),"host"in e&&(r=n(e.host,A,this.filterCallsByHost,r)),"port"in e&&(r=n(e.port,A,this.filterCallsByPort,r)),"origin"in e&&(r=n(e.origin,A,this.filterCallsByOrigin,r)),"path"in e&&(r=n(e.path,A,this.filterCallsByPath,r)),"hash"in e&&(r=n(e.hash,A,this.filterCallsByHash,r)),"fullUrl"in e&&(r=n(e.fullUrl,A,this.filterCallsByFullUrl,r)),"method"in e&&(r=n(e.method,A,this.filterCallsByMethod,r));return[...new Set(r)]}throw new s("criteria parameter should be one of function, regexp, or object")}filterCallsByProtocol=o.call(this,"protocol");filterCallsByHost=o.call(this,"host");filterCallsByPort=o.call(this,"port");filterCallsByOrigin=o.call(this,"origin");filterCallsByPath=o.call(this,"path");filterCallsByHash=o.call(this,"hash");filterCallsByFullUrl=o.call(this,"fullUrl");filterCallsByMethod=o.call(this,"method");clear(){this.logs=[]}[r](e){const t=new a(e);return this.logs.push(t),t}*[Symbol.iterator](){for(const e of this.calls())yield e}}e.exports.MockCallHistory=c,e.exports.MockCallHistoryLog=a},615:(e,t,A)=>{"use strict";const{promisify:r}=A(7975),s=A(1167),{buildMockDispatch:n}=A(991),{kDispatches:i,kMockAgent:o,kClose:a,kOriginalClose:c,kOrigin:g,kOriginalDispatch:l,kConnected:h,kIgnoreTrailingSlash:d}=A(3435),{MockInterceptor:u}=A(193),E=A(257),{InvalidArgumentError:I}=A(4465);class Q extends s{constructor(e,t){if(!t||!t.agent||"function"!=typeof t.agent.dispatch)throw new I("Argument opts.agent must implement Agent");super(e,t),this[o]=t.agent,this[g]=e,this[d]=t.ignoreTrailingSlash??!1,this[i]=[],this[h]=1,this[l]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=n.call(this),this.close=this[a]}get[E.kConnected](){return this[h]}intercept(e){return new u(e&&{ignoreTrailingSlash:this[d],...e},this[i])}cleanMocks(){this[i]=[]}async[a](){await r(this[c])(),this[h]=0,this[o][E.kClients].delete(this[g])}}e.exports=Q},3123:(e,t,A)=>{"use strict";const{UndiciError:r}=A(4465),s=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED");class n extends r{constructor(e){super(e),this.name="MockNotMatchedError",this.message=e||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}static[Symbol.hasInstance](e){return e&&!0===e[s]}get[s](){return!0}}e.exports={MockNotMatchedError:n}},193:(e,t,A)=>{"use strict";const{getResponseData:r,buildKey:s,addMockDispatch:n}=A(991),{kDispatches:i,kDispatchKey:o,kDefaultHeaders:a,kDefaultTrailers:c,kContentLength:g,kMockDispatch:l,kIgnoreTrailingSlash:h}=A(3435),{InvalidArgumentError:d}=A(4465),{serializePathWithQuery:u}=A(2858);class E{constructor(e){this[l]=e}delay(e){if("number"!=typeof e||!Number.isInteger(e)||e<=0)throw new d("waitInMs must be a valid integer > 0");return this[l].delay=e,this}persist(){return this[l].persist=!0,this}times(e){if("number"!=typeof e||!Number.isInteger(e)||e<=0)throw new d("repeatTimes must be a valid integer > 0");return this[l].times=e,this}}e.exports.MockInterceptor=class{constructor(e,t){if("object"!=typeof e)throw new d("opts must be an object");if("undefined"==typeof e.path)throw new d("opts.path must be defined");if("undefined"==typeof e.method&&(e.method="GET"),"string"==typeof e.path)if(e.query)e.path=u(e.path,e.query);else{const t=new URL(e.path,"data://");e.path=t.pathname+t.search}"string"==typeof e.method&&(e.method=e.method.toUpperCase()),this[o]=s(e),this[i]=t,this[h]=e.ignoreTrailingSlash??!1,this[a]={},this[c]={},this[g]=!1}createMockScopeDispatchData({statusCode:e,data:t,responseOptions:A}){const s=r(t),n=this[g]?{"content-length":s.length}:{};return{statusCode:e,data:t,headers:{...this[a],...n,...A.headers},trailers:{...this[c],...A.trailers}}}validateReplyParameters(e){if("undefined"==typeof e.statusCode)throw new d("statusCode must be defined");if("object"!=typeof e.responseOptions||null===e.responseOptions)throw new d("responseOptions must be an object")}reply(e){if("function"==typeof e){const t=t=>{const A=e(t);if("object"!=typeof A||null===A)throw new d("reply options callback must return an object");const r={data:"",responseOptions:{},...A};return this.validateReplyParameters(r),{...this.createMockScopeDispatchData(r)}},A=n(this[i],this[o],t,{ignoreTrailingSlash:this[h]});return new E(A)}const t={statusCode:e,data:void 0===arguments[1]?"":arguments[1],responseOptions:void 0===arguments[2]?{}:arguments[2]};this.validateReplyParameters(t);const A=this.createMockScopeDispatchData(t),r=n(this[i],this[o],A,{ignoreTrailingSlash:this[h]});return new E(r)}replyWithError(e){if("undefined"==typeof e)throw new d("error must be defined");const t=n(this[i],this[o],{error:e},{ignoreTrailingSlash:this[h]});return new E(t)}defaultReplyHeaders(e){if("undefined"==typeof e)throw new d("headers must be defined");return this[a]=e,this}defaultReplyTrailers(e){if("undefined"==typeof e)throw new d("trailers must be defined");return this[c]=e,this}replyContentLength(){return this[g]=!0,this}},e.exports.MockScope=E},5846:(e,t,A)=>{"use strict";const{promisify:r}=A(7975),s=A(8542),{buildMockDispatch:n}=A(991),{kDispatches:i,kMockAgent:o,kClose:a,kOriginalClose:c,kOrigin:g,kOriginalDispatch:l,kConnected:h,kIgnoreTrailingSlash:d}=A(3435),{MockInterceptor:u}=A(193),E=A(257),{InvalidArgumentError:I}=A(4465);class Q extends s{constructor(e,t){if(!t||!t.agent||"function"!=typeof t.agent.dispatch)throw new I("Argument opts.agent must implement Agent");super(e,t),this[o]=t.agent,this[g]=e,this[d]=t.ignoreTrailingSlash??!1,this[i]=[],this[h]=1,this[l]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=n.call(this),this.close=this[a]}get[E.kConnected](){return this[h]}intercept(e){return new u(e&&{ignoreTrailingSlash:this[d],...e},this[i])}cleanMocks(){this[i]=[]}async[a](){await r(this[c])(),this[h]=0,this[o][E.kClients].delete(this[g])}}e.exports=Q},3435:e=>{"use strict";e.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOriginalDispatch:Symbol("original dispatch"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected"),kIgnoreTrailingSlash:Symbol("ignore trailing slash"),kMockAgentMockCallHistoryInstance:Symbol("mock agent mock call history name"),kMockAgentRegisterCallHistory:Symbol("mock agent register mock call history"),kMockAgentAddCallHistoryLog:Symbol("mock agent add call history log"),kMockAgentIsCallHistoryEnabled:Symbol("mock agent is call history enabled"),kMockAgentAcceptsNonStandardSearchParameters:Symbol("mock agent accepts non standard search parameters"),kMockCallHistoryAddLog:Symbol("mock call history add log")}},991:(e,t,A)=>{"use strict";const{MockNotMatchedError:r}=A(3123),{kDispatches:s,kMockAgent:n,kOriginalDispatch:i,kOrigin:o,kGetNetConnect:a}=A(3435),{serializePathWithQuery:c}=A(2858),{STATUS_CODES:g}=A(7067),{types:{isPromise:l}}=A(7975),{InvalidArgumentError:h}=A(4465);function d(e,t){return"string"==typeof e?e===t:e instanceof RegExp?e.test(t):"function"==typeof e&&!0===e(t)}function u(e){return Object.fromEntries(Object.entries(e).map((([e,t])=>[e.toLocaleLowerCase(),t])))}function E(e,t){if(!Array.isArray(e))return"function"==typeof e.get?e.get(t):u(e)[t.toLocaleLowerCase()];for(let A=0;A<e.length;A+=2)if(e[A].toLocaleLowerCase()===t.toLocaleLowerCase())return e[A+1]}function I(e){const t=e.slice(),A=[];for(let e=0;e<t.length;e+=2)A.push([t[e],t[e+1]]);return Object.fromEntries(A)}function Q(e,t){if("function"==typeof e.headers)return Array.isArray(t)&&(t=I(t)),e.headers(t?u(t):{});if("undefined"==typeof e.headers)return!0;if("object"!=typeof t||"object"!=typeof e.headers)return!1;for(const[A,r]of Object.entries(e.headers)){if(!d(r,E(t,A)))return!1}return!0}function B(e){if("string"!=typeof e)return e;const t=e.split("?",3);if(2!==t.length)return e;const A=new URLSearchParams(t.pop());return A.sort(),[...t,A.toString()].join("?")}function C(e){return Buffer.isBuffer(e)||e instanceof Uint8Array||e instanceof ArrayBuffer?e:"object"==typeof e?JSON.stringify(e):e?e.toString():""}function p(e,t){const A=t.query?c(t.path,t.query):t.path,s="string"==typeof A?B(A):A,n=m(s);let i=e.filter((({consumed:e})=>!e)).filter((({path:e,ignoreTrailingSlash:t})=>t?d(m(B(e)),n):d(B(e),s)));if(0===i.length)throw new r(`Mock dispatch not matched for path '${s}'`);if(i=i.filter((({method:e})=>d(e,t.method))),0===i.length)throw new r(`Mock dispatch not matched for method '${t.method}' on path '${s}'`);if(i=i.filter((({body:e})=>"undefined"==typeof e||d(e,t.body))),0===i.length)throw new r(`Mock dispatch not matched for body '${t.body}' on path '${s}'`);if(i=i.filter((e=>Q(e,t.headers))),0===i.length){const e="object"==typeof t.headers?JSON.stringify(t.headers):t.headers;throw new r(`Mock dispatch not matched for headers '${e}' on path '${s}'`)}return i[0]}function f(e,t){const A=e.findIndex((e=>!!e.consumed&&function(e,{path:t,method:A,body:r,headers:s}){const n=d(e.path,t),i=d(e.method,A),o="undefined"==typeof e.body||d(e.body,r),a=Q(e,s);return n&&i&&o&&a}(e,t)));-1!==A&&e.splice(A,1)}function m(e){for(;e.endsWith("/");)e=e.slice(0,-1);return 0===e.length&&(e="/"),e}function y(e){const{path:t,method:A,body:r,headers:s,query:n}=e;return{path:t,method:A,body:r,headers:s,query:n}}function D(e){const t=Object.keys(e),A=[];for(let r=0;r<t.length;++r){const s=t[r],n=e[s],i=Buffer.from(`${s}`);if(Array.isArray(n))for(let e=0;e<n.length;++e)A.push(i,Buffer.from(`${n[e]}`));else A.push(i,Buffer.from(`${n}`))}return A}function S(e){return g[e]||"unknown"}function w(e,t){const A=y(e),r=p(this[s],A);r.timesInvoked++,r.data.callback&&(r.data={...r.data,...r.data.callback(e)});const{data:{statusCode:n,data:i,headers:o,trailers:a,error:c},delay:g,persist:h}=r,{timesInvoked:d,times:u}=r;if(r.consumed=!h&&d>=u,r.pending=d<u,null!==c)return f(this[s],A),t.onError(c),!0;function E(r,s=i){const c=Array.isArray(e.headers)?I(e.headers):e.headers,g="function"==typeof s?s({...e,headers:c}):s;if(l(g))return void g.then((e=>E(r,e)));const h=C(g),d=D(o),u=D(a);t.onConnect?.((e=>t.onError(e)),null),t.onHeaders?.(n,d,Q,S(n)),t.onData?.(Buffer.from(h)),t.onComplete?.(u),f(r,A)}function Q(){}return"number"==typeof g&&g>0?setTimeout((()=>{E(this[s])}),g):E(this[s]),!0}function b(e,t){const A=new URL(t);return!0===e||!(!Array.isArray(e)||!e.some((e=>d(e,A.host))))}e.exports={getResponseData:C,getMockDispatch:p,addMockDispatch:function(e,t,A,r){const s={...{timesInvoked:0,times:1,persist:!1,consumed:!1,...r},...t,pending:!0,data:{error:null,..."function"==typeof A?{callback:A}:{...A}}};return e.push(s),s},deleteMockDispatch:f,buildKey:y,generateKeyValues:D,matchValue:d,getResponse:async function(e){const t=[];for await(const A of e)t.push(A);return Buffer.concat(t).toString("utf8")},getStatusText:S,mockDispatch:w,buildMockDispatch:function(){const e=this[n],t=this[o],A=this[i];return function(s,n){if(e.isMockActive)try{w.call(this,s,n)}catch(i){if("UND_MOCK_ERR_MOCK_NOT_MATCHED"!==i.code)throw i;{const o=e[a]();if(!1===o)throw new r(`${i.message}: subsequent request to origin ${t} was not allowed (net.connect disabled)`);if(!b(o,t))throw new r(`${i.message}: subsequent request to origin ${t} was not allowed (net.connect is not enabled for this origin)`);A.call(this,s,n)}}else A.call(this,s,n)}},checkNetConnect:b,buildAndValidateMockOptions:function(e){const{agent:t,...A}=e;if("enableCallHistory"in A&&"boolean"!=typeof A.enableCallHistory)throw new h("options.enableCallHistory must to be a boolean");if("acceptNonStandardSearchParameters"in A&&"boolean"!=typeof A.acceptNonStandardSearchParameters)throw new h("options.acceptNonStandardSearchParameters must to be a boolean");if("ignoreTrailingSlash"in A&&"boolean"!=typeof A.ignoreTrailingSlash)throw new h("options.ignoreTrailingSlash must to be a boolean");return A},getHeaderByName:E,buildHeadersFromArray:I,normalizeSearchParams:function(e){if("string"!=typeof e)return e;const t=new URLSearchParams(e),A=new URLSearchParams;for(let[e,r]of t.entries()){e=e.replace("[]","");if(/^(['"]).*\1$/.test(r))A.append(e,r);else if(r.includes(",")){const t=r.split(",");for(const r of t)A.append(e,r)}else A.append(e,r)}return A}}},164:(e,t,A)=>{"use strict";const{Transform:r}=A(7075),{Console:s}=A(7540),n=process.versions.icu?"✅":"Y ",i=process.versions.icu?"❌":"N ";e.exports=class{constructor({disableColors:e}={}){this.transform=new r({transform(e,t,A){A(null,e)}}),this.logger=new s({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){const t=e.map((({method:e,path:t,data:{statusCode:A},persist:r,times:s,timesInvoked:o,origin:a})=>({Method:e,Origin:a,Path:t,"Status code":A,Persistent:r?n:i,Invocations:o,Remaining:r?1/0:s-o})));return this.logger.table(t),this.transform.read().toString()}}},1313:(e,t,A)=>{"use strict";const r=A(3315),s=A(7467),{SnapshotRecorder:n}=A(6632),i=A(832),{InvalidArgumentError:o,UndiciError:a}=A(4465),{validateSnapshotMode:c}=A(5505),g=Symbol("kSnapshotRecorder"),l=Symbol("kSnapshotMode"),h=Symbol("kSnapshotPath"),d=Symbol("kSnapshotLoaded"),u=Symbol("kRealAgent");let E=!1;e.exports=class extends s{constructor(e={}){E||(process.emitWarning("SnapshotAgent is experimental and subject to change","ExperimentalWarning"),E=!0);const{mode:t="record",snapshotPath:A=null,...s}=e;if(super(s),c(t),("playback"===t||"update"===t)&&!A)throw new o(`snapshotPath is required when mode is '${t}'`);this[l]=t,this[h]=A,this[g]=new n({snapshotPath:this[h],mode:this[l],maxSnapshots:e.maxSnapshots,autoFlush:e.autoFlush,flushInterval:e.flushInterval,matchHeaders:e.matchHeaders,ignoreHeaders:e.ignoreHeaders,excludeHeaders:e.excludeHeaders,matchBody:e.matchBody,matchQuery:e.matchQuery,caseSensitive:e.caseSensitive,shouldRecord:e.shouldRecord,shouldPlayback:e.shouldPlayback,excludeUrls:e.excludeUrls}),this[d]=!1,"record"!==this[l]&&"update"!==this[l]||(this[u]=new r(e)),"playback"!==this[l]&&"update"!==this[l]||!this[h]||this.loadSnapshots().catch((()=>{}))}dispatch(e,t){t=i.wrap(t);const A=this[l];if("playback"===A||"update"===A){if(!this[d])return this.#me(e,t);const r=this[g].findSnapshot(e);if(r)return this.#ye(r,t);if("update"===A)return this.#De(e,t);{const A=new a(`No snapshot found for ${e.method||"GET"} ${e.path}`);if(t.onError)return void t.onError(A);throw A}}if("record"===A)return this.#De(e,t)}async#me(e,t){return await this.loadSnapshots(),this.dispatch(e,t)}#De(e,t){const A={statusCode:null,headers:{},trailers:{},body:[]},r=this,s={onRequestStart(e,A){return t.onRequestStart(e,{...A,history:this.history})},onRequestUpgrade:(e,A,r,s)=>t.onRequestUpgrade(e,A,r,s),onResponseStart:(e,r,s,n)=>(A.statusCode=r,A.headers=s,t.onResponseStart(e,r,s,n)),onResponseData:(e,r)=>(A.body.push(r),t.onResponseData(e,r)),onResponseEnd(s,n){A.trailers=n;const i=Buffer.concat(A.body);r[g].record(e,{statusCode:A.statusCode,headers:A.headers,body:i,trailers:A.trailers}).then((()=>{t.onResponseEnd(s,n)})).catch((e=>{t.onResponseError(s,e)}))}};return this[u].dispatch(e,s)}#ye(e,t){try{const{response:A}=e,r={pause(){},resume(){},abort(e){this.aborted=!0,this.reason=e},aborted:!1,paused:!1};t.onRequestStart(r),t.onResponseStart(r,A.statusCode,A.headers);const s=Buffer.from(A.body,"base64");t.onResponseData(r,s),t.onResponseEnd(r,A.trailers)}catch(e){t.onError?.(e)}}async loadSnapshots(e){await this[g].loadSnapshots(e||this[h]),this[d]=!0,"playback"===this[l]&&this.#Se()}async saveSnapshots(e){return this[g].saveSnapshots(e||this[h])}#Se(){for(const e of this[g].getSnapshots()){const{request:t,responses:A,response:r}=e,s=new URL(t.url),n=this.get(s.origin),i=A?A[0]:r;i&&n.intercept({path:s.pathname+s.search,method:t.method,headers:t.headers,body:t.body}).reply(i.statusCode,i.body,{headers:i.headers,trailers:i.trailers}).persist()}}getRecorder(){return this[g]}getMode(){return this[l]}clearSnapshots(){this[g].clear()}resetCallCounts(){this[g].resetCallCounts()}deleteSnapshot(e){return this[g].deleteSnapshot(e)}getSnapshotInfo(e){return this[g].getSnapshotInfo(e)}replaceSnapshots(e){this[g].replaceSnapshots(e)}async close(){await this[g].close(),await(this[u]?.close()),await super.close()}}},6632:(e,t,A)=>{"use strict";const{writeFile:r,readFile:s,mkdir:n}=A(1455),{dirname:i,resolve:o}=A(6760),{setTimeout:a,clearTimeout:c}=A(7997),{InvalidArgumentError:g,UndiciError:l}=A(4465),{hashId:h,isUrlExcludedFactory:d,normalizeHeaders:u,createHeaderFilters:E}=A(5505);function I(e,t,A={}){const r=new URL(e.path,e.origin),s=e._normalizedHeaders||u(e.headers);return e._normalizedHeaders||(e._normalizedHeaders=s),{method:e.method||"GET",url:!1!==A.matchQuery?r.toString():`${r.origin}${r.pathname}`,headers:Q(s,t,A),body:!1!==A.matchBody&&e.body?String(e.body):""}}function Q(e,t,A={}){if(!e||"object"!=typeof e)return{};const{caseSensitive:r=!1}=A,s={},{ignore:n,exclude:i,match:o}=t;for(const[t,A]of Object.entries(e)){const e=r?t:t.toLowerCase();i.has(e)||(n.has(e)||(0===o.size||o.has(e))&&(s[e]=A))}return s}function B(e,t,A={}){if(!e||"object"!=typeof e)return{};const{caseSensitive:r=!1}=A,s={},{exclude:n}=t;for(const[t,A]of Object.entries(e)){const e=r?t:t.toLowerCase();n.has(e)||(s[e]=A)}return s}function C(e){const t=[e.method,e.url];if(e.headers&&"object"==typeof e.headers){const A=Object.keys(e.headers).sort();for(const r of A){const A=Array.isArray(e.headers[r])?e.headers[r]:[e.headers[r]];t.push(r);for(const e of A.sort())t.push(String(e))}}t.push(e.body);const A=t.join("|");return h(A)}e.exports={SnapshotRecorder:class{#we;#be;#Re=new Map;#Ne;#ke=1/0;#Fe=!1;#Ue;constructor(e={}){this.#Ne=e.snapshotPath,this.#ke=e.maxSnapshots||1/0,this.#Fe=e.autoFlush||!1,this.flushInterval=e.flushInterval||3e4,this._flushTimer=null,this.matchOptions={matchHeaders:e.matchHeaders||[],ignoreHeaders:e.ignoreHeaders||[],excludeHeaders:e.excludeHeaders||[],matchBody:!1!==e.matchBody,matchQuery:!1!==e.matchQuery,caseSensitive:e.caseSensitive||!1},this.#Ue=E(this.matchOptions),this.shouldRecord=e.shouldRecord||(()=>!0),this.shouldPlayback=e.shouldPlayback||(()=>!0),this.#be=d(e.excludeUrls),this.#Fe&&this.#Ne&&this.#Me()}async record(e,t){if(!this.shouldRecord(e))return;const A=new URL(e.path,e.origin).toString();if(this.#be(A))return;const r=I(e,this.#Ue,this.matchOptions),s=C(r),n=u(t.headers),i={statusCode:t.statusCode,headers:B(n,this.#Ue,this.matchOptions),body:Buffer.isBuffer(t.body)?t.body.toString("base64"):Buffer.from(String(t.body||"")).toString("base64"),trailers:t.trailers};if(this.#Re.size>=this.#ke&&!this.#Re.has(s)){const e=this.#Re.keys().next().value;this.#Re.delete(e)}const o=this.#Re.get(s);o&&o.responses?(o.responses.push(i),o.timestamp=(new Date).toISOString()):this.#Re.set(s,{request:r,responses:[i],callCount:0,timestamp:(new Date).toISOString()}),this.#Fe&&this.#Ne&&this.#Te()}findSnapshot(e){if(!this.shouldPlayback(e))return;const t=new URL(e.path,e.origin).toString();if(this.#be(t))return;const A=C(I(e,this.#Ue,this.matchOptions)),r=this.#Re.get(A);if(!r)return;const s=r.callCount||0,n=Math.min(s,r.responses.length-1);return r.callCount=s+1,{...r,response:r.responses[n]}}async loadSnapshots(e){const t=e||this.#Ne;if(!t)throw new g("Snapshot path is required");try{const e=await s(o(t),"utf8"),A=JSON.parse(e);if(Array.isArray(A)){this.#Re.clear();for(const{hash:e,snapshot:t}of A)this.#Re.set(e,t)}else this.#Re=new Map(Object.entries(A))}catch(e){if("ENOENT"!==e.code)throw new l(`Failed to load snapshots from ${t}`,{cause:e});this.#Re.clear()}}async saveSnapshots(e){const t=e||this.#Ne;if(!t)throw new g("Snapshot path is required");const A=o(t);await n(i(A),{recursive:!0});const s=Array.from(this.#Re.entries()).map((([e,t])=>({hash:e,snapshot:t})));await r(A,JSON.stringify(s,null,2),{flush:!0})}clear(){this.#Re.clear()}getSnapshots(){return Array.from(this.#Re.values())}size(){return this.#Re.size}resetCallCounts(){for(const e of this.#Re.values())e.callCount=0}deleteSnapshot(e){const t=C(I(e,this.#Ue,this.matchOptions));return this.#Re.delete(t)}getSnapshotInfo(e){const t=C(I(e,this.#Ue,this.matchOptions)),A=this.#Re.get(t);return A?{hash:t,request:A.request,responseCount:A.responses?A.responses.length:A.response?1:0,callCount:A.callCount||0,timestamp:A.timestamp}:null}replaceSnapshots(e){if(this.#Re.clear(),Array.isArray(e))for(const{hash:t,snapshot:A}of e)this.#Re.set(t,A);else e&&"object"==typeof e&&(this.#Re=new Map(Object.entries(e)))}#Me(){return this.#Te()}#ve(){this.#we&&(c(this.#we),this.saveSnapshots().catch((()=>{})),this.#we=null)}#Te(){this.#we=a((()=>{this.saveSnapshots().catch((()=>{})),this.#Fe?this.#we?.refresh():this.#we=null}),1e3)}destroy(){this.#ve(),this.#we&&(c(this.#we),this.#we=null)}async close(){this.#Ne&&0!==this.#Re.size&&await this.saveSnapshots(),this.destroy()}},formatRequestKey:I,createRequestHash:C,filterHeadersForMatching:Q,filterHeadersForStorage:B,createHeaderFilters:E}},5505:(e,t,A)=>{"use strict";const{InvalidArgumentError:r}=A(4465);let s;try{s=A(7598)}catch{}const n=s?.hash?e=>s.hash("sha256",e,"base64url"):e=>Buffer.from(e).toString("base64url");function i(e){return Array.isArray(e)&&!(1&e.length)}const o=["record","playback","update"];e.exports={createHeaderFilters:function(e={}){const{ignoreHeaders:t=[],excludeHeaders:A=[],matchHeaders:r=[],caseSensitive:s=!1}=e;return{ignore:new Set(t.map((e=>s?e:e.toLowerCase()))),exclude:new Set(A.map((e=>s?e:e.toLowerCase()))),match:new Set(r.map((e=>s?e:e.toLowerCase())))}},hashId:n,isUndiciHeaders:i,normalizeHeaders:function(e){const t={};if(!e)return t;if(i(e)){for(let A=0;A<e.length;A+=2){const r=e[A],s=e[A+1];if(r&&void 0!==s){const e=Buffer.isBuffer(r)?r.toString():r,A=Buffer.isBuffer(s)?s.toString():s;t[e.toLowerCase()]=A}}return t}if(e&&"object"==typeof e)for(const[A,r]of Object.entries(e))A&&"string"==typeof A&&(t[A.toLowerCase()]=Array.isArray(r)?r.join(", "):String(r));return t},isUrlExcludedFactory:function(e=[]){return 0===e.length?()=>!1:function(t){let A;for(const r of e)if("string"==typeof r){if(A||(A=t.toLowerCase()),A.includes(r.toLowerCase()))return!0}else if(r instanceof RegExp&&r.test(t))return!0;return!1}},validateSnapshotMode:function(e){if(!o.includes(e))throw new r(`Invalid snapshot mode: ${e}. Must be one of: ${o.join(", ")}`)}}},9453:(e,t,A)=>{"use strict";const{safeHTTPMethods:r,pathHasQueryOrFragment:s}=A(2858),{serializePathWithQuery:n}=A(2858);e.exports={makeCacheKey:function(e){if(!e.origin)throw new Error("opts.origin is undefined");let t=e.path||"/";return e.query&&!s(e.path)&&(t=n(t,e.query)),{origin:e.origin.toString(),method:e.method,path:t,headers:e.headers}},normalizeHeaders:function(e){let t;if(null==e.headers)t={};else if("function"==typeof e.headers[Symbol.iterator]){t={};for(const A of e.headers){if(!Array.isArray(A))throw new Error("opts.headers is not a valid header map");const[e,r]=A;if("string"!=typeof e||"string"!=typeof r)throw new Error("opts.headers is not a valid header map");t[e.toLowerCase()]=r}}else{if("object"!=typeof e.headers)throw new Error("opts.headers is not an object");t={};for(const A of Object.keys(e.headers))t[A.toLowerCase()]=e.headers[A]}return t},assertCacheKey:function(e){if("object"!=typeof e)throw new TypeError("expected key to be object, got "+typeof e);for(const t of["origin","method","path"])if("string"!=typeof e[t])throw new TypeError(`expected key.${t} to be string, got ${typeof e[t]}`);if(void 0!==e.headers&&"object"!=typeof e.headers)throw new TypeError("expected headers to be object, got "+typeof e)},assertCacheValue:function(e){if("object"!=typeof e)throw new TypeError("expected value to be object, got "+typeof e);for(const t of["statusCode","cachedAt","staleAt","deleteAt"])if("number"!=typeof e[t])throw new TypeError(`expected value.${t} to be number, got ${typeof e[t]}`);if("string"!=typeof e.statusMessage)throw new TypeError("expected value.statusMessage to be string, got "+typeof e.statusMessage);if(null!=e.headers&&"object"!=typeof e.headers)throw new TypeError("expected value.rawHeaders to be object, got "+typeof e.headers);if(void 0!==e.vary&&"object"!=typeof e.vary)throw new TypeError("expected value.vary to be object, got "+typeof e.vary);if(void 0!==e.etag&&"string"!=typeof e.etag)throw new TypeError("expected value.etag to be string, got "+typeof e.etag)},parseCacheControlHeader:function(e){const t={};let A;if(Array.isArray(e)){A=[];for(const t of e)A.push(...t.split(","))}else A=e.split(",");for(let e=0;e<A.length;e++){const r=A[e].toLowerCase(),s=r.indexOf("=");let n,i;switch(-1!==s?(n=r.substring(0,s).trimStart(),i=r.substring(s+1)):n=r.trim(),n){case"min-fresh":case"max-stale":case"max-age":case"s-maxage":case"stale-while-revalidate":case"stale-if-error":{if(void 0===i||" "===i[0])continue;i.length>=2&&'"'===i[0]&&'"'===i[i.length-1]&&(i=i.substring(1,i.length-1));const e=parseInt(i,10);if(e!=e)continue;if("max-age"===n&&n in t&&t[n]>=e)continue;t[n]=e;break}case"private":case"no-cache":if(i){if('"'===i[0]){const r=[i.substring(1)];let s='"'===i[i.length-1];if(!s)for(let t=e+1;t<A.length;t++){const e=A[t],n=e.length;if(r.push(e.trim()),0!==n&&'"'===e[n-1]){s=!0;break}}if(s){let e=r[r.length-1];'"'===e[e.length-1]&&(e=e.substring(0,e.length-1),r[r.length-1]=e),t[n]=n in t?t[n].concat(r):r}}else t[n]=n in t?t[n].concat(i):[i];break}case"public":case"no-store":case"must-revalidate":case"proxy-revalidate":case"immutable":case"no-transform":case"must-understand":case"only-if-cached":if(i)continue;t[n]=!0;break;default:continue}}return t},parseVaryHeader:function(e,t){if("string"==typeof e&&e.includes("*"))return t;const A={},r="string"==typeof e?e.split(","):e;for(const e of r){const r=e.trim().toLowerCase();A[r]=t[r]??null}return A},isEtagUsable:function(e){return!(e.length<=2)&&('"'===e[0]&&'"'===e[e.length-1]?!('"'===e[1]||e.startsWith('"W/')):!(!e.startsWith('W/"')||'"'!==e[e.length-1])&&4!==e.length)},assertCacheMethods:function(e,t="CacheMethods"){if(!Array.isArray(e))throw new TypeError(`expected type of ${t} needs to be an array, got ${null===e?"null":typeof e}`);if(0===e.length)throw new TypeError(`${t} needs to have at least one method`);for(const A of e)if(!r.includes(A))throw new TypeError(`element of ${t}-array needs to be one of following values: ${r.join(", ")}, got ${A}`)},assertCacheStore:function(e,t="CacheStore"){if("object"!=typeof e||null===e)throw new TypeError(`expected type of ${t} to be a CacheStore, got ${null===e?"null":typeof e}`);for(const A of["get","createWriteStream","delete"])if("function"!=typeof e[A])throw new TypeError(`${t} needs to have a \`${A}()\` function`)}}},8851:e=>{"use strict";e.exports={parseHttpDate:function(e){switch(e[3]){case",":return function(e){if(29!==e.length||" "!==e[4]||" "!==e[7]||" "!==e[11]||" "!==e[16]||":"!==e[19]||":"!==e[22]||" "!==e[25]||"G"!==e[26]||"M"!==e[27]||"T"!==e[28])return;let t=-1;if("S"===e[0]&&"u"===e[1]&&"n"===e[2])t=0;else if("M"===e[0]&&"o"===e[1]&&"n"===e[2])t=1;else if("T"===e[0]&&"u"===e[1]&&"e"===e[2])t=2;else if("W"===e[0]&&"e"===e[1]&&"d"===e[2])t=3;else if("T"===e[0]&&"h"===e[1]&&"u"===e[2])t=4;else if("F"===e[0]&&"r"===e[1]&&"i"===e[2])t=5;else{if("S"!==e[0]||"a"!==e[1]||"t"!==e[2])return;t=6}let A=0;if("0"===e[5]){const t=e.charCodeAt(6);if(t<49||t>57)return;A=t-48}else{const t=e.charCodeAt(5);if(t<49||t>51)return;const r=e.charCodeAt(6);if(r<48||r>57)return;A=10*(t-48)+(r-48)}let r=-1;if("J"===e[8]&&"a"===e[9]&&"n"===e[10])r=0;else if("F"===e[8]&&"e"===e[9]&&"b"===e[10])r=1;else if("M"===e[8]&&"a"===e[9])if("r"===e[10])r=2;else{if("y"!==e[10])return;r=4}else if("J"===e[8])if("a"===e[9]&&"n"===e[10])r=0;else{if("u"!==e[9])return;if("n"===e[10])r=5;else{if("l"!==e[10])return;r=6}}else if("A"===e[8])if("p"===e[9]&&"r"===e[10])r=3;else{if("u"!==e[9]||"g"!==e[10])return;r=7}else if("S"===e[8]&&"e"===e[9]&&"p"===e[10])r=8;else if("O"===e[8]&&"c"===e[9]&&"t"===e[10])r=9;else if("N"===e[8]&&"o"===e[9]&&"v"===e[10])r=10;else{if("D"!==e[8]||"e"!==e[9]||"c"!==e[10])return;r=11}const s=e.charCodeAt(12);if(s<48||s>57)return;const n=e.charCodeAt(13);if(n<48||n>57)return;const i=e.charCodeAt(14);if(i<48||i>57)return;const o=e.charCodeAt(15);if(o<48||o>57)return;const a=1e3*(s-48)+100*(n-48)+10*(i-48)+(o-48);let c=0;if("0"===e[17]){const t=e.charCodeAt(18);if(t<48||t>57)return;c=t-48}else{const t=e.charCodeAt(17);if(t<48||t>50)return;const A=e.charCodeAt(18);if(A<48||A>57)return;if(50===t&&A>51)return;c=10*(t-48)+(A-48)}let g=0;if("0"===e[20]){const t=e.charCodeAt(21);if(t<48||t>57)return;g=t-48}else{const t=e.charCodeAt(20);if(t<48||t>53)return;const A=e.charCodeAt(21);if(A<48||A>57)return;g=10*(t-48)+(A-48)}let l=0;if("0"===e[23]){const t=e.charCodeAt(24);if(t<48||t>57)return;l=t-48}else{const t=e.charCodeAt(23);if(t<48||t>53)return;const A=e.charCodeAt(24);if(A<48||A>57)return;l=10*(t-48)+(A-48)}const h=new Date(Date.UTC(a,r,A,c,g,l));return h.getUTCDay()===t?h:void 0}(e);case" ":return function(e){if(24!==e.length||" "!==e[7]||" "!==e[10]||" "!==e[19])return;let t=-1;if("S"===e[0]&&"u"===e[1]&&"n"===e[2])t=0;else if("M"===e[0]&&"o"===e[1]&&"n"===e[2])t=1;else if("T"===e[0]&&"u"===e[1]&&"e"===e[2])t=2;else if("W"===e[0]&&"e"===e[1]&&"d"===e[2])t=3;else if("T"===e[0]&&"h"===e[1]&&"u"===e[2])t=4;else if("F"===e[0]&&"r"===e[1]&&"i"===e[2])t=5;else{if("S"!==e[0]||"a"!==e[1]||"t"!==e[2])return;t=6}let A=-1;if("J"===e[4]&&"a"===e[5]&&"n"===e[6])A=0;else if("F"===e[4]&&"e"===e[5]&&"b"===e[6])A=1;else if("M"===e[4]&&"a"===e[5])if("r"===e[6])A=2;else{if("y"!==e[6])return;A=4}else if("J"===e[4])if("a"===e[5]&&"n"===e[6])A=0;else{if("u"!==e[5])return;if("n"===e[6])A=5;else{if("l"!==e[6])return;A=6}}else if("A"===e[4])if("p"===e[5]&&"r"===e[6])A=3;else{if("u"!==e[5]||"g"!==e[6])return;A=7}else if("S"===e[4]&&"e"===e[5]&&"p"===e[6])A=8;else if("O"===e[4]&&"c"===e[5]&&"t"===e[6])A=9;else if("N"===e[4]&&"o"===e[5]&&"v"===e[6])A=10;else{if("D"!==e[4]||"e"!==e[5]||"c"!==e[6])return;A=11}let r=0;if(" "===e[8]){const t=e.charCodeAt(9);if(t<49||t>57)return;r=t-48}else{const t=e.charCodeAt(8);if(t<49||t>51)return;const A=e.charCodeAt(9);if(A<48||A>57)return;r=10*(t-48)+(A-48)}let s=0;if("0"===e[11]){const t=e.charCodeAt(12);if(t<48||t>57)return;s=t-48}else{const t=e.charCodeAt(11);if(t<48||t>50)return;const A=e.charCodeAt(12);if(A<48||A>57)return;if(50===t&&A>51)return;s=10*(t-48)+(A-48)}let n=0;if("0"===e[14]){const t=e.charCodeAt(15);if(t<48||t>57)return;n=t-48}else{const t=e.charCodeAt(14);if(t<48||t>53)return;const A=e.charCodeAt(15);if(A<48||A>57)return;n=10*(t-48)+(A-48)}let i=0;if("0"===e[17]){const t=e.charCodeAt(18);if(t<48||t>57)return;i=t-48}else{const t=e.charCodeAt(17);if(t<48||t>53)return;const A=e.charCodeAt(18);if(A<48||A>57)return;i=10*(t-48)+(A-48)}const o=e.charCodeAt(20);if(o<48||o>57)return;const a=e.charCodeAt(21);if(a<48||a>57)return;const c=e.charCodeAt(22);if(c<48||c>57)return;const g=e.charCodeAt(23);if(g<48||g>57)return;const l=1e3*(o-48)+100*(a-48)+10*(c-48)+(g-48),h=new Date(Date.UTC(l,A,r,s,n,i));return h.getUTCDay()===t?h:void 0}(e);default:return function(e){let t=-1,A=-1;if("S"===e[0])"u"===e[1]&&"n"===e[2]&&"d"===e[3]&&"a"===e[4]&&"y"===e[5]?(A=0,t=6):"a"===e[1]&&"t"===e[2]&&"u"===e[3]&&"r"===e[4]&&"d"===e[5]&&"a"===e[6]&&"y"===e[7]&&(A=6,t=8);else if("M"===e[0]&&"o"===e[1]&&"n"===e[2]&&"d"===e[3]&&"a"===e[4]&&"y"===e[5])A=1,t=6;else if("T"===e[0])"u"===e[1]&&"e"===e[2]&&"s"===e[3]&&"d"===e[4]&&"a"===e[5]&&"y"===e[6]?(A=2,t=7):"h"===e[1]&&"u"===e[2]&&"r"===e[3]&&"s"===e[4]&&"d"===e[5]&&"a"===e[6]&&"y"===e[7]&&(A=4,t=8);else if("W"===e[0]&&"e"===e[1]&&"d"===e[2]&&"n"===e[3]&&"e"===e[4]&&"s"===e[5]&&"d"===e[6]&&"a"===e[7]&&"y"===e[8])A=3,t=9;else{if("F"!==e[0]||"r"!==e[1]||"i"!==e[2]||"d"!==e[3]||"a"!==e[4]||"y"!==e[5])return;A=5,t=6}if(","!==e[t]||e.length-t-1!=23||" "!==e[t+1]||"-"!==e[t+4]||"-"!==e[t+8]||" "!==e[t+11]||":"!==e[t+14]||":"!==e[t+17]||" "!==e[t+20]||"G"!==e[t+21]||"M"!==e[t+22]||"T"!==e[t+23])return;let r=0;if("0"===e[t+2]){const A=e.charCodeAt(t+3);if(A<49||A>57)return;r=A-48}else{const A=e.charCodeAt(t+2);if(A<49||A>51)return;const s=e.charCodeAt(t+3);if(s<48||s>57)return;r=10*(A-48)+(s-48)}let s=-1;if("J"===e[t+5]&&"a"===e[t+6]&&"n"===e[t+7])s=0;else if("F"===e[t+5]&&"e"===e[t+6]&&"b"===e[t+7])s=1;else if("M"===e[t+5]&&"a"===e[t+6]&&"r"===e[t+7])s=2;else if("A"===e[t+5]&&"p"===e[t+6]&&"r"===e[t+7])s=3;else if("M"===e[t+5]&&"a"===e[t+6]&&"y"===e[t+7])s=4;else if("J"===e[t+5]&&"u"===e[t+6]&&"n"===e[t+7])s=5;else if("J"===e[t+5]&&"u"===e[t+6]&&"l"===e[t+7])s=6;else if("A"===e[t+5]&&"u"===e[t+6]&&"g"===e[t+7])s=7;else if("S"===e[t+5]&&"e"===e[t+6]&&"p"===e[t+7])s=8;else if("O"===e[t+5]&&"c"===e[t+6]&&"t"===e[t+7])s=9;else if("N"===e[t+5]&&"o"===e[t+6]&&"v"===e[t+7])s=10;else{if("D"!==e[t+5]||"e"!==e[t+6]||"c"!==e[t+7])return;s=11}const n=e.charCodeAt(t+9);if(n<48||n>57)return;const i=e.charCodeAt(t+10);if(i<48||i>57)return;let o=10*(n-48)+(i-48);o+=o<70?2e3:1900;let a=0;if("0"===e[t+12]){const A=e.charCodeAt(t+13);if(A<48||A>57)return;a=A-48}else{const A=e.charCodeAt(t+12);if(A<48||A>50)return;const r=e.charCodeAt(t+13);if(r<48||r>57)return;if(50===A&&r>51)return;a=10*(A-48)+(r-48)}let c=0;if("0"===e[t+15]){const A=e.charCodeAt(t+16);if(A<48||A>57)return;c=A-48}else{const A=e.charCodeAt(t+15);if(A<48||A>53)return;const r=e.charCodeAt(t+16);if(r<48||r>57)return;c=10*(A-48)+(r-48)}let g=0;if("0"===e[t+18]){const A=e.charCodeAt(t+19);if(A<48||A>57)return;g=A-48}else{const A=e.charCodeAt(t+18);if(A<48||A>53)return;const r=e.charCodeAt(t+19);if(r<48||r>57)return;g=10*(A-48)+(r-48)}const l=new Date(Date.UTC(o,s,r,a,c,g));return l.getUTCDay()===A?l:void 0}(e)}}}},9250:e=>{"use strict";e.exports={createDeferredPromise:function(){let e,t;return{promise:new Promise(((A,r)=>{e=A,t=r})),resolve:e,reject:t}}}},4304:(e,t,A)=>{"use strict";const{kConnected:r,kPending:s,kRunning:n,kSize:i,kFree:o,kQueued:a}=A(257);e.exports={ClientStats:class{constructor(e){this.connected=e[r],this.pending=e[s],this.running=e[n],this.size=e[i]}},PoolStats:class{constructor(e){this.connected=e[r],this.free=e[o],this.pending=e[s],this.queued=e[a],this.running=e[n],this.size=e[i]}}}},3801:e=>{"use strict";let t=0;const A=1e3;let r;const s=Symbol("kFastTimer"),n=[];function i(){t+=499;let e=0,A=n.length;for(;e<A;){const r=n[e];0===r._state?(r._idleStart=t-499,r._state=1):1===r._state&&t>=r._idleStart+r._idleTimeout&&(r._state=-1,r._idleStart=-1,r._onTimeout(r._timerArg)),-1===r._state?(r._state=-2,0!=--A&&(n[e]=n[A])):++e}n.length=A,0!==n.length&&o()}function o(){r?.refresh?r.refresh():(clearTimeout(r),r=setTimeout(i,499),r?.unref())}class a{[s]=!0;_state=-2;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,t,A){this._onTimeout=e,this._idleTimeout=t,this._timerArg=A,this.refresh()}refresh(){-2===this._state&&n.push(this),r&&1!==n.length||o(),this._state=0}clear(){this._state=-1,this._idleStart=-1}}e.exports={setTimeout:(e,t,r)=>t<=A?setTimeout(e,t,r):new a(e,t,r),clearTimeout(e){e[s]?e.clear():clearTimeout(e)},setFastTimeout:(e,t,A)=>new a(e,t,A),clearFastTimeout(e){e.clear()},now:()=>t,tick(e=0){t+=e-A+1,i(),i()},reset(){t=0,n.length=0,clearTimeout(r),r=null},kFastTimer:s}},4420:(e,t,A)=>{"use strict";const r=A(4589),{kConstruct:s}=A(257),{urlEquals:n,getFieldValues:i}=A(3932),{kEnumerableProperty:o,isDisturbed:a}=A(2858),{webidl:c}=A(6097),{cloneResponse:g,fromInnerResponse:l,getResponseState:h}=A(4821),{Request:d,fromInnerRequest:u,getRequestState:E}=A(4609),{fetching:I}=A(7388),{urlIsHttpHttpsScheme:Q,readAllBytes:B}=A(6686),{createDeferredPromise:C}=A(9250);class p{#Le;constructor(){arguments[0]!==s&&c.illegalConstructor(),c.util.markAsUncloneable(this),this.#Le=arguments[1]}async match(e,t={}){c.brandCheck(this,p);const A="Cache.match";c.argumentLengthCheck(arguments,1,A),e=c.converters.RequestInfo(e),t=c.converters.CacheQueryOptions(t,A,"options");const r=this.#He(e,t,1);if(0!==r.length)return r[0]}async matchAll(e=void 0,t={}){c.brandCheck(this,p);return void 0!==e&&(e=c.converters.RequestInfo(e)),t=c.converters.CacheQueryOptions(t,"Cache.matchAll","options"),this.#He(e,t)}async add(e){c.brandCheck(this,p);c.argumentLengthCheck(arguments,1,"Cache.add");const t=[e=c.converters.RequestInfo(e)],A=this.addAll(t);return await A}async addAll(e){c.brandCheck(this,p);const t="Cache.addAll";c.argumentLengthCheck(arguments,1,t);const A=[],r=[];for(let A of e){if(void 0===A)throw c.errors.conversionFailed({prefix:t,argument:"Argument 1",types:["undefined is not allowed"]});if(A=c.converters.RequestInfo(A),"string"==typeof A)continue;const e=E(A);if(!Q(e.url)||"GET"!==e.method)throw c.errors.exception({header:t,message:"Expected http/s scheme when method is not GET."})}const s=[];for(const n of e){const e=E(new d(n));if(!Q(e.url))throw c.errors.exception({header:t,message:"Expected http/s scheme."});e.initiator="fetch",e.destination="subresource",r.push(e);const o=C();s.push(I({request:e,processResponse(e){if("error"===e.type||206===e.status||e.status<200||e.status>299)o.reject(c.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(e.headersList.contains("vary")){const t=i(e.headersList.get("vary"));for(const e of t)if("*"===e){o.reject(c.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(const e of s)e.abort();return}}},processResponseEndOfBody(e){e.aborted?o.reject(new DOMException("aborted","AbortError")):o.resolve(e)}})),A.push(o.promise)}const n=Promise.all(A),o=await n,a=[];let g=0;for(const e of o){const t={type:"put",request:r[g],response:e};a.push(t),g++}const l=C();let h=null;try{this.#Ye(a)}catch(e){h=e}return queueMicrotask((()=>{null===h?l.resolve(void 0):l.reject(h)})),l.promise}async put(e,t){c.brandCheck(this,p);const A="Cache.put";c.argumentLengthCheck(arguments,2,A),e=c.converters.RequestInfo(e),t=c.converters.Response(t,A,"response");let r=null;if(r=c.is.Request(e)?E(e):E(new d(e)),!Q(r.url)||"GET"!==r.method)throw c.errors.exception({header:A,message:"Expected an http/s scheme when method is not GET"});const s=h(t);if(206===s.status)throw c.errors.exception({header:A,message:"Got 206 status"});if(s.headersList.contains("vary")){const e=i(s.headersList.get("vary"));for(const t of e)if("*"===t)throw c.errors.exception({header:A,message:"Got * vary field value"})}if(s.body&&(a(s.body.stream)||s.body.stream.locked))throw c.errors.exception({header:A,message:"Response body is locked or disturbed"});const n=g(s),o=C();if(null!=s.body){const e=s.body.stream.getReader();B(e,o.resolve,o.reject)}else o.resolve(void 0);const l=[],u={type:"put",request:r,response:n};l.push(u);const I=await o.promise;null!=n.body&&(n.body.source=I);const f=C();let m=null;try{this.#Ye(l)}catch(e){m=e}return queueMicrotask((()=>{null===m?f.resolve():f.reject(m)})),f.promise}async delete(e,t={}){c.brandCheck(this,p);const A="Cache.delete";c.argumentLengthCheck(arguments,1,A),e=c.converters.RequestInfo(e),t=c.converters.CacheQueryOptions(t,A,"options");let s=null;if(c.is.Request(e)){if(s=E(e),"GET"!==s.method&&!t.ignoreMethod)return!1}else r("string"==typeof e),s=E(new d(e));const n=[],i={type:"delete",request:s,options:t};n.push(i);const o=C();let a,g=null;try{a=this.#Ye(n)}catch(e){g=e}return queueMicrotask((()=>{null===g?o.resolve(!!a?.length):o.reject(g)})),o.promise}async keys(e=void 0,t={}){c.brandCheck(this,p);void 0!==e&&(e=c.converters.RequestInfo(e)),t=c.converters.CacheQueryOptions(t,"Cache.keys","options");let A=null;if(void 0!==e)if(c.is.Request(e)){if(A=E(e),"GET"!==A.method&&!t.ignoreMethod)return[]}else"string"==typeof e&&(A=E(new d(e)));const r=C(),s=[];if(void 0===e)for(const e of this.#Le)s.push(e[0]);else{const e=this.#xe(A,t);for(const t of e)s.push(t[0])}return queueMicrotask((()=>{const e=[];for(const t of s){const A=u(t,void 0,(new AbortController).signal,"immutable");e.push(A)}r.resolve(Object.freeze(e))})),r.promise}#Ye(e){const t=this.#Le,A=[...t],s=[],n=[];try{for(const A of e){if("delete"!==A.type&&"put"!==A.type)throw c.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if("delete"===A.type&&null!=A.response)throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#xe(A.request,A.options,s).length)throw new DOMException("???","InvalidStateError");let e;if("delete"===A.type){if(e=this.#xe(A.request,A.options),0===e.length)return[];for(const A of e){const e=t.indexOf(A);r(-1!==e),t.splice(e,1)}}else if("put"===A.type){if(null==A.response)throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});const n=A.request;if(!Q(n.url))throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if("GET"!==n.method)throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(null!=A.options)throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});e=this.#xe(A.request);for(const A of e){const e=t.indexOf(A);r(-1!==e),t.splice(e,1)}t.push([A.request,A.response]),s.push([A.request,A.response])}n.push([A.request,A.response])}return n}catch(e){throw this.#Le.length=0,this.#Le=A,e}}#xe(e,t,A){const r=[],s=A??this.#Le;for(const A of s){const[s,n]=A;this.#Ve(e,s,n,t)&&r.push(A)}return r}#Ve(e,t,A=null,r){const s=new URL(e.url),o=new URL(t.url);if(r?.ignoreSearch&&(o.search="",s.search=""),!n(s,o,!0))return!1;if(null==A||r?.ignoreVary||!A.headersList.contains("vary"))return!0;const a=i(A.headersList.get("vary"));for(const A of a){if("*"===A)return!1;if(t.headersList.get(A)!==e.headersList.get(A))return!1}return!0}#He(e,t,A=1/0){let r=null;if(void 0!==e)if(c.is.Request(e)){if(r=E(e),"GET"!==r.method&&!t.ignoreMethod)return[]}else"string"==typeof e&&(r=E(new d(e)));const s=[];if(void 0===e)for(const e of this.#Le)s.push(e[1]);else{const e=this.#xe(r,t);for(const t of e)s.push(t[1])}const n=[];for(const e of s){const t=l(e,"immutable");if(n.push(t.clone()),n.length>=A)break}return Object.freeze(n)}}Object.defineProperties(p.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:o,matchAll:o,add:o,addAll:o,put:o,delete:o,keys:o});const f=[{key:"ignoreSearch",converter:c.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:c.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:c.converters.boolean,defaultValue:()=>!1}];c.converters.CacheQueryOptions=c.dictionaryConverter(f),c.converters.MultiCacheQueryOptions=c.dictionaryConverter([...f,{key:"cacheName",converter:c.converters.DOMString}]),c.converters.Response=c.interfaceConverter(c.is.Response,"Response"),c.converters["sequence<RequestInfo>"]=c.sequenceConverter(c.converters.RequestInfo),e.exports={Cache:p}},6939:(e,t,A)=>{"use strict";const{Cache:r}=A(4420),{webidl:s}=A(6097),{kEnumerableProperty:n}=A(2858),{kConstruct:i}=A(257);class o{#Pe=new Map;constructor(){arguments[0]!==i&&s.illegalConstructor(),s.util.markAsUncloneable(this)}async match(e,t={}){if(s.brandCheck(this,o),s.argumentLengthCheck(arguments,1,"CacheStorage.match"),e=s.converters.RequestInfo(e),null!=(t=s.converters.MultiCacheQueryOptions(t)).cacheName){if(this.#Pe.has(t.cacheName)){const A=this.#Pe.get(t.cacheName),s=new r(i,A);return await s.match(e,t)}}else for(const A of this.#Pe.values()){const s=new r(i,A),n=await s.match(e,t);if(void 0!==n)return n}}async has(e){s.brandCheck(this,o);const t="CacheStorage.has";return s.argumentLengthCheck(arguments,1,t),e=s.converters.DOMString(e,t,"cacheName"),this.#Pe.has(e)}async open(e){s.brandCheck(this,o);const t="CacheStorage.open";if(s.argumentLengthCheck(arguments,1,t),e=s.converters.DOMString(e,t,"cacheName"),this.#Pe.has(e)){const t=this.#Pe.get(e);return new r(i,t)}const A=[];return this.#Pe.set(e,A),new r(i,A)}async delete(e){s.brandCheck(this,o);const t="CacheStorage.delete";return s.argumentLengthCheck(arguments,1,t),e=s.converters.DOMString(e,t,"cacheName"),this.#Pe.delete(e)}async keys(){s.brandCheck(this,o);return[...this.#Pe.keys()]}}Object.defineProperties(o.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:n,has:n,open:n,delete:n,keys:n}),e.exports={CacheStorage:o}},3932:(e,t,A)=>{"use strict";const r=A(4589),{URLSerializer:s}=A(9934),{isValidHeaderName:n}=A(6686);e.exports={urlEquals:function(e,t,A=!1){return s(e,A)===s(t,A)},getFieldValues:function(e){r(null!==e);const t=[];for(let A of e.split(","))A=A.trim(),n(A)&&t.push(A);return t}}},3042:e=>{"use strict";e.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}},9391:(e,t,A)=>{"use strict";const{parseSetCookie:r}=A(6712),{stringify:s}=A(9871),{webidl:n}=A(6097),{Headers:i}=A(6558),o=n.brandCheckMultiple([i,globalThis.Headers].filter(Boolean));function a(e,t){n.argumentLengthCheck(arguments,2,"setCookie"),o(e),t=n.converters.Cookie(t);const A=s(t);A&&e.append("set-cookie",A,!0)}n.converters.DeleteCookieAttributes=n.dictionaryConverter([{converter:n.nullableConverter(n.converters.DOMString),key:"path",defaultValue:()=>null},{converter:n.nullableConverter(n.converters.DOMString),key:"domain",defaultValue:()=>null}]),n.converters.Cookie=n.dictionaryConverter([{converter:n.converters.DOMString,key:"name"},{converter:n.converters.DOMString,key:"value"},{converter:n.nullableConverter((e=>"number"==typeof e?n.converters["unsigned long long"](e):new Date(e))),key:"expires",defaultValue:()=>null},{converter:n.nullableConverter(n.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:n.nullableConverter(n.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:n.nullableConverter(n.converters.DOMString),key:"path",defaultValue:()=>null},{converter:n.nullableConverter(n.converters.boolean),key:"secure",defaultValue:()=>null},{converter:n.nullableConverter(n.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:n.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:n.sequenceConverter(n.converters.DOMString),key:"unparsed",defaultValue:()=>[]}]),e.exports={getCookies:function(e){n.argumentLengthCheck(arguments,1,"getCookies"),o(e);const t=e.get("cookie"),A={};if(!t)return A;for(const e of t.split(";")){const[t,...r]=e.split("=");A[t.trim()]=r.join("=")}return A},deleteCookie:function(e,t,A){o(e);const r="deleteCookie";n.argumentLengthCheck(arguments,2,r),t=n.converters.DOMString(t,r,"name"),A=n.converters.DeleteCookieAttributes(A),a(e,{name:t,value:"",expires:new Date(0),...A})},getSetCookies:function(e){n.argumentLengthCheck(arguments,1,"getSetCookies"),o(e);const t=e.getSetCookie();return t?t.map((e=>r(e))):[]},setCookie:a,parseCookie:function(e){return e=n.converters.DOMString(e),r(e)}}},6712:(e,t,A)=>{"use strict";const{maxNameValuePairSize:r,maxAttributeValueSize:s}=A(3042),{isCTLExcludingHtab:n}=A(9871),{collectASequenceOfCodePointsFast:i}=A(9934),o=A(4589),{unescape:a}=A(1792);function c(e,t={}){if(0===e.length)return t;o(";"===e[0]);let A="";(e=e.slice(1)).includes(";")?(A=i(";",e,{position:0}),e=e.slice(A.length)):(A=e,e="");let r="",n="";if(A.includes("=")){const e={position:0};r=i("=",A,e),n=A.slice(e.position+1)}else r=A;if(r=r.trim(),n=n.trim(),n.length>s)return c(e,t);const a=r.toLowerCase();if("expires"===a){const e=new Date(n);t.expires=e}else if("max-age"===a){const A=n.charCodeAt(0);if((A<48||A>57)&&"-"!==n[0])return c(e,t);if(!/^\d+$/.test(n))return c(e,t);const r=Number(n);t.maxAge=r}else if("domain"===a){let e=n;"."===e[0]&&(e=e.slice(1)),e=e.toLowerCase(),t.domain=e}else if("path"===a){let e="";e=0===n.length||"/"!==n[0]?"/":n,t.path=e}else if("secure"===a)t.secure=!0;else if("httponly"===a)t.httpOnly=!0;else if("samesite"===a){let e="Default";const A=n.toLowerCase();A.includes("none")&&(e="None"),A.includes("strict")&&(e="Strict"),A.includes("lax")&&(e="Lax"),t.sameSite=e}else t.unparsed??=[],t.unparsed.push(`${r}=${n}`);return c(e,t)}e.exports={parseSetCookie:function(e){if(n(e))return null;let t="",A="",s="",o="";if(e.includes(";")){const r={position:0};t=i(";",e,r),A=e.slice(r.position)}else t=e;if(t.includes("=")){const e={position:0};s=i("=",t,e),o=t.slice(e.position+1)}else o=t;return s=s.trim(),o=o.trim(),s.length+o.length>r?null:{name:s,value:a(o),...c(A)}},parseUnparsedAttributes:c}},9871:e=>{"use strict";function t(e){for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(A<33||A>126||34===A||40===A||41===A||60===A||62===A||64===A||44===A||59===A||58===A||92===A||47===A||91===A||93===A||63===A||61===A||123===A||125===A)throw new Error("Invalid cookie name")}}function A(e){let t=e.length,A=0;if('"'===e[0]){if(1===t||'"'!==e[t-1])throw new Error("Invalid cookie value");--t,++A}for(;A<t;){const t=e.charCodeAt(A++);if(t<33||t>126||34===t||44===t||59===t||92===t)throw new Error("Invalid cookie value")}}function r(e){for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(A<32||127===A||59===A)throw new Error("Invalid cookie path")}}const s=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],n=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],i=Array(61).fill(0).map(((e,t)=>t.toString().padStart(2,"0")));function o(e){return"number"==typeof e&&(e=new Date(e)),`${s[e.getUTCDay()]}, ${i[e.getUTCDate()]} ${n[e.getUTCMonth()]} ${e.getUTCFullYear()} ${i[e.getUTCHours()]}:${i[e.getUTCMinutes()]}:${i[e.getUTCSeconds()]} GMT`}e.exports={isCTLExcludingHtab:function(e){for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(A>=0&&A<=8||A>=10&&A<=31||127===A)return!0}return!1},validateCookieName:t,validateCookiePath:r,validateCookieValue:A,toIMFDate:o,stringify:function(e){if(0===e.name.length)return null;t(e.name),A(e.value);const s=[`${e.name}=${e.value}`];e.name.startsWith("__Secure-")&&(e.secure=!0),e.name.startsWith("__Host-")&&(e.secure=!0,e.domain=null,e.path="/"),e.secure&&s.push("Secure"),e.httpOnly&&s.push("HttpOnly"),"number"==typeof e.maxAge&&(!function(e){if(e<0)throw new Error("Invalid cookie max-age")}(e.maxAge),s.push(`Max-Age=${e.maxAge}`)),e.domain&&(!function(e){if(e.startsWith("-")||e.endsWith(".")||e.endsWith("-"))throw new Error("Invalid cookie domain")}(e.domain),s.push(`Domain=${e.domain}`)),e.path&&(r(e.path),s.push(`Path=${e.path}`)),e.expires&&"Invalid Date"!==e.expires.toString()&&s.push(`Expires=${o(e.expires)}`),e.sameSite&&s.push(`SameSite=${e.sameSite}`);for(const t of e.unparsed){if(!t.includes("="))throw new Error("Invalid unparsed");const[e,...A]=t.split("=");s.push(`${e.trim()}=${A.join("=")}`)}return s.join("; ")}}},8813:(e,t,A)=>{"use strict";const{Transform:r}=A(7075),{isASCIINumber:s,isValidLastEventId:n}=A(4689),i=[239,187,191];e.exports={EventSourceStream:class extends r{state;checkBOM=!0;crlfCheck=!1;eventEndCheck=!1;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=!0,super(e),this.state=e.eventSourceSettings||{},e.push&&(this.push=e.push)}_transform(e,t,A){if(0!==e.length){if(this.buffer?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.checkBOM)switch(this.buffer.length){case 1:return this.buffer[0]===i[0]||(this.checkBOM=!1),void A();case 2:if(this.buffer[0]===i[0]&&this.buffer[1]===i[1])return void A();this.checkBOM=!1;break;case 3:if(this.buffer[0]===i[0]&&this.buffer[1]===i[1]&&this.buffer[2]===i[2])return this.buffer=Buffer.alloc(0),this.checkBOM=!1,void A();this.checkBOM=!1;break;default:this.buffer[0]===i[0]&&this.buffer[1]===i[1]&&this.buffer[2]===i[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=!1}for(;this.pos<this.buffer.length;)if(this.eventEndCheck){if(this.crlfCheck){if(10===this.buffer[this.pos]){this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,this.crlfCheck=!1;continue}this.crlfCheck=!1}if(10===this.buffer[this.pos]||13===this.buffer[this.pos]){13===this.buffer[this.pos]&&(this.crlfCheck=!0),this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,(void 0!==this.event.data||this.event.event||void 0!==this.event.id||this.event.retry)&&this.processEvent(this.event),this.clearEvent();continue}this.eventEndCheck=!1}else 10!==this.buffer[this.pos]&&13!==this.buffer[this.pos]?this.pos++:(13===this.buffer[this.pos]&&(this.crlfCheck=!0),this.parseLine(this.buffer.subarray(0,this.pos),this.event),this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,this.eventEndCheck=!0);A()}else A()}parseLine(e,t){if(0===e.length)return;const A=e.indexOf(58);if(0===A)return;let r="",i="";if(-1!==A){r=e.subarray(0,A).toString("utf8");let t=A+1;32===e[t]&&++t,i=e.subarray(t).toString("utf8")}else r=e.toString("utf8"),i="";switch(r){case"data":void 0===t[r]?t[r]=i:t[r]+=`\n${i}`;break;case"retry":s(i)&&(t[r]=i);break;case"id":n(i)&&(t[r]=i);break;case"event":i.length>0&&(t[r]=i)}}processEvent(e){e.retry&&s(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),void 0!==e.id&&n(e.id)&&(this.state.lastEventId=e.id),void 0!==e.data&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}}}},7928:(e,t,A)=>{"use strict";const{pipeline:r}=A(7075),{fetching:s}=A(7388),{makeRequest:n}=A(4609),{webidl:i}=A(6097),{EventSourceStream:o}=A(8813),{parseMIMEType:a}=A(9934),{createFastMessageEvent:c}=A(878),{isNetworkError:g}=A(4821),{kEnumerableProperty:l}=A(2858),{environmentSettingsObject:h}=A(6686);let d=!1;class u extends EventTarget{#Ge={open:null,error:null,message:null};#Oe;#Je=!1;#We=0;#qe=null;#X=null;#_e;#ge;constructor(e,t={}){super(),i.util.markAsUncloneable(this);const A="EventSource constructor";i.argumentLengthCheck(arguments,1,A),d||(d=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=i.converters.USVString(e),t=i.converters.EventSourceInitDict(t,A,"eventSourceInitDict"),this.#_e=t.node.dispatcher||t.dispatcher,this.#ge={lastEventId:"",reconnectionTime:t.node.reconnectionTime};const r=h;let s;try{s=new URL(e,r.settingsObject.baseUrl),this.#ge.origin=s.origin}catch(e){throw new DOMException(e,"SyntaxError")}this.#Oe=s.href;let o="anonymous";!0===t.withCredentials&&(o="use-credentials",this.#Je=!0);const a={redirect:"follow",keepalive:!0,mode:"cors",credentials:"anonymous"===o?"same-origin":"omit",referrer:"no-referrer"};a.client=h.settingsObject,a.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],a.cache="no-store",a.initiator="other",a.urlList=[new URL(this.#Oe)],this.#qe=n(a),this.#Xe()}get readyState(){return this.#We}get url(){return this.#Oe}get withCredentials(){return this.#Je}#Xe(){if(2===this.#We)return;this.#We=0;const e={request:this.#qe,dispatcher:this.#_e};e.processResponseEndOfBody=e=>{if(!g(e))return this.#Ze()},e.processResponse=e=>{if(g(e))return e.aborted?(this.close(),void this.dispatchEvent(new Event("error"))):void this.#Ze();const t=e.headersList.get("content-type",!0),A=null!==t?a(t):"failure",s="failure"!==A&&"text/event-stream"===A.essence;if(200!==e.status||!1===s)return this.close(),void this.dispatchEvent(new Event("error"));this.#We=1,this.dispatchEvent(new Event("open")),this.#ge.origin=e.urlList[e.urlList.length-1].origin;const n=new o({eventSourceSettings:this.#ge,push:e=>{this.dispatchEvent(c(e.type,e.options))}});r(e.body.stream,n,(e=>{!1===e?.aborted&&(this.close(),this.dispatchEvent(new Event("error")))}))},this.#X=s(e)}#Ze(){2!==this.#We&&(this.#We=0,this.dispatchEvent(new Event("error")),setTimeout((()=>{0===this.#We&&(this.#ge.lastEventId.length&&this.#qe.headersList.set("last-event-id",this.#ge.lastEventId,!0),this.#Xe())}),this.#ge.reconnectionTime)?.unref())}close(){i.brandCheck(this,u),2!==this.#We&&(this.#We=2,this.#X.abort(),this.#qe=null)}get onopen(){return this.#Ge.open}set onopen(e){this.#Ge.open&&this.removeEventListener("open",this.#Ge.open);const t=i.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("open",t),this.#Ge.open=e):this.#Ge.open=null}get onmessage(){return this.#Ge.message}set onmessage(e){this.#Ge.message&&this.removeEventListener("message",this.#Ge.message);const t=i.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("message",t),this.#Ge.message=e):this.#Ge.message=null}get onerror(){return this.#Ge.error}set onerror(e){this.#Ge.error&&this.removeEventListener("error",this.#Ge.error);const t=i.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("error",t),this.#Ge.error=e):this.#Ge.error=null}}const E={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:0,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:1,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:2,writable:!1}};Object.defineProperties(u,E),Object.defineProperties(u.prototype,E),Object.defineProperties(u.prototype,{close:l,onerror:l,onmessage:l,onopen:l,readyState:l,url:l,withCredentials:l}),i.converters.EventSourceInitDict=i.dictionaryConverter([{key:"withCredentials",converter:i.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:i.converters.any},{key:"node",converter:i.dictionaryConverter([{key:"reconnectionTime",converter:i.converters["unsigned long"],defaultValue:()=>3e3},{key:"dispatcher",converter:i.converters.any}]),defaultValue:()=>({})}]),e.exports={EventSource:u,defaultReconnectionTime:3e3}},4689:e=>{"use strict";e.exports={isValidLastEventId:function(e){return-1===e.indexOf("\0")},isASCIINumber:function(e){if(0===e.length)return!1;for(let t=0;t<e.length;t++)if(e.charCodeAt(t)<48||e.charCodeAt(t)>57)return!1;return!0}}},2530:(e,t,A)=>{"use strict";const r=A(2858),{ReadableStreamFrom:s,readableStreamClose:n,fullyReadBody:i,extractMimeType:o,utf8DecodeBytes:a}=A(6686),{FormData:c,setFormDataState:g}=A(3944),{webidl:l}=A(6097),h=A(4589),{isErrored:d,isDisturbed:u}=A(7075),{isArrayBuffer:E}=A(3429),{serializeAMimeType:I}=A(9934),{multipartFormDataParser:Q}=A(4614),{createDeferredPromise:B}=A(9250);let C;try{const e=A(7598);C=t=>e.randomInt(0,t)}catch{C=e=>Math.floor(Math.random()*e)}const p=new TextEncoder;function f(){}const m=new FinalizationRegistry((e=>{const t=e.deref();!t||t.locked||u(t)||d(t)||t.cancel("Response object has been garbage collected").catch(f)}));function y(e,t=!1){let A=null;A=l.is.ReadableStream(e)?e:l.is.Blob(e)?e.stream():new ReadableStream({pull(e){const t="string"==typeof o?p.encode(o):o;t.byteLength&&e.enqueue(t),queueMicrotask((()=>n(e)))},start(){},type:"bytes"}),h(l.is.ReadableStream(A));let i=null,o=null,a=null,c=null;if("string"==typeof e)o=e,c="text/plain;charset=UTF-8";else if(l.is.URLSearchParams(e))o=e.toString(),c="application/x-www-form-urlencoded;charset=UTF-8";else if(l.is.BufferSource(e))o=E(e)?new Uint8Array(e.slice()):new Uint8Array(e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength));else if(l.is.FormData(e)){const t=`----formdata-undici-0${`${C(1e11)}`.padStart(11,"0")}`,A=`--${t}\r\nContent-Disposition: form-data`,r=e=>e.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),s=e=>e.replace(/\r?\n|\r/g,"\r\n"),n=[],g=new Uint8Array([13,10]);a=0;let l=!1;for(const[t,i]of e)if("string"==typeof i){const e=p.encode(A+`; name="${r(s(t))}"`+`\r\n\r\n${s(i)}\r\n`);n.push(e),a+=e.byteLength}else{const e=p.encode(`${A}; name="${r(s(t))}"`+(i.name?`; filename="${r(i.name)}"`:"")+"\r\n"+`Content-Type: ${i.type||"application/octet-stream"}\r\n\r\n`);n.push(e,i,g),"number"==typeof i.size?a+=e.byteLength+i.size+g.byteLength:l=!0}const h=p.encode(`--${t}--\r\n`);n.push(h),a+=h.byteLength,l&&(a=null),o=e,i=async function*(){for(const e of n)e.stream?yield*e.stream():yield e},c=`multipart/form-data; boundary=${t}`}else if(l.is.Blob(e))o=e,a=e.size,e.type&&(c=e.type);else if("function"==typeof e[Symbol.asyncIterator]){if(t)throw new TypeError("keepalive");if(r.isDisturbed(e)||e.locked)throw new TypeError("Response body object should not be disturbed or locked");A=l.is.ReadableStream(e)?e:s(e)}if(("string"==typeof o||r.isBuffer(o))&&(a=Buffer.byteLength(o)),null!=i){let t;A=new ReadableStream({async start(){t=i(e)[Symbol.asyncIterator]()},async pull(e){const{value:r,done:s}=await t.next();if(s)queueMicrotask((()=>{e.close(),e.byobRequest?.respond(0)}));else if(!d(A)){const t=new Uint8Array(r);t.byteLength&&e.enqueue(t)}return e.desiredSize>0},async cancel(e){await t.return()},type:"bytes"})}return[{stream:A,source:o,length:a},c]}function D(e,t,A,r){try{l.brandCheck(e,A)}catch(e){return Promise.reject(e)}const s=r(e);if(S(s))return Promise.reject(new TypeError("Body is unusable: Body has already been read"));if(s.aborted)return Promise.reject(new DOMException("The operation was aborted.","AbortError"));const n=B(),o=n.reject,a=e=>{try{n.resolve(t(e))}catch(e){o(e)}};return null==s.body?(a(Buffer.allocUnsafe(0)),n.promise):(i(s.body,a,o),n.promise)}function S(e){const t=e.body;return null!=t&&(t.stream.locked||r.isDisturbed(t.stream))}function w(e){return JSON.parse(a(e))}function b(e){const t=e.headersList,A=o(t);return"failure"===A?null:A}e.exports={extractBody:y,safelyExtractBody:function(e,t=!1){return l.is.ReadableStream(e)&&(h(!r.isDisturbed(e),"The body has already been consumed."),h(!e.locked,"The stream is locked.")),y(e,t)},cloneBody:function(e){const{0:t,1:A}=e.stream.tee();return e.stream=t,{stream:A,length:e.length,source:e.source}},mixinBody:function(e,t){Object.assign(e.prototype,function(e,t){return{blob(){return D(this,(e=>{let A=b(t(this));return null===A?A="":A&&(A=I(A)),new Blob([e],{type:A})}),e,t)},arrayBuffer(){return D(this,(e=>new Uint8Array(e).buffer),e,t)},text(){return D(this,a,e,t)},json(){return D(this,w,e,t)},formData(){return D(this,(e=>{const A=b(t(this));if(null!==A)switch(A.essence){case"multipart/form-data":{const t=Q(e,A),r=new c;return g(r,t),r}case"application/x-www-form-urlencoded":{const t=new URLSearchParams(e.toString()),A=new c;for(const[e,r]of t)A.append(e,r);return A}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')}),e,t)},bytes(){return D(this,(e=>new Uint8Array(e)),e,t)}}}(e,t))},streamRegistry:m,bodyUnusable:S}},9441:e=>{"use strict";const t=["GET","HEAD","POST"],A=new Set(t),r=[301,302,303,307,308],s=new Set(r),n=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],i=new Set(n),o=["no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],a=["",...o],c=new Set(o),g=["GET","HEAD","OPTIONS","TRACE"],l=new Set(g),h=["CONNECT","TRACE","TRACK"],d=new Set(h),u=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],E=new Set(u);e.exports={subresource:u,forbiddenMethods:h,requestBodyHeader:["content-encoding","content-language","content-location","content-type","content-length"],referrerPolicy:a,requestRedirect:["follow","manual","error"],requestMode:["navigate","same-origin","no-cors","cors"],requestCredentials:["omit","same-origin","include"],requestCache:["default","no-store","reload","no-cache","force-cache","only-if-cached"],redirectStatus:r,corsSafeListedMethods:t,nullBodyStatus:[101,204,205,304],safeMethods:g,badPorts:n,requestDuplex:["half"],subresourceSet:E,badPortsSet:i,redirectStatusSet:s,corsSafeListedMethodsSet:A,safeMethodsSet:l,forbiddenMethodsSet:d,referrerPolicyTokens:c}},9934:(e,t,A)=>{"use strict";const r=A(4589),s=new TextEncoder,n=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,i=/[\u000A\u000D\u0009\u0020]/,o=/[\u0009\u000A\u000C\u000D\u0020]/g,a=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function c(e,t=!1){if(!t)return e.href;const A=e.href,r=e.hash.length,s=0===r?A:A.substring(0,A.length-r);return!r&&A.endsWith("#")?s.slice(0,-1):s}function g(e,t,A){let r="";for(;A.position<t.length&&e(t[A.position]);)r+=t[A.position],A.position++;return r}function l(e,t,A){const r=t.indexOf(e,A.position),s=A.position;return-1===r?(A.position=t.length,t.slice(s)):(A.position=r,t.slice(s,A.position))}function h(e){return function(e){const t=e.length,A=new Uint8Array(t);let r=0;for(let s=0;s<t;++s){const t=e[s];37!==t?A[r++]=t:37!==t||d(e[s+1])&&d(e[s+2])?(A[r++]=u(e[s+1])<<4|u(e[s+2]),s+=2):A[r++]=37}return t===r?A:A.subarray(0,r)}(s.encode(e))}function d(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function u(e){return e>=48&&e<=57?e-48:(223&e)-55}function E(e){const t={position:0},A=l("/",e=B(e,!0,!0),t);if(0===A.length||!n.test(A))return"failure";if(t.position>=e.length)return"failure";t.position++;let r=l(";",e,t);if(r=B(r,!1,!0),0===r.length||!n.test(r))return"failure";const s=A.toLowerCase(),o=r.toLowerCase(),c={type:s,subtype:o,parameters:new Map,essence:`${s}/${o}`};for(;t.position<e.length;){t.position++,g((e=>i.test(e)),e,t);let A=g((e=>";"!==e&&"="!==e),e,t);if(A=A.toLowerCase(),t.position<e.length){if(";"===e[t.position])continue;t.position++}if(t.position>=e.length)break;let r=null;if('"'===e[t.position])r=I(e,t,!0),l(";",e,t);else if(r=l(";",e,t),r=B(r,!1,!0),0===r.length)continue;0===A.length||!n.test(A)||0!==r.length&&!a.test(r)||c.parameters.has(A)||c.parameters.set(A,r)}return c}function I(e,t,A=!1){const s=t.position;let n="";for(r('"'===e[t.position]),t.position++;n+=g((e=>'"'!==e&&"\\"!==e),e,t),!(t.position>=e.length);){const A=e[t.position];if(t.position++,"\\"!==A){r('"'===A);break}if(t.position>=e.length){n+="\\";break}n+=e[t.position],t.position++}return A?n:e.slice(s,t.position)}function Q(e){return 13===e||10===e||9===e||32===e}function B(e,t=!0,A=!0){return p(e,t,A,Q)}function C(e){return 13===e||10===e||9===e||12===e||32===e}function p(e,t,A,r){let s=0,n=e.length-1;if(t)for(;s<e.length&&r(e.charCodeAt(s));)s++;if(A)for(;n>0&&r(e.charCodeAt(n));)n--;return 0===s&&n===e.length-1?e:e.slice(s,n+1)}function f(e){const t=e.length;if(65535>t)return String.fromCharCode.apply(null,e);let A="",r=0,s=65535;for(;r<t;)r+s>t&&(s=t-r),A+=String.fromCharCode.apply(null,e.subarray(r,r+=s));return A}e.exports={dataURLProcessor:function(e){r("data:"===e.protocol);let t=c(e,!0);t=t.slice(5);const A={position:0};let s=l(",",t,A);const n=s.length;if(s=function(e,t=!0,A=!0){return p(e,t,A,C)}(s,!0,!0),A.position>=t.length)return"failure";A.position++;let i=h(t.slice(n+1));if(/;(\u0020){0,}base64$/i.test(s)){if(i=function(e){let t=(e=e.replace(o,"")).length;t%4==0&&61===e.charCodeAt(t-1)&&(--t,61===e.charCodeAt(t-1)&&--t);if(t%4==1)return"failure";if(/[^+/0-9A-Za-z]/.test(e.length===t?e:e.substring(0,t)))return"failure";const A=Buffer.from(e,"base64");return new Uint8Array(A.buffer,A.byteOffset,A.byteLength)}(f(i)),"failure"===i)return"failure";s=s.slice(0,-6),s=s.replace(/(\u0020)+$/,""),s=s.slice(0,-1)}s.startsWith(";")&&(s="text/plain"+s);let a=E(s);return"failure"===a&&(a=E("text/plain;charset=US-ASCII")),{mimeType:a,body:i}},URLSerializer:c,collectASequenceOfCodePoints:g,collectASequenceOfCodePointsFast:l,stringPercentDecode:h,parseMIMEType:E,collectAnHTTPQuotedString:I,serializeAMimeType:function(e){r("failure"!==e);const{parameters:t,essence:A}=e;let s=A;for(let[e,A]of t.entries())s+=";",s+=e,s+="=",n.test(A)||(A=A.replace(/(\\|")/g,"\\$1"),A='"'+A,A+='"'),s+=A;return s},removeChars:p,removeHTTPWhitespace:B,minimizeSupportedMimeType:function(e){switch(e.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return e.subtype.endsWith("+json")?"application/json":e.subtype.endsWith("+xml")?"application/xml":""},HTTP_TOKEN_CODEPOINTS:n,isomorphicDecode:f}},4614:(e,t,A)=>{"use strict";const{bufferToLowerCasedHeaderName:r}=A(2858),{utf8DecodeBytes:s}=A(6686),{HTTP_TOKEN_CODEPOINTS:n,isomorphicDecode:i}=A(9934),{makeEntry:o}=A(3944),{webidl:a}=A(6097),c=A(4589),g=Buffer.from('form-data; name="'),l=Buffer.from("filename"),h=Buffer.from("--"),d=Buffer.from("--\r\n");function u(e){for(let t=0;t<e.length;++t)if(-128&e.charCodeAt(t))return!1;return!0}function E(e,t){let A=null,s=null,o=null,a=null;for(;;){if(13===e[t.position]&&10===e[t.position+1]){if(null===A)throw p("header name is null");return{name:A,filename:s,contentType:o,encoding:a}}let c=Q((e=>10!==e&&13!==e&&58!==e),e,t);if(c=B(c,!0,!0,(e=>9===e||32===e)),!n.test(c.toString()))throw p("header name does not match the field-name token production");if(58!==e[t.position])throw p("expected :");switch(t.position++,Q((e=>32===e||9===e),e,t),r(c)){case"content-disposition":if(A=s=null,!C(e,g,t))throw p('expected form-data; name=" for content-disposition header');if(t.position+=17,A=I(e,t),59===e[t.position]&&32===e[t.position+1]){const A={position:t.position+2};if(C(e,l,A))if(42===e[A.position+8]){A.position+=10,Q((e=>32===e||9===e),e,A);const r=Q((e=>32!==e&&13!==e&&10!==e),e,A);if(117!==r[0]&&85!==r[0]||116!==r[1]&&84!==r[1]||102!==r[2]&&70!==r[2]||45!==r[3]||56!==r[4])throw p("unknown encoding, expected utf-8''");s=decodeURIComponent((new TextDecoder).decode(r.subarray(7))),t.position=A.position}else t.position+=11,Q((e=>32===e||9===e),e,t),t.position++,s=I(e,t)}break;case"content-type":{let A=Q((e=>10!==e&&13!==e),e,t);A=B(A,!1,!0,(e=>9===e||32===e)),o=i(A);break}case"content-transfer-encoding":{let A=Q((e=>10!==e&&13!==e),e,t);A=B(A,!1,!0,(e=>9===e||32===e)),a=i(A);break}default:Q((e=>10!==e&&13!==e),e,t)}if(13!==e[t.position]&&10!==e[t.position+1])throw p("expected CRLF");t.position+=2}}function I(e,t){c(34===e[t.position-1]);let A=Q((e=>10!==e&&13!==e&&34!==e),e,t);if(34!==e[t.position])throw p('expected "');return t.position++,A=(new TextDecoder).decode(A).replace(/%0A/gi,"\n").replace(/%0D/gi,"\r").replace(/%22/g,'"'),A}function Q(e,t,A){let r=A.position;for(;r<t.length&&e(t[r]);)++r;return t.subarray(A.position,A.position=r)}function B(e,t,A,r){let s=0,n=e.length-1;if(t)for(;s<e.length&&r(e[s]);)s++;if(A)for(;n>0&&r(e[n]);)n--;return 0===s&&n===e.length-1?e:e.subarray(s,n+1)}function C(e,t,A){if(e.length<t.length)return!1;for(let r=0;r<t.length;r++)if(t[r]!==e[A.position+r])return!1;return!0}function p(e){return new TypeError("Failed to parse body as FormData.",{cause:new TypeError(e)})}e.exports={multipartFormDataParser:function(e,t){c("failure"!==t&&"multipart/form-data"===t.essence);const A=t.parameters.get("boundary");if(void 0===A)throw p("missing boundary in content-type header");const r=Buffer.from(`--${A}`,"utf8"),n=[],i={position:0};for(;13===e[i.position]&&10===e[i.position+1];)i.position+=2;let g=e.length;for(;10===e[g-1]&&13===e[g-2];)g-=2;for(g!==e.length&&(e=e.subarray(0,g));;){if(!e.subarray(i.position,i.position+r.length).equals(r))throw p("expected a value starting with -- and the boundary");if(i.position+=r.length,i.position===e.length-2&&C(e,h,i)||i.position===e.length-4&&C(e,d,i))return n;if(13!==e[i.position]||10!==e[i.position+1])throw p("expected CRLF");i.position+=2;const t=E(e,i);let A,g,{name:l,filename:I,contentType:Q,encoding:B}=t;i.position+=2;{const t=e.indexOf(r.subarray(2),i.position);if(-1===t)throw p("expected boundary after body");A=e.subarray(i.position,t-4),i.position+=A.length,"base64"===B&&(A=Buffer.from(A.toString(),"base64"))}if(13!==e[i.position]||10!==e[i.position+1])throw p("expected CRLF");i.position+=2,null!==I?(Q??="text/plain",u(Q)||(Q=""),g=new File([A],I,{type:Q})):g=s(Buffer.from(A)),c(a.is.USVString(l)),c("string"==typeof g&&a.is.USVString(g)||a.is.File(g)),n.push(o(l,g,I))}},validateBoundary:function(e){const t=e.length;if(t<27||t>70)return!1;for(let A=0;A<t;++A){const t=e.charCodeAt(A);if(!(t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122||39===t||45===t||95===t))return!1}return!0}}},3944:(e,t,A)=>{"use strict";const{iteratorMixin:r}=A(6686),{kEnumerableProperty:s}=A(2858),{webidl:n}=A(6097),i=A(7975);class o{#ge=[];constructor(e=void 0){if(n.util.markAsUncloneable(this),void 0!==e)throw n.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]})}append(e,t,A=void 0){n.brandCheck(this,o);const r="FormData.append";n.argumentLengthCheck(arguments,2,r),e=n.converters.USVString(e),3===arguments.length||n.is.Blob(t)?(t=n.converters.Blob(t,r,"value"),void 0!==A&&(A=n.converters.USVString(A))):t=n.converters.USVString(t);const s=g(e,t,A);this.#ge.push(s)}delete(e){n.brandCheck(this,o);n.argumentLengthCheck(arguments,1,"FormData.delete"),e=n.converters.USVString(e),this.#ge=this.#ge.filter((t=>t.name!==e))}get(e){n.brandCheck(this,o);n.argumentLengthCheck(arguments,1,"FormData.get"),e=n.converters.USVString(e);const t=this.#ge.findIndex((t=>t.name===e));return-1===t?null:this.#ge[t].value}getAll(e){n.brandCheck(this,o);return n.argumentLengthCheck(arguments,1,"FormData.getAll"),e=n.converters.USVString(e),this.#ge.filter((t=>t.name===e)).map((e=>e.value))}has(e){n.brandCheck(this,o);return n.argumentLengthCheck(arguments,1,"FormData.has"),e=n.converters.USVString(e),-1!==this.#ge.findIndex((t=>t.name===e))}set(e,t,A=void 0){n.brandCheck(this,o);const r="FormData.set";n.argumentLengthCheck(arguments,2,r),e=n.converters.USVString(e),3===arguments.length||n.is.Blob(t)?(t=n.converters.Blob(t,r,"value"),void 0!==A&&(A=n.converters.USVString(A))):t=n.converters.USVString(t);const s=g(e,t,A),i=this.#ge.findIndex((t=>t.name===e));-1!==i?this.#ge=[...this.#ge.slice(0,i),s,...this.#ge.slice(i+1).filter((t=>t.name!==e))]:this.#ge.push(s)}[i.inspect.custom](e,t){const A=this.#ge.reduce(((e,t)=>(e[t.name]?Array.isArray(e[t.name])?e[t.name].push(t.value):e[t.name]=[e[t.name],t.value]:e[t.name]=t.value,e)),{__proto__:null});t.depth??=e,t.colors??=!0;const r=i.formatWithOptions(t,A);return`FormData ${r.slice(r.indexOf("]")+2)}`}static getFormDataState(e){return e.#ge}static setFormDataState(e,t){e.#ge=t}}const{getFormDataState:a,setFormDataState:c}=o;function g(e,t,A){if("string"==typeof t);else if(n.is.File(t)||(t=new File([t],"blob",{type:t.type})),void 0!==A){const e={type:t.type,lastModified:t.lastModified};t=new File([t],A,e)}return{name:e,value:t}}Reflect.deleteProperty(o,"getFormDataState"),Reflect.deleteProperty(o,"setFormDataState"),r("FormData",o,a,"name","value"),Object.defineProperties(o.prototype,{append:s,delete:s,get:s,getAll:s,has:s,set:s,[Symbol.toStringTag]:{value:"FormData",configurable:!0}}),n.is.FormData=n.util.MakeTypeAssertion(o),e.exports={FormData:o,makeEntry:g,setFormDataState:c}},2837:e=>{"use strict";const t=Symbol.for("undici.globalOrigin.1");e.exports={getGlobalOrigin:function(){return globalThis[t]},setGlobalOrigin:function(e){if(void 0===e)return void Object.defineProperty(globalThis,t,{value:void 0,writable:!0,enumerable:!1,configurable:!1});const A=new URL(e);if("http:"!==A.protocol&&"https:"!==A.protocol)throw new TypeError(`Only http & https urls are allowed, received ${A.protocol}`);Object.defineProperty(globalThis,t,{value:A,writable:!0,enumerable:!1,configurable:!1})}}},6558:(e,t,A)=>{"use strict";const{kConstruct:r}=A(257),{kEnumerableProperty:s}=A(2858),{iteratorMixin:n,isValidHeaderName:i,isValidHeaderValue:o}=A(6686),{webidl:a}=A(6097),c=A(4589),g=A(7975);function l(e){return 10===e||13===e||9===e||32===e}function h(e){let t=0,A=e.length;for(;A>t&&l(e.charCodeAt(A-1));)--A;for(;A>t&&l(e.charCodeAt(t));)++t;return 0===t&&A===e.length?e:e.substring(t,A)}function d(e,t){if(Array.isArray(t))for(let A=0;A<t.length;++A){const r=t[A];if(2!==r.length)throw a.errors.exception({header:"Headers constructor",message:`expected name/value pair to be length 2, found ${r.length}.`});u(e,r[0],r[1])}else{if("object"!=typeof t||null===t)throw a.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]});{const A=Object.keys(t);for(let r=0;r<A.length;++r)u(e,A[r],t[A[r]])}}}function u(e,t,A){if(A=h(A),!i(t))throw a.errors.invalidArgument({prefix:"Headers.append",value:t,type:"header name"});if(!o(A))throw a.errors.invalidArgument({prefix:"Headers.append",value:A,type:"header value"});if("immutable"===B(e))throw new TypeError("immutable");return p(e).append(t,A,!1)}function E(e,t){return e[0]<t[0]?-1:1}class I{cookies=null;sortedMap;headersMap;constructor(e){e instanceof I?(this.headersMap=new Map(e.headersMap),this.sortedMap=e.sortedMap,this.cookies=null===e.cookies?null:[...e.cookies]):(this.headersMap=new Map(e),this.sortedMap=null)}contains(e,t){return this.headersMap.has(t?e:e.toLowerCase())}clear(){this.headersMap.clear(),this.sortedMap=null,this.cookies=null}append(e,t,A){this.sortedMap=null;const r=A?e:e.toLowerCase(),s=this.headersMap.get(r);if(s){const e="cookie"===r?"; ":", ";this.headersMap.set(r,{name:s.name,value:`${s.value}${e}${t}`})}else this.headersMap.set(r,{name:e,value:t});"set-cookie"===r&&(this.cookies??=[]).push(t)}set(e,t,A){this.sortedMap=null;const r=A?e:e.toLowerCase();"set-cookie"===r&&(this.cookies=[t]),this.headersMap.set(r,{name:e,value:t})}delete(e,t){this.sortedMap=null,t||(e=e.toLowerCase()),"set-cookie"===e&&(this.cookies=null),this.headersMap.delete(e)}get(e,t){return this.headersMap.get(t?e:e.toLowerCase())?.value??null}*[Symbol.iterator](){for(const{0:e,1:{value:t}}of this.headersMap)yield[e,t]}get entries(){const e={};if(0!==this.headersMap.size)for(const{name:t,value:A}of this.headersMap.values())e[t]=A;return e}rawValues(){return this.headersMap.values()}get entriesList(){const e=[];if(0!==this.headersMap.size)for(const{0:t,1:{name:A,value:r}}of this.headersMap)if("set-cookie"===t)for(const t of this.cookies)e.push([A,t]);else e.push([A,r]);return e}toSortedArray(){const e=this.headersMap.size,t=new Array(e);if(e<=32){if(0===e)return t;const A=this.headersMap[Symbol.iterator](),r=A.next().value;t[0]=[r[0],r[1].value],c(null!==r[1].value);for(let r,s,n=1,i=0,o=0,a=0,g=0;n<e;++n){for(s=A.next().value,r=t[n]=[s[0],s[1].value],c(null!==r[1]),a=0,o=n;a<o;)g=a+(o-a>>1),t[g][0]<=r[0]?a=g+1:o=g;if(n!==g){for(i=n;i>a;)t[i]=t[--i];t[a]=r}}if(!A.next().done)throw new TypeError("Unreachable");return t}{let e=0;for(const{0:A,1:{value:r}}of this.headersMap)t[e++]=[A,r],c(null!==r);return t.sort(E)}}}class Q{#ze;#je;constructor(e=void 0){a.util.markAsUncloneable(this),e!==r&&(this.#je=new I,this.#ze="none",void 0!==e&&d(this,e=a.converters.HeadersInit(e,"Headers constructor","init")))}append(e,t){a.brandCheck(this,Q),a.argumentLengthCheck(arguments,2,"Headers.append");const A="Headers.append";return u(this,e=a.converters.ByteString(e,A,"name"),t=a.converters.ByteString(t,A,"value"))}delete(e){a.brandCheck(this,Q),a.argumentLengthCheck(arguments,1,"Headers.delete");if(e=a.converters.ByteString(e,"Headers.delete","name"),!i(e))throw a.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"});if("immutable"===this.#ze)throw new TypeError("immutable");this.#je.contains(e,!1)&&this.#je.delete(e,!1)}get(e){a.brandCheck(this,Q),a.argumentLengthCheck(arguments,1,"Headers.get");const t="Headers.get";if(e=a.converters.ByteString(e,t,"name"),!i(e))throw a.errors.invalidArgument({prefix:t,value:e,type:"header name"});return this.#je.get(e,!1)}has(e){a.brandCheck(this,Q),a.argumentLengthCheck(arguments,1,"Headers.has");const t="Headers.has";if(e=a.converters.ByteString(e,t,"name"),!i(e))throw a.errors.invalidArgument({prefix:t,value:e,type:"header name"});return this.#je.contains(e,!1)}set(e,t){a.brandCheck(this,Q),a.argumentLengthCheck(arguments,2,"Headers.set");const A="Headers.set";if(e=a.converters.ByteString(e,A,"name"),t=h(t=a.converters.ByteString(t,A,"value")),!i(e))throw a.errors.invalidArgument({prefix:A,value:e,type:"header name"});if(!o(t))throw a.errors.invalidArgument({prefix:A,value:t,type:"header value"});if("immutable"===this.#ze)throw new TypeError("immutable");this.#je.set(e,t,!1)}getSetCookie(){a.brandCheck(this,Q);const e=this.#je.cookies;return e?[...e]:[]}[g.inspect.custom](e,t){return t.depth??=e,`Headers ${g.formatWithOptions(t,this.#je.entries)}`}static getHeadersGuard(e){return e.#ze}static setHeadersGuard(e,t){e.#ze=t}static getHeadersList(e){return e.#je}static setHeadersList(e,t){e.#je=t}}const{getHeadersGuard:B,setHeadersGuard:C,getHeadersList:p,setHeadersList:f}=Q;Reflect.deleteProperty(Q,"getHeadersGuard"),Reflect.deleteProperty(Q,"setHeadersGuard"),Reflect.deleteProperty(Q,"getHeadersList"),Reflect.deleteProperty(Q,"setHeadersList"),n("Headers",Q,(function(e){const t=p(e);if(!t)return[];if(t.sortedMap)return t.sortedMap;const A=[],r=t.toSortedArray(),s=t.cookies;if(null===s||1===s.length)return t.sortedMap=r;for(let e=0;e<r.length;++e){const{0:t,1:n}=r[e];if("set-cookie"===t)for(let e=0;e<s.length;++e)A.push([t,s[e]]);else A.push([t,n])}return t.sortedMap=A}),0,1),Object.defineProperties(Q.prototype,{append:s,delete:s,get:s,has:s,set:s,getSetCookie:s,[Symbol.toStringTag]:{value:"Headers",configurable:!0},[g.inspect.custom]:{enumerable:!1}}),a.converters.HeadersInit=function(e,t,A){if(a.util.Type(e)===a.util.Types.OBJECT){const r=Reflect.get(e,Symbol.iterator);if(!g.types.isProxy(e)&&r===Q.prototype.entries)try{return p(e).entriesList}catch{}return"function"==typeof r?a.converters["sequence<sequence<ByteString>>"](e,t,A,r.bind(e)):a.converters["record<ByteString, ByteString>"](e,t,A)}throw a.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})},e.exports={fill:d,compareHeaderName:E,Headers:Q,HeadersList:I,getHeadersGuard:B,setHeadersGuard:C,setHeadersList:f,getHeadersList:p}},7388:(e,t,A)=>{"use strict";const{makeNetworkError:r,makeAppropriateNetworkError:s,filterResponse:n,makeResponse:i,fromInnerResponse:o,getResponseState:a}=A(4821),{HeadersList:c}=A(6558),{Request:g,cloneRequest:l,getRequestDispatcher:h,getRequestState:d}=A(4609),u=A(8522),{makePolicyContainer:E,clonePolicyContainer:I,requestBadPort:Q,TAOCheck:B,appendRequestOriginHeader:C,responseLocationURL:p,requestCurrentURL:f,setRequestReferrerPolicyOnRedirect:m,tryUpgradeRequestToAPotentiallyTrustworthyURL:y,createOpaqueTimingInfo:D,appendFetchMetadata:S,corsCheck:w,crossOriginResourcePolicyCheck:b,determineRequestsReferrer:R,coarsenedSharedCurrentTime:N,sameOrigin:k,isCancelled:F,isAborted:U,isErrorLike:M,fullyReadBody:T,readableStreamClose:v,isomorphicEncode:L,urlIsLocal:H,urlIsHttpHttpsScheme:Y,urlHasHttpsScheme:x,clampAndCoarsenConnectionTimingInfo:V,simpleRangeHeaderValue:P,buildContentRange:G,createInflate:O,extractMimeType:J}=A(6686),W=A(4589),{safelyExtractBody:q,extractBody:_}=A(2530),{redirectStatusSet:X,nullBodyStatus:Z,safeMethodsSet:z,requestBodyHeader:j,subresourceSet:$}=A(9441),K=A(8474),{Readable:ee,pipeline:te,finished:Ae,isErrored:re,isReadable:se}=A(7075),{addAbortListener:ne,bufferToLowerCasedHeaderName:ie}=A(2858),{dataURLProcessor:oe,serializeAMimeType:ae,minimizeSupportedMimeType:ce}=A(9934),{getGlobalDispatcher:ge}=A(9879),{webidl:le}=A(6097),{STATUS_CODES:he}=A(7067),{bytesMatch:de}=A(7420),{createDeferredPromise:ue}=A(9250),Ee="function"==typeof u.createZstdDecompress,Ie=["GET","HEAD"],Qe="undefined"!=typeof __UNDICI_IS_NODE__||"undefined"!=typeof esbuildDetection?"node":"undici";let Be;class Ce extends K{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(e){"ongoing"===this.state&&(this.state="terminated",this.connection?.destroy(e),this.emit("terminated",e))}abort(e){"ongoing"===this.state&&(this.state="aborted",e||(e=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit("terminated",e))}}function pe(e){fe(e,"fetch")}function fe(e,t="other"){if("error"===e.type&&e.aborted)return;if(!e.urlList?.length)return;const A=e.urlList[0];let r=e.timingInfo,s=e.cacheState;Y(A)&&null!==r&&(e.timingAllowPassed||(r=D({startTime:r.startTime}),s=""),r.endTime=N(),e.timingInfo=r,me(r,A.href,t,globalThis,s,"",e.status))}const me=performance.markResourceTiming;function ye(e,t,A,r){if(e&&e.reject(r),null!=t.body?.stream&&se(t.body.stream)&&t.body.stream.cancel(r).catch((e=>{if("ERR_INVALID_STATE"!==e.code)throw e})),null==A)return;const s=a(A);null!=s.body?.stream&&se(s.body.stream)&&s.body.stream.cancel(r).catch((e=>{if("ERR_INVALID_STATE"!==e.code)throw e}))}function De({request:e,processRequestBodyChunkLength:t,processRequestEndOfBody:A,processResponse:r,processResponseEndOfBody:s,processResponseConsumeBody:n,useParallelQueue:i=!1,dispatcher:o=ge()}){W(o);let a=null,c=!1;null!=e.client&&(a=e.client.globalObject,c=e.client.crossOriginIsolatedCapability);const g=N(c),l=D({startTime:g}),h={controller:new Ce(o),request:e,timingInfo:l,processRequestBodyChunkLength:t,processRequestEndOfBody:A,processResponse:r,processResponseConsumeBody:n,processResponseEndOfBody:s,taskDestination:a,crossOriginIsolatedCapability:c};if(W(!e.body||e.body.stream),"client"===e.window&&(e.window="Window"===e.client?.globalObject?.constructor?.name?e.client:"no-window"),"client"===e.origin&&(e.origin=e.client.origin),"client"===e.policyContainer&&(null!=e.client?e.policyContainer=I(e.client.policyContainer):e.policyContainer=E()),!e.headersList.contains("accept",!0)){const t="*/*";e.headersList.append("accept",t,!0)}return e.headersList.contains("accept-language",!0)||e.headersList.append("accept-language","*",!0),e.priority,$.has(e.destination),Se(h,!1),h.controller}async function Se(e,t){try{const A=e.request;let s=null;if(A.localURLsOnly&&!H(f(A))&&(s=r("local URLs only")),y(A),"blocked"===Q(A)&&(s=r("bad port")),""===A.referrerPolicy&&(A.referrerPolicy=A.policyContainer.referrerPolicy),"no-referrer"!==A.referrer&&(A.referrer=R(A)),null===s){const t=f(A);k(t,A.url)&&"basic"===A.responseTainting||"data:"===t.protocol||"navigate"===A.mode||"websocket"===A.mode?(A.responseTainting="basic",s=await we(e)):"same-origin"===A.mode?s=r('request mode cannot be "same-origin"'):"no-cors"===A.mode?"follow"!==A.redirect?s=r('redirect mode cannot be "follow" for "no-cors" request'):(A.responseTainting="opaque",s=await we(e)):Y(f(A))?(A.responseTainting="cors",s=await Ne(e)):s=r("URL scheme must be a HTTP(S) scheme")}if(t)return s;0===s.status||s.internalResponse||(A.responseTainting,"basic"===A.responseTainting?s=n(s,"basic"):"cors"===A.responseTainting?s=n(s,"cors"):"opaque"===A.responseTainting?s=n(s,"opaque"):W(!1));let i=0===s.status?s:s.internalResponse;if(0===i.urlList.length&&i.urlList.push(...A.urlList),A.timingAllowFailed||(s.timingAllowPassed=!0),"opaque"===s.type&&206===i.status&&i.rangeRequested&&!A.headers.contains("range",!0)&&(s=i=r()),0===s.status||"HEAD"!==A.method&&"CONNECT"!==A.method&&!Z.includes(i.status)||(i.body=null,e.controller.dump=!0),A.integrity){const t=t=>Re(e,r(t));if("opaque"===A.responseTainting||null==s.body)return void t(s.error);const n=r=>{de(r,A.integrity)?(s.body=q(r)[0],Re(e,s)):t("integrity mismatch")};T(s.body,n,t)}else Re(e,s)}catch(t){e.controller.terminate(t)}}function we(e){if(F(e)&&0===e.request.redirectCount)return Promise.resolve(s(e));const{request:t}=e,{protocol:n}=f(t);switch(n){case"about:":return Promise.resolve(r("about scheme is not supported"));case"blob:":{Be||(Be=A(4573).resolveObjectURL);const e=f(t);if(0!==e.search.length)return Promise.resolve(r("NetworkError when attempting to fetch resource."));const s=Be(e.toString());if("GET"!==t.method||!le.is.Blob(s))return Promise.resolve(r("invalid method"));const n=i(),o=s.size,a=L(`${o}`),c=s.type;if(t.headersList.contains("range",!0)){n.rangeRequested=!0;const e=t.headersList.get("range",!0),A=P(e,!0);if("failure"===A)return Promise.resolve(r("failed to fetch the data URL"));let{rangeStartValue:i,rangeEndValue:a}=A;if(null===i)i=o-a,a=i+a-1;else{if(i>=o)return Promise.resolve(r("Range start is greater than the blob's size."));(null===a||a>=o)&&(a=o-1)}const g=s.slice(i,a,c),l=_(g);n.body=l[0];const h=L(`${g.size}`),d=G(i,a,o);n.status=206,n.statusText="Partial Content",n.headersList.set("content-length",h,!0),n.headersList.set("content-type",c,!0),n.headersList.set("content-range",d,!0)}else{const e=_(s);n.statusText="OK",n.body=e[0],n.headersList.set("content-length",a,!0),n.headersList.set("content-type",c,!0)}return Promise.resolve(n)}case"data:":{const e=f(t),A=oe(e);if("failure"===A)return Promise.resolve(r("failed to fetch the data URL"));const s=ae(A.mimeType);return Promise.resolve(i({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:s}]],body:q(A.body)[0]}))}case"file:":return Promise.resolve(r("not implemented... yet..."));case"http:":case"https:":return Ne(e).catch((e=>r(e)));default:return Promise.resolve(r("unknown scheme"))}}function be(e,t){e.request.done=!0,null!=e.processResponseDone&&queueMicrotask((()=>e.processResponseDone(t)))}function Re(e,t){let A=e.timingInfo;const r=()=>{const r=Date.now();"document"===e.request.destination&&(e.controller.fullTimingInfo=A),e.controller.reportTimingSteps=()=>{if(!Y(e.request.url))return;A.endTime=r;let s=t.cacheState;const n=t.bodyInfo;t.timingAllowPassed||(A=D(A),s="");let i=0;if("navigator"!==e.request.mode||!t.hasCrossOriginRedirects){i=t.status;const e=J(t.headersList);"failure"!==e&&(n.contentType=ce(e))}null!=e.request.initiatorType&&me(A,e.request.url.href,e.request.initiatorType,globalThis,s,n,i)};queueMicrotask((()=>(e.request.done=!0,null!=e.processResponseEndOfBody&&queueMicrotask((()=>e.processResponseEndOfBody(t))),void(null!=e.request.initiatorType&&e.controller.reportTimingSteps()))))};null!=e.processResponse&&queueMicrotask((()=>{e.processResponse(t),e.processResponse=null}));const s="error"===t.type?t:t.internalResponse??t;null==s.body?r():Ae(s.body.stream,(()=>{r()}))}async function Ne(e){const t=e.request;let A=null,s=null;const n=e.timingInfo;if(t.serviceWorkers,null===A){if("follow"===t.redirect&&(t.serviceWorkers="none"),s=A=await ke(e),"cors"===t.responseTainting&&"failure"===w(t,A))return r("cors failure");"failure"===B(t,A)&&(t.timingAllowFailed=!0)}return"opaque"!==t.responseTainting&&"opaque"!==A.type||"blocked"!==b(t.origin,t.client,t.destination,s)?(X.has(s.status)&&("manual"!==t.redirect&&e.controller.connection.destroy(void 0,!1),"error"===t.redirect?A=r("unexpected redirect"):"manual"===t.redirect?A=s:"follow"===t.redirect?A=await function(e,t){const A=e.request,s=t.internalResponse?t.internalResponse:t;let n;try{if(n=p(s,f(A).hash),null==n)return t}catch(e){return Promise.resolve(r(e))}if(!Y(n))return Promise.resolve(r("URL scheme must be a HTTP(S) scheme"));if(20===A.redirectCount)return Promise.resolve(r("redirect count exceeded"));if(A.redirectCount+=1,"cors"===A.mode&&(n.username||n.password)&&!k(A,n))return Promise.resolve(r('cross origin not allowed for request mode "cors"'));if("cors"===A.responseTainting&&(n.username||n.password))return Promise.resolve(r('URL cannot contain credentials for request mode "cors"'));if(303!==s.status&&null!=A.body&&null==A.body.source)return Promise.resolve(r());if([301,302].includes(s.status)&&"POST"===A.method||303===s.status&&!Ie.includes(A.method)){A.method="GET",A.body=null;for(const e of j)A.headersList.delete(e)}k(f(A),n)||(A.headersList.delete("authorization",!0),A.headersList.delete("proxy-authorization",!0),A.headersList.delete("cookie",!0),A.headersList.delete("host",!0));null!=A.body&&(W(null!=A.body.source),A.body=q(A.body.source)[0]);const i=e.timingInfo;i.redirectEndTime=i.postRedirectStartTime=N(e.crossOriginIsolatedCapability),0===i.redirectStartTime&&(i.redirectStartTime=i.startTime);return A.urlList.push(n),m(A,s),Se(e,!0)}(e,A):W(!1)),A.timingInfo=n,A):r("blocked")}async function ke(e,t=!1,A=!1){const n=e.request;let o=null,a=null,g=null;"no-window"===n.window&&"error"===n.redirect?(o=e,a=n):(a=l(n),o={...e},o.request=a);const h="include"===n.credentials||"same-origin"===n.credentials&&"basic"===n.responseTainting,d=a.body?a.body.length:null;let E=null;if(null==a.body&&["POST","PUT"].includes(a.method)&&(E="0"),null!=d&&(E=L(`${d}`)),null!=E&&a.headersList.append("content-length",E,!0),null!=d&&a.keepalive,le.is.URL(a.referrer)&&a.headersList.append("referer",L(a.referrer.href),!0),C(a),S(a),a.headersList.contains("user-agent",!0)||a.headersList.append("user-agent",Qe,!0),"default"===a.cache&&(a.headersList.contains("if-modified-since",!0)||a.headersList.contains("if-none-match",!0)||a.headersList.contains("if-unmodified-since",!0)||a.headersList.contains("if-match",!0)||a.headersList.contains("if-range",!0))&&(a.cache="no-store"),"no-cache"!==a.cache||a.preventNoCacheCacheControlHeaderModification||a.headersList.contains("cache-control",!0)||a.headersList.append("cache-control","max-age=0",!0),"no-store"!==a.cache&&"reload"!==a.cache||(a.headersList.contains("pragma",!0)||a.headersList.append("pragma","no-cache",!0),a.headersList.contains("cache-control",!0)||a.headersList.append("cache-control","no-cache",!0)),a.headersList.contains("range",!0)&&a.headersList.append("accept-encoding","identity",!0),a.headersList.contains("accept-encoding",!0)||(x(f(a))?a.headersList.append("accept-encoding","br, gzip, deflate",!0):a.headersList.append("accept-encoding","gzip, deflate",!0)),a.headersList.delete("host",!0),a.cache="no-store","no-store"!==a.cache&&a.cache,null==g){if("only-if-cached"===a.cache)return r("only if cached");const e=await async function(e){W(!e.controller.connection||e.controller.connection.destroyed),e.controller.connection={abort:null,destroyed:!1,destroy(e,t=!0){this.destroyed||(this.destroyed=!0,t&&this.abort?.(e??new DOMException("The operation was aborted.","AbortError")))}};const t=e.request;let A=null;const n=e.timingInfo,o=null;null==o&&(t.cache="no-store");t.mode;let a=null;if(null==t.body&&e.processRequestEndOfBody)queueMicrotask((()=>e.processRequestEndOfBody()));else if(null!=t.body){const A=async function*(t){F(e)||(yield t,e.processRequestBodyChunkLength?.(t.byteLength))},r=()=>{F(e)||e.processRequestEndOfBody&&e.processRequestEndOfBody()},s=t=>{F(e)||("AbortError"===t.name?e.controller.abort():e.controller.terminate(t))};a=async function*(){try{for await(const e of t.body.stream)yield*A(e);r()}catch(e){s(e)}}()}try{const{body:t,status:r,statusText:s,headersList:n,socket:o}=await E({body:a});if(o)A=i({status:r,statusText:s,headersList:n,socket:o});else{const o=t[Symbol.asyncIterator]();e.controller.next=()=>o.next(),A=i({status:r,statusText:s,headersList:n})}}catch(t){return"AbortError"===t.name?(e.controller.connection.destroy(),s(e,t)):r(t)}const g=()=>e.controller.resume(),l=t=>{F(e)||e.controller.abort(t)},h=new ReadableStream({start(t){e.controller.controller=t},pull:g,cancel:l,type:"bytes"});A.body={stream:h,source:null,length:null},e.controller.resume||e.controller.on("terminated",d);function d(t){U(e)?(A.aborted=!0,se(h)&&e.controller.controller.error(e.controller.serializedAbortReason)):se(h)&&e.controller.controller.error(new TypeError("terminated",{cause:M(t)?t:void 0})),e.controller.connection.destroy()}return e.controller.resume=async()=>{for(;;){let t,r;try{const{done:A,value:r}=await e.controller.next();if(U(e))break;t=A?void 0:r}catch(A){e.controller.ended&&!n.encodedBodySize?t=void 0:(t=A,r=!0)}if(void 0===t)return v(e.controller.controller),void be(e,A);if(n.decodedBodySize+=t?.byteLength??0,r)return void e.controller.terminate(t);const s=new Uint8Array(t);if(s.byteLength&&e.controller.controller.enqueue(s),re(h))return void e.controller.terminate();if(e.controller.controller.desiredSize<=0)return}},A;function E({body:A}){const r=f(t),s=e.controller.dispatcher;return new Promise(((i,o)=>s.dispatch({path:r.pathname+r.search,origin:r.origin,method:t.method,body:s.isMockActive?t.body&&(t.body.source||t.body.stream):A,headers:t.headersList.entries,maxRedirections:0,upgrade:"websocket"===t.mode?"websocket":void 0},{body:null,abort:null,onConnect(t){const{connection:A}=e.controller;n.finalConnectionTimingInfo=V(void 0,n.postRedirectStartTime,e.crossOriginIsolatedCapability),A.destroyed?t(new DOMException("The operation was aborted.","AbortError")):(e.controller.on("terminated",t),this.abort=A.abort=t),n.finalNetworkRequestStartTime=N(e.crossOriginIsolatedCapability)},onResponseStarted(){n.finalNetworkResponseStartTime=N(e.crossOriginIsolatedCapability)},onHeaders(e,A,r,s){if(e<200)return!1;const n=new c;for(let e=0;e<A.length;e+=2)n.append(ie(A[e]),A[e+1].toString("latin1"),!0);const o=n.get("location",!0);this.body=new ee({read:r});const a=o&&"follow"===t.redirect&&X.has(e),g=[];if("HEAD"!==t.method&&"CONNECT"!==t.method&&!Z.includes(e)&&!a){const e=n.get("content-encoding",!0),t=e?e.toLowerCase().split(","):[];for(let e=t.length-1;e>=0;--e){const A=t[e].trim();if("x-gzip"===A||"gzip"===A)g.push(u.createGunzip({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if("deflate"===A)g.push(O({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if("br"===A)g.push(u.createBrotliDecompress({flush:u.constants.BROTLI_OPERATION_FLUSH,finishFlush:u.constants.BROTLI_OPERATION_FLUSH}));else{if("zstd"!==A||!Ee){g.length=0;break}g.push(u.createZstdDecompress({flush:u.constants.ZSTD_e_continue,finishFlush:u.constants.ZSTD_e_end}))}}}const l=this.onError.bind(this);return i({status:e,statusText:s,headersList:n,body:g.length?te(this.body,...g,(e=>{e&&this.onError(e)})).on("error",l):this.body.on("error",l)}),!0},onData(t){if(e.controller.dump)return;const A=t;return n.encodedBodySize+=A.byteLength,this.body.push(A)},onComplete(){this.abort&&e.controller.off("terminated",this.abort),e.controller.ended=!0,this.body.push(null)},onError(t){this.abort&&e.controller.off("terminated",this.abort),this.body?.destroy(t),e.controller.terminate(t),o(t)},onUpgrade(e,t,A){if(101!==e)return;const r=new c;for(let e=0;e<t.length;e+=2)r.append(ie(t[e]),t[e+1].toString("latin1"),!0);return i({status:e,statusText:he[e],headersList:r,socket:A}),!0}})))}}(o,h,A);!z.has(a.method)&&e.status>=200&&e.status,null==g&&(g=e)}if(g.urlList=[...a.urlList],a.headersList.contains("range",!0)&&(g.rangeRequested=!0),g.requestIncludesCredentials=h,407===g.status)return"no-window"===n.window?r():F(e)?s(e):r("proxy authentication required");if(421===g.status&&!A&&(null==n.body||null!=n.body.source)){if(F(e))return s(e);e.controller.connection.destroy(),g=await ke(e,t,!0)}return g}e.exports={fetch:function(e,t=void 0){le.argumentLengthCheck(arguments,1,"globalThis.fetch");let A,r=ue();try{A=new g(e,t)}catch(e){return r.reject(e),r.promise}const s=d(A);if(A.signal.aborted)return ye(r,s,null,A.signal.reason),r.promise;const n=s.client.globalObject;"ServiceWorkerGlobalScope"===n?.constructor?.name&&(s.serviceWorkers="none");let i=null,a=!1,c=null;return ne(A.signal,(()=>{a=!0,W(null!=c),c.abort(A.signal.reason);const e=i?.deref();ye(r,s,e,A.signal.reason)})),c=De({request:s,processResponseEndOfBody:pe,processResponse:e=>{a||(e.aborted?ye(r,s,i,c.serializedAbortReason):"error"!==e.type?(i=new WeakRef(o(e,"immutable")),r.resolve(i.deref()),r=null):r.reject(new TypeError("fetch failed",{cause:e.error})))},dispatcher:h(A)}),r.promise},Fetch:Ce,fetching:De,finalizeAndReportTiming:fe}},4609:(e,t,A)=>{"use strict";const{extractBody:r,mixinBody:s,cloneBody:n,bodyUnusable:i}=A(2530),{Headers:o,fill:a,HeadersList:c,setHeadersGuard:g,getHeadersGuard:l,setHeadersList:h,getHeadersList:d}=A(6558),u=A(2858),E=A(7975),{isValidHTTPToken:I,sameOrigin:Q,environmentSettingsObject:B}=A(6686),{forbiddenMethodsSet:C,corsSafeListedMethodsSet:p,referrerPolicy:f,requestRedirect:m,requestMode:y,requestCredentials:D,requestCache:S,requestDuplex:w}=A(9441),{kEnumerableProperty:b,normalizedMethodRecordsBase:R,normalizedMethodRecords:N}=u,{webidl:k}=A(6097),{URLSerializer:F}=A(9934),{kConstruct:U}=A(257),M=A(4589),{getMaxListeners:T,setMaxListeners:v,defaultMaxListeners:L}=A(8474),H=Symbol("abortController"),Y=new FinalizationRegistry((({signal:e,abort:t})=>{e.removeEventListener("abort",t)})),x=new WeakMap;let V;try{V=T((new AbortController).signal)>0}catch{V=!1}function P(e){return function t(){const A=e.deref();if(void 0!==A){Y.unregister(t),this.removeEventListener("abort",t),A.abort(this.reason);const e=x.get(A.signal);if(void 0!==e){if(0!==e.size){for(const t of e){const e=t.deref();void 0!==e&&e.abort(this.reason)}e.clear()}x.delete(A.signal)}}}}let G=!1;class O{#$e;#_e;#Ce;#ge;constructor(e,t=void 0){if(k.util.markAsUncloneable(this),e===U)return;k.argumentLengthCheck(arguments,1,"Request constructor"),e=k.converters.RequestInfo(e),t=k.converters.RequestInit(t);let A=null,s=null;const n=B.settingsObject.baseUrl;let l=null;if("string"==typeof e){let r;this.#_e=t.dispatcher;try{r=new URL(e,n)}catch(t){throw new TypeError("Failed to parse URL from "+e,{cause:t})}if(r.username||r.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e);A=z({urlList:[r]}),s="cors"}else M(k.is.Request(e)),A=e.#ge,l=e.#$e,this.#_e=t.dispatcher||e.#_e;const E=B.settingsObject.origin;let f="client";if("EnvironmentSettingsObject"===A.window?.constructor?.name&&Q(A.window,E)&&(f=A.window),null!=t.window)throw new TypeError(`'window' option '${f}' must be null`);"window"in t&&(f="no-window"),A=z({method:A.method,headersList:A.headersList,unsafeRequest:A.unsafeRequest,client:B.settingsObject,window:f,priority:A.priority,origin:A.origin,referrer:A.referrer,referrerPolicy:A.referrerPolicy,mode:A.mode,credentials:A.credentials,cache:A.cache,redirect:A.redirect,integrity:A.integrity,keepalive:A.keepalive,reloadNavigation:A.reloadNavigation,historyNavigation:A.historyNavigation,urlList:[...A.urlList]});const m=0!==Object.keys(t).length;if(m&&("navigate"===A.mode&&(A.mode="same-origin"),A.reloadNavigation=!1,A.historyNavigation=!1,A.origin="client",A.referrer="client",A.referrerPolicy="",A.url=A.urlList[A.urlList.length-1],A.urlList=[A.url]),void 0!==t.referrer){const e=t.referrer;if(""===e)A.referrer="no-referrer";else{let t;try{t=new URL(e,n)}catch(t){throw new TypeError(`Referrer "${e}" is not a valid URL.`,{cause:t})}"about:"===t.protocol&&"client"===t.hostname||E&&!Q(t,B.settingsObject.baseUrl)?A.referrer="client":A.referrer=t}}let y;if(void 0!==t.referrerPolicy&&(A.referrerPolicy=t.referrerPolicy),y=void 0!==t.mode?t.mode:s,"navigate"===y)throw k.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(null!=y&&(A.mode=y),void 0!==t.credentials&&(A.credentials=t.credentials),void 0!==t.cache&&(A.cache=t.cache),"only-if-cached"===A.cache&&"same-origin"!==A.mode)throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(void 0!==t.redirect&&(A.redirect=t.redirect),null!=t.integrity&&(A.integrity=String(t.integrity)),void 0!==t.keepalive&&(A.keepalive=Boolean(t.keepalive)),void 0!==t.method){let e=t.method;const r=N[e];if(void 0!==r)A.method=r;else{if(!I(e))throw new TypeError(`'${e}' is not a valid HTTP method.`);const t=e.toUpperCase();if(C.has(t))throw new TypeError(`'${e}' HTTP method is unsupported.`);e=R[t]??e,A.method=e}G||"patch"!==A.method||(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"}),G=!0)}void 0!==t.signal&&(l=t.signal),this.#ge=A;const D=new AbortController;if(this.#$e=D.signal,null!=l)if(l.aborted)D.abort(l.reason);else{this[H]=D;const e=P(new WeakRef(D));V&&T(l)===L&&v(1500,l),u.addAbortListener(l,e),Y.register(D,{signal:l,abort:e},e)}if(this.#Ce=new o(U),h(this.#Ce,A.headersList),g(this.#Ce,"request"),"no-cors"===y){if(!p.has(A.method))throw new TypeError(`'${A.method} is unsupported in no-cors mode.`);g(this.#Ce,"request-no-cors")}if(m){const e=d(this.#Ce),A=void 0!==t.headers?t.headers:new c(e);if(e.clear(),A instanceof c){for(const{name:t,value:r}of A.rawValues())e.append(t,r,!1);e.cookies=A.cookies}else a(this.#Ce,A)}const S=k.is.Request(e)?e.#ge.body:null;if(!(null==t.body&&null==S||"GET"!==A.method&&"HEAD"!==A.method))throw new TypeError("Request with GET/HEAD method cannot have body.");let w=null;if(null!=t.body){const[e,s]=r(t.body,A.keepalive);w=e,s&&!d(this.#Ce).contains("content-type",!0)&&this.#Ce.append("content-type",s,!0)}const b=w??S;if(null!=b&&null==b.source){if(null!=w&&null==t.duplex)throw new TypeError("RequestInit: duplex option is required when sending a body.");if("same-origin"!==A.mode&&"cors"!==A.mode)throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');A.useCORSPreflightFlag=!0}let F=b;if(null==w&&null!=S){if(i(e.#ge))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");const t=new TransformStream;S.stream.pipeThrough(t),F={source:S.source,length:S.length,stream:t.readable}}this.#ge.body=F}get method(){return k.brandCheck(this,O),this.#ge.method}get url(){return k.brandCheck(this,O),F(this.#ge.url)}get headers(){return k.brandCheck(this,O),this.#Ce}get destination(){return k.brandCheck(this,O),this.#ge.destination}get referrer(){return k.brandCheck(this,O),"no-referrer"===this.#ge.referrer?"":"client"===this.#ge.referrer?"about:client":this.#ge.referrer.toString()}get referrerPolicy(){return k.brandCheck(this,O),this.#ge.referrerPolicy}get mode(){return k.brandCheck(this,O),this.#ge.mode}get credentials(){return k.brandCheck(this,O),this.#ge.credentials}get cache(){return k.brandCheck(this,O),this.#ge.cache}get redirect(){return k.brandCheck(this,O),this.#ge.redirect}get integrity(){return k.brandCheck(this,O),this.#ge.integrity}get keepalive(){return k.brandCheck(this,O),this.#ge.keepalive}get isReloadNavigation(){return k.brandCheck(this,O),this.#ge.reloadNavigation}get isHistoryNavigation(){return k.brandCheck(this,O),this.#ge.historyNavigation}get signal(){return k.brandCheck(this,O),this.#$e}get body(){return k.brandCheck(this,O),this.#ge.body?this.#ge.body.stream:null}get bodyUsed(){return k.brandCheck(this,O),!!this.#ge.body&&u.isDisturbed(this.#ge.body.stream)}get duplex(){return k.brandCheck(this,O),"half"}clone(){if(k.brandCheck(this,O),i(this.#ge))throw new TypeError("unusable");const e=j(this.#ge),t=new AbortController;if(this.signal.aborted)t.abort(this.signal.reason);else{let e=x.get(this.signal);void 0===e&&(e=new Set,x.set(this.signal,e));const A=new WeakRef(t);e.add(A),u.addAbortListener(t.signal,P(A))}return $(e,this.#_e,t.signal,l(this.#Ce))}[E.inspect.custom](e,t){null===t.depth&&(t.depth=2),t.colors??=!0;const A={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${E.formatWithOptions(t,A)}`}static setRequestSignal(e,t){return e.#$e=t,e}static getRequestDispatcher(e){return e.#_e}static setRequestDispatcher(e,t){e.#_e=t}static setRequestHeaders(e,t){e.#Ce=t}static getRequestState(e){return e.#ge}static setRequestState(e,t){e.#ge=t}}const{setRequestSignal:J,getRequestDispatcher:W,setRequestDispatcher:q,setRequestHeaders:_,getRequestState:X,setRequestState:Z}=O;function z(e){return{method:e.method??"GET",localURLsOnly:e.localURLsOnly??!1,unsafeRequest:e.unsafeRequest??!1,body:e.body??null,client:e.client??null,reservedClient:e.reservedClient??null,replacesClientId:e.replacesClientId??"",window:e.window??"client",keepalive:e.keepalive??!1,serviceWorkers:e.serviceWorkers??"all",initiator:e.initiator??"",destination:e.destination??"",priority:e.priority??null,origin:e.origin??"client",policyContainer:e.policyContainer??"client",referrer:e.referrer??"client",referrerPolicy:e.referrerPolicy??"",mode:e.mode??"no-cors",useCORSPreflightFlag:e.useCORSPreflightFlag??!1,credentials:e.credentials??"same-origin",useCredentials:e.useCredentials??!1,cache:e.cache??"default",redirect:e.redirect??"follow",integrity:e.integrity??"",cryptoGraphicsNonceMetadata:e.cryptoGraphicsNonceMetadata??"",parserMetadata:e.parserMetadata??"",reloadNavigation:e.reloadNavigation??!1,historyNavigation:e.historyNavigation??!1,userActivation:e.userActivation??!1,taintedOrigin:e.taintedOrigin??!1,redirectCount:e.redirectCount??0,responseTainting:e.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:e.preventNoCacheCacheControlHeaderModification??!1,done:e.done??!1,timingAllowFailed:e.timingAllowFailed??!1,urlList:e.urlList,url:e.urlList[0],headersList:e.headersList?new c(e.headersList):new c}}function j(e){const t=z({...e,body:null});return null!=e.body&&(t.body=n(e.body)),t}function $(e,t,A,r){const s=new O(U);Z(s,e),q(s,t),J(s,A);const n=new o(U);return _(s,n),h(n,e.headersList),g(n,r),s}Reflect.deleteProperty(O,"setRequestSignal"),Reflect.deleteProperty(O,"getRequestDispatcher"),Reflect.deleteProperty(O,"setRequestDispatcher"),Reflect.deleteProperty(O,"setRequestHeaders"),Reflect.deleteProperty(O,"getRequestState"),Reflect.deleteProperty(O,"setRequestState"),s(O,X),Object.defineProperties(O.prototype,{method:b,url:b,headers:b,redirect:b,clone:b,signal:b,duplex:b,destination:b,body:b,bodyUsed:b,isHistoryNavigation:b,isReloadNavigation:b,keepalive:b,integrity:b,cache:b,credentials:b,attribute:b,referrerPolicy:b,referrer:b,mode:b,[Symbol.toStringTag]:{value:"Request",configurable:!0}}),k.is.Request=k.util.MakeTypeAssertion(O),k.converters.RequestInfo=function(e){return"string"==typeof e?k.converters.USVString(e):k.is.Request(e)?e:k.converters.USVString(e)},k.converters.RequestInit=k.dictionaryConverter([{key:"method",converter:k.converters.ByteString},{key:"headers",converter:k.converters.HeadersInit},{key:"body",converter:k.nullableConverter(k.converters.BodyInit)},{key:"referrer",converter:k.converters.USVString},{key:"referrerPolicy",converter:k.converters.DOMString,allowedValues:f},{key:"mode",converter:k.converters.DOMString,allowedValues:y},{key:"credentials",converter:k.converters.DOMString,allowedValues:D},{key:"cache",converter:k.converters.DOMString,allowedValues:S},{key:"redirect",converter:k.converters.DOMString,allowedValues:m},{key:"integrity",converter:k.converters.DOMString},{key:"keepalive",converter:k.converters.boolean},{key:"signal",converter:k.nullableConverter((e=>k.converters.AbortSignal(e,"RequestInit","signal")))},{key:"window",converter:k.converters.any},{key:"duplex",converter:k.converters.DOMString,allowedValues:w},{key:"dispatcher",converter:k.converters.any}]),e.exports={Request:O,makeRequest:z,fromInnerRequest:$,cloneRequest:j,getRequestDispatcher:W,getRequestState:X}},4821:(e,t,A)=>{"use strict";const{Headers:r,HeadersList:s,fill:n,getHeadersGuard:i,setHeadersGuard:o,setHeadersList:a}=A(6558),{extractBody:c,cloneBody:g,mixinBody:l,streamRegistry:h,bodyUnusable:d}=A(2530),u=A(2858),E=A(7975),{kEnumerableProperty:I}=u,{isValidReasonPhrase:Q,isCancelled:B,isAborted:C,serializeJavascriptValueToJSONString:p,isErrorLike:f,isomorphicEncode:m,environmentSettingsObject:y}=A(6686),{redirectStatusSet:D,nullBodyStatus:S}=A(9441),{webidl:w}=A(6097),{URLSerializer:b}=A(9934),{kConstruct:R}=A(257),N=A(4589),k=new TextEncoder("utf-8");class F{#Ce;#ge;static error(){return G(Y(),"immutable")}static json(e,t=void 0){w.argumentLengthCheck(arguments,1,"Response.json"),null!==t&&(t=w.converters.ResponseInit(t));const A=k.encode(p(e)),r=c(A),s=G(H({}),"response");return P(s,t,{body:r[0],type:"application/json"}),s}static redirect(e,t=302){let A;w.argumentLengthCheck(arguments,1,"Response.redirect"),e=w.converters.USVString(e),t=w.converters["unsigned short"](t);try{A=new URL(e,y.settingsObject.baseUrl)}catch(t){throw new TypeError(`Failed to parse URL from ${e}`,{cause:t})}if(!D.has(t))throw new RangeError(`Invalid status code ${t}`);const r=G(H({}),"immutable");r.#ge.status=t;const s=m(b(A));return r.#ge.headersList.append("location",s,!0),r}constructor(e=null,t=void 0){if(w.util.markAsUncloneable(this),e===R)return;null!==e&&(e=w.converters.BodyInit(e,"Response","body")),t=w.converters.ResponseInit(t),this.#ge=H({}),this.#Ce=new r(R),o(this.#Ce,"response"),a(this.#Ce,this.#ge.headersList);let A=null;if(null!=e){const[t,r]=c(e);A={body:t,type:r}}P(this,t,A)}get type(){return w.brandCheck(this,F),this.#ge.type}get url(){w.brandCheck(this,F);const e=this.#ge.urlList,t=e[e.length-1]??null;return null===t?"":b(t,!0)}get redirected(){return w.brandCheck(this,F),this.#ge.urlList.length>1}get status(){return w.brandCheck(this,F),this.#ge.status}get ok(){return w.brandCheck(this,F),this.#ge.status>=200&&this.#ge.status<=299}get statusText(){return w.brandCheck(this,F),this.#ge.statusText}get headers(){return w.brandCheck(this,F),this.#Ce}get body(){return w.brandCheck(this,F),this.#ge.body?this.#ge.body.stream:null}get bodyUsed(){return w.brandCheck(this,F),!!this.#ge.body&&u.isDisturbed(this.#ge.body.stream)}clone(){if(w.brandCheck(this,F),d(this.#ge))throw w.errors.exception({header:"Response.clone",message:"Body has already been consumed."});const e=L(this.#ge);return this.#ge.body?.stream&&h.register(this,new WeakRef(this.#ge.body.stream)),G(e,i(this.#Ce))}[E.inspect.custom](e,t){null===t.depth&&(t.depth=2),t.colors??=!0;const A={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${E.formatWithOptions(t,A)}`}static getResponseHeaders(e){return e.#Ce}static setResponseHeaders(e,t){e.#Ce=t}static getResponseState(e){return e.#ge}static setResponseState(e,t){e.#ge=t}}const{getResponseHeaders:U,setResponseHeaders:M,getResponseState:T,setResponseState:v}=F;function L(e){if(e.internalResponse)return V(L(e.internalResponse),e.type);const t=H({...e,body:null});return null!=e.body&&(t.body=g(e.body)),t}function H(e){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...e,headersList:e?.headersList?new s(e?.headersList):new s,urlList:e?.urlList?[...e.urlList]:[]}}function Y(e){return H({type:"error",status:0,error:f(e)?e:new Error(e?String(e):e),aborted:e&&"AbortError"===e.name})}function x(e,t){return t={internalResponse:e,...t},new Proxy(e,{get:(e,A)=>A in t?t[A]:e[A],set:(e,A,r)=>(N(!(A in t)),e[A]=r,!0)})}function V(e,t){return"basic"===t?x(e,{type:"basic",headersList:e.headersList}):"cors"===t?x(e,{type:"cors",headersList:e.headersList}):"opaque"===t?x(e,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null}):"opaqueredirect"===t?x(e,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null}):void N(!1)}function P(e,t,A){if(null!==t.status&&(t.status<200||t.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in t&&null!=t.statusText&&!Q(String(t.statusText)))throw new TypeError("Invalid statusText");if("status"in t&&null!=t.status&&(T(e).status=t.status),"statusText"in t&&null!=t.statusText&&(T(e).statusText=t.statusText),"headers"in t&&null!=t.headers&&n(U(e),t.headers),A){if(S.includes(e.status))throw w.errors.exception({header:"Response constructor",message:`Invalid response status code ${e.status}`});T(e).body=A.body,null==A.type||T(e).headersList.contains("content-type",!0)||T(e).headersList.append("content-type",A.type,!0)}}function G(e,t){const A=new F(R);v(A,e);const s=new r(R);return M(A,s),a(s,e.headersList),o(s,t),e.body?.stream&&h.register(A,new WeakRef(e.body.stream)),A}Reflect.deleteProperty(F,"getResponseHeaders"),Reflect.deleteProperty(F,"setResponseHeaders"),Reflect.deleteProperty(F,"getResponseState"),Reflect.deleteProperty(F,"setResponseState"),l(F,T),Object.defineProperties(F.prototype,{type:I,url:I,status:I,ok:I,redirected:I,statusText:I,headers:I,clone:I,body:I,bodyUsed:I,[Symbol.toStringTag]:{value:"Response",configurable:!0}}),Object.defineProperties(F,{json:I,redirect:I,error:I}),w.converters.XMLHttpRequestBodyInit=function(e,t,A){return"string"==typeof e?w.converters.USVString(e,t,A):w.is.Blob(e)||w.is.BufferSource(e)||w.is.FormData(e)||w.is.URLSearchParams(e)?e:w.converters.DOMString(e,t,A)},w.converters.BodyInit=function(e,t,A){return w.is.ReadableStream(e)||e?.[Symbol.asyncIterator]?e:w.converters.XMLHttpRequestBodyInit(e,t,A)},w.converters.ResponseInit=w.dictionaryConverter([{key:"status",converter:w.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:w.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:w.converters.HeadersInit}]),w.is.Response=w.util.MakeTypeAssertion(F),e.exports={isNetworkError:function(e){return"error"===e.type&&0===e.status},makeNetworkError:Y,makeResponse:H,makeAppropriateNetworkError:function(e,t=null){return N(B(e)),C(e)?Y(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:t})):Y(Object.assign(new DOMException("Request was cancelled."),{cause:t}))},filterResponse:V,Response:F,cloneResponse:L,fromInnerResponse:G,getResponseState:T}},6686:(e,t,A)=>{"use strict";const{Transform:r}=A(7075),s=A(8522),{redirectStatusSet:n,referrerPolicyTokens:i,badPortsSet:o}=A(9441),{getGlobalOrigin:a}=A(2837),{collectASequenceOfCodePoints:c,collectAnHTTPQuotedString:g,removeChars:l,parseMIMEType:h}=A(9934),{performance:d}=A(643),{ReadableStreamFrom:u,isValidHTTPToken:E,normalizedMethodRecordsBase:I}=A(2858),Q=A(4589),{isUint8Array:B}=A(3429),{webidl:C}=A(6097);function p(e){const t=e.urlList,A=t.length;return 0===A?null:t[A-1].toString()}function f(e){for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(A>126||A<32)return!1}return!0}function m(e){return e.urlList[e.urlList.length-1]}const y=E;function D(e){return!1===("\t"===e[0]||" "===e[0]||"\t"===e[e.length-1]||" "===e[e.length-1]||e.includes("\n")||e.includes("\r")||e.includes("\0"))}function S(e,t){return e}function w(){return{referrerPolicy:"strict-origin-when-cross-origin"}}function b(e,t=!1){return Q(C.is.URL(e)),Y(e=new URL(e))?"no-referrer":(e.username="",e.password="",e.hash="",!0===t&&(e.pathname="",e.search=""),e)}const R=RegExp.prototype.test.bind(/^127\.(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){2}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)$/),N=RegExp.prototype.test.bind(/^(?:(?:0{1,4}:){7}|(?:0{1,4}:){1,6}:|::)0{0,3}1$/);function k(e){return e.includes(":")?("["===e[0]&&"]"===e[e.length-1]&&(e=e.slice(1,-1)),N(e)):R(e)}function F(e){return!!C.is.URL(e)&&("about:blank"===e.href||"about:srcdoc"===e.href||("data:"===e.protocol||("blob:"===e.protocol||!(null==(t=e.origin)||"null"===t||"https:"!==(t=new URL(t)).protocol&&"wss:"!==t.protocol&&!k(t.hostname)&&"localhost"!==t.hostname&&"localhost."!==t.hostname&&!t.hostname.endsWith(".localhost")&&!t.hostname.endsWith(".localhost.")&&"file:"!==t.protocol))));var t}function U(e,t){return e.origin===t.origin&&"null"===e.origin||e.protocol===t.protocol&&e.hostname===t.hostname&&e.port===t.port}const M=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function T(e,t,A=0,r=1){class s{#Ke;#et;#tt;constructor(e,t){this.#Ke=e,this.#et=t,this.#tt=0}next(){if("object"!=typeof this||null===this||!(#Ke in this))throw new TypeError(`'next' called on an object that does not implement interface ${e} Iterator.`);const s=this.#tt,n=t(this.#Ke);if(s>=n.length)return{value:void 0,done:!0};const{[A]:i,[r]:o}=n[s];let a;switch(this.#tt=s+1,this.#et){case"key":a=i;break;case"value":a=o;break;case"key+value":a=[i,o]}return{value:a,done:!1}}}return delete s.prototype.constructor,Object.setPrototypeOf(s.prototype,M),Object.defineProperties(s.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${e} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(e,t){return new s(e,t)}}const v=/[^\x00-\xFF]/;function L(e){return Q(!v.test(e)),e}async function H(e,t,A){try{const r=[];let s=0;for(;;){const{done:n,value:i}=await e.read();if(n)return void t(Buffer.concat(r,s));if(!B(i))return void A(new TypeError("Received non-Uint8Array chunk"));r.push(i),s+=i.length}}catch(e){A(e)}}function Y(e){Q("protocol"in e);const t=e.protocol;return"about:"===t||"blob:"===t||"data:"===t}function x(e){return"string"==typeof e&&":"===e[5]&&"h"===e[0]&&"t"===e[1]&&"t"===e[2]&&"p"===e[3]&&"s"===e[4]||"https:"===e.protocol}function V(e){Q("protocol"in e);const t=e.protocol;return"http:"===t||"https:"===t}class P extends r{#At;constructor(e){super(),this.#At=e}_transform(e,t,A){if(!this._inflateStream){if(0===e.length)return void A();this._inflateStream=8==(15&e[0])?s.createInflate(this.#At):s.createInflateRaw(this.#At),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",(()=>this.push(null))),this._inflateStream.on("error",(e=>this.destroy(e)))}this._inflateStream.write(e,t,A)}_final(e){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),e()}}function G(e,t){const A=t.get(e,!0);return null===A?null:function(e){const t=e,A={position:0},r=[];let s="";for(;A.position<t.length;){if(s+=c((e=>'"'!==e&&","!==e),t,A),A.position<t.length)if(34===t.charCodeAt(A.position)){if(s+=g(t,A),A.position<t.length)continue}else Q(44===t.charCodeAt(A.position)),A.position++;s=l(s,!0,!0,(e=>9===e||32===e)),r.push(s),s=""}return r}(A)}const O=new TextDecoder;class J{get baseUrl(){return a()}get origin(){return this.baseUrl?.origin}policyContainer={referrerPolicy:"strict-origin-when-cross-origin"}}const W=new class{settingsObject=new J};e.exports={isAborted:function(e){return"aborted"===e.controller.state},isCancelled:function(e){return"aborted"===e.controller.state||"terminated"===e.controller.state},isValidEncodedURL:f,ReadableStreamFrom:u,tryUpgradeRequestToAPotentiallyTrustworthyURL:function(e){},clampAndCoarsenConnectionTimingInfo:function(e,t,A){return!e?.startTime||e.startTime<t?{domainLookupStartTime:t,domainLookupEndTime:t,connectionStartTime:t,connectionEndTime:t,secureConnectionStartTime:t,ALPNNegotiatedProtocol:e?.ALPNNegotiatedProtocol}:{domainLookupStartTime:S(e.domainLookupStartTime),domainLookupEndTime:S(e.domainLookupEndTime),connectionStartTime:S(e.connectionStartTime),connectionEndTime:S(e.connectionEndTime),secureConnectionStartTime:S(e.secureConnectionStartTime),ALPNNegotiatedProtocol:e.ALPNNegotiatedProtocol}},coarsenedSharedCurrentTime:function(e){return S(d.now())},determineRequestsReferrer:function(e){const t=e.referrerPolicy;Q(t);let A=null;if("client"===e.referrer){const e=a();if(!e||"null"===e.origin)return"no-referrer";A=new URL(e)}else C.is.URL(e.referrer)&&(A=e.referrer);let r=b(A);const s=b(A,!0);switch(r.toString().length>4096&&(r=s),t){case"no-referrer":return"no-referrer";case"origin":return null!=s?s:b(A,!0);case"unsafe-url":return r;case"strict-origin":{const t=m(e);return F(r)&&!F(t)?"no-referrer":s}case"strict-origin-when-cross-origin":{const t=m(e);return U(r,t)?r:F(r)&&!F(t)?"no-referrer":s}case"same-origin":return U(e,r)?r:"no-referrer";case"origin-when-cross-origin":return U(e,r)?r:s;case"no-referrer-when-downgrade":{const t=m(e);return F(r)&&!F(t)?"no-referrer":r}}},makePolicyContainer:w,clonePolicyContainer:function(e){return{referrerPolicy:e.referrerPolicy}},appendFetchMetadata:function(e){let t=null;t=e.mode,e.headersList.set("sec-fetch-mode",t,!0)},appendRequestOriginHeader:function(e){let t=e.origin;if("client"!==t&&void 0!==t)if("cors"===e.responseTainting||"websocket"===e.mode)e.headersList.append("origin",t,!0);else if("GET"!==e.method&&"HEAD"!==e.method){switch(e.referrerPolicy){case"no-referrer":t=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":e.origin&&x(e.origin)&&!x(m(e))&&(t=null);break;case"same-origin":U(e,m(e))||(t=null)}e.headersList.append("origin",t,!0)}},TAOCheck:function(){return"success"},corsCheck:function(){return"success"},crossOriginResourcePolicyCheck:function(){return"allowed"},createOpaqueTimingInfo:function(e){return{startTime:e.startTime??0,redirectStartTime:0,redirectEndTime:0,postRedirectStartTime:e.startTime??0,finalServiceWorkerStartTime:0,finalNetworkResponseStartTime:0,finalNetworkRequestStartTime:0,endTime:0,encodedBodySize:0,decodedBodySize:0,finalConnectionTimingInfo:null}},setRequestReferrerPolicyOnRedirect:function(e,t){const A=function(e){const t=(e.headersList.get("referrer-policy",!0)??"").split(",");let A="";if(t.length)for(let e=t.length;0!==e;e--){const r=t[e-1].trim();if(i.has(r)){A=r;break}}return A}(t);""!==A&&(e.referrerPolicy=A)},isValidHTTPToken:E,requestBadPort:function(e){const t=m(e);return V(t)&&o.has(t.port)?"blocked":"allowed"},requestCurrentURL:m,responseURL:p,responseLocationURL:function(e,t){if(!n.has(e.status))return null;let A=e.headersList.get("location",!0);var r;return null!==A&&D(A)&&(f(A)||(r=A,A=Buffer.from(r,"binary").toString("utf8")),A=new URL(A,p(e))),A&&!A.hash&&(A.hash=t),A},isURLPotentiallyTrustworthy:F,isValidReasonPhrase:function(e){for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(!(9===A||A>=32&&A<=126||A>=128&&A<=255))return!1}return!0},sameOrigin:U,normalizeMethod:function(e){return I[e.toLowerCase()]??e},serializeJavascriptValueToJSONString:function(e){const t=JSON.stringify(e);if(void 0===t)throw new TypeError("Value is not JSON serializable");return Q("string"==typeof t),t},iteratorMixin:function(e,t,A,r=0,s=1){const n=T(e,A,r,s),i={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return C.brandCheck(this,t),n(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return C.brandCheck(this,t),n(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return C.brandCheck(this,t),n(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(A,r=globalThis){if(C.brandCheck(this,t),C.argumentLengthCheck(arguments,1,`${e}.forEach`),"function"!=typeof A)throw new TypeError(`Failed to execute 'forEach' on '${e}': parameter 1 is not of type 'Function'.`);for(const{0:e,1:t}of n(this,"key+value"))A.call(r,t,e,this)}}};return Object.defineProperties(t.prototype,{...i,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:i.entries.value}})},createIterator:T,isValidHeaderName:y,isValidHeaderValue:D,isErrorLike:function(e){return e instanceof Error||"Error"===e?.constructor?.name||"DOMException"===e?.constructor?.name},fullyReadBody:function(e,t,A){const r=t,s=A;try{H(e.stream.getReader(),r,s)}catch(e){s(e)}},readableStreamClose:function(e){try{e.close(),e.byobRequest?.respond(0)}catch(e){if(!e.message.includes("Controller is already closed")&&!e.message.includes("ReadableStream is already closed"))throw e}},isomorphicEncode:L,urlIsLocal:Y,urlHasHttpsScheme:x,urlIsHttpHttpsScheme:V,readAllBytes:H,simpleRangeHeaderValue:function(e,t){const A=e;if(!A.startsWith("bytes"))return"failure";const r={position:5};if(t&&c((e=>"\t"===e||" "===e),A,r),61!==A.charCodeAt(r.position))return"failure";r.position++,t&&c((e=>"\t"===e||" "===e),A,r);const s=c((e=>{const t=e.charCodeAt(0);return t>=48&&t<=57}),A,r),n=s.length?Number(s):null;if(t&&c((e=>"\t"===e||" "===e),A,r),45!==A.charCodeAt(r.position))return"failure";r.position++,t&&c((e=>"\t"===e||" "===e),A,r);const i=c((e=>{const t=e.charCodeAt(0);return t>=48&&t<=57}),A,r),o=i.length?Number(i):null;return r.position<A.length||null===o&&null===n||n>o?"failure":{rangeStartValue:n,rangeEndValue:o}},buildContentRange:function(e,t,A){let r="bytes ";return r+=L(`${e}`),r+="-",r+=L(`${t}`),r+="/",r+=L(`${A}`),r},createInflate:function(e){return new P(e)},extractMimeType:function(e){let t=null,A=null,r=null;const s=G("content-type",e);if(null===s)return"failure";for(const e of s){const s=h(e);"failure"!==s&&"*/*"!==s.essence&&(r=s,r.essence!==A?(t=null,r.parameters.has("charset")&&(t=r.parameters.get("charset")),A=r.essence):r.parameters.has("charset")||null===t||r.parameters.set("charset",t))}return null==r?"failure":r},getDecodeSplit:G,utf8DecodeBytes:function(e){return 0===e.length?"":(239===e[0]&&187===e[1]&&191===e[2]&&(e=e.subarray(3)),O.decode(e))},environmentSettingsObject:W,isOriginIPPotentiallyTrustworthy:k}},7420:(e,t,A)=>{"use strict";const r=A(4589),s=new Map([["sha256",0],["sha384",1],["sha512",2]]);let n;try{n=A(7598);const e=n.getHashes();0===e.length&&s.clear();for(const t of s.keys())!1===e.includes(t)&&s.delete(t)}catch{s.clear()}const i=Map.prototype.get.bind(s),o=Map.prototype.has.bind(s),a=void 0===n||0===s.size?()=>!0:(e,t)=>{const A=g(t);if(0===A.length)return!0;const r=c(A);for(const t of r){const A=t.alg,r=t.val;if(h(l(A,e),r))return!0}return!1};function c(e){const t=[];let A=null;for(const s of e){if(r(o(s.alg),"Invalid SRI hash algorithm token"),0===t.length){t.push(s),A=s;continue}const e=A.alg,n=i(e),a=s.alg,c=i(a);c<n||(c>n?(A=s,t[0]=s,t.length=1):t.push(s))}return t}function g(e){const t=[];for(const A of e.split(" ")){const e=A.split("?",1)[0];let r="";const s=[e.slice(0,6),e.slice(7)],n=s[0];if(!o(n))continue;s[1]&&(r=s[1]);const i={alg:n,val:r};t.push(i)}return t}const l=(e,t)=>n.hash(e,t,"base64");function h(e,t){let A=e.length;0!==A&&"="===e[A-1]&&(A-=1),0!==A&&"="===e[A-1]&&(A-=1);let r=t.length;if(0!==r&&"="===t[r-1]&&(r-=1),0!==r&&"="===t[r-1]&&(r-=1),A!==r)return!1;for(let r=0;r<A;++r)if(!(e[r]===t[r]||"+"===e[r]&&"-"===t[r]||"/"===e[r]&&"_"===t[r]))return!1;return!0}e.exports={applyAlgorithmToBytes:l,bytesMatch:a,caseSensitiveMatch:h,isValidSRIHashAlgorithm:o,getStrongestMetadata:c,parseMetadata:g}},6097:(e,t,A)=>{"use strict";const{types:r,inspect:s}=A(7975),{markAsUncloneable:n}=A(5919),i=Function.call.bind(Function.prototype[Symbol.hasInstance]),o={converters:{},util:{},errors:{},is:{}};o.errors.exception=function(e){return new TypeError(`${e.header}: ${e.message}`)},o.errors.conversionFailed=function(e){const t=1===e.types.length?"":" one of",A=`${e.argument} could not be converted to${t}: ${e.types.join(", ")}.`;return o.errors.exception({header:e.prefix,message:A})},o.errors.invalidArgument=function(e){return o.errors.exception({header:e.prefix,message:`"${e.value}" is an invalid ${e.type}.`})},o.brandCheck=function(e,t){if(!i(t,e)){const e=new TypeError("Illegal invocation");throw e.code="ERR_INVALID_THIS",e}},o.brandCheckMultiple=function(e){const t=e.map((e=>o.util.MakeTypeAssertion(e)));return e=>{if(t.every((t=>!t(e)))){const e=new TypeError("Illegal invocation");throw e.code="ERR_INVALID_THIS",e}}},o.argumentLengthCheck=function({length:e},t,A){if(e<t)throw o.errors.exception({message:`${t} argument${1!==t?"s":""} required, but${e?" only":""} ${e} found.`,header:A})},o.illegalConstructor=function(){throw o.errors.exception({header:"TypeError",message:"Illegal constructor"})},o.util.MakeTypeAssertion=function(e){return t=>i(e,t)},o.util.Type=function(e){switch(typeof e){case"undefined":return 1;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"bigint":return 6;case"function":case"object":return null===e?7:8}},o.util.Types={UNDEFINED:1,BOOLEAN:2,STRING:3,SYMBOL:4,NUMBER:5,BIGINT:6,NULL:7,OBJECT:8},o.util.TypeValueToString=function(e){switch(o.util.Type(e)){case 1:return"Undefined";case 2:return"Boolean";case 3:return"String";case 4:return"Symbol";case 5:return"Number";case 6:return"BigInt";case 7:return"Null";case 8:return"Object"}},o.util.markAsUncloneable=n||(()=>{}),o.util.ConvertToInt=function(e,t,A,r){let s,n;64===t?(s=Math.pow(2,53)-1,n="unsigned"===A?0:Math.pow(-2,53)+1):"unsigned"===A?(n=0,s=Math.pow(2,t)-1):(n=Math.pow(-2,t)-1,s=Math.pow(2,t-1)-1);let i=Number(e);if(0===i&&(i=0),o.util.HasFlag(r,o.attributes.EnforceRange)){if(Number.isNaN(i)||i===Number.POSITIVE_INFINITY||i===Number.NEGATIVE_INFINITY)throw o.errors.exception({header:"Integer conversion",message:`Could not convert ${o.util.Stringify(e)} to an integer.`});if(i=o.util.IntegerPart(i),i<n||i>s)throw o.errors.exception({header:"Integer conversion",message:`Value must be between ${n}-${s}, got ${i}.`});return i}return!Number.isNaN(i)&&o.util.HasFlag(r,o.attributes.Clamp)?(i=Math.min(Math.max(i,n),s),i=Math.floor(i)%2==0?Math.floor(i):Math.ceil(i),i):Number.isNaN(i)||0===i&&Object.is(0,i)||i===Number.POSITIVE_INFINITY||i===Number.NEGATIVE_INFINITY?0:(i=o.util.IntegerPart(i),i%=Math.pow(2,t),"signed"===A&&i>=Math.pow(2,t)-1?i-Math.pow(2,t):i)},o.util.IntegerPart=function(e){const t=Math.floor(Math.abs(e));return e<0?-1*t:t},o.util.Stringify=function(e){switch(o.util.Type(e)){case 4:return`Symbol(${e.description})`;case 8:return s(e);case 3:return`"${e}"`;case 6:return`${e}n`;default:return`${e}`}},o.util.IsResizableArrayBuffer=function(e){if(r.isArrayBuffer(e))return e.resizable;if(r.isSharedArrayBuffer(e))return e.growable;throw o.errors.exception({header:"IsResizableArrayBuffer",message:`"${o.util.Stringify(e)}" is not an array buffer.`})},o.util.HasFlag=function(e,t){return"number"==typeof e&&(e&t)===t},o.sequenceConverter=function(e){return(t,A,r,s)=>{if(8!==o.util.Type(t))throw o.errors.exception({header:A,message:`${r} (${o.util.Stringify(t)}) is not iterable.`});const n="function"==typeof s?s():t?.[Symbol.iterator]?.(),i=[];let a=0;if(void 0===n||"function"!=typeof n.next)throw o.errors.exception({header:A,message:`${r} is not iterable.`});for(;;){const{done:t,value:s}=n.next();if(t)break;i.push(e(s,A,`${r}[${a++}]`))}return i}},o.recordConverter=function(e,t){return(A,s,n)=>{if(8!==o.util.Type(A))throw o.errors.exception({header:s,message:`${n} ("${o.util.TypeValueToString(A)}") is not an Object.`});const i={};if(!r.isProxy(A)){const r=[...Object.getOwnPropertyNames(A),...Object.getOwnPropertySymbols(A)];for(const a of r){const r=o.util.Stringify(a),c=e(a,s,`Key ${r} in ${n}`),g=t(A[a],s,`${n}[${r}]`);i[c]=g}return i}const a=Reflect.ownKeys(A);for(const r of a){const o=Reflect.getOwnPropertyDescriptor(A,r);if(o?.enumerable){const o=e(r,s,n),a=t(A[r],s,n);i[o]=a}}return i}},o.interfaceConverter=function(e,t){return(A,r,s)=>{if(!e(A))throw o.errors.exception({header:r,message:`Expected ${s} ("${o.util.Stringify(A)}") to be an instance of ${t}.`});return A}},o.dictionaryConverter=function(e){return(t,A,r)=>{const s={};if(null!=t&&8!==o.util.Type(t))throw o.errors.exception({header:A,message:`Expected ${t} to be one of: Null, Undefined, Object.`});for(const n of e){const{key:e,defaultValue:i,required:a,converter:c}=n;if(!0===a&&(null==t||!Object.hasOwn(t,e)))throw o.errors.exception({header:A,message:`Missing required key "${e}".`});let g=t?.[e];const l=void 0!==i;if(l&&void 0===g&&(g=i()),a||l||void 0!==g){if(g=c(g,A,`${r}.${e}`),n.allowedValues&&!n.allowedValues.includes(g))throw o.errors.exception({header:A,message:`${g} is not an accepted type. Expected one of ${n.allowedValues.join(", ")}.`});s[e]=g}}return s}},o.nullableConverter=function(e){return(t,A,r)=>null===t?t:e(t,A,r)},o.is.USVString=function(e){return"string"==typeof e&&e.isWellFormed()},o.is.ReadableStream=o.util.MakeTypeAssertion(ReadableStream),o.is.Blob=o.util.MakeTypeAssertion(Blob),o.is.URLSearchParams=o.util.MakeTypeAssertion(URLSearchParams),o.is.File=o.util.MakeTypeAssertion(File),o.is.URL=o.util.MakeTypeAssertion(URL),o.is.AbortSignal=o.util.MakeTypeAssertion(AbortSignal),o.is.MessagePort=o.util.MakeTypeAssertion(MessagePort),o.is.BufferSource=function(e){return r.isArrayBuffer(e)||ArrayBuffer.isView(e)&&r.isArrayBuffer(e.buffer)},o.converters.DOMString=function(e,t,A,r){if(null===e&&o.util.HasFlag(r,o.attributes.LegacyNullToEmptyString))return"";if("symbol"==typeof e)throw o.errors.exception({header:t,message:`${A} is a symbol, which cannot be converted to a DOMString.`});return String(e)},o.converters.ByteString=function(e,t,A){if("symbol"==typeof e)throw o.errors.exception({header:t,message:`${A} is a symbol, which cannot be converted to a ByteString.`});const r=String(e);for(let e=0;e<r.length;e++)if(r.charCodeAt(e)>255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${e} has a value of ${r.charCodeAt(e)} which is greater than 255.`);return r},o.converters.USVString=function(e){return"string"==typeof e?e.toWellFormed():`${e}`.toWellFormed()},o.converters.boolean=function(e){return Boolean(e)},o.converters.any=function(e){return e},o.converters["long long"]=function(e,t,A){return o.util.ConvertToInt(e,64,"signed",0,t,A)},o.converters["unsigned long long"]=function(e,t,A){return o.util.ConvertToInt(e,64,"unsigned",0,t,A)},o.converters["unsigned long"]=function(e,t,A){return o.util.ConvertToInt(e,32,"unsigned",0,t,A)},o.converters["unsigned short"]=function(e,t,A,r){return o.util.ConvertToInt(e,16,"unsigned",r,t,A)},o.converters.ArrayBuffer=function(e,t,A,s){if(8!==o.util.Type(e)||!r.isArrayBuffer(e))throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["ArrayBuffer"]});if(!o.util.HasFlag(s,o.attributes.AllowResizable)&&o.util.IsResizableArrayBuffer(e))throw o.errors.exception({header:t,message:`${A} cannot be a resizable ArrayBuffer.`});return e},o.converters.SharedArrayBuffer=function(e,t,A,s){if(8!==o.util.Type(e)||!r.isSharedArrayBuffer(e))throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["SharedArrayBuffer"]});if(!o.util.HasFlag(s,o.attributes.AllowResizable)&&o.util.IsResizableArrayBuffer(e))throw o.errors.exception({header:t,message:`${A} cannot be a resizable SharedArrayBuffer.`});return e},o.converters.TypedArray=function(e,t,A,s,n){if(8!==o.util.Type(e)||!r.isTypedArray(e)||e.constructor.name!==t.name)throw o.errors.conversionFailed({prefix:A,argument:`${s} ("${o.util.Stringify(e)}")`,types:[t.name]});if(!o.util.HasFlag(n,o.attributes.AllowShared)&&r.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:A,message:`${s} cannot be a view on a shared array buffer.`});if(!o.util.HasFlag(n,o.attributes.AllowResizable)&&o.util.IsResizableArrayBuffer(e.buffer))throw o.errors.exception({header:A,message:`${s} cannot be a view on a resizable array buffer.`});return e},o.converters.DataView=function(e,t,A,s){if(8!==o.util.Type(e)||!r.isDataView(e))throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["DataView"]});if(!o.util.HasFlag(s,o.attributes.AllowShared)&&r.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:t,message:`${A} cannot be a view on a shared array buffer.`});if(!o.util.HasFlag(s,o.attributes.AllowResizable)&&o.util.IsResizableArrayBuffer(e.buffer))throw o.errors.exception({header:t,message:`${A} cannot be a view on a resizable array buffer.`});return e},o.converters.ArrayBufferView=function(e,t,A,s){if(8!==o.util.Type(e)||!r.isArrayBufferView(e))throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["ArrayBufferView"]});if(!o.util.HasFlag(s,o.attributes.AllowShared)&&r.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:t,message:`${A} cannot be a view on a shared array buffer.`});if(!o.util.HasFlag(s,o.attributes.AllowResizable)&&o.util.IsResizableArrayBuffer(e.buffer))throw o.errors.exception({header:t,message:`${A} cannot be a view on a resizable array buffer.`});return e},o.converters.BufferSource=function(e,t,A,s){if(r.isArrayBuffer(e))return o.converters.ArrayBuffer(e,t,A,s);if(r.isArrayBufferView(e))return s&=~o.attributes.AllowShared,o.converters.ArrayBufferView(e,t,A,s);if(r.isSharedArrayBuffer(e))throw o.errors.exception({header:t,message:`${A} cannot be a SharedArrayBuffer.`});throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["ArrayBuffer","ArrayBufferView"]})},o.converters.AllowSharedBufferSource=function(e,t,A,s){if(r.isArrayBuffer(e))return o.converters.ArrayBuffer(e,t,A,s);if(r.isSharedArrayBuffer(e))return o.converters.SharedArrayBuffer(e,t,A,s);if(r.isArrayBufferView(e))return s|=o.attributes.AllowShared,o.converters.ArrayBufferView(e,t,A,s);throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["ArrayBuffer","SharedArrayBuffer","ArrayBufferView"]})},o.converters["sequence<ByteString>"]=o.sequenceConverter(o.converters.ByteString),o.converters["sequence<sequence<ByteString>>"]=o.sequenceConverter(o.converters["sequence<ByteString>"]),o.converters["record<ByteString, ByteString>"]=o.recordConverter(o.converters.ByteString,o.converters.ByteString),o.converters.Blob=o.interfaceConverter(o.is.Blob,"Blob"),o.converters.AbortSignal=o.interfaceConverter(o.is.AbortSignal,"AbortSignal"),o.converters.EventHandlerNonNull=function(e){return 8!==o.util.Type(e)?null:"function"==typeof e?e:()=>{}},o.attributes={Clamp:1,EnforceRange:2,AllowShared:4,AllowResizable:8,LegacyNullToEmptyString:16},e.exports={webidl:o}},8251:(e,t,A)=>{"use strict";const{uid:r,states:s,sentCloseFrameState:n,emptyBuffer:i,opcodes:o}=A(6490),{parseExtensions:a,isClosed:c,isClosing:g,isEstablished:l,validateCloseCodeAndReason:h}=A(8983),{makeRequest:d}=A(4609),{fetching:u}=A(7388),{Headers:E,getHeadersList:I}=A(6558),{getDecodeSplit:Q}=A(6686),{WebsocketFrameSend:B}=A(6834),C=A(4589);let p;try{p=A(7598)}catch{}function f(e,t,A,r=!1){if(t??=null,A??="",r&&h(t,A),c(e.readyState)||g(e.readyState));else if(l(e.readyState))if(e.closeState.has(n.SENT)||e.closeState.has(n.RECEIVED))e.readyState=s.CLOSING;else{const r=new B;0!==A.length&&null===t&&(t=1e3),C(null===t||Number.isInteger(t)),null===t&&0===A.length?r.frameData=i:null!==t&&null===A?(r.frameData=Buffer.allocUnsafe(2),r.frameData.writeUInt16BE(t,0)):null!==t&&null!==A?(r.frameData=Buffer.allocUnsafe(2+Buffer.byteLength(A)),r.frameData.writeUInt16BE(t,0),r.frameData.write(A,2,"utf-8")):r.frameData=i,e.socket.write(r.createFrame(o.CLOSE)),e.closeState.add(n.SENT),e.readyState=s.CLOSING}else m(e),e.readyState=s.CLOSING}function m(e,t,A,r){l(e.readyState)&&f(e,t,A,!1),e.controller.abort(),e.socket?!1===e.socket.destroyed&&e.socket.destroy():e.onSocketClose()}e.exports={establishWebSocketConnection:function(e,t,A,n,i){const o=e;o.protocol="ws:"===e.protocol?"http:":"https:";const c=d({urlList:[o],client:A,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(i.headers){const e=I(new E(i.headers));c.headersList=e}const g=p.randomBytes(16).toString("base64");c.headersList.append("sec-websocket-key",g,!0),c.headersList.append("sec-websocket-version","13",!0);for(const e of t)c.headersList.append("sec-websocket-protocol",e,!0);return c.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits",!0),u({request:c,useParallelQueue:!0,dispatcher:i.dispatcher,processResponse(e){if("error"===e.type&&(n.readyState=s.CLOSED),"error"===e.type||101!==e.status)return void m(n,1002,"Received network error or non-101 status code.",e.error);if(0!==t.length&&!e.headersList.get("Sec-WebSocket-Protocol"))return void m(n,1002,"Server did not respond with sent protocols.");if("websocket"!==e.headersList.get("Upgrade")?.toLowerCase())return void m(n,1002,'Server did not set Upgrade header to "websocket".');if("upgrade"!==e.headersList.get("Connection")?.toLowerCase())return void m(n,1002,'Server did not set Connection header to "upgrade".');if(e.headersList.get("Sec-WebSocket-Accept")!==p.createHash("sha1").update(g+r).digest("base64"))return void m(n,1002,"Incorrect hash received in Sec-WebSocket-Accept header.");const A=e.headersList.get("Sec-WebSocket-Extensions");let i;if(null!==A&&(i=a(A),!i.has("permessage-deflate")))return void m(n,1002,"Sec-WebSocket-Extensions header does not match.");const o=e.headersList.get("Sec-WebSocket-Protocol");if(null!==o){if(!Q("sec-websocket-protocol",c.headersList).includes(o))return void m(n,1002,"Protocol was not set in the opening handshake.")}e.socket.on("data",n.onSocketData),e.socket.on("close",n.onSocketClose),e.socket.on("error",n.onSocketError),n.wasEverConnected=!0,n.onConnectionEstablished(e,i)}})},failWebsocketConnection:m,closeWebSocketConnection:f}},6490:e=>{"use strict";const t=Buffer.allocUnsafe(0);e.exports={uid:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",sentCloseFrameState:{SENT:1,RECEIVED:2},staticPropertyDescriptors:{enumerable:!0,writable:!1,configurable:!1},states:{CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},opcodes:{CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},maxUnsigned16Bit:65535,parserStates:{INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},emptyBuffer:t,sendHints:{text:1,typedArray:2,arrayBuffer:3,blob:4}}},878:(e,t,A)=>{"use strict";const{webidl:r}=A(6097),{kEnumerableProperty:s}=A(2858),{kConstruct:n}=A(257);class i extends Event{#rt;constructor(e,t={}){if(e===n)return super(arguments[1],arguments[2]),void r.util.markAsUncloneable(this);const A="MessageEvent constructor";r.argumentLengthCheck(arguments,1,A),super(e=r.converters.DOMString(e,A,"type"),t=r.converters.MessageEventInit(t,A,"eventInitDict")),this.#rt=t,r.util.markAsUncloneable(this)}get data(){return r.brandCheck(this,i),this.#rt.data}get origin(){return r.brandCheck(this,i),this.#rt.origin}get lastEventId(){return r.brandCheck(this,i),this.#rt.lastEventId}get source(){return r.brandCheck(this,i),this.#rt.source}get ports(){return r.brandCheck(this,i),Object.isFrozen(this.#rt.ports)||Object.freeze(this.#rt.ports),this.#rt.ports}initMessageEvent(e,t=!1,A=!1,s=null,n="",o="",a=null,c=[]){return r.brandCheck(this,i),r.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new i(e,{bubbles:t,cancelable:A,data:s,origin:n,lastEventId:o,source:a,ports:c})}static createFastMessageEvent(e,t){const A=new i(n,e,t);return A.#rt=t,A.#rt.data??=null,A.#rt.origin??="",A.#rt.lastEventId??="",A.#rt.source??=null,A.#rt.ports??=[],A}}const{createFastMessageEvent:o}=i;delete i.createFastMessageEvent;class a extends Event{#rt;constructor(e,t={}){const A="CloseEvent constructor";r.argumentLengthCheck(arguments,1,A),super(e=r.converters.DOMString(e,A,"type"),t=r.converters.CloseEventInit(t)),this.#rt=t,r.util.markAsUncloneable(this)}get wasClean(){return r.brandCheck(this,a),this.#rt.wasClean}get code(){return r.brandCheck(this,a),this.#rt.code}get reason(){return r.brandCheck(this,a),this.#rt.reason}}class c extends Event{#rt;constructor(e,t){const A="ErrorEvent constructor";r.argumentLengthCheck(arguments,1,A),super(e,t),r.util.markAsUncloneable(this),e=r.converters.DOMString(e,A,"type"),t=r.converters.ErrorEventInit(t??{}),this.#rt=t}get message(){return r.brandCheck(this,c),this.#rt.message}get filename(){return r.brandCheck(this,c),this.#rt.filename}get lineno(){return r.brandCheck(this,c),this.#rt.lineno}get colno(){return r.brandCheck(this,c),this.#rt.colno}get error(){return r.brandCheck(this,c),this.#rt.error}}Object.defineProperties(i.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:s,origin:s,lastEventId:s,source:s,ports:s,initMessageEvent:s}),Object.defineProperties(a.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:s,code:s,wasClean:s}),Object.defineProperties(c.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:s,filename:s,lineno:s,colno:s,error:s}),r.converters.MessagePort=r.interfaceConverter(r.is.MessagePort,"MessagePort"),r.converters["sequence<MessagePort>"]=r.sequenceConverter(r.converters.MessagePort);const g=[{key:"bubbles",converter:r.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:r.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:r.converters.boolean,defaultValue:()=>!1}];r.converters.MessageEventInit=r.dictionaryConverter([...g,{key:"data",converter:r.converters.any,defaultValue:()=>null},{key:"origin",converter:r.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:r.converters.DOMString,defaultValue:()=>""},{key:"source",converter:r.nullableConverter(r.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:r.converters["sequence<MessagePort>"],defaultValue:()=>[]}]),r.converters.CloseEventInit=r.dictionaryConverter([...g,{key:"wasClean",converter:r.converters.boolean,defaultValue:()=>!1},{key:"code",converter:r.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:r.converters.USVString,defaultValue:()=>""}]),r.converters.ErrorEventInit=r.dictionaryConverter([...g,{key:"message",converter:r.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:r.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:r.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:r.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:r.converters.any}]),e.exports={MessageEvent:i,CloseEvent:a,ErrorEvent:c,createFastMessageEvent:o}},6834:(e,t,A)=>{"use strict";const{maxUnsigned16Bit:r,opcodes:s}=A(6490),n=8192;let i,o=null,a=n;try{i=A(7598)}catch{i={randomFillSync:function(e,t,A){for(let t=0;t<e.length;++t)e[t]=255*Math.random()|0;return e}}}function c(){return a===n&&(a=0,i.randomFillSync(o??=Buffer.allocUnsafeSlow(n),0,n)),[o[a++],o[a++],o[a++],o[a++]]}e.exports={WebsocketFrameSend:class{constructor(e){this.frameData=e}createFrame(e){const t=this.frameData,A=c(),s=t?.byteLength??0;let n=s,i=6;s>r?(i+=8,n=127):s>125&&(i+=2,n=126);const o=Buffer.allocUnsafe(s+i);o[0]=o[1]=0,o[0]|=128,o[0]=(240&o[0])+e,o[i-4]=A[0],o[i-3]=A[1],o[i-2]=A[2],o[i-1]=A[3],o[1]=n,126===n?o.writeUInt16BE(s,2):127===n&&(o[2]=o[3]=0,o.writeUIntBE(s,4,6)),o[1]|=128;for(let e=0;e<s;++e)o[i+e]=t[e]^A[3&e];return o}static createFastTextFrame(e){const t=c(),A=e.length;for(let r=0;r<A;++r)e[r]^=t[3&r];let n=A,i=6;A>r?(i+=8,n=127):A>125&&(i+=2,n=126);const o=Buffer.allocUnsafeSlow(i);return o[0]=128|s.TEXT,o[1]=128|n,o[i-4]=t[0],o[i-3]=t[1],o[i-2]=t[2],o[i-1]=t[3],126===n?o.writeUInt16BE(A,2):127===n&&(o[2]=o[3]=0,o.writeUIntBE(A,4,6)),[o,e]}},generateMask:c}},8975:(e,t,A)=>{"use strict";const{createInflateRaw:r,Z_DEFAULT_WINDOWBITS:s}=A(8522),{isValidClientWindowBits:n}=A(8983),i=Buffer.from([0,0,255,255]),o=Symbol("kBuffer"),a=Symbol("kLength");e.exports={PerMessageDeflate:class{#st;#k={};constructor(e){this.#k.serverNoContextTakeover=e.has("server_no_context_takeover"),this.#k.serverMaxWindowBits=e.get("server_max_window_bits")}decompress(e,t,A){if(!this.#st){let e=s;if(this.#k.serverMaxWindowBits){if(!n(this.#k.serverMaxWindowBits))return void A(new Error("Invalid server_max_window_bits"));e=Number.parseInt(this.#k.serverMaxWindowBits)}this.#st=r({windowBits:e}),this.#st[o]=[],this.#st[a]=0,this.#st.on("data",(e=>{this.#st[o].push(e),this.#st[a]+=e.length})),this.#st.on("error",(e=>{this.#st=null,A(e)}))}this.#st.write(e),t&&this.#st.write(i),this.#st.flush((()=>{const e=Buffer.concat(this.#st[o],this.#st[a]);this.#st[o].length=0,this.#st[a]=0,A(null,e)}))}}}},834:(e,t,A)=>{"use strict";const{Writable:r}=A(7075),s=A(4589),{parserStates:n,opcodes:i,states:o,emptyBuffer:a,sentCloseFrameState:c}=A(6490),{isValidStatusCode:g,isValidOpcode:l,websocketMessageReceived:h,utf8Decode:d,isControlFrame:u,isTextBinaryFrame:E,isContinuationFrame:I}=A(8983),{failWebsocketConnection:Q}=A(8251),{WebsocketFrameSend:B}=A(6834),{PerMessageDeflate:C}=A(8975);e.exports={ByteParser:class extends r{#nt=[];#it=0;#ot=0;#at=!1;#ge=n.INFO;#ct={};#gt=[];#lt;#v;constructor(e,t){super(),this.#v=e,this.#lt=null==t?new Map:t,this.#lt.has("permessage-deflate")&&this.#lt.set("permessage-deflate",new C(t))}_write(e,t,A){this.#nt.push(e),this.#ot+=e.length,this.#at=!0,this.run(A)}run(e){for(;this.#at;)if(this.#ge===n.INFO){if(this.#ot<2)return e();const t=this.consume(2),A=!!(128&t[0]),r=15&t[0],s=!(128&~t[1]),o=!A&&r!==i.CONTINUATION,a=127&t[1],c=64&t[0],g=32&t[0],h=16&t[0];if(!l(r))return Q(this.#v,1002,"Invalid opcode received"),e();if(s)return Q(this.#v,1002,"Frame cannot be masked"),e();if(0!==c&&!this.#lt.has("permessage-deflate"))return void Q(this.#v,1002,"Expected RSV1 to be clear.");if(0!==g||0!==h)return void Q(this.#v,1002,"RSV1, RSV2, RSV3 must be clear");if(o&&!E(r))return void Q(this.#v,1002,"Invalid frame type was fragmented.");if(E(r)&&this.#gt.length>0)return void Q(this.#v,1002,"Expected continuation frame");if(this.#ct.fragmented&&o)return void Q(this.#v,1002,"Fragmented frame exceeded 125 bytes.");if((a>125||o)&&u(r))return void Q(this.#v,1002,"Control frame either too large or fragmented");if(I(r)&&0===this.#gt.length&&!this.#ct.compressed)return void Q(this.#v,1002,"Unexpected continuation frame");a<=125?(this.#ct.payloadLength=a,this.#ge=n.READ_DATA):126===a?this.#ge=n.PAYLOADLENGTH_16:127===a&&(this.#ge=n.PAYLOADLENGTH_64),E(r)&&(this.#ct.binaryType=r,this.#ct.compressed=0!==c),this.#ct.opcode=r,this.#ct.masked=s,this.#ct.fin=A,this.#ct.fragmented=o}else if(this.#ge===n.PAYLOADLENGTH_16){if(this.#ot<2)return e();const t=this.consume(2);this.#ct.payloadLength=t.readUInt16BE(0),this.#ge=n.READ_DATA}else if(this.#ge===n.PAYLOADLENGTH_64){if(this.#ot<8)return e();const t=this.consume(8),A=t.readUInt32BE(0);if(A>2**31-1)return void Q(this.#v,1009,"Received payload length > 2^31 bytes.");const r=t.readUInt32BE(4);this.#ct.payloadLength=(A<<8)+r,this.#ge=n.READ_DATA}else if(this.#ge===n.READ_DATA){if(this.#ot<this.#ct.payloadLength)return e();const t=this.consume(this.#ct.payloadLength);if(u(this.#ct.opcode))this.#at=this.parseControlFrame(t),this.#ge=n.INFO;else{if(this.#ct.compressed){this.#lt.get("permessage-deflate").decompress(t,this.#ct.fin,((t,A)=>{if(t)Q(this.#v,1007,t.message);else{if(this.writeFragments(A),!this.#ct.fin)return this.#ge=n.INFO,this.#at=!0,void this.run(e);h(this.#v,this.#ct.binaryType,this.consumeFragments()),this.#at=!0,this.#ge=n.INFO,this.run(e)}})),this.#at=!1;break}this.writeFragments(t),!this.#ct.fragmented&&this.#ct.fin&&h(this.#v,this.#ct.binaryType,this.consumeFragments()),this.#ge=n.INFO}}}consume(e){if(e>this.#ot)throw new Error("Called consume() before buffers satiated.");if(0===e)return a;this.#ot-=e;const t=this.#nt[0];if(t.length>e)return this.#nt[0]=t.subarray(e,t.length),t.subarray(0,e);if(t.length===e)return this.#nt.shift();{let t=0;const A=Buffer.allocUnsafeSlow(e);for(;t!==e;){const r=this.#nt[0],s=r.length;if(s+t===e){A.set(this.#nt.shift(),t);break}if(s+t>e){A.set(r.subarray(0,e-t),t),this.#nt[0]=r.subarray(e-t);break}A.set(this.#nt.shift(),t),t+=s}return A}}writeFragments(e){this.#it+=e.length,this.#gt.push(e)}consumeFragments(){const e=this.#gt;if(1===e.length)return this.#it=0,e.shift();let t=0;const A=Buffer.allocUnsafeSlow(this.#it);for(let r=0;r<e.length;++r){const s=e[r];A.set(s,t),t+=s.length}return this.#gt=[],this.#it=0,A}parseCloseBody(e){let t;if(s(1!==e.length),e.length>=2&&(t=e.readUInt16BE(0)),void 0!==t&&!g(t))return{code:1002,reason:"Invalid status code",error:!0};let A=e.subarray(2);239===A[0]&&187===A[1]&&191===A[2]&&(A=A.subarray(3));try{A=d(A)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:t,reason:A,error:!1}}parseControlFrame(e){const{opcode:t,payloadLength:A}=this.#ct;if(t===i.CLOSE){if(1===A)return Q(this.#v,1002,"Received close frame with a 1-byte body."),!1;if(this.#ct.closeInfo=this.parseCloseBody(e),this.#ct.closeInfo.error){const{code:e,reason:t}=this.#ct.closeInfo;return Q(this.#v,e,t),!1}if(!this.#v.closeState.has(c.SENT)&&!this.#v.closeState.has(c.RECEIVED)){let e=a;this.#ct.closeInfo.code&&(e=Buffer.allocUnsafe(2),e.writeUInt16BE(this.#ct.closeInfo.code,0));const t=new B(e);this.#v.socket.write(t.createFrame(i.CLOSE)),this.#v.closeState.add(c.SENT)}return this.#v.readyState=o.CLOSING,this.#v.closeState.add(c.RECEIVED),!1}if(t===i.PING){if(!this.#v.closeState.has(c.RECEIVED)){const t=new B(e);this.#v.socket.write(t.createFrame(i.PONG)),this.#v.onPing(e)}}else t===i.PONG&&this.#v.onPong(e);return!0}get closingInfo(){return this.#ct.closeInfo}}}},2534:(e,t,A)=>{"use strict";const{WebsocketFrameSend:r}=A(6834),{opcodes:s,sendHints:n}=A(6490),i=A(1726);function o(e,t){return new r(function(e,t){switch(t){case n.text:case n.typedArray:return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);case n.arrayBuffer:case n.blob:return new Uint8Array(e)}}(e,t)).createFrame(t===n.text?s.TEXT:s.BINARY)}e.exports={SendQueue:class{#ht=new i;#dt=!1;#ut;constructor(e){this.#ut=e}add(e,t,A){if(A!==n.blob){if(this.#dt){const r={promise:null,callback:t,frame:o(e,A)};this.#ht.push(r)}else if(A===n.text){const{0:A,1:s}=r.createFastTextFrame(e);this.#ut.cork(),this.#ut.write(A),this.#ut.write(s,t),this.#ut.uncork()}else this.#ut.write(o(e,A),t);return}const s={promise:e.arrayBuffer().then((e=>{s.promise=null,s.frame=o(e,A)})),callback:t,frame:null};this.#ht.push(s),this.#dt||this.#Et()}async#Et(){this.#dt=!0;const e=this.#ht;for(;!e.isEmpty();){const t=e.shift();null!==t.promise&&await t.promise,this.#ut.write(t.frame,t.callback),t.callback=t.frame=null}this.#dt=!1}}}},7053:(e,t,A)=>{"use strict";const{webidl:r}=A(6097),{validateCloseCodeAndReason:s}=A(8983),{kConstruct:n}=A(257),{kEnumerableProperty:i}=A(2858);class o extends(function(){class e extends DOMException{get reason(){return""}}return void 0!==(new e).reason?DOMException:new Proxy(DOMException,{construct(e,t,A){const r=Reflect.construct(e,t,e);return Object.setPrototypeOf(r,A.prototype),r}})}()){#It;#W;constructor(e="",t=void 0){if(super(e=r.converters.DOMString(e,"WebSocketError","message"),"WebSocketError"),t===n)return;null!==t&&(t=r.converters.WebSocketCloseInfo(t));let A=t.closeCode??null;const i=t.reason??"";s(A,i),0!==i.length&&null===A&&(A=1e3),this.#It=A,this.#W=i}get closeCode(){return this.#It}get reason(){return this.#W}static createUnvalidatedWebSocketError(e,t,A){const r=new o(e,n);return r.#It=t,r.#W=A,r}}const{createUnvalidatedWebSocketError:a}=o;delete o.createUnvalidatedWebSocketError,Object.defineProperties(o.prototype,{closeCode:i,reason:i,[Symbol.toStringTag]:{value:"WebSocketError",writable:!1,enumerable:!1,configurable:!0}}),r.is.WebSocketError=r.util.MakeTypeAssertion(o),e.exports={WebSocketError:o,createUnvalidatedWebSocketError:a}},27:(e,t,A)=>{"use strict";const{createDeferredPromise:r}=A(9250),{environmentSettingsObject:s}=A(6686),{states:n,opcodes:i,sentCloseFrameState:o}=A(6490),{webidl:a}=A(6097),{getURLRecord:c,isValidSubprotocol:g,isEstablished:l,utf8Decode:h}=A(8983),{establishWebSocketConnection:d,failWebsocketConnection:u,closeWebSocketConnection:E}=A(8251),{channels:I}=A(772),{WebsocketFrameSend:Q}=A(6834),{ByteParser:B}=A(834),{WebSocketError:C,createUnvalidatedWebSocketError:p}=A(7053),{utf8DecodeBytes:f}=A(6686),{kEnumerableProperty:m}=A(2858);let y=!1;class D{#Oe;#Qt;#Bt;#Ct;#pt;#ft;#mt=!1;#v={onConnectionEstablished:(e,t)=>this.#yt(e,t),onMessage:(e,t)=>this.#Dt(e,t),onParserError:e=>u(this.#v,null,e.message),onParserDrain:()=>this.#v.socket.resume(),onSocketData:e=>{this.#St.write(e)||this.#v.socket.pause()},onSocketError:e=>{this.#v.readyState=n.CLOSING,I.socketError.hasSubscribers&&I.socketError.publish(e),this.#v.socket.destroy()},onSocketClose:()=>this.#wt(),onPing:()=>{},onPong:()=>{},readyState:n.CONNECTING,socket:null,closeState:new Set,controller:null,wasEverConnected:!1};#St;constructor(e,t=void 0){y||(process.emitWarning("WebSocketStream is experimental! Expect it to change at any time.",{code:"UNDICI-WSS"}),y=!0),a.argumentLengthCheck(arguments,1,"WebSocket"),e=a.converters.USVString(e),null!==t&&(t=a.converters.WebSocketStreamOptions(t));const A=s.settingsObject.baseUrl,i=c(e,A),o=t.protocols;if(o.length!==new Set(o.map((e=>e.toLowerCase()))).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(o.length>0&&!o.every((e=>g(e))))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(this.#Oe=i.toString(),this.#Qt=r(),this.#Bt=r(),null!=t.signal){const e=t.signal;if(e.aborted)return this.#Qt.reject(e.reason),void this.#Bt.reject(e.reason);e.addEventListener("abort",(()=>{l(this.#v.readyState)||(u(this.#v),this.#v.readyState=n.CLOSING,this.#Qt.reject(e.reason),this.#Bt.reject(e.reason),this.#mt=!0)}),{once:!0})}const h=s.settingsObject;this.#v.controller=d(i,o,h,this.#v,t)}get url(){return this.#Oe.toString()}get opened(){return this.#Qt.promise}get closed(){return this.#Bt.promise}close(e=void 0){null!==e&&(e=a.converters.WebSocketCloseInfo(e));const t=e.closeCode??null,A=e.reason;E(this.#v,t,A,!0)}#bt(e){e=a.converters.WebSocketStreamWrite(e);const t=r();let A=null,s=null;if(a.is.BufferSource(e))A=new Uint8Array(ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e.slice()),s=i.BINARY;else{let r;try{r=a.converters.DOMString(e)}catch(e){return t.reject(e),t.promise}A=(new TextEncoder).encode(r),s=i.TEXT}if(!this.#v.closeState.has(o.SENT)&&!this.#v.closeState.has(o.RECEIVED)){const e=new Q(A);this.#v.socket.write(e.createFrame(s),(()=>{t.resolve(void 0)}))}return t.promise}#yt(e,t){this.#v.socket=e.socket;const A=new B(this.#v,t);A.on("drain",(()=>this.#v.onParserDrain())),A.on("error",(e=>this.#v.onParserError(e))),this.#St=A,this.#v.readyState=n.OPEN;const r=t??"",s=e.headersList.get("sec-websocket-protocol")??"",i=new ReadableStream({start:e=>{this.#pt=e},pull(t){let A;for(;t.desiredSize>0&&null!==(A=e.socket.read());)t.enqueue(A)},cancel:e=>this.#Rt(e)}),o=new WritableStream({write:e=>this.#bt(e),close:()=>E(this.#v,null,null),abort:e=>this.#Nt(e)});this.#Ct=i,this.#ft=o,this.#Qt.resolve({extensions:r,protocol:s,readable:i,writable:o})}#Dt(e,t){if(this.#v.readyState!==n.OPEN)return;let A;if(e===i.TEXT)try{A=h(t)}catch{return void u(this.#v,"Received invalid UTF-8 in text frame.")}else e===i.BINARY&&(A=new Uint8Array(t.buffer,t.byteOffset,t.byteLength));this.#pt.enqueue(A)}#wt(){const e=this.#v.closeState.has(o.SENT)&&this.#v.closeState.has(o.RECEIVED);if(this.#v.readyState=n.CLOSED,this.#mt)return;this.#v.wasEverConnected||this.#Qt.reject(new C("Socket never opened"));const t=this.#St.closingInfo;let A=t?.code??1005;this.#v.closeState.has(o.SENT)||this.#v.closeState.has(o.RECEIVED)||(A=1006);const r=null==t?.reason?"":f(Buffer.from(t.reason));if(e)this.#pt.close(),this.#ft.locked||this.#ft.abort(new DOMException("A closed WebSocketStream cannot be written to","InvalidStateError")),this.#Bt.resolve({closeCode:A,reason:r});else{const e=p("unclean close",A,r);this.#pt.error(e),this.#ft.abort(e),this.#Bt.reject(e)}}#Nt(e){let t=null,A="";a.is.WebSocketError(e)&&(t=e.closeCode,A=e.reason),E(this.#v,t,A)}#Rt(e){this.#Nt(e)}}Object.defineProperties(D.prototype,{url:m,opened:m,closed:m,close:m,[Symbol.toStringTag]:{value:"WebSocketStream",writable:!1,enumerable:!1,configurable:!0}}),a.converters.WebSocketStreamOptions=a.dictionaryConverter([{key:"protocols",converter:a.sequenceConverter(a.converters.USVString),defaultValue:()=>[]},{key:"signal",converter:a.nullableConverter(a.converters.AbortSignal),defaultValue:()=>null}]),a.converters.WebSocketCloseInfo=a.dictionaryConverter([{key:"closeCode",converter:e=>a.converters["unsigned short"](e,a.attributes.EnforceRange)},{key:"reason",converter:a.converters.USVString,defaultValue:()=>""}]),a.converters.WebSocketStreamWrite=function(e){return"string"==typeof e?a.converters.USVString(e):a.converters.BufferSource(e)},e.exports={WebSocketStream:D}},8983:(e,t,A)=>{"use strict";const{states:r,opcodes:s}=A(6490),{isUtf8:n}=A(4573),{collectASequenceOfCodePointsFast:i,removeHTTPWhitespace:o}=A(9934);function a(e){return e===s.CLOSE||e===s.PING||e===s.PONG}function c(e){return e===s.CONTINUATION}function g(e){return e===s.TEXT||e===s.BINARY}const l=(()=>{if("string"==typeof process.versions.icu){const e=new TextDecoder("utf-8",{fatal:!0});return e.decode.bind(e)}return function(e){if(n(e))return e.toString("utf-8");throw new TypeError("Invalid utf-8 received.")}})();e.exports={isConnecting:function(e){return e===r.CONNECTING},isEstablished:function(e){return e===r.OPEN},isClosing:function(e){return e===r.CLOSING},isClosed:function(e){return e===r.CLOSED},fireEvent:function(e,t,A=(e,t)=>new Event(e,t),r={}){const s=A(e,r);t.dispatchEvent(s)},isValidSubprotocol:function(e){if(0===e.length)return!1;for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(A<33||A>126||34===A||40===A||41===A||44===A||47===A||58===A||59===A||60===A||61===A||62===A||63===A||64===A||91===A||92===A||93===A||123===A||125===A)return!1}return!0},isValidStatusCode:function(e){return e>=1e3&&e<1015?1004!==e&&1005!==e&&1006!==e:e>=3e3&&e<=4999},websocketMessageReceived:function(e,t,A){e.onMessage(t,A)},utf8Decode:l,isControlFrame:a,isContinuationFrame:c,isTextBinaryFrame:g,isValidOpcode:function(e){return g(e)||c(e)||a(e)},parseExtensions:function(e){const t={position:0},A=new Map;for(;t.position<e.length;){const r=i(";",e,t),[s,n=""]=r.split("=",2);A.set(o(s,!0,!1),o(n,!1,!0)),t.position++}return A},isValidClientWindowBits:function(e){for(let t=0;t<e.length;t++){const A=e.charCodeAt(t);if(A<48||A>57)return!1}return!0},toArrayBuffer:function(e){return e.byteLength===e.buffer.byteLength?e.buffer:new Uint8Array(e).buffer},getURLRecord:function(e,t){let A;try{A=new URL(e,t)}catch(e){throw new DOMException(e,"SyntaxError")}if("http:"===A.protocol?A.protocol="ws:":"https:"===A.protocol&&(A.protocol="wss:"),"ws:"!==A.protocol&&"wss:"!==A.protocol)throw new DOMException("expected a ws: or wss: url","SyntaxError");if(A.hash.length||A.href.endsWith("#"))throw new DOMException("hash","SyntaxError");return A},validateCloseCodeAndReason:function(e,t){if(null!==e&&1e3!==e&&(e<3e3||e>4999))throw new DOMException("invalid code","InvalidAccessError");if(null!==t){const e=Buffer.byteLength(t);if(e>123)throw new DOMException(`Reason must be less than 123 bytes; received ${e}`,"SyntaxError")}}}},2984:(e,t,A)=>{"use strict";const{isArrayBuffer:r}=A(3429),{webidl:s}=A(6097),{URLSerializer:n}=A(9934),{environmentSettingsObject:i}=A(6686),{staticPropertyDescriptors:o,states:a,sentCloseFrameState:c,sendHints:g,opcodes:l}=A(6490),{isConnecting:h,isEstablished:d,isClosing:u,isClosed:E,isValidSubprotocol:I,fireEvent:Q,utf8Decode:B,toArrayBuffer:C,getURLRecord:p}=A(8983),{establishWebSocketConnection:f,closeWebSocketConnection:m,failWebsocketConnection:y}=A(8251),{ByteParser:D}=A(834),{kEnumerableProperty:S}=A(2858),{getGlobalDispatcher:w}=A(9879),{ErrorEvent:b,CloseEvent:R,createFastMessageEvent:N}=A(878),{SendQueue:k}=A(2534),{WebsocketFrameSend:F}=A(6834),{channels:U}=A(772);class M extends EventTarget{#Ge={open:null,error:null,close:null,message:null};#kt=0;#Ft="";#lt="";#Ut;#v={onConnectionEstablished:(e,t)=>this.#yt(e,t),onMessage:(e,t)=>this.#Dt(e,t),onParserError:e=>y(this.#v,null,e.message),onParserDrain:()=>this.#Mt(),onSocketData:e=>{this.#St.write(e)||this.#v.socket.pause()},onSocketError:e=>{this.#v.readyState=a.CLOSING,U.socketError.hasSubscribers&&U.socketError.publish(e),this.#v.socket.destroy()},onSocketClose:()=>this.#wt(),onPing:e=>{U.ping.hasSubscribers&&U.ping.publish({payload:e,websocket:this})},onPong:e=>{U.pong.hasSubscribers&&U.pong.publish({payload:e,websocket:this})},readyState:a.CONNECTING,socket:null,closeState:new Set,controller:null,wasEverConnected:!1};#Oe;#Tt;#St;constructor(e,t=[]){super(),s.util.markAsUncloneable(this);const A="WebSocket constructor";s.argumentLengthCheck(arguments,1,A);const r=s.converters["DOMString or sequence<DOMString> or WebSocketInit"](t,A,"options");e=s.converters.USVString(e),t=r.protocols;const n=i.settingsObject.baseUrl,o=p(e,n);if("string"==typeof t&&(t=[t]),t.length!==new Set(t.map((e=>e.toLowerCase()))).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(t.length>0&&!t.every((e=>I(e))))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this.#Oe=new URL(o.href);const a=i.settingsObject;this.#v.controller=f(o,t,a,this.#v,r),this.#v.readyState=M.CONNECTING,this.#Tt="blob"}close(e=void 0,t=void 0){s.brandCheck(this,M);void 0!==e&&(e=s.converters["unsigned short"](e,"WebSocket.close","code",s.attributes.Clamp)),void 0!==t&&(t=s.converters.USVString(t)),e??=null,t??="",m(this.#v,e,t,!0)}send(e){s.brandCheck(this,M);const t="WebSocket.send";if(s.argumentLengthCheck(arguments,1,t),e=s.converters.WebSocketSendData(e,t,"data"),h(this.#v.readyState))throw new DOMException("Sent before connected.","InvalidStateError");if(d(this.#v.readyState)&&!u(this.#v.readyState))if("string"==typeof e){const t=Buffer.from(e);this.#kt+=t.byteLength,this.#Ut.add(t,(()=>{this.#kt-=t.byteLength}),g.text)}else r(e)?(this.#kt+=e.byteLength,this.#Ut.add(e,(()=>{this.#kt-=e.byteLength}),g.arrayBuffer)):ArrayBuffer.isView(e)?(this.#kt+=e.byteLength,this.#Ut.add(e,(()=>{this.#kt-=e.byteLength}),g.typedArray)):s.is.Blob(e)&&(this.#kt+=e.size,this.#Ut.add(e,(()=>{this.#kt-=e.size}),g.blob))}get readyState(){return s.brandCheck(this,M),this.#v.readyState}get bufferedAmount(){return s.brandCheck(this,M),this.#kt}get url(){return s.brandCheck(this,M),n(this.#Oe)}get extensions(){return s.brandCheck(this,M),this.#lt}get protocol(){return s.brandCheck(this,M),this.#Ft}get onopen(){return s.brandCheck(this,M),this.#Ge.open}set onopen(e){s.brandCheck(this,M),this.#Ge.open&&this.removeEventListener("open",this.#Ge.open);const t=s.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("open",t),this.#Ge.open=e):this.#Ge.open=null}get onerror(){return s.brandCheck(this,M),this.#Ge.error}set onerror(e){s.brandCheck(this,M),this.#Ge.error&&this.removeEventListener("error",this.#Ge.error);const t=s.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("error",t),this.#Ge.error=e):this.#Ge.error=null}get onclose(){return s.brandCheck(this,M),this.#Ge.close}set onclose(e){s.brandCheck(this,M),this.#Ge.close&&this.removeEventListener("close",this.#Ge.close);const t=s.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("close",t),this.#Ge.close=e):this.#Ge.close=null}get onmessage(){return s.brandCheck(this,M),this.#Ge.message}set onmessage(e){s.brandCheck(this,M),this.#Ge.message&&this.removeEventListener("message",this.#Ge.message);const t=s.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("message",t),this.#Ge.message=e):this.#Ge.message=null}get binaryType(){return s.brandCheck(this,M),this.#Tt}set binaryType(e){s.brandCheck(this,M),this.#Tt="blob"!==e&&"arraybuffer"!==e?"blob":e}#yt(e,t){this.#v.socket=e.socket;const A=new D(this.#v,t);A.on("drain",(()=>this.#v.onParserDrain())),A.on("error",(e=>this.#v.onParserError(e))),this.#St=A,this.#Ut=new k(e.socket),this.#v.readyState=a.OPEN;const r=e.headersList.get("sec-websocket-extensions");null!==r&&(this.#lt=r);const s=e.headersList.get("sec-websocket-protocol");if(null!==s&&(this.#Ft=s),Q("open",this),U.open.hasSubscribers){const t=e.headersList.entries;U.open.publish({address:e.socket.address(),protocol:this.#Ft,extensions:this.#lt,websocket:this,handshakeResponse:{status:e.status,statusText:e.statusText,headers:t}})}}#Dt(e,t){if(this.#v.readyState!==a.OPEN)return;let A;if(e===l.TEXT)try{A=B(t)}catch{return void y(this.#v,1007,"Received invalid UTF-8 in text frame.")}else e===l.BINARY&&(A="blob"===this.#Tt?new Blob([t]):C(t));Q("message",this,N,{origin:this.#Oe.origin,data:A})}#Mt(){this.#v.socket.resume()}#wt(){const e=this.#v.closeState.has(c.SENT)&&this.#v.closeState.has(c.RECEIVED);let t=1005,A="";const r=this.#St?.closingInfo;r&&!r.error&&(t=r.code??1005,A=r.reason),this.#v.readyState=a.CLOSED,this.#v.closeState.has(c.RECEIVED)||(t=1006,Q("error",this,((e,t)=>new b(e,t)),{error:new TypeError(A)})),Q("close",this,((e,t)=>new R(e,t)),{wasClean:e,code:t,reason:A}),U.close.hasSubscribers&&U.close.publish({websocket:this,code:t,reason:A})}static ping(e,t){if(Buffer.isBuffer(t)){if(t.length>125)throw new TypeError("A PING frame cannot have a body larger than 125 bytes.")}else if(void 0!==t)throw new TypeError("Expected buffer payload");const A=e.#v.readyState;if(d(A)&&!u(A)&&!E(A)){const A=new F(t);e.#v.socket.write(A.createFrame(l.PING))}}}const{ping:T}=M;Reflect.deleteProperty(M,"ping"),M.CONNECTING=M.prototype.CONNECTING=a.CONNECTING,M.OPEN=M.prototype.OPEN=a.OPEN,M.CLOSING=M.prototype.CLOSING=a.CLOSING,M.CLOSED=M.prototype.CLOSED=a.CLOSED,Object.defineProperties(M.prototype,{CONNECTING:o,OPEN:o,CLOSING:o,CLOSED:o,url:S,readyState:S,bufferedAmount:S,onopen:S,onerror:S,onclose:S,close:S,onmessage:S,binaryType:S,send:S,extensions:S,protocol:S,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}}),Object.defineProperties(M,{CONNECTING:o,OPEN:o,CLOSING:o,CLOSED:o}),s.converters["sequence<DOMString>"]=s.sequenceConverter(s.converters.DOMString),s.converters["DOMString or sequence<DOMString>"]=function(e,t,A){return s.util.Type(e)===s.util.Types.OBJECT&&Symbol.iterator in e?s.converters["sequence<DOMString>"](e):s.converters.DOMString(e,t,A)},s.converters.WebSocketInit=s.dictionaryConverter([{key:"protocols",converter:s.converters["DOMString or sequence<DOMString>"],defaultValue:()=>[]},{key:"dispatcher",converter:s.converters.any,defaultValue:()=>w()},{key:"headers",converter:s.nullableConverter(s.converters.HeadersInit)}]),s.converters["DOMString or sequence<DOMString> or WebSocketInit"]=function(e){return s.util.Type(e)!==s.util.Types.OBJECT||Symbol.iterator in e?{protocols:s.converters["DOMString or sequence<DOMString>"](e)}:s.converters.WebSocketInit(e)},s.converters.WebSocketSendData=function(e){if(s.util.Type(e)===s.util.Types.OBJECT){if(s.is.Blob(e))return e;if(s.is.BufferSource(e))return e}return s.converters.USVString(e)},e.exports={WebSocket:M,ping:T}},7562:function(e,t,A){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,A,r){void 0===r&&(r=A);var s=Object.getOwnPropertyDescriptor(t,A);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[A]}}),Object.defineProperty(e,r,s)}:function(e,t,A,r){void 0===r&&(r=A),e[r]=t[A]}),s=this&&this.__exportStar||function(e,t){for(var A in e)"default"===A||Object.prototype.hasOwnProperty.call(t,A)||r(t,e,A)};Object.defineProperty(t,"__esModule",{value:!0}),t.sdk=t.MixinDeviceBase=t.ScryptedDeviceBase=void 0,s(A(4192),t);const n=A(4192);A(3339);class i extends n.DeviceBase{constructor(e){super(),this.nativeId=e}get storage(){return this._storage||(this._storage=t.sdk.deviceManager.getDeviceStorage(this.nativeId)),this._storage}get log(){return this._log||(this._log=t.sdk.deviceManager.getDeviceLogger(this.nativeId)),this._log}get console(){return this._console||(this._console=t.sdk.deviceManager.getDeviceConsole(this.nativeId)),this._console}async createMediaObject(e,A){return t.sdk.mediaManager.createMediaObject(e,A,{sourceId:this.id})}getMediaObjectConsole(e){return"string"!=typeof e.sourceId?this.console:t.sdk.deviceManager.getMixinConsole(e.sourceId,this.nativeId)}_lazyLoadDeviceState(){this._deviceState||(this.nativeId?this._deviceState=t.sdk.deviceManager.getDeviceState(this.nativeId):this._deviceState=t.sdk.deviceManager.getDeviceState())}onDeviceEvent(e,A){return t.sdk.deviceManager.onDeviceEvent(this.nativeId,e,A)}}t.ScryptedDeviceBase=i;class o extends n.DeviceBase{constructor(e){super(),this._listeners=new Set,this.mixinDevice=e.mixinDevice,this.mixinDeviceInterfaces=e.mixinDeviceInterfaces,this.mixinStorageSuffix=e.mixinStorageSuffix,this._deviceState=e.mixinDeviceState,this.nativeId=t.sdk.systemManager.getDeviceById(this.id).nativeId,this.mixinProviderNativeId=e.mixinProviderNativeId,this._deviceState.__rpcproxy_traps_all_properties&&"string"==typeof this._deviceState.id&&(this._deviceState=t.sdk.deviceManager.createDeviceState(this._deviceState.id,this._deviceState.setState))}get storage(){if(!this._storage){const e=this.mixinStorageSuffix,A=this.id+(e?":"+e:"");this._storage=t.sdk.deviceManager.getMixinStorage(A,this.mixinProviderNativeId)}return this._storage}get console(){return this._console||(t.sdk.deviceManager.getMixinConsole?this._console=t.sdk.deviceManager.getMixinConsole(this.id,this.mixinProviderNativeId):this._console=t.sdk.deviceManager.getDeviceConsole(this.mixinProviderNativeId)),this._console}async createMediaObject(e,A){return t.sdk.mediaManager.createMediaObject(e,A,{sourceId:this.id})}getMediaObjectConsole(e){return"string"!=typeof e.sourceId?this.console:t.sdk.deviceManager.getMixinConsole(e.sourceId,this.mixinProviderNativeId)}onDeviceEvent(e,A){return t.sdk.deviceManager.onMixinEvent(this.id,this,e,A)}_lazyLoadDeviceState(){}manageListener(e){this._listeners.add(e)}release(){for(const e of this._listeners)e.removeListener()}}t.MixinDeviceBase=o,function(){function e(e){return function(){return this._lazyLoadDeviceState(),this._deviceState?.[e]}}function t(e){return function(t){this._lazyLoadDeviceState(),this._deviceState?this._deviceState[e]=t:console.warn("device state is unavailable. the device must be discovered with deviceManager.onDeviceDiscovered or deviceManager.onDevicesChanged before the state can be set.")}}for(const A of Object.values(n.ScryptedInterfaceProperty))A!==n.ScryptedInterfaceProperty.nativeId&&(Object.defineProperty(i.prototype,A,{set:t(A),get:e(A)}),Object.defineProperty(o.prototype,A,{set:t(A),get:e(A)}))}(),t.sdk={};try{let e=!1;try{process.env.SCRYPTED_SDK_ES_MODULE||process.env.SCRYPTED_SDK_MODULE;const r=process.env.SCRYPTED_SDK_CJS_MODULE||process.env.SCRYPTED_SDK_MODULE;if(r)if("undefined"!=typeof require){const A=require(process.env.SCRYPTED_SDK_MODULE);Object.assign(t.sdk,A.getScryptedStatic()),e=!0}else{const s=A(3891)(r);Object.assign(t.sdk,s.getScryptedStatic()),e=!0}}catch(e){throw console.warn("failed to load sdk module",e),e}if(!e){let e;try{e=pluginRuntimeAPI}catch(e){}Object.assign(t.sdk,{log:deviceManager.getDeviceLogger(void 0),deviceManager,endpointManager,mediaManager,systemManager,pluginHostAPI,...e})}try{t.sdk.systemManager.setScryptedInterfaceDescriptors?.(n.TYPES_VERSION,n.ScryptedInterfaceDescriptors)?.catch((()=>{}))}catch(e){}}catch(e){console.error("sdk initialization error, import @scrypted/types or use @scrypted/client instead",e)}t.default=t.sdk},6117:function(e,t,A){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,A,r){void 0===r&&(r=A);var s=Object.getOwnPropertyDescriptor(t,A);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[A]}}),Object.defineProperty(e,r,s)}:function(e,t,A,r){void 0===r&&(r=A),e[r]=t[A]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var A in e)"default"!==A&&Object.prototype.hasOwnProperty.call(e,A)&&r(t,e,A);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.StorageSettings=void 0;const i=n(A(7562)),{systemManager:o}=i.default;t.StorageSettings=class{constructor(e,t){this.device=e,this.settings=t,this.values={},this.hasValue={};for(const e of Object.keys(t)){const A=t[e],r=()=>this.getItem(e);let s;s="clippath"!==A.type?r:()=>{try{return JSON.parse(r())}catch(e){}},Object.defineProperty(this.values,e,{get:s,set:t=>this.putSetting(e,t),enumerable:!0}),Object.defineProperty(this.hasValue,e,{get:()=>null!=this.device.storage.getItem(e),enumerable:!0})}}get keys(){const e={};for(const t of Object.keys(this.settings))e[t]=t;return e}async getSettings(){const e=await(this.options?.onGet?.()),t=[];for(const[A,r]of Object.entries(this.settings)){let s=Object.assign({},r);e?.[A]&&(s=Object.assign(s,e[A])),s.onGet&&(s=Object.assign(s,await s.onGet())),s.hide||await(this.options?.hide?.[A]?.())||(s.key=A,s.value=this.getItemInternal(A,s,!0),"function"==typeof s.deviceFilter&&(s.deviceFilter=s.deviceFilter.toString()),t.push(s),delete s.onPut,delete s.onGet,delete s.mapPut,delete s.mapGet)}return t}async putSetting(e,t){const A=this.settings[e];let r;return A&&(r=this.getItemInternal(e,A)),this.putSettingInternal(A,r,e,t)}putSettingInternal(e,t,A,r){e?.noStore||(e?.mapPut&&(r=e.mapPut(t,r)),null==r?this.device.storage.removeItem(A):"object"==typeof r?this.device.storage.setItem(A,JSON.stringify(r)):this.device.storage.setItem(A,r?.toString())),e?.onPut?.(t,r),e?.hide||this.device.onDeviceEvent(i.ScryptedInterface.Settings,void 0)}getItemInternal(e,t,A){if(!t)return this.device.storage.getItem(e);const r=function(e,t,A,r){if(null==e)return A();const s=t.multiple?"array":t.type;if("boolean"===s)return"true"===e||"false"!==e&&(A()||!1);if("number"===s){const t=parseFloat(e);return isNaN(t)?A()||0:t}if("integer"===s){const t=parseInt(e);return isNaN(t)?A()||0:t}if("array"===s){if(!e)return A()||[];try{return JSON.parse(e)}catch(e){return A()||[]}}if("device"===s)return r?e:o.getDeviceById(e)||o.getDeviceById(A());if(e&&t.json)try{return JSON.parse(e)}catch(e){return A()}return e||A()}(this.device.storage.getItem(e),t,(()=>null!=t.persistedDefaultValue?(this.putSettingInternal(t,void 0,e,t.persistedDefaultValue),t.persistedDefaultValue):t.defaultValue),A);return t.mapGet?t.mapGet(r):r}getItem(e){return this.getItemInternal(e,this.settings[e])}}},3891:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=3891,e.exports=t},4192:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ScryptedMimeTypes=t.ScryptedInterface=t.MediaPlayerState=t.SecuritySystemObstruction=t.SecuritySystemMode=t.AirQuality=t.AirPurifierMode=t.AirPurifierStatus=t.ChargeState=t.LockState=t.PanTiltZoomMovement=t.ThermostatMode=t.TemperatureUnit=t.FanMode=t.HumidityMode=t.ScryptedDeviceType=t.ScryptedInterfaceDescriptors=t.ScryptedInterfaceMethod=t.ScryptedInterfaceProperty=t.DeviceBase=t.TYPES_VERSION=void 0,t.TYPES_VERSION="0.3.108";var A,r,s,n,i,o,a,c,g,l,h,d,u,E,I,Q,B,C;t.DeviceBase=class{},function(e){e.id="id",e.info="info",e.interfaces="interfaces",e.mixins="mixins",e.name="name",e.nativeId="nativeId",e.pluginId="pluginId",e.providedInterfaces="providedInterfaces",e.providedName="providedName",e.providedRoom="providedRoom",e.providedType="providedType",e.providerId="providerId",e.room="room",e.type="type",e.scryptedRuntimeArguments="scryptedRuntimeArguments",e.on="on",e.brightness="brightness",e.colorTemperature="colorTemperature",e.rgb="rgb",e.hsv="hsv",e.buttons="buttons",e.sensors="sensors",e.running="running",e.paused="paused",e.docked="docked",e.temperatureSetting="temperatureSetting",e.temperature="temperature",e.temperatureUnit="temperatureUnit",e.humidity="humidity",e.audioVolumes="audioVolumes",e.recordingActive="recordingActive",e.ptzCapabilities="ptzCapabilities",e.lockState="lockState",e.entryOpen="entryOpen",e.batteryLevel="batteryLevel",e.chargeState="chargeState",e.online="online",e.fromMimeType="fromMimeType",e.toMimeType="toMimeType",e.converters="converters",e.binaryState="binaryState",e.tampered="tampered",e.sleeping="sleeping",e.powerDetected="powerDetected",e.audioDetected="audioDetected",e.motionDetected="motionDetected",e.ambientLight="ambientLight",e.occupied="occupied",e.flooded="flooded",e.ultraviolet="ultraviolet",e.luminance="luminance",e.position="position",e.securitySystemState="securitySystemState",e.pm10Density="pm10Density",e.pm25Density="pm25Density",e.vocDensity="vocDensity",e.noxDensity="noxDensity",e.co2ppm="co2ppm",e.airQuality="airQuality",e.airPurifierState="airPurifierState",e.filterChangeIndication="filterChangeIndication",e.filterLifeLevel="filterLifeLevel",e.humiditySetting="humiditySetting",e.fan="fan",e.applicationInfo="applicationInfo",e.systemDevice="systemDevice"}(A||(t.ScryptedInterfaceProperty=A={})),function(e){e.listen="listen",e.probe="probe",e.setMixins="setMixins",e.setName="setName",e.setRoom="setRoom",e.setType="setType",e.getPluginJson="getPluginJson",e.turnOff="turnOff",e.turnOn="turnOn",e.setBrightness="setBrightness",e.getTemperatureMaxK="getTemperatureMaxK",e.getTemperatureMinK="getTemperatureMinK",e.setColorTemperature="setColorTemperature",e.setRgb="setRgb",e.setHsv="setHsv",e.pressButton="pressButton",e.sendNotification="sendNotification",e.start="start",e.stop="stop",e.pause="pause",e.resume="resume",e.dock="dock",e.setTemperature="setTemperature",e.setTemperatureUnit="setTemperatureUnit",e.getPictureOptions="getPictureOptions",e.takePicture="takePicture",e.getAudioStream="getAudioStream",e.setAudioVolumes="setAudioVolumes",e.startDisplay="startDisplay",e.stopDisplay="stopDisplay",e.getVideoStream="getVideoStream",e.getVideoStreamOptions="getVideoStreamOptions",e.getPrivacyMasks="getPrivacyMasks",e.setPrivacyMasks="setPrivacyMasks",e.getVideoTextOverlays="getVideoTextOverlays",e.setVideoTextOverlay="setVideoTextOverlay",e.getRecordingStream="getRecordingStream",e.getRecordingStreamCurrentTime="getRecordingStreamCurrentTime",e.getRecordingStreamOptions="getRecordingStreamOptions",e.getRecordingStreamThumbnail="getRecordingStreamThumbnail",e.deleteRecordingStream="deleteRecordingStream",e.setRecordingActive="setRecordingActive",e.ptzCommand="ptzCommand",e.getRecordedEvents="getRecordedEvents",e.getVideoClip="getVideoClip",e.getVideoClips="getVideoClips",e.getVideoClipThumbnail="getVideoClipThumbnail",e.removeVideoClips="removeVideoClips",e.setVideoStreamOptions="setVideoStreamOptions",e.startIntercom="startIntercom",e.stopIntercom="stopIntercom",e.lock="lock",e.unlock="unlock",e.addPassword="addPassword",e.getPasswords="getPasswords",e.removePassword="removePassword",e.activate="activate",e.deactivate="deactivate",e.isReversible="isReversible",e.closeEntry="closeEntry",e.openEntry="openEntry",e.getDevice="getDevice",e.releaseDevice="releaseDevice",e.adoptDevice="adoptDevice",e.discoverDevices="discoverDevices",e.createDevice="createDevice",e.getCreateDeviceSettings="getCreateDeviceSettings",e.reboot="reboot",e.getRefreshFrequency="getRefreshFrequency",e.refresh="refresh",e.getMediaStatus="getMediaStatus",e.load="load",e.seek="seek",e.skipNext="skipNext",e.skipPrevious="skipPrevious",e.convert="convert",e.convertMedia="convertMedia",e.getSettings="getSettings",e.putSetting="putSetting",e.armSecuritySystem="armSecuritySystem",e.disarmSecuritySystem="disarmSecuritySystem",e.setAirPurifierState="setAirPurifierState",e.getReadmeMarkdown="getReadmeMarkdown",e.getOauthUrl="getOauthUrl",e.onOauthCallback="onOauthCallback",e.canMixin="canMixin",e.getMixin="getMixin",e.releaseMixin="releaseMixin",e.onRequest="onRequest",e.onConnection="onConnection",e.onPush="onPush",e.run="run",e.eval="eval",e.loadScripts="loadScripts",e.saveScript="saveScript",e.forkInterface="forkInterface",e.trackObjects="trackObjects",e.getDetectionInput="getDetectionInput",e.getObjectTypes="getObjectTypes",e.detectObjects="detectObjects",e.generateObjectDetections="generateObjectDetections",e.getDetectionModel="getDetectionModel",e.setHumidity="setHumidity",e.setFan="setFan",e.startRTCSignalingSession="startRTCSignalingSession",e.createRTCSignalingSession="createRTCSignalingSession",e.getScryptedUserAccessControl="getScryptedUserAccessControl",e.generateVideoFrames="generateVideoFrames",e.connectStream="connectStream",e.getTTYSettings="getTTYSettings"}(r||(t.ScryptedInterfaceMethod=r={})),t.ScryptedInterfaceDescriptors={ScryptedDevice:{name:"ScryptedDevice",methods:["listen","probe","setMixins","setName","setRoom","setType"],properties:["id","info","interfaces","mixins","name","nativeId","pluginId","providedInterfaces","providedName","providedRoom","providedType","providerId","room","type"]},ScryptedPlugin:{name:"ScryptedPlugin",methods:["getPluginJson"],properties:[]},ScryptedPluginRuntime:{name:"ScryptedPluginRuntime",methods:[],properties:["scryptedRuntimeArguments"]},OnOff:{name:"OnOff",methods:["turnOff","turnOn"],properties:["on"]},Brightness:{name:"Brightness",methods:["setBrightness"],properties:["brightness"]},ColorSettingTemperature:{name:"ColorSettingTemperature",methods:["getTemperatureMaxK","getTemperatureMinK","setColorTemperature"],properties:["colorTemperature"]},ColorSettingRgb:{name:"ColorSettingRgb",methods:["setRgb"],properties:["rgb"]},ColorSettingHsv:{name:"ColorSettingHsv",methods:["setHsv"],properties:["hsv"]},Buttons:{name:"Buttons",methods:[],properties:["buttons"]},PressButtons:{name:"PressButtons",methods:["pressButton"],properties:[]},Sensors:{name:"Sensors",methods:[],properties:["sensors"]},Notifier:{name:"Notifier",methods:["sendNotification"],properties:[]},StartStop:{name:"StartStop",methods:["start","stop"],properties:["running"]},Pause:{name:"Pause",methods:["pause","resume"],properties:["paused"]},Dock:{name:"Dock",methods:["dock"],properties:["docked"]},TemperatureSetting:{name:"TemperatureSetting",methods:["setTemperature"],properties:["temperatureSetting"]},Thermometer:{name:"Thermometer",methods:["setTemperatureUnit"],properties:["temperature","temperatureUnit"]},HumiditySensor:{name:"HumiditySensor",methods:[],properties:["humidity"]},Camera:{name:"Camera",methods:["getPictureOptions","takePicture"],properties:[]},Microphone:{name:"Microphone",methods:["getAudioStream"],properties:[]},AudioVolumeControl:{name:"AudioVolumeControl",methods:["setAudioVolumes"],properties:["audioVolumes"]},Display:{name:"Display",methods:["startDisplay","stopDisplay"],properties:[]},VideoCamera:{name:"VideoCamera",methods:["getVideoStream","getVideoStreamOptions"],properties:[]},VideoCameraMask:{name:"VideoCameraMask",methods:["getPrivacyMasks","setPrivacyMasks"],properties:[]},VideoTextOverlays:{name:"VideoTextOverlays",methods:["getVideoTextOverlays","setVideoTextOverlay"],properties:[]},VideoRecorder:{name:"VideoRecorder",methods:["getRecordingStream","getRecordingStreamCurrentTime","getRecordingStreamOptions","getRecordingStreamThumbnail"],properties:["recordingActive"]},VideoRecorderManagement:{name:"VideoRecorderManagement",methods:["deleteRecordingStream","setRecordingActive"],properties:[]},PanTiltZoom:{name:"PanTiltZoom",methods:["ptzCommand"],properties:["ptzCapabilities"]},EventRecorder:{name:"EventRecorder",methods:["getRecordedEvents"],properties:[]},VideoClips:{name:"VideoClips",methods:["getVideoClip","getVideoClips","getVideoClipThumbnail","removeVideoClips"],properties:[]},VideoCameraConfiguration:{name:"VideoCameraConfiguration",methods:["setVideoStreamOptions"],properties:[]},Intercom:{name:"Intercom",methods:["startIntercom","stopIntercom"],properties:[]},Lock:{name:"Lock",methods:["lock","unlock"],properties:["lockState"]},PasswordStore:{name:"PasswordStore",methods:["addPassword","getPasswords","removePassword"],properties:[]},Scene:{name:"Scene",methods:["activate","deactivate","isReversible"],properties:[]},Entry:{name:"Entry",methods:["closeEntry","openEntry"],properties:[]},EntrySensor:{name:"EntrySensor",methods:[],properties:["entryOpen"]},DeviceProvider:{name:"DeviceProvider",methods:["getDevice","releaseDevice"],properties:[]},DeviceDiscovery:{name:"DeviceDiscovery",methods:["adoptDevice","discoverDevices"],properties:[]},DeviceCreator:{name:"DeviceCreator",methods:["createDevice","getCreateDeviceSettings"],properties:[]},Battery:{name:"Battery",methods:[],properties:["batteryLevel"]},Charger:{name:"Charger",methods:[],properties:["chargeState"]},Reboot:{name:"Reboot",methods:["reboot"],properties:[]},Refresh:{name:"Refresh",methods:["getRefreshFrequency","refresh"],properties:[]},MediaPlayer:{name:"MediaPlayer",methods:["getMediaStatus","load","seek","skipNext","skipPrevious"],properties:[]},Online:{name:"Online",methods:[],properties:["online"]},BufferConverter:{name:"BufferConverter",methods:["convert"],properties:["fromMimeType","toMimeType"]},MediaConverter:{name:"MediaConverter",methods:["convertMedia"],properties:["converters"]},Settings:{name:"Settings",methods:["getSettings","putSetting"],properties:[]},BinarySensor:{name:"BinarySensor",methods:[],properties:["binaryState"]},TamperSensor:{name:"TamperSensor",methods:[],properties:["tampered"]},Sleep:{name:"Sleep",methods:[],properties:["sleeping"]},PowerSensor:{name:"PowerSensor",methods:[],properties:["powerDetected"]},AudioSensor:{name:"AudioSensor",methods:[],properties:["audioDetected"]},MotionSensor:{name:"MotionSensor",methods:[],properties:["motionDetected"]},AmbientLightSensor:{name:"AmbientLightSensor",methods:[],properties:["ambientLight"]},OccupancySensor:{name:"OccupancySensor",methods:[],properties:["occupied"]},FloodSensor:{name:"FloodSensor",methods:[],properties:["flooded"]},UltravioletSensor:{name:"UltravioletSensor",methods:[],properties:["ultraviolet"]},LuminanceSensor:{name:"LuminanceSensor",methods:[],properties:["luminance"]},PositionSensor:{name:"PositionSensor",methods:[],properties:["position"]},SecuritySystem:{name:"SecuritySystem",methods:["armSecuritySystem","disarmSecuritySystem"],properties:["securitySystemState"]},PM10Sensor:{name:"PM10Sensor",methods:[],properties:["pm10Density"]},PM25Sensor:{name:"PM25Sensor",methods:[],properties:["pm25Density"]},VOCSensor:{name:"VOCSensor",methods:[],properties:["vocDensity"]},NOXSensor:{name:"NOXSensor",methods:[],properties:["noxDensity"]},CO2Sensor:{name:"CO2Sensor",methods:[],properties:["co2ppm"]},AirQualitySensor:{name:"AirQualitySensor",methods:[],properties:["airQuality"]},AirPurifier:{name:"AirPurifier",methods:["setAirPurifierState"],properties:["airPurifierState"]},FilterMaintenance:{name:"FilterMaintenance",methods:[],properties:["filterChangeIndication","filterLifeLevel"]},Readme:{name:"Readme",methods:["getReadmeMarkdown"],properties:[]},OauthClient:{name:"OauthClient",methods:["getOauthUrl","onOauthCallback"],properties:[]},MixinProvider:{name:"MixinProvider",methods:["canMixin","getMixin","releaseMixin"],properties:[]},HttpRequestHandler:{name:"HttpRequestHandler",methods:["onRequest"],properties:[]},EngineIOHandler:{name:"EngineIOHandler",methods:["onConnection"],properties:[]},PushHandler:{name:"PushHandler",methods:["onPush"],properties:[]},Program:{name:"Program",methods:["run"],properties:[]},Scriptable:{name:"Scriptable",methods:["eval","loadScripts","saveScript"],properties:[]},ClusterForkInterface:{name:"ClusterForkInterface",methods:["forkInterface"],properties:[]},ObjectTracker:{name:"ObjectTracker",methods:["trackObjects"],properties:[]},ObjectDetector:{name:"ObjectDetector",methods:["getDetectionInput","getObjectTypes"],properties:[]},ObjectDetection:{name:"ObjectDetection",methods:["detectObjects","generateObjectDetections","getDetectionModel"],properties:[]},ObjectDetectionPreview:{name:"ObjectDetectionPreview",methods:[],properties:[]},ObjectDetectionGenerator:{name:"ObjectDetectionGenerator",methods:[],properties:[]},HumiditySetting:{name:"HumiditySetting",methods:["setHumidity"],properties:["humiditySetting"]},Fan:{name:"Fan",methods:["setFan"],properties:["fan"]},RTCSignalingChannel:{name:"RTCSignalingChannel",methods:["startRTCSignalingSession"],properties:[]},RTCSignalingClient:{name:"RTCSignalingClient",methods:["createRTCSignalingSession"],properties:[]},LauncherApplication:{name:"LauncherApplication",methods:[],properties:["applicationInfo"]},ScryptedUser:{name:"ScryptedUser",methods:["getScryptedUserAccessControl"],properties:[]},VideoFrameGenerator:{name:"VideoFrameGenerator",methods:["generateVideoFrames"],properties:[]},StreamService:{name:"StreamService",methods:["connectStream"],properties:[]},TTY:{name:"TTY",methods:[],properties:[]},TTYSettings:{name:"TTYSettings",methods:["getTTYSettings"],properties:[]},ScryptedSystemDevice:{name:"ScryptedSystemDevice",methods:[],properties:["systemDevice"]},ScryptedDeviceCreator:{name:"ScryptedDeviceCreator",methods:[],properties:[]},ScryptedSettings:{name:"ScryptedSettings",methods:[],properties:[]}},function(e){e.Builtin="Builtin",e.Camera="Camera",e.Fan="Fan",e.Light="Light",e.Switch="Switch",e.Outlet="Outlet",e.Sensor="Sensor",e.Scene="Scene",e.Program="Program",e.Automation="Automation",e.Vacuum="Vacuum",e.Notifier="Notifier",e.Thermostat="Thermostat",e.Lock="Lock",e.PasswordControl="PasswordControl",e.Display="Display",e.SmartDisplay="SmartDisplay",e.Speaker="Speaker",e.SmartSpeaker="SmartSpeaker",e.Event="Event",e.Entry="Entry",e.Garage="Garage",e.DeviceProvider="DeviceProvider",e.DataSource="DataSource",e.API="API",e.Doorbell="Doorbell",e.Irrigation="Irrigation",e.Valve="Valve",e.Person="Person",e.SecuritySystem="SecuritySystem",e.WindowCovering="WindowCovering",e.Siren="Siren",e.AirPurifier="AirPurifier",e.Unknown="Unknown"}(s||(t.ScryptedDeviceType=s={})),function(e){e.Humidify="Humidify",e.Dehumidify="Dehumidify",e.Auto="Auto",e.Off="Off"}(n||(t.HumidityMode=n={})),function(e){e.Auto="Auto",e.Manual="Manual"}(i||(t.FanMode=i={})),function(e){e.C="C",e.F="F"}(o||(t.TemperatureUnit=o={})),function(e){e.Off="Off",e.Cool="Cool",e.Heat="Heat",e.HeatCool="HeatCool",e.Auto="Auto",e.FanOnly="FanOnly",e.Purifier="Purifier",e.Eco="Eco",e.Dry="Dry",e.On="On"}(a||(t.ThermostatMode=a={})),function(e){e.Absolute="Absolute",e.Relative="Relative",e.Continuous="Continuous",e.Preset="Preset",e.Home="Home"}(c||(t.PanTiltZoomMovement=c={})),function(e){e.Locked="Locked",e.Unlocked="Unlocked",e.Jammed="Jammed"}(g||(t.LockState=g={})),function(e){e.Trickle="trickle",e.Charging="charging",e.NotCharging="not-charging"}(l||(t.ChargeState=l={})),function(e){e.Inactive="Inactive",e.Idle="Idle",e.Active="Active",e.ActiveNightMode="ActiveNightMode"}(h||(t.AirPurifierStatus=h={})),function(e){e.Manual="Manual",e.Automatic="Automatic"}(d||(t.AirPurifierMode=d={})),function(e){e.Unknown="Unknown",e.Excellent="Excellent",e.Good="Good",e.Fair="Fair",e.Inferior="Inferior",e.Poor="Poor"}(u||(t.AirQuality=u={})),function(e){e.Disarmed="Disarmed",e.HomeArmed="HomeArmed",e.AwayArmed="AwayArmed",e.NightArmed="NightArmed"}(E||(t.SecuritySystemMode=E={})),function(e){e.Sensor="Sensor",e.Occupied="Occupied",e.Time="Time",e.Error="Error"}(I||(t.SecuritySystemObstruction=I={})),function(e){e.Idle="Idle",e.Playing="Playing",e.Paused="Paused",e.Buffering="Buffering"}(Q||(t.MediaPlayerState=Q={})),function(e){e.ScryptedDevice="ScryptedDevice",e.ScryptedPlugin="ScryptedPlugin",e.ScryptedPluginRuntime="ScryptedPluginRuntime",e.OnOff="OnOff",e.Brightness="Brightness",e.ColorSettingTemperature="ColorSettingTemperature",e.ColorSettingRgb="ColorSettingRgb",e.ColorSettingHsv="ColorSettingHsv",e.Buttons="Buttons",e.PressButtons="PressButtons",e.Sensors="Sensors",e.Notifier="Notifier",e.StartStop="StartStop",e.Pause="Pause",e.Dock="Dock",e.TemperatureSetting="TemperatureSetting",e.Thermometer="Thermometer",e.HumiditySensor="HumiditySensor",e.Camera="Camera",e.Microphone="Microphone",e.AudioVolumeControl="AudioVolumeControl",e.Display="Display",e.VideoCamera="VideoCamera",e.VideoCameraMask="VideoCameraMask",e.VideoTextOverlays="VideoTextOverlays",e.VideoRecorder="VideoRecorder",e.VideoRecorderManagement="VideoRecorderManagement",e.PanTiltZoom="PanTiltZoom",e.EventRecorder="EventRecorder",e.VideoClips="VideoClips",e.VideoCameraConfiguration="VideoCameraConfiguration",e.Intercom="Intercom",e.Lock="Lock",e.PasswordStore="PasswordStore",e.Scene="Scene",e.Entry="Entry",e.EntrySensor="EntrySensor",e.DeviceProvider="DeviceProvider",e.DeviceDiscovery="DeviceDiscovery",e.DeviceCreator="DeviceCreator",e.Battery="Battery",e.Charger="Charger",e.Reboot="Reboot",e.Refresh="Refresh",e.MediaPlayer="MediaPlayer",e.Online="Online",e.BufferConverter="BufferConverter",e.MediaConverter="MediaConverter",e.Settings="Settings",e.BinarySensor="BinarySensor",e.TamperSensor="TamperSensor",e.Sleep="Sleep",e.PowerSensor="PowerSensor",e.AudioSensor="AudioSensor",e.MotionSensor="MotionSensor",e.AmbientLightSensor="AmbientLightSensor",e.OccupancySensor="OccupancySensor",e.FloodSensor="FloodSensor",e.UltravioletSensor="UltravioletSensor",e.LuminanceSensor="LuminanceSensor",e.PositionSensor="PositionSensor",e.SecuritySystem="SecuritySystem",e.PM10Sensor="PM10Sensor",e.PM25Sensor="PM25Sensor",e.VOCSensor="VOCSensor",e.NOXSensor="NOXSensor",e.CO2Sensor="CO2Sensor",e.AirQualitySensor="AirQualitySensor",e.AirPurifier="AirPurifier",e.FilterMaintenance="FilterMaintenance",e.Readme="Readme",e.OauthClient="OauthClient",e.MixinProvider="MixinProvider",e.HttpRequestHandler="HttpRequestHandler",e.EngineIOHandler="EngineIOHandler",e.PushHandler="PushHandler",e.Program="Program",e.Scriptable="Scriptable",e.ClusterForkInterface="ClusterForkInterface",e.ObjectTracker="ObjectTracker",e.ObjectDetector="ObjectDetector",e.ObjectDetection="ObjectDetection",e.ObjectDetectionPreview="ObjectDetectionPreview",e.ObjectDetectionGenerator="ObjectDetectionGenerator",e.HumiditySetting="HumiditySetting",e.Fan="Fan",e.RTCSignalingChannel="RTCSignalingChannel",e.RTCSignalingClient="RTCSignalingClient",e.LauncherApplication="LauncherApplication",e.ScryptedUser="ScryptedUser",e.VideoFrameGenerator="VideoFrameGenerator",e.StreamService="StreamService",e.TTY="TTY",e.TTYSettings="TTYSettings",e.ScryptedSystemDevice="ScryptedSystemDevice",e.ScryptedDeviceCreator="ScryptedDeviceCreator",e.ScryptedSettings="ScryptedSettings"}(B||(t.ScryptedInterface=B={})),function(e){e.Url="text/x-uri",e.InsecureLocalUrl="text/x-insecure-local-uri",e.LocalUrl="text/x-local-uri",e.ServerId="text/x-server-id",e.PushEndpoint="text/x-push-endpoint",e.SchemePrefix="x-scrypted/x-scrypted-scheme-",e.MediaStreamUrl="text/x-media-url",e.MediaObject="x-scrypted/x-scrypted-media-object",e.RequestMediaObject="x-scrypted/x-scrypted-request-media-object",e.RequestMediaStream="x-scrypted/x-scrypted-request-stream",e.MediaStreamFeedback="x-scrypted/x-media-stream-feedback",e.FFmpegInput="x-scrypted/x-ffmpeg-input",e.FFmpegTranscodeStream="x-scrypted/x-ffmpeg-transcode-stream",e.RTCSignalingChannel="x-scrypted/x-scrypted-rtc-signaling-channel",e.RTCSignalingSession="x-scrypted/x-scrypted-rtc-signaling-session",e.RTCConnectionManagement="x-scrypted/x-scrypted-rtc-connection-management",e.Image="x-scrypted/x-scrypted-image"}(C||(t.ScryptedMimeTypes=C={}))},4417:function(e,t,A){"use strict";var r,s=this&&this.__createBinding||(Object.create?function(e,t,A,r){void 0===r&&(r=A);var s=Object.getOwnPropertyDescriptor(t,A);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[A]}}),Object.defineProperty(e,r,s)}:function(e,t,A,r){void 0===r&&(r=A),e[r]=t[A]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var A in e)Object.prototype.hasOwnProperty.call(e,A)&&(t[t.length]=A);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var A=r(e),i=0;i<A.length;i++)"default"!==A[i]&&s(t,e,A[i]);return n(t,e),t});Object.defineProperty(t,"__esModule",{value:!0}),t.ReolinkNativeCamera=t.b64ToMo=t.moToB64=void 0;const o=i(A(7562)),a=A(6117),c=A(5741),g=A(840),l=A(5050);t.moToB64=async e=>{const t=await o.default.mediaManager.convertMediaObjectToBuffer(e,"image/jpeg");return t?.toString("base64")};t.b64ToMo=async e=>{const t=Buffer.from(e,"base64");return await o.default.mediaManager.createMediaObject(t,"image/jpeg")};class h extends o.ScryptedDeviceBase{constructor(e,t){super(t),this.camera=e}async turnOff(){this.camera.getLogger().log(`Siren toggle: turnOff (device=${this.nativeId})`),this.on=!1;try{await this.setSiren(!1),this.camera.getLogger().log(`Siren toggle: turnOff ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`Siren toggle: turnOff failed (device=${this.nativeId})`,e),e}}async turnOn(){this.camera.getLogger().log(`Siren toggle: turnOn (device=${this.nativeId})`),this.on=!0;try{await this.setSiren(!0),this.camera.getLogger().log(`Siren toggle: turnOn ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`Siren toggle: turnOn failed (device=${this.nativeId})`,e),e}}async setSiren(e){this.camera.markActivity();const t=await this.camera.ensureClient(),A=this.camera.getRtspChannel();await this.camera.withBaichuanRetry((async()=>await t.setSiren(A,e)))}}class d extends o.ScryptedDeviceBase{constructor(e,t){super(t),this.camera=e}async setBrightness(e){this.camera.getLogger().log(`Floodlight toggle: setBrightness (device=${this.nativeId} brightness=${e})`),this.brightness=e;try{await this.setFloodlight(void 0,e),this.camera.getLogger().log(`Floodlight toggle: setBrightness ok (device=${this.nativeId} brightness=${e})`)}catch(t){throw this.camera.getLogger().warn(`Floodlight toggle: setBrightness failed (device=${this.nativeId} brightness=${e})`,t),t}}async turnOff(){this.camera.getLogger().log(`Floodlight toggle: turnOff (device=${this.nativeId})`),this.on=!1;try{await this.setFloodlight(!1),this.camera.getLogger().log(`Floodlight toggle: turnOff ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`Floodlight toggle: turnOff failed (device=${this.nativeId})`,e),e}}async turnOn(){this.camera.getLogger().log(`Floodlight toggle: turnOn (device=${this.nativeId})`),this.on=!0;try{await this.setFloodlight(!0),this.camera.getLogger().log(`Floodlight toggle: turnOn ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`Floodlight toggle: turnOn failed (device=${this.nativeId})`,e),e}}async setFloodlight(e,t){this.camera.markActivity();const A=await this.camera.ensureClient(),r=this.camera.getRtspChannel();await this.camera.withBaichuanRetry((async()=>await A.setWhiteLedState(r,e,t)))}}class u extends o.ScryptedDeviceBase{constructor(e,t){super(t),this.camera=e}async turnOff(){this.camera.getLogger().log(`PIR toggle: turnOff (device=${this.nativeId})`),this.on=!1;try{await this.setPir(!1),this.camera.getLogger().log(`PIR toggle: turnOff ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`PIR toggle: turnOff failed (device=${this.nativeId})`,e),e}}async turnOn(){this.camera.getLogger().log(`PIR toggle: turnOn (device=${this.nativeId})`),this.on=!0;try{await this.setPir(!0),this.camera.getLogger().log(`PIR toggle: turnOn ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`PIR toggle: turnOn failed (device=${this.nativeId})`,e),e}}async setPir(e){this.camera.markActivity();const t=await this.camera.ensureClient(),A=this.camera.getRtspChannel();await this.camera.withBaichuanRetry((async()=>await t.setPirInfo(A,{enable:e?1:0})))}}class E extends o.ScryptedDeviceBase{constructor(e,t){super(e),this.plugin=t,this.subscribedToEvents=!1,this.periodicStarted=!1,this.lastActivityMs=Date.now(),this.dispatchEventsApplySeq=0,this.storageSettings=new a.StorageSettings(this,{ipAddress:{title:"IP Address",type:"string"},username:{type:"string",title:"Username"},password:{type:"password",title:"Password"},rtspChannel:{type:"number",hide:!0,defaultValue:0},capabilities:{json:!0,hide:!0},dispatchEvents:{subgroup:"Advanced",title:"Dispatch Events",description:"Select which events to emit. Empty disables event subscription entirely.",multiple:!0,combobox:!0,immediate:!0,defaultValue:["motion","objects"],choices:["motion","objects"],onPut:async()=>{this.scheduleApplyEventDispatchSettings()}},debugLogs:{subgroup:"Advanced",title:"Debug Logs",description:"Enable specific debug logs. Baichuan client logs require reconnect; event logs are immediate.",multiple:!0,combobox:!0,immediate:!0,defaultValue:[],choices:["enabled","debugRtsp","traceStream","traceTalk","debugH264","debugParamSets","eventLogs"],onPut:async(e,t)=>{const A=new Set(e),r=new Set(t);A.delete("eventLogs"),r.delete("eventLogs");(A.size!==r.size||Array.from(A).some((e=>!r.has(e))))&&await this.resetBaichuanClient("debugLogs changed")}},motionTimeout:{subgroup:"Advanced",title:"Motion Timeout",defaultValue:20,type:"number"},presets:{group:"PTZ",title:"Presets to enable",description:'PTZ Presets in the format "id=name". Where id is the PTZ Preset identifier and name is a friendly name.',multiple:!0,defaultValue:[],combobox:!0,onPut:async(e,t)=>{const A={...this.ptzCapabilities,presets:{}};for(const e of t){const[t,r]=e.split("=");A.presets[t]=r}this.ptzCapabilities=A},mapGet:()=>{const e=this.ptzCapabilities?.presets||{};return Object.entries(e).map((([e,t])=>e+"="+t))}},ptzMoveDurationMs:{title:"PTZ Move Duration (ms)",description:"How long a PTZ command moves before sending stop. Higher = more movement per click.",type:"number",defaultValue:300,group:"PTZ"},ptzZoomStep:{group:"PTZ",title:"PTZ Zoom Step",description:"How much to change zoom per zoom command (in zoom factor units, where 1.0 is normal).",type:"number",defaultValue:.1},ptzCreatePreset:{group:"PTZ",title:"Create Preset",description:"Enter a name and press Save to create a new PTZ preset at the current position.",type:"string",placeholder:"e.g. Door",defaultValue:"",onPut:async(e,t)=>{const A=String(t??"").trim();if(!A)return void(""!==String(t??"")&&await this.storageSettings.putSetting("ptzCreatePreset",""));this.markActivity();const r=this.getLogger();r.log(`PTZ presets: create preset requested (name=${A})`);const s=await this.withBaichuanRetry((async()=>await this.ptzPresets.createPtzPreset(A))),n=`${s.id}=${s.name}`;await this.storageSettings.putSetting("ptzSelectedPreset",n),await this.storageSettings.putSetting("ptzCreatePreset",""),r.log(`PTZ presets: created preset id=${s.id} name=${s.name}`)}},ptzSelectedPreset:{group:"PTZ",title:"Selected Preset",description:'Select the preset to update or delete. Format: "id=name".',type:"string",combobox:!1,immediate:!0},ptzUpdateSelectedPreset:{group:"PTZ",title:"Update Selected Preset Position",description:"Overwrite the selected preset with the current PTZ position.",type:"button",immediate:!0,onPut:async()=>{const e=this.getSelectedPresetId();if(void 0===e)throw new Error("No preset selected");this.markActivity();const t=this.getLogger();t.log(`PTZ presets: update position requested (presetId=${e})`),await this.withBaichuanRetry((async()=>await this.ptzPresets.updatePtzPresetToCurrentPosition(e))),t.log(`PTZ presets: update position ok (presetId=${e})`)}},ptzDeleteSelectedPreset:{group:"PTZ",title:"Delete Selected Preset",description:"Delete the selected preset (firmware dependent).",type:"button",immediate:!0,onPut:async()=>{const e=this.getSelectedPresetId();if(void 0===e)throw new Error("No preset selected");this.markActivity();const t=this.getLogger();t.log(`PTZ presets: delete requested (presetId=${e})`),await this.withBaichuanRetry((async()=>await this.ptzPresets.deletePtzPreset(e))),await this.storageSettings.putSetting("ptzSelectedPreset",""),t.log(`PTZ presets: delete ok (presetId=${e})`)}},cachedPresets:{multiple:!0,hide:!0,json:!0,defaultValue:[]},prebufferSet:{type:"boolean",hide:!0},intercomBlocksPerPayload:{subgroup:"Advanced",title:"Intercom Blocks Per Payload",description:"Lower reduces latency (more packets). Typical: 1-4. Requires restarting talk session to take effect.",type:"number",defaultValue:1}}),this.streamManager=new l.StreamManager({createStreamClient:()=>this.createStreamClient(),getLogger:()=>this.getLogger()}),this.intercom=new c.ReolinkBaichuanIntercom(this),this.ptzPresets=new g.ReolinkPtzPresets(this),this.storageSettings.settings.presets.onGet=async()=>({choices:this.storageSettings.values.cachedPresets.map((e=>e.id+"="+e.name))}),this.storageSettings.settings.ptzSelectedPreset.onGet=async()=>({choices:(this.storageSettings.values.cachedPresets||[]).map((e=>e.id+"="+e.name))}),setTimeout((async()=>{await this.init()}),2e3)}getSelectedPresetId(){const e=this.storageSettings.values.ptzSelectedPreset;if(!e)return;const t=e.includes("=")?e.split("=")[0]:e,A=Number(t);return Number.isFinite(A)?A:void 0}isRecoverableBaichuanError(e){const t=e?.message||e?.toString?.()||"";return"string"==typeof t&&(t.includes("Baichuan socket closed")||t.includes("socket hang up")||t.includes("ECONNRESET")||t.includes("EPIPE"))}async resetBaichuanClient(e){try{await(this.baichuanApi?.close())}catch(e){this.getLogger().warn("Error closing Baichuan client during reset",e)}finally{if(this.eventsApi&&this.onSimpleEvent)try{this.eventsApi.simpleEvents.off("event",this.onSimpleEvent)}catch{}this.baichuanApi=void 0,this.baichuanInitPromise=void 0,this.subscribedToEvents=!1,this.eventsApi=void 0}if(e){const t=e?.message||e?.toString?.()||e;this.getLogger().warn(`Baichuan client reset requested: ${t}`)}}async withBaichuanRetry(e){try{return await e()}catch(t){if(!this.isRecoverableBaichuanError(t))throw t;return await this.resetBaichuanClient(t),await e()}}getLogger(){return this.console}async init(){const e=this.getLogger();this.migrateDispatchEventsSetting(),await this.ensureClient(),await this.refreshDeviceState(),await this.reportDevices(),this.updateDeviceInfo(),this.updatePtzCaps();const t=await this.getDeviceInterfaces(),A={nativeId:this.nativeId,providerNativeId:this.plugin.nativeId,name:this.name,interfaces:t,type:this.type,info:this.info};e.log(`Updating device interfaces: ${JSON.stringify(t)}`),await o.default.deviceManager.onDeviceDiscovered(A);try{this.isEventDispatchEnabled()&&await this.ensureBaichuanEventSubscription()}catch(t){e.warn("Failed to subscribe to Baichuan events",t)}if(this.startPeriodicTasks(),this.hasBattery()&&!this.storageSettings.getItem("prebufferSet")){const t=o.default.systemManager.getDeviceById(this.id);e.log("Disabling prebbufer for battery cam"),await t.putSetting("prebuffer:enabledStreams","[]"),this.storageSettings.values.prebufferSet=!0}}async ensureClient(){if(this.baichuanInitPromise)return this.baichuanInitPromise;if(this.baichuanApi&&this.baichuanApi.client.loggedIn)return this.baichuanApi;const{ipAddress:e,username:t,password:r}=this.storageSettings.values;if(!e||!t||!r)throw new Error("Missing camera credentials");this.baichuanInitPromise=(async()=>{this.baichuanApi&&await this.baichuanApi.close();const{ReolinkBaichuanApi:s}=await Promise.resolve().then(A.bind(A,2470)),n=this.getBaichuanDebugOptions();return this.baichuanApi=new s({host:e,username:t,password:r,logger:this.console,...n?{debugOptions:n}:{}}),await this.baichuanApi.login(),this.baichuanApi})();try{return await this.baichuanInitPromise}finally{this.baichuanApi?.client?.loggedIn||(this.baichuanInitPromise=void 0)}}async createStreamClient(){const{ipAddress:e,username:t,password:r}=this.storageSettings.values;if(!e||!t||!r)throw new Error("Missing camera credentials");const{ReolinkBaichuanApi:s}=await Promise.resolve().then(A.bind(A,2470)),n=this.getBaichuanDebugOptions(),i=new s({host:e,username:t,password:r,logger:this.console,...n?{debugOptions:n}:{}});return await i.login(),i}getClient(){return this.baichuanApi}async refreshDeviceState(){return this.refreshDeviceStatePromise||(this.refreshDeviceStatePromise=(async()=>{const e=this.getLogger(),t=await this.ensureClient(),A=this.getRtspChannel();try{const{capabilities:e,abilities:r,support:s,presets:n}=await t.getDeviceCapabilities(A);this.storageSettings.values.capabilities=e,this.ptzPresets.setCachedPtzPresets(n),this.console.log(`Refreshed device capabilities: ${JSON.stringify({capabilities:e,abilities:r,support:s,presets:n})}`)}catch(t){e.warn("Failed to refresh abilities",t)}await this.refreshAuxDevicesStatus().catch((()=>{}))})().finally((()=>{this.refreshDeviceStatePromise=void 0}))),this.refreshDeviceStatePromise}async ensureBaichuanEventSubscription(){if(!this.isEventDispatchEnabled())return void await this.disableBaichuanEventSubscription();if(this.subscribedToEvents)return;const e=await this.ensureClient();try{await e.subscribeEvents()}catch{}if(this.onSimpleEvent||=e=>{try{if(!this.isEventDispatchEnabled())return;this.isEventLogsEnabled()&&this.getLogger().debug(`Baichuan event: ${JSON.stringify(e)}`);const t=this.getRtspChannel();if(void 0!==e?.channel&&e.channel!==t)return;const A=[];let r=!1;switch(e?.type){case"motion":case"doorbell":r=this.shouldDispatchMotion();break;case"people":case"vehicle":case"animal":case"face":case"package":case"other":this.shouldDispatchObjects()&&A.push(e.type);break;default:return}this.processEvents({motion:r,objects:A}).catch((()=>{}))}catch{}},this.eventsApi&&this.eventsApi!==e&&this.onSimpleEvent)try{this.eventsApi.simpleEvents.off("event",this.onSimpleEvent)}catch{}this.eventsApi!==e&&this.onSimpleEvent&&(e.simpleEvents.on("event",this.onSimpleEvent),this.eventsApi=e),this.subscribedToEvents=!0}async disableBaichuanEventSubscription(){const e=this.getClient();if(e?.client?.loggedIn)try{await e.unsubscribeEvents()}catch{}if(this.eventsApi&&this.onSimpleEvent)try{this.eventsApi.simpleEvents.off("event",this.onSimpleEvent)}catch{}this.subscribedToEvents=!1,this.eventsApi=void 0,this.motionTimeout&&clearTimeout(this.motionTimeout),this.motionDetected=!1}async applyEventDispatchSettings(){const e=this.getLogger(),t=Array.from(this.getDispatchEventsSelection()).sort(),A=t.join(","),r=this.lastAppliedDispatchEventsKey;if(void 0!==r&&r!==A&&e.log(`Dispatch Events changed: ${t.length?t.join(", "):"(disabled)"}`),this.markActivity(),!this.isEventDispatchEnabled())return this.subscribedToEvents&&e.log("Event listener stopped (Dispatch Events disabled)"),await this.disableBaichuanEventSubscription(),void(this.lastAppliedDispatchEventsKey=A);if(this.shouldDispatchMotion()||(this.motionTimeout&&clearTimeout(this.motionTimeout),this.motionDetected=!1),r===A&&this.subscribedToEvents)this.lastAppliedDispatchEventsKey=A;else{if(!this.subscribedToEvents)return e.log(`Event listener started (${t.join(", ")})`),await this.ensureBaichuanEventSubscription(),void(this.lastAppliedDispatchEventsKey=A);e.log(`Event listener restarting (${t.join(", ")})`),await this.disableBaichuanEventSubscription(),await this.ensureBaichuanEventSubscription(),this.lastAppliedDispatchEventsKey=A}}markActivity(){this.lastActivityMs=Date.now()}shouldAvoidWakingBatteryCamera(){if(!this.hasBattery())return!1;if(this.sleeping)return!0;const e=this.getClient();if(!e?.client?.loggedIn)return!0;return Date.now()-this.lastActivityMs>3e4}async release(){return this.statusPollTimer&&clearInterval(this.statusPollTimer),this.eventsRestartTimer&&clearInterval(this.eventsRestartTimer),this.resetBaichuanClient()}startPeriodicTasks(){this.periodicStarted||(this.periodicStarted=!0,this.statusPollTimer=setInterval((()=>{this.periodic10sTick().catch((()=>{}))}),1e4),this.eventsRestartTimer=setInterval((()=>{this.periodic60sRestartEvents().catch((()=>{}))}),6e4))}async periodic10sTick(){if(!this.shouldAvoidWakingBatteryCamera()&&(this.hasBattery()||await this.ensureClient(),await this.refreshAuxDevicesStatus(),this.isEventDispatchEnabled()&&!this.subscribedToEvents)){if(this.hasBattery()){const e=this.getClient();if(!e?.client?.loggedIn)return}await this.ensureBaichuanEventSubscription()}}async periodic60sRestartEvents(){if(this.shouldAvoidWakingBatteryCamera())return;if(!this.isEventDispatchEnabled())return void await this.disableBaichuanEventSubscription();if(this.hasBattery()){const e=this.getClient();if(!e?.client?.loggedIn)return}else await this.ensureClient();const e=this.getClient();if(e){try{await e.unsubscribeEvents()}catch{}this.subscribedToEvents=!1,await this.ensureBaichuanEventSubscription()}}async refreshAuxDevicesStatus(){const e=this.getClient();if(!e)return;const t=this.getRtspChannel();try{if(this.hasFloodlight()){const A=await e.getWhiteLedState(t);this.floodlight&&(this.floodlight.on=!!A.enabled,void 0!==A.brightness&&(this.floodlight.brightness=A.brightness))}}catch{}try{if(this.hasPirEvents()){const A=await e.getPirInfo(t);this.pirSensor&&(this.pirSensor.on=!!A.enabled)}}catch{}}async getVideoTextOverlays(){this.getClient()}async setVideoTextOverlay(e,t){await this.ensureClient()}updatePtzCaps(){const{hasPanTilt:e,hasZoom:t}=this.getPtzCapabilities();this.ptzCapabilities={...this.ptzCapabilities,pan:e,tilt:e,zoom:t}}getAbilities(){return this.storageSettings.values.capabilities}async getDetectionInput(e,t){return null}async ptzCommand(e){this.markActivity();const t=await this.ensureClient();if(!t)return;const A=this.getRtspChannel(),r=e.preset;if(null!=r){const e=Number(r);return Number.isFinite(e)?void await this.ptzPresets.moveToPreset(e):void this.getLogger().warn(`Invalid PTZ preset id: ${r}`)}let s="start",n="Left";if(void 0!==e.pan)0===e.pan?(s="stop",n="Left"):(n=e.pan>0?"Right":"Left",s="start");else if(void 0!==e.tilt)0===e.tilt?(s="stop",n="Up"):(n=e.tilt>0?"Up":"Down",s="start");else if(void 0!==e.zoom){const r=Number(e.zoom);if(!Number.isFinite(r)||0===r)return;const s=Number(this.storageSettings.values.ptzZoomStep),n=Number.isFinite(s)&&s>0?s:.2,i=await t.getZoomFocus(A);if(!i?.zoom)return void this.getLogger().warn("Zoom command requested but camera did not report zoom support.");const o=(i.zoom.curPos??1e3)/1e3,a=(i.zoom.minPos??1e3)/1e3,c=(i.zoom.maxPos??1e3)/1e3,g=r>0?1:-1,l=Math.min(c,Math.max(a,o+g*n));return void await t.zoomToFactor(A,l)}const i={action:s,command:n,speed:"number"==typeof e.speed?e.speed:32,autoStopMs:Number(this.storageSettings.values.ptzMoveDurationMs)||500};await t.ptz(A,i)}async getObjectTypes(){try{const e=await this.ensureClient(),t=await e.getAiState(),A=[];return t&&"object"==typeof t&&"support"in t&&t.support&&A.push("people","vehicle","dog_cat","face","package"),{classes:A}}catch(e){return{classes:[]}}}hasSiren(){const e=this.getAbilities();return Boolean(e?.hasSiren)}hasFloodlight(){const e=this.getAbilities();return Boolean(e?.hasFloodlight)}hasBattery(){const e=this.getAbilities();return Boolean(e?.hasBattery)}getPtzCapabilities(){const e=this.getAbilities(),t=Boolean(e?.hasZoom),A=Boolean(e?.hasPan&&e?.hasTilt),r=Boolean(e?.hasPresets);return{hasZoom:t,hasPanTilt:A,hasPresets:r,hasPtz:t||A||r}}hasPtzCtrl(){const e=this.getAbilities();return Boolean(e?.hasPtz)}hasPirEvents(){const e=this.getAbilities();return Boolean(e?.hasPir)}async getDeviceInterfaces(){const e=[o.ScryptedInterface.VideoCamera,o.ScryptedInterface.Settings,...this.plugin.getCameraInterfaces()];try{try{const t=this.getClient();if(t){const A=await t.getTalkAbility(this.getRtspChannel());Array.isArray(A?.audioConfigList)&&A.audioConfigList.length>0&&e.push(o.ScryptedInterface.Intercom)}}catch{}const{hasPtz:t}=this.getPtzCapabilities();t&&e.push(o.ScryptedInterface.PanTiltZoom),(await this.getObjectTypes()).classes.length>0&&e.push(o.ScryptedInterface.ObjectDetector),(this.hasSiren()||this.hasFloodlight()||this.hasPirEvents())&&e.push(o.ScryptedInterface.DeviceProvider),this.hasBattery()&&e.push(o.ScryptedInterface.Battery,o.ScryptedInterface.Sleep)}catch(e){this.getLogger().error("Error getting device interfaces",e)}return e}async processBatteryData(e){this.getLogger();const t=e.batteryPercent,A=e.sleeping||!1;A!==this.sleeping&&(this.sleeping=A),t!==this.batteryLevel&&(this.batteryLevel=t??this.batteryLevel)}async updateDeviceInfo(){const e=this.storageSettings.values.ipAddress;if(!e)return;const t=await this.ensureClient(),A=await t.getInfo(),r=this.info||{};r.ip=e,r.serialNumber=A?.serialNumber||A?.itemNo,r.firmware=A?.firmwareVersion||A?.firmVer,r.version=A?.hardwareVersion||A?.boardInfo,r.model=A?.type||A?.typeInfo,r.manufacturer="Reolink native",r.managementUrl=`http://${e}`,this.info=r}async processEvents(e){const t=this.getLogger();if(this.isEventDispatchEnabled()&&(this.isEventLogsEnabled()&&t.debug(`Events received: ${JSON.stringify(e)}`),this.shouldDispatchMotion()&&e.motion!==this.motionDetected&&(e.motion?(this.motionDetected=!0,this.motionTimeout&&clearTimeout(this.motionTimeout),this.motionTimeout=setTimeout((()=>this.motionDetected=!1),1e3*this.storageSettings.values.motionTimeout)):(this.motionDetected=!1,this.motionTimeout&&clearTimeout(this.motionTimeout))),this.shouldDispatchObjects()&&e.objects?.length)){const t={timestamp:Date.now(),detections:[]};for(const A of e.objects)t.detections.push({className:A,score:1});o.default.deviceManager.onDeviceEvent(this.nativeId,o.ScryptedInterface.ObjectDetector,t)}}normalizeDebugLogs(e){const t=new Set(["enabled","debugRtsp","traceStream","traceTalk","debugH264","debugParamSets","eventLogs"]),A=Array.isArray(e)?e:"string"==typeof e?[e]:[],r=[];for(const e of A){if("string"!=typeof e)continue;const A=e.trim();t.has(A)&&r.push(A)}return Array.from(new Set(r))}getBaichuanDebugOptions(){const e=new Set(this.normalizeDebugLogs(this.storageSettings.values.debugLogs));if(!e.size)return;const t={},A=new Set(["enabled","debugRtsp","traceStream","traceTalk","debugH264","debugParamSets"]);for(const r of e)A.has(r)&&(t[r]=!0);return Object.keys(t).length?t:void 0}isEventLogsEnabled(){return new Set(this.normalizeDebugLogs(this.storageSettings.values.debugLogs)).has("eventLogs")}getDispatchEventsSelection(){return new Set(this.storageSettings.values.dispatchEvents)}isEventDispatchEnabled(){return this.getDispatchEventsSelection().size>0}shouldDispatchMotion(){return this.getDispatchEventsSelection().has("motion")}shouldDispatchObjects(){return this.getDispatchEventsSelection().has("objects")}migrateDispatchEventsSetting(){const e=this.storageSettings.values.dispatchEvents;"boolean"==typeof e&&(this.storageSettings.values.dispatchEvents=e?["motion","objects"]:[])}scheduleApplyEventDispatchSettings(){this.dispatchEventsApplySeq++;const e=this.dispatchEventsApplySeq;this.dispatchEventsApplyTimer&&clearTimeout(this.dispatchEventsApplyTimer),this.dispatchEventsApplyTimer=setTimeout((()=>{this.applyEventDispatchSettings().catch((t=>{e===this.dispatchEventsApplySeq&&this.getLogger().warn("Failed to apply Dispatch Events setting",t)}))}),300)}async takeSnapshotInternal(e){return this.markActivity(),this.withBaichuanRetry((async()=>{try{const e=Date.now(),A=await this.ensureClient(),r=await A.getSnapshot(),s=await this.createMediaObject(r,"image/jpeg");return this.lastB64Snapshot=await(0,t.moToB64)(s),this.lastSnapshotTaken=e,s}catch(e){throw this.getLogger().error("Error taking snapshot",e),e}}))}async getPictureOptions(){return[]}getSettings(){return this.storageSettings.getSettings()}async takePicture(e){const A=this.hasBattery(),r=Date.now(),s=this.getLogger(),n=!this.lastSnapshotTaken||r-this.lastSnapshotTaken>36e5,i=!this.lastSnapshotTaken||r-this.lastSnapshotTaken>15e3;let o=!1;if(this.lastB64Snapshot&&this.lastSnapshotTaken?this.sleeping&&n?(s.log("Allowing new snapshot while sleeping because older than 1 hour"),o=!0):!this.sleeping&&A&&i?(s.log("Allowing new snapshot because older than 15 seconds"),o=!0):o=!0:(s.log("Allowing new snapshot because not taken yet"),o=!0),o)return this.takeSnapshotInternal(e?.timeout);if(this.lastB64Snapshot){return await(0,t.b64ToMo)(this.lastB64Snapshot)}return null}getRtspChannel(){const e=this.storageSettings.values.rtspChannel;return void 0!==e?Number(e):0}async getVideoStream(e){if(this.markActivity(),!e)throw new Error("video streams not set up or no longer exists.");const t=await this.getVideoStreamOptions(),A=t?.find((t=>t.id===e.id))||t?.[0];if(!A)throw new Error("No stream options available");const r=(0,l.parseStreamProfileFromId)(A.id)||"main";return this.withBaichuanRetry((async()=>{const e=this.getRtspChannel(),t=`${e}_${r}`,s=A?.video?.codec?.includes("265")?"H265":A?.video?.codec?.includes("264")?"H264":void 0,{host:n,port:i,sdp:a,audio:c}=await this.streamManager.getRfcStream(e,r,t,s),{url:g,...l}=A;l.container="rtp",c&&(l.audio||={},l.audio.codec=c.codec,l.audio.sampleRate=c.sampleRate,l.audio.channels=c.channels);const h={url:`tcp://${n}:${i}`,sdp:a,mediaStreamOptions:l},d=JSON.stringify(h);return await o.default.mediaManager.createMediaObject(Buffer.from(d),"x-scrypted/x-rfc4571",{sourceId:this.id})}))}async getVideoStreamOptions(){return this.markActivity(),this.withBaichuanRetry((async()=>{const e=await this.ensureClient(),t=this.storageSettings.values.rtspChannel,A=await e.getStreamMetadata(t),r=[];for(const e of A.streams){const t=e.profile,A=e.videoEncType.includes("264")?"h264":e.videoEncType.includes("265")?"h265":e.videoEncType.toLowerCase(),s="main"===t?"mainstream":"sub"===t?"substream":"extstream",n="main"===t?"Main Stream":"sub"===t?"Sub Stream":"Ext Stream";r.push({name:n,id:s,container:"rtp",video:{codec:A,width:e.width,height:e.height},url:""})}return r}))}async getOtherSettings(){return await this.storageSettings.getSettings()}async putSetting(e,t){await this.storageSettings.putSetting(e,t)}showRtspUrlOverride(){return!1}async reportDevices(){const e=this.hasSiren(),t=this.hasFloodlight(),A=this.hasPirEvents(),r=[];if(e){const e=`${this.nativeId}-siren`,t={providerNativeId:this.nativeId,name:`${this.name} Siren`,nativeId:e,info:{...this.info},interfaces:[o.ScryptedInterface.OnOff],type:o.ScryptedDeviceType.Siren};r.push(t)}if(t){const e=`${this.nativeId}-floodlight`,t={providerNativeId:this.nativeId,name:`${this.name} Floodlight`,nativeId:e,info:{...this.info},interfaces:[o.ScryptedInterface.OnOff],type:o.ScryptedDeviceType.Light};r.push(t)}if(A){const e=`${this.nativeId}-pir`,t={providerNativeId:this.nativeId,name:`${this.name} PIR sensor`,nativeId:e,info:{...this.info},interfaces:[o.ScryptedInterface.OnOff],type:o.ScryptedDeviceType.Switch};r.push(t)}o.default.deviceManager.onDevicesChanged({providerNativeId:this.nativeId,devices:r})}async getDevice(e){return e.endsWith("-siren")?(this.siren||=new h(this,e),this.siren):e.endsWith("-floodlight")?(this.floodlight||=new d(this,e),this.floodlight):e.endsWith("-pir")?(this.pirSensor||=new u(this,e),this.pirSensor):void 0}async releaseDevice(e,t){t.endsWith("-siren")?delete this.siren:t.endsWith("-floodlight")?delete this.floodlight:t.endsWith("-pir")&&delete this.pirSensor}async startIntercom(e){await this.intercom.start(e)}stopIntercom(){return this.intercom.stop()}}t.ReolinkNativeCamera=E},5741:function(e,t,A){"use strict";var r,s=this&&this.__createBinding||(Object.create?function(e,t,A,r){void 0===r&&(r=A);var s=Object.getOwnPropertyDescriptor(t,A);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[A]}}),Object.defineProperty(e,r,s)}:function(e,t,A,r){void 0===r&&(r=A),e[r]=t[A]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var A in e)Object.prototype.hasOwnProperty.call(e,A)&&(t[t.length]=A);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var A=r(e),i=0;i<A.length;i++)"default"!==A[i]&&s(t,e,A[i]);return n(t,e),t});Object.defineProperty(t,"__esModule",{value:!0}),t.ReolinkBaichuanIntercom=void 0;const o=i(A(7562)),a=A(1421);t.ReolinkBaichuanIntercom=class{constructor(e){this.camera=e,this.loggedCodecInfo=!1,this.maxBacklogMs=40,this.sendChain=Promise.resolve(),this.pcmBuffer=Buffer.alloc(0)}get blocksPerPayload(){return Math.max(1,Math.min(8,this.camera.storageSettings.values.intercomBlocksPerPayload??1))}async start(e){this.camera.markActivity();const t=this.camera.getLogger(),A=await o.default.mediaManager.convertMediaObjectToJSON(e,o.ScryptedMimeTypes.FFmpegInput);await this.stop();const r=await this.camera.ensureClient(),s=this.camera.getRtspChannel();if(!this.loggedCodecInfo){this.loggedCodecInfo=!0;try{const e=await r.getTalkAbility(s),A=e.audioConfigList?.map((e=>({audioType:e.audioType,sampleRate:e.sampleRate,samplePrecision:e.samplePrecision,lengthPerEncoder:e.lengthPerEncoder,soundTrack:e.soundTrack})));t.log("Intercom TalkAbility",{channel:s,duplexList:e.duplexList,audioStreamModeList:e.audioStreamModeList,audioConfigList:A})}catch(e){t.warn("Intercom: unable to fetch TalkAbility",e)}}const n=await this.camera.withBaichuanRetry((async()=>r.createTalkSession(s,{blocksPerPayload:this.blocksPerPayload})));this.session=n,this.pcmBuffer=Buffer.alloc(0),this.sendChain=Promise.resolve();const{audioConfig:i,blockSize:c,fullBlockSize:g}=n.info,l=i.sampleRate,h=2*c+1,d=2*h;if(this.maxBacklogBytes=Math.max(d,Math.floor(this.maxBacklogMs/1e3*l*1*2)),!Number.isFinite(l)||l<=0)throw await this.stop(),new Error(`Invalid talk sampleRate: ${l}`);if(!Number.isFinite(c)||c<=0||!Number.isFinite(g)||g!==c+4)throw await this.stop(),new Error(`Invalid talk block sizes: blockSize=${c} fullBlockSize=${g}`);t.log("Starting intercom (baichuan/native-api flow)",{channel:s,audioType:i.audioType,sampleRate:i.sampleRate,samplePrecision:i.samplePrecision,lengthPerEncoder:i.lengthPerEncoder,soundTrack:i.soundTrack,blockSize:c,fullBlockSize:g,samplesPerBlock:h,bytesNeeded:d,maxBacklogMs:this.maxBacklogMs,maxBacklogBytes:this.maxBacklogBytes,blocksPerPayload:this.blocksPerPayload});const u=this.buildFfmpegPcmArgs(A,{sampleRate:l,channels:1});t.log("Intercom ffmpeg decode args",u);const E=(0,a.spawn)("ffmpeg",u,{stdio:["ignore","pipe","pipe"]});if(this.session!==n){try{E.kill("SIGKILL")}catch{}return}this.ffmpeg=E,E.stdout.on("data",(e=>{this.session===n&&e?.length&&this.enqueuePcm(n,e,d,c)}));let I=0;E.stderr.on("data",(e=>{I++<12&&t.warn("Intercom ffmpeg",e.toString().trim())})),E.on("exit",((e,A)=>{t.warn(`Intercom ffmpeg exited code=${e} signal=${A}`),this.stop().catch((()=>{}))})),t.log("Intercom started (ffmpeg decode -> PCM -> IMA ADPCM)")}stop(){return this.stopping||(this.stopping=(async()=>{const e=this.camera.getLogger(),t=this.ffmpeg;this.ffmpeg=void 0;const A=this.session;this.session=void 0,this.pcmBuffer=Buffer.alloc(0);const r=async e=>new Promise((t=>setTimeout(t,e)));if(t&&null==t.exitCode){try{t.kill("SIGKILL")}catch{}try{await Promise.race([new Promise((e=>t.once("exit",(()=>e())))),r(1e3)])}catch{}}try{await Promise.race([this.sendChain,r(250)])}catch{}if(this.sendChain=Promise.resolve(),A)try{await Promise.race([A.stop(),r(2e3)])}catch(t){e.warn("Intercom session stop error",t)}})().finally((()=>{this.stopping=void 0}))),this.stopping}clamp16(e){return e>32767?32767:e<-32768?-32768:0|e}enqueuePcm(e,t,A,r){const s=this.camera.getLogger();this.sendChain=this.sendChain.then((async()=>{if(this.session!==e)return;this.pcmBuffer=this.pcmBuffer.length?Buffer.concat([this.pcmBuffer,t]):t;const s=this.maxBacklogBytes??A;if(this.pcmBuffer.length>s){const e=s-s%2;this.pcmBuffer=this.pcmBuffer.subarray(this.pcmBuffer.length-e)}for(;this.pcmBuffer.length>=A;){const t=this.pcmBuffer.subarray(0,A);this.pcmBuffer=this.pcmBuffer.subarray(A);const s=new Int16Array(t.buffer,t.byteOffset,t.length/2),n=this.encodeImaAdpcm(s,r);await e.sendAudio(n)}})).catch((e=>{s.warn("Intercom PCM->ADPCM pipeline error",e)}))}buildFfmpegPcmArgs(e,t){const A=e.inputArguments??[],r=[];let s;for(let e=0;e<A.length;e++){const t=A[e];if("-i"===t){const t=A[e+1];if("string"==typeof t){s||(s=t),e++;continue}}r.push(t)}const n=s??e.url;if(!n)throw new Error("FFmpegInput missing url/input");return[...r,"-i",n,"-map","0:a:0?","-fflags","nobuffer","-flags","low_delay","-flush_packets","1","-vn","-sn","-dn","-acodec","pcm_s16le","-ar",t.sampleRate.toString(),"-ac",t.channels.toString(),"-f","s16le","pipe:1"]}encodeImaAdpcm(e,t){const A=2*t+1,r=Math.ceil(e.length/A),s=[],n=Int8Array.from([-1,-1,-1,-1,2,4,6,8,-1,-1,-1,-1,2,4,6,8]),i=Int16Array.from([7,8,9,10,11,12,13,14,16,17,19,21,23,25,28,31,34,37,41,45,50,55,60,66,73,80,88,97,107,118,130,143,157,173,190,209,230,253,279,307,337,371,408,449,494,544,598,658,724,796,876,963,1060,1166,1282,1411,1552,1707,1878,2066,2272,2499,2749,3024,3327,3660,4026,4428,4871,5358,5894,6484,7132,7845,8630,9493,10442,11487,12635,13899,15289,16818,18500,20350,22385,24623,27086,29794,32767]);let o=0;for(let A=0;A<r;A++){const A=Buffer.alloc(4+t);let r=e[o]??0,a=0;A.writeInt16LE(r,0),A.writeUInt8(a,2),A.writeUInt8(0,3),o++;const c=new Uint8Array(2*t);for(let t=0;t<c.length;t++){const A=e[o]??r;o++;let s=A-r,g=0;s<0&&(g=8,s=-s);let l=i[a]??7,h=0,d=l>>3;s>=l&&(h|=4,s-=l,d+=l),l>>=1,s>=l&&(h|=2,s-=l,d+=l),l>>=1,s>=l&&(h|=1,d+=l),g?r-=d:r+=d,r=this.clamp16(r),a+=n[h]??0,a<0&&(a=0),a>88&&(a=88),c[t]=15&(h|g)}for(let e=0;e<t;e++){const t=c[2*e]??0,r=c[2*e+1]??0;A[4+e]=15&t|(15&r)<<4}s.push(A)}return Buffer.concat(s)}}},7927:function(e,t,A){"use strict";var r,s=this&&this.__createBinding||(Object.create?function(e,t,A,r){void 0===r&&(r=A);var s=Object.getOwnPropertyDescriptor(t,A);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[A]}}),Object.defineProperty(e,r,s)}:function(e,t,A,r){void 0===r&&(r=A),e[r]=t[A]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var A in e)Object.prototype.hasOwnProperty.call(e,A)&&(t[t.length]=A);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var A=r(e),i=0;i<A.length;i++)"default"!==A[i]&&s(t,e,A[i]);return n(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const o=i(A(7562)),a=A(4417);class c extends o.ScryptedDeviceBase{constructor(){super(...arguments),this.devices=new Map}getScryptedDeviceCreator(){return"Reolink Native camera"}getCameraInterfaces(){return[o.ScryptedInterface.Reboot,o.ScryptedInterface.VideoCameraConfiguration,o.ScryptedInterface.Camera,o.ScryptedInterface.AudioSensor,o.ScryptedInterface.MotionSensor,o.ScryptedInterface.VideoTextOverlays]}async getDevice(e){if(this.devices.has(e))return this.devices.get(e);const t=this.createCamera(e);return this.devices.set(e,t),t}async createDevice(e,t){const r=e.ip?.toString();let s={};const n=e.username?.toString(),i=e.password?.toString();if(r&&n&&i){const{ReolinkBaichuanApi:a}=await Promise.resolve().then(A.bind(A,2470)),c=new a({host:r,username:n,password:i});try{const A=await c.getInfo(),a=A?.name,g=0,{abilities:l,capabilities:h}=await c.getDeviceCapabilities(g);this.console.log(JSON.stringify({abilities:l,capabilities:h,deviceInfo:A})),t=A.serialNumber,e.newCamera||=a,await o.default.deviceManager.onDeviceDiscovered({nativeId:t,name:a,interfaces:this.getCameraInterfaces(),type:o.ScryptedDeviceType.Camera,providerNativeId:this.nativeId});const d=await this.getDevice(t);return d.info=s,d.storageSettings.values.username=n,d.storageSettings.values.password=i,d.storageSettings.values.rtspChannel=g,d.storageSettings.values.ipAddress=r,d.storageSettings.values.capabilities=h,d.updateDeviceInfo(),t}catch(e){throw this.console.error("Error adding Reolink camera",e),await c.close(),e}finally{await c.close()}}}async releaseDevice(e,t){if(this.devices.has(t)){const e=this.devices.get(t);await e.release(),this.devices.delete(t)}}async getCreateDeviceSettings(){return[{key:"ip",title:"IP Address",placeholder:"192.168.2.222"},{key:"username",title:"Username"},{key:"password",title:"Password",type:"password"},{key:"uid",title:"UID",description:"Reolink UID (required for battery cameras)"}]}createCamera(e){return new a.ReolinkNativeCamera(e,this)}}t.default=c},840:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ReolinkPtzPresets=void 0;t.ReolinkPtzPresets=class{constructor(e){this.camera=e}get storageSettings(){return this.camera.storageSettings}getPtzCapabilitiesStore(){return this.camera.ptzCapabilities}setPtzCapabilitiesStore(e){this.camera.ptzCapabilities=e}parsePresetIdFromSettingValue(e){const t=String(e??"").trim();if(!t)return;const A=t.includes("=")?t.split("=")[0]:t,r=Number(A);return Number.isFinite(r)?r:void 0}syncEnabledPresetsSettingAndCaps(e){const t=this.storageSettings.values.presets??[];if(!t.length)return;const A=new Map(e.map((e=>[e.id,e.name]))),r={};for(const e of t){const t=this.parsePresetIdFromSettingValue(e);if(void 0===t)continue;const s=(e.includes("=")?e.substring(e.indexOf("=")+1).trim():"")||A.get(t);s&&(r[String(t)]=s)}this.setPtzCapabilitiesStore({...this.getPtzCapabilitiesStore()??{},presets:r})}setCachedPtzPresets(e){const t=Array.isArray(e)?e:[];this.storageSettings.values.cachedPresets=t;const A={};for(const e of t)A[String(e.id)]=e.name;this.setPtzCapabilitiesStore({...this.getPtzCapabilitiesStore()??{},presets:A})}getCachedPtzPresets(){const e=this.storageSettings.values.cachedPresets;return Array.isArray(e)?e:[]}nextFreePresetId(e){const t=new Set(e.map((e=>e.id)));for(let e=1;e<=255;e++)if(!t.has(e))return e;throw new Error("No free PTZ preset id available (1..255)")}async refreshPtzPresets(){const e=await this.camera.ensureClient(),t=this.camera.getRtspChannel(),A=await e.getPtzPresets(t);return this.setCachedPtzPresets(A),this.syncEnabledPresetsSettingAndCaps(A),A}async moveToPreset(e){const t=await this.camera.ensureClient(),A=this.camera.getRtspChannel();await t.moveToPtzPreset(A,e)}async createPtzPreset(e,t){const A=await this.camera.ensureClient(),r=this.camera.getRtspChannel(),s=String(e??"").trim();if(!s)throw new Error("Preset name is required");const n=await A.getPtzPresets(r),i=new Set(n.map((e=>e.id)));let o,a=[];const c=t??this.nextFreePresetId(n);for(let e=0;e<5;e++){const n=t??c+e;if(!t&&i.has(n))continue;await A.setPtzPreset(r,n,s);const g=await A.getPtzPresets(r);a=g;if(g.some((e=>e.id===n))){o=n;break}}if(void 0===o)throw this.setCachedPtzPresets(a),this.syncEnabledPresetsSettingAndCaps(a),new Error("PTZ preset save did not persist (camera returned an empty/unchanged preset list). Try a different preset id.");this.setCachedPtzPresets(a);const g=this.storageSettings.values.presets??[];if(g.length){g.some((e=>this.parsePresetIdFromSettingValue(e)===o))||(g.push(`${o}=${s}`),this.storageSettings.values.presets=g)}return this.syncEnabledPresetsSettingAndCaps(a),{id:o,name:s}}async updatePtzPresetToCurrentPosition(e){const t=await this.camera.ensureClient(),A=this.camera.getRtspChannel(),r=this.getCachedPtzPresets().find((t=>t.id===e)),s=r?.name??`Preset ${e}`;await t.setPtzPreset(A,e,s),await this.refreshPtzPresets()}async deletePtzPreset(e){const t=await this.camera.ensureClient(),A=this.camera.getRtspChannel();await t.deletePtzPreset(A,e);const r=this.storageSettings.values.presets;if(Array.isArray(r)&&r.length){const t=r.filter((e=>"string"==typeof e)).filter((t=>this.parsePresetIdFromSettingValue(t)!==e));this.storageSettings.values.presets=t}await this.refreshPtzPresets()}async renamePtzPreset(e,t){const A=await this.camera.ensureClient(),r=this.camera.getRtspChannel(),s=String(t??"").trim();if(!s)throw new Error("Preset name is required");await A.moveToPtzPreset(r,e),await A.setPtzPreset(r,e,s),await this.refreshPtzPresets()}}},5050:(e,t,A)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StreamManager=void 0,t.parseStreamProfileFromId=function(e){if(!e)return;return"mainstream"===e?"main":"substream"===e?"sub":"extstream"===e?"ext":void 0};t.StreamManager=class{constructor(e){this.opts=e,this.nativeRfcServers=new Map,this.nativeRfcServerCreatePromises=new Map}getLogger(){return this.opts.getLogger()}async ensureNativeRfcServer(e,t,r,s){const n=this.nativeRfcServerCreatePromises.get(e);if(n)return await n;const i=(async()=>{const n=this.nativeRfcServers.get(e);if(n?.server?.listening){if(!s||n.videoType===s)return{host:n.host,port:n.port,sdp:n.sdp,audio:n.audio};this.getLogger().warn(`Native RFC cache codec mismatch for ${e}: cached=${n.videoType} expected=${s}; recreating server.`)}if(n){try{await n.close("recreate")}catch{}this.nativeRfcServers.delete(e)}const i=await this.opts.createStreamClient(),{createScryptedRfc4571TcpServer:o}=await Promise.resolve().then(A.bind(A,2470)),a=await o({api:i,channel:t,profile:r,logger:this.getLogger(),expectedVideoType:s,closeApiOnTeardown:!0});return this.nativeRfcServers.set(e,a),a.server.once("close",(()=>{const t=this.nativeRfcServers.get(e);t?.server===a.server&&this.nativeRfcServers.delete(e)})),{host:a.host,port:a.port,sdp:a.sdp,audio:a.audio}})();this.nativeRfcServerCreatePromises.set(e,i);try{return await i}finally{this.nativeRfcServerCreatePromises.delete(e)}}async getRfcStream(e,t,A,r){return await this.ensureNativeRfcServer(A,e,t,r)}}},3339:e=>{"use strict";e.exports=require("module")},4589:e=>{"use strict";e.exports=require("node:assert")},6698:e=>{"use strict";e.exports=require("node:async_hooks")},4573:e=>{"use strict";e.exports=require("node:buffer")},1421:e=>{"use strict";e.exports=require("node:child_process")},7540:e=>{"use strict";e.exports=require("node:console")},7598:e=>{"use strict";e.exports=require("node:crypto")},3053:e=>{"use strict";e.exports=require("node:diagnostics_channel")},610:e=>{"use strict";e.exports=require("node:dns")},8474:e=>{"use strict";e.exports=require("node:events")},1455:e=>{"use strict";e.exports=require("node:fs/promises")},7067:e=>{"use strict";e.exports=require("node:http")},2467:e=>{"use strict";e.exports=require("node:http2")},7030:e=>{"use strict";e.exports=require("node:net")},6760:e=>{"use strict";e.exports=require("node:path")},643:e=>{"use strict";e.exports=require("node:perf_hooks")},1792:e=>{"use strict";e.exports=require("node:querystring")},99:e=>{"use strict";e.exports=require("node:sqlite")},7075:e=>{"use strict";e.exports=require("node:stream")},7997:e=>{"use strict";e.exports=require("node:timers")},1692:e=>{"use strict";e.exports=require("node:tls")},7975:e=>{"use strict";e.exports=require("node:util")},3429:e=>{"use strict";e.exports=require("node:util/types")},5919:e=>{"use strict";e.exports=require("node:worker_threads")},8522:e=>{"use strict";e.exports=require("node:zlib")},2470:(e,t,A)=>{"use strict";A.d(t,{ReolinkBaichuanApi:()=>rt,createScryptedRfc4571TcpServer:()=>Et});const r=require("crypto"),s=require("events"),n=require("net"),i=require("dgram"),o=require("timers"),a=require("fs"),c=require("path");A(9038);const g=require("child_process"),l=require("http");var h=Buffer.from([240,222,188,10]),d=Buffer.from([160,203,237,15]),u=Uint8Array.from([31,45,60,75,90,105,120,255]),E=Buffer.from("0123456789abcdef","utf8"),I=25620;function Q(e){return e===I||0===e}var B=289;function C(e){return function(e){return(0,r.createHash)("md5").update(e,"utf8").digest("hex").toUpperCase()}(e).slice(0,31)}function p(e,t){const A=C(`${e}-${t}`).slice(0,16);return Buffer.from(A,"utf8")}function f(e,t){const A=255&t,r=Buffer.allocUnsafe(e.length);for(let t=0;t<e.length;t++){const s=u[(A+t)%u.length];r[t]=e[t]^s^A}return r}function m(e,t){return f(e,t)}function y(e,t){if(0===e.length)return Buffer.alloc(0);const A=(0,r.createCipheriv)("aes-128-cfb",t,E);return A.setAutoPadding(!1),Buffer.concat([A.update(e),A.final()])}function D(e,t){if(0===e.length)return Buffer.alloc(0);const A=(0,r.createDecipheriv)("aes-128-cfb",t,E);return A.setAutoPadding(!1),Buffer.concat([A.update(e),A.final()])}function S(e){const t=Q(e.messageClass),A=t?24:20,r=Buffer.alloc(A),s=e.magic??h;if(4!==s.length)throw new Error("magic must be 4 bytes");return s.copy(r,0),r.writeUInt32LE(e.cmdId>>>0,4),r.writeUInt32LE(e.bodyLen>>>0,8),r.writeUInt8(255&e.channelId,12),r.writeUInt8(255&e.streamType,13),r.writeUInt16LE(65535&e.msgNum,14),r.writeUInt16LE(65535&e.responseCode,16),r.writeUInt16LE(65535&e.messageClass,18),t&&r.writeUInt32LE((e.payloadOffset??0)>>>0,20),r}function w(e){if(e.length<20)throw new Error("not enough data for Baichuan header");const t=e.subarray(0,4);if(!t.equals(h)&&!t.equals(d))throw new Error(`invalid Baichuan magic: ${t.toString("hex")}`);const A=e.readUInt32LE(4),r=e.readUInt32LE(8),s=e.readUInt8(12),n=e.readUInt8(13),i=e.readUInt16LE(14),o=e.readUInt16LE(16),a=e.readUInt16LE(18),c=Q(a)?24:20;if(e.length<c)throw new Error("not enough data for Baichuan header (needs 24 bytes)");const g=e.readUInt32LE(12),l={magic:Buffer.from(t),cmdId:A,bodyLen:r,channelId:s,streamType:n,msgNum:i,responseCode:o,messageClass:a};return 24===c&&(l.payloadOffset=e.readUInt32LE(20)),{header:l,headerLen:c,messageKey:g}}var b=class{buffer=Buffer.alloc(0);push(e){if(0===e.length)return[];const t=e;this.buffer=0===this.buffer.length?t:Buffer.concat([this.buffer,t]);const A=[];for(;!(this.buffer.length<4);){if(!this.buffer.subarray(0,4).equals(h)&&!this.buffer.subarray(0,4).equals(d)){const e=this.buffer.indexOf(h),t=this.buffer.indexOf(d),A=-1===e?t:-1===t?e:Math.min(e,t);if(-1===A){this.buffer=this.buffer.subarray(Math.max(0,this.buffer.length-3));break}if(this.buffer=this.buffer.subarray(A),this.buffer.length<20)break}if(this.buffer.length<20)break;let e;try{e=w(this.buffer)}catch{break}const{header:t,headerLen:r,messageKey:s}=e,n=r+t.bodyLen;if(this.buffer.length<n)break;const i=this.buffer.subarray(0,n),o=i.subarray(r);let a=0;if(24===r){const e=t.payloadOffset??0;a=e>0?Math.min(e,t.bodyLen):0}const c=o.subarray(0,a),g=o.subarray(a);A.push({header:t,body:o,extension:c,payload:g,messageKey:s,raw:i}),this.buffer=this.buffer.subarray(n)}return A}};function R(e){if(null==e||"string"!=typeof e){throw new Error(`xmlEscape: expected string but got ${typeof e}: ${e}`)}return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function N(e){return null==e?'<?xml version="1.0" encoding="UTF-8" ?><Extension version="1.1"></Extension>':`<?xml version="1.0" encoding="UTF-8" ?>\n<Extension version="1.1">\n<channelId>${e}</channelId>\n</Extension>`}function k(e){return null==e?'<?xml version="1.0" encoding="UTF-8" ?><Extension version="1.1"><binaryData>1</binaryData></Extension>':`<?xml version="1.0" encoding="UTF-8" ?>\n<Extension version="1.1">\n<binaryData>1</binaryData>\n<channelId>${e}</channelId>\n</Extension>`}function F(e,t){const A=new RegExp(`<${t}>([^<]*)</${t}>`).exec(e);return A?.[1]}function U(e,t,A,r){let s="";const n=r?.name;"setPos"===A&&void 0!==n&&(s=`<name>${R(n)}</name>`);let i="";return void 0!==r?.enable&&(i=`<enable>${r.enable}</enable>`),`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<PtzPreset version="1.1">\n<channelId>${e}</channelId>\n<presetList>\n<preset>\n<id>${t}</id>\n<command>${A}</command>\n${s}\n${i}\n</preset>\n</presetList>\n</PtzPreset>\n</body>`}function M(e,t){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<audioPlayInfo version="1.1">\n${void 0!==e?`<channelId>${e}</channelId>`:""}\n<playMode>2</playMode>\n<playDuration>10</playDuration>\n<playTimes>1</playTimes>\n<onOff>${t}</onOff>\n</audioPlayInfo>\n</body>`}function T(e,t){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<audioPlayInfo version="1.1">\n${void 0!==e?`<channelId>${e}</channelId>`:""}\n<playMode>0</playMode>\n<playDuration>10</playDuration>\n<playTimes>${t}</playTimes>\n<onOff>1</onOff>\n</audioPlayInfo>\n</body>`}function v(e,t,A=180){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<FloodlightManual version="1.1">\n<channelId>${e}</channelId>\n<status>${t}</status>\n<duration>${A}</duration>\n</FloodlightManual>\n</body>`}var L,H=713543482,Y=713543456,x=713543440;function V(e){const t=function(){if(L)return L;const e=new Uint32Array(256);for(let t=0;t<256;t++){let A=t;for(let e=0;e<8;e++)A=1&A?3988292384^A>>>1:A>>>1;e[t]=A>>>0}return L=e,e}();let A=0;for(let r=0;r<e.length;r++){A=(t[255&(A^e[r])]^A>>>8)>>>0}return A>>>0}var P=Uint32Array.from([523058251,1517059981,941043275,2188469082,2252282411,2781280216,2205278644,401789861]);function G(e,t){const A=Buffer.allocUnsafe(t.length),r=function*(e){let t=0;for(;;){const A=P[t%P.length]+(e>>>0)>>>0;yield 255&A,yield A>>>8&255,yield A>>>16&255,yield A>>>24&255,t++}}(e>>>0);for(let e=0;e<t.length;e++)A[e]=t[e]^r.next().value;return A}function O(e,t){return e.readInt32LE(t)}function J(e,t){const A=G(e,Buffer.from(t,"utf8")),r=V(A),s=Buffer.alloc(20);return s.writeUInt32LE(H,0),s.writeUInt32LE(A.length>>>0,4),s.writeUInt32LE(1,8),s.writeUInt32LE(e>>>0,12),s.writeUInt32LE(r>>>0,16),Buffer.concat([s,A])}function W(e){const t=Buffer.alloc(20);return t.writeUInt32LE(x,0),t.writeInt32LE(0|e.connectionId,4),t.writeUInt32LE(0,8),t.writeUInt32LE(e.packetId>>>0,12),t.writeUInt32LE(e.payload.length>>>0,16),Buffer.concat([t,e.payload])}function q(e){if(e.length<4)throw new Error("BCUDP packet too short");const t=e.readUInt32LE(0);if(t===H){if(e.length<20)throw new Error("BCUDP discovery header too short");const t=e.readUInt32LE(4),A=e.readUInt32LE(8);if(1!==A)throw new Error(`BCUDP discovery unknownA expected 1, got ${A}`);const r=e.readUInt32LE(12),s=e.readUInt32LE(16),n=e.subarray(20);if(n.length<t)throw new Error("BCUDP discovery payload truncated");const i=n.subarray(0,t);if(s>>>0!=V(i)>>>0)throw new Error("BCUDP discovery CRC mismatch");const o=function(e,t){return G(e,t)}(r,i);return{kind:"discovery",tid:r,xml:o.toString("utf8")}}if(t===Y){if(e.length<28)throw new Error("BCUDP ack header too short");const t=O(e,4),A=e.readUInt32LE(8);if(0!==A)throw new Error(`BCUDP ack unknownA expected 0, got ${A}`);const r=e.readUInt32LE(12),s=e.readUInt32LE(16),n=e.readUInt32LE(20),i=e.readUInt32LE(24),o=e.subarray(28);if(o.length<i)throw new Error("BCUDP ack payload truncated");return{kind:"ack",connectionId:t,groupId:r,packetId:s,maybeLatency:n,payload:o.subarray(0,i)}}if(t===x){if(e.length<20)throw new Error("BCUDP data header too short");const t=O(e,4),A=e.readUInt32LE(8);if(0!==A)throw new Error(`BCUDP data unknownA expected 0, got ${A}`);const r=e.readUInt32LE(12),s=e.readUInt32LE(16),n=e.subarray(20);if(n.length<s)throw new Error("BCUDP data payload truncated");return{kind:"data",connectionId:t,packetId:r,payload:n.subarray(0,s)}}throw new Error(`Unknown BCUDP magic 0x${t.toString(16)}`)}function _(e){return`<P2P>${e}</P2P>`}var X=class{currentValues=[];lastReceiveTime=null;displayValue=0;lastDisplayTime=null;getValue(){return this.displayValue}feed(){const e=performance.now();if(null!==this.lastReceiveTime){const t=1e3*(e-this.lastReceiveTime);this.currentValues.push(t)}if(this.lastReceiveTime=e,null!==this.lastDisplayTime){if(e-this.lastDisplayTime>1e3){this.lastDisplayTime=e;const t=this.currentValues.length;if(t>0){const e=this.currentValues.reduce(((e,t)=>e+t),0);this.displayValue=Math.floor(e/t)}else this.displayValue=0;this.currentValues=[]}}else this.lastDisplayTime=e,this.displayValue=0}},Z=class extends s.EventEmitter{opts;sock;remote;mtu;clientId;cameraId;sid;sendPacketId=0;packetsWant=0;received=new Map;sent=new Map;ackTimer;resendTimer;hbTimer;discoveryTid;ackScheduled=!1;ackLatency=new X;lastAckPacket=Buffer.alloc(0);ackSentCount=0;pendingData=[];pendingDataOffset=0;drainScheduled=!1;constructor(e){super(),this.opts=e,this.mtu=e.mtu??1350}async connect(){if(this.sock)return;const e=i.createSocket("udp4");this.sock=e;try{e.setRecvBufferSize(4194304),e.setSendBufferSize(4194304)}catch(e){}e.on("message",((e,t)=>{try{const A=q(e);this.handlePacket(A,t.address,t.port)}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}})),e.on("error",(e=>this.emit("error",e))),e.on("close",(()=>this.emit("close"))),await new Promise((t=>e.bind(0,"0.0.0.0",(()=>t())))),"direct"===this.opts.mode?(this.remote={host:this.opts.host,port:this.opts.port},this.clientId=this.opts.clientId,this.cameraId=this.opts.cameraId):await this.discoveryUid(e),this.startTimers()}async discoveryUid(e){if("uid"!==this.opts.mode)throw new Error("Internal: discoveryUid called for non-uid mode");const t=this.opts.port?[this.opts.port]:[2015,2018],A=this.opts.host??"255.255.255.255",r=this.opts.broadcast??!0,s=this.opts.discoveryTimeout??3e4,n=this.opts.discoveryRetryInterval??500;r&&e.setBroadcast(!0);const i=e.address(),a="string"==typeof i?0:i.port,c=0|Math.floor(2147483647*Math.random())||82e3,g=function(e){const t=e.os??"MAC";return _(`<C2D_C><uid>${R(e.uid)}</uid><cli><port>${e.clientPort}</port></cli><cid>${e.cid}</cid><mtu>${e.mtu}</mtu><debug>false</debug><p>${R(t)}</p></C2D_C>`)}({uid:this.opts.uid,clientPort:a,cid:c,mtu:this.mtu}),l=await new Promise(((r,i)=>{const a=setTimeout((()=>{c&&clearInterval(c),e.off("message",m),i(new Error(`BCUDP discovery timeout after ${s}ms (camera may be sleeping or unreachable)`))}),s);let c,l,h,d,u,E=0,I=!1,Q=!1,B=!1;const C=t=>{d&&(u||(u=setTimeout((()=>{const A=d,s=l,n=h;A&&(e.off("message",m),clearTimeout(a),c&&clearInterval(c),this.emit("debug","discovery_finalize",{reason:t,...null!=s?{sid:s}:{},...A}),r({...A,...null!=s?{sid:s}:{},...null!=n?{tid:n}:{}}))}),250)))},p=(t,A)=>{if(!I&&d)try{const r=(0|Math.floor(255*Math.random()))>>>0,s=J(r,function(e){const t=e.conn??"local";return _("<C2D_T>"+(null!=e.sid?`<sid>${e.sid}</sid>`:"")+`<conn>${R(t)}</conn><cid>${e.cid}</cid><mtu>${e.mtu}</mtu></C2D_T>`)}({...null!=l?{sid:l}:{},cid:d.cid,mtu:this.mtu,conn:"local"}));e.send(s,A,t),I=!0,this.emit("debug","discovery_t_send",{sid:l,cid:d.cid,did:d.did,rhost:t,rport:A})}catch(e){this.emit("debug","discovery_t_send_error",e)}},f=(t,A,r,s)=>{if(!B)try{const n=J(t,function(e){const t=e.conn??"local";return _(`<C2D_A><sid>${e.sid}</sid><conn>${R(t)}</conn><cid>${e.cid}</cid><did>${e.did}</did><mtu>${e.mtu}</mtu></C2D_A>`)}({sid:s.sid,conn:s.conn??"local",cid:s.cid,did:s.did,mtu:this.mtu}));e.send(n,r,A),B=!0,this.emit("debug","discovery_a_send",{sid:s.sid,cid:s.cid,did:s.did,rhost:A,rport:r})}catch(e){this.emit("debug","discovery_a_send_error",e)}},m=(e,t)=>{try{const A=q(e);if("discovery"!==A.kind)return;this.emit("debug","discovery_rx",{tid:A.tid,rhost:t.address,rport:t.port,xmlPreview:A.xml.slice(0,120)});const r=function(e){const t=/<D2C_CFM>([\s\S]*?)<\/D2C_CFM>/.exec(e);if(!t)return;const A=t[1]??"",r=/<sid>(-?\d+)<\/sid>/.exec(A)?.[1];if(null==r)return;const s=/<conn>([^<]+)<\/conn>/.exec(A)?.[1],n=/<rsp>(-?\d+)<\/rsp>/.exec(A)?.[1],i=/<cid>(-?\d+)<\/cid>/.exec(A)?.[1],o=/<did>(-?\d+)<\/did>/.exec(A)?.[1];return{sid:Number(r),...null!=s?{conn:s}:{},...null!=n?{rsp:Number(n)}:{},...null!=i?{cid:Number(i)}:{},...null!=o?{did:Number(o)}:{}}}(A.xml);r&&(l=r.sid,d||null==r.cid||null==r.did||(d={cid:r.cid,did:r.did,rhost:t.address,rport:t.port}),d&&(p(t.address,t.port),C("cfm")));const s=function(e){const t=/<D2C_T>([\s\S]*?)<\/D2C_T>/.exec(e);if(!t)return;const A=t[1]??"",r=/<sid>(-?\d+)<\/sid>/.exec(A)?.[1],s=/<cid>(-?\d+)<\/cid>/.exec(A)?.[1],n=/<did>(-?\d+)<\/did>/.exec(A)?.[1];if(null==r||null==s||null==n)return;const i=/<conn>([^<]+)<\/conn>/.exec(A)?.[1];return{sid:Number(r),cid:Number(s),did:Number(n),...null!=i?{conn:i}:{}}}(A.xml);if(s)return Q=!0,l=s.sid,d||(d={cid:s.cid,did:s.did,rhost:t.address,rport:t.port}),this.emit("debug","discovery_t_rx",{sid:s.sid,cid:s.cid,did:s.did,rhost:t.address,rport:t.port}),f(A.tid,t.address,t.port,s),void C("t_a");const n=function(e){const t=/<D2C_C_R>([\s\S]*?)<\/D2C_C_R>/.exec(e);if(!t)return;const A=t[1]??"",r=/<rsp>(-?\d+)<\/rsp>/.exec(A)?.[1],s=/<cid>(-?\d+)<\/cid>/.exec(A)?.[1],n=/<did>(-?\d+)<\/did>/.exec(A)?.[1];if(null==r||null==s||null==n)return;const i=/<sid>(-?\d+)<\/sid>/.exec(A)?.[1],o=/<timer>([\s\S]*?)<\/timer>/.exec(A)?.[1],a=o?/<def>(-?\d+)<\/def>/.exec(o)?.[1]:void 0,c=o?/<hb>(-?\d+)<\/hb>/.exec(o)?.[1]:void 0,g=o?/<hbt>(-?\d+)<\/hbt>/.exec(o)?.[1]:void 0,l=null!=a||null!=c||null!=g?{...null!=a?{def:Number(a)}:{},...null!=c?{hb:Number(c)}:{},...null!=g?{hbt:Number(g)}:{}}:void 0;return{rsp:Number(r),cid:Number(s),did:Number(n),...null!=i?{sid:Number(i)}:{},...l?{timer:l}:{}}}(A.xml);if(!n)return;if(0!==n.rsp)return;return this.emit("debug","discovery_success",{retryCount:E,rhost:t.address,rport:t.port,sid:n.sid??l,timer:n.timer}),h=A.tid,d={cid:n.cid,did:n.did,rhost:t.address,rport:t.port},null!=n.sid&&(l=n.sid),p(t.address,t.port),void(Q||B?C("cr_t"):null!=l?(u&&clearTimeout(u),u=setTimeout((()=>{C("cr_timeout")}),1500)):C("cr_no_sid"))}catch{}};e.on("message",m);const y=()=>{const r=J((0|Math.floor(255*Math.random()))>>>0,g);for(const s of t)try{e.send(r,s,A),E++,this.emit("debug","discovery_send",{retryCount:E,host:A,port:s})}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}};y(),c=(0,o.setInterval)((()=>{y()}),n)}));this.clientId=l.cid,this.cameraId=l.did,this.sid=l.sid,this.discoveryTid=l.tid,this.remote={host:l.rhost,port:l.rport}}startTimers(){if(!this.sock||!this.remote||null==this.clientId||null==this.cameraId)throw new Error("BCUDP not ready");this.updateAckPacket(),this.sendHeartbeat(),this.ackTimer=(0,o.setInterval)((()=>{try{this.sendAckFast()}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}}),10),this.resendTimer=(0,o.setInterval)((()=>{try{this.resendOutstanding()}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}}),500),this.hbTimer=(0,o.setInterval)((()=>{try{this.sendHeartbeat()}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}}),1e3)}sendHeartbeat(){if(!this.sock||!this.remote||null==this.clientId||null==this.cameraId)return;const e=(0|Math.floor(255*Math.random()))>>>0;let t;var A;t=_(`<C2D_HB><cid>${(A={cid:this.clientId,did:this.cameraId}).cid}</cid><did>${A.did}</did></C2D_HB>`);const r=J(e,t);if(this.emit("debug","udp_hb_send",{tid:e,xml:t,host:this.remote.host,port:this.remote.port}),this.sock.send(r,this.remote.port,this.remote.host),"uid"===this.opts.mode){try{this.sock.send(r,2015,this.remote.host)}catch{}try{this.sock.send(r,2018,this.remote.host)}catch{}}}buildAckPayload(){if(0===this.packetsWant)return{packetId:4294967295,payload:Buffer.alloc(0)};let e=this.packetsWant;for(;this.received.has(e);)e++;let t=e-1;for(const e of this.received.keys())e>t&&(t=e);const A=e+200-1;if(t>A&&(t=A),t<e)return{packetId:e-1>>>0,payload:Buffer.alloc(0)};const r=t-e+1,s=Buffer.allocUnsafe(r);for(let t=0;t<r;t++)s[t]=this.received.has(e+t)?1:0;return{packetId:e-1>>>0,payload:s}}updateAckPacket(){if(null==this.cameraId)return;const{packetId:e,payload:t}=this.buildAckPayload();this.lastAckPacket=function(e){const t=e.payload??Buffer.alloc(0),A=Buffer.alloc(28);return A.writeUInt32LE(Y,0),A.writeInt32LE(0|e.connectionId,4),A.writeUInt32LE(0,8),A.writeUInt32LE(e.groupId>>>0,12),A.writeUInt32LE(e.packetId>>>0,16),A.writeUInt32LE((e.maybeLatency??0)>>>0,20),A.writeUInt32LE(t.length>>>0,24),Buffer.concat([A,t])}({connectionId:this.cameraId,groupId:4294967295===e&&0===t.length?4294967295:0,packetId:e,maybeLatency:this.ackLatency.getValue(),payload:t})}sendAckFast(){this.sock&&this.remote&&0!==this.lastAckPacket.length&&(this.sock.send(this.lastAckPacket,this.remote.port,this.remote.host),this.ackSentCount++,this.ackSentCount%100==0&&this.emit("debug","ack_sent_100",{latency:this.ackLatency.getValue()}))}scheduleAck(e="data"){if("manual"===e){if(this.ackScheduled)return;this.ackScheduled=!0,setImmediate((()=>{this.ackScheduled=!1;try{this.sendAckFast()}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}})),this.emit("debug","ack_scheduled",{reason:e})}}resendOutstanding(){if(this.sock&&this.remote)for(const[,e]of this.sent)this.sock.send(e.buf,this.remote.port,this.remote.host)}handleAckFromCamera(e,t){if(4294967295!==e){for(const t of this.sent.keys())t<=e&&this.sent.delete(t);for(let A=0;A<t.length;A++){if((t[A]??0)>0){const t=e+1+A>>>0;this.sent.delete(t)}}}this.ackLatency.feed()}scheduleDrain(){this.drainScheduled||(this.drainScheduled=!0,setImmediate((()=>{this.drainScheduled=!1;try{for(;this.pendingDataOffset<this.pendingData.length;this.pendingDataOffset++)this.emit("data",this.pendingData[this.pendingDataOffset])}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}finally{this.pendingDataOffset>=this.pendingData.length&&(this.pendingData=[],this.pendingDataOffset=0)}})))}flushReceived(){for(;this.received.has(this.packetsWant);){const e=this.received.get(this.packetsWant);this.received.delete(this.packetsWant),this.packetsWant++,this.pendingData.push(e)}this.pendingData.length>this.pendingDataOffset&&this.scheduleDrain()}handlePacket(e,t,A){const r=e=>{this.remote&&this.remote.host===t&&this.remote.port===A||(this.remote={host:t,port:A},this.emit("debug","remote_update",{reason:e,host:t,port:A}))};this.remote||r("first_packet"),"ack"!==e.kind?"data"!==e.kind?"discovery"===e.kind&&this.emit("debug","discovery_rx_connected",{tid:e.tid,xml:e.xml}):null!=this.clientId&&e.connectionId===this.clientId&&(r("data"),e.packetId>=this.packetsWant&&(this.received.set(e.packetId,e.payload),this.flushReceived(),this.updateAckPacket(),this.packetsWant%100==0&&this.emit("debug","udp_progress",{packetsWant:this.packetsWant}))):null!=this.clientId&&e.connectionId===this.clientId&&(r("ack"),this.handleAckFromCamera(e.packetId,e.payload))}write(e){if(!this.sock||!this.remote||null==this.cameraId)throw new Error("BCUDP stream is not connected");const t=this.mtu-20;for(let A=0;A<e.length;A+=t){const r=e.subarray(A,Math.min(e.length,A+t)),s=this.sendPacketId>>>0;this.sendPacketId=this.sendPacketId+1>>>0;const n=W({connectionId:this.cameraId,packetId:s,payload:Buffer.from(r)});this.sent.set(s,{packetId:s,buf:n,ts:Date.now()}),this.sock.send(n,this.remote.port,this.remote.host)}}async close(){this.ackTimer&&clearInterval(this.ackTimer),this.resendTimer&&clearInterval(this.resendTimer),this.hbTimer&&clearInterval(this.hbTimer),this.ackTimer=void 0,this.resendTimer=void 0,this.hbTimer=void 0;const e=this.sock;this.sock=void 0,e&&await new Promise((t=>e.close((()=>t()))))}};function z(e){e.dumpEnabled&&a.mkdirSync(e.dumpDir,{recursive:!0})}function j(e,t,A,r){e.traceStream&&t.debug(`[${A}] ${r}`)}function $(e,t,A,r){e.traceTalk&&t.debug(`[${A}] ${r}`)}function K(e){return 10===e||11===e||201===e||202===e}var ee=class extends s.EventEmitter{opts;debugCfg;logger;tcpSocket;udpSocket;transport="tcp";parser=new b;pending=new Map;msgNum=0;loggedIn=!1;subscribed=!1;keepAliveTimer;enc={kind:"none"};nonce;videoSubscriptions=new Map;streamTraceStats=new Map;constructor(e){super(),this.opts=e,this.logger=e.logger??console,this.debugCfg=function(e){const t=!0===e?.enabled,A=!0===e?.debugRtsp,r=!0===e?.traceStream,s=!0===e?.traceTalk,n=!0===e?.debugH264||t,i=!0===e?.debugParamSets,o=!0===e?.dump?.enabled;return{enabled:t,debugRtsp:A,traceStream:r,traceTalk:s,debugH264:n,debugParamSets:i,dumpEnabled:o,dumpDir:e?.dump?.dir&&e.dump.dir.trim()||c.join(process.cwd(),"test","frames-debug"),dumpBcMedia:e?.dump?.bcmedia??o,dumpNals:e?.dump?.nals??o}}({...e.debug?{enabled:!0}:{},...e.debugOptions??{}})}logDebug(e,t){this.opts.debug&&(this.logger.debug(`[BaichuanClient] ${e}`,t),this.emit("debug",e,t))}getTransport(){return this.transport}getDebugConfig(){return this.debugCfg}get username(){return this.opts.username}startKeepAlive(){if(this.keepAliveTimer)return;let e=this.opts.keepAliveInterval;void 0===e&&(e="udp"===this.transport?2500:0),e<=0||(this.keepAliveTimer=setInterval((()=>{this.sendPing().catch((e=>{this.logDebug("keepalive_ping_error",e)}))}),e))}stopKeepAlive(){this.keepAliveTimer&&(clearInterval(this.keepAliveTimer),this.keepAliveTimer=void 0)}async sendPing(){if(this.tcpSocket||this.udpSocket)try{await this.sendFrame({cmdId:93,channel:this.opts.channel??0,channelIdOverride:0,messageClass:I,streamType:0,extensionXml:""})}catch(e){this.logDebug("keepalive_ping_failed",e)}}async connect(){const e=this.opts.transport??"tcp";if("tcp"!==e)if("udp"!==e)try{await Promise.race([this.connectTcp(),new Promise(((e,t)=>setTimeout((()=>t(new Error("TCP connection timeout (falling back to UDP)"))),4e3)))])}catch(e){this.logDebug("auto:tcp_failed",e),await this.connectUdp()}else await this.connectUdp();else await this.connectTcp()}async connectTcp(){if(this.tcpSocket&&!this.tcpSocket.destroyed)return void(this.transport="tcp");const e=this.opts.port??9e3,t=n.createConnection({host:this.opts.host,port:e});this.tcpSocket=t,this.transport="tcp",t.on("data",(e=>{const t=this.parser.push(e);for(const e of t)this.handleFrame(e)})),t.on("close",(()=>{this.emit("close");for(const[,e]of this.pending)e.reject(new Error("Baichuan socket closed"));this.pending.clear()})),t.on("error",(e=>this.emit("error",e))),await new Promise(((e,A)=>{t.once("connect",(()=>e())),t.once("error",(e=>A(e)))})),this.startKeepAlive()}async connectUdp(){if(this.udpSocket)return void(this.transport="udp");const e=this.opts.udp;if(!e)throw new Error("Baichuan UDP requested but `options.udp` is not set (required for BCUDP, typical for battery cameras).");const t=new Z(e);this.udpSocket=t,this.transport="udp",t.on("data",(e=>{const t=this.parser.push(e);for(const e of t)this.handleFrame(e)})),t.on("close",(()=>{this.emit("close");for(const[,e]of this.pending)e.reject(new Error("Baichuan UDP stream closed"));this.pending.clear()})),t.on("error",(e=>this.emit("error",e))),t.on("debug",((e,t)=>{this.logDebug(`udp_${e}`,t)})),await t.connect(),this.startKeepAlive()}async close(){this.stopKeepAlive();const e=this.tcpSocket;this.tcpSocket=void 0,e&&await new Promise((t=>{e.once("close",(()=>t())),e.destroy()}));const t=this.udpSocket;this.udpSocket=void 0,t&&await t.close()}handleFrame(e){if("udp"===this.transport&&234===e.header.cmdId&&200!==e.header.responseCode){try{const t=S({cmdId:e.header.cmdId,bodyLen:0,channelId:e.header.channelId,streamType:e.header.streamType,msgNum:e.header.msgNum,responseCode:200,messageClass:e.header.messageClass,payloadOffset:0});this.logDebug("udp_keepalive_rx",{msgNum:e.header.msgNum,channelId:e.header.channelId,streamType:e.header.streamType}),this.writeWire(t),this.logDebug("udp_keepalive_tx",{msgNum:e.header.msgNum,channelId:e.header.channelId,streamType:e.header.streamType})}catch(e){this.logDebug("udp_keepalive_error",e)}return}this.debugCfg.traceTalk&&K(e.header.cmdId)&&$(this.debugCfg,this.logger,"BaichuanTalk",`rx cmdId=${e.header.cmdId} msgNum=${e.header.msgNum} responseCode=${e.header.responseCode} channelId=${e.header.channelId} bodyLen=${e.body.length} payloadLen=${e.payload.length} payloadOffset=${e.header.payloadOffset??0}`),this.emit("frame",e);const t=`${e.header.cmdId}:${e.header.msgNum}`,A=this.pending.get(t);if(A)return this.pending.delete(t),void A.resolve(e);const r=this.videoSubscriptions.get(e.header.cmdId);if(r&&r.size>0){if(r.has(e.header.msgNum)){if(this.debugCfg.traceStream&&3===e.header.cmdId){const t=Date.now(),A=e.header.msgNum,r=this.streamTraceStats.get(A)??{lastLogMs:t,frames:0};r.frames++,t-r.lastLogMs>=500&&(j(this.debugCfg,this.logger,"BaichuanTrace",`rx stream frames cmdId=3 msgNum=${e.header.msgNum} frames=${r.frames} lastChannelId=${e.header.channelId} lastBodyLen=${e.body.length} lastPayloadLen=${e.payload.length} lastPayloadOffset=${e.header.payloadOffset??0}`),r.lastLogMs=t,r.frames=0),this.streamTraceStats.set(A,r)}this.emit("push",e)}}else if(this.emit("push",e),33===e.header.cmdId)try{const t=this.parseEvents(e);for(const e of t)this.emit("event",e)}catch(e){this.logDebug("event_parse_error",e)}}subscribeVideoStream(e,t){this.videoSubscriptions.has(e)||this.videoSubscriptions.set(e,new Set),this.videoSubscriptions.get(e).add(t),3!==e||this.streamTraceStats.has(t)||this.streamTraceStats.set(t,{lastLogMs:Date.now(),frames:0})}unsubscribeVideoStream(e,t){const A=this.videoSubscriptions.get(e);A&&(void 0!==t?(A.delete(t),0===A.size&&this.videoSubscriptions.delete(e),3===e&&this.streamTraceStats.delete(t)):(this.videoSubscriptions.delete(e),3===e&&this.streamTraceStats.clear()))}parseEvents(e){const t=e.body;if(0===t.length)return[];const A=this.tryDecryptXml(t,e.header.channelId,this.enc);if(!A||!A.startsWith("<?xml"))return[];const r=e.header.channelId,s=250===r?0:Math.max(0,r-1),n=Date.now();if(A.includes("<AlarmEventList")){const e=[],t=A.matchAll(/<AlarmEvent\b[^>]*>([\s\S]*?)<\/AlarmEvent>/g);for(const A of t){const t=A[1]??"",r=F(t,"channelId"),i=void 0!==r?Number(r):s,o=(F(t,"status")??"").trim().toUpperCase(),a=(F(t,"AItype")??F(t,"aiType")??F(t,"aitype")??"").trim();if(o.includes("MD"))e.push({channel:i,type:"motion",motion:{channel:i,state:!0,timestamp:n,source:"md"},timestamp:n});else if(o.includes("PIR"))e.push({channel:i,type:"motion",motion:{channel:i,state:!0,timestamp:n,source:"pir"},timestamp:n});else if(a){const t={people:"people",vehicle:"vehicle",dog_cat:"dog_cat",face:"face",package:"package"};e.push({channel:i,type:"ai",ai:{channel:i,type:t[a.toLowerCase()]??"other",detected:!0,timestamp:n},timestamp:n})}else o.includes("AI")?e.push({channel:i,type:"ai",ai:{channel:i,type:"other",detected:!0,timestamp:n},timestamp:n}):o.includes("VIS")?e.push({channel:i,type:"visitor",timestamp:n}):o.includes("DN")&&e.push({channel:i,type:"daynight",timestamp:n})}return e}const i=A.match(/<Event\b[^>]*>([\s\S]*?)<\/Event>/);if(!i)return[];const o=i[1]??"",a=(F(o,"status")??"").trim(),c=(F(o,"AItype")??"").trim();if(a.toUpperCase().includes("MD"))return[{channel:s,type:"motion",motion:{channel:s,state:!0,timestamp:n,source:"md"},timestamp:n}];if(a.toUpperCase().includes("PIR"))return[{channel:s,type:"motion",motion:{channel:s,state:!0,timestamp:n,source:"pir"},timestamp:n}];if(c){return[{channel:s,type:"ai",ai:{channel:s,type:{people:"people",vehicle:"vehicle",dog_cat:"dog_cat",face:"face",package:"package"}[c.toLowerCase()]??"other",detected:!0,timestamp:n},timestamp:n}]}return[]}nextMsgNum(){return this.msgNum=this.msgNum+1&65535,this.msgNum}peekNextMsgNum(){return this.msgNum+1&65535}requireSocket(){if("tcp"!==this.transport)throw new Error("Internal: requireSocket called while not using TCP");if(!this.tcpSocket||this.tcpSocket.destroyed)throw new Error("Baichuan TCP socket is not connected");return this.tcpSocket}writeWire(e){if("tcp"!==this.transport){if(!this.udpSocket)throw new Error("Baichuan UDP stream is not connected");this.udpSocket.write(e)}else this.requireSocket().write(e)}encodeBodyXml(e,t,A,r){const s=Buffer.from(e,"utf8"),n=Buffer.from(t,"utf8");return"none"===r.kind?Buffer.concat([s,n]):"bc"===r.kind?Buffer.concat([f(s,A),f(n,A)]):"aes"===r.kind||"full_aes"===r.kind?Buffer.concat([y(s,r.key),y(n,r.key)]):Buffer.concat([s,n])}encodeBodyBinary(e,t,A,r){const s=Buffer.from(e,"utf8");return"none"===r.kind?Buffer.concat([s,t]):"bc"===r.kind?Buffer.concat([f(s,A),t]):"aes"===r.kind||"full_aes"===r.kind?Buffer.concat([y(s,r.key),t]):Buffer.concat([s,t])}async sendBinaryPayloadNoReply(e){await this.connect();const t=e.channel??this.opts.channel??0,A=e.channelIdOverride??(null==e.channel?250:t+1),r=this.nextMsgNum(),s=e.cmdId,n=e.extensionXml??k(t),i=Buffer.byteLength(n,"utf8"),o=i+e.payload.length,a=e.messageClass??I,c=S({cmdId:s,bodyLen:o,channelId:A,streamType:e.streamType??0,msgNum:r,responseCode:0,messageClass:a,payloadOffset:i}),g=e.encryption??this.enc,l=this.encodeBodyBinary(n,e.payload,A,g),h=Buffer.concat([c,l]);this.logDebug("tx",{cmdId:s,msgNum:r,channelId:A,messageClass:a,bodyLen:o,binaryPayload:!0}),this.debugCfg.traceTalk&&K(s)&&$(this.debugCfg,this.logger,"BaichuanTalk",`tx cmdId=${s} msgNum=${r} channelId=${A} streamType=${e.streamType??0} class=0x${a.toString(16)} bodyLen=${o} payloadOffset=${i} binaryPayloadLen=${e.payload.length}`),this.writeWire(h)}tryDecryptXml(e,t,A){const r=e=>e.toString("utf8"),s=A=>{let s;try{s="none"===A.kind?e:"bc"===A.kind?m(e,t):D(e,A.key)}catch{return}const n=r(s);return n.startsWith("<?xml")?n:void 0};return s(A)??("bc"!==A.kind?s({kind:"bc"}):void 0)??s({kind:"none"})??r(e)}async sendXml(e){await this.connect();const t=e.channel??this.opts.channel??0,A=e.channelIdOverride??(null==e.channel?250:t+1),r=this.nextMsgNum(),s=e.cmdId,n=e.extensionXml??(null!=e.channel?N(t):""),i=e.payloadXml??"",o=e.messageClass??I,a=Buffer.byteLength(n,"utf8"),c=a+Buffer.byteLength(i,"utf8"),g=S({cmdId:s,bodyLen:c,channelId:A,streamType:e.streamType??0,msgNum:r,responseCode:0,messageClass:o,payloadOffset:a}),l=`${s}:${r}`,h=e.encryption??this.enc,d=this.encodeBodyXml(n,i,A,h),u=Buffer.concat([g,d]),E=e.timeoutMs??1e4,Q=new Promise(((e,t)=>{const A=setTimeout((()=>{this.pending.delete(l),t(new Error(`Baichuan timeout cmdId=${s} msgNum=${r}`))}),E);this.pending.set(l,{resolve:t=>{clearTimeout(A),e(t)},reject:e=>{clearTimeout(A),t(e)}})}));this.logDebug("tx",{cmdId:s,msgNum:r,channelId:A,messageClass:o,bodyLen:c}),!this.debugCfg.traceStream||3!==s&&4!==s||j(this.debugCfg,this.logger,"BaichuanTrace",`tx cmdId=${s} msgNum=${r} channelId=${A} streamType=${e.streamType??0} class=0x${o.toString(16)} bodyLen=${c} payloadOffset=${a}`),this.debugCfg.traceTalk&&K(s)&&$(this.debugCfg,this.logger,"BaichuanTalk",`tx cmdId=${s} msgNum=${r} channelId=${A} streamType=${e.streamType??0} class=0x${o.toString(16)} bodyLen=${c} payloadOffset=${a}`),this.writeWire(u);const B=await Q;if(this.logDebug("rx",{cmdId:B.header.cmdId,responseCode:B.header.responseCode,msgNum:B.header.msgNum}),!this.debugCfg.traceStream||3!==s&&4!==s||j(this.debugCfg,this.logger,"BaichuanTrace",`rx cmdId=${B.header.cmdId} msgNum=${B.header.msgNum} responseCode=${B.header.responseCode} channelId=${B.header.channelId} bodyLen=${B.body.length} payloadLen=${B.payload.length} payloadOffset=${B.header.payloadOffset??0}`),this.debugCfg.traceTalk&&K(s)&&$(this.debugCfg,this.logger,"BaichuanTalk",`rx cmdId=${B.header.cmdId} msgNum=${B.header.msgNum} responseCode=${B.header.responseCode} channelId=${B.header.channelId} bodyLen=${B.body.length} payloadLen=${B.payload.length} payloadOffset=${B.header.payloadOffset??0}`),400===B.header.responseCode){if(0===B.body.length)throw new Error("Baichuan authentication failed (responseCode 400, empty body) - check username/password")}const C=B.body;if(0===C.length)return"";return this.tryDecryptXml(C,B.header.channelId,h)}async sendFrame(e){await this.connect();const t=e.channel??this.opts.channel??0,A=e.channelIdOverride??(null==e.channel?250:t+1),r=e.msgNumOverride??this.nextMsgNum(),s=e.cmdId,n=e.extensionXml??(null!=e.channel?N(t):""),i=e.payloadXml??"",o=e.messageClass??I,a=Buffer.byteLength(n,"utf8"),c=a+Buffer.byteLength(i,"utf8"),g=S({cmdId:s,bodyLen:c,channelId:A,streamType:e.streamType??0,msgNum:r,responseCode:0,messageClass:o,payloadOffset:a}),l=`${s}:${r}`,h=e.encryption??this.enc,d=this.encodeBodyXml(n,i,A,h),u=Buffer.concat([g,d]),E=e.timeoutMs??1e4,Q=new Promise(((e,t)=>{const A=setTimeout((()=>{this.pending.delete(l),t(new Error(`Baichuan timeout cmdId=${s} msgNum=${r}`))}),E);this.pending.set(l,{resolve:t=>{clearTimeout(A),e(t)},reject:e=>{clearTimeout(A),t(e)}})}));this.logDebug("tx",{cmdId:s,msgNum:r,channelId:A,messageClass:o,bodyLen:c}),!this.debugCfg.traceStream||3!==s&&4!==s||j(this.debugCfg,this.logger,"BaichuanTrace",`tx cmdId=${s} msgNum=${r} channelId=${A} streamType=${e.streamType??0} class=0x${o.toString(16)} bodyLen=${c} payloadOffset=${a}`),this.debugCfg.traceTalk&&K(s)&&$(this.debugCfg,this.logger,"BaichuanTalk",`tx cmdId=${s} msgNum=${r} channelId=${A} streamType=${e.streamType??0} class=0x${o.toString(16)} bodyLen=${c} payloadOffset=${a}`),this.writeWire(u);const B=await Q;return this.logDebug("rx",{cmdId:B.header.cmdId,responseCode:B.header.responseCode,msgNum:B.header.msgNum}),!this.debugCfg.traceStream||3!==s&&4!==s||j(this.debugCfg,this.logger,"BaichuanTrace",`rx cmdId=${B.header.cmdId} msgNum=${B.header.msgNum} responseCode=${B.header.responseCode} channelId=${B.header.channelId} bodyLen=${B.body.length} payloadLen=${B.payload.length} payloadOffset=${B.header.payloadOffset??0}`),this.debugCfg.traceTalk&&K(s)&&$(this.debugCfg,this.logger,"BaichuanTalk",`rx cmdId=${B.header.cmdId} msgNum=${B.header.msgNum} responseCode=${B.header.responseCode} channelId=${B.header.channelId} bodyLen=${B.body.length} payloadLen=${B.payload.length} payloadOffset=${B.header.payloadOffset??0}`),B}async sendBinary(e){if(109===e.cmdId)return await this.sendBinarySnapshot109(e);await this.connect();const t=e.channel??this.opts.channel??0,A=e.channelIdOverride??(null==e.channel?250:t+1),r=this.nextMsgNum(),s=e.cmdId,n=e.extensionXml??(null!=e.channel?k(t):k(void 0)),i=e.payloadXml??"",o=e.messageClass??I,a=Buffer.byteLength(n,"utf8"),c=a+Buffer.byteLength(i,"utf8"),g=S({cmdId:s,bodyLen:c,channelId:A,streamType:0,msgNum:r,responseCode:0,messageClass:o,payloadOffset:a}),l=`${s}:${r}`,h=e.encryption??this.enc,d=this.encodeBodyXml(n,i,A,h),u=Buffer.concat([g,d]),E=e.timeoutMs??1e4,Q=new Promise(((e,t)=>{const A=setTimeout((()=>{this.pending.delete(l),t(new Error(`Baichuan timeout cmdId=${s} msgNum=${r}`))}),E);this.pending.set(l,{resolve:t=>{clearTimeout(A),e(t)},reject:e=>{clearTimeout(A),t(e)}})}));this.logDebug("tx",{cmdId:s,msgNum:r,channelId:A,messageClass:o,bodyLen:c,binary:!0}),this.writeWire(u);const B=await Q;if(this.logDebug("rx",{cmdId:B.header.cmdId,responseCode:B.header.responseCode,msgNum:B.header.msgNum,binary:!0}),400===B.header.responseCode){if(0===B.body.length)throw new Error("Baichuan binary request failed (responseCode 400, empty body)")}const C=B.payload;if(0===C.length)return Buffer.alloc(0);return this.tryDecryptBinary(C,B.header.channelId,h)}async sendBinarySnapshot109(e){await this.connect();const t=e.channel??this.opts.channel??0,A=e.channelIdOverride??(null==e.channel?250:t+1),r=this.nextMsgNum(),s=e.cmdId,n=e.extensionXml??(null!=e.channel?N(t):""),i=e.payloadXml??"",o=e.messageClass??I,a=Buffer.byteLength(n,"utf8"),c=a+Buffer.byteLength(i,"utf8"),g=S({cmdId:s,bodyLen:c,channelId:A,streamType:e.streamType??0,msgNum:r,responseCode:0,messageClass:o,payloadOffset:a}),l=e.encryption??this.enc,h=this.encodeBodyXml(n,i,A,l),d=Buffer.concat([g,h]),u=e.timeoutMs??15e3,E=[];let Q=!1;return await new Promise(((e,t)=>{let n,i=!1;const a=()=>{this.off("frame",I),n&&clearTimeout(n)},g=t=>{i||(i=!0,a(),e(t))},h=e=>{i||(i=!0,a(),t(e instanceof Error?e:new Error(String(e))))},I=e=>{if(e.header.cmdId===s)if(e.header.msgNum===r&&e.header.responseCode>=400)h(new Error(`Baichuan snapshot request rejected (cmdId=${s} msgNum=${r} responseCode=${e.header.responseCode})`));else try{let t=!1;if(e.extension.length>0){this.tryDecryptXml(e.extension,e.header.channelId,l).includes("<binaryData>1</binaryData>")&&(t=!0)}const A=this.tryDecryptBinary(e.payload,e.header.channelId,l);if(0===A.length)return;const r=A.subarray(0,Math.min(16,A.length)).toString("utf8"),s=r.startsWith("<?xml")||r.trimStart().startsWith("<");if(!t&&s)return;let n=A;if(!Q){const r=(e=>{for(let t=0;t+1<e.length;t++)if(255===e[t]&&216===e[t+1])return t;return-1})(A);if(-1===r){if(!t)return;n=A,E.push(n);const r=Buffer.concat(E);return void(201===e.header.responseCode&&g(r))}Q=!0,n=A.subarray(r)}E.push(n);const i=Buffer.concat(E);if((e=>{for(let t=0;t+1<e.length;t++)if(255===e[t]&&217===e[t+1])return!0;return!1})(i)||201===e.header.responseCode){const e=i.indexOf(Buffer.from([255,217]));if(-1!==e)return void g(i.subarray(0,e+2));g(i)}}catch(e){h(e)}};n=setTimeout((()=>{h(new Error(`Baichuan timeout waiting snapshot push cmdId=${s} msgNum=${r}`))}),u),this.on("frame",I);try{this.logDebug("tx",{cmdId:s,msgNum:r,channelId:A,messageClass:o,bodyLen:c,binary:!0,snapshot:!0}),this.writeWire(d)}catch(e){h(e)}}))}tryDecryptBinary(e,t,A){if(0===e.length)return e;const r=A=>{try{return"none"===A.kind?e:"bc"===A.kind?m(e,t):"aes"===A.kind||"full_aes"===A.kind?D(e,A.key):null}catch{return null}};return r(A)??("bc"===A.kind||"none"===this.enc.kind||"aes"!==this.enc.kind&&"full_aes"!==this.enc.kind?null:r(this.enc))??("bc"!==A.kind?r({kind:"bc"}):null)??r({kind:"none"})??e}async login(e="full_aes"){if(this.loggedIn)return;let t;const A=e=>new Promise((t=>setTimeout(t,e)));for(let s=1;s<=3;s++)try{const t="none"===e?56320:"bc"===e?56321:56338;await this.connect();const A=this.nextMsgNum(),s=1,n=S({cmdId:s,bodyLen:0,channelId:250,streamType:0,msgNum:A,responseCode:t,messageClass:25876}),i=`${s}:${A}`,o=new Promise(((e,t)=>{const A=setTimeout((()=>{this.pending.delete(i),t(new Error("Baichuan timeout waiting for nonce"))}),1e4);this.pending.set(i,{resolve:t=>{clearTimeout(A),e(t)},reject:e=>{clearTimeout(A),t(e)}})}));this.writeWire(n);const a=await o,c=a.header.responseCode;if(c>>>8!=221)throw new Error(`Baichuan login: expected encryption info (0xDDxx), got 0x${c.toString(16)}`);const g=255&c,l=F(this.tryDecryptXml(a.body,a.header.channelId,0===g?{kind:"none"}:{kind:"bc"}),"nonce");if(!l)throw new Error("Baichuan login: nonce not found in XML");if(this.nonce=l,0===g)this.enc={kind:"none"};else if(1===g)this.enc={kind:"bc"};else if(2===g)this.enc={kind:"aes",key:p(l,this.opts.password)};else{if(18!==g)throw new Error(`Baichuan login: unknown encType=0x${g.toString(16)}`);this.enc={kind:"full_aes",key:p(l,this.opts.password)}}const h=C(`${this.opts.username}${l}`),d=C(`${this.opts.password}${l}`),u=(r=d,`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<LoginUser version="1.1">\n<userName>${R(h)}</userName>\n<password>${R(r)}</password>\n<userVer>1</userVer>\n</LoginUser>\n<LoginNet version="1.1">\n<type>LAN</type>\n<udpPort>0</udpPort>\n</LoginNet>\n</body>`);this.logDebug("login_hash",{username:this.opts.username,nonce:l,userHash:h,passHashLength:d.length,loginXmlLength:u.length,loginXmlPreview:u.substring(0,200)});const E=await this.sendFrame({cmdId:1,payloadXml:u,extensionXml:"",messageClass:I,encryption:{kind:"bc"},timeoutMs:1e4}),Q=this.tryDecryptXml(E.body,E.header.channelId,{kind:"bc"});if(this.logDebug("login_reply",{replyLength:Q.length,replyPreview:Q.substring(0,200),startsWithXml:Q.startsWith("<?xml")}),0===Q.length)throw new Error("Baichuan login failed: empty reply (camera may be sleeping/waking, session may be stale, or username/password may be invalid)");if(!Q.startsWith("<?xml")){const e=Q.length>0?Q.substring(0,100):"(empty)";throw new Error(`Baichuan login: unexpected non-XML reply (length: ${Q.length}, preview: ${e})`)}return void(this.loggedIn=!0)}catch(e){t=e,this.loggedIn=!1;try{await this.close()}catch{}if(s<3){await A(1500);continue}throw e}var r;throw t instanceof Error?t:new Error(String(t))}};function te(e){if(e.length<4)return null;const t=e.readUInt32LE(0);return 825241649===t?function(e){if(e.length<32)return null;const t=e.readUInt32LE(4);if(32!==t)return null;const A={type:"InfoV1",videoWidth:e.readUInt32LE(8),videoHeight:e.readUInt32LE(12),fps:e.readUInt8(17),startYear:e.readUInt8(18),startMonth:e.readUInt8(19),startDay:e.readUInt8(20),startHour:e.readUInt8(21),startMin:e.readUInt8(22),startSeconds:e.readUInt8(23),endYear:e.readUInt8(24),endMonth:e.readUInt8(25),endDay:e.readUInt8(26),endHour:e.readUInt8(27),endMin:e.readUInt8(28),endSeconds:e.readUInt8(29)};return{media:A,consumed:32}}(e):842018865===t?function(e){if(e.length<32)return null;const t=e.readUInt32LE(4);if(32!==t)return null;const A={type:"InfoV2",videoWidth:e.readUInt32LE(8),videoHeight:e.readUInt32LE(12),fps:e.readUInt8(17),startYear:e.readUInt8(18),startMonth:e.readUInt8(19),startDay:e.readUInt8(20),startHour:e.readUInt8(21),startMin:e.readUInt8(22),startSeconds:e.readUInt8(23),endYear:e.readUInt8(24),endMonth:e.readUInt8(25),endDay:e.readUInt8(26),endHour:e.readUInt8(27),endMin:e.readUInt8(28),endSeconds:e.readUInt8(29)};return{media:A,consumed:32}}(e):t>=1667510320&&t<=1667510329?function(e){if(e.length<20)return null;const t=e.toString("utf8",4,8);if("H264"!==t&&"H265"!==t)return null;const A=t,r=e.readUInt32LE(8),s=e.readUInt32LE(12),n=e.readUInt32LE(16);let i=20;const o=e.readUInt32LE(i);let a;if(i+=4,e.length<i+s)return null;const c=e.subarray(i,i+s);s>=4&&(a=c.readUInt32LE(0));if(i+=s,e.length<i+r)return null;const g=e.subarray(i,i+r);i+=r;const l=r%8==0?0:8-r%8;if(e.length<i+l)return null;i+=l;return{media:{type:"Iframe",videoType:A,microseconds:n,...void 0!==a?{time:a}:{},additionalHeader:c,additionalHeaderSize:s,unknown:o,data:g},consumed:i}}(e):t>=1667510576&&t<=1667510585?function(e){if(e.length<20)return null;const t=e.toString("utf8",4,8);if("H264"!==t&&"H265"!==t)return null;const A=t,r=e.readUInt32LE(8),s=e.readUInt32LE(12),n=e.readUInt32LE(16);let i=20;const o=e.readUInt32LE(i);if(i+=4,e.length<i+s)return null;const a=e.subarray(i,i+s);if(i+=s,e.length<i+r)return null;const c=e.subarray(i,i+r);i+=r;const g=r%8==0?0:8-r%8;if(e.length<i+g)return null;i+=g;return{media:{type:"Pframe",videoType:A,microseconds:n,additionalHeader:a,additionalHeaderSize:s,unknown:o,data:c},consumed:i}}(e):1651979568===t?function(e){if(e.length<12)return null;const t=e.readUInt16LE(4),A=e.readUInt16LE(6);if(t!==A)return null;const r=8,s=r+t+(t%8==0?0:8-t%8);if(e.length<s)return null;const n=e.subarray(r,r+t);return{media:{type:"Aac",data:n},consumed:s}}(e):1651978544===t?function(e){if(e.length<12)return null;const t=e.readUInt16LE(4),A=e.readUInt16LE(6);if(t!==A)return null;const r=e.readUInt16LE(8);if(256!==r)return null;e.readUInt16LE(10);const s=4;if(t<s)return null;const n=t-s,i=12,o=i+n+(t%8==0?0:8-t%8);if(e.length<o)return null;const a=e.subarray(i,i+n);return{media:{type:"Adpcm",data:a},consumed:o}}(e):null}var Ae=class{buffer=Buffer.alloc(0);strict;amountSkipped=0;logger;constructor(e=!1,t){this.strict=e,this.logger=t}decode(e){this.buffer=0===this.buffer.length?e:Buffer.concat([this.buffer,e]);const t=[];for(;this.buffer.length>=4;){const e=te(this.buffer);if(!e){const e=this.buffer.readUInt32LE(0);if(825241649===e||842018865===e||e>=1667510320&&e<=1667510329||e>=1667510576&&e<=1667510585||1651979568===e||1651978544===e)break;if(this.strict)throw new Error(`[BcMediaCodec] Invalid data in stream (no valid magic at buffer start, len=${this.buffer.length})`);0===this.amountSkipped&&this.logger?.warn("[BcMediaCodec] Error in stream, attempting to recover..."),this.amountSkipped+=this.buffer.length,this.buffer=Buffer.alloc(0);break}this.amountSkipped>0&&(this.strict,this.logger?.warn(`[BcMediaCodec] Recovered stream after skipping ${this.amountSkipped} bytes`),this.amountSkipped=0),t.push(e.media),this.buffer=this.buffer.subarray(e.consumed)}return t}getRemainingBuffer(){return this.buffer}clear(){this.buffer=Buffer.alloc(0),this.amountSkipped=0}},re=Buffer.from([0,0,0,1]),se=Buffer.from([0,0,1]);function ne(e){return!(e.length<4)&&(!!e.subarray(0,4).equals(re)||!!e.subarray(0,3).equals(se))}function ie(e,t){const A=[];let r=0,s=0;for(;r<e.length;){if(r+4>e.length)return null;const n=t(e,r);if(r+=4,n<=0)return null;if(n>e.length-r)return null;A.push(re),A.push(e.subarray(r,r+n)),r+=n,s++}return 0===s?null:Buffer.concat(A)}function oe(e,t){const A=[];let r=0,s=0;for(;r<e.length;){if(r+2>e.length)return null;const n=t(e,r);if(r+=2,n<=0)return null;if(n>e.length-r)return null;A.push(re),A.push(e.subarray(r,r+n)),r+=n,s++}return 0===s?null:Buffer.concat(A)}function ae(e,t){const A=[];let r=0,s=0;const n=(e,A)=>{if(A+3>e.length)return 0;const r=e[A],s=e[A+1],n=e[A+2];return"be"===t?(r<<16|s<<8|n)>>>0:(n<<16|s<<8|r)>>>0};for(;r<e.length;){if(r+3>e.length)return null;const t=n(e,r);if(r+=3,t<=0)return null;if(t>e.length-r)return null;A.push(re),A.push(e.subarray(r,r+t)),r+=t,s++}return 0===s?null:Buffer.concat(A)}function ce(e){if(ne(e))return e;const t=Buffer.from([0,0,0,1]),A=Buffer.from([0,0,1]),r=Math.min(64,e.length),s=e.subarray(0,r).indexOf(t);if(s>0)return e.subarray(s);const n=e.subarray(0,r).indexOf(A);if(n>0)return e.subarray(n);const i=ie(e,((e,t)=>e.readUInt32BE(t)));if(i)return i;const o=ie(e,((e,t)=>e.readUInt32LE(t)));if(o)return o;const a=ae(e,"be");if(a)return a;const c=ae(e,"le");if(c)return c;const g=oe(e,((e,t)=>e.readUInt16BE(t)));if(g)return g;const l=oe(e,((e,t)=>e.readUInt16LE(t)));if(l)return l;const h=function(e){if(e.length<1)return null;const t=31&e[0],A=[],r=e=>{0!==e.length&&A.push(re,e)};if(24===t){let t=1;for(;t+2<=e.length;){const A=e.readUInt16BE(t);if(t+=2,A<=0||t+A>e.length)return null;r(e.subarray(t,t+A)),t+=A}return A.length?Buffer.concat(A):null}if(25===t){let t=3;if(t>e.length)return null;for(;t+2<=e.length;){const A=e.readUInt16BE(t);if(t+=2,A<=0||t+A>e.length)return null;r(e.subarray(t,t+A)),t+=A}return A.length?Buffer.concat(A):null}if(26===t){let t=3;if(t>e.length)return null;for(;t+2<=e.length;){const A=e.readUInt16BE(t);if(t+=2,t+1+2>e.length)return null;if(t+=1,t+=2,A<=0||t+A>e.length)return null;r(e.subarray(t,t+A)),t+=A}return A.length?Buffer.concat(A):null}if(27===t){let t=3;if(t>e.length)return null;for(;t+2<=e.length;){const A=e.readUInt16BE(t);if(t+=2,t+1+3>e.length)return null;if(t+=1,t+=3,A<=0||t+A>e.length)return null;r(e.subarray(t,t+A)),t+=A}return A.length?Buffer.concat(A):null}return null}(e);return h||(function(e){if(e.length<1)return!1;const t=e[0];if(void 0===t)return!1;if(128&t)return!1;const A=31&t;return A>=1&&A<=23}(e)?Buffer.concat([re,e]):e)}function ge(e){const t=[];for(let A=0;A<e.length-3;A++)0===e[A]&&0===e[A+1]&&(1===e[A+2]?(t.push({idx:A,len:3}),A+=2):0===e[A+2]&&1===e[A+3]&&(t.push({idx:A,len:4}),A+=3));if(0===t.length)return[];const A=[];for(let r=0;r<t.length;r++){const s=t[r],n=s.idx+s.len,i=t[r+1]?t[r+1].idx:e.length;i>n&&A.push(e.subarray(n,i))}return A}function le(e){if(!ne(e))return!1;const t=ge(e);if(0===t.length)return!1;for(const e of t){if(e.length<1)return!1;const t=e[0];if(void 0===t)return!1;if(128&t)return!1;const A=31&t;if(0===A||A>=24)return!1}return!0}function he(e){const t=ge(e);let A=!1,r=!1,s=!1;for(const e of t){const t=31&(e[0]??0);7===t&&(A=!0),8===t&&(r=!0),5===t&&(s=!0)}return s&&A&&r}var de=class e{fuNalHeader=null;fuParts=[];static parseRtpPayload(e){if(!e||e.length<12)return null;if(2!==(e[0]>>6&3))return null;const t=!!(32&e[0]),A=!!(16&e[0]);let r=12+4*(15&e[0]);if(r>e.length)return null;if(A){if(r+4>e.length)return null;if(r+=4+4*e.readUInt16BE(r+2),r>e.length)return null}let s=e.length;if(t){const t=e[e.length-1];if(t<=0||t>e.length)return null;if(s=e.length-t,s<r)return null}return s<=r?null:e.subarray(r,s)}reset(){this.fuNalHeader=null,this.fuParts=[]}push(t){if(0===t.length)return[];const A=e.parseRtpPayload(t);if(A&&(t=A),ne(t))return[t];const r=t[0];if(128&r)return[];const s=31&r;if(s>=1&&s<=23)return[Buffer.concat([re,t])];if(24===s){if(t.length<3)return[];let e=1;const A=[];for(;e+2<=t.length;){const r=t.readUInt16BE(e);if(e+=2,r<=0||e+r>t.length)return[];const s=t.subarray(e,e+r);if(e+=r,s.length<1)return[];if(128&s[0])return[];const n=31&s[0];if(0===n||n>=24)return[];A.push(Buffer.concat([re,s]))}return A}if(28===s||29===s){if(t.length<2)return[];const e=t[0],A=t[1],r=!!(128&A),n=!!(64&A),i=224&e|31&A;let o=2;if(29===s){if(t.length<o+2)return[];o+=2}const a=t.subarray(o);if(r)this.fuNalHeader=i,this.fuParts=[a];else{if(null==this.fuNalHeader)return[];this.fuParts.push(a)}if(n&&null!=this.fuNalHeader){const e=Buffer.concat([Buffer.from([this.fuNalHeader]),...this.fuParts]);return this.reset(),[Buffer.concat([re,e])]}return[]}return[]}};var ue=Buffer.from([0,0,0,1]),Ee=Buffer.from([0,0,1]);function Ie(e){return!(e.length<4)&&(!!e.subarray(0,4).equals(ue)||!!e.subarray(0,3).equals(Ee))}function Qe(e,t){const A=[];let r=0,s=0;for(;r<e.length;){if(r+4>e.length)return null;const n=t(e,r);if(r+=4,n<=0)return null;if(n>e.length-r)return null;A.push(ue),A.push(e.subarray(r,r+n)),r+=n,s++}return 0===s?null:Buffer.concat(A)}function Be(e,t){const A=[];let r=0,s=0;for(;r<e.length;){if(r+2>e.length)return null;const n=t(e,r);if(r+=2,n<=0)return null;if(n>e.length-r)return null;A.push(ue),A.push(e.subarray(r,r+n)),r+=n,s++}return 0===s?null:Buffer.concat(A)}function Ce(e,t){const A=[];let r=0,s=0;const n=(e,A)=>{if(A+3>e.length)return 0;const r=e[A],s=e[A+1],n=e[A+2];return"be"===t?(r<<16|s<<8|n)>>>0:(n<<16|s<<8|r)>>>0};for(;r<e.length;){if(r+3>e.length)return null;const t=n(e,r);if(r+=3,t<=0)return null;if(t>e.length-r)return null;A.push(ue),A.push(e.subarray(r,r+t)),r+=t,s++}return 0===s?null:Buffer.concat(A)}function pe(e){if(Ie(e))return e;const t=Buffer.from([0,0,0,1]),A=Buffer.from([0,0,1]),r=Math.min(64,e.length),s=e.subarray(0,r).indexOf(t);if(s>0)return e.subarray(s);const n=e.subarray(0,r).indexOf(A);if(n>0)return e.subarray(n);const i=Qe(e,((e,t)=>e.readUInt32BE(t)));if(i)return i;const o=Qe(e,((e,t)=>e.readUInt32LE(t)));if(o)return o;const a=Ce(e,"be");if(a)return a;const c=Ce(e,"le");if(c)return c;const g=Be(e,((e,t)=>e.readUInt16BE(t)));if(g)return g;const l=Be(e,((e,t)=>e.readUInt16LE(t)));return l||(function(e){if(e.length<2)return!1;const t=e[0],A=e[1];return void 0!==t&&void 0!==A&&(!(128&t)&&(t>>1&63)<=40)}(e)?Buffer.concat([ue,e]):e)}var fe=class e{fuParts=null;reset(){this.fuParts=null}static parseRtpPayload(e){if(!e||e.length<12)return null;if(2!==(e[0]>>6&3))return null;const t=!!(32&e[0]),A=!!(16&e[0]);let r=12+4*(15&e[0]);if(r>e.length)return null;if(A){if(r+4>e.length)return null;if(r+=4+4*e.readUInt16BE(r+2),r>e.length)return null}let s=e.length;if(t){const t=e[e.length-1];if(t<=0||t>e.length)return null;if(s=e.length-t,s<r)return null}return s<=r?null:e.subarray(r,s)}push(t){if(!t||t.length<2)return[];const A=e.parseRtpPayload(t);A&&(t=A);const r=t[0],s=t[1];if(128&r)return[];const n=r>>1&63;if(48===n){let e=2;const A=[];for(;e+2<=t.length;){const r=t.readUInt16BE(e);if(e+=2,r<=0||e+r>t.length)return[];const s=t.subarray(e,e+r);e+=r,s.length&&A.push(ue,s)}return A.length?[Buffer.concat(A)]:[]}if(49===n){if(t.length<3)return[];const e=t[2],A=!!(128&e),n=!!(64&e),i=129&r|(63&(63&e))<<1,o=s,a=t.subarray(3);if(A)this.fuParts=[ue,Buffer.from([i,o]),a];else{if(!this.fuParts)return[];this.fuParts.push(a)}if(n){if(!this.fuParts)return[];const e=Buffer.concat(this.fuParts);return this.fuParts=null,[e]}return[]}return[Buffer.concat([ue,t])]}};function me(e){const t=[];for(let A=0;A<e.length-3;A++)0===e[A]&&0===e[A+1]&&(1===e[A+2]?(t.push({idx:A,len:3}),A+=2):0===e[A+2]&&1===e[A+3]&&(t.push({idx:A,len:4}),A+=3));if(0===t.length)return[];const A=[];for(let r=0;r<t.length;r++){const s=t[r],n=s.idx+s.len,i=t[r+1]?t[r+1].idx:e.length;i>n&&A.push(e.subarray(n,i))}return A}function ye(e){if(e.length<1)return null;const t=e[0];return void 0===t||128&t?null:t>>1&63}function De(e){return e>=16&&e<=23}function Se(e){if(!Ie(e))return!1;const t=me(e);if(0===t.length)return!1;for(const e of t){if(e.length<2)return!1;const t=e[0];if(void 0===t)return!1;if(128&t)return!1;const A=ye(e);if(null===A)return!1;if(A>40)return!1}return!0}function we(e){const t=me(e);let A=!1,r=!1,s=!1,n=!1;for(const e of t){const t=ye(e);null!==t&&(32===t&&(A=!0),33===t&&(r=!0),34===t&&(s=!0),De(t)&&(n=!0))}return n&&A&&r&&s}function be(e){const t=me(e);for(const e of t){if(32===ye(e))return e}return null}function Re(e){const t=me(e);for(const e of t){if(33===ye(e))return e}return null}function Ne(e){const t=me(e);for(const e of t){if(34===ye(e))return e}return null}var ke=Buffer.from([0,0,0,1]);var Fe=class{running=!1;queue=[];maxQueueSize;constructor(e){this.maxQueueSize=e}enqueue(e){this.queue.length>=this.maxQueueSize||(this.queue.push(e),this.pump())}pump(){this.running||(this.running=!0,this.run())}async run(){try{for(;this.queue.length>0;){const e=this.queue.shift();if(e)try{await e()}catch{}}}finally{this.running=!1}}};function Ue(e){const t=[];for(let A=0;A<e.length;A++)A>=2&&3===e[A]&&0===e[A-1]&&0===e[A-2]||t.push(e[A]);return Buffer.from(t)}var Me=class{b;bitPos=0;constructor(e){this.b=e}readBits(e){if(e<=0)return 0;let t=0;for(let A=0;A<e;A++){const e=this.bitPos>>3;if(e>=this.b.length)return null;const A=7-(7&this.bitPos);t=t<<1|this.b[e]>>A&1,this.bitPos++}return t>>>0}readUE(){let e=0;for(;;){const t=this.readBits(1);if(null==t)return null;if(0!==t)break;if(e++,e>31)return null}const t=e?this.readBits(e):0;return null==t?null:(1<<e)-1+t>>>0}};function Te(e){if(7!=(31&(e[0]??0)))return null;const t=Ue(e.subarray(1)),A=new Me(t);return null==A.readBits(8)||null==A.readBits(8)||null==A.readBits(8)?null:A.readUE()}function ve(e){if(8!=(31&(e[0]??0)))return null;const t=Ue(e.subarray(1)),A=new Me(t),r=A.readUE(),s=A.readUE();return null==r||null==s?null:{ppsId:r,spsId:s}}function Le(e){const t=31&(e[0]??0);if(1!==t&&5!==t)return null;const A=Ue(e.subarray(1)),r=new Me(A);return null==r.readUE()||null==r.readUE()?null:r.readUE()}var He=class e extends s.EventEmitter{client;api;channel;profile;logger;active=!1;videoFrameHandler;expectedStreamType;activeMsgNum;bcMediaCodec;debugH264LogsLeft;debugSavedSamples;warnedNonAnnexBOnce=!1;depacketizer=new de;depacketizerH265=new fe;dumpChunkIdx=0;dumpNalLines=0;dumpIo=new Fe(200);spsById=new Map;ppsById=new Map;lastSps=null;lastPps=null;lastPrependedPpsId=null;lastVps=null;lastSpsH265=null;lastPpsH265=null;lastPrependedParamSetsH265=!1;static scoreBcMediaLike(e){if(e.length<4)return{score:-1,first:-1};const t=Math.min(65536,e.length-4);let A=0,r=-1;for(let s=0;s<=t;s++){const t=e.readUInt32LE(s);if((825241649===t||842018865===t||t>=1667510320&&t<=1667510329||t>=1667510576&&t<=1667510585||1651979568===t||1651978544===t)&&(A++,r<0&&(r=s),A>32&&0===r))break}return{score:1e3*A-(r<0?5e4:r),first:r}}chooseDecryptedOrRawCandidate(t){const{raw:A,enc:r,channelId:s,allowResync:n}=t,i=e.scoreBcMediaLike(A),o="aes"===this.client.enc.kind||"full_aes"===this.client.enc.kind||"bc"===this.client.enc.kind?this.client.tryDecryptBinary(A,s,r):A,a=e.scoreBcMediaLike(o).score>i.score?o:A;if(!n)return a;const c=e.scoreBcMediaLike(a);return c.first>0?a.subarray(c.first):a}constructor(e){super(),this.client=e.client,this.api=e.api,this.channel=e.channel,this.profile=e.profile,this.logger=e.logger,this.expectedStreamType="sub"===this.profile?1:0,this.bcMediaCodec=new Ae(!1,this.logger);const t=this.client.getDebugConfig();this.debugH264LogsLeft=t.debugH264?200:0,this.debugSavedSamples=!1,this.dumpChunkIdx=0,this.spsById=new Map,this.ppsById=new Map,this.lastSps=null,this.lastPps=null,this.lastPrependedPpsId=null,this.lastVps=null,this.lastSpsH265=null,this.lastPpsH265=null,this.lastPrependedParamSetsH265=!1}async start(){if(this.active)throw new Error("Video stream already active");if(this.depacketizer.reset(),this.depacketizerH265.reset(),this.api)try{await this.api.startVideoStream(this.channel,this.profile);try{const e=this.api.getActiveVideoMsgNum;this.activeMsgNum="function"==typeof e?e(this.channel,this.profile):void 0}catch{this.activeMsgNum=void 0}}catch(e){const t=e instanceof Error?e:new Error(String(e));if("udp"===this.client.getTransport?.())throw t;this.emit("error",t)}let e=0,t=0;this.videoFrameHandler=A=>{if(3!==A.header.cmdId)return;if(A.header.streamType!==this.expectedStreamType)return;if(void 0!==this.activeMsgNum&&A.header.msgNum!==this.activeMsgNum)return;e++;const r=this.client.getDebugConfig(),s=r.debugRtsp||function(e,t){if(null==e)return t;const A=e.trim().toLowerCase();return"1"===A||"true"===A||"yes"===A||"on"===A||"0"!==A&&"false"!==A&&"no"!==A&&"off"!==A&&t}(process.env.BAICHUAN_DEBUG_RTSP,!1);1===e&&s&&this.logger?.log(`[BaichuanVideoStream] First cmd_id=3 frame received (bodyLen: ${A.body.length}, channelId: ${A.header.channelId})`),(e%10==0||e<=5)&&s&&this.logger?.log(`[BaichuanVideoStream] Received ${e} Baichuan frames (cmd_id=3)`);const n=this.client.enc,i=A.payload.length>0?A.payload:A.body;let o=i;if(0===A.payload.length){let e=0;const t=i.indexOf(Buffer.from("</Extension>")),A=i.indexOf(Buffer.from("</body>"));-1!==t?e=t+Buffer.from("</Extension>").length:-1!==A&&(e=A+Buffer.from("</body>").length),o=i.subarray(e)}const g=this.chooseDecryptedOrRawCandidate({raw:o,enc:n,channelId:A.header.channelId,allowResync:0===A.payload.length});if(1===e&&s&&this.logger?.log(`[BaichuanVideoStream] Data after XML: ${g.length} bytes, first 32 bytes: ${g.subarray(0,Math.min(32,g.length)).toString("hex")}`),r.dumpEnabled&&z(r),r.dumpBcMedia&&this.dumpChunkIdx<200){const e=r.dumpDir,t=String(this.dumpChunkIdx).padStart(4,"0"),A=c.join(e,`bcmedia_chunk_${t}.bin`),s=c.join(e,"bcmedia_info.json"),n=Buffer.from(g),i=0===this.dumpChunkIdx,o=i?JSON.stringify({note:"Chunks fed into the BcMedia decoder (after XML stripping/alignment).",profile:this.profile,channel:this.channel,encKind:this.client.enc.kind},null,2):"";this.dumpIo.enqueue((async()=>{await a.promises.writeFile(A,n),i&&await a.promises.writeFile(s,o)})),this.dumpChunkIdx++}const l=this.bcMediaCodec.decode(g);t+=l.length;const h=new Map;for(const e of l)h.set(e.type,(h.get(e.type)||0)+1);if(e<=10||e%20==0){const A=this.bcMediaCodec.getRemainingBuffer(),r=Array.from(h.entries()).map((([e,t])=>`${e}:${t}`)).join(", ");s&&this.logger?.log(`[BaichuanVideoStream] Frame #${e}: dataToParse=${g.length} bytes, parsed ${l.length} BcMedia packets (${r||"none"}), total: ${t}, remaining buffer: ${A.length} bytes`)}let d=0,u=0;for(const t of l){const A=(e,t,A)=>{if("H264"===A){const t=ge(e);for(const e of t){const t=31&(e[0]??0);if(7===t){const t=Te(e);if(null!=t){if(!o(e))continue;this.spsById.set(t,e),r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Cached H.264 SPS id=${t} len=${e.length}`)}o(e)&&(this.lastSps=e)}if(8===t){const t=ve(e);if(t){const A=this.spsById.get(t.spsId);if(A&&!o(A))continue;this.ppsById.set(t.ppsId,{nal:e,spsId:t.spsId}),r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Cached H.264 PPS id=${t.ppsId} (spsId=${t.spsId}) len=${e.length}`)}this.lastPps=e}}}else if("H265"===A){const t=be(e);t&&(this.lastVps=t,r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Cached H.265 VPS len=${t.length}`));const A=Re(e);A&&(this.lastSpsH265=A,r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Cached H.265 SPS len=${A.length}`));const s=Ne(e);s&&(this.lastPpsH265=s,r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Cached H.265 PPS len=${s.length}`))}},n=(e,t)=>{if("H264"===t){const t=ge(e);if(0===t.length)return e;const A=t.map((e=>31&(e[0]??0)));if(A.includes(7)&&A.includes(8))return e;if(!A.some((e=>1===e||5===e||19===e||20===e)))return e;let s=null;for(const e of t){const t=31&(e[0]??0);if(1===t||5===t){s=Le(e);break}}if(r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Slice references ppsId=${s??"?"} lastPrepended=${this.lastPrependedPpsId??"?"}`),null==s||s>255)return null!=this.lastPrependedPpsId?e:this.lastSps&&this.lastPps?(this.lastPrependedPpsId=-1,Buffer.concat([ke,this.lastSps,ke,this.lastPps,e])):e;if(this.lastPrependedPpsId===s)return e;const n=this.ppsById.get(s);if(n){const t=this.spsById.get(n.spsId);if(t)return this.lastPrependedPpsId=s,Buffer.concat([ke,t,ke,n.nal,e])}return Buffer.alloc(0)}if("H265"===t){const t=me(e);if(0===t.length)return e;const A=t.map((e=>ye(e))).filter((e=>null!==e));if(A.includes(32)&&A.includes(33)&&A.includes(34))return e;return A.some((e=>e>=0&&e<=9||e>=16&&e<=23))?this.lastPrependedParamSetsH265?e:this.lastVps&&this.lastSpsH265&&this.lastPpsH265?(this.lastPrependedParamSetsH265=!0,r.debugParamSets&&this.logger?.warn("[BaichuanVideoStream] Prepending H.265 VPS/SPS/PPS to frame"),Buffer.concat([ke,this.lastVps,ke,this.lastSpsH265,ke,this.lastPpsH265,e])):e:e}return e},i=(e,t,A)=>{if(r.dumpNals)try{r.dumpEnabled&&z(r);const s=r.dumpDir,n=ge(e),i=n.map((e=>31&(e[0]??0)));let o=null;const g=[],l=[];for(const e of n){const t=31&(e[0]??0);if(1!==t&&5!==t||null!=o||(o=Le(e)),7===t){const t=Te(e);null!=t&&g.push(t)}if(8===t){const t=ve(e);t&&l.push(t.ppsId)}}if(this.dumpNalLines>=2e4)return;const h=JSON.stringify({label:t,microseconds:A,len:e.length,nalTypes:i,slicePpsId:o,auSpsIds:g,auPpsIds:l,cachedSps:this.spsById.size,cachedPps:this.ppsById.size,lastPrependedPpsId:this.lastPrependedPpsId})+"\n";this.dumpNalLines++;const d=c.join(s,"nal_dump.ndjson");this.dumpIo.enqueue((async()=>{await a.promises.appendFile(d,h)}))}catch{}},o=e=>{if(e.length<4)return!1;if(7!=(31&(e[0]??0)))return!1;const t=e[1]??0,A=e[3]??0;return!!new Set([66,77,88,100,110,122,244]).has(t)&&!(0===A||A>255)};if("Iframe"===t.type){const o="H265"===t.videoType?pe(t.data):ce(t.data),g=!0;A(o,"Iframe",t.videoType);const l=n(o,t.videoType);if(0===l.length)continue;if(i(l,"Iframe",t.microseconds),"H264"===t.videoType){if(!le(l)||!he(l)){r.debugH264&&this.logger?.warn(`[BaichuanVideoStream] Dropping invalid H.264 Iframe (Annex-B) len=${l.length}`);continue}}else if("H265"===t.videoType){if(!Se(l)){r.debugH264&&this.logger?.warn(`[BaichuanVideoStream] Dropping invalid H.265 Iframe (Annex-B) len=${l.length}`);continue}we(l)||r.debugH264&&this.logger?.warn(`[BaichuanVideoStream] H.265 Iframe missing VPS/SPS/PPS or IRAP, but continuing len=${l.length}`)}if(r.debugH264&&!this.debugSavedSamples)try{const e=r.dumpDir;a.mkdirSync(e,{recursive:!0}),"Iframe"===t.type&&ne(o)&&a.writeFileSync(c.join(e,"iframe_annexb.bin"),o)}catch{}if(!this.warnedNonAnnexBOnce&&!ne(o)){this.warnedNonAnnexBOnce=!0;const e=t.data,A=e.subarray(0,Math.min(24,e.length)).toString("hex"),r=o.subarray(0,Math.min(24,o.length)).toString("hex");this.logger?.warn(`[BaichuanVideoStream] WARNING: non-AnnexB frame after conversion (${t.type} ${t.videoType}) len=${e.length} head=${A} convertedLen=${o.length} convertedHead=${r}`)}if(this.emit("videoFrame",l),this.emit("videoAccessUnit",{data:l,isKeyframe:g,videoType:t.videoType,microseconds:t.microseconds,..."Iframe"===t.type&&"time"in t&&void 0!==t.time?{time:t.time}:{}}),d++,e<=5||d<=5){const e=ne(o)?"yes":"no";s&&this.logger?.log(`[BaichuanVideoStream] Emitted ${t.type} (${t.videoType}) ${t.data.length} bytes -> ${o.length} bytes (Annex-B, startCode:${e})`)}}else if("Pframe"===t.type){const e=t.data,s=ne(e)?e:"H265"===t.videoType?pe(e):ce(e),o=ne(s)?[s]:"H265"===t.videoType?this.depacketizerH265.push(e):this.depacketizer.push(e);if(0===o.length)continue;for(const e of o){A(e,"Pframe",t.videoType);const s=n(e,t.videoType);if(0===s.length)continue;const o=s;i(o,"Pframe",t.microseconds);if("H265"===t.videoType?Se(o):le(o))this.emit("videoFrame",o),this.emit("videoAccessUnit",{data:o,isKeyframe:!1,videoType:t.videoType,microseconds:t.microseconds}),d++;else if(r.debugH264&&this.debugH264LogsLeft>0){this.debugH264LogsLeft--;const e=o.subarray(0,Math.min(24,o.length)).toString("hex");this.logger?.warn(`[BaichuanVideoStream] Dropping invalid Pframe (${t.videoType}): len=${o.length} head=${e}`)}}}"Aac"!==t.type&&"Adpcm"!==t.type||(u++,this.emit("audioFrame",t.data)),"InfoV1"===t.type||t.type}if((e<=10||e%20==0&&(d>0||u>0))&&s&&this.logger?.log(`[BaichuanVideoStream] Frame #${e}: emitted ${d} video frames, ${u} audio frames`),d>0&&(e<=10||e%50==0)){}},this.client.on("push",this.videoFrameHandler),this.active=!0}async stop(){if(this.active){if(this.depacketizer.reset(),this.depacketizerH265.reset(),this.videoFrameHandler&&this.client.removeListener("push",this.videoFrameHandler),this.videoFrameHandler=void 0,this.bcMediaCodec.clear(),this.activeMsgNum=void 0,this.api)try{await this.api.stopVideoStream(this.channel,this.profile)}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}this.active=!1,this.emit("close")}}isActive(){return this.active}};async function*Ye(e,t,A){const r=new He({client:e.client,api:e,channel:t,profile:A,logger:e.logger});let s=null,n=null,i=null,o=!1,a=!1;const c=e=>{a=!0},g=()=>{a=!0};try{await r.start(),r.on("error",c),r.on("close",g);const e=new Promise((e=>{const t=A=>{A.isKeyframe&&!s&&(s={sps:null,pps:null},r.removeListener("videoAccessUnit",t),e(s))};r.on("videoAccessUnit",t),setTimeout((()=>{s||(s={sps:null,pps:null},r.removeListener("videoAccessUnit",t),e(s))}),5e3)}));await Promise.race([e,new Promise((e=>setTimeout(e,5e3)))]);const t=[],A=200;let l=null;for(r.on("videoAccessUnit",(e=>{a||(t.push({audio:!1,data:e.data,codec:null,sampleRate:null,microseconds:e.microseconds,videoType:e.videoType}),t.length>A&&t.splice(0,t.length-A),l&&(l(),l=null))})),r.on("audioFrame",(e=>{a||(n||(n="aac",i=8e3),t.push({audio:!0,data:e,codec:n,sampleRate:i,microseconds:null}),t.length>A&&t.splice(0,t.length-A),l&&(l(),l=null))})),o=!0;!a;)if(t.length>0){const e=t.shift();yield e}else await new Promise((e=>{l=e,setTimeout((()=>{l===e&&(l=null,e())}),1e3)}))}finally{a=!0;try{await r.stop()}catch{}r.removeListener("error",c),r.removeListener("close",g)}}var xe=class{key;transport;videoType;keepAliveTimer;constructor(e,t){this.transport=e,this.videoType=t,this.key=function(e,t){return`${e}-${"H264"===t?"h264":"h265"}`}(e,t)}async startKeepAlive(e){this.stopKeepAlive(),e.client.getTransport()}stopKeepAlive(){this.keepAliveTimer&&(clearInterval(this.keepAliveTimer),this.keepAliveTimer=void 0)}},Ve=Buffer.from([0,0,0,1]);function Pe(...e){const t=e.filter((e=>!!e&&e.length>0));if(0===t.length)return null;const A=[];for(const e of t)A.push(Ve,e);return Buffer.concat(A)}var Ge=class extends xe{ffmpegFormat="h264";sdpCodec="H264";sps=null;pps=null;constructor(e){super(e,"H264")}extractParameterSets(e){const t=ge(e);for(const e of t){if(e.length<1)continue;const t=31&(e[0]??0);if(7!==t||this.sps||(this.sps=e),8!==t||this.pps||(this.pps=e),this.sps&&this.pps)break}}getFmtp(){let e="packetization-mode=1";if(this.sps&&this.sps.length>=4){e+=`;profile-level-id=${Buffer.from([this.sps[1],this.sps[2],this.sps[3]]).toString("hex")}`}return this.sps&&this.pps?(e+=`;sprop-parameter-sets=${this.sps.toString("base64")},${this.pps.toString("base64")}`,{fmtp:e,hasParamSets:!0}):{fmtp:e,hasParamSets:!1}}getParameterSetsAnnexB(){return Pe(this.sps,this.pps)}},Oe=class extends xe{ffmpegFormat="hevc";sdpCodec="H265";vps=null;sps=null;pps=null;constructor(e){super(e,"H265")}extractParameterSets(e){const t=be(e),A=Re(e),r=Ne(e);t&&!this.vps&&(this.vps=t),A&&!this.sps&&(this.sps=A),r&&!this.pps&&(this.pps=r)}getFmtp(){let e="";return this.vps&&this.sps&&this.pps?(e=`sprop-vps=${this.vps.toString("base64")};sprop-sps=${this.sps.toString("base64")};sprop-pps=${this.pps.toString("base64")}`,{fmtp:e,hasParamSets:!0}):{fmtp:e,hasParamSets:!1}}getParameterSetsAnnexB(){return Pe(this.vps,this.sps,this.pps)}};function Je(e,t){return"H264"===t?new Ge(e):new Oe(e)}var We=class{maxItems;queue=[];waiting;closed=!1;constructor(e){this.maxItems=Math.max(1,0|e)}push(e){if(!this.closed){if(this.waiting){const{resolve:t}=this.waiting;return this.waiting=void 0,void t({value:e,done:!1})}this.queue.push(e),this.queue.length>this.maxItems&&this.queue.splice(0,this.queue.length-this.maxItems)}}close(){if(!this.closed&&(this.closed=!0,this.waiting)){const{resolve:e}=this.waiting;this.waiting=void 0,e({value:void 0,done:!0})}}async next(){if(this.closed)return{value:void 0,done:!0};const e=this.queue.shift();return void 0!==e?{value:e,done:!1}:await new Promise((e=>{this.waiting={resolve:e}}))}},qe=class{opts;queues=new Map;source=null;running=!1;pumpPromise=null;constructor(e){this.opts=e}start(){this.running||(this.running=!0,this.source=this.opts.createSource(),this.pumpPromise=(async()=>{try{for await(const e of this.source){try{this.opts.onFrame?.(e)}catch{}for(const t of this.queues.values())t.push(e)}}catch(e){this.opts.onError?.(e)}finally{for(const e of this.queues.values())e.close();this.queues.clear()}})())}subscribe(e){const t=new We(this.opts.maxQueueItems);this.queues.set(e,t);const A=this;return async function*(){try{for(;;){const e=await t.next();if(e.done)return;yield e.value}}finally{t.close(),A.queues.delete(e)}}()}async stop(){if(!this.running)return;this.running=!1;const e=this.source;this.source=null;for(const e of this.queues.values())e.close();this.queues.clear();try{await(e?.return(void 0))}catch{}try{await this.pumpPromise}catch{}this.pumpPromise=null}};var _e=class e extends s.EventEmitter{api;channel;profile;listenHost;listenPort;path;logger;tcpRtpFraming;active=!1;flow;connectedClients=new Set;nativeStreamActive=!1;clientConnectionServer;streamMetadata=null;clientResources=new Map;isRtspDebugEnabled(){return this.api.client.getDebugConfig().debugRtsp||function(e,t){if(null==e)return t;const A=e.trim().toLowerCase();return"1"===A||"true"===A||"yes"===A||"on"===A||"0"!==A&&"false"!==A&&"no"!==A&&"off"!==A&&t}(process.env.BAICHUAN_DEBUG_RTSP,!1)}rtspDebugLog(e){this.isRtspDebugEnabled()&&this.logger.debug(`[BaichuanRtspServer] ${e}`)}firstFramePromise=null;firstFrameResolve=null;firstFrameReceived=!1;firstAudioPromise=null;firstAudioResolve=null;firstAudioDetected=!1;hasAudio=!1;audioInfo=null;audioPrimingFrame=null;tempStreamGenerator=null;nativeFanout=null;noClientAutoStopTimer;static isAdtsAacFrame(e){return e.length>=2&&255===e[0]&&!(240&~e[1])}static parseAdtsSamplingInfo(t){if(t.length<7)return null;if(!e.isAdtsAacFrame(t))return null;const A=t[2]>>2&15,r=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350][A]??null;if(!r)return null;const s=(1&t[2])<<2|t[3]>>6&3,n=0===s?1:s,i=(t[2]>>6&3)+1<<11|A<<7|s<<3;return{sampleRate:r,channels:n,configHex:Buffer.from([i>>8&255,255&i]).toString("hex")}}static parseInterleavedChannels(e){const t=e.match(/interleaved\s*=\s*(\d+)\s*-\s*(\d+)/i);if(!t)return null;const A=Number.parseInt(t[1],10),r=Number.parseInt(t[2],10);return Number.isFinite(A)&&Number.isFinite(r)?{rtp:A,rtcp:r}:null}static splitAnnexBNals(e){const t=[],A=e.length,r=t=>{if(t+3<=A&&0===e[t]&&0===e[t+1]){if(1===e[t+2])return 3;if(t+4<=A&&0===e[t+2]&&1===e[t+3])return 4}return 0};let s=0;for(;s<A;){if(r(s))break;s++}for(;s<A;){const n=r(s);if(!n){s++;continue}const i=s+n;let o=i;for(;o<A;){if(r(o))break;o++}if(i<o){const A=e.subarray(i,o);A.length>0&&t.push(A)}s=o}return t}static stripAdtsHeader(t){if(!e.isAdtsAacFrame(t))return null;if(t.length<7)return null;const A=!(1&~t[1])?7:9;return t.length<=A?null:t.subarray(A)}constructor(e){super(),this.api=e.api,this.channel=e.channel,this.profile=e.profile,this.listenHost=e.listenHost??"127.0.0.1",this.listenPort=e.listenPort??8554,this.path=e.path??`/stream/${this.profile}`,this.logger=e.logger??console,this.tcpRtpFraming=e.tcpRtpFraming??"rfc4571";const t=this.api.client.getTransport();this.flow=Je(t,"H264")}clearNoClientAutoStopTimer(){this.noClientAutoStopTimer&&(clearTimeout(this.noClientAutoStopTimer),this.noClientAutoStopTimer=void 0)}setFlowVideoType(e,t){if(this.flow.videoType===e)return;const A=this.api.client.getTransport();this.flow.stopKeepAlive(),this.flow=Je(A,e),this.rtspDebugLog(`Using RTSP flow ${this.flow.key} (${t})`)}async start(){if(this.active)throw new Error("RTSP server is already active");try{const e=(await this.api.getStreamMetadata(this.channel)).streams.find((e=>e.profile===this.profile));if(e){this.streamMetadata={frameRate:e.frameRate||25,width:e.width,height:e.height};const t=String(e.videoEncType??"").trim().toLowerCase(),A=t.includes("265")||t.includes("hevc")?"H265":"H264";this.setFlowVideoType(A,"metadata")}}catch(e){this.logger.warn(`[BaichuanRtspServer] Could not get stream metadata: ${e}`),this.streamMetadata={frameRate:25,width:1920,height:1080},this.setFlowVideoType("H264","metadata unavailable")}this.clientConnectionServer=n.createServer((e=>{this.handleRtspConnection(e)})),await new Promise(((e,t)=>{this.clientConnectionServer.listen(this.listenPort,this.listenHost,(()=>{const t=this.clientConnectionServer.address();t&&"object"==typeof t&&"port"in t&&(this.listenPort=t.port),e()})),this.clientConnectionServer.on("error",(e=>{t(e)}))})),this.active=!0,this.logger.info(`[BaichuanRtspServer] RTSP server started on ${this.listenHost}:${this.listenPort}, path: ${this.path}`)}handleRtspConnection(t){const A=`${t.remoteAddress}:${t.remotePort}`;this.logger.info(`[BaichuanRtspServer] RTSP client connected: ${A}`);let r,s="",n=Buffer.alloc(0),i=!1,o=null,a=null;const c=()=>{this.removeClient(A);const e=this.clientResources.get(A);if(e){if(e.ffmpeg)try{e.ffmpeg.stdin?.end(),e.ffmpeg.kill("SIGTERM"),setTimeout((()=>{try{e.ffmpeg?.kill("SIGKILL")}catch{}}),1e3)}catch{}if(e.udpSocket)try{e.udpSocket.close()}catch{}if(e.udpSocketAudio)try{e.udpSocketAudio.close()}catch{}if(e.rtspSocket&&!e.rtspSocket.destroyed)try{e.rtspSocket.destroy()}catch{}this.clientResources.delete(A)}if(r){try{r.stdin?.end(),r.kill("SIGTERM"),setTimeout((()=>{try{r?.kill("SIGKILL")}catch{}}),1e3)}catch{}r=void 0}if(o){try{o.close()}catch{}o=null}if(a){try{a.close()}catch{}a=null}};t.on("close",c),t.on("error",(e=>{e&&"object"==typeof e&&"code"in e&&"EPIPE"!==e.code&&this.logger.error("[BaichuanRtspServer] RTSP client error:",e),c()})),t.on("data",(async g=>{for(n=Buffer.concat([n,g]);n.includes("\r\n\r\n");){const g=n.indexOf("\r\n\r\n"),l=n.subarray(0,g).toString();if(n=n.subarray(g+4),!l.trim())continue;const h=l.split("\r\n"),d=h[0]?.split(" ");if(!d||d.length<3)continue;const u=d[0],E=d[1],I=d[2],Q=l.match(/CSeq:\s*(\d+)/i),B=Q?parseInt(Q[1]??"0",10):0,C=(e,A,r={},s)=>{let n=`${I} ${e} ${A}\r\n`;n+=`CSeq: ${B}\r\n`;for(const[e,t]of Object.entries(r))n+=`${e}: ${t}\r\n`;s&&(n+=`Content-Length: ${Buffer.byteLength(s,"utf8")}\r\n`),n+="\r\n",s&&(n+=s),t.write(n)};if(this.rtspDebugLog(`RTSP ${u} ${E}`),"OPTIONS"===u)C(200,"OK",{Public:"DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS"});else if("DESCRIBE"===u){if(!this.firstFrameReceived&&0===this.connectedClients.size){try{this.nativeStreamActive||await this.startNativeStream()}catch(e){this.logger.warn(`[BaichuanRtspServer] Failed to start native stream for SDP priming: ${e}`)}const{hasParamSets:e}=this.flow.getFmtp();if(!e){const e="udp"===this.api.client.getTransport()?4e3:1500;try{await Promise.race([this.firstFramePromise||Promise.resolve(),new Promise((t=>setTimeout(t,e)))])}catch{}}}{const{fmtp:e,hasParamSets:t}=this.flow.getFmtp(),r=e.length>160?`${e.slice(0,160)}...`:e;this.logger.info(`[BaichuanRtspServer] DESCRIBE SDP for ${A} path=${this.path} codec=${this.flow.sdpCodec} hasParamSets=${t} fmtp=${r}`),t||this.rtspDebugLog(`DESCRIBE responding without parameter sets yet (client=${A}, path=${this.path}, flow=${this.flow.key})`)}const e=this.generateSdp();C(200,"OK",{"Content-Type":"application/sdp","Content-Base":`rtsp://${this.listenHost}:${this.listenPort}${this.path}/`},e)}else if("SETUP"===u){const n=E?.includes("track0"),c=E?.includes("track1");if(!n&&!c){C(404,"Not Found",{Session:s||`session_${Date.now()}_${Math.random().toString(36).substring(7)}`});continue}if(c&&!this.hasAudio){C(404,"Not Found",{Session:s||`session_${Date.now()}_${Math.random().toString(36).substring(7)}`});continue}this.connectedClients.add(A),this.emit("client",A),this.clearNoClientAutoStopTimer(),1!==this.connectedClients.size||this.nativeStreamActive||await this.startNativeStream();const g=l.match(/Transport:\s*([^\r\n]+)/i),h=(g?.[1]??"").trim();i=!h||(h.includes("TCP")||h.includes("tcp")),s||(s=`session_${Date.now()}_${Math.random().toString(36).substring(7)}`);const d=this.clientResources.get(A);if(d?d.rtspSocket=t:this.clientResources.set(A,{ffmpeg:void 0,udpSocket:null,udpSocketAudio:null,rtspSocket:t,pipelineStarted:!1,seenFirstVideoKeyframe:!1,setupTrack0:!1,setupTrack1:!1,isPlaying:!1}),i){const t=this.clientResources.get(A),r=e.parseInterleavedChannels(h);if(t)if(c){const e=r??{rtp:2,rtcp:3};t.track1RtpChannel=e.rtp,t.track1RtcpChannel=e.rtcp}else{const e=r??{rtp:0,rtcp:1};t.track0RtpChannel=e.rtp,t.track0RtcpChannel=e.rtcp}}{const e=this.clientResources.get(A);e&&!e.pipelineStarted&&(e.pipelineStarted=!0,await this.startClientFfmpeg(A,t,i,((e,t,s)=>{r=e,o=t,a=s;const n=this.clientResources.get(A);n&&(n.ffmpeg=e,n.udpSocket=t,n.udpSocketAudio=s)})))}{const e=this.clientResources.get(A);e&&(c?e.setupTrack1=!0:e.setupTrack0=!0,this.rtspDebugLog(`SETUP done for ${A}: track0=${!!e.setupTrack0} track1=${!!e.setupTrack1} playing=${!!e.isPlaying}`))}if(i){const e=this.clientResources.get(A),t=c?{rtp:2,rtcp:3}:{rtp:0,rtcp:1};C(200,"OK",{Transport:`RTP/AVP/TCP;unicast;interleaved=${`${c?e?.track1RtpChannel??t.rtp:e?.track0RtpChannel??t.rtp}-${c?e?.track1RtcpChannel??t.rtcp:e?.track0RtcpChannel??t.rtcp}`}`,Session:s})}else C(200,"OK",{Transport:"RTP/AVP/UDP;unicast;client_port=5004-5005;server_port=5004-5005",Session:s})}else if("PLAY"===u){{const e=this.clientResources.get(A);e&&(e.isPlaying=!0,this.rtspDebugLog(`PLAY for ${A}: track0=${!!e.setupTrack0} track1=${!!e.setupTrack1} playing=${!!e.isPlaying}`))}C(200,"OK",{Session:s,Range:"npt=0.000-"})}else"TEARDOWN"===u?(c(),C(200,"OK",{Session:s}),t.end()):C(501,"Not Implemented")}}))}generateSdp(){const e=this.flow.sdpCodec;let t="v=0\r\n";t+=`o=- ${Date.now()} ${Date.now()} IN IP4 ${this.listenHost}\r\n`,t+="s=Baichuan Stream\r\n",t+=`c=IN IP4 ${this.listenHost}\r\n`,t+="t=0 0\r\n",t+="m=video 0 RTP/AVP 96\r\n",t+=`a=rtpmap:96 ${e}/90000\r\n`,this.streamMetadata?.frameRate&&(t+=`a=framerate:${this.streamMetadata.frameRate}\r\n`),this.streamMetadata?.width&&this.streamMetadata?.height&&(t+=`a=framesize:96 ${this.streamMetadata.width}-${this.streamMetadata.height}\r\n`),t+="a=control:track0\r\n";const{fmtp:A,hasParamSets:r}=this.flow.getFmtp();if(r||this.logger.warn(`[BaichuanRtspServer] SDP missing parameter sets for flow ${this.flow.key}`),A&&(t+=`a=fmtp:96 ${A}\r\n`),this.hasAudio){t+="m=audio 0 RTP/AVP 97\r\n";const e=this.audioInfo,A=e?.sampleRate??8e3,r=e?.channels??1,s=e?.configHex??"";t+=`a=rtpmap:97 mpeg4-generic/${A}/${r}\r\n`,s&&(t+=`a=fmtp:97 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=${s}; SizeLength=13; IndexLength=3; IndexDeltaLength=3;\r\n`),t+="a=control:track1\r\n"}return t+="a=setup:passive\r\n",t+="a=connection:new\r\n",t}async startClientFfmpeg(t,A,r,s){let n=this.streamMetadata;if(!n||!n.frameRate)try{const e=(await this.api.getStreamMetadata(this.channel)).streams.find((e=>e.profile===this.profile));e&&(n={frameRate:e.frameRate||25,width:e.width,height:e.height},this.rtspDebugLog(`Fetched metadata for profile ${this.profile}: ${n.frameRate} fps`))}catch(e){this.logger.warn(`[BaichuanRtspServer] Could not fetch stream metadata: ${e}`),n={frameRate:25,width:1920,height:1080}}const o=this.flow.ffmpegFormat;let a=0,c=0,l=null,h=null;const d=r,u=(e,t)=>{if("rfc4571"===(r?"rtsp-interleaved":this.tcpRtpFraming)){const e=Buffer.alloc(2);return e.writeUInt16BE(65535&t.length,0),Buffer.concat([e,t])}const A=Buffer.alloc(4);return A[0]=36,A[1]=255&e,A[2]=t.length>>8&255,A[3]=255&t.length,Buffer.concat([A,t])};if(r&&!d){a=5e4+Math.floor(1e4*Math.random()),l=i.createSocket("udp4"),await new Promise(((e,t)=>{l.once("listening",(()=>e())),l.once("error",t),l.bind(a,"127.0.0.1")}));const e=(e,r)=>{if(!A||A.destroyed||!A.writable)return!1;if(r.length<12)return!1;if(2!==(r[0]>>6&3))return!1;const s=this.clientResources.get(t);if(!s?.isPlaying)return!1;const n=s?.track0RtpChannel??0,i=s?.track1RtpChannel??2;if(e===n&&!s?.setupTrack0)return!1;if(e===i&&!s?.setupTrack1)return!1;try{return A.write(u(e,r))}catch(e){if(e&&"object"==typeof e&&"code"in e&&"EPIPE"===e.code)return!1}return!1};if(l){const A=this.clientResources.get(t),r=A?.track0RtpChannel??0;let s=0,n=!1,i=!1;l.on("message",(A=>{n||(n=!0,this.rtspDebugLog(`First video RTP packet received from ffmpeg for client ${t} (len=${A.length})`));e(r,A)&&!i&&(i=!0,this.rtspDebugLog(`First video RTP packet forwarded via TCP interleaved for client ${t}`)),s++,s%1e3==0&&this.rtspDebugLog(`Forwarded ${s} RTP packets to client ${t} via TCP interleaved`)}))}if(this.hasAudio){c=a+2+2*Math.floor(1e3*Math.random()),h=i.createSocket("udp4"),await new Promise(((e,t)=>{h.once("listening",(()=>e())),h.once("error",t),h.bind(c,"127.0.0.1")}));let A=0,r=!1,s=!1;h.on("message",(n=>{const i=this.clientResources.get(t),o=i?.track1RtpChannel??2;A++,r||(r=!0,this.rtspDebugLog(`First audio RTP packet received from ffmpeg for client ${t} (len=${n.length})`));e(o,n)&&!s&&(s=!0,this.rtspDebugLog(`First audio RTP packet forwarded via TCP interleaved for client ${t}`)),A%1e3==0&&this.rtspDebugLog(`Forwarded ${A} audio RTP packets to client ${t} via TCP interleaved`)}))}}const E=this.clientResources.get(t),I=this.isRtspDebugEnabled(),Q=e=>this.rtspDebugLog(e),B=(e,t)=>{if(!A||A.destroyed||!A.writable)return!1;try{return A.write(u(e,t))}catch(e){if(e&&"object"==typeof e&&"code"in e&&"EPIPE"===e.code)return!1}return!1},C=(e,t,A,r,s)=>{const n=Buffer.alloc(12);return n[0]=128,n[1]=(t?128:0)|127&e,n.writeUInt16BE(65535&A,2),n.writeUInt32BE(r>>>0,4),n.writeUInt32BE(s>>>0,8),n},p=(e,t,A)=>{const r=e?97:96;if(E?.isPlaying&&(!e||E?.setupTrack1)&&(e||E?.setupTrack0))if(e){void 0===E.rtpAudioSeq&&(E.rtpAudioSeq=Math.floor(65536*Math.random())),void 0===E.rtpAudioTimestamp&&(E.rtpAudioTimestamp=0),void 0===E.rtpAudioSsrc&&(E.rtpAudioSsrc=4294967295*Math.random()>>>0);const e=C(r,A,E.rtpAudioSeq,E.rtpAudioTimestamp,E.rtpAudioSsrc);E.rtpAudioSeq=E.rtpAudioSeq+1&65535,B(E?.track1RtpChannel??2,Buffer.concat([e,t]))}else{void 0===E.rtpVideoSeq&&(E.rtpVideoSeq=Math.floor(65536*Math.random())),void 0===E.rtpVideoTimestamp&&(E.rtpVideoTimestamp=0),void 0===E.rtpVideoSsrc&&(E.rtpVideoSsrc=4294967295*Math.random()>>>0);const e=C(r,A,E.rtpVideoSeq,E.rtpVideoTimestamp,E.rtpVideoSsrc);E.rtpVideoSeq=E.rtpVideoSeq+1&65535,B(E?.track0RtpChannel??0,Buffer.concat([e,t]))}},f=1200,m=t=>{const A=e.splitAnnexBNals(t);for(const e of A){if(e.length<1)continue;if(5===(31&(e[0]??0)))return!0}return!1},y=(e,t)=>{if(e.length<=f)return void p(!1,e,t);const A=e[0],r=31&A,s=224&A|28,n=e.subarray(1);let i=0;for(;i<n.length;){const e=n.length-i,A=Math.min(e,1198),o=0===i,a=i+A>=n.length,c=(o?128:0)|(a?64:0)|r,g=n.subarray(i,i+A),l=Buffer.concat([Buffer.from([s,c]),g]);p(!1,l,t&&a),i+=A}},D=(e,t)=>{if(e.length<=f)return void p(!1,e,t);if(e.length<3)return;const A=e[0],r=A>>1&63,s=129&A|98,n=e[1],i=e.subarray(2);let o=0;for(;o<i.length;){const e=i.length-o,A=Math.min(e,1197),a=0===o,c=o+A>=i.length,g=(a?128:0)|(c?64:0)|63&r,l=i.subarray(o,o+A),h=Buffer.concat([Buffer.from([s,n,g]),l]);p(!1,h,t&&c),o+=A}},S=n?.frameRate&&n.frameRate>0?n.frameRate:25,w=Math.max(1,Math.round(9e4/S)),b=e=>{if(!E)return;if(null==e)return;if(!Number.isFinite(e))return;if(void 0===E.rtpVideoTimestamp&&(E.rtpVideoTimestamp=0),void 0===E.rtpVideoBaseTimestamp&&(E.rtpVideoBaseTimestamp=E.rtpVideoTimestamp),void 0===E.rtpVideoBaseMicroseconds)return E.rtpVideoBaseMicroseconds=e>>>0,void(E.rtpVideoLastTimestamp=E.rtpVideoTimestamp);const t=(e>>>0)-(E.rtpVideoBaseMicroseconds>>>0)>>>0;let A=((E.rtpVideoBaseTimestamp??0)>>>0)+Math.round(9e4*t/1e6)>>>0;const r=E.rtpVideoLastTimestamp;void 0!==r&&A<=r>>>0&&(A=1+(r>>>0)>>>0),E.rtpVideoTimestamp=A,E.rtpVideoLastTimestamp=A},R=(t,A,r=!0)=>{const s=e.splitAnnexBNals(A);if(0!==s.length){for(let e=0;e<s.length;e++){const A=s[e],r=e===s.length-1;"H265"===t?D(A,r):y(A,r)}r&&void 0!==E?.rtpVideoTimestamp&&void 0===E?.rtpVideoBaseMicroseconds&&(E.rtpVideoTimestamp=E.rtpVideoTimestamp+w>>>0)}},N=t=>{const A=e.stripAdtsHeader(t);if(!A)return;const r=Buffer.from([0,16]),s=8191&A.length,n=Buffer.alloc(2);n[0]=s>>5&255,n[1]=(31&s)<<3;const i=Buffer.concat([r,n,A]);p(!0,i,!0),void 0!==E?.rtpAudioTimestamp&&(E.rtpAudioTimestamp=E.rtpAudioTimestamp+1024>>>0)},k=e=>{const t=me(e);for(const e of t){if(e.length<2)continue;const t=e[0];if(void 0===t)continue;if(128&t)continue;if(De(t>>1&63))return!0}return!1};let F,U;if(d&&s(void 0,null,null),!d){const e=["-hide_banner","-loglevel","error","-fflags","+genpts+igndts"],A=n?.frameRate||25;if(A>0&&(e.push("-r",A.toString()),this.rtspDebugLog(`Using frame rate ${A} fps for client ${t}`)),e.push("-f",o,"-i","pipe:0"),this.hasAudio&&e.push("-f","aac","-i","pipe:3"),r){if(e.push("-map","0:v:0","-c:v","copy","-vsync","cfr","-avoid_negative_ts","make_zero","-f","rtp","-payload_type","96",`rtp://127.0.0.1:${a}?pkt_size=1300`),this.hasAudio&&h&&c){const t=this.audioInfo,A=t?.sampleRate??8e3,r=t?.channels??1;e.push("-map","1:a:0","-c:a","aac","-profile:a","aac_low","-ar",String(A),"-ac",String(r),"-flags:a","+global_header","-f","rtp","-payload_type","97",`rtp://127.0.0.1:${c}?pkt_size=1300`)}}else e.push("-map","0:v:0","-c:v","copy","-vsync","cfr","-avoid_negative_ts","make_zero","-f","rtp","-payload_type","96","rtp://127.0.0.1:5004?pkt_size=1300");const i=["pipe","ignore","pipe"];this.hasAudio&&i.push("pipe"),this.rtspDebugLog(`Spawning ffmpeg for client ${t}: ffmpeg ${e.join(" ")}`),F=(0,g.spawn)("ffmpeg",e,{stdio:i});try{const e=this.flow.getParameterSetsAnnexB();e&&e.length>0&&F?.stdin&&(F.stdin.write(e),this.rtspDebugLog(`Wrote video parameter sets to ffmpeg stdin for client ${t} (len=${e.length})`))}catch(e){this.logger.warn(`[BaichuanRtspServer] Failed to write video parameter sets to ffmpeg for client ${t}: ${e}`)}if(F.on("error",(e=>{this.logger.error(`[BaichuanRtspServer] Failed to spawn ffmpeg for client ${t}:`,e)})),F.on("close",((e,A)=>{this.rtspDebugLog(`ffmpeg exited for client ${t} (code=${e}, signal=${A})`)})),s(F,l,h),F.stdin?.on("error",(e=>{const A=e?.code;"EPIPE"!==A&&"ERR_STREAM_WRITE_AFTER_END"!==A?this.logger.error(`[BaichuanRtspServer] FFmpeg stdin error for client ${t}:`,e):this.rtspDebugLog(`FFmpeg stdin error (${A}) for client ${t}`)})),U=this.hasAudio?F.stdio?.[3]:void 0,U?.on?.("error",(e=>{const A=e?.code;"EPIPE"!==A&&"ERR_STREAM_WRITE_AFTER_END"!==A?this.logger.error(`[BaichuanRtspServer] FFmpeg audio pipe error for client ${t}:`,e):this.rtspDebugLog(`FFmpeg audio pipe error (${A}) for client ${t}`)})),U&&this.audioPrimingFrame)try{U.write(this.audioPrimingFrame)}catch{}}this.rtspDebugLog(`Creating native stream iterator for client ${t}`);const M=this.nativeFanout?this.nativeFanout.subscribe(t):Ye(this.api,this.channel,this.profile);this.tempStreamGenerator=null;let T=0,v=Date.now();const L=n&&n.frameRate>0?1e3/n.frameRate:40;(async()=>{try{this.rtspDebugLog(`Starting to feed frames to client ${t} (target FPS: ${n?.frameRate||25}, interval: ${L}ms)`);let A=0,r=!1,s=!1,i=!1,o=!1,a=!1;for await(const n of M){if(!this.connectedClients.has(t)){this.rtspDebugLog(`Client ${t} disconnected, stopping frame feed`);break}const c=F?.stdin;if(!d&&(!c||c.destroyed||c.writableEnded||c.writableFinished)){this.rtspDebugLog(`FFmpeg stdin closed for client ${t}`);break}if(0===n.data.length)continue;if(!n.audio&&!i&&(i=!0,I)){const e=n.data.subarray(0,16).toString("hex");Q(`First video frame received from generator for client ${t} (len=${n.data.length}, videoType=${String(n.videoType??this.flow.videoType)}, head=${e})`)}if(n.audio){if(A++,1===A&&this.rtspDebugLog(`Audio frames detected (codec: ${n.codec||"unknown"}, sampleRate: ${n.sampleRate||"unknown"})`),A%100==0&&this.rtspDebugLog(`Received ${A} audio frames (not sent to RTSP yet)`),d){if(!E?.seenFirstVideoKeyframe)continue;if(this.hasAudio&&e.isAdtsAacFrame(n.data)){if(I&&!s){s=!0;const e=n.data.subarray(0,16).toString("hex");Q(`First audio ADTS frame packetized to RTP for client ${t} (len=${n.data.length}, head=${e})`)}N(n.data)}continue}if(this.hasAudio&&U&&!U.writableEnded&&!U.writableFinished){const A=U;if(!A)continue;if(e.isAdtsAacFrame(n.data))try{if(!s){s=!0;const e=n.data.subarray(0,16).toString("hex");this.rtspDebugLog(`First audio frame written to ffmpeg pipe for client ${t} (len=${n.data.length}, head=${e})`)}A.write(n.data)||await new Promise((e=>A.once("drain",(()=>e()))))}catch{}}continue}if("H264"===n.videoType||"H265"===n.videoType){const e="H264"===n.videoType?ce(n.data):pe(n.data);0===T&&this.setFlowVideoType(n.videoType,"first video frame");if(this.flow.getFmtp().hasParamSets)this.firstFrameReceived||this.markFirstFrameReceived();else{this.flow.extractParameterSets(e);this.flow.getFmtp().hasParamSets&&this.markFirstFrameReceived()}}T++,T%100==0&&this.rtspDebugLog(`Sent ${T} frames to client ${t} (frame size: ${n.data.length} bytes)`);const g=Date.now(),l=L-(g-v);if(l>0&&await new Promise((e=>setTimeout(e,Math.min(l,2*L)))),v=Date.now(),d){const e=n.videoType??this.flow.videoType,A="H264"===e?ce(n.data):pe(n.data);if(!E?.seenFirstVideoKeyframe)if("H265"===e){const{hasParamSets:r}=this.flow.getFmtp();if(!r){I&&!o&&(o=!0,Q(`H265 gating: waiting for VPS/SPS/PPS before sending RTP to client ${t}`));continue}if(!E?.rtpSentVideoConfig){const t=this.flow.getParameterSetsAnnexB();t&&t.length>0&&(R(e,t,!1),E.rtpSentVideoConfig=!0)}E.h265WaitStartMs||(E.h265WaitStartMs=Date.now());const s=k(A),n=Date.now()-E.h265WaitStartMs;if(!s&&n<2e3){I&&!a&&(a=!0,Q(`H265 gating: waiting for IRAP (or timeout) for client ${t}`));continue}E.seenFirstVideoKeyframe=!0}else{const{hasParamSets:r}=this.flow.getFmtp();if(!r){I&&!o&&(o=!0,Q(`H264 gating: waiting for SPS/PPS before sending RTP to client ${t}`));continue}if(!E?.rtpSentVideoConfig){const t=this.flow.getParameterSetsAnnexB();t&&t.length>0&&(R(e,t,!1),E.rtpSentVideoConfig=!0)}if(!m(A))continue;E.seenFirstVideoKeyframe=!0}const s=n.microseconds;if(b(s),!E?.rtpSentVideoConfig){const t=this.flow.getParameterSetsAnnexB();t&&t.length>0&&(R(e,t,!1),E.rtpSentVideoConfig=!0)}if(!r&&(r=!0,I)){const e=n.data.subarray(0,16).toString("hex");Q(`First video access unit packetized to RTP for client ${t} (len=${n.data.length}, head=${e})`)}R(e,A,!0)}else try{if(c&&!c.destroyed&&!c.writableEnded&&!c.writableFinished){if(!r){r=!0;const e=n.data.subarray(0,16).toString("hex");this.rtspDebugLog(`First video frame written to ffmpeg stdin for client ${t} (len=${n.data.length}, head=${e})`)}c.write("H264"===n.videoType?ce(n.data):n.data)||await new Promise((e=>{c?c.once("drain",(()=>e())):e()}))}}catch(e){const A=e?.code;if("EPIPE"===A||"ERR_STREAM_WRITE_AFTER_END"===A){this.rtspDebugLog(`EPIPE writing to ffmpeg for client ${t}`);break}this.logger.error(`[BaichuanRtspServer] Error writing frame to ffmpeg for client ${t}:`,e)}}this.rtspDebugLog(`Finished feeding frames to client ${t} (total: ${T} frames)`)}catch(e){this.logger.error(`[BaichuanRtspServer] Error in feedFrames for client ${t}:`,e)}})().catch((e=>{this.logger.error(`[BaichuanRtspServer] Error feeding frames to client ${t}:`,e)})),F?.stderr?.on("data",(e=>{const A=e.toString();(A.includes("error")||A.includes("Error"))&&this.logger.error(`[BaichuanRtspServer] FFmpeg error for client ${t}: ${A}`)}))}async startNativeStream(){this.nativeStreamActive||(this.nativeStreamActive=!0,this.firstFrameReceived=!1,this.firstAudioDetected=!1,this.hasAudio=!1,this.audioInfo=null,this.audioPrimingFrame=null,this.firstFramePromise=new Promise((e=>{this.firstFrameResolve=e})),this.firstAudioPromise=new Promise((e=>{this.firstAudioResolve=e})),this.rtspDebugLog(`Starting native stream for profile ${this.profile} (waiting for camera to start transmitting...)`),await this.flow.startKeepAlive(this.api),this.nativeFanout=new qe({maxQueueItems:200,createSource:()=>Ye(this.api,this.channel,this.profile),onFrame:t=>{if(t.audio){if(!this.hasAudio&&"tcp"===this.api.client.getTransport()&&e.isAdtsAacFrame(t.data)){const A=e.parseAdtsSamplingInfo(t.data);A&&(this.hasAudio=!0,this.audioInfo={codec:"aac-adts",sampleRate:A.sampleRate,channels:A.channels,configHex:A.configHex},this.audioPrimingFrame=Buffer.from(t.data),this.markFirstAudioDetected(),this.rtspDebugLog(`Audio detected (AAC/ADTS ${A.sampleRate}Hz ch=${A.channels}); advertising RTSP track1 as mpeg4-generic`))}return}if(0===t.data.length)return;"H264"!==t.videoType&&"H265"!==t.videoType||this.setFlowVideoType(t.videoType,"native stream"),this.flow.extractParameterSets(t.data);const{hasParamSets:A}=this.flow.getFmtp();A&&this.markFirstFrameReceived()},onError:e=>{this.logger.warn(`[BaichuanRtspServer] Shared native stream error: ${e}`)}}),this.nativeFanout.start(),this.clearNoClientAutoStopTimer(),this.noClientAutoStopTimer=setTimeout((()=>{0===this.connectedClients.size&&(this.rtspDebugLog("Auto-stopping primed native stream (no clients connected)"),this.stopNativeStream())}),15e3),this.noClientAutoStopTimer?.unref?.())}markFirstFrameReceived(){!this.firstFrameReceived&&this.firstFrameResolve&&(this.firstFrameReceived=!0,this.rtspDebugLog(`First frame received from camera for profile ${this.profile}`),this.firstFrameResolve(),this.firstFrameResolve=null)}markFirstAudioDetected(){!this.firstAudioDetected&&this.firstAudioResolve&&(this.firstAudioDetected=!0,this.firstAudioResolve(),this.firstAudioResolve=null)}async stopNativeStream(){if(this.nativeStreamActive){if(this.rtspDebugLog("Stopping native stream"),this.flow.stopKeepAlive(),this.clearNoClientAutoStopTimer(),this.nativeStreamActive=!1,this.firstFrameReceived=!1,this.firstFramePromise=null,this.firstFrameResolve&&(this.firstFrameResolve=null),this.firstAudioDetected=!1,this.firstAudioPromise=null,this.firstAudioResolve&&(this.firstAudioResolve=null),this.nativeFanout){const e=this.nativeFanout;this.nativeFanout=null,await e.stop()}if(this.tempStreamGenerator){try{await this.tempStreamGenerator.return(void 0)}catch{}this.tempStreamGenerator=null}}}removeClient(e){this.connectedClients.has(e)&&(this.connectedClients.delete(e),this.emit("clientDisconnected",e),this.logger.info(`[BaichuanRtspServer] RTSP client disconnected: ${e}`),0===this.connectedClients.size&&this.stopNativeStream())}async waitUntilReady(e=3e4){return new Promise(((t,A)=>{if(!this.clientConnectionServer)return void A(new Error("RTSP server not started"));const r=setTimeout((()=>{A(new Error(`Timeout waiting for RTSP server to be ready (${e}ms). Camera may be sleeping or not responding.`))}),e),s=()=>{const e=new n.Socket;e.setTimeout(1e3),e.on("connect",(()=>{e.destroy(),this.nativeStreamActive&&this.firstFramePromise?(this.rtspDebugLog("Port is listening, waiting for camera to start transmitting frames..."),this.firstFramePromise.then((()=>{clearTimeout(r),t()})).catch((e=>{clearTimeout(r),A(e)}))):(clearTimeout(r),t())})),e.on("timeout",(()=>{e.destroy(),setTimeout(s,500)})),e.on("error",(()=>{e.destroy(),setTimeout(s,500)})),e.connect(this.listenPort,this.listenHost)};s()}))}async stop(){if(!this.active)return;this.logger.info(`[BaichuanRtspServer] Stopping RTSP server on ${this.listenHost}:${this.listenPort}...`),await this.stopNativeStream();const e=Array.from(this.connectedClients);for(const t of e){const e=this.clientResources.get(t);if(e){if(e.ffmpeg)try{e.ffmpeg.stdin?.end(),e.ffmpeg.kill("SIGTERM"),setTimeout((()=>{try{e.ffmpeg?.kill("SIGKILL")}catch{}}),1e3)}catch{}if(e.udpSocket)try{e.udpSocket.close()}catch{}if(e.rtspSocket&&!e.rtspSocket.destroyed)try{e.rtspSocket.destroy()}catch{}}}this.clientResources.clear(),this.clientConnectionServer&&(await new Promise((e=>{this.clientConnectionServer?.close((()=>{e()}))})),this.clientConnectionServer=void 0),this.active=!1,this.connectedClients.clear(),this.emit("close"),this.logger.info("[BaichuanRtspServer] RTSP server stopped")}getRtspUrl(){return`rtsp://${this.listenHost}:${this.listenPort}${this.path}`}isActive(){return this.active}getClientCount(){return this.connectedClients.size}};function Xe(e){if(null==e)return;const t=Number(e);return Number.isFinite(t)?t:void 0}function Ze(e){if("number"==typeof e)return e>0;if("string"==typeof e){const t=Number(e);return Number.isFinite(t)?t>0:e.length>0&&"0"!==e}return Boolean(e)}function ze(e,t){if(!e)return!1;for(const[A,r]of Object.entries(e))if(t.test(A)&&Ze(r))return!0;return!1}function je(e){if(!e)return;const t=e.match(/<Support[^>]*>([\s\S]*?)<\/Support>/i);if(!t)return;const A=t[1]??"",r=A.match(/<ptzMode>([^<]*)<\/ptzMode>/i)?.[1],s=[];for(const e of A.matchAll(/<item[^>]*>([\s\S]*?)<\/item>/gi)){const t=e[1]??"",A={chnID:Xe(t.match(/<chnID>([^<]*)<\/chnID>/i)?.[1])??0};for(const e of t.matchAll(/<([A-Za-z0-9_]+)>([^<]*)<\/\1>/g)){const t=e[1],r=e[2];if(!t)continue;if("chnID"===t)continue;const s=Xe(r);A[t]=s??r}s.push(A)}const n={items:s};void 0!==r&&(n.ptzMode=r);const i=(e,t)=>{const r=(e=>{const t=A.match(new RegExp(`<${e}>([^<]*)<\\/${e}>`,"i"));return Xe(t?.[1])})(t);void 0!==r&&(n[e]=r)};i("IOInputPortNum","IOInputPortNum"),i("IOOutputPortNum","IOOutputPortNum"),i("diskNum","diskNum"),i("channelNum","channelNum"),i("audioNum","audioNum"),i("ptzCfg","ptzCfg"),i("B485","B485"),i("autoUpdate","autoUpdate"),i("pushAlarm","pushAlarm"),i("ftp","ftp"),i("ftpTest","ftpTest"),i("email","email"),i("wifi","wifi"),i("record","record"),i("wifiTest","wifiTest"),i("rtsp","rtsp"),i("onvif","onvif"),i("audioTalk","audioTalk");const o=(e=>{const t=A.match(new RegExp(`<${e}>([^<]*)<\\/${e}>`,"i"));return t?.[1]})("subVersion");return void 0!==o&&(n.subVersion=o),n}function $e(e){const{channel:t}=e,A=function(e,t){if(!e||"object"!=typeof e)return;const A=e[t],r=e[t+1],s=e.Host,n={...s&&"object"==typeof s?s:{},...A&&"object"==typeof A?A:{},...r&&"object"==typeof r?r:{}};return Object.keys(n).length?n:void 0}(e.abilities,t),r=function(e,t){if(!e?.items?.length)return;const A=e=>{const t=e;let A=0;null==t.name&&(A+=2);const r=["ptzType","ptzControl","ptzPreset","ledCtrl","lightType","battery","audioVersion","motion","encCtrl","newIspCfg","remoteAbility"];for(const e of r)void 0!==t[e]&&(A+=3);return A+=Math.min(10,Math.max(0,Object.keys(t).length-1)),A},r=t=>{const r=e.items.filter((e=>e.chnID===t));if(r.length)return r.slice().sort(((e,t)=>A(t)-A(e)))[0]};return r(t)??r(t+1)}(e.support,t),s=e.support?.ptzMode,n="string"==typeof s?s.toLowerCase():void 0,i=!!r&&Ze(r.battery),o=!!r&&Ze(r.ptzPreset),a=r?r.lightType:void 0,c="number"==typeof a?a:"string"==typeof a?Number(a):void 0,g=!!n&&("none"!==n&&"0"!==n),l=!!n&&(n.includes("pt")||"pt"===n||"ptz"===n),h=!!n&&n.includes("z"),d=ze(A,/battery/i),u=ze(A,/white\s*led|whiteLed|flood\s*light|floodlight/i),E=ze(A,/audio\s*alarm|audioAlarm|siren|pushAlarn|audioPlay/i),I=ze(A,/ptz/i),Q=ze(A,/zoom|zoomFocus|StartZoomFocus/i),B=ze(A,/preset/i),C=ze(A,/(^|_)pir/i),p=l||I,f=l||I,m=h||Q,y=o||B,D={channel:t,hasPan:p,hasTilt:f,hasZoom:m,hasPresets:y,hasPtz:g||p||f||m||y,hasBattery:i||d,hasSiren:E,hasFloodlight:Number.isFinite(c)?c>0:u,hasPir:C};return void 0!==n&&(D.ptzMode=n),D}function Ke(e){return new Promise((t=>setTimeout(t,e)))}function et(e,t){const A=new RegExp(`<${t}\\b[^>]*>([\\s\\S]*?)<\\/${t}>`,"g"),r=[];let s;for(;s=A.exec(e);)r.push(s[1]??"");return r}function tt(e){const t=F(e,"audioType"),A=Number.parseInt(F(e,"sampleRate")??"",10),r=Number.parseInt(F(e,"samplePrecision")??"",10),s=Number.parseInt(F(e,"lengthPerEncoder")??"",10),n=F(e,"soundTrack"),i=F(e,"priority");if(!(t&&Number.isFinite(A)&&Number.isFinite(r)&&Number.isFinite(s)&&n))return null;const o={audioType:t,sampleRate:A,samplePrecision:r,lengthPerEncoder:s,soundTrack:n};if(void 0!==i){const e=Number.parseInt(i,10);Number.isFinite(e)&&(o.priority=e)}return o}function At(e,t){const A=4+e.length,r=A%8==0?0:8-A%8,s=12+e.length+r,n=Buffer.alloc(s);return n.writeUInt32LE(1651978544,0),n.writeUInt16LE(A,4),n.writeUInt16LE(A,6),n.writeUInt16LE(256,8),n.writeUInt16LE(t,10),e.copy(n,12),n}var rt=class{client;logger;simpleEvents=new s.EventEmitter;rtspServers=new Set;activeVideoMsgNums=new Map;constructor(e){this.logger=e.logger??console,this.client=new ee(e),this.client.on("event",(e=>{const t=function(e){const t=e.timestamp??Date.now();if("motion"===e.type)return{type:"motion",channel:e.channel,timestamp:t};if("visitor"===e.type)return{type:"doorbell",channel:e.channel,timestamp:t};if("daynight"===e.type)return{type:"daynight",channel:e.channel,timestamp:t};if("ai"===e.type){const A=e.ai,r=A?.type;return{type:r?{people:"people",vehicle:"vehicle",dog_cat:"animal",face:"face",package:"package",other:"other"}[r]:"other",channel:e.channel,timestamp:t}}return null}(e);t&&this.simpleEvents.emit("event",t)}))}normalizeChannel(e){return null==e?0:e}async login(e){await this.client.login(e)}async close(){await this.cleanup(),await this.client.close()}async cleanup(){const e=Array.from(this.rtspServers);this.rtspServers.clear(),await Promise.allSettled(e.map((async e=>{try{await e.stop()}catch(e){this.logger.error("[ReolinkBaichuanApi] Error stopping RTSP server during cleanup:",e)}}))),e.length>0&&this.logger.info(`[ReolinkBaichuanApi] Cleaned up ${e.length} RTSP server(s)`)}async sendXml(e,t=3){this.client.loggedIn||await this.client.login();try{const A=await this.client.sendFrame(e);if(400===A.header.responseCode){if(t>0){if(0===A.body.length)try{this.client.loggedIn=!1,await this.client.login()}catch{}const r=1500;return await new Promise((e=>setTimeout(e,r))),await this.sendXml(e,t-1)}if(0===A.body.length)throw new Error("Baichuan request failed (responseCode 400, empty body). Possible causes: camera sleeping/waking (battery), expired session, or invalid username/password.")}if(0===A.body.length)return"";return this.client.tryDecryptXml(A.body,A.header.channelId,this.client.enc)}catch(e){throw e}}async getTalkAbility(e){return function(e){const t=et(e,"TalkAbility")[0];if(!t)throw new Error("TalkAbility XML not found in response");return{duplexList:et(t,"duplexList").map((e=>F(e,"duplex"))).filter((e=>!!e)),audioStreamModeList:et(t,"audioStreamModeList").map((e=>F(e,"audioStreamMode"))).filter((e=>!!e)),audioConfigList:et(t,"audioConfig").map(tt).filter((e=>!!e))}}(await this.sendXml({cmdId:10,...void 0!==e?{channel:e}:{}}))}async createTalkSession(e=0,t){this.client.loggedIn||await this.client.login();const A=await this.getTalkAbility(e),r=A.audioConfigList.find((e=>"adpcm"===e.audioType.toLowerCase()))??A.audioConfigList[0];if(!r)throw new Error(`Talk not supported on channel ${e} (no audioConfig in TalkAbility)`);const s=A.duplexList[0]??"FDX",n=A.audioStreamModeList[0]??"followVideoStream",i={channel:e,duplex:s,audioStreamMode:n,audioConfig:r},o=Math.floor(r.lengthPerEncoder/2),a=o+4;if(o<=0||a<=4)throw new Error(`Invalid talk audio config: lengthPerEncoder=${r.lengthPerEncoder}`);const c=function(e){const t=e.audioConfig;return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<TalkConfig version="1.1">\n<channelId>${e.channel}</channelId>\n<duplex>${R(e.duplex)}</duplex>\n<audioStreamMode>${R(e.audioStreamMode)}</audioStreamMode>\n<audioConfig>\n<audioType>${R(t.audioType)}</audioType>\n<sampleRate>${t.sampleRate}</sampleRate>\n<samplePrecision>${t.samplePrecision}</samplePrecision>\n<lengthPerEncoder>${t.lengthPerEncoder}</lengthPerEncoder>\n<soundTrack>${R(t.soundTrack)}</soundTrack>\n</audioConfig>\n</TalkConfig>\n</body>`}(i);await(async()=>{const t=await this.client.sendFrame({cmdId:201,channel:e,payloadXml:c,messageClass:I});if(422!==t.header.responseCode){if(200!==t.header.responseCode)throw new Error(`TalkConfig rejected (responseCode ${t.header.responseCode})`)}else{await this.client.sendFrame({cmdId:11,channel:e,payloadXml:"",messageClass:I});const t=await this.client.sendFrame({cmdId:201,channel:e,payloadXml:c,messageClass:I});if(200!==t.header.responseCode)throw new Error(`TalkConfig rejected after reset (responseCode ${t.header.responseCode})`)}})();const g={channel:e,audioConfig:r,blockSize:o,fullBlockSize:a};let l=Buffer.alloc(0),h=!1,d=!1,u=Date.now();const E=Math.max(1,Math.min(8,Math.floor(t?.blocksPerPayload??1))),Q=async t=>{if(0===t.length)return;if(t.length>E)throw new Error(`Internal error: too many blocks in payload (${t.length})`);const A=[];let s=0;for(const e of t)A.push(At(e,o)),s+=Math.max(0,2*(e.length-4)+1);await this.client.sendBinaryPayloadNoReply({cmdId:202,channel:e,extensionXml:k(e),payload:Buffer.concat(A),messageClass:I});const n=s/r.sampleRate*1e3,i=Date.now();i>u?u=i+n:u+=n;const a=u-Date.now();a>0&&await Ke(a)},B=async()=>{if(!d){d=!0;try{for(;;){if(!(l.length>=a)){if(h){if(l.length>0){const e=Buffer.alloc(a,255);l.copy(e,0),l=Buffer.alloc(0),await Q([e])}break}break}{const e=[];for(;e.length<E&&l.length>=a;)e.push(l.subarray(0,a)),l=l.subarray(a);await Q(e)}}}finally{d=!1}}};return{info:g,sendAudio:async e=>{if(h)throw new Error("Talk session is closed");0!==e.length&&(l=0===l.length?e:Buffer.concat([l,e]),await B())},stop:async()=>{if(h)return;h=!0,await B();const t=u-Date.now();t>0?await Ke(t+100):await Ke(100);const A=await this.client.sendFrame({cmdId:11,channel:e,payloadXml:"",messageClass:I});if(200!==A.header.responseCode)throw new Error(`TalkReset rejected (responseCode ${A.header.responseCode})`)}}}async sendBinary(e){return await this.client.login(),await this.client.sendBinary(e)}async getNetPort(){const e={},t=(await this.sendXml({cmdId:37})).matchAll(/<([A-Za-z]+)Port[^>]*>([\s\S]*?)<\/\1Port>/g);for(const A of t){const t=(A[1]??"").toLowerCase(),r=A[2]??"",s={};for(const e of r.matchAll(/<([A-Za-z]+)>(-?\d+)<\/\1>/g)){const t=(e[1]??"").toLowerCase(),A=Number(e[2]);Number.isFinite(A)&&(s[t]=A)}Object.keys(s).length&&(e[t]=s)}return e}async setPortEnabled(e){const t=`${e.port[0].toUpperCase()}${e.port.slice(1)}Port`,A=`<?xml version="1.0" encoding="UTF-8" ?><body><${t} version="1.1"><enable>${e.enable?1:0}</enable></${t}></body>`;await this.sendXml({cmdId:36,payloadXml:A})}async getInfo(e){const t={cmdId:null==e?80:318};void 0!==e&&(t.channel=e);return function(e,t){const A={};for(const r of t){const t=F(e,r);void 0!==t&&(A[r]=t)}return A}(await this.sendXml(t),["type","hardwareVersion","firmwareVersion","itemNo","serialNumber","name"])}async getEncXml(e){const t=this.normalizeChannel(e);return await this.sendXml({cmdId:56,channel:t})}async getStreamMetadata(e){const t=this.normalizeChannel(e),A=await this.getEncXml(t),r=[];let s=!0;const n={0:"H.264",1:"H.265",2:"MJPEG",3:"MPEG4"},i=A.match(/<mainStream[^>]*>([\s\S]*?)<\/mainStream>/);if(i){const e=i[1]??"",t=Number(F(e,"width")??"0"),A=Number(F(e,"height")??"0"),o=Number(F(e,"videoEncType")??"0"),a=Number(F(e,"frame")??"0"),c=Number(F(e,"bitRate")??"0"),g=Number(F(e,"audio")??"0"),l=F(e,"enable");(void 0===l||"1"===l||"true"===l)&&(r.push({profile:"main",audio:g,width:t,height:A,videoEncType:n[o]??`Unknown(${o})`,videoEncTypeInt:o,frameRate:a,bitRate:c}),s=s&&1===g)}const o=A.match(/<subStream[^>]*>([\s\S]*?)<\/subStream>/);if(o){const e=o[1]??"",t=Number(F(e,"width")??"0"),A=Number(F(e,"height")??"0"),i=Number(F(e,"videoEncType")??"0"),a=Number(F(e,"frame")??"0"),c=Number(F(e,"bitRate")??"0"),g=Number(F(e,"audio")??"0"),l=F(e,"enable");(void 0===l||"1"===l||"true"===l)&&(r.push({profile:"sub",audio:g,width:t,height:A,videoEncType:n[i]??`Unknown(${i})`,videoEncTypeInt:i,frameRate:a,bitRate:c}),s=s&&1===g)}const a=["extStream","thirdStream","externStream","extraStream"];for(const e of a){const t=A.match(new RegExp(`<${e}[^>]*>([\\s\\S]*?)<\\/${e}>`));if(!t)continue;const i=t[1]??"",o=Number(F(i,"width")??"0"),a=Number(F(i,"height")??"0"),c=Number(F(i,"videoEncType")??"0"),g=Number(F(i,"frame")??"0"),l=Number(F(i,"bitRate")??"0"),h=Number(F(i,"audio")??"0"),d=F(i,"enable");(void 0===d||"1"===d||"true"===d)&&(r.push({profile:"ext",audio:h,width:o,height:a,videoEncType:n[c]??`Unknown(${c})`,videoEncTypeInt:c,frameRate:g,bitRate:l}),s=s&&1===h);break}return{channel:t,streams:r,audioEnabled:s}}async setEncXml(e,t){const A="number"==typeof e?this.normalizeChannel(e):0,r="number"==typeof e?t:e;await this.sendXml({cmdId:57,channel:A,payloadXml:r})}async setStreamVideoCodec(e,t,A){const r="number"==typeof e?this.normalizeChannel(e):this.normalizeChannel(A),s="number"==typeof e?t:e,n="H.265"===("number"==typeof e?A:t)?1:0,i="main"===s?["mainStream"]:"sub"===s?["subStream"]:["extStream","thirdStream","externStream","extraStream"],o=await this.getEncXml(r);let a=null;for(const e of i){const t=new RegExp(`(<${e}[^>]*>[\\s\\S]*?<videoEncType>)(\\d+)(</videoEncType>)`);if(!t.test(o))continue;const A=o.replace(t,`$1${n}$3`);if(A!==o){a=A;break}}if(!a)throw new Error(`Could not find <videoEncType> for profile=${s} (tags=${i.join(",")}) in GetEnc XML (channel=${r}).`);await this.setEncXml(r,a)}async setNetPort(e){null!=e.onvifEnable&&await this.setPortEnabled({port:"onvif",enable:1===e.onvifEnable}),null!=e.rtmpEnable&&await this.setPortEnabled({port:"rtmp",enable:1===e.rtmpEnable}),null!=e.rtspEnable&&await this.setPortEnabled({port:"rtsp",enable:1===e.rtspEnable})}async reboot(e){const t={cmdId:23};void 0!==e&&(t.channel=e),await this.sendXml(t)}async ping(){await this.sendXml({cmdId:93})}async getGeneralXml(e){const t={cmdId:104};return void 0!==e&&(t.channel=e),await this.sendXml(t)}async setGeneralXml(e,t){const A="number"==typeof e||void 0===e?e:void 0,r="string"==typeof e?e:t;await this.sendXml({cmdId:105,...void 0===A?{}:{channel:A},payloadXml:r})}static buildChannelExtensionXml(e){return`<?xml version="1.0" encoding="UTF-8" ?><Extension version="1.1"><channelId>${R(String(e))}</channelId></Extension>`}async getMotionState(e){const t=F(await this.sendXml({cmdId:46,...void 0!==e?{channel:e}:{}}),"enable");return"1"===t||"true"===t}async getOsd(e){const t=this.normalizeChannel(e),A=await this.sendXml({cmdId:26,channel:t});return{channel:t,osdChannel:{enable:Number(F(A,"enable")??"0"),name:F(A,"name")??"",pos:F(A,"pos")??""},osdTime:{enable:Number(F(A,"timeEnable")??"0"),pos:F(A,"timePos")??""},watermark:Number(F(A,"watermark")??"0")}}async setOsd(e,t){const A="number"==typeof e?this.normalizeChannel(e):this.normalizeChannel(t),r="number"==typeof e?t:e,s=`<?xml version="1.0" encoding="UTF-8" ?><body><Osd version="1.1"><channel>${A}</channel><osdChannel><enable>${r.osdChannel.enable}</enable><name>${R(r.osdChannel.name)}</name><pos>${R(r.osdChannel.pos)}</pos></osdChannel><osdTime><enable>${r.osdTime.enable}</enable><pos>${R(r.osdTime.pos)}</pos></osdTime><watermark>${r.watermark}</watermark></Osd></body>`;await this.sendXml({cmdId:25,channel:A,payloadXml:s})}async getAiState(e){const t=await this.sendXml({cmdId:342,...void 0!==e?{channel:e}:{}});return{channel:e??0,alarm_state:Number(F(t,"alarm_state")??"0"),support:Number(F(t,"support")??"0")}}async getSnapshot(e=0){const t=`<body><Snap version="1.1"><channelId>${e}</channelId><logicChannel>${e}</logicChannel><time>0</time><fullFrame>0</fullFrame><streamType>main</streamType></Snap></body>`;return await this.client.login(),await this.client.sendBinary({cmdId:109,channel:e,payloadXml:t,extensionXml:N(e),timeoutMs:15e3})}async subscribeEvents(){await this.client.login();await this.client.sendXml({cmdId:31,extensionXml:'<?xml version="1.0" encoding="UTF-8" ?><Extension version="1.1"><channelId>251</channelId></Extension>'}),this.client.subscribed=!0}async unsubscribeEvents(){this.client.subscribed=!1}async getEvents(e){const t=await this.sendXml({cmdId:33,...void 0!==e?{channel:e}:{}});return{channel:e??0,ai:{channel:e??0,alarm_state:Number(F(t,"alarm_state")??"0")}}}async getTwoWayAudioConfig(e){const t=F(await this.sendXml({cmdId:10,...void 0!==e?{channel:e}:{}}),"audioStreamMode"),A={channel:e??0,enabled:"mixAudioStream"===t||"followVideoStream"===t};return t&&(A.mode=t),A}async startTwoWayAudio(e){await this.sendXml({cmdId:10,...void 0!==e?{channel:e}:{}})}async sendAudioData(e,t){const A={cmdId:10,payloadXml:""};void 0!==t&&(A.channel=t),await this.client.sendBinary(A)}async stopTwoWayAudio(e){}async startVideoStream(e,t="sub"){const A=this.normalizeChannel(e),r=A,s={main:{handle:0,streamType:0,streamName:"mainStream"},sub:{handle:256,streamType:1,streamName:"subStream"},ext:{handle:1024,streamType:0,streamName:"externStream"}}[t];if(!s)throw new Error(`Invalid stream profile: ${t}`);if(!s.streamName)throw new Error(`Stream name not found for profile: ${t}, config: ${JSON.stringify(s)}`);const n=s.streamName;if("string"!=typeof n)throw new Error(`streamName is not a string: ${typeof n}, value: ${n}, config: ${JSON.stringify(s)}`);const i=function(e,t,A){if(!t||"string"!=typeof t)throw new Error(`buildPreviewXml: streamType is required (string) but got: ${typeof t} = ${t}`);return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<Preview version="1.0">\n${void 0!==A?`<channelId>${A}</channelId>\n`:""}<handle>${e}</handle>\n<streamType>${R(t)}</streamType>\n</Preview>\n</body>`}(s.handle,n,r),o="udp"===this.client.getTransport?.()?3:1;let a;for(let e=1;e<=o;e++){const n=this.client.peekNextMsgNum();this.client.subscribeVideoStream(3,n);try{const e={cmdId:3,channel:A,channelIdOverride:r,extensionXml:N(r),payloadXml:i,messageClass:I,streamType:s.streamType},n=await this.client.sendFrame(e);if(200!==n.header.responseCode)throw new Error(`Video stream request rejected (response_code ${n.header.responseCode}). Neolink expects response_code 200, camera returned ${n.header.responseCode}`);return void this.activeVideoMsgNums.set(`${A}:${t}`,n.header.msgNum)}catch(t){a=t;try{this.client.unsubscribeVideoStream(3,n)}catch{}if(e<o){await new Promise((e=>setTimeout(e,250)));continue}}}throw a instanceof Error?a:new Error(String(a))}getActiveVideoMsgNum(e,t="sub"){const A=this.normalizeChannel(e);return this.activeVideoMsgNums.get(`${A}:${t}`)}async stopVideoStream(e,t="sub"){const A=this.normalizeChannel(e),r=A,s={main:{handle:0,streamType:0},sub:{handle:256,streamType:1},ext:{handle:1024,streamType:0}}[t],n=function(e,t){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<Preview version="1.0">\n${void 0!==t?`<channelId>${t}</channelId>\n`:""}<handle>${e}</handle>\n</Preview>\n</body>`}(s.handle,r),i=`${A}:${t}`,o=this.activeVideoMsgNums.get(i);this.activeVideoMsgNums.delete(i);try{await this.client.sendFrame({cmdId:4,channel:A,channelIdOverride:r,extensionXml:N(r),payloadXml:n,messageClass:I,streamType:s.streamType,...void 0!==o?{msgNumOverride:o}:{},timeoutMs:2e3})}catch{}}async getPtzPresets(e){const t=this.normalizeChannel(e),A=t,r=await this.sendXml({cmdId:190,channel:t,channelIdOverride:A,extensionXml:N(A),messageClass:I,streamType:0});return this.parsePtzPresetList(r).filter((e=>void 0===e.enable||"1"===e.enable)).filter((e=>void 0===e.name||""!==String(e.name).trim())).map((e=>({id:e.id,name:e.name??`Preset ${e.id}`})))}parsePtzPresetList(e){const t=[],A=e.matchAll(/<preset\b[^>]*>([\s\S]*?)<\/preset>/gi);for(const e of A){const A=e[1]??"",r=/<id>([^<]*)<\/id>/i.exec(A)?.[1];if(!r)continue;const s=Number(r);if(!Number.isFinite(s))continue;const n=/<name>([^<]*)<\/name>/i.exec(A),i=/<enable>([^<]*)<\/enable>/i.exec(A),o={id:s},a=n?.[1],c=i?.[1];void 0!==a&&(o.name=a),void 0!==c&&(o.enable=c),t.push(o)}return t}async getPtzPresetsRaw(e){const t=this.normalizeChannel(e),A=t,r=await this.sendXml({cmdId:190,channel:t,channelIdOverride:A,extensionXml:N(A),messageClass:I,streamType:0});return this.parsePtzPresetList(r)}async ptz(e,t){const A="number"==typeof e?this.normalizeChannel(e):0,r="number"==typeof e?t:e,s=A;let n,i;if("stop"===r.action)n="stop";else{const e={Left:"left",Right:"right",Up:"up",Down:"down"}[r.command];if(!e)throw new Error(`Unsupported PTZ command for MSG_ID_PTZ_CONTROL: ${r.command}`);n=e}if("stop"===n)i=0;else{const e=r.speed;i=void 0===e?32:e>0&&e<=1?Math.max(1,64*e):e}const o=function(e,t,A){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<PtzControl version="1.1">\n<channelId>${e}</channelId>\n<command>${R(t)}</command>\n<speed>${A}</speed>\n</PtzControl>\n</body>`}(s,n,i),a=N(s),c=await this.client.sendFrame({cmdId:18,channel:A,channelIdOverride:s,extensionXml:a,payloadXml:o,messageClass:I,streamType:0});if(200!==c.header.responseCode){let e="";if(c.body.length>0)try{const t=this.client.tryDecryptXml;if(t){const A=t.call(this.client,c.body,c.header.channelId,this.client.enc);A&&(e=` - Error details: ${A.substring(0,200)}`)}}catch{}throw new Error(`PTZ control rejected (response_code ${c.header.responseCode})${e}`)}if("start"===r.action&&"stop"!==n){const e=r.autoStopMs??500;e>0&&setTimeout((()=>{this.ptz(A,{action:"stop",command:r.command}).catch((()=>{}))}),e)}}async moveToPtzPreset(e,t){const A=void 0===t?this.normalizeChannel(void 0):this.normalizeChannel(e),r=A,s=function(e,t,A,r){return U(e,t,A,void 0===r?void 0:{name:r})}(r,void 0===t?e:t,"toPos"),n=N(r),i=await this.client.sendFrame({cmdId:19,channel:A,channelIdOverride:r,extensionXml:n,payloadXml:s,messageClass:I,streamType:0});if(200!==i.header.responseCode)throw new Error(`PTZ preset move rejected (response_code ${i.header.responseCode})`)}async setPtzPreset(e,t,A){const r="string"==typeof t?this.normalizeChannel(A):this.normalizeChannel(e),s=r,n=U(s,"string"==typeof t?e:t,"setPos",{name:"string"==typeof t?t:A,enable:1}),i=N(s),o=await this.client.sendFrame({cmdId:19,channel:r,channelIdOverride:s,extensionXml:i,payloadXml:n,messageClass:I,streamType:0});if(200!==o.header.responseCode)throw new Error(`PTZ preset save rejected (response_code ${o.header.responseCode})`)}async deletePtzPreset(e,t){const A=void 0===t?this.normalizeChannel(void 0):this.normalizeChannel(e),r=void 0===t?e:t,s=A,n=N(s);let i;try{const e=await this.getPtzPresetsRaw(A);i=e.find((e=>e.id===r))?.name}catch{}const o=[{label:"command=delPos",payloadXml:U(s,r,"delPos")},{label:"enable=0 (no name)",payloadXml:U(s,r,"setPos",{enable:0})},{label:"name='' (no enable)",payloadXml:U(s,r,"setPos",{name:""})},{label:"enable=0 name=''",payloadXml:U(s,r,"setPos",{name:"",enable:0})},...i?[{label:"enable=0 name=current",payloadXml:U(s,r,"setPos",{name:i,enable:0})}]:[],{label:"enable=0 name='Preset N'",payloadXml:U(s,r,"setPos",{name:`Preset ${r}`,enable:0})}];let a,c=!1;for(const e of o)try{const t=await this.client.sendFrame({cmdId:19,channel:A,channelIdOverride:s,extensionXml:n,payloadXml:e.payloadXml,messageClass:I,streamType:0});if(200!==t.header.responseCode)throw new Error(`PTZ preset delete rejected (response_code ${t.header.responseCode})`);c=!0;try{const e=(await this.getPtzPresetsRaw(A)).find((e=>e.id===r));if(!e)return;const t=void 0!==e.name&&""===String(e.name).trim(),s=void 0!==e.enable&&"0"===String(e.enable).trim();if(t||s)return}catch(e){a=e}}catch(e){a=e}if(!c)throw a instanceof Error?a:new Error("PTZ preset delete failed");this.logger.warn("PTZ presets (baichuan): deletePtzPreset did not take effect (firmware ignored request)",{channel:A,channelId:s,presetId:r})}async getPtzPosition(e){const t=this.normalizeChannel(e),A=await this.sendXml({cmdId:433,channel:t}),r=F(A,"pPos"),s=F(A,"tPos"),n={};return void 0!==r&&(n.pan=Number(r)),void 0!==s&&(n.tilt=Number(s)),n}async getZoomFocus(e){const t=this.normalizeChannel(e),A=t,r=await this.sendXml({cmdId:294,channel:t,channelIdOverride:A,extensionXml:N(A),messageClass:I,streamType:0}),s=e=>{const t=new RegExp(`<${e}>([\\s\\S]*?)</${e}>`).exec(r),A=t?.[1];if(!A)return;const s=F(A,"maxPos"),n=F(A,"minPos"),i=F(A,"curPos");return void 0!==s&&void 0!==n&&void 0!==i?{maxPos:Number(s),minPos:Number(n),curPos:Number(i)}:void 0},n={},i=s("zoom"),o=s("focus");return i&&(n.zoom=i),o&&(n.focus=o),n}async zoomToFactor(e,t){const A=void 0===t?0:this.normalizeChannel(e),r=void 0===t?e:t,s=A,n=(await this.getZoomFocus(A)).zoom;if(!n)throw new Error("Camera did not return <zoom> info (zoom may be unsupported)");const i=Math.round(1e3*r),o=function(e,t){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<StartZoomFocus version="1.1">\n<channelId>${e}</channelId>\n<command>zoomPos</command>\n<movePos>${Math.trunc(t)}</movePos>\n</StartZoomFocus>\n</body>`}(s,Math.min(n.maxPos,Math.max(n.minPos,i))),a=N(s),c=await this.client.sendFrame({cmdId:295,channel:A,channelIdOverride:s,extensionXml:a,payloadXml:o,messageClass:I,streamType:0});if(200!==c.header.responseCode)throw new Error(`Zoom rejected (response_code ${c.header.responseCode})`)}async getBatteryStatus(e){const t=this.normalizeChannel(e);try{const e=await Promise.race([this.sendXml({cmdId:252,channel:t}),new Promise(((e,t)=>setTimeout((()=>t(new Error("Timeout"))),5e3)))]),A=F(e,"batteryPercent"),r=F(e,"chargeStatus"),s={channel:t,sleeping:!1};return void 0!==A&&(s.batteryPercent=Number(A)),void 0!==r&&(s.chargeStatus=r),s}catch(e){const A={channel:t,sleeping:!0};return e instanceof Error&&e.message,A}}async getBatteryInfo(e){const t=this.normalizeChannel(e),A=await this.sendXml({cmdId:252,channel:t}),r=F(A,"batteryPercent"),s=F(A,"chargeStatus"),n={channel:t};return void 0!==r&&(n.batteryPercent=Number(r)),void 0!==s&&(n.chargeStatus=s),n}async wakeUp(e,t){const A=this.normalizeChannel(e);try{await this.getEncXml(A);const e=t??1500;e>0&&await new Promise((t=>setTimeout(t,e)))}catch(e){throw e}}async isSleeping(e){const t=this.normalizeChannel(e);try{return await Promise.race([this.getBatteryInfo(t),new Promise(((e,t)=>setTimeout((()=>t(new Error("Timeout"))),5e3)))]),!1}catch(e){return!0}}async getPirInfo(e){const t=this.normalizeChannel(e),A=await this.sendXml({cmdId:212,channel:t}),r=F(A,"enable"),s=F(A,"sensiValue"),n=F(A,"reduceFalseAlarm"),i=F(A,"interval"),o=F(A,"intervalSecMax"),a={channel:t};return void 0!==r&&(a.enable=Number(r)),void 0!==s&&(a.sensitive=Number(s)),void 0!==n&&(a.reduceAlarm=Number(n)),void 0!==i&&(a.interval=Number(i)),void 0!==o&&(a.intervalMax=Number(o)),{enabled:"1"===r,state:a}}async setPirInfo(e,t){const A="number"==typeof e?e:t,r="number"==typeof e?t:e,s=this.normalizeChannel(A);let n=await this.sendXml({cmdId:212,channel:s});void 0!==r.enable&&(n=n.replace(/<enable>[^<]*<\/enable>/,`<enable>${r.enable}</enable>`)),void 0!==r.sensitive&&(n=n.replace(/<sensiValue>[^<]*<\/sensiValue>/,`<sensiValue>${r.sensitive}</sensiValue>`)),void 0!==r.reduceAlarm&&(n=n.replace(/<reduceFalseAlarm>[^<]*<\/reduceFalseAlarm>/,`<reduceFalseAlarm>${r.reduceAlarm}</reduceFalseAlarm>`)),void 0!==r.interval&&(n=n.replace(/<interval>[^<]*<\/interval>/,`<interval>${r.interval}</interval>`)),await this.sendXml({cmdId:213,channel:s,payloadXml:n})}async setMotionDetection(e,t,A){const r="number"==typeof e?e:A,s="number"==typeof e?t:e,n="number"==typeof e?A:t,i=this.normalizeChannel(r);let o=await this.sendXml({cmdId:46,channel:i});void 0!==s&&(o=o.replace(/<enable>[^<]*<\/enable>/,`<enable>${s?"1":"0"}</enable>`)),void 0!==n&&(o=o.replace(/<sensitivityDefault>[^<]*<\/sensitivityDefault>/,`<sensitivityDefault>${n}</sensitivityDefault>`)),await this.sendXml({cmdId:47,channel:i,payloadXml:o})}async setAiDetection(e,t,A,r){const s="number"==typeof e?e:r,n="number"==typeof e?t:e,i="number"==typeof e?A:t,o="number"==typeof e?r:A,a=this.normalizeChannel(s),c=`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<GetAiAlarm version="1.1">\n<channelId>${a+1}</channelId>\n<aiType>${R(n)}</aiType>\n</GetAiAlarm>\n</body>`;let g=await this.sendXml({cmdId:342,channel:a,payloadXml:c});void 0!==i&&(g=g.replace(/<sensitivity>[^<]*<\/sensitivity>/,`<sensitivity>${i}</sensitivity>`)),void 0!==o&&(g=g.replace(/<stayTime>[^<]*<\/stayTime>/,`<stayTime>${o}</stayTime>`)),await this.sendXml({cmdId:343,channel:a,payloadXml:g})}async getSiren(e){try{const t=await this.sendXml({cmdId:547,...void 0!==e?{channel:e}:{}});return{enabled:"1"===F(t,"status")}}catch{return{enabled:!1}}}async setSiren(e,t,A){const r="boolean"==typeof e?A??0:e,s="boolean"==typeof e?e:t,n="boolean"==typeof e?t:A,i=void 0!==r?r+1:void 0;let o;if(void 0!==n)o=T(i,n);else{o=M(i,s?1:0)}try{await this.sendXml({cmdId:263,...void 0!==r?{channel:r}:{},payloadXml:o})}catch(e){if(!0!==s||void 0!==n)throw e;o=T(i,2),await this.sendXml({cmdId:263,...void 0!==r?{channel:r}:{},payloadXml:o})}}async getWhiteLedState(e){const t=this.normalizeChannel(e),A=await this.sendXml({cmdId:B,channel:t}),r=F(A,"enable"),s=F(A,"state"),n=F(A,"status"),i=F(A,"brightness_cur"),o={enabled:"1"===r||"1"===s||"1"===n};return void 0!==i&&(o.brightness=Number(i)),o}async setWhiteLedState(e,t,A){const r="number"==typeof e?e:A??0,s="number"==typeof e?t:e,n="number"==typeof e?A:t,i=this.normalizeChannel(r);if(void 0!==s)try{const e=v(i,s?1:0,s?180:0);await this.sendXml({cmdId:288,channel:i,payloadXml:e})}catch(e){let t=await this.sendXml({cmdId:B,channel:i});/<enable>[^<]*<\/enable>/i.test(t)&&(t=t.replace(/<enable>[^<]*<\/enable>/i,`<enable>${s?1:0}</enable>`)),/<state>[^<]*<\/state>/i.test(t)&&(t=t.replace(/<state>[^<]*<\/state>/i,`<state>${s?1:0}</state>`)),/<status>[^<]*<\/status>/i.test(t)&&(t=t.replace(/<status>[^<]*<\/status>/i,`<status>${s?1:0}</status>`)),await this.sendXml({cmdId:290,channel:i,payloadXml:t})}if(void 0!==n){let e=await this.sendXml({cmdId:B,channel:i});/<brightness_cur>[^<]*<\/brightness_cur>/i.test(e)&&(e=e.replace(/<brightness_cur>[^<]*<\/brightness_cur>/i,`<brightness_cur>${n}</brightness_cur>`)),/<enable>[^<]*<\/enable>/i.test(e)&&(e=e.replace(/<enable>[^<]*<\/enable>/i,"<enable>1</enable>")),await this.sendXml({cmdId:290,channel:i,payloadXml:e})}}async getAbilityInfo(){const e=this.client.username,t=`<?xml version="1.0" encoding="UTF-8" ?>\n<Extension version="1.1">\n<userName>${R(e)}</userName>\n<token>system, streaming, PTZ, IO, security, replay, disk, network, alarm, record, video, image</token>\n</Extension>`;const A=await this.sendXml({cmdId:151,extensionXml:t}),r={},s=["system","streaming","PTZ","IO","security","replay","disk","network","alarm","record","video","image"];for(const e of s){const t=new RegExp(`<${e}[^>]*>([\\s\\S]*?)<\\/${e}>`,"i"),s=A.match(t);if(s){const e=(s[1]??"").matchAll(/<subModule[^>]*>([\s\S]*?)<\/subModule>/g);for(const t of e){const e=t[1]??"",A=F(e,"channelId")||F(e,"chnID"),s=F(e,"abilityValue");if(s){const e=A?Number(A):"Host";r[e]||(r[e]={});const t=s.split(",").map((e=>e.trim())).filter(Boolean);for(const A of t)r[e][A]=1}}}}const n=A.match(/<AbilityInfo[^>]*>([\s\S]*?)<\/AbilityInfo>/);if(n){const e=(n[1]??"").matchAll(/<([A-Za-z]+)[^>]*>([^<]*)<\/\1>/g);r.Host||(r.Host={});for(const t of e){const e=t[1],A=t[2];if(e&&void 0!==A&&!["image","video","subModule"].includes(e)&&"channelId"!==e&&"abilityValue"!==e){const t=Number(A);r.Host[e]=Number.isNaN(t)?A:t}}}return r.Host&&0===Object.keys(r.Host).length&&delete r.Host,r}async getAbilityVersion(e,t){const A=(await this.getAbilityInfo())[null!=t?t:"Host"];if(!A)return 0;const r=A[e];if("number"==typeof r)return r;if("string"==typeof r){const e=Number(r);return Number.isNaN(e)?0:e}return 0}async getSupportInfo(){return je(await this.sendXml({cmdId:199}))}async getDeviceCapabilities(e){const t=this.normalizeChannel(e),[A,r]=await Promise.allSettled([this.getAbilityInfo(),this.getSupportInfo()]),s="fulfilled"===A.status?A.value:void 0,n="fulfilled"===r.status?r.value:void 0,i={channel:t};s&&(i.abilities=s),n&&(i.support=n);const o=$e(i);if(!o.hasSiren){const e=async()=>{try{return await this.sendXml({cmdId:547,channel:t,timeoutMs:1e3}),!0}catch{return!1}},A=async()=>{try{const e=M(t+1,0);return await this.sendXml({cmdId:263,channel:t,payloadXml:e,timeoutMs:1e3}),!0}catch{return!1}};(await e()||await A())&&(o.hasSiren=!0)}if(!o.hasFloodlight){const e=(n?.items??[]).filter((e=>e.chnID===t||e.chnID===t+1)),A=e=>{const t=e?.lightType;if("number"==typeof t)return t;if("string"==typeof t){const e=Number(t);return Number.isFinite(e)?e:void 0}},r=e.map((e=>A(e))).filter((e=>Number.isFinite(e)));if(r.some((e=>0===e)));else if(r.some((e=>e>0)))o.hasFloodlight=!0;else try{const e=await this.sendXml({cmdId:B,channel:t,timeoutMs:1e3});/(<FloodlightTask\b|<FloodlightManual\b|<FloodlightStatusList\b|<WhiteLed\b)/i.test(e)&&(o.hasFloodlight=!0)}catch{}}let a;if(o.hasPresets){const e=(await Promise.allSettled([this.getPtzPresets(t)]))[0];"fulfilled"===e?.status&&(a=e.value,o.hasPresets=a.length>0)}const c={capabilities:o};return s&&(c.abilities=s),n&&(c.support=n),a&&(c.presets=a),c}async createRtspStream(e,t,A){const r="number"==typeof e?this.normalizeChannel(e):0,s="number"==typeof e?t:e,n="number"==typeof e?A:t;let i;try{const e=await this.getStreamMetadata(r);if(Array.isArray(e)){const t=e.find((e=>e.profile===s));t?.videoEncType&&(i=t.videoEncType)}else if(e&&"object"==typeof e&&"streams"in e){const t=e.streams;if(Array.isArray(t)){const e=t.find((e=>e?.profile===s));e?.videoEncType&&(i=e.videoEncType)}}}catch(e){this.logger.warn(`[ReolinkBaichuanApi] Could not fetch stream metadata, will auto-detect codec: ${e instanceof Error?e.message:e}`)}const o={api:this,channel:r,profile:s,...void 0!==n?.listenHost?{listenHost:n.listenHost}:{},...void 0!==n?.listenPort?{listenPort:n.listenPort}:{},...void 0!==n?.path?{path:n.path}:{},logger:this.logger},a=new _e(o);return await a.start(),this.rtspServers.add(a),a.once("close",(()=>{this.rtspServers.delete(a)})),a}};function st(e,t,A){const r=[];let s=0;const n=(e,r)=>{if(4===t)return"be"===A?e.readUInt32BE(r):e.readUInt32LE(r);if(2===t)return"be"===A?e.readUInt16BE(r):e.readUInt16LE(r);if(3===t){const t=e[r],s=e[r+1],n=e[r+2];return"be"===A?(t<<16|s<<8|n)>>>0:(n<<16|s<<8|t)>>>0}return e.readUInt8(r)};for(;s+t<=e.length;){const A=n(e,s);if(s+=t,!A)return[];if(s+A>e.length)return[];const i=e.subarray(s,s+A);s+=A,i.length&&r.push(i)}return s!==e.length?[]:r}function nt(e,t){if(!t.length)return Number.POSITIVE_INFINITY;let A=0;for(const r of t)if(r.length){if(128&r[0])A+=10;else if("H264"===e){const e=31&r[0];(e<1||e>23)&&A++}else if("H265"===e){if(r.length<2){A++;continue}const e=r[0]>>1&63;e>=0&&e<=29||e>=32&&e<=40||e>=48&&e<=50||A++}}else A++;return A}function it(e,t){if(!e?.length)return[];const A=[],r=function(e,t=64){if(!e?.length)return-1;const A=Math.min(e.length,Math.max(0,t));for(let t=0;t+3<A;t++)if(0===e[t]&&0===e[t+1]){if(1===e[t+2])return t;if(0===e[t+2]&&1===e[t+3])return t}return-1}(e,64);if(r>=0){const t=function(e){const t=[],A=e.length,r=t=>{if(t+3<=A&&0===e[t]&&0===e[t+1]){if(1===e[t+2])return 3;if(t+4<=A&&0===e[t+2]&&1===e[t+3])return 4}return 0};let s=0;for(;s<A&&!r(s);)s++;for(;s<A;){const n=r(s);if(!n){s++;continue}const i=s+n;let o=i;for(;o<A&&!r(o);)o++;if(i<o){const A=e.subarray(i,o);A.length>0&&t.push(A)}s=o}return t}(0===r?e:e.subarray(r));t.length&&A.push(t)}A.push(st(e,4,"be")),A.push(st(e,4,"le")),A.push(st(e,3,"be")),A.push(st(e,3,"le")),A.push(st(e,2,"be")),A.push(st(e,2,"le")),A.push(st(e,1,"be"));const s=function(e){if(e.length>=4&&0===e[0]&&0===e[1]){if(1===e[2])return e.subarray(3);if(0===e[2]&&1===e[3])return e.subarray(4)}return e}(e);s.length&&A.push([s]);let n=[],i=Number.POSITIVE_INFINITY;for(const e of A){if(!e.length)continue;const A=nt(t,e);if(A<i&&(i=A,n=e,0===i))break}return n}function ot(e){const t=it(e,"H264");let A,r,s;for(const e of t){if(e.length<1)continue;const t=31&e[0];if(7===t){if(A=e,e.length>=4){s=Buffer.from([e[1],e[2],e[3]]).toString("hex")}}else 8===t&&(r=e)}const n={};return A&&(n.sps=A),r&&(n.pps=r),s&&(n.profileLevelId=s),n}function at(e){const t=it(e,"H265");let A,r,s;for(const e of t){if(e.length<2)continue;const t=e[0]>>1&63;32===t?A=e:33===t?r=e:34===t&&(s=e)}const n={};return A&&(n.vps=A),r&&(n.sps=r),s&&(n.pps=s),n}var ct=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350];function gt(e){if(e.length<7)return null;if(255!==e[0]||240&~e[1])return null;const t=!(1&~e[1]),A=((192&e[2])>>6)+1,r=(60&e[2])>>2,s=ct[r]??0,n=(1&e[2])<<2|(192&e[3])>>6;if(!s||!n)return null;const i=t?7:9;if(e.length<i)return null;return{headerLength:i,sampleRate:s,channels:n,configHex:((31&A)<<11|(15&r)<<7|(15&n)<<3).toString(16).padStart(4,"0")}}var lt=class{constructor(e){this.payloadType=e,this.seq=r.randomBytes(2).readUInt16BE(0)}seq=0;timestamp=0;ssrc=r.randomBytes(4).readUInt32BE(0);setTimestamp(e){this.timestamp=e>>>0}getTimestamp(){return this.timestamp>>>0}advanceTimestamp(e){this.timestamp=this.timestamp+(e>>>0)>>>0}writePacket(e,t){const A=Buffer.alloc(12);return A[0]=128,A[1]=(t?128:0)|127&this.payloadType,A.writeUInt16BE(65535&this.seq,2),A.writeUInt32BE(this.timestamp>>>0,4),A.writeUInt32BE(this.ssrc>>>0,8),this.seq=this.seq+1&65535,Buffer.concat([A,e])}};function ht(e,t,A,r,s){const n=A.maxRtpPayload,i=[];if(e.length<=n)return i.push(t.writePacket(e,r&&s)),i;const o=e[0],a=31&o,c=128&o|96&o|28,g=e.subarray(1);let l=0;for(;l<g.length;){const e=g.length-l,A=Math.min(e,n-2),o=0===l,h=l+A>=g.length,d=(o?128:0)|(h?64:0)|31&a,u=Buffer.concat([Buffer.from([c,d]),g.subarray(l,l+A)]);i.push(t.writePacket(u,r&&s&&h)),l+=A}return i}function dt(e,t,A,r,s){const n=A.maxRtpPayload,i=[];if(e.length<=n)return i.push(t.writePacket(e,r&&s)),i;if(e.length<3)return i;const o=e[0],a=o>>1&63,c=129&o|98,g=e[1],l=e.subarray(2);let h=0;for(;h<l.length;){const e=l.length-h,A=Math.min(e,n-3),o=0===h,d=h+A>=l.length,u=(o?128:0)|(d?64:0)|63&a,E=Buffer.concat([Buffer.from([c,g,u]),l.subarray(h,h+A)]);i.push(t.writePacket(E,r&&s&&d)),h+=A}return i}var ut=class e{constructor(e,t,A,r=25,s=1200){this.logger=e,this.videoPayloadType=t,this.maxRtpPayload=s,this.videoRtp=new lt(t),void 0!==A&&(this.audioRtp=new lt(A)),this.fallbackVideoIncrement=Math.max(1,Math.round(this.videoClockRate/Math.max(1,r)))}clients=new Set;closed=!1;videoRtp;audioRtp;videoBaseUs;videoBaseTs;videoLastTs;videoClockRate=9e4;fallbackVideoIncrement;cachedH264ParamSetsAnnexB;cachedH265ParamSetsAnnexB;addClient(e){if(this.closed)return void e.destroy();const t={socket:e,needsKeyframe:!0,sentVideoConfig:!1};this.clients.add(t);const A=()=>{this.clients.delete(t);try{e.destroy()}catch{}};e.on("error",A),e.on("close",A)}static ANNEXB_START_CODE=Buffer.from([0,0,0,1]);static joinAnnexBNals(...t){const A=t.filter((e=>!!e&&e.length>0));if(!A.length)return;const r=[];for(const t of A)r.push(e.ANNEXB_START_CODE,t);return Buffer.concat(r)}updateVideoParamSetsFromAccessUnit(t,A){if(!A?.length)return;if("H264"===t){const{sps:t,pps:r}=ot(A);return void(t&&r&&(this.cachedH264ParamSetsAnnexB=e.joinAnnexBNals(t,r)))}const{vps:r,sps:s,pps:n}=at(A);r&&s&&n&&(this.cachedH265ParamSetsAnnexB=e.joinAnnexBNals(r,s,n))}sendCachedVideoConfigToClient(e,t){if(this.closed)return;if(t.sentVideoConfig)return;const A="H265"===e?this.cachedH265ParamSetsAnnexB:this.cachedH264ParamSetsAnnexB;if(!A?.length)return;const r=it(A,e);if(!r.length)return;const s={maxRtpPayload:this.maxRtpPayload};for(let A=0;A<r.length;A++){const n=r[A],i=A===r.length-1,o="H265"===e?dt(n,this.videoRtp,s,!1,i):ht(n,this.videoRtp,s,!1,i);for(const e of o)this.writeRtpPacketToClient(t,e)}t.sentVideoConfig=!0}close(){if(!this.closed){this.closed=!0;for(const e of Array.from(this.clients))try{e.socket.destroy()}catch{}this.clients.clear()}}writeRtpPacketToClient(e,t){if(e.socket.destroyed||!e.socket.writable)return;const A=Buffer.alloc(2);A.writeUInt16BE(65535&t.length,0);const r=Buffer.concat([A,t]);try{e.socket.write(r)}catch{try{e.socket.destroy()}catch{}}}writeRtpPacketToClients(e,t){for(const A of this.clients)t(A)&&this.writeRtpPacketToClient(A,e)}setVideoTimestampFromMicroseconds(e){if(null==e)return;if(!Number.isFinite(e))return;if(void 0===this.videoBaseUs)return this.videoBaseUs=e>>>0,void 0===this.videoBaseTs&&(this.videoBaseTs=this.videoRtp.getTimestamp()),void(this.videoLastTs=this.videoRtp.getTimestamp());const t=(e>>>0)-(this.videoBaseUs>>>0)>>>0;let A=((this.videoBaseTs??0)>>>0)+Math.round(t*this.videoClockRate/1e6)>>>0;void 0!==this.videoLastTs&&A<=this.videoLastTs>>>0&&(A=1+(this.videoLastTs>>>0)>>>0),this.videoRtp.setTimestamp(A),this.videoLastTs=A}sendVideoAccessUnit(e,t,A,r){if(this.closed)return;this.updateVideoParamSetsFromAccessUnit(e,t);const s=it(t,e);if(!s.length)return;let n=!1;if("H264"===e)for(const e of s){if(5===(31&e[0])){n=!0;break}}else for(const e of s){if(e.length<2)continue;const t=e[0]>>1&63;if(t>=16&&t<=23){n=!0;break}}const i=A||n,o=e=>!!i||!e.needsKeyframe;let a=!1;for(const e of this.clients)if(o(e)){a=!0;break}if(!a){for(const t of this.clients)t.needsKeyframe&&this.sendCachedVideoConfigToClient(e,t);return}this.setVideoTimestampFromMicroseconds(r);for(const t of this.clients)t.needsKeyframe&&this.sendCachedVideoConfigToClient(e,t);const c={maxRtpPayload:this.maxRtpPayload};for(let t=0;t<s.length;t++){const A=s[t],r=t===s.length-1,n="H265"===e?dt(A,this.videoRtp,c,!0,r):ht(A,this.videoRtp,c,!0,r);for(const e of n)this.writeRtpPacketToClients(e,o)}if(void 0===this.videoBaseUs&&this.videoRtp.advanceTimestamp(this.fallbackVideoIncrement),i)for(const e of this.clients)e.needsKeyframe=!1}sendAudioAdtsFrame(e){if(this.closed)return{};if(!this.audioRtp)return{};const{packets:t,config:A}=function(e,t){const A=gt(e);if(!A)return{packets:[]};const r=e.subarray(A.headerLength);if(!r.length)return{packets:[]};const s=Buffer.from([0,16]),n=8191&r.length,i=Buffer.alloc(2);i[0]=n>>5&255,i[1]=(31&n)<<3;const o=Buffer.concat([s,i,r]);return{packets:[t.writePacket(o,!0)],config:{sampleRate:A.sampleRate,channels:A.channels,configHex:A.configHex}}}(e,this.audioRtp);for(const e of t)this.writeRtpPacketToClients(e,(e=>!e.needsKeyframe));return t.length&&this.audioRtp.advanceTimestamp(1024),A?{parsed:A}:{}}sendAudioRtpPacket(e){if(this.closed)return;if(!e||e.length<12)return;2===(e[0]>>6&3)&&this.writeRtpPacketToClients(e,(e=>!e.needsKeyframe))}static parseRtpPayload(e){if(!e||e.length<12)return;if(2!==(e[0]>>6&3))return;const t=!!(32&e[0]),A=!!(16&e[0]);let r=12+4*(15&e[0]);if(r>e.length)return;if(A){if(r+4>e.length)return;if(r+=4+4*e.readUInt16BE(r+2),r>e.length)return}let s=e.length;if(t){const t=e[e.length-1];if(t<=0||t>e.length)return;if(s=e.length-t,s<r)return}return s<=r?void 0:e.subarray(r,s)}static isH264KeyframeLikeRtpPacket(t){const A=e.parseRtpPayload(t);if(!A||A.length<1)return!1;const r=31&A[0];if(r>=1&&r<=23)return 5===r||7===r||8===r;if(24===r){let e=1;for(;e+2<=A.length;){const t=A.readUInt16BE(e);if(e+=2,!t||e+t>A.length)break;const r=31&A[e];if(5===r||7===r||8===r)return!0;e+=t}return!1}if(28===r&&A.length>=2){const e=A[1],t=31&e;return!!!!(128&e)&&(5===t||7===t||8===t)}return!1}static isH265KeyframeLikeRtpPacket(t){const A=e.parseRtpPayload(t);if(!A||A.length<2)return!1;const r=A[0]>>1&63,s=e=>e>=16&&e<=21||(32===e||33===e||34===e);if(49===r&&A.length>=3){const e=A[2];return!!!!(128&e)&&s(63&e)}return s(r)}sendVideoRtpPacket(t,A){if(this.closed)return;if(!A||A.length<12)return;if(2!==(A[0]>>6&3))return;const r="H265"===t?e.isH265KeyframeLikeRtpPacket(A):e.isH264KeyframeLikeRtpPacket(A);if(this.writeRtpPacketToClients(A,(e=>!!r||!e.needsKeyframe)),r)for(const e of this.clients)e.needsKeyframe=!1}};async function Et(e){const{api:t,channel:A,profile:r,logger:s,expectedVideoType:i,host:o="127.0.0.1",videoPayloadType:a=96,audioPayloadType:c=97,keyframeTimeoutMs:g=5e3,idleTeardownMs:l=2500,closeApiOnTeardown:h=!0}=e,d=`[native-rfc4571 ch=${A} profile=${r}]`,u=e=>s.warn(`${d} ${e}`);u(`starting (host=${o} videoPT=${a} audioPT=${c} expectedVideoType=${i??"n/a"} keyframeTimeoutMs=${g} idleTeardownMs=${l})`);const E=new He({client:t.client,api:t,channel:A,profile:r,logger:s});await E.start(),u("baichuan stream started; waiting for keyframe to extract parameter sets");const I=await(async()=>await new Promise(((e,t)=>{const s=setTimeout((()=>{o(),t(new Error(`Timeout waiting for keyframe on native stream channel=${A} profile=${r}`))}),g),n=e=>{o(),t(e instanceof Error?e:new Error(String(e)))},i=t=>{if(!t?.isKeyframe)return;const A=t.videoType,r=t.data;if("H264"===A){const{sps:t,pps:s,profileLevelId:n}=ot(r);if(!t||!s)return;return o(),void e({videoType:A,accessUnit:r,...n?{profileLevelId:n}:{},h264:{sps:t,pps:s}})}const{vps:s,sps:n,pps:i}=at(r);s&&n&&i&&(o(),e({videoType:A,accessUnit:r,h265:{vps:s,sps:n,pps:i}}))},o=()=>{clearTimeout(s),E.removeListener("error",n),E.removeListener("videoAccessUnit",i)};E.on("error",n),E.on("videoAccessUnit",i)})))();i&&I.videoType!==i&&u(`expectedVideoType mismatch (expected=${i} actual=${I.videoType})`),u(`video detected: codec=${I.videoType} (primed via keyframe)`);let Q,B=25;try{const e=await t.getStreamMetadata(A),s=(Array.isArray(e)?e:Array.isArray(e?.streams)?e.streams:[]).find((e=>e?.profile===r)),n=Number(s?.frameRate);Number.isFinite(n)&&n>0&&(B=n)}catch{}u(`video framerate hint: ${B} fps`);Q=await(async()=>await new Promise((e=>{let t=!1,A=3;const r=setTimeout((()=>{i(),t&&s.warn("Native audio frames seen but not ADTS AAC; cannot advertise audio track."),e(void 0)}),5e3),n=r=>{t=!0;const n=gt(r);if(n)i(),e({sampleRate:n.sampleRate,channels:n.channels,configHex:n.configHex});else if(A-- >0){const e=r.subarray(0,Math.min(16,r.length)).toString("hex");s.warn(`Native audioFrame not ADTS: len=${r.length} head=${e}`)}},i=()=>{clearTimeout(r),E.removeListener("audioFrame",n)};E.on("audioFrame",n)})))(),u(Q?`audio detected: codec=aac sampleRate=${Q.sampleRate} channels=${Q.channels}`:"audio not detected/advertised (no ADTS AAC config within timeout)");const C={videoType:I.videoType,payloadType:a,..."H264"===I.videoType?{h264:{sps:I.h264.sps,pps:I.h264.pps,...I.profileLevelId?{profileLevelId:I.profileLevelId}:{}}}:{h265:{vps:I.h265.vps,sps:I.h265.sps,pps:I.h265.pps}}},p=Q?{codec:"aac",payloadType:c,sampleRate:Q.sampleRate,channels:Q.channels,configHex:Q.configHex}:void 0,f=function(e,t){let A="v=0\r\n";if(A+="o=- 0 0 IN IP4 0.0.0.0\r\n",A+="s=No Name\r\n",A+="t=0 0\r\n",A+=`m=video 0 RTP/AVP ${e.payloadType}\r\n`,A+="c=IN IP4 0.0.0.0\r\n",A+=`a=rtpmap:${e.payloadType} ${e.videoType}/90000\r\n`,"H264"===e.videoType&&e.h264){const t=e.h264.sps.toString("base64"),r=e.h264.pps.toString("base64"),s=e.h264.profileLevelId?`profile-level-id=${e.h264.profileLevelId};`:"";A+=`a=fmtp:${e.payloadType} packetization-mode=1;${s}sprop-parameter-sets=${t},${r}\r\n`}if("H265"===e.videoType&&e.h265){const t=e.h265.vps.toString("base64"),r=e.h265.sps.toString("base64"),s=e.h265.pps.toString("base64");A+=`a=fmtp:${e.payloadType} sprop-vps=${t};sprop-sps=${r};sprop-pps=${s}\r\n`}return"aac"===t?.codec&&(A+=`m=audio 0 RTP/AVP ${t.payloadType}\r\n`,A+="c=IN IP4 0.0.0.0\r\n",A+="b=AS:128\r\n",A+=`a=rtpmap:${t.payloadType} MPEG4-GENERIC/${t.sampleRate}/${t.channels}\r\n`,A+=`a=fmtp:${t.payloadType} profile-level-id=1; mode=AAC-hbr; sizelength=13; indexlength=3; indexdeltalength=3; config=${t.configHex}\r\n`),"opus"===t?.codec&&(A+=`m=audio 0 RTP/AVP ${t.payloadType}\r\n`,A+="c=IN IP4 0.0.0.0\r\n",A+="b=AS:128\r\n",A+=`a=rtpmap:${t.payloadType} opus/${t.sampleRate}/${t.channels}\r\n`),A}(C,p),m=new ut(s,a,p?c:void 0,B);u(`SDP ready (video=${I.videoType}/90000 pt=${a}${p?`, audio=aac/${p.sampleRate}/${p.channels} pt=${c}`:", audio=none"})`);let y,D=0,S=!1;const w=()=>{y&&(clearTimeout(y),y=void 0)},b=e=>{l&&(y||(y=setTimeout((()=>{y=void 0,0===D&&e(new Error("No RFC4571 clients (idle)")).catch((()=>{}))}),l)))},R=n.createServer(),N=async e=>{if(S)return;S=!0,w();const A=e?.message||e?.toString?.()||e,r=R.address(),s=r&&"string"!=typeof r?`${r.address}:${r.port}`:"unbound";u(A?`teardown requested (addr=${s} clients=${D} reason=${A})`:`teardown requested (addr=${s} clients=${D})`),m.close();try{await E.stop()}catch{}if(h)try{await t.close()}catch{}try{R.close()}catch{}u("teardown complete")};R.on("connection",(e=>{D++,w(),m.addClient(e);const t=`${e.remoteAddress??"unknown"}:${e.remotePort??"unknown"}`;u(`client connected (remote=${t} clients=${D})`);let A=!0;const r=()=>{A&&(A=!1,D=Math.max(0,D-1),u(`client disconnected (remote=${t} clients=${D})`),0===D&&b(N))};e.once("close",r),e.once("error",r)})),E.on("videoAccessUnit",(e=>{try{m.sendVideoAccessUnit(e.videoType,e.data,e.isKeyframe,e.microseconds)}catch(e){N(e).catch((()=>{}))}})),p&&E.on("audioFrame",(e=>{try{m.sendAudioAdtsFrame(e)}catch(e){N(e).catch((()=>{}))}})),E.on("error",(e=>{N(e).catch((()=>{}))})),E.on("close",(e=>{N(e).catch((()=>{}))})),await new Promise(((e,t)=>{R.once("error",t),R.listen(0,o,(()=>e()))}));const k=R.address();if(!k||"string"==typeof k)throw new Error("Failed to bind RFC TCP server");const F=k.port;if(!F)throw new Error("Failed to bind RFC TCP server");u(`listening (addr=${o}:${F})`);const U=p?{codec:"aac",sampleRate:p.sampleRate,channels:p.channels}:void 0;return b(N),{host:o,port:F,sdp:f,videoType:I.videoType,...U?{audio:U}:{},server:R,videoStream:E,close:N}}var It=Buffer.from([0,0,0,1]),Qt=Buffer.from([0,0,1]);function Bt(e){const t=[];for(let A=0;A<e.length-3;A++)0===e[A]&&0===e[A+1]&&(1===e[A+2]?(t.push({idx:A,len:3}),A+=2):0===e[A+2]&&1===e[A+3]&&(t.push({idx:A,len:4}),A+=3));if(0===t.length)return[];const A=[];for(let r=0;r<t.length;r++){const s=t[r],n=s.idx+s.len,i=t[r+1],o=i?i.idx:e.length;o>n&&A.push(e.subarray(n,o))}return A}function Ct(e){if(e.length<1)return null;const t=e[0];return void 0===t?null:31&t}s.EventEmitter}},t={};function A(r){var s=t[r];if(void 0!==s)return s.exports;var n=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(n.exports,n,n.exports,A),n.loaded=!0,n.exports}A.d=(e,t)=>{for(var r in t)A.o(t,r)&&!A.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},A.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),A.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var r=A(7927),s=exports="undefined"==typeof exports?{}:exports;for(var n in r)s[n]=r[n];r.__esModule&&Object.defineProperty(s,"__esModule",{value:!0})})();
|
|
2
|
+
(()=>{var e={9038:(e,t,A)=>{"use strict";const r=A(1167),s=A(5497),n=A(8542),i=A(8055),o=A(3315),a=A(9246),c=A(4667),g=A(8712),l=A(8297),h=A(4465),d=A(2858),{InvalidArgumentError:u}=h,E=A(9713),I=A(1986),Q=A(615),{MockCallHistory:B,MockCallHistoryLog:C}=A(4969),p=A(7467),f=A(5846),m=A(1313),y=A(3123),D=A(6294),{getGlobalDispatcher:S,setGlobalDispatcher:w}=A(9879),b=A(6917),R=A(8064);Object.assign(s.prototype,E),A(5132),A(2936),A(532),A(3562),A(6677),A(5752),A(4951),A(9903);function N(e){return(t,A,r)=>{if("function"==typeof A&&(r=A,A=null),!t||"string"!=typeof t&&"object"!=typeof t&&!(t instanceof URL))throw new u("invalid url");if(null!=A&&"object"!=typeof A)throw new u("invalid opts");if(A&&null!=A.path){if("string"!=typeof A.path)throw new u("invalid opts.path");let e=A.path;A.path.startsWith("/")||(e=`/${e}`),t=new URL(d.parseOrigin(t).origin+e)}else A||(A="object"==typeof t?t:{}),t=d.parseURL(t);const{agent:s,dispatcher:n=S()}=A;if(s)throw new u("unsupported opts.agent. Did you mean opts.client?");return e.call(n,{...A,origin:t.origin,path:t.search?`${t.pathname}${t.search}`:t.pathname,method:A.method||(A.body?"PUT":"GET")},r)}}A(2636),d.parseHeaders,d.headerNameToString;const k=A(7388).fetch;e.exports.hd=function(e,t=void 0){return k(e,t).catch((e=>{throw e&&"object"==typeof e&&Error.captureStackTrace(e),e}))},e.exports.Headers=A(6558).Headers,e.exports.Response=A(4821).Response,e.exports.Request=A(4609).Request,e.exports.FormData=A(3944).FormData;const{setGlobalOrigin:F,getGlobalOrigin:U}=A(2837);const{CacheStorage:M}=A(6939),{kConstruct:T}=A(257);new M(T);const{deleteCookie:v,getCookies:L,getSetCookies:H,setCookie:Y,parseCookie:x}=A(9391);const{parseMIMEType:P,serializeAMimeType:V}=A(9934);const{CloseEvent:G,ErrorEvent:O,MessageEvent:J}=A(878),{WebSocket:W,ping:q}=A(2984);e.exports.kb=W,e.exports.rd=G,e.exports.NN=O,e.exports.aM=J,A(27).WebSocketStream,A(7053).WebSocketError,N(E.request),N(E.stream),N(E.pipeline),N(E.connect),N(E.upgrade);const{EventSource:_}=A(7928);e.exports.GD=_},3904:(e,t,A)=>{"use strict";const{addAbortListener:r}=A(2858),{RequestAbortedError:s}=A(4465),n=Symbol("kListener"),i=Symbol("kSignal");function o(e){e.abort?e.abort(e[i]?.reason):e.reason=e[i]?.reason??new s,a(e)}function a(e){e[i]&&("removeEventListener"in e[i]?e[i].removeEventListener("abort",e[n]):e[i].removeListener("abort",e[n]),e[i]=null,e[n]=null)}e.exports={addSignal:function(e,t){e.reason=null,e[i]=null,e[n]=null,t&&(t.aborted?o(e):(e[i]=t,e[n]=()=>{o(e)},r(e[i],e[n])))},removeSignal:a}},3102:(e,t,A)=>{"use strict";const r=A(4589),{AsyncResource:s}=A(6698),{InvalidArgumentError:n,SocketError:i}=A(4465),o=A(2858),{addSignal:a,removeSignal:c}=A(3904);class g extends s{constructor(e,t){if(!e||"object"!=typeof e)throw new n("invalid opts");if("function"!=typeof t)throw new n("invalid callback");const{signal:A,opaque:r,responseHeaders:s}=e;if(A&&"function"!=typeof A.on&&"function"!=typeof A.addEventListener)throw new n("signal must be an EventEmitter or EventTarget");super("UNDICI_CONNECT"),this.opaque=r||null,this.responseHeaders=s||null,this.callback=t,this.abort=null,a(this,A)}onConnect(e,t){this.reason?e(this.reason):(r(this.callback),this.abort=e,this.context=t)}onHeaders(){throw new i("bad connect",null)}onUpgrade(e,t,A){const{callback:r,opaque:s,context:n}=this;c(this),this.callback=null;let i=t;null!=i&&(i="raw"===this.responseHeaders?o.parseRawHeaders(t):o.parseHeaders(t)),this.runInAsyncScope(r,null,null,{statusCode:e,headers:i,socket:A,opaque:s,context:n})}onError(e){const{callback:t,opaque:A}=this;c(this),t&&(this.callback=null,queueMicrotask((()=>{this.runInAsyncScope(t,null,e,{opaque:A})})))}}e.exports=function e(t,A){if(void 0===A)return new Promise(((A,r)=>{e.call(this,t,((e,t)=>e?r(e):A(t)))}));try{const e=new g(t,A),r={...t,method:"CONNECT"};this.dispatch(r,e)}catch(e){if("function"!=typeof A)throw e;const r=t?.opaque;queueMicrotask((()=>A(e,{opaque:r})))}}},8660:(e,t,A)=>{"use strict";const{Readable:r,Duplex:s,PassThrough:n}=A(7075),i=A(4589),{AsyncResource:o}=A(6698),{InvalidArgumentError:a,InvalidReturnValueError:c,RequestAbortedError:g}=A(4465),l=A(2858),{addSignal:h,removeSignal:d}=A(3904);function u(){}const E=Symbol("resume");class I extends r{constructor(){super({autoDestroy:!0}),this[E]=null}_read(){const{[E]:e}=this;e&&(this[E]=null,e())}_destroy(e,t){this._read(),t(e)}}class Q extends r{constructor(e){super({autoDestroy:!0}),this[E]=e}_read(){this[E]()}_destroy(e,t){e||this._readableState.endEmitted||(e=new g),t(e)}}class B extends o{constructor(e,t){if(!e||"object"!=typeof e)throw new a("invalid opts");if("function"!=typeof t)throw new a("invalid handler");const{signal:A,method:r,opaque:n,onInfo:i,responseHeaders:o}=e;if(A&&"function"!=typeof A.on&&"function"!=typeof A.addEventListener)throw new a("signal must be an EventEmitter or EventTarget");if("CONNECT"===r)throw new a("invalid method");if(i&&"function"!=typeof i)throw new a("invalid onInfo callback");super("UNDICI_PIPELINE"),this.opaque=n||null,this.responseHeaders=o||null,this.handler=t,this.abort=null,this.context=null,this.onInfo=i||null,this.req=(new I).on("error",u),this.ret=new s({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{const{body:e}=this;e?.resume&&e.resume()},write:(e,t,A)=>{const{req:r}=this;r.push(e,t)||r._readableState.destroyed?A():r[E]=A},destroy:(e,t)=>{const{body:A,req:r,res:s,ret:n,abort:i}=this;e||n._readableState.endEmitted||(e=new g),i&&e&&i(),l.destroy(A,e),l.destroy(r,e),l.destroy(s,e),d(this),t(e)}}).on("prefinish",(()=>{const{req:e}=this;e.push(null)})),this.res=null,h(this,A)}onConnect(e,t){const{res:A}=this;this.reason?e(this.reason):(i(!A,"pipeline cannot be retried"),this.abort=e,this.context=t)}onHeaders(e,t,A){const{opaque:r,handler:s,context:n}=this;if(e<200){if(this.onInfo){const A="raw"===this.responseHeaders?l.parseRawHeaders(t):l.parseHeaders(t);this.onInfo({statusCode:e,headers:A})}return}let i;this.res=new Q(A);try{this.handler=null;const A="raw"===this.responseHeaders?l.parseRawHeaders(t):l.parseHeaders(t);i=this.runInAsyncScope(s,null,{statusCode:e,headers:A,opaque:r,body:this.res,context:n})}catch(e){throw this.res.on("error",u),e}if(!i||"function"!=typeof i.on)throw new c("expected Readable");i.on("data",(e=>{const{ret:t,body:A}=this;!t.push(e)&&A.pause&&A.pause()})).on("error",(e=>{const{ret:t}=this;l.destroy(t,e)})).on("end",(()=>{const{ret:e}=this;e.push(null)})).on("close",(()=>{const{ret:e}=this;e._readableState.ended||l.destroy(e,new g)})),this.body=i}onData(e){const{res:t}=this;return t.push(e)}onComplete(e){const{res:t}=this;t.push(null)}onError(e){const{ret:t}=this;this.handler=null,l.destroy(t,e)}}e.exports=function(e,t){try{const A=new B(e,t);return this.dispatch({...e,body:A.req},A),A.ret}catch(e){return(new n).destroy(e)}}},7745:(e,t,A)=>{"use strict";const r=A(4589),{AsyncResource:s}=A(6698),{Readable:n}=A(777),{InvalidArgumentError:i,RequestAbortedError:o}=A(4465),a=A(2858);function c(){}class g extends s{constructor(e,t){if(!e||"object"!=typeof e)throw new i("invalid opts");const{signal:A,method:r,opaque:s,body:n,onInfo:g,responseHeaders:l,highWaterMark:h}=e;try{if("function"!=typeof t)throw new i("invalid callback");if(h&&("number"!=typeof h||h<0))throw new i("invalid highWaterMark");if(A&&"function"!=typeof A.on&&"function"!=typeof A.addEventListener)throw new i("signal must be an EventEmitter or EventTarget");if("CONNECT"===r)throw new i("invalid method");if(g&&"function"!=typeof g)throw new i("invalid onInfo callback");super("UNDICI_REQUEST")}catch(e){throw a.isStream(n)&&a.destroy(n.on("error",c),e),e}this.method=r,this.responseHeaders=l||null,this.opaque=s||null,this.callback=t,this.res=null,this.abort=null,this.body=n,this.trailers={},this.context=null,this.onInfo=g||null,this.highWaterMark=h,this.reason=null,this.removeAbortListener=null,A?.aborted?this.reason=A.reason??new o:A&&(this.removeAbortListener=a.addAbortListener(A,(()=>{this.reason=A.reason??new o,this.res?a.destroy(this.res.on("error",c),this.reason):this.abort&&this.abort(this.reason)})))}onConnect(e,t){this.reason?e(this.reason):(r(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,A,r){const{callback:s,opaque:i,abort:o,context:g,responseHeaders:l,highWaterMark:h}=this,d="raw"===l?a.parseRawHeaders(t):a.parseHeaders(t);if(e<200)return void(this.onInfo&&this.onInfo({statusCode:e,headers:d}));const u="raw"===l?a.parseHeaders(t):d,E=u["content-type"],I=u["content-length"],Q=new n({resume:A,abort:o,contentType:E,contentLength:"HEAD"!==this.method&&I?Number(I):null,highWaterMark:h});if(this.removeAbortListener&&(Q.on("close",this.removeAbortListener),this.removeAbortListener=null),this.callback=null,this.res=Q,null!==s)try{this.runInAsyncScope(s,null,null,{statusCode:e,headers:d,trailers:this.trailers,opaque:i,body:Q,context:g})}catch(e){this.res=null,a.destroy(Q.on("error",c),e),queueMicrotask((()=>{throw e}))}}onData(e){return this.res.push(e)}onComplete(e){a.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){const{res:t,callback:A,body:r,opaque:s}=this;A&&(this.callback=null,queueMicrotask((()=>{this.runInAsyncScope(A,null,e,{opaque:s})}))),t&&(this.res=null,queueMicrotask((()=>{a.destroy(t.on("error",c),e)}))),r&&(this.body=null,a.isStream(r)&&(r.on("error",c),a.destroy(r,e))),this.removeAbortListener&&(this.removeAbortListener(),this.removeAbortListener=null)}}e.exports=function e(t,A){if(void 0===A)return new Promise(((A,r)=>{e.call(this,t,((e,t)=>e?r(e):A(t)))}));try{const e=new g(t,A);this.dispatch(t,e)}catch(e){if("function"!=typeof A)throw e;const r=t?.opaque;queueMicrotask((()=>A(e,{opaque:r})))}},e.exports.RequestHandler=g},322:(e,t,A)=>{"use strict";const r=A(4589),{finished:s}=A(7075),{AsyncResource:n}=A(6698),{InvalidArgumentError:i,InvalidReturnValueError:o}=A(4465),a=A(2858),{addSignal:c,removeSignal:g}=A(3904);function l(){}class h extends n{constructor(e,t,A){if(!e||"object"!=typeof e)throw new i("invalid opts");const{signal:r,method:s,opaque:n,body:o,onInfo:g,responseHeaders:h}=e;try{if("function"!=typeof A)throw new i("invalid callback");if("function"!=typeof t)throw new i("invalid factory");if(r&&"function"!=typeof r.on&&"function"!=typeof r.addEventListener)throw new i("signal must be an EventEmitter or EventTarget");if("CONNECT"===s)throw new i("invalid method");if(g&&"function"!=typeof g)throw new i("invalid onInfo callback");super("UNDICI_STREAM")}catch(e){throw a.isStream(o)&&a.destroy(o.on("error",l),e),e}this.responseHeaders=h||null,this.opaque=n||null,this.factory=t,this.callback=A,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=o,this.onInfo=g||null,a.isStream(o)&&o.on("error",(e=>{this.onError(e)})),c(this,r)}onConnect(e,t){this.reason?e(this.reason):(r(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,A,r){const{factory:n,opaque:i,context:c,responseHeaders:g}=this,l="raw"===g?a.parseRawHeaders(t):a.parseHeaders(t);if(e<200)return void(this.onInfo&&this.onInfo({statusCode:e,headers:l}));if(this.factory=null,null===n)return;const h=this.runInAsyncScope(n,null,{statusCode:e,headers:l,opaque:i,context:c});if(!h||"function"!=typeof h.write||"function"!=typeof h.end||"function"!=typeof h.on)throw new o("expected Writable");s(h,{readable:!1},(e=>{const{callback:t,res:A,opaque:r,trailers:s,abort:n}=this;this.res=null,!e&&A?.readable||a.destroy(A,e),this.callback=null,this.runInAsyncScope(t,null,e||null,{opaque:r,trailers:s}),e&&n()})),h.on("drain",A),this.res=h;return!0!==(void 0!==h.writableNeedDrain?h.writableNeedDrain:h._writableState?.needDrain)}onData(e){const{res:t}=this;return!t||t.write(e)}onComplete(e){const{res:t}=this;g(this),t&&(this.trailers=a.parseHeaders(e),t.end())}onError(e){const{res:t,callback:A,opaque:r,body:s}=this;g(this),this.factory=null,t?(this.res=null,a.destroy(t,e)):A&&(this.callback=null,queueMicrotask((()=>{this.runInAsyncScope(A,null,e,{opaque:r})}))),s&&(this.body=null,a.destroy(s,e))}}e.exports=function e(t,A,r){if(void 0===r)return new Promise(((r,s)=>{e.call(this,t,A,((e,t)=>e?s(e):r(t)))}));try{const e=new h(t,A,r);this.dispatch(t,e)}catch(e){if("function"!=typeof r)throw e;const A=t?.opaque;queueMicrotask((()=>r(e,{opaque:A})))}}},3936:(e,t,A)=>{"use strict";const{InvalidArgumentError:r,SocketError:s}=A(4465),{AsyncResource:n}=A(6698),i=A(4589),o=A(2858),{addSignal:a,removeSignal:c}=A(3904);class g extends n{constructor(e,t){if(!e||"object"!=typeof e)throw new r("invalid opts");if("function"!=typeof t)throw new r("invalid callback");const{signal:A,opaque:s,responseHeaders:n}=e;if(A&&"function"!=typeof A.on&&"function"!=typeof A.addEventListener)throw new r("signal must be an EventEmitter or EventTarget");super("UNDICI_UPGRADE"),this.responseHeaders=n||null,this.opaque=s||null,this.callback=t,this.abort=null,this.context=null,a(this,A)}onConnect(e,t){this.reason?e(this.reason):(i(this.callback),this.abort=e,this.context=null)}onHeaders(){throw new s("bad upgrade",null)}onUpgrade(e,t,A){i(101===e);const{callback:r,opaque:s,context:n}=this;c(this),this.callback=null;const a="raw"===this.responseHeaders?o.parseRawHeaders(t):o.parseHeaders(t);this.runInAsyncScope(r,null,null,{headers:a,socket:A,opaque:s,context:n})}onError(e){const{callback:t,opaque:A}=this;c(this),t&&(this.callback=null,queueMicrotask((()=>{this.runInAsyncScope(t,null,e,{opaque:A})})))}}e.exports=function e(t,A){if(void 0===A)return new Promise(((A,r)=>{e.call(this,t,((e,t)=>e?r(e):A(t)))}));try{const e=new g(t,A),r={...t,method:t.method||"GET",upgrade:t.protocol||"Websocket"};this.dispatch(r,e)}catch(e){if("function"!=typeof A)throw e;const r=t?.opaque;queueMicrotask((()=>A(e,{opaque:r})))}}},9713:(e,t,A)=>{"use strict";e.exports.request=A(7745),e.exports.stream=A(322),e.exports.pipeline=A(8660),e.exports.upgrade=A(3936),e.exports.connect=A(3102)},777:(e,t,A)=>{"use strict";const r=A(4589),{Readable:s}=A(7075),{RequestAbortedError:n,NotSupportedError:i,InvalidArgumentError:o,AbortError:a}=A(4465),c=A(2858),{ReadableStreamFrom:g}=A(2858),l=Symbol("kConsume"),h=Symbol("kReading"),d=Symbol("kBody"),u=Symbol("kAbort"),E=Symbol("kContentType"),I=Symbol("kContentLength"),Q=Symbol("kUsed"),B=Symbol("kBytesRead"),C=()=>{};function p(e){return c.isDisturbed(e)||function(e){return!0===e[d]?.locked||null!==e[l]}(e)}function f(e,t){return r(!e[l]),new Promise(((A,r)=>{if(p(e)){const t=e._readableState;t.destroyed&&!1===t.closeEmitted?e.on("error",r).on("close",(()=>{r(new TypeError("unusable"))})):r(t.errored??new TypeError("unusable"))}else queueMicrotask((()=>{e[l]={type:t,stream:e,resolve:A,reject:r,length:0,body:[]},e.on("error",(function(e){w(this[l],e)})).on("close",(function(){null!==this[l].body&&w(this[l],new n)})),function(e){if(null===e.body)return;const{_readableState:t}=e.stream;if(t.bufferIndex){const A=t.bufferIndex,r=t.buffer.length;for(let s=A;s<r;s++)S(e,t.buffer[s])}else for(const A of t.buffer)S(e,A);t.endEmitted?D(this[l],this._readableState.encoding):e.stream.on("end",(function(){D(this[l],this._readableState.encoding)}));e.stream.resume();for(;null!=e.stream.read(););}(e[l])}))}))}function m(e,t,A){if(0===e.length||0===t)return"";const r=1===e.length?e[0]:Buffer.concat(e,t),s=r.length,n=s>2&&239===r[0]&&187===r[1]&&191===r[2]?3:0;return A&&"utf8"!==A&&"utf-8"!==A?r.subarray(n,s).toString(A):r.utf8Slice(n,s)}function y(e,t){if(0===e.length||0===t)return new Uint8Array(0);if(1===e.length)return new Uint8Array(e[0]);const A=new Uint8Array(Buffer.allocUnsafeSlow(t).buffer);let r=0;for(let t=0;t<e.length;++t){const s=e[t];A.set(s,r),r+=s.length}return A}function D(e,t){const{type:A,body:r,resolve:s,stream:n,length:i}=e;try{"text"===A?s(m(r,i,t)):"json"===A?s(JSON.parse(m(r,i,t))):"arrayBuffer"===A?s(y(r,i).buffer):"blob"===A?s(new Blob(r,{type:n[E]})):"bytes"===A&&s(y(r,i)),w(e)}catch(e){n.destroy(e)}}function S(e,t){e.length+=t.length,e.body.push(t)}function w(e,t){null!==e.body&&(t?e.reject(t):e.resolve(),e.type=null,e.stream=null,e.resolve=null,e.reject=null,e.length=0,e.body=null)}e.exports={Readable:class extends s{constructor({resume:e,abort:t,contentType:A="",contentLength:r,highWaterMark:s=65536}){super({autoDestroy:!0,read:e,highWaterMark:s}),this._readableState.dataEmitted=!1,this[u]=t,this[l]=null,this[B]=0,this[d]=null,this[Q]=!1,this[E]=A,this[I]=Number.isFinite(r)?r:null,this[h]=!1}_destroy(e,t){e||this._readableState.endEmitted||(e=new n),e&&this[u](),this[Q]?t(e):setImmediate(t,e)}on(e,t){return"data"!==e&&"readable"!==e||(this[h]=!0,this[Q]=!0),super.on(e,t)}addListener(e,t){return this.on(e,t)}off(e,t){const A=super.off(e,t);return"data"!==e&&"readable"!==e||(this[h]=this.listenerCount("data")>0||this.listenerCount("readable")>0),A}removeListener(e,t){return this.off(e,t)}push(e){return e&&(this[B]+=e.length,this[l])?(S(this[l],e),!this[h]||super.push(e)):super.push(e)}text(){return f(this,"text")}json(){return f(this,"json")}blob(){return f(this,"blob")}bytes(){return f(this,"bytes")}arrayBuffer(){return f(this,"arrayBuffer")}async formData(){throw new i}get bodyUsed(){return c.isDisturbed(this)}get body(){return this[d]||(this[d]=g(this),this[l]&&(this[d].getReader(),r(this[d].locked))),this[d]}dump(e){const t=e?.signal;if(null!=t&&("object"!=typeof t||!("aborted"in t)))return Promise.reject(new o("signal must be an AbortSignal"));const A=e?.limit&&Number.isFinite(e.limit)?e.limit:131072;return t?.aborted?Promise.reject(t.reason??new a):this._readableState.closeEmitted?Promise.resolve(null):new Promise(((e,r)=>{if((this[I]&&this[I]>A||this[B]>A)&&this.destroy(new a),t){const A=()=>{this.destroy(t.reason??new a)};t.addEventListener("abort",A),this.on("close",(function(){t.removeEventListener("abort",A),t.aborted?r(t.reason??new a):e(null)}))}else this.on("close",e);this.on("error",C).on("data",(()=>{this[B]>A&&this.destroy()})).resume()}))}setEncoding(e){return Buffer.isEncoding(e)&&(this._readableState.encoding=e),this}},chunksDecode:m}},9903:(e,t,A)=>{"use strict";const{Writable:r}=A(7075),{EventEmitter:s}=A(8474),{assertCacheKey:n,assertCacheValue:i}=A(9453);function o(e,t,A){return t.find((t=>t.deleteAt>A&&t.method===e.method&&(null==t.vary||Object.keys(t.vary).every((A=>null===t.vary[A]?void 0===e.headers[A]:t.vary[A]===e.headers[A])))))}e.exports=class extends s{#e=1024;#t=104857600;#A=5242880;#r=0;#s=0;#n=new Map;#i=!1;constructor(e){if(super(),e){if("object"!=typeof e)throw new TypeError("MemoryCacheStore options must be an object");if(void 0!==e.maxCount){if("number"!=typeof e.maxCount||!Number.isInteger(e.maxCount)||e.maxCount<0)throw new TypeError("MemoryCacheStore options.maxCount must be a non-negative integer");this.#e=e.maxCount}if(void 0!==e.maxSize){if("number"!=typeof e.maxSize||!Number.isInteger(e.maxSize)||e.maxSize<0)throw new TypeError("MemoryCacheStore options.maxSize must be a non-negative integer");this.#t=e.maxSize}if(void 0!==e.maxEntrySize){if("number"!=typeof e.maxEntrySize||!Number.isInteger(e.maxEntrySize)||e.maxEntrySize<0)throw new TypeError("MemoryCacheStore options.maxEntrySize must be a non-negative integer");this.#A=e.maxEntrySize}}}get size(){return this.#r}isFull(){return this.#r>=this.#t||this.#s>=this.#e}get(e){n(e);const t=`${e.origin}:${e.path}`,A=Date.now(),r=this.#n.get(t),s=r?o(e,r,A):null;return null==s?void 0:{statusMessage:s.statusMessage,statusCode:s.statusCode,headers:s.headers,body:s.body,vary:s.vary?s.vary:void 0,etag:s.etag,cacheControlDirectives:s.cacheControlDirectives,cachedAt:s.cachedAt,staleAt:s.staleAt,deleteAt:s.deleteAt}}createWriteStream(e,t){n(e),i(t);const A=`${e.origin}:${e.path}`,s=this,a={...e,...t,body:[],size:0};return new r({write(e,t,A){"string"==typeof e&&(e=Buffer.from(e,t)),a.size+=e.byteLength,a.size>=s.#A?this.destroy():a.body.push(e),A(null)},final(t){let r=s.#n.get(A);r||(r=[],s.#n.set(A,r));const n=o(e,r,Date.now());if(n){const e=r.indexOf(n);r.splice(e,1,a),s.#r-=n.size}else r.push(a),s.#s+=1;if(s.#r+=a.size,s.#r>s.#t||s.#s>s.#e){s.#i||(s.emit("maxSizeExceeded",{size:s.#r,maxSize:s.#t,count:s.#s,maxCount:s.#e}),s.#i=!0);for(const[e,t]of s.#n){for(const e of t.splice(0,t.length/2))s.#r-=e.size,s.#s-=1;0===t.length&&s.#n.delete(e)}s.#r<s.#t&&s.#s<s.#e&&(s.#i=!1)}t(null)}})}delete(e){if("object"!=typeof e)throw new TypeError("expected key to be object, got "+typeof e);const t=`${e.origin}:${e.path}`;for(const e of this.#n.get(t)??[])this.#r-=e.size,this.#s-=1;this.#n.delete(t)}}},2636:(e,t,A)=>{"use strict";const{Writable:r}=A(7075),{assertCacheKey:s,assertCacheValue:n}=A(9453);let i;const o=2e9;function a(e,t){return null==e&&null==t||!(null==e&&null!=t||null!=e&&null==t)&&(Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every(((e,A)=>e===t[A])):e===t)}e.exports=class{#A=o;#e=1/0;#o;#a;#c;#g;#l;#h;#d;#u;constructor(e){if(e){if("object"!=typeof e)throw new TypeError("SqliteCacheStore options must be an object");if(void 0!==e.maxEntrySize){if("number"!=typeof e.maxEntrySize||!Number.isInteger(e.maxEntrySize)||e.maxEntrySize<0)throw new TypeError("SqliteCacheStore options.maxEntrySize must be a non-negative integer");if(e.maxEntrySize>o)throw new TypeError("SqliteCacheStore options.maxEntrySize must be less than 2gb");this.#A=e.maxEntrySize}if(void 0!==e.maxCount){if("number"!=typeof e.maxCount||!Number.isInteger(e.maxCount)||e.maxCount<0)throw new TypeError("SqliteCacheStore options.maxCount must be a non-negative integer");this.#e=e.maxCount}}i||(i=A(99).DatabaseSync),this.#o=new i(e?.location??":memory:"),this.#o.exec("\n PRAGMA journal_mode = WAL;\n PRAGMA synchronous = NORMAL;\n PRAGMA temp_store = memory;\n PRAGMA optimize;\n\n CREATE TABLE IF NOT EXISTS cacheInterceptorV3 (\n -- Data specific to us\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n url TEXT NOT NULL,\n method TEXT NOT NULL,\n\n -- Data returned to the interceptor\n body BUF NULL,\n deleteAt INTEGER NOT NULL,\n statusCode INTEGER NOT NULL,\n statusMessage TEXT NOT NULL,\n headers TEXT NULL,\n cacheControlDirectives TEXT NULL,\n etag TEXT NULL,\n vary TEXT NULL,\n cachedAt INTEGER NOT NULL,\n staleAt INTEGER NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV3_getValuesQuery ON cacheInterceptorV3(url, method, deleteAt);\n CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV3_deleteByUrlQuery ON cacheInterceptorV3(deleteAt);\n "),this.#a=this.#o.prepare("\n SELECT\n id,\n body,\n deleteAt,\n statusCode,\n statusMessage,\n headers,\n etag,\n cacheControlDirectives,\n vary,\n cachedAt,\n staleAt\n FROM cacheInterceptorV3\n WHERE\n url = ?\n AND method = ?\n ORDER BY\n deleteAt ASC\n "),this.#c=this.#o.prepare("\n UPDATE cacheInterceptorV3 SET\n body = ?,\n deleteAt = ?,\n statusCode = ?,\n statusMessage = ?,\n headers = ?,\n etag = ?,\n cacheControlDirectives = ?,\n cachedAt = ?,\n staleAt = ?\n WHERE\n id = ?\n "),this.#g=this.#o.prepare("\n INSERT INTO cacheInterceptorV3 (\n url,\n method,\n body,\n deleteAt,\n statusCode,\n statusMessage,\n headers,\n etag,\n cacheControlDirectives,\n vary,\n cachedAt,\n staleAt\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n "),this.#h=this.#o.prepare("DELETE FROM cacheInterceptorV3 WHERE url = ?"),this.#d=this.#o.prepare("SELECT COUNT(*) AS total FROM cacheInterceptorV3"),this.#l=this.#o.prepare("DELETE FROM cacheInterceptorV3 WHERE deleteAt <= ?"),this.#u=this.#e===1/0?null:this.#o.prepare("\n DELETE FROM cacheInterceptorV3\n WHERE id IN (\n SELECT\n id\n FROM cacheInterceptorV3\n ORDER BY cachedAt DESC\n LIMIT ?\n )\n ")}close(){this.#o.close()}get(e){s(e);const t=this.#E(e);return t?{body:t.body?Buffer.from(t.body.buffer,t.body.byteOffset,t.body.byteLength):void 0,statusCode:t.statusCode,statusMessage:t.statusMessage,headers:t.headers?JSON.parse(t.headers):void 0,etag:t.etag?t.etag:void 0,vary:t.vary?JSON.parse(t.vary):void 0,cacheControlDirectives:t.cacheControlDirectives?JSON.parse(t.cacheControlDirectives):void 0,cachedAt:t.cachedAt,staleAt:t.staleAt,deleteAt:t.deleteAt}:void 0}set(e,t){s(e);const A=this.#I(e),r=Array.isArray(t.body)?Buffer.concat(t.body):t.body,n=r?.byteLength;if(n&&n>this.#A)return;const i=this.#E(e,!0);i?this.#c.run(r,t.deleteAt,t.statusCode,t.statusMessage,t.headers?JSON.stringify(t.headers):null,t.etag?t.etag:null,t.cacheControlDirectives?JSON.stringify(t.cacheControlDirectives):null,t.cachedAt,t.staleAt,i.id):(this.#Q(),this.#g.run(A,e.method,r,t.deleteAt,t.statusCode,t.statusMessage,t.headers?JSON.stringify(t.headers):null,t.etag?t.etag:null,t.cacheControlDirectives?JSON.stringify(t.cacheControlDirectives):null,t.vary?JSON.stringify(t.vary):null,t.cachedAt,t.staleAt))}createWriteStream(e,t){s(e),n(t);let A=0;const i=[],o=this;return new r({decodeStrings:!0,write(e,t,r){A+=e.byteLength,A<o.#A?i.push(e):this.destroy(),r()},final(A){o.set(e,{...t,body:i}),A()}})}delete(e){if("object"!=typeof e)throw new TypeError("expected key to be object, got "+typeof e);this.#h.run(this.#I(e))}#Q(){if(Number.isFinite(this.#e)&&this.size<=this.#e)return 0;{const e=this.#l.run(Date.now()).changes;if(e)return e}{const e=this.#u?.run(Math.max(Math.floor(.1*this.#e),1)).changes;if(e)return e}return 0}get size(){const{total:e}=this.#d.get();return e}#I(e){return`${e.origin}/${e.path}`}#E(e,t=!1){const A=this.#I(e),{headers:r,method:s}=e,n=this.#a.all(A,s);if(0===n.length)return;const i=Date.now();for(const e of n){if(i>=e.deleteAt&&!t)return;let A=!0;if(e.vary){const t=JSON.parse(e.vary);for(const e in t)if(!a(r[e],t[e])){A=!1;break}}if(A)return e}}}},1986:(e,t,A)=>{"use strict";const r=A(7030),s=A(4589),n=A(2858),{InvalidArgumentError:i}=A(4465);let o;const a=class{constructor(e){this._maxCachedSessions=e,this._sessionCache=new Map,this._sessionRegistry=new FinalizationRegistry((e=>{if(this._sessionCache.size<this._maxCachedSessions)return;const t=this._sessionCache.get(e);void 0!==t&&void 0===t.deref()&&this._sessionCache.delete(e)}))}get(e){const t=this._sessionCache.get(e);return t?t.deref():null}set(e,t){0!==this._maxCachedSessions&&(this._sessionCache.set(e,new WeakRef(t)),this._sessionRegistry.register(t,e))}};e.exports=function({allowH2:e,maxCachedSessions:t,socketPath:c,timeout:g,session:l,...h}){if(null!=t&&(!Number.isInteger(t)||t<0))throw new i("maxCachedSessions must be a positive integer or zero");const d={path:c,...h},u=new a(null==t?100:t);return g=null==g?1e4:g,e=null!=e&&e,function({hostname:t,host:i,protocol:a,port:c,servername:h,localAddress:E,httpSocket:I},Q){let B;if("https:"===a){o||(o=A(1692));const r=(h=h||d.servername||n.getServerName(i)||null)||t;s(r);const a=l||u.get(r)||null;c=c||443,B=o.connect({highWaterMark:16384,...d,servername:h,session:a,localAddress:E,ALPNProtocols:e?["http/1.1","h2"]:["http/1.1"],socket:I,port:c,host:t}),B.on("session",(function(e){u.set(r,e)}))}else s(!I,"httpSocket can only be sent on TLS update"),c=c||80,B=r.connect({highWaterMark:65536,...d,localAddress:E,port:c,host:t});if(null==d.keepAlive||d.keepAlive){const e=void 0===d.keepAliveInitialDelay?6e4:d.keepAliveInitialDelay;B.setKeepAlive(!0,e)}const C=n.setupConnectTimeout(new WeakRef(B),{timeout:g,hostname:t,port:c});return B.setNoDelay(!0).once("https:"===a?"secureConnect":"connect",(function(){if(queueMicrotask(C),Q){const e=Q;Q=null,e(null,this)}})).on("error",(function(e){if(queueMicrotask(C),Q){const t=Q;Q=null,t(e)}})),B}}},9605:e=>{"use strict";const t=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"],A={};Object.setPrototypeOf(A,null);const r={};Object.setPrototypeOf(r,null);for(let e=0;e<t.length;++e){const r=t[e],s=r.toLowerCase();A[r]=A[s]=s}e.exports={wellknownHeaderNames:t,headerNameLowerCasedRecord:A,getHeaderNameAsBuffer:function(e){let t=r[e];return void 0===t&&(t=Buffer.from(e)),t}}},772:(e,t,A)=>{"use strict";const r=A(3053),s=A(7975),n=s.debuglog("undici"),i=s.debuglog("fetch"),o=s.debuglog("websocket"),a={beforeConnect:r.channel("undici:client:beforeConnect"),connected:r.channel("undici:client:connected"),connectError:r.channel("undici:client:connectError"),sendHeaders:r.channel("undici:client:sendHeaders"),create:r.channel("undici:request:create"),bodySent:r.channel("undici:request:bodySent"),bodyChunkSent:r.channel("undici:request:bodyChunkSent"),bodyChunkReceived:r.channel("undici:request:bodyChunkReceived"),headers:r.channel("undici:request:headers"),trailers:r.channel("undici:request:trailers"),error:r.channel("undici:request:error"),open:r.channel("undici:websocket:open"),close:r.channel("undici:websocket:close"),socketError:r.channel("undici:websocket:socket_error"),ping:r.channel("undici:websocket:ping"),pong:r.channel("undici:websocket:pong")};let c=!1;function g(e=n){c||(c=!0,r.subscribe("undici:client:beforeConnect",(t=>{const{connectParams:{version:A,protocol:r,port:s,host:n}}=t;e("connecting to %s%s using %s%s",n,s?`:${s}`:"",r,A)})),r.subscribe("undici:client:connected",(t=>{const{connectParams:{version:A,protocol:r,port:s,host:n}}=t;e("connected to %s%s using %s%s",n,s?`:${s}`:"",r,A)})),r.subscribe("undici:client:connectError",(t=>{const{connectParams:{version:A,protocol:r,port:s,host:n},error:i}=t;e("connection to %s%s using %s%s errored - %s",n,s?`:${s}`:"",r,A,i.message)})),r.subscribe("undici:client:sendHeaders",(t=>{const{request:{method:A,path:r,origin:s}}=t;e("sending request to %s %s%s",A,s,r)})))}let l=!1;let h=!1;(n.enabled||i.enabled)&&(g(i.enabled?i:n),function(e=n){l||(l=!0,r.subscribe("undici:request:headers",(t=>{const{request:{method:A,path:r,origin:s},response:{statusCode:n}}=t;e("received response to %s %s%s - HTTP %d",A,s,r,n)})),r.subscribe("undici:request:trailers",(t=>{const{request:{method:A,path:r,origin:s}}=t;e("trailers received from %s %s%s",A,s,r)})),r.subscribe("undici:request:error",(t=>{const{request:{method:A,path:r,origin:s},error:n}=t;e("request to %s %s%s errored - %s",A,s,r,n.message)})))}(i.enabled?i:n)),o.enabled&&(g(n.enabled?n:o),function(e=o){h||(h=!0,r.subscribe("undici:websocket:open",(t=>{const{address:{address:A,port:r}}=t;e("connection opened %s%s",A,r?`:${r}`:"")})),r.subscribe("undici:websocket:close",(t=>{const{websocket:A,code:r,reason:s}=t;e("closed connection to %s - %s %s",A.url,r,s)})),r.subscribe("undici:websocket:socket_error",(t=>{e("connection errored - %s",t.message)})),r.subscribe("undici:websocket:ping",(t=>{e("ping received")})),r.subscribe("undici:websocket:pong",(t=>{e("pong received")})))}(o)),e.exports={channels:a}},4465:e=>{"use strict";const t=Symbol.for("undici.error.UND_ERR");class A extends Error{constructor(e,t){super(e,t),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](e){return e&&!0===e[t]}get[t](){return!0}}const r=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT");class s extends A{constructor(e){super(e),this.name="ConnectTimeoutError",this.message=e||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](e){return e&&!0===e[r]}get[r](){return!0}}const n=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT");class i extends A{constructor(e){super(e),this.name="HeadersTimeoutError",this.message=e||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](e){return e&&!0===e[n]}get[n](){return!0}}const o=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW");class a extends A{constructor(e){super(e),this.name="HeadersOverflowError",this.message=e||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](e){return e&&!0===e[o]}get[o](){return!0}}const c=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT");class g extends A{constructor(e){super(e),this.name="BodyTimeoutError",this.message=e||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](e){return e&&!0===e[c]}get[c](){return!0}}const l=Symbol.for("undici.error.UND_ERR_INVALID_ARG");class h extends A{constructor(e){super(e),this.name="InvalidArgumentError",this.message=e||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](e){return e&&!0===e[l]}get[l](){return!0}}const d=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE");class u extends A{constructor(e){super(e),this.name="InvalidReturnValueError",this.message=e||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](e){return e&&!0===e[d]}get[d](){return!0}}const E=Symbol.for("undici.error.UND_ERR_ABORT");class I extends A{constructor(e){super(e),this.name="AbortError",this.message=e||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](e){return e&&!0===e[E]}get[E](){return!0}}const Q=Symbol.for("undici.error.UND_ERR_ABORTED");class B extends I{constructor(e){super(e),this.name="AbortError",this.message=e||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](e){return e&&!0===e[Q]}get[Q](){return!0}}const C=Symbol.for("undici.error.UND_ERR_INFO");class p extends A{constructor(e){super(e),this.name="InformationalError",this.message=e||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](e){return e&&!0===e[C]}get[C](){return!0}}const f=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH");class m extends A{constructor(e){super(e),this.name="RequestContentLengthMismatchError",this.message=e||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&!0===e[f]}get[f](){return!0}}const y=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH");class D extends A{constructor(e){super(e),this.name="ResponseContentLengthMismatchError",this.message=e||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](e){return e&&!0===e[y]}get[y](){return!0}}const S=Symbol.for("undici.error.UND_ERR_DESTROYED");class w extends A{constructor(e){super(e),this.name="ClientDestroyedError",this.message=e||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](e){return e&&!0===e[S]}get[S](){return!0}}const b=Symbol.for("undici.error.UND_ERR_CLOSED");class R extends A{constructor(e){super(e),this.name="ClientClosedError",this.message=e||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](e){return e&&!0===e[b]}get[b](){return!0}}const N=Symbol.for("undici.error.UND_ERR_SOCKET");class k extends A{constructor(e,t){super(e),this.name="SocketError",this.message=e||"Socket error",this.code="UND_ERR_SOCKET",this.socket=t}static[Symbol.hasInstance](e){return e&&!0===e[N]}get[N](){return!0}}const F=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED");class U extends A{constructor(e){super(e),this.name="NotSupportedError",this.message=e||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](e){return e&&!0===e[F]}get[F](){return!0}}const M=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM");class T extends A{constructor(e){super(e),this.name="MissingUpstreamError",this.message=e||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](e){return e&&!0===e[M]}get[M](){return!0}}const v=Symbol.for("undici.error.UND_ERR_HTTP_PARSER");class L extends Error{constructor(e,t,A){super(e),this.name="HTTPParserError",this.code=t?`HPE_${t}`:void 0,this.data=A?A.toString():void 0}static[Symbol.hasInstance](e){return e&&!0===e[v]}get[v](){return!0}}const H=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE");class Y extends A{constructor(e){super(e),this.name="ResponseExceededMaxSizeError",this.message=e||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](e){return e&&!0===e[H]}get[H](){return!0}}const x=Symbol.for("undici.error.UND_ERR_REQ_RETRY");class P extends A{constructor(e,t,{headers:A,data:r}){super(e),this.name="RequestRetryError",this.message=e||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=t,this.data=r,this.headers=A}static[Symbol.hasInstance](e){return e&&!0===e[x]}get[x](){return!0}}const V=Symbol.for("undici.error.UND_ERR_RESPONSE");class G extends A{constructor(e,t,{headers:A,body:r}){super(e),this.name="ResponseError",this.message=e||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=t,this.body=r,this.headers=A}static[Symbol.hasInstance](e){return e&&!0===e[V]}get[V](){return!0}}const O=Symbol.for("undici.error.UND_ERR_PRX_TLS");class J extends A{constructor(e,t,A={}){super(t,{cause:e,...A}),this.name="SecureProxyConnectionError",this.message=t||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=e}static[Symbol.hasInstance](e){return e&&!0===e[O]}get[O](){return!0}}const W=Symbol.for("undici.error.UND_ERR_MAX_ORIGINS_REACHED");class q extends A{constructor(e){super(e),this.name="MaxOriginsReachedError",this.message=e||"Maximum allowed origins reached",this.code="UND_ERR_MAX_ORIGINS_REACHED"}static[Symbol.hasInstance](e){return e&&!0===e[W]}get[W](){return!0}}e.exports={AbortError:I,HTTPParserError:L,UndiciError:A,HeadersTimeoutError:i,HeadersOverflowError:a,BodyTimeoutError:g,RequestContentLengthMismatchError:m,ConnectTimeoutError:s,InvalidArgumentError:h,InvalidReturnValueError:u,RequestAbortedError:B,ClientDestroyedError:w,ClientClosedError:R,InformationalError:p,SocketError:k,NotSupportedError:U,ResponseContentLengthMismatchError:D,BalancedPoolMissingUpstreamError:T,ResponseExceededMaxSizeError:Y,RequestRetryError:P,ResponseError:G,SecureProxyConnectionError:J,MaxOriginsReachedError:q}},5837:(e,t,A)=>{"use strict";const{InvalidArgumentError:r,NotSupportedError:s}=A(4465),n=A(4589),{isValidHTTPToken:i,isValidHeaderValue:o,isStream:a,destroy:c,isBuffer:g,isFormDataLike:l,isIterable:h,isBlobLike:d,serializePathWithQuery:u,assertRequestHandler:E,getServerName:I,normalizedMethodRecords:Q,getProtocolFromUrlString:B}=A(2858),{channels:C}=A(772),{headerNameLowerCasedRecord:p}=A(9605),f=/[^\u0021-\u00ff]/,m=Symbol("handler");function y(e,t,A){if(A&&"object"==typeof A&&!Array.isArray(A))throw new r(`invalid ${t} header`);if(void 0===A)return;let n=p[t];if(void 0===n&&(n=t.toLowerCase(),void 0===p[n]&&!i(n)))throw new r("invalid header key");if(Array.isArray(A)){const e=[];for(let s=0;s<A.length;s++)if("string"==typeof A[s]){if(!o(A[s]))throw new r(`invalid ${t} header`);e.push(A[s])}else if(null===A[s])e.push("");else{if("object"==typeof A[s])throw new r(`invalid ${t} header`);e.push(`${A[s]}`)}A=e}else if("string"==typeof A){if(!o(A))throw new r(`invalid ${t} header`)}else A=null===A?"":`${A}`;if(null===e.host&&"host"===n){if("string"!=typeof A)throw new r("invalid host header");e.host=A}else if(null===e.contentLength&&"content-length"===n){if(e.contentLength=parseInt(A,10),!Number.isFinite(e.contentLength))throw new r("invalid content-length header")}else if(null===e.contentType&&"content-type"===n)e.contentType=A,e.headers.push(t,A);else{if("transfer-encoding"===n||"keep-alive"===n||"upgrade"===n)throw new r(`invalid ${n} header`);if("connection"===n){const t="string"==typeof A?A.toLowerCase():null;if("close"!==t&&"keep-alive"!==t)throw new r("invalid connection header");"close"===t&&(e.reset=!0)}else{if("expect"===n)throw new s("expect header not supported");e.headers.push(t,A)}}}e.exports=class{constructor(e,{path:t,method:A,body:s,headers:n,query:o,idempotent:p,blocking:D,upgrade:S,headersTimeout:w,bodyTimeout:b,reset:R,expectContinue:N,servername:k,throwOnError:F,maxRedirections:U},M){if("string"!=typeof t)throw new r("path must be a string");if("/"!==t[0]&&!t.startsWith("http://")&&!t.startsWith("https://")&&"CONNECT"!==A)throw new r("path must be an absolute URL or start with a slash");if(f.test(t))throw new r("invalid request path");if("string"!=typeof A)throw new r("method must be a string");if(void 0===Q[A]&&!i(A))throw new r("invalid request method");if(S&&"string"!=typeof S)throw new r("upgrade must be a string");if(null!=w&&(!Number.isFinite(w)||w<0))throw new r("invalid headersTimeout");if(null!=b&&(!Number.isFinite(b)||b<0))throw new r("invalid bodyTimeout");if(null!=R&&"boolean"!=typeof R)throw new r("invalid reset");if(null!=N&&"boolean"!=typeof N)throw new r("invalid expectContinue");if(null!=F)throw new r("invalid throwOnError");if(null!=U&&0!==U)throw new r("maxRedirections is not supported, use the redirect interceptor");if(this.headersTimeout=w,this.bodyTimeout=b,this.method=A,this.abort=null,null==s)this.body=null;else if(a(s)){this.body=s;const e=this.body._readableState;e&&e.autoDestroy||(this.endHandler=function(){c(this)},this.body.on("end",this.endHandler)),this.errorHandler=e=>{this.abort?this.abort(e):this.error=e},this.body.on("error",this.errorHandler)}else if(g(s))this.body=s.byteLength?s:null;else if(ArrayBuffer.isView(s))this.body=s.buffer.byteLength?Buffer.from(s.buffer,s.byteOffset,s.byteLength):null;else if(s instanceof ArrayBuffer)this.body=s.byteLength?Buffer.from(s):null;else if("string"==typeof s)this.body=s.length?Buffer.from(s):null;else{if(!(l(s)||h(s)||d(s)))throw new r("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");this.body=s}if(this.completed=!1,this.aborted=!1,this.upgrade=S||null,this.path=o?u(t,o):t,this.origin=e,this.protocol=B(e),this.idempotent=null==p?"HEAD"===A||"GET"===A:p,this.blocking=D??"HEAD"!==this.method,this.reset=null==R?null:R,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=null!=N&&N,Array.isArray(n)){if(n.length%2!=0)throw new r("headers array must be even");for(let e=0;e<n.length;e+=2)y(this,n[e],n[e+1])}else if(n&&"object"==typeof n)if(n[Symbol.iterator])for(const e of n){if(!Array.isArray(e)||2!==e.length)throw new r("headers must be in key-value pair format");y(this,e[0],e[1])}else{const e=Object.keys(n);for(let t=0;t<e.length;++t)y(this,e[t],n[e[t]])}else if(null!=n)throw new r("headers must be an object or an array");E(M,A,S),this.servername=k||I(this.host)||null,this[m]=M,C.create.hasSubscribers&&C.create.publish({request:this})}onBodySent(e){if(C.bodyChunkSent.hasSubscribers&&C.bodyChunkSent.publish({request:this,chunk:e}),this[m].onBodySent)try{return this[m].onBodySent(e)}catch(e){this.abort(e)}}onRequestSent(){if(C.bodySent.hasSubscribers&&C.bodySent.publish({request:this}),this[m].onRequestSent)try{return this[m].onRequestSent()}catch(e){this.abort(e)}}onConnect(e){if(n(!this.aborted),n(!this.completed),!this.error)return this.abort=e,this[m].onConnect(e);e(this.error)}onResponseStarted(){return this[m].onResponseStarted?.()}onHeaders(e,t,A,r){n(!this.aborted),n(!this.completed),C.headers.hasSubscribers&&C.headers.publish({request:this,response:{statusCode:e,headers:t,statusText:r}});try{return this[m].onHeaders(e,t,A,r)}catch(e){this.abort(e)}}onData(e){n(!this.aborted),n(!this.completed),C.bodyChunkReceived.hasSubscribers&&C.bodyChunkReceived.publish({request:this,chunk:e});try{return this[m].onData(e)}catch(e){return this.abort(e),!1}}onUpgrade(e,t,A){return n(!this.aborted),n(!this.completed),this[m].onUpgrade(e,t,A)}onComplete(e){this.onFinally(),n(!this.aborted),n(!this.completed),this.completed=!0,C.trailers.hasSubscribers&&C.trailers.publish({request:this,trailers:e});try{return this[m].onComplete(e)}catch(e){this.onError(e)}}onError(e){if(this.onFinally(),C.error.hasSubscribers&&C.error.publish({request:this,error:e}),!this.aborted)return this.aborted=!0,this[m].onError(e)}onFinally(){this.errorHandler&&(this.body.off("error",this.errorHandler),this.errorHandler=null),this.endHandler&&(this.body.off("end",this.endHandler),this.endHandler=null)}addHeader(e,t){return y(this,e,t),this}}},257:e=>{"use strict";e.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent")}},1310:(e,t,A)=>{"use strict";const{wellknownHeaderNames:r,headerNameLowerCasedRecord:s}=A(9605);class n{value=null;left=null;middle=null;right=null;code;constructor(e,t,A){if(void 0===A||A>=e.length)throw new TypeError("Unreachable");if((this.code=e.charCodeAt(A))>127)throw new TypeError("key must be ascii string");e.length!==++A?this.middle=new n(e,t,A):this.value=t}add(e,t){const A=e.length;if(0===A)throw new TypeError("Unreachable");let r=0,s=this;for(;;){const i=e.charCodeAt(r);if(i>127)throw new TypeError("key must be ascii string");if(s.code===i){if(A===++r){s.value=t;break}if(null===s.middle){s.middle=new n(e,t,r);break}s=s.middle}else if(s.code<i){if(null===s.left){s.left=new n(e,t,r);break}s=s.left}else{if(null===s.right){s.right=new n(e,t,r);break}s=s.right}}}search(e){const t=e.length;let A=0,r=this;for(;null!==r&&A<t;){let s=e[A];for(s<=90&&s>=65&&(s|=32);null!==r;){if(s===r.code){if(t===++A)return r;r=r.middle;break}r=r.code<s?r.left:r.right}}return null}}class i{node=null;insert(e,t){null===this.node?this.node=new n(e,t,0):this.node.add(e,t)}lookup(e){return this.node?.search(e)?.value??null}}const o=new i;for(let e=0;e<r.length;++e){const t=s[r[e]];o.insert(t,t)}e.exports={TernarySearchTree:i,tree:o}},2858:(e,t,A)=>{"use strict";const r=A(4589),{kDestroyed:s,kBodyUsed:n,kListeners:i,kBody:o}=A(257),{IncomingMessage:a}=A(7067),c=A(7075),g=A(7030),{stringify:l}=A(1792),{EventEmitter:h}=A(8474),d=A(3801),{InvalidArgumentError:u,ConnectTimeoutError:E}=A(4465),{headerNameLowerCasedRecord:I}=A(9605),{tree:Q}=A(1310),[B,C]=process.versions.node.split(".",2).map((e=>Number(e)));class p{constructor(e){this[o]=e,this[n]=!1}async*[Symbol.asyncIterator](){r(!this[n],"disturbed"),this[n]=!0,yield*this[o]}}function f(){}function m(e){return e&&"object"==typeof e&&"function"==typeof e.pipe&&"function"==typeof e.on}function y(e){if(null===e)return!1;if(e instanceof Blob)return!0;if("object"!=typeof e)return!1;{const t=e[Symbol.toStringTag];return("Blob"===t||"File"===t)&&("stream"in e&&"function"==typeof e.stream||"arrayBuffer"in e&&"function"==typeof e.arrayBuffer)}}function D(e){return e.includes("?")||e.includes("#")}function S(e){const t=parseInt(e,10);return t===Number(e)&&t>=0&&t<=65535}function w(e){return null!=e&&"h"===e[0]&&"t"===e[1]&&"t"===e[2]&&"p"===e[3]&&(":"===e[4]||"s"===e[4]&&":"===e[5])}function b(e){if("string"==typeof e){if(!w((e=new URL(e)).origin||e.protocol))throw new u("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}if(!e||"object"!=typeof e)throw new u("Invalid URL: The URL argument must be a non-null object.");if(!(e instanceof URL)){if(null!=e.port&&""!==e.port&&!1===S(e.port))throw new u("Invalid URL: port must be a valid integer or a string representation of an integer.");if(null!=e.path&&"string"!=typeof e.path)throw new u("Invalid URL path: the path must be a string or null/undefined.");if(null!=e.pathname&&"string"!=typeof e.pathname)throw new u("Invalid URL pathname: the pathname must be a string or null/undefined.");if(null!=e.hostname&&"string"!=typeof e.hostname)throw new u("Invalid URL hostname: the hostname must be a string or null/undefined.");if(null!=e.origin&&"string"!=typeof e.origin)throw new u("Invalid URL origin: the origin must be a string or null/undefined.");if(!w(e.origin||e.protocol))throw new u("Invalid URL protocol: the URL must start with `http:` or `https:`.");const t=null!=e.port?e.port:"https:"===e.protocol?443:80;let A=null!=e.origin?e.origin:`${e.protocol||""}//${e.hostname||""}:${t}`,r=null!=e.path?e.path:`${e.pathname||""}${e.search||""}`;return"/"===A[A.length-1]&&(A=A.slice(0,A.length-1)),r&&"/"!==r[0]&&(r=`/${r}`),new URL(`${A}${r}`)}if(!w(e.origin||e.protocol))throw new u("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}function R(e){return!(null==e||"function"!=typeof e[Symbol.iterator]&&"function"!=typeof e[Symbol.asyncIterator])}function N(e){if(null==e)return 0;if(m(e)){const t=e._readableState;return t&&!1===t.objectMode&&!0===t.ended&&Number.isFinite(t.length)?t.length:null}return y(e)?null!=e.size?e.size:null:T(e)?e.byteLength:null}function k(e){return e&&!!(e.destroyed||e[s]||c.isDestroyed?.(e))}function F(e,t){null!=e&&m(e)&&!k(e)&&("function"==typeof e.destroy?(Object.getPrototypeOf(e).constructor===a&&(e.socket=null),e.destroy(t)):t&&queueMicrotask((()=>{e.emit("error",t)})),!0!==e.destroyed&&(e[s]=!0))}const U=/timeout=(\d+)/;function M(e){return"string"==typeof e?I[e]??e.toLowerCase():Q.lookup(e)??e.toString("latin1").toLowerCase()}function T(e){return e instanceof Uint8Array||Buffer.isBuffer(e)}function v(e){switch(e){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return e>=33&&e<=126}}const L=/[^\t\x20-\x7e\x80-\xff]/;const H=/^bytes (\d+)-(\d+)\/(\d+)?$/;const Y="win32"===process.platform?(e,t)=>{if(!t.timeout)return f;let A=null,r=null;const s=d.setFastTimeout((()=>{A=setImmediate((()=>{r=setImmediate((()=>x(e.deref(),t)))}))}),t.timeout);return()=>{d.clearFastTimeout(s),clearImmediate(A),clearImmediate(r)}}:(e,t)=>{if(!t.timeout)return f;let A=null;const r=d.setFastTimeout((()=>{A=setImmediate((()=>{x(e.deref(),t)}))}),t.timeout);return()=>{d.clearFastTimeout(r),clearImmediate(A)}};function x(e,t){if(null==e)return;let A="Connect Timeout Error";Array.isArray(e.autoSelectFamilyAttemptedAddresses)?A+=` (attempted addresses: ${e.autoSelectFamilyAttemptedAddresses.join(", ")},`:A+=` (attempted address: ${t.hostname}:${t.port},`,A+=` timeout: ${t.timeout}ms)`,F(e,new E(A))}const P=Object.create(null);P.enumerable=!0;const V={delete:"DELETE",DELETE:"DELETE",get:"GET",GET:"GET",head:"HEAD",HEAD:"HEAD",options:"OPTIONS",OPTIONS:"OPTIONS",post:"POST",POST:"POST",put:"PUT",PUT:"PUT"},G={...V,patch:"patch",PATCH:"PATCH"};Object.setPrototypeOf(V,null),Object.setPrototypeOf(G,null),e.exports={kEnumerableProperty:P,isDisturbed:function(e){return!(!e||!c.isDisturbed(e)&&!e[n])},isBlobLike:y,parseOrigin:function(e){if("/"!==(e=b(e)).pathname||e.search||e.hash)throw new u("invalid url");return e},parseURL:b,getServerName:function(e){if(!e)return null;r("string"==typeof e);const t=function(e){if("["===e[0]){const t=e.indexOf("]");return r(-1!==t),e.substring(1,t)}const t=e.indexOf(":");return-1===t?e:e.substring(0,t)}(e);return g.isIP(t)?"":t},isStream:m,isIterable:R,isAsyncIterable:function(e){return!(null==e||"function"!=typeof e[Symbol.asyncIterator])},isDestroyed:k,headerNameToString:M,bufferToLowerCasedHeaderName:function(e){return Q.lookup(e)??e.toString("latin1").toLowerCase()},addListener:function(e,t,A){return(e[i]??=[]).push([t,A]),e.on(t,A),e},removeAllListeners:function(e){if(null!=e[i]){for(const[t,A]of e[i])e.removeListener(t,A);e[i]=null}return e},errorRequest:function(e,t,A){try{t.onError(A),r(t.aborted)}catch(A){e.emit("error",A)}},parseRawHeaders:function(e){const t=e.length,A=new Array(t);let r,s,n=!1,i=-1,o=0;for(let a=0;a<t;a+=2)r=e[a],s=e[a+1],"string"!=typeof r&&(r=r.toString()),"string"!=typeof s&&(s=s.toString("utf8")),o=r.length,14!==o||"-"!==r[7]||"content-length"!==r&&"content-length"!==r.toLowerCase()?19!==o||"-"!==r[7]||"content-disposition"!==r&&"content-disposition"!==r.toLowerCase()||(i=a+1):n=!0,A[a]=r,A[a+1]=s;return n&&-1!==i&&(A[i]=Buffer.from(A[i]).toString("latin1")),A},encodeRawHeaders:function(e){if(!Array.isArray(e))throw new TypeError("expected headers to be an array");return e.map((e=>Buffer.from(e)))},parseHeaders:function(e,t){void 0===t&&(t={});for(let A=0;A<e.length;A+=2){const r=M(e[A]);let s=t[r];if(s)"string"==typeof s&&(s=[s],t[r]=s),s.push(e[A+1].toString("utf8"));else{const s=e[A+1];t[r]="string"==typeof s?s:Array.isArray(s)?s.map((e=>e.toString("utf8"))):s.toString("utf8")}}return"content-length"in t&&"content-disposition"in t&&(t["content-disposition"]=Buffer.from(t["content-disposition"]).toString("latin1")),t},parseKeepAliveTimeout:function(e){const t=e.match(U);return t?1e3*parseInt(t[1],10):null},destroy:F,bodyLength:N,deepClone:function(e){return JSON.parse(JSON.stringify(e))},ReadableStreamFrom:function(e){let t;return new ReadableStream({start(){t=e[Symbol.asyncIterator]()},pull(e){return t.next().then((({done:t,value:A})=>{if(t)queueMicrotask((()=>{e.close(),e.byobRequest?.respond(0)}));else{const t=Buffer.isBuffer(A)?A:Buffer.from(A);if(!t.byteLength)return this.pull(e);e.enqueue(new Uint8Array(t))}}))},cancel:()=>t.return(),type:"bytes"})},isBuffer:T,assertRequestHandler:function(e,t,A){if(!e||"object"!=typeof e)throw new u("handler must be an object");if("function"!=typeof e.onRequestStart){if("function"!=typeof e.onConnect)throw new u("invalid onConnect method");if("function"!=typeof e.onError)throw new u("invalid onError method");if("function"!=typeof e.onBodySent&&void 0!==e.onBodySent)throw new u("invalid onBodySent method");if(A||"CONNECT"===t){if("function"!=typeof e.onUpgrade)throw new u("invalid onUpgrade method")}else{if("function"!=typeof e.onHeaders)throw new u("invalid onHeaders method");if("function"!=typeof e.onData)throw new u("invalid onData method");if("function"!=typeof e.onComplete)throw new u("invalid onComplete method")}}},getSocketInfo:function(e){return{localAddress:e.localAddress,localPort:e.localPort,remoteAddress:e.remoteAddress,remotePort:e.remotePort,remoteFamily:e.remoteFamily,timeout:e.timeout,bytesWritten:e.bytesWritten,bytesRead:e.bytesRead}},isFormDataLike:function(e){return e&&"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"FormData"===e[Symbol.toStringTag]},pathHasQueryOrFragment:D,serializePathWithQuery:function(e,t){if(D(e))throw new Error('Query params cannot be passed when url already contains "?" or "#".');const A=l(t);return A&&(e+="?"+A),e},addAbortListener:function(e,t){return"addEventListener"in e?(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)):(e.once("abort",t),()=>e.removeListener("abort",t))},isValidHTTPToken:function(e){if(0===e.length)return!1;for(let t=0;t<e.length;++t)if(!v(e.charCodeAt(t)))return!1;return!0},isValidHeaderValue:function(e){return!L.test(e)},isTokenCharCode:v,parseRangeHeader:function(e){if(null==e||""===e)return{start:0,end:null,size:null};const t=e?e.match(H):null;return t?{start:parseInt(t[1]),end:t[2]?parseInt(t[2]):null,size:t[3]?parseInt(t[3]):null}:null},normalizedMethodRecordsBase:V,normalizedMethodRecords:G,isValidPort:S,isHttpOrHttpsPrefixed:w,nodeMajor:B,nodeMinor:C,safeHTTPMethods:Object.freeze(["GET","HEAD","OPTIONS","TRACE"]),wrapRequestBody:function(e){return m(e)?(0===N(e)&&e.on("data",(function(){r(!1)})),"boolean"!=typeof e.readableDidRead&&(e[n]=!1,h.prototype.on.call(e,"data",(function(){this[n]=!0}))),e):e&&"function"==typeof e.pipeTo||e&&"string"!=typeof e&&!ArrayBuffer.isView(e)&&R(e)?new p(e):e},setupConnectTimeout:Y,getProtocolFromUrlString:function(e){if("h"===e[0]&&"t"===e[1]&&"t"===e[2]&&"p"===e[3])switch(e[4]){case":":return"http:";case"s":if(":"===e[5])return"https:"}return e.slice(0,e.indexOf(":")+1)}}},3315:(e,t,A)=>{"use strict";const{InvalidArgumentError:r,MaxOriginsReachedError:s}=A(4465),{kClients:n,kRunning:i,kClose:o,kDestroy:a,kDispatch:c,kUrl:g}=A(257),l=A(7779),h=A(8542),d=A(1167),u=A(2858),E=Symbol("onConnect"),I=Symbol("onDisconnect"),Q=Symbol("onConnectionError"),B=Symbol("onDrain"),C=Symbol("factory"),p=Symbol("options"),f=Symbol("origins");function m(e,t){return t&&1===t.connections?new d(e,t):new h(e,t)}e.exports=class extends l{constructor({factory:e=m,maxOrigins:t=1/0,connect:A,...s}={}){if("function"!=typeof e)throw new r("factory must be a function.");if(null!=A&&"function"!=typeof A&&"object"!=typeof A)throw new r("connect must be a function or an object");if("number"!=typeof t||Number.isNaN(t)||t<=0)throw new r("maxOrigins must be a number greater than 0");super(),A&&"function"!=typeof A&&(A={...A}),this[p]={...u.deepClone(s),maxOrigins:t,connect:A},this[C]=e,this[n]=new Map,this[f]=new Set,this[B]=(e,t)=>{this.emit("drain",e,[this,...t])},this[E]=(e,t)=>{this.emit("connect",e,[this,...t])},this[I]=(e,t,A)=>{this.emit("disconnect",e,[this,...t],A)},this[Q]=(e,t,A)=>{this.emit("connectionError",e,[this,...t],A)}}get[i](){let e=0;for(const{dispatcher:t}of this[n].values())e+=t[i];return e}[c](e,t){let A;if(!e.origin||!("string"==typeof e.origin||e.origin instanceof URL))throw new r("opts.origin must be a non-empty string or URL.");if(A=String(e.origin),this[f].size>=this[p].maxOrigins&&!this[f].has(A))throw new s;const i=this[n].get(A);let o=i&&i.dispatcher;if(!o){const t=e=>{const t=this[n].get(A);t&&(e&&(t.count-=1),t.count<=0&&(this[n].delete(A),t.dispatcher.close()),this[f].delete(A))};o=this[C](e.origin,this[p]).on("drain",this[B]).on("connect",((e,t)=>{const r=this[n].get(A);r&&(r.count+=1),this[E](e,t)})).on("disconnect",((e,A,r)=>{t(!0),this[I](e,A,r)})).on("connectionError",((e,A,r)=>{t(!1),this[Q](e,A,r)})),this[n].set(A,{count:0,dispatcher:o}),this[f].add(A)}return o.dispatch(e,t)}[o](){const e=[];for(const{dispatcher:t}of this[n].values())e.push(t.close());return this[n].clear(),Promise.all(e)}[a](e){const t=[];for(const{dispatcher:A}of this[n].values())t.push(A.destroy(e));return this[n].clear(),Promise.all(t)}get stats(){const e={};for(const{dispatcher:t}of this[n].values())t.stats&&(e[t[g].origin]=t.stats);return e}}},8055:(e,t,A)=>{"use strict";const{BalancedPoolMissingUpstreamError:r,InvalidArgumentError:s}=A(4465),{PoolBase:n,kClients:i,kNeedDrain:o,kAddClient:a,kRemoveClient:c,kGetDispatcher:g}=A(1694),l=A(8542),{kUrl:h}=A(257),{parseOrigin:d}=A(2858),u=Symbol("factory"),E=Symbol("options"),I=Symbol("kGreatestCommonDivisor"),Q=Symbol("kCurrentWeight"),B=Symbol("kIndex"),C=Symbol("kWeight"),p=Symbol("kMaxWeightPerServer"),f=Symbol("kErrorPenalty");function m(e,t){if(0===e)return t;for(;0!==t;){const A=t;t=e%t,e=A}return e}function y(e,t){return new l(e,t)}e.exports=class extends n{constructor(e=[],{factory:t=y,...A}={}){if("function"!=typeof t)throw new s("factory must be a function.");super(),this[E]=A,this[B]=-1,this[Q]=0,this[p]=this[E].maxWeightPerServer||100,this[f]=this[E].errorPenalty||15,Array.isArray(e)||(e=[e]),this[u]=t;for(const t of e)this.addUpstream(t);this._updateBalancedPoolStats()}addUpstream(e){const t=d(e).origin;if(this[i].find((e=>e[h].origin===t&&!0!==e.closed&&!0!==e.destroyed)))return this;const A=this[u](t,Object.assign({},this[E]));this[a](A),A.on("connect",(()=>{A[C]=Math.min(this[p],A[C]+this[f])})),A.on("connectionError",(()=>{A[C]=Math.max(1,A[C]-this[f]),this._updateBalancedPoolStats()})),A.on("disconnect",((...e)=>{const t=e[2];t&&"UND_ERR_SOCKET"===t.code&&(A[C]=Math.max(1,A[C]-this[f]),this._updateBalancedPoolStats())}));for(const e of this[i])e[C]=this[p];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let t=0;t<this[i].length;t++)e=m(this[i][t][C],e);this[I]=e}removeUpstream(e){const t=d(e).origin,A=this[i].find((e=>e[h].origin===t&&!0!==e.closed&&!0!==e.destroyed));return A&&this[c](A),this}get upstreams(){return this[i].filter((e=>!0!==e.closed&&!0!==e.destroyed)).map((e=>e[h].origin))}[g](){if(0===this[i].length)throw new r;if(!this[i].find((e=>!e[o]&&!0!==e.closed&&!0!==e.destroyed)))return;if(this[i].map((e=>e[o])).reduce(((e,t)=>e&&t),!0))return;let e=0,t=this[i].findIndex((e=>!e[o]));for(;e++<this[i].length;){this[B]=(this[B]+1)%this[i].length;const e=this[i][this[B]];if(e[C]>this[i][t][C]&&!e[o]&&(t=this[B]),0===this[B]&&(this[Q]=this[Q]-this[I],this[Q]<=0&&(this[Q]=this[p])),e[C]>=this[Q]&&!e[o])return e}return this[Q]=this[i][t][C],this[B]=t,this[i][t]}}},9355:(e,t,A)=>{"use strict";const r=A(4589),s=A(2858),{channels:n}=A(772),i=A(3801),{RequestContentLengthMismatchError:o,ResponseContentLengthMismatchError:a,RequestAbortedError:c,HeadersTimeoutError:g,HeadersOverflowError:l,SocketError:h,InformationalError:d,BodyTimeoutError:u,HTTPParserError:E,ResponseExceededMaxSizeError:I}=A(4465),{kUrl:Q,kReset:B,kClient:C,kParser:p,kBlocking:f,kRunning:m,kPending:y,kSize:D,kWriting:S,kQueue:w,kNoRef:b,kKeepAliveDefaultTimeout:R,kHostHeader:N,kPendingIdx:k,kRunningIdx:F,kError:U,kPipelining:M,kSocket:T,kKeepAliveTimeoutValue:v,kMaxHeadersSize:L,kKeepAliveMaxTimeout:H,kKeepAliveTimeoutThreshold:Y,kHeadersTimeout:x,kBodyTimeout:P,kStrictContentLength:V,kMaxRequests:G,kCounter:O,kMaxResponseSize:J,kOnError:W,kResume:q,kHTTPContext:_,kClosed:X}=A(257),Z=A(4178),z=Buffer.alloc(0),j=Buffer[Symbol.species],$=s.removeAllListeners;let K;let ee=null,te=null,Ae=null,re=0,se=null;class ne{constructor(e,t,{exports:A}){this.llhttp=A,this.ptr=this.llhttp.llhttp_alloc(Z.TYPE.RESPONSE),this.client=e,this.socket=t,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=0,this.statusText="",this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[L],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.contentLength="",this.connection="",this.maxResponseSize=e[J]}setTimeout(e,t){e!==this.timeoutValue||1&t^1&this.timeoutType?(this.timeout&&(i.clearTimeout(this.timeout),this.timeout=null),e&&(1&t?this.timeout=i.setFastTimeout(ie,e,new WeakRef(this)):(this.timeout=setTimeout(ie,e,new WeakRef(this)),this.timeout?.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=t}resume(){!this.socket.destroyed&&this.paused&&(r(null!=this.ptr),r(null===te),this.llhttp.llhttp_resume(this.ptr),r(5===this.timeoutType),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||z),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){const e=this.socket.read();if(null===e)break;this.execute(e)}}execute(e){r(null===te),r(null!=this.ptr),r(!this.paused);const{socket:t,llhttp:A}=this;e.length>re&&(se&&A.free(se),re=4096*Math.ceil(e.length/4096),se=A.malloc(re)),new Uint8Array(A.memory.buffer,se,re).set(e);try{let r;try{Ae=e,te=this,r=A.llhttp_execute(this.ptr,se,e.length)}finally{te=null,Ae=null}if(r!==Z.ERROR.OK){const s=e.subarray(A.llhttp_get_error_pos(this.ptr)-se);if(r===Z.ERROR.PAUSED_UPGRADE)this.onUpgrade(s);else{if(r!==Z.ERROR.PAUSED){const e=A.llhttp_get_error_reason(this.ptr);let t="";if(e){const r=new Uint8Array(A.memory.buffer,e).indexOf(0);t="Response does not match the HTTP/1.1 protocol ("+Buffer.from(A.memory.buffer,e,r).toString()+")"}throw new E(t,Z.ERROR[r],s)}this.paused=!0,t.unshift(s)}}}catch(e){s.destroy(t,e)}}destroy(){r(null===te),r(null!=this.ptr),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&i.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){return this.statusText=e.toString(),0}onMessageBegin(){const{socket:e,client:t}=this;if(e.destroyed)return-1;const A=t[w][t[F]];return A?(A.onResponseStarted(),0):-1}onHeaderField(e){const t=this.headers.length;return 1&t?this.headers[t-1]=Buffer.concat([this.headers[t-1],e]):this.headers.push(e),this.trackHeader(e.length),0}onHeaderValue(e){let t=this.headers.length;1&~t?this.headers[t-1]=Buffer.concat([this.headers[t-1],e]):(this.headers.push(e),t+=1);const A=this.headers[t-2];if(10===A.length){const t=s.bufferToLowerCasedHeaderName(A);"keep-alive"===t?this.keepAlive+=e.toString():"connection"===t&&(this.connection+=e.toString())}else 14===A.length&&"content-length"===s.bufferToLowerCasedHeaderName(A)&&(this.contentLength+=e.toString());return this.trackHeader(e.length),0}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&s.destroy(this.socket,new l)}onUpgrade(e){const{upgrade:t,client:A,socket:n,headers:i,statusCode:o}=this;r(t),r(A[T]===n),r(!n.destroyed),r(!this.paused),r(!(1&i.length));const a=A[w][A[F]];r(a),r(a.upgrade||"CONNECT"===a.method),this.statusCode=0,this.statusText="",this.shouldKeepAlive=!1,this.headers=[],this.headersSize=0,n.unshift(e),n[p].destroy(),n[p]=null,n[C]=null,n[U]=null,$(n),A[T]=null,A[_]=null,A[w][A[F]++]=null,A.emit("disconnect",A[Q],[A],new d("upgrade"));try{a.onUpgrade(o,i,n)}catch(e){s.destroy(n,e)}A[q]()}onHeadersComplete(e,t,A){const{client:n,socket:i,headers:o,statusText:a}=this;if(i.destroyed)return-1;const c=n[w][n[F]];if(!c)return-1;if(r(!this.upgrade),r(this.statusCode<200),100===e)return s.destroy(i,new h("bad response",s.getSocketInfo(i))),-1;if(t&&!c.upgrade)return s.destroy(i,new h("bad upgrade",s.getSocketInfo(i))),-1;if(r(3===this.timeoutType),this.statusCode=e,this.shouldKeepAlive=A||"HEAD"===c.method&&!i[B]&&"keep-alive"===this.connection.toLowerCase(),this.statusCode>=200){const e=null!=c.bodyTimeout?c.bodyTimeout:n[P];this.setTimeout(e,5)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if("CONNECT"===c.method)return r(1===n[m]),this.upgrade=!0,2;if(t)return r(1===n[m]),this.upgrade=!0,2;if(r(!(1&this.headers.length)),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&n[M]){const e=this.keepAlive?s.parseKeepAliveTimeout(this.keepAlive):null;if(null!=e){const t=Math.min(e-n[Y],n[H]);t<=0?i[B]=!0:n[v]=t}else n[v]=n[R]}else i[B]=!0;const g=!1===c.onHeaders(e,o,this.resume,a);return c.aborted?-1:"HEAD"===c.method||e<200?1:(i[f]&&(i[f]=!1,n[q]()),g?Z.ERROR.PAUSED:0)}onBody(e){const{client:t,socket:A,statusCode:n,maxResponseSize:i}=this;if(A.destroyed)return-1;const o=t[w][t[F]];return r(o),r(5===this.timeoutType),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),r(n>=200),i>-1&&this.bytesRead+e.length>i?(s.destroy(A,new I),-1):(this.bytesRead+=e.length,!1===o.onData(e)?Z.ERROR.PAUSED:0)}onMessageComplete(){const{client:e,socket:t,statusCode:A,upgrade:n,headers:i,contentLength:o,bytesRead:c,shouldKeepAlive:g}=this;if(t.destroyed&&(!A||g))return-1;if(n)return 0;r(A>=100),r(!(1&this.headers.length));const l=e[w][e[F]];return r(l),this.statusCode=0,this.statusText="",this.bytesRead=0,this.contentLength="",this.keepAlive="",this.connection="",this.headers=[],this.headersSize=0,A<200?0:"HEAD"!==l.method&&o&&c!==parseInt(o,10)?(s.destroy(t,new a),-1):(l.onComplete(i),e[w][e[F]++]=null,t[S]?(r(0===e[m]),s.destroy(t,new d("reset")),Z.ERROR.PAUSED):g?t[B]&&0===e[m]?(s.destroy(t,new d("reset")),Z.ERROR.PAUSED):(null==e[M]||1===e[M]?setImmediate(e[q]):e[q](),0):(s.destroy(t,new d("reset")),Z.ERROR.PAUSED))}}function ie(e){const{socket:t,timeoutType:A,client:n,paused:i}=e.deref();3===A?(!t[S]||t.writableNeedDrain||n[m]>1)&&(r(!i,"cannot be paused while waiting for headers"),s.destroy(t,new g)):5===A?i||s.destroy(t,new u):8===A&&(r(0===n[m]&&n[v]),s.destroy(t,new d("socket idle timeout")))}function oe(e){r("ERR_TLS_CERT_ALTNAME_INVALID"!==e.code);const t=this[p];"ECONNRESET"!==e.code||!t.statusCode||t.shouldKeepAlive?(this[U]=e,this[C][W](e)):t.onMessageComplete()}function ae(){this[p]?.readMore()}function ce(){const e=this[p];!e.statusCode||e.shouldKeepAlive?s.destroy(this,new h("other side closed",s.getSocketInfo(this))):e.onMessageComplete()}function ge(){const e=this[p];e&&(this[U]||!e.statusCode||e.shouldKeepAlive||e.onMessageComplete(),this[p].destroy(),this[p]=null);const t=this[U]||new h("closed",s.getSocketInfo(this)),A=this[C];if(A[T]=null,A[_]=null,A.destroyed){r(0===A[y]);const e=A[w].splice(A[F]);for(let r=0;r<e.length;r++){const n=e[r];s.errorRequest(A,n,t)}}else if(A[m]>0&&"UND_ERR_INFO"!==t.code){const e=A[w][A[F]];A[w][A[F]++]=null,s.errorRequest(A,e,t)}A[k]=A[F],r(0===A[m]),A.emit("disconnect",A[Q],[A],t),A[q]()}function le(){this[X]=!0}function he(e,t,A,n,i,o,a,c){try{t?s.isBuffer(t)&&(r(o===t.byteLength,"buffer body must have content length"),i.cork(),i.write(`${a}content-length: ${o}\r\n\r\n`,"latin1"),i.write(t),i.uncork(),n.onBodySent(t),c||!1===n.reset||(i[B]=!0)):0===o?i.write(`${a}content-length: 0\r\n\r\n`,"latin1"):(r(null===o,"no body must not have content length"),i.write(`${a}\r\n`,"latin1")),n.onRequestSent(),A[q]()}catch(t){e(t)}}async function de(e,t,A,s,n,i,o,a){r(0!==i||0===A[m],"iterator body cannot be pipelined");let c=null;function g(){if(c){const e=c;c=null,e()}}n.on("close",g).on("drain",g);const l=new ue({abort:e,socket:n,request:s,contentLength:i,client:A,expectsPayload:a,header:o});try{for await(const e of t){if(n[U])throw n[U];l.write(e)||await new Promise(((e,t)=>{r(null===c),n[U]?t(n[U]):c=e}))}l.end()}catch(e){l.destroy(e)}finally{n.off("close",g).off("drain",g)}}class ue{constructor({abort:e,socket:t,request:A,contentLength:r,client:s,expectsPayload:n,header:i}){this.socket=t,this.request=A,this.contentLength=r,this.client=s,this.bytesWritten=0,this.expectsPayload=n,this.header=i,this.abort=e,t[S]=!0}write(e){const{socket:t,request:A,contentLength:r,client:s,bytesWritten:n,expectsPayload:i,header:a}=this;if(t[U])throw t[U];if(t.destroyed)return!1;const c=Buffer.byteLength(e);if(!c)return!0;if(null!==r&&n+c>r){if(s[V])throw new o;process.emitWarning(new o)}t.cork(),0===n&&(i||!1===A.reset||(t[B]=!0),null===r?t.write(`${a}transfer-encoding: chunked\r\n`,"latin1"):t.write(`${a}content-length: ${r}\r\n\r\n`,"latin1")),null===r&&t.write(`\r\n${c.toString(16)}\r\n`,"latin1"),this.bytesWritten+=c;const g=t.write(e);return t.uncork(),A.onBodySent(e),g||t[p].timeout&&3===t[p].timeoutType&&t[p].timeout.refresh&&t[p].timeout.refresh(),g}end(){const{socket:e,contentLength:t,client:A,bytesWritten:r,expectsPayload:s,header:n,request:i}=this;if(i.onRequestSent(),e[S]=!1,e[U])throw e[U];if(!e.destroyed){if(0===r?s?e.write(`${n}content-length: 0\r\n\r\n`,"latin1"):e.write(`${n}\r\n`,"latin1"):null===t&&e.write("\r\n0\r\n\r\n","latin1"),null!==t&&r!==t){if(A[V])throw new o;process.emitWarning(new o)}e[p].timeout&&3===e[p].timeoutType&&e[p].timeout.refresh&&e[p].timeout.refresh(),A[q]()}}destroy(e){const{socket:t,client:A,abort:s}=this;t[S]=!1,e&&(r(A[m]<=1,"pipeline should only contain this request"),s(e))}}e.exports=function(e,t){if(e[T]=t,ee||(ee=function(){const e=process.env.JEST_WORKER_ID?A(4744):void 0;let t,s="ppc64"!==process.arch;if("1"===process.env.UNDICI_NO_WASM_SIMD?s=!0:"0"===process.env.UNDICI_NO_WASM_SIMD&&(s=!1),s)try{t=new WebAssembly.Module(A(7136))}catch{}return t||(t=new WebAssembly.Module(e||A(4744))),new WebAssembly.Instance(t,{env:{wasm_on_url:(e,t,A)=>0,wasm_on_status:(e,t,A)=>{r(te.ptr===e);const s=t-se+Ae.byteOffset;return te.onStatus(new j(Ae.buffer,s,A))},wasm_on_message_begin:e=>(r(te.ptr===e),te.onMessageBegin()),wasm_on_header_field:(e,t,A)=>{r(te.ptr===e);const s=t-se+Ae.byteOffset;return te.onHeaderField(new j(Ae.buffer,s,A))},wasm_on_header_value:(e,t,A)=>{r(te.ptr===e);const s=t-se+Ae.byteOffset;return te.onHeaderValue(new j(Ae.buffer,s,A))},wasm_on_headers_complete:(e,t,A,s)=>(r(te.ptr===e),te.onHeadersComplete(t,1===A,1===s)),wasm_on_body:(e,t,A)=>{r(te.ptr===e);const s=t-se+Ae.byteOffset;return te.onBody(new j(Ae.buffer,s,A))},wasm_on_message_complete:e=>(r(te.ptr===e),te.onMessageComplete())}})}()),t.errored)throw t.errored;if(t.destroyed)throw new h("destroyed");return t[b]=!1,t[S]=!1,t[B]=!1,t[f]=!1,t[p]=new ne(e,t,ee),s.addListener(t,"error",oe),s.addListener(t,"readable",ae),s.addListener(t,"end",ce),s.addListener(t,"close",ge),t[X]=!1,t.on("close",le),{version:"h1",defaultPipelining:1,write:t=>function(e,t){const{method:i,path:a,host:g,upgrade:l,blocking:h,reset:u}=t;let{body:E,headers:I,contentLength:Q}=t;const C="PUT"===i||"POST"===i||"PATCH"===i||"QUERY"===i||"PROPFIND"===i||"PROPPATCH"===i;if(s.isFormDataLike(E)){K||(K=A(2530).extractBody);const[e,r]=K(E);null==t.contentType&&I.push("content-type",r),E=e.stream,Q=e.length}else s.isBlobLike(E)&&null==t.contentType&&E.type&&I.push("content-type",E.type);E&&"function"==typeof E.read&&E.read(0);const p=s.bodyLength(E);Q=p??Q,null===Q&&(Q=t.contentLength);0!==Q||C||(Q=null);if(function(e){return"GET"!==e&&"HEAD"!==e&&"OPTIONS"!==e&&"TRACE"!==e&&"CONNECT"!==e}(i)&&Q>0&&null!==t.contentLength&&t.contentLength!==Q){if(e[V])return s.errorRequest(e,t,new o),!1;process.emitWarning(new o)}const y=e[T],D=A=>{t.aborted||t.completed||(s.errorRequest(e,t,A||new c),s.destroy(E),s.destroy(y,new d("aborted")))};try{t.onConnect(D)}catch(A){s.errorRequest(e,t,A)}if(t.aborted)return!1;"HEAD"===i&&(y[B]=!0);(l||"CONNECT"===i)&&(y[B]=!0);null!=u&&(y[B]=u);e[G]&&y[O]++>=e[G]&&(y[B]=!0);h&&(y[f]=!0);let w=`${i} ${a} HTTP/1.1\r\n`;w+="string"==typeof g?`host: ${g}\r\n`:e[N];l?w+=`connection: upgrade\r\nupgrade: ${l}\r\n`:e[M]&&!y[B]?w+="connection: keep-alive\r\n":w+="connection: close\r\n";if(Array.isArray(I))for(let e=0;e<I.length;e+=2){const t=I[e+0],A=I[e+1];if(Array.isArray(A))for(let e=0;e<A.length;e++)w+=`${t}: ${A[e]}\r\n`;else w+=`${t}: ${A}\r\n`}n.sendHeaders.hasSubscribers&&n.sendHeaders.publish({request:t,headers:w,socket:y});E&&0!==p?s.isBuffer(E)?he(D,E,e,t,y,Q,w,C):s.isBlobLike(E)?"function"==typeof E.stream?de(D,E.stream(),e,t,y,Q,w,C):async function(e,t,A,s,n,i,a,c){r(i===t.size,"blob body must have content length");try{if(null!=i&&i!==t.size)throw new o;const e=Buffer.from(await t.arrayBuffer());n.cork(),n.write(`${a}content-length: ${i}\r\n\r\n`,"latin1"),n.write(e),n.uncork(),s.onBodySent(e),s.onRequestSent(),c||!1===s.reset||(n[B]=!0),A[q]()}catch(t){e(t)}}(D,E,e,t,y,Q,w,C):s.isStream(E)?function(e,t,A,n,i,o,a,g){r(0!==o||0===A[m],"stream body cannot be pipelined");let l=!1;const h=new ue({abort:e,socket:i,request:n,contentLength:o,client:A,expectsPayload:g,header:a}),d=function(e){if(!l)try{!h.write(e)&&this.pause&&this.pause()}catch(e){s.destroy(this,e)}},u=function(){l||t.resume&&t.resume()},E=function(){if(queueMicrotask((()=>{t.removeListener("error",I)})),!l){const e=new c;queueMicrotask((()=>I(e)))}},I=function(e){if(!l){if(l=!0,r(i.destroyed||i[S]&&A[m]<=1),i.off("drain",u).off("error",I),t.removeListener("data",d).removeListener("end",I).removeListener("close",E),!e)try{h.end()}catch(t){e=t}h.destroy(e),!e||"UND_ERR_INFO"===e.code&&"reset"===e.message?s.destroy(t):s.destroy(t,e)}};t.on("data",d).on("end",I).on("error",I).on("close",E),t.resume&&t.resume();i.on("drain",u).on("error",I),t.errorEmitted??t.errored?setImmediate(I,t.errored):(t.endEmitted??t.readableEnded)&&setImmediate(I,null);(t.closeEmitted??t.closed)&&setImmediate(E)}(D,E,e,t,y,Q,w,C):s.isIterable(E)?de(D,E,e,t,y,Q,w,C):r(!1):he(D,null,e,t,y,Q,w,C);return!0}(e,t),resume(){!function(e){const t=e[T];if(t&&!t.destroyed)if(0===e[D]?!t[b]&&t.unref&&(t.unref(),t[b]=!0):t[b]&&t.ref&&(t.ref(),t[b]=!1),0===e[D])8!==t[p].timeoutType&&t[p].setTimeout(e[v],8);else if(e[m]>0&&t[p].statusCode<200&&3!==t[p].timeoutType){const A=e[w][e[F]],r=null!=A.headersTimeout?A.headersTimeout:e[x];t[p].setTimeout(r,3)}}(e)},destroy(e,A){t[X]?queueMicrotask(A):(t.on("close",A),t.destroy(e))},get destroyed(){return t.destroyed},busy(A){if(t[S]||t[B]||t[f])return!0;if(A){if(e[m]>0&&!A.idempotent)return!0;if(e[m]>0&&(A.upgrade||"CONNECT"===A.method))return!0;if(e[m]>0&&0!==s.bodyLength(A.body)&&(s.isStream(A.body)||s.isAsyncIterable(A.body)||s.isFormDataLike(A.body)))return!0}return!1}}}},8142:(e,t,A)=>{"use strict";const r=A(4589),{pipeline:s}=A(7075),n=A(2858),{RequestContentLengthMismatchError:i,RequestAbortedError:o,SocketError:a,InformationalError:c}=A(4465),{kUrl:g,kReset:l,kClient:h,kRunning:d,kPending:u,kQueue:E,kPendingIdx:I,kRunningIdx:Q,kError:B,kSocket:C,kStrictContentLength:p,kOnError:f,kMaxConcurrentStreams:m,kHTTP2Session:y,kResume:D,kSize:S,kHTTPContext:w,kClosed:b,kBodyTimeout:R}=A(257),{channels:N}=A(772),k=Symbol("open streams");let F,U;try{U=A(2467)}catch{U={constants:{}}}const{constants:{HTTP2_HEADER_AUTHORITY:M,HTTP2_HEADER_METHOD:T,HTTP2_HEADER_PATH:v,HTTP2_HEADER_SCHEME:L,HTTP2_HEADER_CONTENT_LENGTH:H,HTTP2_HEADER_EXPECT:Y,HTTP2_HEADER_STATUS:x}}=U;function P(e){r("ERR_TLS_CERT_ALTNAME_INVALID"!==e.code),this[C][B]=e,this[h][f](e)}function V(e,t,A){if(0===A){const A=new c(`HTTP/2: "frameError" received - type ${e}, code ${t}`);this[C][B]=A,this[h][f](A)}}function G(){const e=new a("other side closed",n.getSocketInfo(this[C]));this.destroy(e),n.destroy(this[C],e)}function O(e){const t=this[B]||new a(`HTTP/2: "GOAWAY" frame received with code ${e}`,n.getSocketInfo(this[C])),A=this[h];if(A[C]=null,A[w]=null,this.close(),this[y]=null,n.destroy(this[C],t),A[Q]<A[E].length){const e=A[E][A[Q]];A[E][A[Q]++]=null,n.errorRequest(A,e,t),A[I]=A[Q]}r(0===A[d]),A.emit("disconnect",A[g],[A],t),A.emit("connectionError",A[g],[A],t),A[D]()}function J(){const{[h]:e}=this,{[C]:t}=e,A=this[C][B]||this[B]||new a("closed",n.getSocketInfo(t));if(e[C]=null,e[w]=null,e.destroyed){r(0===e[u]);const t=e[E].splice(e[Q]);for(let r=0;r<t.length;r++){const s=t[r];n.errorRequest(e,s,A)}}}function W(){const e=this[B]||new a("closed",n.getSocketInfo(this)),t=this[y][h];t[C]=null,t[w]=null,null!==this[y]&&this[y].destroy(e),t[I]=t[Q],r(0===t[d]),t.emit("disconnect",t[g],[t],e),t[D]()}function q(e){r("ERR_TLS_CERT_ALTNAME_INVALID"!==e.code),this[B]=e,this[h][f](e)}function _(){n.destroy(this,new a("other side closed",n.getSocketInfo(this)))}function X(){this[b]=!0}function Z(e,t,A,s,i,o,a,c){try{null!=A&&n.isBuffer(A)&&(r(a===A.byteLength,"buffer body must have content length"),t.cork(),t.write(A),t.uncork(),t.end(),i.onBodySent(A)),c||(o[l]=!0),i.onRequestSent(),s[D]()}catch(t){e(t)}}async function z(e,t,A,s,n,i,o,a){r(0!==o||0===s[d],"iterator body cannot be pipelined");let c=null;function g(){if(c){const e=c;c=null,e()}}t.on("close",g).on("drain",g);try{for await(const e of A){if(i[B])throw i[B];const A=t.write(e);n.onBodySent(e),A||await new Promise(((e,t)=>{r(null===c),i[B]?t(i[B]):c=e}))}t.end(),n.onRequestSent(),a||(i[l]=!0),s[D]()}catch(t){e(t)}finally{t.off("close",g).off("drain",g)}}e.exports=function(e,t){e[C]=t;const a=U.connect(e[g],{createConnection:()=>t,peerMaxConcurrentStreams:e[m],settings:{enablePush:!1}});return a[k]=0,a[h]=e,a[C]=t,a[y]=null,n.addListener(a,"error",P),n.addListener(a,"frameError",V),n.addListener(a,"end",G),n.addListener(a,"goaway",O),n.addListener(a,"close",J),a.unref(),e[y]=a,t[y]=a,n.addListener(t,"error",q),n.addListener(t,"end",_),n.addListener(t,"close",W),t[b]=!1,t.on("close",X),{version:"h2",defaultPipelining:1/0,write:t=>function(e,t){const a=t.bodyTimeout??e[R],h=e[y],{method:u,path:B,host:m,upgrade:S,expectContinue:w,signal:b,protocol:U,headers:P}=t;let{body:V}=t;if(S)return n.errorRequest(e,t,new Error("Upgrade not supported for H2")),!1;const G={};for(let e=0;e<P.length;e+=2){const t=P[e+0],A=P[e+1];if("cookie"!==t)if(Array.isArray(A))for(let e=0;e<A.length;e++)G[t]?G[t]+=`, ${A[e]}`:G[t]=A[e];else G[t]?G[t]+=`, ${A}`:G[t]=A;else null!=G[t]?G[t]=Array.isArray(G[t])?(G[t].push(A),G[t]):[G[t],A]:G[t]=A}let O=null;const{hostname:J,port:W}=e[g];G[M]=m||`${J}${W?`:${W}`:""}`,G[T]=u;const q=A=>{t.aborted||t.completed||(A=A||new o,n.errorRequest(e,t,A),null!=O&&(O.removeAllListeners("data"),O.close(),e[f](A),e[D]()),n.destroy(V,A))};try{t.onConnect(q)}catch(A){n.errorRequest(e,t,A)}if(t.aborted)return!1;if("CONNECT"===u)return h.ref(),O=h.request(G,{endStream:!1,signal:b}),O.pending?O.once("ready",(()=>{t.onUpgrade(null,null,O),++h[k],e[E][e[Q]++]=null})):(t.onUpgrade(null,null,O),++h[k],e[E][e[Q]++]=null),O.once("close",(()=>{h[k]-=1,0===h[k]&&h.unref()})),O.setTimeout(a),!0;G[v]=B,G[L]="http:"===U?"http":"https";const _="PUT"===u||"POST"===u||"PATCH"===u;V&&"function"==typeof V.read&&V.read(0);let X=n.bodyLength(V);if(n.isFormDataLike(V)){F??=A(2530).extractBody;const[e,t]=F(V);G["content-type"]=t,V=e.stream,X=e.length}null==X&&(X=t.contentLength);0!==X&&_||(X=null);if(function(e){return"GET"!==e&&"HEAD"!==e&&"OPTIONS"!==e&&"TRACE"!==e&&"CONNECT"!==e}(u)&&X>0&&null!=t.contentLength&&t.contentLength!==X){if(e[p])return n.errorRequest(e,t,new i),!1;process.emitWarning(new i)}null!=X&&(r(V,"no body must not have content length"),G[H]=`${X}`);if(h.ref(),N.sendHeaders.hasSubscribers){let e="";for(const t in G)e+=`${t}: ${G[t]}\r\n`;N.sendHeaders.publish({request:t,headers:e,socket:h[C]})}const j="GET"===u||"HEAD"===u||null===V;w?(G[Y]="100-continue",O=h.request(G,{endStream:j,signal:b}),O.once("continue",$)):(O=h.request(G,{endStream:j,signal:b}),$());return++h[k],O.setTimeout(a),O.once("response",(e=>{const{[x]:A,...r}=e;t.onResponseStarted(),t.aborted?O.removeAllListeners("data"):!1===t.onHeaders(Number(A),function(e){const t=[];for(const[A,r]of Object.entries(e))if(Array.isArray(r))for(const e of r)t.push(Buffer.from(A),Buffer.from(e));else t.push(Buffer.from(A),Buffer.from(r));return t}(r),O.resume.bind(O),"")&&O.pause()})),O.on("data",(e=>{!1===t.onData(e)&&O.pause()})),O.once("end",(A=>{O.removeAllListeners("data"),null==O.state?.state||O.state.state<6?(t.aborted||t.completed||t.onComplete({}),e[E][e[Q]++]=null,e[D]()):(--h[k],0===h[k]&&h.unref(),q(A??new c("HTTP/2: stream half-closed (remote)")),e[E][e[Q]++]=null,e[I]=e[Q],e[D]())})),O.once("close",(()=>{O.removeAllListeners("data"),h[k]-=1,0===h[k]&&h.unref()})),O.once("error",(function(e){O.removeAllListeners("data"),q(e)})),O.once("frameError",((e,t)=>{O.removeAllListeners("data"),q(new c(`HTTP/2: "frameError" received - type ${e}, code ${t}`))})),O.on("aborted",(()=>{O.removeAllListeners("data")})),O.on("timeout",(()=>{const e=new c(`HTTP/2: "stream timeout after ${a}"`);O.removeAllListeners("data"),h[k]-=1,0===h[k]&&h.unref(),q(e)})),O.once("trailers",(e=>{t.aborted||t.completed||t.onComplete(e)})),!0;function $(){V&&0!==X?n.isBuffer(V)?Z(q,O,V,e,t,e[C],X,_):n.isBlobLike(V)?"function"==typeof V.stream?z(q,O,V.stream(),e,t,e[C],X,_):async function(e,t,A,s,n,o,a,c){r(a===A.size,"blob body must have content length");try{if(null!=a&&a!==A.size)throw new i;const e=Buffer.from(await A.arrayBuffer());t.cork(),t.write(e),t.uncork(),t.end(),n.onBodySent(e),n.onRequestSent(),c||(o[l]=!0),s[D]()}catch(t){e(t)}}(q,O,V,e,t,e[C],X,_):n.isStream(V)?function(e,t,A,i,o,a,c,g){r(0!==g||0===a[d],"stream body cannot be pipelined");const h=s(o,i,(r=>{r?(n.destroy(h,r),e(r)):(n.removeAllListeners(h),c.onRequestSent(),A||(t[l]=!0),a[D]())}));function u(e){c.onBodySent(e)}n.addListener(h,"data",u)}(q,e[C],_,O,V,e,t,X):n.isIterable(V)?z(q,O,V,e,t,e[C],X,_):r(!1):Z(q,O,null,e,t,e[C],X,_)}}(e,t),resume(){!function(e){const t=e[C];!1===t?.destroyed&&(0===e[S]||0===e[m]?(t.unref(),e[y].unref()):(t.ref(),e[y].ref()))}(e)},destroy(e,A){t[b]?queueMicrotask(A):t.destroy(e).on("close",A)},get destroyed(){return t.destroyed},busy:()=>!1}}},1167:(e,t,A)=>{"use strict";const r=A(4589),s=A(7030),n=A(7067),i=A(2858),{ClientStats:o}=A(4304),{channels:a}=A(772),c=A(5837),g=A(7779),{InvalidArgumentError:l,InformationalError:h,ClientDestroyedError:d}=A(4465),u=A(1986),{kUrl:E,kServerName:I,kClient:Q,kBusy:B,kConnect:C,kResuming:p,kRunning:f,kPending:m,kSize:y,kQueue:D,kConnected:S,kConnecting:w,kNeedDrain:b,kKeepAliveDefaultTimeout:R,kHostHeader:N,kPendingIdx:k,kRunningIdx:F,kError:U,kPipelining:M,kKeepAliveTimeoutValue:T,kMaxHeadersSize:v,kKeepAliveMaxTimeout:L,kKeepAliveTimeoutThreshold:H,kHeadersTimeout:Y,kBodyTimeout:x,kStrictContentLength:P,kConnector:V,kMaxRequests:G,kCounter:O,kClose:J,kDestroy:W,kDispatch:q,kLocalAddress:_,kMaxResponseSize:X,kOnError:Z,kHTTPContext:z,kMaxConcurrentStreams:j,kResume:$}=A(257),K=A(9355),ee=A(8142),te=Symbol("kClosedResolve"),Ae=n&&n.maxHeaderSize&&Number.isInteger(n.maxHeaderSize)&&n.maxHeaderSize>0?()=>n.maxHeaderSize:()=>{throw new l("http module not available or http.maxHeaderSize invalid")},re=()=>{};function se(e){return e[M]??e[z]?.defaultPipelining??1}function ne(e,t){if(0===e[f]&&"UND_ERR_INFO"!==t.code&&"UND_ERR_SOCKET"!==t.code){r(e[k]===e[F]);const A=e[D].splice(e[F]);for(let r=0;r<A.length;r++){const s=A[r];i.errorRequest(e,s,t)}r(0===e[y])}}function ie(e){r(!e[w]),r(!e[z]);let{host:t,hostname:A,protocol:n,port:o}=e[E];if("["===A[0]){const e=A.indexOf("]");r(-1!==e);const t=A.substring(1,e);r(s.isIPv6(t)),A=t}e[w]=!0,a.beforeConnect.hasSubscribers&&a.beforeConnect.publish({connectParams:{host:t,hostname:A,protocol:n,port:o,version:e[z]?.version,servername:e[I],localAddress:e[_]},connector:e[V]}),e[V]({host:t,hostname:A,protocol:n,port:o,servername:e[I],localAddress:e[_]},((s,c)=>{if(s)return oe(e,s,{host:t,hostname:A,protocol:n,port:o}),void e[$]();if(e.destroyed)return i.destroy(c.on("error",re),new d),void e[$]();r(c);try{e[z]="h2"===c.alpnProtocol?ee(e,c):K(e,c)}catch(s){return c.destroy().on("error",re),oe(e,s,{host:t,hostname:A,protocol:n,port:o}),void e[$]()}e[w]=!1,c[O]=0,c[G]=e[G],c[Q]=e,c[U]=null,a.connected.hasSubscribers&&a.connected.publish({connectParams:{host:t,hostname:A,protocol:n,port:o,version:e[z]?.version,servername:e[I],localAddress:e[_]},connector:e[V],socket:c}),e.emit("connect",e[E],[e]),e[$]()}))}function oe(e,t,{host:A,hostname:s,protocol:n,port:o}){if(!e.destroyed){if(e[w]=!1,a.connectError.hasSubscribers&&a.connectError.publish({connectParams:{host:A,hostname:s,protocol:n,port:o,version:e[z]?.version,servername:e[I],localAddress:e[_]},connector:e[V],error:t}),"ERR_TLS_CERT_ALTNAME_INVALID"===t.code)for(r(0===e[f]);e[m]>0&&e[D][e[k]].servername===e[I];){const A=e[D][e[k]++];i.errorRequest(e,A,t)}else ne(e,t);e.emit("connectionError",e[E],[e],t)}}function ae(e){e[b]=0,e.emit("drain",e[E],[e])}function ce(e,t){2!==e[p]&&(e[p]=2,function(e,t){for(;;){if(e.destroyed)return void r(0===e[m]);if(e[te]&&!e[y])return e[te](),void(e[te]=null);if(e[z]&&e[z].resume(),e[B])e[b]=2;else if(2===e[b]){t?(e[b]=1,queueMicrotask((()=>ae(e)))):ae(e);continue}if(0===e[m])return;if(e[f]>=(se(e)||1))return;const A=e[D][e[k]];if("https:"===e[E].protocol&&e[I]!==A.servername){if(e[f]>0)return;e[I]=A.servername,e[z]?.destroy(new h("servername changed"),(()=>{e[z]=null,ce(e)}))}if(e[w])return;if(!e[z])return void ie(e);if(e[z].destroyed)return;if(e[z].busy(A))return;!A.aborted&&e[z].write(A)?e[k]++:e[D].splice(e[k],1)}}(e,t),e[p]=0,e[F]>256&&(e[D].splice(0,e[F]),e[k]-=e[F],e[F]=0))}e.exports=class extends g{constructor(e,{maxHeaderSize:t,headersTimeout:A,socketTimeout:r,requestTimeout:n,connectTimeout:o,bodyTimeout:a,idleTimeout:c,keepAlive:g,keepAliveTimeout:h,maxKeepAliveTimeout:d,keepAliveMaxTimeout:Q,keepAliveTimeoutThreshold:B,socketPath:C,pipelining:f,tls:m,strictContentLength:y,maxCachedSessions:S,connect:w,maxRequestsPerClient:U,localAddress:O,maxResponseSize:J,autoSelectFamily:W,autoSelectFamilyAttemptTimeout:q,maxConcurrentStreams:K,allowH2:ee}={}){if(void 0!==g)throw new l("unsupported keepAlive, use pipelining=0 instead");if(void 0!==r)throw new l("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");if(void 0!==n)throw new l("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");if(void 0!==c)throw new l("unsupported idleTimeout, use keepAliveTimeout instead");if(void 0!==d)throw new l("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");if(null!=t){if(!Number.isInteger(t)||t<1)throw new l("invalid maxHeaderSize")}else t=Ae();if(null!=C&&"string"!=typeof C)throw new l("invalid socketPath");if(null!=o&&(!Number.isFinite(o)||o<0))throw new l("invalid connectTimeout");if(null!=h&&(!Number.isFinite(h)||h<=0))throw new l("invalid keepAliveTimeout");if(null!=Q&&(!Number.isFinite(Q)||Q<=0))throw new l("invalid keepAliveMaxTimeout");if(null!=B&&!Number.isFinite(B))throw new l("invalid keepAliveTimeoutThreshold");if(null!=A&&(!Number.isInteger(A)||A<0))throw new l("headersTimeout must be a positive integer or zero");if(null!=a&&(!Number.isInteger(a)||a<0))throw new l("bodyTimeout must be a positive integer or zero");if(null!=w&&"function"!=typeof w&&"object"!=typeof w)throw new l("connect must be a function or an object");if(null!=U&&(!Number.isInteger(U)||U<0))throw new l("maxRequestsPerClient must be a positive number");if(null!=O&&("string"!=typeof O||0===s.isIP(O)))throw new l("localAddress must be valid string IP address");if(null!=J&&(!Number.isInteger(J)||J<-1))throw new l("maxResponseSize must be a positive number");if(null!=q&&(!Number.isInteger(q)||q<-1))throw new l("autoSelectFamilyAttemptTimeout must be a positive number");if(null!=ee&&"boolean"!=typeof ee)throw new l("allowH2 must be a valid boolean value");if(null!=K&&("number"!=typeof K||K<1))throw new l("maxConcurrentStreams must be a positive integer, greater than 0");super(),"function"!=typeof w&&(w=u({...m,maxCachedSessions:S,allowH2:ee,socketPath:C,timeout:o,..."boolean"==typeof W?{autoSelectFamily:W,autoSelectFamilyAttemptTimeout:q}:void 0,...w})),this[E]=i.parseOrigin(e),this[V]=w,this[M]=null!=f?f:1,this[v]=t,this[R]=null==h?4e3:h,this[L]=null==Q?6e5:Q,this[H]=null==B?2e3:B,this[T]=this[R],this[I]=null,this[_]=null!=O?O:null,this[p]=0,this[b]=0,this[N]=`host: ${this[E].hostname}${this[E].port?`:${this[E].port}`:""}\r\n`,this[x]=null!=a?a:3e5,this[Y]=null!=A?A:3e5,this[P]=null==y||y,this[G]=U,this[te]=null,this[X]=J>-1?J:-1,this[j]=null!=K?K:100,this[z]=null,this[D]=[],this[F]=0,this[k]=0,this[$]=e=>ce(this,e),this[Z]=e=>ne(this,e)}get pipelining(){return this[M]}set pipelining(e){this[M]=e,this[$](!0)}get stats(){return new o(this)}get[m](){return this[D].length-this[k]}get[f](){return this[k]-this[F]}get[y](){return this[D].length-this[F]}get[S](){return!!this[z]&&!this[w]&&!this[z].destroyed}get[B](){return Boolean(this[z]?.busy(null)||this[y]>=(se(this)||1)||this[m]>0)}[C](e){ie(this),this.once("connect",e)}[q](e,t){const A=new c(this[E].origin,e,t);return this[D].push(A),this[p]||(null==i.bodyLength(A.body)&&i.isIterable(A.body)?(this[p]=1,queueMicrotask((()=>ce(this)))):this[$](!0)),this[p]&&2!==this[b]&&this[B]&&(this[b]=2),this[b]<2}[J](){return new Promise((e=>{this[y]?this[te]=e:e(null)}))}[W](e){return new Promise((t=>{const A=this[D].splice(this[k]);for(let t=0;t<A.length;t++){const r=A[t];i.errorRequest(this,r,e)}const r=()=>{this[te]&&(this[te](),this[te]=null),t(null)};this[z]?(this[z].destroy(e,r),this[z]=null):queueMicrotask(r),this[$]()}))}}},7779:(e,t,A)=>{"use strict";const r=A(5497),s=A(4555),{ClientDestroyedError:n,ClientClosedError:i,InvalidArgumentError:o}=A(4465),{kDestroy:a,kClose:c,kClosed:g,kDestroyed:l,kDispatch:h}=A(257),d=Symbol("onDestroyed"),u=Symbol("onClosed");e.exports=class extends r{[l]=!1;[d]=null;[g]=!1;[u]=[];get destroyed(){return this[l]}get closed(){return this[g]}close(e){if(void 0===e)return new Promise(((e,t)=>{this.close(((A,r)=>A?t(A):e(r)))}));if("function"!=typeof e)throw new o("invalid callback");if(this[l])return void queueMicrotask((()=>e(new n,null)));if(this[g])return void(this[u]?this[u].push(e):queueMicrotask((()=>e(null,null))));this[g]=!0,this[u].push(e);const t=()=>{const e=this[u];this[u]=null;for(let t=0;t<e.length;t++)e[t](null,null)};this[c]().then((()=>this.destroy())).then((()=>{queueMicrotask(t)}))}destroy(e,t){if("function"==typeof e&&(t=e,e=null),void 0===t)return new Promise(((t,A)=>{this.destroy(e,((e,r)=>e?A(e):t(r)))}));if("function"!=typeof t)throw new o("invalid callback");if(this[l])return void(this[d]?this[d].push(t):queueMicrotask((()=>t(null,null))));e||(e=new n),this[l]=!0,this[d]=this[d]||[],this[d].push(t);const A=()=>{const e=this[d];this[d]=null;for(let t=0;t<e.length;t++)e[t](null,null)};this[a](e).then((()=>{queueMicrotask(A)}))}dispatch(e,t){if(!t||"object"!=typeof t)throw new o("handler must be an object");t=s.unwrap(t);try{if(!e||"object"!=typeof e)throw new o("opts must be an object.");if(this[l]||this[d])throw new n;if(this[g])throw new i;return this[h](e,t)}catch(e){if("function"!=typeof t.onError)throw e;return t.onError(e),!1}}}},5497:(e,t,A)=>{"use strict";const r=A(8474),s=A(832),n=e=>(t,A)=>e(t,s.wrap(A));e.exports=class extends r{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...e){const t=Array.isArray(e[0])?e[0]:e;let A=this.dispatch.bind(this);for(const e of t)if(null!=e){if("function"!=typeof e)throw new TypeError("invalid interceptor, expected function received "+typeof e);if(A=e(A),A=n(A),null==A||"function"!=typeof A||2!==A.length)throw new TypeError("invalid interceptor")}return new Proxy(this,{get:(e,t)=>"dispatch"===t?A:e[t]})}}},4667:(e,t,A)=>{"use strict";const r=A(7779),{kClose:s,kDestroy:n,kClosed:i,kDestroyed:o,kDispatch:a,kNoProxyAgent:c,kHttpProxyAgent:g,kHttpsProxyAgent:l}=A(257),h=A(9246),d=A(3315),u={"http:":80,"https:":443};e.exports=class extends r{#B=null;#C=null;#p=null;constructor(e={}){super(),this.#p=e;const{httpProxy:t,httpsProxy:A,noProxy:r,...s}=e;this[c]=new d(s);const n=t??process.env.http_proxy??process.env.HTTP_PROXY;this[g]=n?new h({...s,uri:n}):this[c];const i=A??process.env.https_proxy??process.env.HTTPS_PROXY;this[l]=i?new h({...s,uri:i}):this[g],this.#f()}[a](e,t){const A=new URL(e.origin);return this.#m(A).dispatch(e,t)}[s](){return Promise.all([this[c].close(),!this[g][i]&&this[g].close(),!this[l][i]&&this[l].close()])}[n](e){return Promise.all([this[c].destroy(e),!this[g][o]&&this[g].destroy(e),!this[l][o]&&this[l].destroy(e)])}#m(e){let{protocol:t,host:A,port:r}=e;return A=A.replace(/:\d*$/,"").toLowerCase(),r=Number.parseInt(r,10)||u[t]||0,this.#y(A,r)?"https:"===t?this[l]:this[g]:this[c]}#y(e,t){if(this.#D&&this.#f(),0===this.#C.length)return!0;if("*"===this.#B)return!1;for(let A=0;A<this.#C.length;A++){const r=this.#C[A];if(!r.port||r.port===t)if(/^[.*]/.test(r.hostname)){if(e.endsWith(r.hostname.replace(/^\*/,"")))return!1}else if(e===r.hostname)return!1}return!0}#f(){const e=this.#p.noProxy??this.#S,t=e.split(/[,\s]/),A=[];for(let e=0;e<t.length;e++){const r=t[e];if(!r)continue;const s=r.match(/^(.+):(\d+)$/);A.push({hostname:(s?s[1]:r).toLowerCase(),port:s?Number.parseInt(s[2],10):0})}this.#B=e,this.#C=A}get#D(){return void 0===this.#p.noProxy&&this.#B!==this.#S}get#S(){return process.env.no_proxy??process.env.NO_PROXY??""}}},1726:e=>{"use strict";const t=2047;class A{bottom=0;top=0;list=new Array(2048).fill(void 0);next=null;isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&t)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&t}shift(){const e=this.list[this.bottom];return void 0===e?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&t,e)}}e.exports=class{constructor(){this.head=this.tail=new A}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new A),this.head.push(e)}shift(){const e=this.tail,t=e.shift();return e.isEmpty()&&null!==e.next&&(this.tail=e.next,e.next=null),t}}},8297:(e,t,A)=>{"use strict";const{connect:r}=A(7030),{kClose:s,kDestroy:n}=A(257),{InvalidArgumentError:i}=A(4465),o=A(2858),a=A(1167),c=A(7779);e.exports=class extends c{#w=null;constructor(e,t){if("string"==typeof e&&(e=new URL(e)),"http:"!==e.protocol)throw new i("h2c-client: Only h2c protocol is supported");const{connect:A,maxConcurrentStreams:r,pipelining:s,...n}=t??{};let o=100,c=100;if(null!=r&&Number.isInteger(r)&&r>0&&(o=r),null!=s&&Number.isInteger(s)&&s>0&&(c=s),c>o)throw new i("h2c-client: pipelining cannot be greater than maxConcurrentStreams");super(),this.#w=new a(e,{...n,connect:this.#b(A),maxConcurrentStreams:o,pipelining:c,allowH2:!0})}#b(e){return(t,A)=>{const s=e?.connectOpts??1e4,{hostname:n,port:i,pathname:a}=t,c=r({...t,host:n,port:i,pathname:a});if(null==t.keepAlive||t.keepAlive){const e=null==t.keepAliveInitialDelay?6e4:t.keepAliveInitialDelay;c.setKeepAlive(!0,e)}c.alpnProtocol="h2";const g=o.setupConnectTimeout(new WeakRef(c),{timeout:s,hostname:n,port:i});return c.setNoDelay(!0).once("connect",(function(){if(queueMicrotask(g),A){const e=A;A=null,e(null,this)}})).on("error",(function(e){if(queueMicrotask(g),A){const t=A;A=null,t(e)}})),c}}dispatch(e,t){return this.#w.dispatch(e,t)}[s](){return this.#w.close()}[n](){return this.#w.destroy()}}},1694:(e,t,A)=>{"use strict";const{PoolStats:r}=A(4304),s=A(7779),n=A(1726),{kConnected:i,kSize:o,kRunning:a,kPending:c,kQueued:g,kBusy:l,kFree:h,kUrl:d,kClose:u,kDestroy:E,kDispatch:I}=A(257),Q=Symbol("clients"),B=Symbol("needDrain"),C=Symbol("queue"),p=Symbol("closed resolve"),f=Symbol("onDrain"),m=Symbol("onConnect"),y=Symbol("onDisconnect"),D=Symbol("onConnectionError"),S=Symbol("get dispatcher"),w=Symbol("add client"),b=Symbol("remove client");e.exports={PoolBase:class extends s{[C]=new n;[g]=0;[Q]=[];[B]=!1;[f](e,t,A){const r=this[C];let s=!1;for(;!s;){const t=r.shift();if(!t)break;this[g]--,s=!e.dispatch(t.opts,t.handler)}if(e[B]=s,!s&&this[B]&&(this[B]=!1,this.emit("drain",t,[this,...A])),this[p]&&r.isEmpty()){const e=new Array(this[Q].length);for(let t=0;t<this[Q].length;t++)e[t]=this[Q][t].close();Promise.all(e).then(this[p])}}[m]=(e,t)=>{this.emit("connect",e,[this,...t])};[y]=(e,t,A)=>{this.emit("disconnect",e,[this,...t],A)};[D]=(e,t,A)=>{this.emit("connectionError",e,[this,...t],A)};get[l](){return this[B]}get[i](){let e=0;for(const{[i]:t}of this[Q])e+=t;return e}get[h](){let e=0;for(const{[i]:t,[B]:A}of this[Q])e+=t&&!A;return e}get[c](){let e=this[g];for(const{[c]:t}of this[Q])e+=t;return e}get[a](){let e=0;for(const{[a]:t}of this[Q])e+=t;return e}get[o](){let e=this[g];for(const{[o]:t}of this[Q])e+=t;return e}get stats(){return new r(this)}[u](){if(this[C].isEmpty()){const e=new Array(this[Q].length);for(let t=0;t<this[Q].length;t++)e[t]=this[Q][t].close();return Promise.all(e)}return new Promise((e=>{this[p]=e}))}[E](e){for(;;){const t=this[C].shift();if(!t)break;t.handler.onError(e)}const t=new Array(this[Q].length);for(let A=0;A<this[Q].length;A++)t[A]=this[Q][A].destroy(e);return Promise.all(t)}[I](e,t){const A=this[S]();return A?A.dispatch(e,t)||(A[B]=!0,this[B]=!this[S]()):(this[B]=!0,this[C].push({opts:e,handler:t}),this[g]++),!this[B]}[w](e){return e.on("drain",this[f].bind(this,e)).on("connect",this[m]).on("disconnect",this[y]).on("connectionError",this[D]),this[Q].push(e),this[B]&&queueMicrotask((()=>{this[B]&&this[f](e,e[d],[e,this])})),this}[b](e){e.close((()=>{const t=this[Q].indexOf(e);-1!==t&&this[Q].splice(t,1)})),this[B]=this[Q].some((e=>!e[B]&&!0!==e.closed&&!0!==e.destroyed))}},kClients:Q,kNeedDrain:B,kAddClient:w,kRemoveClient:b,kGetDispatcher:S}},8542:(e,t,A)=>{"use strict";const{PoolBase:r,kClients:s,kNeedDrain:n,kAddClient:i,kGetDispatcher:o,kRemoveClient:a}=A(1694),c=A(1167),{InvalidArgumentError:g}=A(4465),l=A(2858),{kUrl:h}=A(257),d=A(1986),u=Symbol("options"),E=Symbol("connections"),I=Symbol("factory");function Q(e,t){return new c(e,t)}e.exports=class extends r{constructor(e,{connections:t,factory:A=Q,connect:r,connectTimeout:n,tls:i,maxCachedSessions:o,socketPath:a,autoSelectFamily:c,autoSelectFamilyAttemptTimeout:B,allowH2:C,clientTtl:p,...f}={}){if(null!=t&&(!Number.isFinite(t)||t<0))throw new g("invalid connections");if("function"!=typeof A)throw new g("factory must be a function.");if(null!=r&&"function"!=typeof r&&"object"!=typeof r)throw new g("connect must be a function or an object");"function"!=typeof r&&(r=d({...i,maxCachedSessions:o,allowH2:C,socketPath:a,timeout:n,..."boolean"==typeof c?{autoSelectFamily:c,autoSelectFamilyAttemptTimeout:B}:void 0,...r})),super(),this[E]=t||null,this[h]=l.parseOrigin(e),this[u]={...l.deepClone(f),connect:r,allowH2:C,clientTtl:p},this[u].interceptors=f.interceptors?{...f.interceptors}:void 0,this[I]=A,this.on("connect",((e,t)=>{if(null!=p&&p>0)for(const e of t)Object.assign(e,{ttl:Date.now()})})),this.on("connectionError",((e,t,A)=>{for(const e of t){const t=this[s].indexOf(e);-1!==t&&this[s].splice(t,1)}}))}[o](){const e=this[u].clientTtl;for(const t of this[s])if(null!=e&&e>0&&t.ttl&&Date.now()-t.ttl>e)this[a](t);else if(!t[n])return t;if(!this[E]||this[s].length<this[E]){const e=this[I](this[h],this[u]);return this[i](e),e}}}},9246:(e,t,A)=>{"use strict";const{kProxy:r,kClose:s,kDestroy:n,kDispatch:i}=A(257),o=A(3315),a=A(8542),c=A(7779),{InvalidArgumentError:g,RequestAbortedError:l,SecureProxyConnectionError:h}=A(4465),d=A(1986),u=A(1167),E=Symbol("proxy agent"),I=Symbol("proxy client"),Q=Symbol("proxy headers"),B=Symbol("request tls settings"),C=Symbol("proxy tls settings"),p=Symbol("connect endpoint function"),f=Symbol("tunnel proxy");function m(e,t){return new a(e,t)}const y=()=>{};function D(e,t){return 1===t.connections?new u(e,t):new a(e,t)}class S extends c{#w;constructor(e,{headers:t={},connect:A,factory:r}){if(!e)throw new g("Proxy URL is mandatory");super(),this[Q]=t,this.#w=r?r(e,{connect:A}):new u(e,{connect:A})}[i](e,t){const A=t.onHeaders;t.onHeaders=function(e,r,s){407!==e?A&&A.call(this,e,r,s):"function"==typeof t.onError&&t.onError(new g("Proxy Authentication Required (407)"))};const{origin:r,path:s="/",headers:n={}}=e;if(e.path=r+s,!("host"in n)&&!("Host"in n)){const{host:e}=new URL(r);n.host=e}return e.headers={...this[Q],...n},this.#w[i](e,t)}[s](){return this.#w.close()}[n](e){return this.#w.destroy(e)}}e.exports=class extends c{constructor(e){if(!e||"object"==typeof e&&!(e instanceof URL)&&!e.uri)throw new g("Proxy uri is mandatory");const{clientFactory:t=m}=e;if("function"!=typeof t)throw new g("Proxy opts.clientFactory must be a function.");const{proxyTunnel:A=!0}=e;super();const s=this.#R(e),{href:n,origin:i,port:a,protocol:c,username:u,password:w,hostname:b}=s;if(this[r]={uri:n,protocol:c},this[B]=e.requestTls,this[C]=e.proxyTls,this[Q]=e.headers||{},this[f]=A,e.auth&&e.token)throw new g("opts.auth cannot be used in combination with opts.token");e.auth?this[Q]["proxy-authorization"]=`Basic ${e.auth}`:e.token?this[Q]["proxy-authorization"]=e.token:u&&w&&(this[Q]["proxy-authorization"]=`Basic ${Buffer.from(`${decodeURIComponent(u)}:${decodeURIComponent(w)}`).toString("base64")}`);const R=d({...e.proxyTls});this[p]=d({...e.requestTls});const N=e.factory||D;this[I]=t(s,{connect:R}),this[E]=new o({...e,factory:(e,t)=>{const{protocol:A}=new URL(e);return this[f]||"http:"!==A||"http:"!==this[r].protocol?N(e,t):new S(this[r].uri,{headers:this[Q],connect:R,factory:N})},connect:async(e,t)=>{let A=e.host;e.port||(A+=`:${function(e){return"https:"===e?443:80}(e.protocol)}`);try{const{socket:r,statusCode:s}=await this[I].connect({origin:i,port:a,path:A,signal:e.signal,headers:{...this[Q],host:e.host,...null==e.connections||e.connections>0?{"proxy-connection":"keep-alive"}:{}},servername:this[C]?.servername||b});if(200!==s&&(r.on("error",y).destroy(),t(new l(`Proxy response (${s}) !== 200 when HTTP Tunneling`))),"https:"!==e.protocol)return void t(null,r);let n;n=this[B]?this[B].servername:e.servername,this[p]({...e,servername:n,httpSocket:r},t)}catch(e){"ERR_TLS_CERT_ALTNAME_INVALID"===e.code?t(new h(e)):t(e)}}})}dispatch(e,t){const A=function(e){if(Array.isArray(e)){const t={};for(let A=0;A<e.length;A+=2)t[e[A]]=e[A+1];return t}return e}(e.headers);if(function(e){const t=e&&Object.keys(e).find((e=>"proxy-authorization"===e.toLowerCase()));if(t)throw new g("Proxy-Authorization should be sent in ProxyAgent constructor")}(A),A&&!("host"in A)&&!("Host"in A)){const{host:t}=new URL(e.origin);A.host=t}return this[E].dispatch({...e,headers:A},t)}#R(e){return"string"==typeof e?new URL(e):e instanceof URL?e:new URL(e.uri)}[s](){return Promise.all([this[E].close(),this[I].close()])}[n](){return Promise.all([this[E].destroy(),this[I].destroy()])}}},8712:(e,t,A)=>{"use strict";const r=A(5497),s=A(6294);e.exports=class extends r{#N=null;#k=null;constructor(e,t={}){super(t),this.#N=e,this.#k=t}dispatch(e,t){const A=new s({...e,retryOptions:this.#k},{dispatch:this.#N.dispatch.bind(this.#N),handler:t});return this.#N.dispatch(e,A)}close(){return this.#N.close()}destroy(){return this.#N.destroy()}}},9879:(e,t,A)=>{"use strict";const r=Symbol.for("undici.globalDispatcher.1"),{InvalidArgumentError:s}=A(4465),n=A(3315);function i(e){if(!e||"function"!=typeof e.dispatch)throw new s("Argument agent must implement Agent");Object.defineProperty(globalThis,r,{value:e,writable:!0,enumerable:!1,configurable:!1})}function o(){return globalThis[r]}void 0===o()&&i(new n);e.exports={setGlobalDispatcher:i,getGlobalDispatcher:o,installedExports:["fetch","Headers","Response","Request","FormData","WebSocket","CloseEvent","ErrorEvent","MessageEvent","EventSource"]}},8358:(e,t,A)=>{"use strict";const r=A(2858),{parseCacheControlHeader:s,parseVaryHeader:n,isEtagUsable:i}=A(9453),{parseHttpDate:o}=A(8851);function a(){}const c=[200,203,204,206,300,301,308,404,405,410,414,501],g=[206,304];e.exports=class{#F;#U;#M;#T;#v;#L;constructor({store:e,type:t,cacheByDefault:A},r,s){this.#T=e,this.#U=t,this.#M=A,this.#F=r,this.#v=s}onRequestStart(e,t){this.#L?.destroy(),this.#L=void 0,this.#v.onRequestStart?.(e,t)}onRequestUpgrade(e,t,A,r){this.#v.onRequestUpgrade?.(e,t,A,r)}onResponseStart(e,t,A,l){const h=()=>this.#v.onResponseStart?.(e,t,A,l);if(!r.safeHTTPMethods.includes(this.#F.method)&&t>=200&&t<=399){try{this.#T.delete(this.#F)?.catch?.(a)}catch{}return h()}const d=A["cache-control"],u=A["last-modified"]&&c.includes(t);if(!(d||A.expires||u||this.#M))return h();const E=d?s(d):{};if(!function(e,t,A,r){if(t<200||g.includes(t))return!1;if(!(c.includes(t)||A.expires||r.public||void 0!==r["max-age"]||r.private&&"private"===e||void 0!==r["s-maxage"]&&"shared"===e))return!1;if(r["no-store"])return!1;if("shared"===e&&!0===r.private)return!1;if(A.vary?.includes("*"))return!1;if(A.authorization){if(!r.public||"string"!=typeof A.authorization)return!1;if(Array.isArray(r["no-cache"])&&r["no-cache"].includes("authorization"))return!1;if(Array.isArray(r.private)&&r.private.includes("authorization"))return!1}return!0}(this.#U,t,A,E))return h();const I=Date.now(),Q=A.age?function(e){const t=parseInt(Array.isArray(e)?e[0]:e);return isNaN(t)?void 0:1e3*t}(A.age):void 0;if(Q&&Q>=2147483647e3)return h();const B="string"==typeof A.date?o(A.date):void 0,C=function(e,t,A,r,s,n){if("shared"===e){const e=n["s-maxage"];if(void 0!==e)return e>0?1e3*e:void 0}const i=n["max-age"];if(void 0!==i)return i>0?1e3*i:void 0;if("string"==typeof r.expires){const e=o(r.expires);if(e){if(t>=e.getTime())return;if(s){if(s>=e)return;if(void 0!==A&&A>e-s)return}return e.getTime()-t}}if("string"==typeof r["last-modified"]){const e=new Date(r["last-modified"]);if((a=e)instanceof Date&&Number.isFinite(a.valueOf())){if(e.getTime()>=t)return;return.1*(t-e.getTime())}}var a;if(n.immutable)return 31536e3;return}(this.#U,I,Q,A,B,E)??this.#M;if(void 0===C||Q&&Q>C)return h();const p=B?B.getTime():I,f=C+p;if(I>=f)return h();let m;if(this.#F.headers&&A.vary&&(m=n(A.vary,this.#F.headers),!m))return h();const y=function(e,t,A){let r=-1/0,s=-1/0,n=-1/0;t["stale-while-revalidate"]&&(r=A+1e3*t["stale-while-revalidate"]);t["stale-if-error"]&&(s=A+1e3*t["stale-if-error"]);r===-1/0&&s===-1/0&&(n=e+31536e6);return Math.max(A,r,s,n)}(p,E,f),D=function(e,t){const A=["connection","proxy-authenticate","proxy-authentication-info","proxy-authorization","proxy-connection","te","transfer-encoding","upgrade","age"];e.connection&&(Array.isArray(e.connection)?A.push(...e.connection.map((e=>e.trim()))):A.push(...e.connection.split(",").map((e=>e.trim()))));Array.isArray(t["no-cache"])&&A.push(...t["no-cache"]);Array.isArray(t.private)&&A.push(...t.private);let r;for(const t of A)e[t]&&(r??={...e},delete r[t]);return r??e}(A,E),S={statusCode:t,statusMessage:l,headers:D,vary:m,cacheControlDirectives:E,cachedAt:Q?I-Q:I,staleAt:f,deleteAt:y};if("string"==typeof A.etag&&i(A.etag)&&(S.etag=A.etag),this.#L=this.#T.createWriteStream(this.#F,S),!this.#L)return h();const w=this;return this.#L.on("drain",(()=>e.resume())).on("error",(function(){w.#L=void 0,w.#T.delete(w.#F)})).on("close",(function(){w.#L===this&&(w.#L=void 0),e.resume()})),h()}onResponseData(e,t){!1===this.#L?.write(t)&&e.pause(),this.#v.onResponseData?.(e,t)}onResponseEnd(e,t){this.#L?.end(),this.#v.onResponseEnd?.(e,t)}onResponseError(e,t){this.#L?.destroy(t),this.#L=void 0,this.#v.onResponseError?.(e,t)}}},6607:(e,t,A)=>{"use strict";const r=A(4589);e.exports=class{#H=!1;#Y;#v;#x;#P;constructor(e,t,A){if("function"!=typeof e)throw new TypeError("callback must be a function");this.#Y=e,this.#v=t,this.#P=A}onRequestStart(e,t){this.#H=!1,this.#x=t}onRequestUpgrade(e,t,A,r){this.#v.onRequestUpgrade?.(e,t,A,r)}onResponseStart(e,t,A,s){if(r(null!=this.#Y),this.#H=304===t||this.#P&&t>=500&&t<=504,this.#Y(this.#H,this.#x),this.#Y=null,this.#H)return!0;this.#v.onRequestStart?.(e,this.#x),this.#v.onResponseStart?.(e,t,A,s)}onResponseData(e,t){if(!this.#H)return this.#v.onResponseData?.(e,t)}onResponseEnd(e,t){this.#H||this.#v.onResponseEnd?.(e,t)}onResponseError(e,t){if(!this.#H){if(this.#Y&&(this.#Y(!1),this.#Y=null),"function"!=typeof this.#v.onResponseError)throw t;this.#v.onResponseError(e,t)}}}},6917:(e,t,A)=>{"use strict";const r=A(4589),s=A(832);e.exports=class{#v;#V=!1;#G=!1;#O=!1;constructor(e){if("object"!=typeof e||null===e)throw new TypeError("handler must be an object");this.#v=s.wrap(e)}onRequestStart(...e){this.#v.onRequestStart?.(...e)}onRequestUpgrade(...e){return r(!this.#V),r(!this.#G),this.#v.onRequestUpgrade?.(...e)}onResponseStart(...e){return r(!this.#V),r(!this.#G),r(!this.#O),this.#O=!0,this.#v.onResponseStart?.(...e)}onResponseData(...e){return r(!this.#V),r(!this.#G),this.#v.onResponseData?.(...e)}onResponseEnd(...e){return r(!this.#V),r(!this.#G),this.#V=!0,this.#v.onResponseEnd?.(...e)}onResponseError(...e){return this.#G=!0,this.#v.onResponseError?.(...e)}onBodySent(){}}},8064:(e,t,A)=>{"use strict";const r=A(2858),{kBodyUsed:s}=A(257),n=A(4589),{InvalidArgumentError:i}=A(4465),o=A(8474),a=[300,301,302,303,307,308],c=Symbol("body"),g=()=>{};class l{constructor(e){this[c]=e,this[s]=!1}async*[Symbol.asyncIterator](){n(!this[s],"disturbed"),this[s]=!0,yield*this[c]}}class h{static buildDispatch(e,t){if(null!=t&&(!Number.isInteger(t)||t<0))throw new i("maxRedirections must be a positive number");const A=e.dispatch.bind(e);return(e,r)=>A(e,new h(A,t,e,r))}constructor(e,t,A,a){if(null!=t&&(!Number.isInteger(t)||t<0))throw new i("maxRedirections must be a positive number");this.dispatch=e,this.location=null;const{maxRedirections:c,...g}=A;this.opts=g,this.maxRedirections=t,this.handler=a,this.history=[],r.isStream(this.opts.body)?(0===r.bodyLength(this.opts.body)&&this.opts.body.on("data",(function(){n(!1)})),"boolean"!=typeof this.opts.body.readableDidRead&&(this.opts.body[s]=!1,o.prototype.on.call(this.opts.body,"data",(function(){this[s]=!0})))):(this.opts.body&&"function"==typeof this.opts.body.pipeTo||this.opts.body&&"string"!=typeof this.opts.body&&!ArrayBuffer.isView(this.opts.body)&&r.isIterable(this.opts.body)&&!r.isFormDataLike(this.opts.body))&&(this.opts.body=new l(this.opts.body))}onRequestStart(e,t){this.handler.onRequestStart?.(e,{...t,history:this.history})}onRequestUpgrade(e,t,A,r){this.handler.onRequestUpgrade?.(e,t,A,r)}onResponseStart(e,t,A,s){if(this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections)throw new Error("max redirects");if(301!==t&&302!==t||"POST"!==this.opts.method||(this.opts.method="GET",r.isStream(this.opts.body)&&r.destroy(this.opts.body.on("error",g)),this.opts.body=null),303===t&&"HEAD"!==this.opts.method&&(this.opts.method="GET",r.isStream(this.opts.body)&&r.destroy(this.opts.body.on("error",g)),this.opts.body=null),this.location=this.history.length>=this.maxRedirections||r.isDisturbed(this.opts.body)||-1===a.indexOf(t)?null:A.location,this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return void this.handler.onResponseStart?.(e,t,A,s);const{origin:o,pathname:c,search:l}=r.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),h=l?`${c}${l}`:c,u=`${o}${h}`;for(const e of this.history)if(e.toString()===u)throw new i(`Redirect loop detected. Cannot redirect to ${o}. This typically happens when using a Client or Pool with cross-origin redirects. Use an Agent for cross-origin redirects.`);this.opts.headers=function(e,t,A){const r=[];if(Array.isArray(e))for(let s=0;s<e.length;s+=2)d(e[s],t,A)||r.push(e[s],e[s+1]);else if(e&&"object"==typeof e){const s="function"==typeof e[Symbol.iterator]?e:Object.entries(e);for(const[e,n]of s)d(e,t,A)||r.push(e,n)}else n(null==e,"headers must be an object or an array");return r}(this.opts.headers,303===t,this.opts.origin!==o),this.opts.path=h,this.opts.origin=o,this.opts.query=null}onResponseData(e,t){this.location||this.handler.onResponseData?.(e,t)}onResponseEnd(e,t){this.location?this.dispatch(this.opts,this):this.handler.onResponseEnd(e,t)}onResponseError(e,t){this.handler.onResponseError?.(e,t)}}function d(e,t,A){if(4===e.length)return"host"===r.headerNameToString(e);if(t&&r.headerNameToString(e).startsWith("content-"))return!0;if(A&&(13===e.length||6===e.length||19===e.length)){const t=r.headerNameToString(e);return"authorization"===t||"cookie"===t||"proxy-authorization"===t}return!1}e.exports=h},6294:(e,t,A)=>{"use strict";const r=A(4589),{kRetryHandlerDefaultRetry:s}=A(257),{RequestRetryError:n}=A(4465),i=A(832),{isDisturbed:o,parseRangeHeader:a,wrapRequestBody:c}=A(2858);class g{constructor(e,{dispatch:t,handler:A}){const{retryOptions:r,...n}=e,{retry:o,maxRetries:a,maxTimeout:l,minTimeout:h,timeoutFactor:d,methods:u,errorCodes:E,retryAfter:I,statusCodes:Q,throwOnError:B}=r??{};this.error=null,this.dispatch=t,this.handler=i.wrap(A),this.opts={...n,body:c(e.body)},this.retryOpts={throwOnError:B??!0,retry:o??g[s],retryAfter:I??!0,maxTimeout:l??3e4,minTimeout:h??500,timeoutFactor:d??2,maxRetries:a??5,methods:u??["GET","HEAD","OPTIONS","PUT","DELETE","TRACE"],statusCodes:Q??[500,502,503,504,429],errorCodes:E??["ECONNRESET","ECONNREFUSED","ENOTFOUND","ENETDOWN","ENETUNREACH","EHOSTDOWN","EHOSTUNREACH","EPIPE","UND_ERR_SOCKET"]},this.retryCount=0,this.retryCountCheckpoint=0,this.headersSent=!1,this.start=0,this.end=null,this.etag=null}onResponseStartWithRetry(e,t,A,r,s){if(this.retryOpts.throwOnError)!1===this.retryOpts.statusCodes.includes(t)?(this.headersSent=!0,this.handler.onResponseStart?.(e,t,A,r)):this.error=s;else{if(o(this.opts.body))return this.headersSent=!0,void this.handler.onResponseStart?.(e,t,A,r);e.pause(),this.retryOpts.retry(s,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},function(n){if(n)return this.headersSent=!0,this.headersSent=!0,this.handler.onResponseStart?.(e,t,A,r),void e.resume();this.error=s,e.resume()}.bind(this))}}onRequestStart(e,t){this.headersSent||this.handler.onRequestStart?.(e,t)}onRequestUpgrade(e,t,A,r){this.handler.onRequestUpgrade?.(e,t,A,r)}static[s](e,{state:t,opts:A},r){const{statusCode:s,code:n,headers:i}=e,{method:o,retryOptions:a}=A,{maxRetries:c,minTimeout:g,maxTimeout:l,timeoutFactor:h,statusCodes:d,errorCodes:u,methods:E}=a,{counter:I}=t;if(n&&"UND_ERR_REQ_RETRY"!==n&&!u.includes(n))return void r(e);if(Array.isArray(E)&&!E.includes(o))return void r(e);if(null!=s&&Array.isArray(d)&&!d.includes(s))return void r(e);if(I>c)return void r(e);let Q=i?.["retry-after"];Q&&(Q=Number(Q),Q=Number.isNaN(Q)?function(e){const t=new Date(e).getTime();return isNaN(t)?0:t-Date.now()}(i["retry-after"]):1e3*Q);const B=Q>0?Math.min(Q,l):Math.min(g*h**(I-1),l);setTimeout((()=>r(null)),B)}onResponseStart(e,t,A,s){if(this.error=null,this.retryCount+=1,t>=300){const r=new n("Request failed",t,{headers:A,data:{count:this.retryCount}});this.onResponseStartWithRetry(e,t,A,s,r)}else{if(this.headersSent){if(206!==t&&(this.start>0||200!==t))throw new n("server does not support the range header and the payload was partially consumed",t,{headers:A,data:{count:this.retryCount}});const e=a(A["content-range"]);if(!e)throw new n("Content-Range mismatch",t,{headers:A,data:{count:this.retryCount}});if(null!=this.etag&&this.etag!==A.etag)throw new n("ETag mismatch",t,{headers:A,data:{count:this.retryCount}});const{start:s,size:i,end:o=(i?i-1:null)}=e;return r(this.start===s,"content-range mismatch"),void r(null==this.end||this.end===o,"content-range mismatch")}if(null!=this.end)throw new n("Request failed",t,{headers:A,data:{count:this.retryCount}});if(206===t){const n=a(A["content-range"]);if(null==n)return this.headersSent=!0,void this.handler.onResponseStart?.(e,t,A,s);const{start:i,size:o,end:c=(o?o-1:null)}=n;r(null!=i&&Number.isFinite(i),"content-range mismatch"),r(null!=c&&Number.isFinite(c),"invalid content-length"),this.start=i,this.end=c}if(null==this.end){const e=A["content-length"];this.end=null!=e?Number(e)-1:null}r(Number.isFinite(this.start)),r(null==this.end||Number.isFinite(this.end),"invalid content-length"),this.resume=!0,this.etag=null!=A.etag?A.etag:null,null!=this.etag&&"W"===this.etag[0]&&"/"===this.etag[1]&&(this.etag=null),this.headersSent=!0,this.handler.onResponseStart?.(e,t,A,s)}}onResponseData(e,t){this.error||(this.start+=t.length,this.handler.onResponseData?.(e,t))}onResponseEnd(e,t){if(this.error&&this.retryOpts.throwOnError)throw this.error;if(!this.error)return this.retryCount=0,this.handler.onResponseEnd?.(e,t);this.retry(e)}retry(e){if(0!==this.start){const e={range:`bytes=${this.start}-${this.end??""}`};null!=this.etag&&(e["if-match"]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...e}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(t){this.handler.onResponseError?.(e,t)}}onResponseError(e,t){e?.aborted||o(this.opts.body)?this.handler.onResponseError?.(e,t):(this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(t,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},function(t){t?this.handler?.onResponseError?.(e,t):this.retry(e)}.bind(this)))}}e.exports=g},4555:(e,t,A)=>{"use strict";const{parseHeaders:r}=A(2858),{InvalidArgumentError:s}=A(4465),n=Symbol("resume");class i{#J=!1;#W=null;#q=!1;#_;[n]=null;constructor(e){this.#_=e}pause(){this.#J=!0}resume(){this.#J&&(this.#J=!1,this[n]?.())}abort(e){this.#q||(this.#q=!0,this.#W=e,this.#_(e))}get aborted(){return this.#q}get reason(){return this.#W}get paused(){return this.#J}}e.exports=class e{#v;#X;constructor(e){this.#v=e}static unwrap(t){return t.onRequestStart?new e(t):t}onConnect(e,t){this.#X=new i(e),this.#v.onRequestStart?.(this.#X,t)}onUpgrade(e,t,A){this.#v.onRequestUpgrade?.(this.#X,e,r(t),A)}onHeaders(e,t,A,s){return this.#X[n]=A,this.#v.onResponseStart?.(this.#X,e,r(t),s),!this.#X.paused}onData(e){return this.#v.onResponseData?.(this.#X,e),!this.#X.paused}onComplete(e){this.#v.onResponseEnd?.(this.#X,r(e))}onError(e){if(!this.#v.onResponseError)throw new s("invalid onError method");this.#v.onResponseError?.(this.#X,e)}}},832:(e,t,A)=>{"use strict";const{InvalidArgumentError:r}=A(4465);e.exports=class e{#v;constructor(e){this.#v=e}static wrap(t){return t.onRequestStart?t:new e(t)}onConnect(e,t){return this.#v.onConnect?.(e,t)}onHeaders(e,t,A,r){return this.#v.onHeaders?.(e,t,A,r)}onUpgrade(e,t,A){return this.#v.onUpgrade?.(e,t,A)}onData(e){return this.#v.onData?.(e)}onComplete(e){return this.#v.onComplete?.(e)}onError(e){if(!this.#v.onError)throw e;return this.#v.onError?.(e)}onRequestStart(e,t){this.#v.onConnect?.((t=>e.abort(t)),t)}onRequestUpgrade(e,t,A,r){const s=[];for(const[e,t]of Object.entries(A))s.push(Buffer.from(e),Array.isArray(t)?t.map((e=>Buffer.from(e))):Buffer.from(t));this.#v.onUpgrade?.(t,s,r)}onResponseStart(e,t,A,r){const s=[];for(const[e,t]of Object.entries(A))s.push(Buffer.from(e),Array.isArray(t)?t.map((e=>Buffer.from(e))):Buffer.from(t));!1===this.#v.onHeaders?.(t,s,(()=>e.resume()),r)&&e.pause()}onResponseData(e,t){!1===this.#v.onData?.(t)&&e.pause()}onResponseEnd(e,t){const A=[];for(const[e,r]of Object.entries(t))A.push(Buffer.from(e),Array.isArray(r)?r.map((e=>Buffer.from(e))):Buffer.from(r));this.#v.onComplete?.(A)}onResponseError(e,t){if(!this.#v.onError)throw new r("invalid onError method");this.#v.onError?.(t)}}},5752:(e,t,A)=>{"use strict";const r=A(4589),{Readable:s}=A(7075),n=A(2858),i=A(8358),o=A(9903),a=A(6607),{assertCacheStore:c,assertCacheMethods:g,makeCacheKey:l,normalizeHeaders:h,parseCacheControlHeader:d}=A(9453),{AbortError:u}=A(4465);function E(e,t,A,i,o,a){const c=n.isStream(A.body)?A.body:s.from(A.body??[]);r(!c.destroyed,"stream should not be destroyed"),r(!c.readableDidRead,"stream should not be readableDidRead");const g={resume(){c.resume()},pause(){c.pause()},get paused(){return c.isPaused()},get aborted(){return c.destroyed},get reason(){return c.errored},abort(e){c.destroy(e??new u)}};if(c.on("error",(function(t){if(!this.readableEnded){if("function"!=typeof e.onResponseError)throw t;e.onResponseError(g,t)}})).on("close",(function(){this.errored||e.onResponseEnd?.(g,{})})),e.onRequestStart?.(g,o),c.destroyed)return;const l={...A.headers,age:String(i)};a&&(l.warning='110 - "response is stale"'),e.onResponseStart?.(g,A.statusCode,l,A.statusMessage),"HEAD"===t.method?c.destroy():c.on("data",(function(t){e.onResponseData?.(g,t)}))}function I(e,t,A,r,s,o,c){if(!c)return function(e,t,A,r,s,n){if(n?.["only-if-cached"]){let e=!1;try{if("function"==typeof r.onConnect&&(r.onConnect((()=>{e=!0})),e))return;if("function"==typeof r.onHeaders&&(r.onHeaders(504,[],(()=>{}),"Gateway Timeout"),e))return;"function"==typeof r.onComplete&&r.onComplete([])}catch(e){"function"==typeof r.onError&&r.onError(e)}return!0}return e(s,new i(t,A,r))}(e,t,A,r,s,o);const g=Date.now();if(g>c.deleteAt)return e(s,new i(t,A,r));const l=Math.round((g-c.cachedAt)/1e3);if(o?.["max-age"]&&l>=o["max-age"])return e(s,r);if(function(e,t){if(t?.["no-cache"])return!0;if(e.cacheControlDirectives?.["no-cache"]&&!Array.isArray(e.cacheControlDirectives["no-cache"]))return!0;const A=Date.now();if(A>e.staleAt)return!t?.["max-stale"]||A>e.staleAt+1e3*t["max-stale"];if(t?.["min-fresh"])return e.staleAt-A<=1e3*t["min-fresh"];return!1}(c,o)){if(n.isStream(s.body)&&0!==n.bodyLength(s.body))return e(s,new i(t,A,r));if(function(e){const t=e.cacheControlDirectives?.["stale-while-revalidate"];return!!t&&Date.now()<=e.staleAt+1e3*t}(c))return E(r,s,c,l,null,!0),queueMicrotask((()=>{let r={...s.headers,"if-modified-since":new Date(c.cachedAt).toUTCString()};c.etag&&(r["if-none-match"]=c.etag),c.vary&&(r={...r,...c.vary}),e({...s,headers:r},new i(t,A,{onRequestStart(){},onRequestUpgrade(){},onResponseStart(){},onResponseData(){},onResponseEnd(){},onResponseError(){}}))})),!0;let h=!1;const d=c.cacheControlDirectives["stale-if-error"]??o?.["stale-if-error"];d&&(h=g<c.staleAt+1e3*d);let u={...s.headers,"if-modified-since":new Date(c.cachedAt).toUTCString()};return c.etag&&(u["if-none-match"]=c.etag),c.vary&&(u={...u,...c.vary}),e({...s,headers:u},new a(((e,t)=>{e?E(r,s,c,l,t,!0):n.isStream(c.body)&&c.body.on("error",(()=>{})).destroy()}),new i(t,A,r),h))}n.isStream(s.body)&&s.body.on("error",(()=>{})).destroy(),E(r,s,c,l,null,!1)}e.exports=(e={})=>{const{store:t=new o,methods:A=["GET"],cacheByDefault:r,type:s="shared"}=e;if("object"!=typeof e||null===e)throw new TypeError("expected type of opts to be an Object, got "+(null===e?"null":typeof e));if(c(t,"opts.store"),g(A,"opts.methods"),"undefined"!=typeof r&&"number"!=typeof r)throw new TypeError("expected opts.cacheByDefault to be number or undefined, got "+typeof r);if("undefined"!=typeof s&&"shared"!==s&&"private"!==s)throw new TypeError("expected opts.type to be shared, private, or undefined, got "+typeof s);const i={store:t,methods:A,cacheByDefault:r,type:s},a=n.safeHTTPMethods.filter((e=>!1===A.includes(e)));return e=>(A,r)=>{if(!A.origin||a.includes(A.method))return e(A,r);A={...A,headers:h(A)};const s=A.headers?.["cache-control"]?d(A.headers["cache-control"]):void 0;if(s?.["no-store"])return e(A,r);const n=l(A),o=t.get(n);return o&&"function"==typeof o.then?o.then((t=>{I(e,i,n,r,A,s,t)})):I(e,i,n,r,A,s,o),!0}}},4951:(e,t,A)=>{"use strict";const{createInflate:r,createGunzip:s,createBrotliDecompress:n,createZstdDecompress:i}=A(8522),{pipeline:o}=A(7075),a=A(6917),c={gzip:s,"x-gzip":s,br:n,deflate:r,compress:r,"x-compress":r,...i?{zstd:i}:{}},g=[204,304];let l=!1;class h extends a{#Z=[];#z;#j;#$;constructor(e,{skipStatusCodes:t=g,skipErrorResponses:A=!0}={}){super(e),this.#j=t,this.#$=A}#K(e,t){return!e||t<200||(!!this.#j.includes(t)||!!(this.#$&&t>=400))}#ee(e){const t=e.split(","),A=[];for(let e=t.length-1;e>=0;e--){const r=t[e].trim();if(r){if(!c[r])return A.length=0,A;A.push(c[r]())}}return A}#te(e,t){e.on("readable",(()=>{let A;for(;null!==(A=e.read());){if(!1===super.onResponseData(t,A))break}})),e.on("error",(e=>{super.onResponseError(t,e)}))}#Ae(e){const t=this.#Z[0];this.#te(t,e),t.on("end",(()=>{super.onResponseEnd(e,{})}))}#re(e){const t=this.#Z[this.#Z.length-1];this.#te(t,e),this.#z=o(this.#Z,(t=>{t?super.onResponseError(e,t):super.onResponseEnd(e,{})}))}#se(){this.#Z.length=0,this.#z=null}onResponseStart(e,t,A,r){const s=A["content-encoding"];if(this.#K(s,t))return super.onResponseStart(e,t,A,r);const n=this.#ee(s.toLowerCase());if(0===n.length)return this.#se(),super.onResponseStart(e,t,A,r);this.#Z=n;const{"content-encoding":i,"content-length":o,...a}=A;1===this.#Z.length?this.#Ae(e):this.#re(e),super.onResponseStart(e,t,a,r)}onResponseData(e,t){this.#Z.length>0?this.#Z[0].write(t):super.onResponseData(e,t)}onResponseEnd(e,t){if(this.#Z.length>0)return this.#Z[0].end(),void this.#se();super.onResponseEnd(e,t)}onResponseError(e,t){if(this.#Z.length>0){for(const e of this.#Z)e.destroy(t);this.#se()}super.onResponseError(e,t)}}e.exports=function(e={}){return l||(process.emitWarning("DecompressInterceptor is experimental and subject to change","ExperimentalWarning"),l=!0),t=>(A,r)=>{const s=new h(r,e);return t(A,s)}}},6677:(e,t,A)=>{"use strict";const{isIP:r}=A(7030),{lookup:s}=A(610),n=A(6917),{InvalidArgumentError:i,InformationalError:o}=A(4465),a=Math.pow(2,31)-1;class c{#ne=0;#ie=0;#oe=new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#ne=e.maxTTL,this.#ie=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#ae,this.pick=e.pick??this.#ce}get full(){return this.#oe.size===this.#ie}runLookup(e,t,A){const r=this.#oe.get(e.hostname);if(null==r&&this.full)return void A(null,e);const s={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...t.dns,maxTTL:this.#ne,maxItems:this.#ie};if(null==r)this.lookup(e,s,((t,r)=>{if(t||null==r||0===r.length)return void A(t??new o("No DNS entries found"));this.setRecords(e,r);const n=this.#oe.get(e.hostname),i=this.pick(e,n,s.affinity);let a;a="number"==typeof i.port?`:${i.port}`:""!==e.port?`:${e.port}`:"",A(null,new URL(`${e.protocol}//${6===i.family?`[${i.address}]`:i.address}${a}`))}));else{const n=this.pick(e,r,s.affinity);if(null==n)return this.#oe.delete(e.hostname),void this.runLookup(e,t,A);let i;i="number"==typeof n.port?`:${n.port}`:""!==e.port?`:${e.port}`:"",A(null,new URL(`${e.protocol}//${6===n.family?`[${n.address}]`:n.address}${i}`))}}#ae(e,t,A){s(e.hostname,{all:!0,family:!1===this.dualStack?this.affinity:0,order:"ipv4first"},((e,t)=>{if(e)return A(e);const r=new Map;for(const e of t)r.set(`${e.address}:${e.family}`,e);A(null,r.values())}))}#ce(e,t,A){let r=null;const{records:s,offset:n}=t;let i;if(this.dualStack?(null==A&&(null==n||n===a?(t.offset=0,A=4):(t.offset++,A=1&~t.offset?4:6)),i=null!=s[A]&&s[A].ips.length>0?s[A]:s[4===A?6:4]):i=s[A],null==i||0===i.ips.length)return r;null==i.offset||i.offset===a?i.offset=0:i.offset++;const o=i.offset%i.ips.length;return r=i.ips[o]??null,null==r?r:Date.now()-r.timestamp>r.ttl?(i.ips.splice(o,1),this.pick(e,t,A)):r}pickFamily(e,t){const A=this.#oe.get(e.hostname)?.records;if(!A)return null;const r=A[t];if(!r)return null;null==r.offset||r.offset===a?r.offset=0:r.offset++;const s=r.offset%r.ips.length,n=r.ips[s]??null;return null==n||Date.now()-n.timestamp>n.ttl&&r.ips.splice(s,1),n}setRecords(e,t){const A=Date.now(),r={records:{4:null,6:null}};for(const e of t){e.timestamp=A,"number"==typeof e.ttl?e.ttl=Math.min(e.ttl,this.#ne):e.ttl=this.#ne;const t=r.records[e.family]??{ips:[]};t.ips.push(e),r.records[e.family]=t}this.#oe.set(e.hostname,r)}deleteRecords(e){this.#oe.delete(e.hostname)}getHandler(e,t){return new g(this,e,t)}}class g extends n{#ge=null;#p=null;#le=null;#he=null;#X=null;#de=null;#ue=!0;constructor(e,{origin:t,handler:A,dispatch:r,newOrigin:s},n){super(A),this.#he=t,this.#de=s,this.#p={...n},this.#ge=e,this.#le=r}onResponseError(e,t){switch(t.code){case"ETIMEDOUT":case"ECONNREFUSED":if(this.#ge.dualStack){if(!this.#ue)return void super.onResponseError(e,t);this.#ue=!1;const A="["===this.#de.hostname[0]?4:6,r=this.#ge.pickFamily(this.#he,A);if(null==r)return void super.onResponseError(e,t);let s;s="number"==typeof r.port?`:${r.port}`:""!==this.#he.port?`:${this.#he.port}`:"";const n={...this.#p,origin:`${this.#he.protocol}//${6===r.family?`[${r.address}]`:r.address}${s}`};return void this.#le(n,this)}super.onResponseError(e,t);break;case"ENOTFOUND":this.#ge.deleteRecords(this.#he),super.onResponseError(e,t);break;default:super.onResponseError(e,t)}}}e.exports=e=>{if(null!=e?.maxTTL&&("number"!=typeof e?.maxTTL||e?.maxTTL<0))throw new i("Invalid maxTTL. Must be a positive number");if(null!=e?.maxItems&&("number"!=typeof e?.maxItems||e?.maxItems<1))throw new i("Invalid maxItems. Must be a positive number and greater than zero");if(null!=e?.affinity&&4!==e?.affinity&&6!==e?.affinity)throw new i("Invalid affinity. Must be either 4 or 6");if(null!=e?.dualStack&&"boolean"!=typeof e?.dualStack)throw new i("Invalid dualStack. Must be a boolean");if(null!=e?.lookup&&"function"!=typeof e?.lookup)throw new i("Invalid lookup. Must be a function");if(null!=e?.pick&&"function"!=typeof e?.pick)throw new i("Invalid pick. Must be a function");const t=e?.dualStack??!0;let A;A=t?e?.affinity??null:e?.affinity??4;const s=new c({maxTTL:e?.maxTTL??1e4,lookup:e?.lookup??null,pick:e?.pick??null,dualStack:t,affinity:A,maxItems:e?.maxItems??1/0});return e=>function(t,A){const n=t.origin.constructor===URL?t.origin:new URL(t.origin);return 0!==r(n.hostname)?e(t,A):(s.runLookup(n,t,((r,i)=>{if(r)return A.onResponseError(null,r);const o={...t,servername:n.hostname,origin:i.origin,headers:{host:n.host,...t.headers}};e(o,s.getHandler({origin:n,dispatch:e,handler:A,newOrigin:i},t))})),!0)}}},3562:(e,t,A)=>{"use strict";const{InvalidArgumentError:r,RequestAbortedError:s}=A(4465),n=A(6917);class i extends n{#t=1048576;#Ee=!1;#r=0;#X=null;aborted=!1;reason=!1;constructor({maxSize:e,signal:t},A){if(null!=e&&(!Number.isFinite(e)||e<1))throw new r("maxSize must be a number greater than 0");super(A),this.#t=e??this.#t}#_(e){this.aborted=!0,this.reason=e}onRequestStart(e,t){return e.abort=this.#_.bind(this),this.#X=e,super.onRequestStart(e,t)}onResponseStart(e,t,A,r){const n=A["content-length"];if(null!=n&&n>this.#t)throw new s(`Response size (${n}) larger than maxSize (${this.#t})`);return!0===this.aborted||super.onResponseStart(e,t,A,r)}onResponseError(e,t){this.#Ee||(t=this.#X?.reason??t,super.onResponseError(e,t))}onResponseData(e,t){return this.#r=this.#r+t.length,this.#r>=this.#t&&(this.#Ee=!0,!0===this.aborted?super.onResponseError(e,this.reason):super.onResponseEnd(e,{})),!0}onResponseEnd(e,t){this.#Ee||(!0!==this.#X.aborted?super.onResponseEnd(e,t):super.onResponseError(e,this.reason))}}e.exports=function({maxSize:e}={maxSize:1048576}){return t=>function(A,r){const{dumpMaxSize:s=e}=A,n=new i({maxSize:s,signal:A.signal},r);return t(A,n)}}},5132:(e,t,A)=>{"use strict";const r=A(8064);e.exports=function({maxRedirections:e}={}){return t=>function(A,s){const{maxRedirections:n=e,...i}=A;if(null==n||0===n)return t(A,s);const o={...i},a=new r(t,n,o,s);return t(o,a)}}},2936:(e,t,A)=>{"use strict";const r=A(6917),{ResponseError:s}=A(4465);class n extends r{#Ie;#Qe;#Be;#Ce;#pe;constructor(e,{handler:t}){super(t)}#fe(e){return 0===(this.#Qe??"").indexOf(e)}onRequestStart(e,t){return this.#Ie=0,this.#Qe=null,this.#Be=null,this.#Ce=null,this.#pe="",super.onRequestStart(e,t)}onResponseStart(e,t,A,r){if(this.#Ie=t,this.#Ce=A,this.#Qe=A["content-type"],this.#Ie<400)return super.onResponseStart(e,t,A,r);(this.#fe("application/json")||this.#fe("text/plain"))&&(this.#Be=new TextDecoder("utf-8"))}onResponseData(e,t){if(this.#Ie<400)return super.onResponseData(e,t);this.#pe+=this.#Be?.decode(t,{stream:!0})??""}onResponseEnd(e,t){if(this.#Ie>=400){if(this.#pe+=this.#Be?.decode(void 0,{stream:!1})??"",this.#fe("application/json"))try{this.#pe=JSON.parse(this.#pe)}catch{}let t;const A=Error.stackTraceLimit;Error.stackTraceLimit=0;try{t=new s("Response Error",this.#Ie,{body:this.#pe,headers:this.#Ce})}finally{Error.stackTraceLimit=A}super.onResponseError(e,t)}else super.onResponseEnd(e,t)}onResponseError(e,t){super.onResponseError(e,t)}}e.exports=()=>e=>function(t,A){return e(t,new n(t,{handler:A}))}},532:(e,t,A)=>{"use strict";const r=A(6294);e.exports=e=>t=>function(A,s){return t(A,new r({...A,retryOptions:{...e,...A.retryOptions}},{handler:s,dispatch:t}))}},4178:(e,t,A)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SPECIAL_HEADERS=t.MINOR=t.MAJOR=t.HTAB_SP_VCHAR_OBS_TEXT=t.QUOTED_STRING=t.CONNECTION_TOKEN_CHARS=t.HEADER_CHARS=t.TOKEN=t.HEX=t.URL_CHAR=t.USERINFO_CHARS=t.MARK=t.ALPHANUM=t.NUM=t.HEX_MAP=t.NUM_MAP=t.ALPHA=t.STATUSES_HTTP=t.H_METHOD_MAP=t.METHOD_MAP=t.METHODS_RTSP=t.METHODS_ICE=t.METHODS_HTTP=t.HEADER_STATE=t.FINISH=t.STATUSES=t.METHODS=t.LENIENT_FLAGS=t.FLAGS=t.TYPE=t.ERROR=void 0;const r=A(3530);t.ERROR={OK:0,INTERNAL:1,STRICT:2,CR_EXPECTED:25,LF_EXPECTED:3,UNEXPECTED_CONTENT_LENGTH:4,UNEXPECTED_SPACE:30,CLOSED_CONNECTION:5,INVALID_METHOD:6,INVALID_URL:7,INVALID_CONSTANT:8,INVALID_VERSION:9,INVALID_HEADER_TOKEN:10,INVALID_CONTENT_LENGTH:11,INVALID_CHUNK_SIZE:12,INVALID_STATUS:13,INVALID_EOF_STATE:14,INVALID_TRANSFER_ENCODING:15,CB_MESSAGE_BEGIN:16,CB_HEADERS_COMPLETE:17,CB_MESSAGE_COMPLETE:18,CB_CHUNK_HEADER:19,CB_CHUNK_COMPLETE:20,PAUSED:21,PAUSED_UPGRADE:22,PAUSED_H2_UPGRADE:23,USER:24,CB_URL_COMPLETE:26,CB_STATUS_COMPLETE:27,CB_METHOD_COMPLETE:32,CB_VERSION_COMPLETE:33,CB_HEADER_FIELD_COMPLETE:28,CB_HEADER_VALUE_COMPLETE:29,CB_CHUNK_EXTENSION_NAME_COMPLETE:34,CB_CHUNK_EXTENSION_VALUE_COMPLETE:35,CB_RESET:31,CB_PROTOCOL_COMPLETE:38},t.TYPE={BOTH:0,REQUEST:1,RESPONSE:2},t.FLAGS={CONNECTION_KEEP_ALIVE:1,CONNECTION_CLOSE:2,CONNECTION_UPGRADE:4,CHUNKED:8,UPGRADE:16,CONTENT_LENGTH:32,SKIPBODY:64,TRAILING:128,TRANSFER_ENCODING:512},t.LENIENT_FLAGS={HEADERS:1,CHUNKED_LENGTH:2,KEEP_ALIVE:4,TRANSFER_ENCODING:8,VERSION:16,DATA_AFTER_CLOSE:32,OPTIONAL_LF_AFTER_CR:64,OPTIONAL_CRLF_AFTER_CHUNK:128,OPTIONAL_CR_BEFORE_LF:256,SPACES_AFTER_CHUNK_SIZE:512},t.METHODS={DELETE:0,GET:1,HEAD:2,POST:3,PUT:4,CONNECT:5,OPTIONS:6,TRACE:7,COPY:8,LOCK:9,MKCOL:10,MOVE:11,PROPFIND:12,PROPPATCH:13,SEARCH:14,UNLOCK:15,BIND:16,REBIND:17,UNBIND:18,ACL:19,REPORT:20,MKACTIVITY:21,CHECKOUT:22,MERGE:23,"M-SEARCH":24,NOTIFY:25,SUBSCRIBE:26,UNSUBSCRIBE:27,PATCH:28,PURGE:29,MKCALENDAR:30,LINK:31,UNLINK:32,SOURCE:33,PRI:34,DESCRIBE:35,ANNOUNCE:36,SETUP:37,PLAY:38,PAUSE:39,TEARDOWN:40,GET_PARAMETER:41,SET_PARAMETER:42,REDIRECT:43,RECORD:44,FLUSH:45,QUERY:46},t.STATUSES={CONTINUE:100,SWITCHING_PROTOCOLS:101,PROCESSING:102,EARLY_HINTS:103,RESPONSE_IS_STALE:110,REVALIDATION_FAILED:111,DISCONNECTED_OPERATION:112,HEURISTIC_EXPIRATION:113,MISCELLANEOUS_WARNING:199,OK:200,CREATED:201,ACCEPTED:202,NON_AUTHORITATIVE_INFORMATION:203,NO_CONTENT:204,RESET_CONTENT:205,PARTIAL_CONTENT:206,MULTI_STATUS:207,ALREADY_REPORTED:208,TRANSFORMATION_APPLIED:214,IM_USED:226,MISCELLANEOUS_PERSISTENT_WARNING:299,MULTIPLE_CHOICES:300,MOVED_PERMANENTLY:301,FOUND:302,SEE_OTHER:303,NOT_MODIFIED:304,USE_PROXY:305,SWITCH_PROXY:306,TEMPORARY_REDIRECT:307,PERMANENT_REDIRECT:308,BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,NOT_ACCEPTABLE:406,PROXY_AUTHENTICATION_REQUIRED:407,REQUEST_TIMEOUT:408,CONFLICT:409,GONE:410,LENGTH_REQUIRED:411,PRECONDITION_FAILED:412,PAYLOAD_TOO_LARGE:413,URI_TOO_LONG:414,UNSUPPORTED_MEDIA_TYPE:415,RANGE_NOT_SATISFIABLE:416,EXPECTATION_FAILED:417,IM_A_TEAPOT:418,PAGE_EXPIRED:419,ENHANCE_YOUR_CALM:420,MISDIRECTED_REQUEST:421,UNPROCESSABLE_ENTITY:422,LOCKED:423,FAILED_DEPENDENCY:424,TOO_EARLY:425,UPGRADE_REQUIRED:426,PRECONDITION_REQUIRED:428,TOO_MANY_REQUESTS:429,REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL:430,REQUEST_HEADER_FIELDS_TOO_LARGE:431,LOGIN_TIMEOUT:440,NO_RESPONSE:444,RETRY_WITH:449,BLOCKED_BY_PARENTAL_CONTROL:450,UNAVAILABLE_FOR_LEGAL_REASONS:451,CLIENT_CLOSED_LOAD_BALANCED_REQUEST:460,INVALID_X_FORWARDED_FOR:463,REQUEST_HEADER_TOO_LARGE:494,SSL_CERTIFICATE_ERROR:495,SSL_CERTIFICATE_REQUIRED:496,HTTP_REQUEST_SENT_TO_HTTPS_PORT:497,INVALID_TOKEN:498,CLIENT_CLOSED_REQUEST:499,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,VARIANT_ALSO_NEGOTIATES:506,INSUFFICIENT_STORAGE:507,LOOP_DETECTED:508,BANDWIDTH_LIMIT_EXCEEDED:509,NOT_EXTENDED:510,NETWORK_AUTHENTICATION_REQUIRED:511,WEB_SERVER_UNKNOWN_ERROR:520,WEB_SERVER_IS_DOWN:521,CONNECTION_TIMEOUT:522,ORIGIN_IS_UNREACHABLE:523,TIMEOUT_OCCURED:524,SSL_HANDSHAKE_FAILED:525,INVALID_SSL_CERTIFICATE:526,RAILGUN_ERROR:527,SITE_IS_OVERLOADED:529,SITE_IS_FROZEN:530,IDENTITY_PROVIDER_AUTHENTICATION_ERROR:561,NETWORK_READ_TIMEOUT:598,NETWORK_CONNECT_TIMEOUT:599},t.FINISH={SAFE:0,SAFE_WITH_CB:1,UNSAFE:2},t.HEADER_STATE={GENERAL:0,CONNECTION:1,CONTENT_LENGTH:2,TRANSFER_ENCODING:3,UPGRADE:4,CONNECTION_KEEP_ALIVE:5,CONNECTION_CLOSE:6,CONNECTION_UPGRADE:7,TRANSFER_ENCODING_CHUNKED:8},t.METHODS_HTTP=[t.METHODS.DELETE,t.METHODS.GET,t.METHODS.HEAD,t.METHODS.POST,t.METHODS.PUT,t.METHODS.CONNECT,t.METHODS.OPTIONS,t.METHODS.TRACE,t.METHODS.COPY,t.METHODS.LOCK,t.METHODS.MKCOL,t.METHODS.MOVE,t.METHODS.PROPFIND,t.METHODS.PROPPATCH,t.METHODS.SEARCH,t.METHODS.UNLOCK,t.METHODS.BIND,t.METHODS.REBIND,t.METHODS.UNBIND,t.METHODS.ACL,t.METHODS.REPORT,t.METHODS.MKACTIVITY,t.METHODS.CHECKOUT,t.METHODS.MERGE,t.METHODS["M-SEARCH"],t.METHODS.NOTIFY,t.METHODS.SUBSCRIBE,t.METHODS.UNSUBSCRIBE,t.METHODS.PATCH,t.METHODS.PURGE,t.METHODS.MKCALENDAR,t.METHODS.LINK,t.METHODS.UNLINK,t.METHODS.PRI,t.METHODS.SOURCE,t.METHODS.QUERY],t.METHODS_ICE=[t.METHODS.SOURCE],t.METHODS_RTSP=[t.METHODS.OPTIONS,t.METHODS.DESCRIBE,t.METHODS.ANNOUNCE,t.METHODS.SETUP,t.METHODS.PLAY,t.METHODS.PAUSE,t.METHODS.TEARDOWN,t.METHODS.GET_PARAMETER,t.METHODS.SET_PARAMETER,t.METHODS.REDIRECT,t.METHODS.RECORD,t.METHODS.FLUSH,t.METHODS.GET,t.METHODS.POST],t.METHOD_MAP=(0,r.enumToMap)(t.METHODS),t.H_METHOD_MAP=Object.fromEntries(Object.entries(t.METHODS).filter((([e])=>e.startsWith("H")))),t.STATUSES_HTTP=[t.STATUSES.CONTINUE,t.STATUSES.SWITCHING_PROTOCOLS,t.STATUSES.PROCESSING,t.STATUSES.EARLY_HINTS,t.STATUSES.RESPONSE_IS_STALE,t.STATUSES.REVALIDATION_FAILED,t.STATUSES.DISCONNECTED_OPERATION,t.STATUSES.HEURISTIC_EXPIRATION,t.STATUSES.MISCELLANEOUS_WARNING,t.STATUSES.OK,t.STATUSES.CREATED,t.STATUSES.ACCEPTED,t.STATUSES.NON_AUTHORITATIVE_INFORMATION,t.STATUSES.NO_CONTENT,t.STATUSES.RESET_CONTENT,t.STATUSES.PARTIAL_CONTENT,t.STATUSES.MULTI_STATUS,t.STATUSES.ALREADY_REPORTED,t.STATUSES.TRANSFORMATION_APPLIED,t.STATUSES.IM_USED,t.STATUSES.MISCELLANEOUS_PERSISTENT_WARNING,t.STATUSES.MULTIPLE_CHOICES,t.STATUSES.MOVED_PERMANENTLY,t.STATUSES.FOUND,t.STATUSES.SEE_OTHER,t.STATUSES.NOT_MODIFIED,t.STATUSES.USE_PROXY,t.STATUSES.SWITCH_PROXY,t.STATUSES.TEMPORARY_REDIRECT,t.STATUSES.PERMANENT_REDIRECT,t.STATUSES.BAD_REQUEST,t.STATUSES.UNAUTHORIZED,t.STATUSES.PAYMENT_REQUIRED,t.STATUSES.FORBIDDEN,t.STATUSES.NOT_FOUND,t.STATUSES.METHOD_NOT_ALLOWED,t.STATUSES.NOT_ACCEPTABLE,t.STATUSES.PROXY_AUTHENTICATION_REQUIRED,t.STATUSES.REQUEST_TIMEOUT,t.STATUSES.CONFLICT,t.STATUSES.GONE,t.STATUSES.LENGTH_REQUIRED,t.STATUSES.PRECONDITION_FAILED,t.STATUSES.PAYLOAD_TOO_LARGE,t.STATUSES.URI_TOO_LONG,t.STATUSES.UNSUPPORTED_MEDIA_TYPE,t.STATUSES.RANGE_NOT_SATISFIABLE,t.STATUSES.EXPECTATION_FAILED,t.STATUSES.IM_A_TEAPOT,t.STATUSES.PAGE_EXPIRED,t.STATUSES.ENHANCE_YOUR_CALM,t.STATUSES.MISDIRECTED_REQUEST,t.STATUSES.UNPROCESSABLE_ENTITY,t.STATUSES.LOCKED,t.STATUSES.FAILED_DEPENDENCY,t.STATUSES.TOO_EARLY,t.STATUSES.UPGRADE_REQUIRED,t.STATUSES.PRECONDITION_REQUIRED,t.STATUSES.TOO_MANY_REQUESTS,t.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL,t.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE,t.STATUSES.LOGIN_TIMEOUT,t.STATUSES.NO_RESPONSE,t.STATUSES.RETRY_WITH,t.STATUSES.BLOCKED_BY_PARENTAL_CONTROL,t.STATUSES.UNAVAILABLE_FOR_LEGAL_REASONS,t.STATUSES.CLIENT_CLOSED_LOAD_BALANCED_REQUEST,t.STATUSES.INVALID_X_FORWARDED_FOR,t.STATUSES.REQUEST_HEADER_TOO_LARGE,t.STATUSES.SSL_CERTIFICATE_ERROR,t.STATUSES.SSL_CERTIFICATE_REQUIRED,t.STATUSES.HTTP_REQUEST_SENT_TO_HTTPS_PORT,t.STATUSES.INVALID_TOKEN,t.STATUSES.CLIENT_CLOSED_REQUEST,t.STATUSES.INTERNAL_SERVER_ERROR,t.STATUSES.NOT_IMPLEMENTED,t.STATUSES.BAD_GATEWAY,t.STATUSES.SERVICE_UNAVAILABLE,t.STATUSES.GATEWAY_TIMEOUT,t.STATUSES.HTTP_VERSION_NOT_SUPPORTED,t.STATUSES.VARIANT_ALSO_NEGOTIATES,t.STATUSES.INSUFFICIENT_STORAGE,t.STATUSES.LOOP_DETECTED,t.STATUSES.BANDWIDTH_LIMIT_EXCEEDED,t.STATUSES.NOT_EXTENDED,t.STATUSES.NETWORK_AUTHENTICATION_REQUIRED,t.STATUSES.WEB_SERVER_UNKNOWN_ERROR,t.STATUSES.WEB_SERVER_IS_DOWN,t.STATUSES.CONNECTION_TIMEOUT,t.STATUSES.ORIGIN_IS_UNREACHABLE,t.STATUSES.TIMEOUT_OCCURED,t.STATUSES.SSL_HANDSHAKE_FAILED,t.STATUSES.INVALID_SSL_CERTIFICATE,t.STATUSES.RAILGUN_ERROR,t.STATUSES.SITE_IS_OVERLOADED,t.STATUSES.SITE_IS_FROZEN,t.STATUSES.IDENTITY_PROVIDER_AUTHENTICATION_ERROR,t.STATUSES.NETWORK_READ_TIMEOUT,t.STATUSES.NETWORK_CONNECT_TIMEOUT],t.ALPHA=[];for(let e="A".charCodeAt(0);e<="Z".charCodeAt(0);e++)t.ALPHA.push(String.fromCharCode(e)),t.ALPHA.push(String.fromCharCode(e+32));t.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},t.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},t.NUM=["0","1","2","3","4","5","6","7","8","9"],t.ALPHANUM=t.ALPHA.concat(t.NUM),t.MARK=["-","_",".","!","~","*","'","(",")"],t.USERINFO_CHARS=t.ALPHANUM.concat(t.MARK).concat(["%",";",":","&","=","+","$",","]),t.URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(t.ALPHANUM),t.HEX=t.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]),t.TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(t.ALPHANUM),t.HEADER_CHARS=["\t"];for(let e=32;e<=255;e++)127!==e&&t.HEADER_CHARS.push(e);t.CONNECTION_TOKEN_CHARS=t.HEADER_CHARS.filter((e=>44!==e)),t.QUOTED_STRING=["\t"," "];for(let e=33;e<=255;e++)34!==e&&92!==e&&t.QUOTED_STRING.push(e);t.HTAB_SP_VCHAR_OBS_TEXT=["\t"," "];for(let e=33;e<=126;e++)t.HTAB_SP_VCHAR_OBS_TEXT.push(e);for(let e=128;e<=255;e++)t.HTAB_SP_VCHAR_OBS_TEXT.push(e);t.MAJOR=t.NUM_MAP,t.MINOR=t.MAJOR,t.SPECIAL_HEADERS={connection:t.HEADER_STATE.CONNECTION,"content-length":t.HEADER_STATE.CONTENT_LENGTH,"proxy-connection":t.HEADER_STATE.CONNECTION,"transfer-encoding":t.HEADER_STATE.TRANSFER_ENCODING,upgrade:t.HEADER_STATE.UPGRADE},t.default={ERROR:t.ERROR,TYPE:t.TYPE,FLAGS:t.FLAGS,LENIENT_FLAGS:t.LENIENT_FLAGS,METHODS:t.METHODS,STATUSES:t.STATUSES,FINISH:t.FINISH,HEADER_STATE:t.HEADER_STATE,ALPHA:t.ALPHA,NUM_MAP:t.NUM_MAP,HEX_MAP:t.HEX_MAP,NUM:t.NUM,ALPHANUM:t.ALPHANUM,MARK:t.MARK,USERINFO_CHARS:t.USERINFO_CHARS,URL_CHAR:t.URL_CHAR,HEX:t.HEX,TOKEN:t.TOKEN,HEADER_CHARS:t.HEADER_CHARS,CONNECTION_TOKEN_CHARS:t.CONNECTION_TOKEN_CHARS,QUOTED_STRING:t.QUOTED_STRING,HTAB_SP_VCHAR_OBS_TEXT:t.HTAB_SP_VCHAR_OBS_TEXT,MAJOR:t.MAJOR,MINOR:t.MINOR,SPECIAL_HEADERS:t.SPECIAL_HEADERS,METHODS_HTTP:t.METHODS_HTTP,METHODS_ICE:t.METHODS_ICE,METHODS_RTSP:t.METHODS_RTSP,METHOD_MAP:t.METHOD_MAP,H_METHOD_MAP:t.H_METHOD_MAP,STATUSES_HTTP:t.STATUSES_HTTP}},4744:(e,t,A)=>{"use strict";e=A.nmd(e);const{Buffer:r}=A(4573);let s;Object.defineProperty(e,"exports",{get:()=>s||(s=r.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgL5YUCAgd/A34gASACaiEEAkAgACIDKAIMIgANACADKAIEBEAgAyABNgIECyMAQRBrIgkkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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C0HjAQwHC0HXAQwGC0HYAQwFC0HZAQwEC0HaAQwDC0HbAQwCC0HdAQwBC0HcAQshAgNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAg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ogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/AgtBJSECDL4CC0HlACECDL0CCyADQT02AhwgAyABNgIUIAMgADYCDEEAIQIM1QILIANBGzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDNQCCyADQSA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzTAgsgA0ETNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0gILIANBCzYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNECCyADQRA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzQAgsgA0EgNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzwILIANBCzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM4CCyADQQw2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzNAgtBACECIANBADYCHCADIAE2AhQgA0HdDjYCECADQRI2AgwMzAILAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB/QEhAgzMAgsCQAJAIAMtADZBAUcNAEEAIQACQCADKAI4IgJFDQAgAigCYCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUcNASADQfwBNgIcIAMgATYCFCADQdwZNgIQIANBFTYCDEEAIQIMzQILQdwBIQIMswILIANBADYCHCADIAE2AhQgA0H5CzYCECADQR82AgxBACECDMsCCwJAAkAgAy0AKEEBaw4CBAEAC0HbASECDLICC0HUASECDLECCyADQQI6ADFBACEAAkAgAygCOCICRQ0AIAIoAgAiAkUNACADIAIRAAAhAAsgAEUEQEHdASECDLECCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQbQMNgIQIANBEDYCDEEAIQIMygILIANB+wE2AhwgAyABNgIUIANBgRo2AhAgA0EVNgIMQQAhAgzJAgsgASAERgRAQfoBIQIMyQILIAEtAABByABGDQEgA0EBOgAoC0HAASECDK4CC0HaASECDK0CCyABIARHBEAgA0EMNgIIIAMgATYCBEHZASECDK0CC0H5ASECDMUCCyABIARGBEBB+AEhAgzFAgsgAS0AAEHIAEcNBCABQQFqIQFB2AEhAgyrAgsgASAERgRAQfcBIQIMxAILAkACQCABLQAAQcUAaw4QAAUFBQUFBQUFBQUFBQUFAQULIAFBAWohAUHWASECDKsCCyABQQFqIQFB1wEhAgyqAgtB9gEhAiABIARGDcICIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbrVAGotAABHDQMgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMMCCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIARQRAQeMBIQIMqgILIANB9QE2AhwgAyABNgIUIAMgADYCDEEAIQIMwgILQfQBIQIgASAERg3BAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEG41QBqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzCAgsgA0GBBDsBKCADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIADQMMAgsgA0EANgIAC0EAIQIgA0EANgIcIAMgATYCFCADQeUfNgIQIANBCDYCDAy/AgtB1QEhAgylAgsgA0HzATYCHCADIAE2AhQgAyAANgIMQQAhAgy9AgtBACEAAkAgAygCOCICRQ0AIAIoAkAiAkUNACADIAIRAAAhAAsgAEUNbiAAQRVHBEAgA0EANgIcIAMgATYCFCADQYIPNgIQIANBIDYCDEEAIQIMvQILIANBjwE2AhwgAyABNgIUIANB7Bs2AhAgA0EVNgIMQQAhAgy8AgsgASAERwRAIANBDTYCCCADIAE2AgRB0wEhAgyjAgtB8gEhAgy7AgsgASAERgRAQfEBIQIMuwILAkACQAJAIAEtAABByABrDgsAAQgICAgICAgIAggLIAFBAWohAUHQASECDKMCCyABQQFqIQFB0QEhAgyiAgsgAUEBaiEBQdIBIQIMoQILQfABIQIgASAERg25AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBtdUAai0AAEcNBCAAQQJGDQMgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuQILQe8BIQIgASAERg24AiADKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABBs9UAai0AAEcNAyAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuAILQe4BIQIgASAERg23AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMtwILIAMoAgQhACADQgA3AwAgAyAAIAVBAWoiARArIgBFDQIgA0HsATYCHCADIAE2AhQgAyAANgIMQQAhAgy2AgsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNnAIgA0HtATYCHCADIAE2AhQgAyAANgIMQQAhAgy0AgtBzwEhAgyaAgtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDLQCC0HOASECDJoCCyADQesBNgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMsgILIAEgBEYEQEHrASECDLICCyABLQAAQS9GBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GyODYCECADQQg2AgxBACECDLECC0HNASECDJcCCyABIARHBEAgA0EONgIIIAMgATYCBEHMASECDJcCC0HqASECDK8CCyABIARGBEBB6QEhAgyvAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBywEhAgyWAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZcCIANB6AE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAEgBEYEQEHnASECDK4CCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5gE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILQcoBIQIMlAILIAEgBEYEQEHlASECDK0CC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDQIgA0HiATYCHCADIAE2AhQgAyAANgIMQQAhAgyvAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZoCIANB4wE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ2YAiADQeQBNgIcIAMgATYCFCADIAA2AgwMrQILQckBIQIMkwILQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgytAgtByAEhAgyTAgsgA0HhATYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDKsCCyABIARGBEBB4QEhAgyrAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBmRE2AhAgA0EJNgIMQQAhAgyrAgtBxwEhAgyRAgsgASAERgRAQeABIQIMqgILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyrAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqgILQcYBIQIMkAILIAEgBEYEQEHfASECDKkCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqgILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKkCC0HFASECDI8CCyABIARGBEBB3gEhAgyoAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKkCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyoAgtBxAEhAgyOAgsgASAERgRAQd0BIQIMpwILAkACQAJAAkAgAS0AAEEKaw4XAgMDAAMDAwMDAwMDAwMDAwMDAwMDAwEDCyABQQFqDAULIAFBAWohAUHDASECDI8CCyABQQFqIQEgA0Evai0AAEEBcQ0IIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKcCCyADQQA2AhwgAyABNgIUIANBjQs2AhAgA0ENNgIMQQAhAgymAgsgASAERwRAIANBDzYCCCADIAE2AgRBASECDI0CC0HcASECDKUCCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtB2wEhAgymAgsgAygCBCEAIANBADYCBCADIAAgARAtIgBFBEAgAUEBaiEBDAQLIANB2gE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMpQILIAMoAgQhACADQQA2AgQgAyAAIAEQLSIADQEgAUEBagshAUHBASECDIoCCyADQdkBNgIcIAMgADYCDCADIAFBAWo2AhRBACECDKICC0HCASECDIgCCyADQS9qLQAAQQFxDQEgA0EANgIcIAMgATYCFCADQeQcNgIQIANBGTYCDEEAIQIMoAILIAEgBEYEQEHZASEC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IAFBAWohAUGeASECDOQBCyABQQFqIQFBnwEhAgzjAQtBtwEhAiABIARGDfsBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQezUAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPwBCyADQQA2AgAgBkEBaiEBQQ0MKAtBtgEhAiABIARGDfoBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPsBCyADQQA2AgAgBkEBaiEBQQwMJwtBtQEhAiABIARGDfkBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQerUAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPoBCyADQQA2AgAgBkEBaiEBQQMMJgtBtAEhAiABIARGDfgBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQejUAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPkBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQbMBIQIM+AELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBmQEhAgzfAQsgAUEBaiEBQZoBIQIM3gELQbIBIQIgASAERg32ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHm1ABqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz3AQsgA0EANgIAIAZBAWohAUEnDCMLQbEBIQIgASAERg31ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHk1ABqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz2AQsgA0EANgIAIAZBAWohAUEcDCILQbABIQIgASAERg30ASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHe1ABqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz1AQsgA0EANgIAIAZBAWohAUEGDCELQa8BIQIgASAERg3zASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHZ1ABqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz0AQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGuASECDPMBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQY4BIQIM3AELIAFBAWohAUGPASECDNsBCyABQQFqIQFBlAEhAgzaAQsgAUEBaiEBQZUBIQIM2QELQa0BIQIgASAERg3xASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHX1ABqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzyAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGsASECDPEBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGQASECDNgBCyABQQFqIQFBkwEhAgzXAQsgASAERgRAQasBIQIM8AELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQZEBIQIM1wELIAFBAWohAUGSASECDNYBCyABIARGBEBBqgEhAgzvAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GpASECIAEgBEYN7QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABB0dQAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7gELIANBADYCACAGQQFqIQFBHgwaC0GoASECIAEgBEYN7AEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBytQAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7QELIANBADYCACAGQQFqIQFBFQwZC0GnASECIAEgBEYN6wEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBx9QAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7AELIANBADYCACAGQQFqIQFBFwwYC0GmASECIAEgBEYN6gEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBwdQAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6wELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBpQEhAgzqAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYsBIQIM0QELIAFBAWohAUGMASECDNABC0GkASECIAEgBEYN6AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBptUAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6QELIANBADYCACAGQQFqIQFBCQwVC0GjASECIAEgBEYN5wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBpNUAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6AELIANBADYCACAGQQFqIQFBHwwUC0GiASECIAEgBEYN5gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBvtQAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5wELIANBADYCACAGQQFqIQFBAgwTC0GhASECIAEgBEYN5QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQbzUAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOUBCyABIARGBEBBoAEhAgzlAQtBASABLQAAQd8ARw0RGiABQQFqIQFBhwEhAgzLAQsgA0EANgIAIAZBAWohAUGIASECDMoBC0GfASECIAEgBEYN4gEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4wELIANBADYCACAGQQFqIQFBKQwPC0GeASECIAEgBEYN4QEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBuNQAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4gELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBnQEhAgzhAQsgAS0AAEHFAEcNDiABQQFqIQFBhAEhAgzHAQsgASAERgRAQZwBIQIM4AELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFBggEhAgzHAQsgAUEBaiEBQYMBIQIMxgELQZsBIQIgASAERg3eASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGz1ABqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzfAQsgA0EANgIAIAZBAWohAUEjDAsLQZoBIQIgASAERg3dASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGw1ABqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzeAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGZASECDN0BCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQf0AIQIMxAELIAFBAWohAUGAASECDMMBCyABIARGBEBBmAEhAgzcAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB/gAhAgzDAQsgAUEBaiEBQf8AIQIMwgELIAEgBEYEQEGXASECDNsBCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQZYBIQIgASAERg3ZASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEGs1ABqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzaAQsgA0EANgIAIAZBAWohAUEFDAYLQZUBIQIgASAERg3YASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGm1ABqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzZAQsgA0EANgIAIAZBAWohAUEWDAULQZQBIQIgASAERg3XASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzYAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGTASECDNcBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUH5ACECDL4BCyABQQFqIQFB+gAhAgy9AQtBkgEhAiABIARGDdUBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQaDUAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNYBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGRASECDNQBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC4iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB/h82AhAgA0EGNgIMDNEBC0H4ACECDLcBCyADQZABNgIcIAMgATYCFCADIAA2AgxBACECDM8BC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgzOAQtB9wAhAgy0AQsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDMwBCyABIARGBEBBjwEhAgzMAQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GbHzYCECADQQY2AgxBACECDMwBC0ECIQIMsgELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GOASECDMoBCyABIARGBEBBjQEhAgzKAQsCQCABLQAAQQlrDgRKAABKAAtB9QAhAgywAQsgAy0AKUEFRgRAQfYAIQIMsAELQfQAIQIMrwELIAEgBEYEQEGMASECDMgBCyADQRA2AgggAyABNgIEDAoLIAEgBEYEQEGLASECDMcBCwJAIAEtAABBCWsOBEcAAEcAC0HzACECDK0BCyABIARHBEAgA0EQNgIIIAMgATYCBEHxACECDK0BC0GKASECDMUBCwJAIAEgBEcEQANAIAEtAABBoNAAai0AACIAQQNHBEACQCAAQQFrDgJJAAQLQfAAIQIMrwELIAQgAUEBaiIBRw0AC0GIASEC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BCABQQFqIgFHDQALQfsAIQIMpwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMpgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMpQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMpAELIANBADYCHCADIAE2AhQgA0G8CjYCECADQQc2AgxBACECDKMBC0HPACECDIkBC0HRACECDIgBC0HnACECDIcBCyABIARGBEBB+gAhAgygAQsCQCABLQAAQQlrDgQgAAAgAAsgAUEBaiEBQeYAIQIMhgELIAEgBEYEQEH5ACECDJ8BCwJAIAEtAABBCWsOBB8AAB8AC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQRAQeIBIQIMhgELIABBFUcEQCADQQA2AhwgAyABNgIUIANByQ02AhAgA0EaNgIMQQAhAgyfAQsgA0H4ADYCHCADIAE2AhQgA0HqGjYCECADQRU2AgxBACECDJ4BCyABIARHBEAgA0ENNgIIIAMgATYCBEHkACECDIUBC0H3ACECDJ0BCyABIARGBEBB9gAhAgydAQsCQAJAAkAgAS0AAEHIAGsOCwABCwsLCwsLCwsCCwsgAUEBaiEBQd0AIQIMhQELIAFBAWohAUHgACECDIQBCyABQQFqIQFB4wAhAgyDAQtB9QAhAiABIARGDZsBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbXVAGotAABHDQggAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJwBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIABEAgA0H0ADYCHCADIAE2AhQgAyAANgIMQQAhAgycAQtB4gAhAgyCAQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJwBC0HhACECDIIBCyADQfMANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMmgELIAMtACkiAEEja0ELSQ0JAkAgAEEGSw0AQQEgAHRBygBxRQ0ADAoLQQAhAiADQQA2AhwgAyABNgIUIANB7Qk2AhAgA0EINgIMDJkBC0HyACECIAEgBEYNmAEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBs9UAai0AAEcNBSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMmQELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfEANgIcIAMgATYCFCADIAA2AgxBACECDJkBC0HfACECDH8LQQAhAAJAIAMoAjgiAkUNACACKAI0IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANB6g02AhAgA0EmNgIMQQAhAgyZAQtB3gAhAgx/CyADQfAANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMlwELIAMtAClBIUYNBiADQQA2AhwgAyABNgIUIANBkQo2AhAgA0EINgIMQQAhAgyWAQtB7wAhAiABIARGDZUBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDVAGotAABHDQIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJYBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIARQ0CIANB7QA2AhwgAyABNgIUIAMgADYCDEEAIQIMlQELIANBADYCAAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDYABIANB7gA2AhwgAyABNgIUIAMgADYCDEEAIQIMkwELQdwAIQIMeQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJMBC0HbACECDHkLIANB7AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyRAQsgAy0AKSIAQSNJDQAgAEEuRg0AIANBADYCHCADIAE2AhQgA0HJCTYCECADQQg2AgxBACECDJABC0HaACECDHYLIAEgBEYEQEHrACECDI8BCwJAIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMjwELQdkAIQIMdQsgASAERwRAIANBDjYCCCADIAE2AgRB2AAhAgx1C0HqACECDI0BCyABIARGBEBB6QAhAgyNAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1wAhAgx0CyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeiADQegANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyABIARGBEBB5wAhAgyMAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ17IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELQdYAIQIMcgsgASAERgRAQeUAIQIMiwELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDI0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNfSADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeyADQeQANgIcIAMgATYCFCADIAA2AgwMiwELQdQAIQIMcQsgAy0AKUEiRg2GAUHTACECDHALQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALIABFBEBB1QAhAgxwCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQaQNNgIQIANBITYCDEEAIQIMiQELIANB4QA2AhwgAyABNgIUIANB0Bo2AhAgA0EVNgIMQQAhAgyIAQsgASAERgRAQeAAIQIMiAELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HSACECDHALIANBADYCHCADIAE2AhQgA0G2ETYCECADQQk2AgxBACECDIgBCyADQQA2AhwgAyABNgIUIANBthE2AhAgA0EJNgIMQQAhAgyHAQsgASAERgRAQd8AIQIMhwELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBthE2AhAgA0ECNgIMQQAhAgyGAQsgASAERgRAQd0AIQIMhgELIAEtAAAiAkENRgRAIAFBAWohAUHQACECDG0LIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyFAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0HKLTYCECADQQc2AgwMgwELIAEgBEYEQEHbACECDIMBCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc4AIQIMaAsgASAERgRAQdoAIQIMgQELIAEtAABBCWsOBAABAQABC0EAIQIgA0EANgIcIANBmhI2AhAgA0EHNgIMIAMgAUEBajYCFAx/CyADQYASOwEqQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB2QA2AhwgAyABNgIUIANB6ho2AhAgA0EVNgIMQQAhAgx+C0HNACECDGQLIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDHwLIAEgBEYEQEHZACECDHwLIAEtAABBIEcNPSABQQFqIQEgAy0ALkEBcQ09IANBADYCHCADIAE2AhQgA0HCHDYCECADQR42AgxBACECDHsLIAEgBEYEQEHYACECDHsLAkACQAJAAkACQCABLQAAIgBBCmsOBAIDAwABCyABQQFqIQFBLCECDGULIABBOkcNASADQQA2AhwgAyABNgIUIANB5xE2AhAgA0EKNgIMQQAhAgx9CyABQQFqIQEgA0Evai0AAEEBcUUNcyADLQAyQYABcUUEQCADQTJqIQIgAxA1QQAhAAJAIAMoAjgiBkUNACAGKAIoIgZFDQAgAyAGEQAAIQALAkACQCAADhZNTEsBAQEBAQEBAQEBAQEBAQEBAQEAAQsgA0EpNgIcIAMgATYCFCADQawZNgIQIANBFTYCDEEAIQIMfgsg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c3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw==","base64"))})},7136:(e,t,A)=>{"use strict";e=A.nmd(e);const{Buffer:r}=A(4573);let s;Object.defineProperty(e,"exports",{get:()=>s||(s=r.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgLhocCAwd/A34BeyABIAJqIQQCQCAAIgMoAgwiAA0AIAMoAgQEQCADIAE2AgQLIwBBEGsiCSQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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DAgLQeMBDAcLQdcBDAYLQdgBDAULQdkBDAQLQdoBDAMLQdsBDAILQd0BDAELQdwBCyECA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAn8CQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAwJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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A0EXNgIcIAMgADYCDCADIAFBAWo2AhQM+AILIABBFUYNI0EAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAz3AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwdCyADQRk2AhwgAyAANgIMIAMgAUEBajYCFAz2AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQzvAgsgA0EaNgIcIAMgADYCDCADIAFBAWo2AhQM9QILIABBFUYNH0EAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAz0AgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDBsLIANBHDYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgzzAgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDOsCCyADQR02AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8gILIABBO0cNASABQQFqIQELQSYhAgzXAgtBACECIANBADYCHCADIAE2AhQgA0GfFTYCECADQQw2AgwM7wILIAEgBEcEQANAIAEtAABBIEcNhAIgBCABQQFqIgFHDQALQSwhAgzvAgtBLCECDO4CCyABIARGBEBBNCECDO4CCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtBNCECDO8CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUNnwIgA0EyNgIcIAMgATYCFCADIAA2AgxBACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUEQCABQQFqIQEMnwILIANBMjYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgztAgsgASAERwRAAkADQCABLQAAQTBrIgBB/wFxQQpPBEBBOiECDNcCCyADKQMgIgtCmbPmzJmz5swZVg0BIAMgC0IKfiIKNwMgIAogAK1C/wGDIgtCf4VWDQEgAyAKIAt8NwMgIAQgAUEBaiIBRw0AC0HAACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABQQFqIgEQMSIADRcM4gILQcAAIQIM7AILIAEgBEYEQEHJACECDOwCCwJAA0ACQCABLQAAQQlrDhgAAqICogKpAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAgCiAgsgBCABQQFqIgFHDQALQckAIQIM7AILIAFBAWohASADQS9qLQAAQQFxDaUCIANBADYCHCADIAE2AhQgA0GXEDYCECADQQo2AgxBACECDOsCCyABIARHBEADQCABLQAAQSBHDRUgBCABQQFqIgFHDQALQfgAIQIM6wILQfgAIQIM6gILIANBAjoAKAw4C0EAIQIgA0EANgIcIANBvws2AhAgA0ECNgIMIAMgAUEBajYCFAzoAgtBACECDM4CC0ENIQIMzQILQRMhAgzMAgtBFSECDMsCC0EWIQIMygILQRghAgzJAgtBGSECDMgCC0EaIQIMxwILQRshAgzGAgtBHCECDMUCC0EdIQIMxAILQR4hAgzDAgtBHyECDMICC0EgIQIMwQILQSIhAgzAAgtBIyECDL8CC0ElIQIMvgILQeUAIQIMvQILIANBPTYCHCADIAE2AhQgAyAANgIMQQAhAgzVAgsgA0EbNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIM1AILIANBIDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNMCCyADQRM2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzSAgsgA0ELNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0QILIANBEDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNACCyADQSA2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzPAgsgA0ELNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzgILIANBDDYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM0CC0EAIQIgA0EANgIcIAMgATYCFCADQd0ONgIQIANBEjYCDAzMAgsCQANAAkAgAS0AAEEKaw4EAAICAAILIAQgAUEBaiIBRw0AC0H9ASECDMwCCwJAAkAgAy0ANkEBRw0AQQAhAAJAIAMoAjgiAkUNACACKAJgIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB/AE2AhwgAyABNgIUIANB3Bk2AhAgA0EVNgIMQQAhAgzNAgtB3AEhAgyzAgsgA0EANgIcIAMgATYCFCADQfkLNgIQIANBHzYCDEEAIQIMywILAkACQCADLQAoQQFrDgIEAQALQdsBIQIMsgILQdQBIQIMsQILIANBAjoAMUEAIQACQCADKAI4IgJFDQAgAigCACICRQ0AIAMgAhEAACEACyAARQRAQd0BIQIMsQILIABBFUcEQCADQQA2AhwgAyABNgIUIANBtAw2AhAgA0EQNgIMQQAhAgzKAgsgA0H7ATYCHCADIAE2AhQgA0GBGjYCECADQRU2AgxBACECDMkCCyABIARGBEBB+gEhAgzJAgsgAS0AAEHIAEYNASADQQE6ACgLQcABIQIMrgILQdoBIQIMrQILIAEgBEcEQCADQQw2AgggAyABNgIEQdkBIQIMrQILQfkBIQIMxQILIAEgBEYEQEH4ASECDMUCCyABLQAAQcgARw0EIAFBAWohAUHYASECDKsCCyABIARGBEBB9wEhAgzEAgsCQAJAIAEtAABBxQBrDhAABQUFBQUFBQUFBQUFBQUBBQsgAUEBaiEBQdYBIQIMqwILIAFBAWohAUHXASECDKoCC0H2ASECIAEgBEYNwgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABButUAai0AAEcNAyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMwwILIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgBFBEBB4wEhAgyqAgsgA0H1ATYCHCADIAE2AhQgAyAANgIMQQAhAgzCAgtB9AEhAiABIARGDcECIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjVAGotAABHDQIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMICCyADQYEEOwEoIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgANAwwCCyADQQA2AgALQQAhAiADQQA2AhwgAyABNgIUIANB5R82AhAgA0EINgIMDL8CC0HVASECDKUCCyADQfMBNgIcIAMgATYCFCADIAA2AgxBACECDL0CC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ1uIABBFUcEQCADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgy9AgsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDLwCCyABIARHBEAgA0ENNgIIIAMgATYCBEHTASECDKMCC0HyASECDLsCCyABIARGBEBB8QEhAgy7AgsCQAJAAkAgAS0AAEHIAGsOCwABCAgICAgICAgCCAsgAUEBaiEBQdABIQIMowILIAFBAWohAUHRASECDKICCyABQQFqIQFB0gEhAgyhAgtB8AEhAiABIARGDbkCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEG11QBqLQAARw0EIABBAkYNAyAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy5AgtB7wEhAiABIARGDbgCIAMoAgAiACAEIAFraiEGIAEgAGtBAWohBQNAIAEtAAAgAEGz1QBqLQAARw0DIABBAUYNAiAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy4AgtB7gEhAiABIARGDbcCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEGw1QBqLQAARw0CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy3AgsgAygCBCEAIANCADcDACADIAAgBUEBaiIBECsiAEUNAiADQewBNgIcIAMgATYCFCADIAA2AgxBACECDLYCCyADQQA2AgALIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ2cAiADQe0BNgIcIAMgATYCFCADIAA2AgxBACECDLQCC0HPASECDJoCC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMtAILQc4BIQIMmgILIANB6wE2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyyAgsgASAERgRAQesBIQIMsgILIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMsQILQc0BIQIMlwILIAEgBEcEQCADQQ42AgggAyABNgIEQcwBIQIMlwILQeoBIQIMrwILIAEgBEYEQEHpASECDK8CCyABLQAAQTBrIgBB/wFxQQpJBEAgAyAAOgAqIAFBAWohAUHLASECDJYCCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNlwIgA0HoATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgASAERgRAQecBIQIMrgILAkAgAS0AAEEuRgRAIAFBAWohAQwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmAIgA0HmATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgtBygEhAgyUAgsgASAERgRAQeUBIQIMrQILQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIBNgIcIAMgATYCFCADIAA2AgxBACECDK8CCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmgIgA0HjATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5AE2AhwgAyABNgIUIAMgADYCDAytAgtByQEhAgyTAgtBACEAAkAgAygCOCICRQ0AIAIoAkQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GkDTYCECADQSE2AgxBACECDK0CC0HIASECDJMCCyADQeEBNgIcIAMgATYCFCADQdAaNgIQIANBFTYCDEEAIQIMqwILIAEgBEYEQEHhASECDKsCCwJAIAEtAABBIEYEQCADQQA7ATQgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GZETYCECADQQk2AgxBACECDKsCC0HHASECDJECCyABIARGBEBB4AEhAgyqAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKsCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyqAgtBxgEhAgyQAgsgASAERgRAQd8BIQIMqQILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyqAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqQILQcUBIQIMjwILIAEgBEYEQEHeASECDKgCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqQILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKgCC0HEASECDI4CCyABIARGBEBB3QEhAgynAgsCQAJAAkACQCABLQAAQQprDhcCAwMAAwMDAwMDAwMDAwMDAwMDAwMDAQMLIAFBAWoMBQsgAUEBaiEBQcMBIQIMjwILIAFBAWohASADQS9qLQAAQQFxDQggA0EANgIcIAMgATYCFCADQY0LNgIQIANBDTYCDEEAIQIMpwILIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKYCCyABIARHBEAgA0EPNgIIIAMgATYCBEEBIQIMjQILQdwBIQIMpQILAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0HbASECDKYCCyADKAIEIQAgA0EANgIEIAMgACABEC0iAEUEQCABQQFqIQEMBAsgA0HaATYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgylAgsgAygCBCEAIANBADYCBCADIAAgARAtIgANASABQQFqCyEBQcEBIQIMigILIANB2QE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMogILQcIBIQIMiAILIANBL2otAABBAXENASADQQA2AhwgAyABNgIUIANB5Bw2AhAgA0EZNgIMQQAhAgygAgsgASAERgRAQdkB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CyADIAU2AgAMkAILIANBADYCACAGQQFqIQFBGgw8C0HKASECIAEgBEYNjgIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBjdUAai0AAEcNOyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjwILIANBADYCACAGQQFqIQFBIQw7CyABIARGBEBByQEhAgyOAgsCQAJAIAEtAABBwQBrDhQAPT09PT09PT09PT09PT09PT09AT0LIAFBAWohAUGtASECDPUBCyABQQFqIQFBsAEhAgz0AQsgASAERgRAQcgBIQIMjQILAkACQCABLQAAQdUAaw4LADw8PDw8PDw8PAE8CyABQQFqIQFBrgEhAgz0AQsgAUEBaiEBQa8BIQIM8wELQccBIQIgASAERg2LAiADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw04IABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyMAgsgA0EANgIAIAZBAWohAUEqDDgLIAEgBEYEQEHGASECDIsCCyABLQAAQdAARw04IAFBAWohAUElDDcLQcUBIQIgASAERg2JAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGB1QBqLQAARw02IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyKAgsgA0EANgIAIAZBAWohAUEODDYLIAEgBEYEQEHEASECDIkCCyABLQAAQcUARw02IAFBAWohAUGrASECDO8BCyABIARGBEBBwwEhAgyIAgsCQAJAAkACQCABLQAAQcIAaw4PAAECOTk5OTk5OTk5OTkDOQsgAUEBaiEBQacBIQIM8QELIAFBAWohAUGoASECDPABCyABQQFqIQFBqQEhAgzvAQsgAUEBaiEBQaoBIQIM7gELQcIBIQIgASAERg2GAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEH+1ABqLQAARw0zIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyHAgsgA0EANgIAIAZBAWohAUEUDDMLQcEBIQIgASAERg2FAiADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANA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BTYCAAzsAQsgA0EANgIAIAZBAWohAUEXDBgLQaYBIQIgASAERg3qASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHB1ABqLQAARw0XIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzrAQsgA0EANgIAIAZBAWohAUEYDBcLIAEgBEYEQEGlASECDOoBCwJAAkAgAS0AAEHJAGsOBwAZGRkZGQEZCyABQQFqIQFBiwEhAgzRAQsgAUEBaiEBQYwBIQIM0AELQaQBIQIgASAERg3oASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw0VIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzpAQsgA0EANgIAIAZBAWohAUEJDBULQaMBIQIgASAERg3nASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw0UIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzoAQsgA0EANgIAIAZBAWohAUEfDBQLQaIBIQIgASAERg3mASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEG+1ABqLQAARw0TIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAznAQsgA0EANgIAIAZBAWohAUECDBMLQaEBIQIgASAERg3lASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYDQCABLQAAIABBvNQAai0AAEcNESAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5QELIAEgBEYEQEGgASECDOUBC0EBIAEtAABB3wBHDREaIAFBAWohAUGHASECDMsBCyADQQA2AgAgBkEBaiEBQYgBIQIMygELQZ8BIQIgASAERg3iASADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw0PIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzjAQsgA0EANgIAIAZBAWohAUEpDA8LQZ4BIQIgASAERg3hASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEG41ABqLQAARw0OIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAziAQsgA0EANgIAIAZBAWohAUEtDA4LIAEgBEYEQEGdASECDOEBCyABLQAAQcUARw0OIAFBAWohAUGEASECDMcBCyABIARGBEBBnAEhAgzgAQsCQAJAIAEtAABBzABrDggADw8PDw8PAQ8LIAFBAWohAUGCASECDMcBCyABQQFqIQFBgwEhAgzGAQtBmwEhAiABIARGDd4BIAMoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQbPUAGotAABHDQsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN8BCyADQQA2AgAgBkEBaiEBQSMMCwtBmgEhAiABIARGDd0BIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDUAGotAABHDQogAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN4BCyADQQA2AgAgBkEBaiEBQQAMCgsgASAERgRAQZkBIQIM3QELAkACQCABLQAAQcgAaw4IAAwMDAwMDAEMCyABQQFqIQFB/QAhAgzEAQsgAUEBaiEBQYABIQIMwwELIAEgBEYEQEGYASECDNwBCwJAAkAgAS0AAEHOAGsOAwALAQsLIAFBAWohAUH+ACECDMMBCyABQQFqIQFB/wAhAgzCAQsgASAERgRAQZcBIQIM2wELIAEtAABB2QBHDQggAUEBaiEBQQgMBwtBlgEhAiABIARGDdkBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQazUAGotAABHDQYgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNoBCyADQQA2AgAgBkEBaiEBQQUMBgtBlQEhAiABIARGDdgBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQabUAGotAABHDQUgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNkBCyADQQA2AgAgBkEBaiEBQRYMBQtBlAEhAiABIARGDdcBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDQQgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNgBCyADQQA2AgAgBkEBaiEBQRAMBAsgASAERgRAQZMBIQIM1wELAkACQCABLQAAQcMAaw4MAAYGBgYGBgYGBgYBBgsgAUEBaiEBQfkAIQIMvgELIAFBAWohAUH6ACECDL0BC0GSASECIAEgBEYN1QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBoNQAai0AAEcNAiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1gELIANBADYCACAGQQFqIQFBJAwCCyADQQA2AgAMAgsgASAERgRAQZEBIQIM1AELIAEtAABBzABHDQEgAUEBaiEBQRMLOgApIAMoAgQhACADQQA2AgQgAyAAIAEQLiIADQIMAQtBACECIANBADYCHCADIAE2AhQgA0H+HzYCECADQQY2AgwM0QELQfgAIQIMtwELIANBkAE2AhwgAyABNgIUIAMgADYCDEEAIQIMzwELQQAhAAJAIAMoAjgiAkUNACACKAJAIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GCDzYCECADQSA2AgxBACECDM4BC0H3ACECDLQBCyADQY8BNgIcIAMgATYCFCADQewbNgIQIANBFTYCDEEAIQIMzAELIAEgBEYEQEGPASECDMwBCwJAIAEtAABBIEYEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQZsfNgIQIANBBjYCDEEAIQIMzAELQQIhAgyyAQsDQCABLQAAQSBHDQIgBCABQQFqIgFHDQALQY4BIQIMygELIAEgBEYEQEGNASECDMoBCwJAIAEtAABBCWsOBEoAAEoAC0H1ACECDLABCyADLQApQQVGBEBB9gAhAgywAQtB9AAhAgyvAQsgASAERgRAQYwBIQIMyAELIANBEDYCCCADIAE2AgQMCgsgASAERgRAQYsBIQIMxwELAkAgAS0AAEEJaw4ERwAARwALQfMAIQIMrQELIAEgBEcEQCADQRA2AgggAyABNgIEQfEAIQIMrQELQYoBIQIMxQELAkAgASAERwRAA0AgAS0AAEGg0ABqLQAAIgBBA0cEQAJAIABBAWsOAkkABAtB8AAhAgyvAQsgBCABQQFqIgFHDQALQYgBIQIMxgELQYgBIQIMxQELIANBADYCHCADIAE2AhQgA0HbIDYCECADQQc2AgxBACECDMQBCyABIARGBEBBiQEhAgzEAQsCQAJAAkAgAS0AAEGg0gBqLQAAQQFrDgNGAgABC0HyACECDKwBCyADQQA2AhwgAyABNgIUIANBtBI2AhAgA0EHNgIMQQAhAgzEAQtB6gAhAgyqAQsgASAERwRAIAFBAWohAUHvACECDKoBC0GHASECDMIBCyAEIAEiAEYEQEGGASECDMIBCyAALQAAIgFBL0YEQCAAQQFqIQFB7gAhAgypAQsgAUEJayICQRdLDQEgACEBQQEgAnRBm4CABHENQQwBCyAEIAEiAEYEQEGFASECDMEBCyAALQAAQS9HDQAgAEEBaiEBDAMLQQAhAiADQQA2AhwgAyAANgIUIANB2yA2AhAgA0EHNgIMDL8BCwJAAkACQAJAAkADQCABLQAAQaDOAGotAAAiAEEFRwRAAkACQCAAQQFrDghHBQYHCAAEAQgLQesAIQIMrQELIAFBAWohAUHtACECDKwBCyAEIAFBAWoiAUcNAAtBhAEhAgzDAQsgAUEBagwUCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDMEBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDMABCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDL8BCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy+AQsgASAERgRAQYMBIQIMvgELAkAgAS0AAEGgzgBqLQAAQQFrDgg+BAUGAAgCAwcLIAFBAWohAQtBAyECDKMBCyABQQFqDA0LQQAhAiADQQA2AhwgA0HREjYCECADQQc2AgwgAyABQQFqNgIUDLoBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDLkBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDLgBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDLcBCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy2AQtB7AAhAgycAQsgASAERgRAQYIBIQIMtQELIAFBAWoMAgsgASAERgRAQYEBIQIMtAELIAFBAWoMAQsgASAERg0BIAFBAWoLIQFBBCECDJgBC0GAASECDLABCwNAIAEtAABBoMwAai0AACIAQQJHBEAgAEEBRwRAQekAIQIMmQELDDELIAQgAUEBaiIBRw0AC0H/ACECDK8BCyABIARGBEBB/gAhAgyvAQsCQCABLQAAQQlrDjcvAwYvBAYGBgYGBgYGBgYGBgYGBgYGBgUGBgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYABgsgAUEBagshAUEFIQIMlAELIAFBAWoMBgsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgyrAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyqAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgypAQsgA0EANgIcIAMgATYCFCADQY0UNgIQIANBBzYCDEEAIQIMqAELAkACQAJAAkADQCABLQAAQaDKAGotAAAiAEEFRwRAAkAgAEEBaw4GLgMEBQYABgtB6AAhAgyUAQsgBCABQQFqIgFHDQALQf0AIQIMqwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMqgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMqQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMqAELIANBADYCHCADIAE2AhQgA0HkCDYCECADQQc2AgxBACECDKcBCyABIARGDQEgAUEBagshAUEGIQIMjAELQfwAIQIMpAELAkACQAJAAkADQCABLQAAQaDIAGotAAAiAEEFRwRAIABBAWsOBCkCAwQFCyAEIAFBAWoiAUcNAAtB+wAhAgynAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgymAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgylAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgykAQsgA0EANgIcIAMgATYCFCADQbwKNgIQIANBBzYCDEEAIQIMowELQc8AIQIMiQELQdEAIQIMiAELQecAIQIMhwELIAEgBEYEQEH6ACECDKABCwJAIAEtAABBCWsOBCAAACAACyABQQFqIQFB5gAhAgyGAQsgASAERgRAQfkAIQIMnwELAkAgAS0AAEEJaw4EHwAAHwALQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFBEBB4gEhAgyGAQsgAEEVRwRAIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDJ8BCyADQfgANgIcIAMgATYCFCADQeoaNgIQIANBFTYCDEEAIQIMngELIAEgBEcEQCADQQ02AgggAyABNgIEQeQAIQIMhQELQfcAIQIMnQELIAEgBEYEQEH2ACECDJ0BCwJAAkACQCABLQAAQcgAaw4LAAELCwsLCwsLCwILCyABQQFqIQFB3QAhAgyFAQsgAUEBaiEBQeAAIQIMhAELIAFBAWohAUHjACECDIMBC0H1ACECIAEgBEYNmwEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBtdUAai0AAEcNCCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMnAELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfQANgIcIAMgATYCFCADIAA2AgxBACECDJwBC0HiACECDIIBC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMnAELQeEAIQIMggELIANB8wA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyaAQsgAy0AKSIAQSNrQQtJDQkCQCAAQQZLDQBBASAAdEHKAHFFDQAMCgtBACECIANBADYCHCADIAE2AhQgA0HtCTYCECADQQg2AgwMmQELQfIAIQIgASAERg2YASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGz1QBqLQAARw0FIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAQsgAygCBCEAIANCADcDACADIAAgBkEBaiIBECsiAARAIANB8QA2AhwgAyABNgIUIAMgADYCDEEAIQIMmQELQd8AIQIMfwtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJkBC0HeACECDH8LIANB8AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyXAQsgAy0AKUEhRg0GIANBADYCHCADIAE2AhQgA0GRCjYCECADQQg2AgxBACECDJYBC0HvACECIAEgBEYNlQEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMlgELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgBFDQIgA0HtADYCHCADIAE2AhQgAyAANgIMQQAhAgyVAQsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNgAEgA0HuADYCHCADIAE2AhQgAyAANgIMQQAhAgyTAQtB3AAhAgx5C0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMkwELQdsAIQIMeQsgA0HsADYCHCADIAE2AhQgA0GAGzYCECADQRU2AgxBACECDJEBCyADLQApIgBBI0kNACAAQS5GDQAgA0EANgIcIAMgATYCFCADQckJNgIQIANBCDYCDEEAIQIMkAELQdoAIQIMdgsgASAERgRAQesAIQIMjwELAkAgAS0AAEEvRgRAIAFBAWohAQwBCyAD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ciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw==","base64"))})},3530:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.enumToMap=function(e,t=[],A=[]){const r=0===(t?.length??0),s=0===(A?.length??0);return Object.fromEntries(Object.entries(e).filter((([,e])=>"number"==typeof e&&(r||t.includes(e))&&(s||!A.includes(e)))))}},7467:(e,t,A)=>{"use strict";const{kClients:r}=A(257),s=A(3315),{kAgent:n,kMockAgentSet:i,kMockAgentGet:o,kDispatches:a,kIsMockActive:c,kNetConnect:g,kGetNetConnect:l,kOptions:h,kFactory:d,kMockAgentRegisterCallHistory:u,kMockAgentIsCallHistoryEnabled:E,kMockAgentAddCallHistoryLog:I,kMockAgentMockCallHistoryInstance:Q,kMockAgentAcceptsNonStandardSearchParameters:B,kMockCallHistoryAddLog:C,kIgnoreTrailingSlash:p}=A(3435),f=A(615),m=A(5846),{matchValue:y,normalizeSearchParams:D,buildAndValidateMockOptions:S}=A(991),{InvalidArgumentError:w,UndiciError:b}=A(4465),R=A(5497),N=A(164),{MockCallHistory:k}=A(4969);e.exports=class extends R{constructor(e={}){super(e);const t=S(e);if(this[g]=!0,this[c]=!0,this[E]=t.enableCallHistory??!1,this[B]=t.acceptNonStandardSearchParameters??!1,this[p]=t.ignoreTrailingSlash??!1,e?.agent&&"function"!=typeof e.agent.dispatch)throw new w("Argument opts.agent must implement Agent");const A=e?.agent?e.agent:new s(e);this[n]=A,this[r]=A[r],this[h]=t,this[E]&&this[u]()}get(e){const t=this[p]?e.replace(/\/$/,""):e;let A=this[o](t);return A||(A=this[d](t),this[i](t,A)),A}dispatch(e,t){this.get(e.origin),this[I](e);const A=this[B],r={...e};if(A&&r.path){const[e,t]=r.path.split("?"),s=D(t,A);r.path=`${e}?${s}`}return this[n].dispatch(r,t)}async close(){this.clearCallHistory(),await this[n].close(),this[r].clear()}deactivate(){this[c]=!1}activate(){this[c]=!0}enableNetConnect(e){if("string"==typeof e||"function"==typeof e||e instanceof RegExp)Array.isArray(this[g])?this[g].push(e):this[g]=[e];else{if("undefined"!=typeof e)throw new w("Unsupported matcher. Must be one of String|Function|RegExp.");this[g]=!0}}disableNetConnect(){this[g]=!1}enableCallHistory(){return this[E]=!0,this}disableCallHistory(){return this[E]=!1,this}getCallHistory(){return this[Q]}clearCallHistory(){void 0!==this[Q]&&this[Q].clear()}get isMockActive(){return this[c]}[u](){void 0===this[Q]&&(this[Q]=new k)}[I](e){this[E]&&(this[u](),this[Q][C](e))}[i](e,t){this[r].set(e,{count:0,dispatcher:t})}[d](e){const t=Object.assign({agent:this},this[h]);return this[h]&&1===this[h].connections?new f(e,t):new m(e,t)}[o](e){const t=this[r].get(e);if(t?.dispatcher)return t.dispatcher;if("string"!=typeof e){const t=this[d]("http://localhost:9999");return this[i](e,t),t}for(const[t,A]of Array.from(this[r]))if(A&&"string"!=typeof t&&y(t,e)){const t=this[d](e);return this[i](e,t),t[a]=A.dispatcher[a],t}}[l](){return this[g]}pendingInterceptors(){const e=this[r];return Array.from(e.entries()).flatMap((([e,t])=>t.dispatcher[a].map((t=>({...t,origin:e}))))).filter((({pending:e})=>e))}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new N}={}){const t=this.pendingInterceptors();if(0!==t.length)throw new b(1===t.length?`1 interceptor is pending:\n\n${e.format(t)}`.trim():`${t.length} interceptors are pending:\n\n${e.format(t)}`.trim())}}},4969:(e,t,A)=>{"use strict";const{kMockCallHistoryAddLog:r}=A(3435),{InvalidArgumentError:s}=A(4465);function n(e,t,A,r){switch(t.operator){case"OR":return r.push(...A(e)),r;case"AND":return A.call({logs:r},e);default:throw new s("options.operator must to be a case insensitive string equal to 'OR' or 'AND'")}}function i(e={}){const t={};if("operator"in e){if("string"!=typeof e.operator||"OR"!==e.operator.toUpperCase()&&"AND"!==e.operator.toUpperCase())throw new s("options.operator must to be a case insensitive string equal to 'OR' or 'AND'");return{...t,operator:e.operator.toUpperCase()}}return t}function o(e){return t=>{if("string"==typeof t||null==t)return this.logs.filter((A=>A[e]===t));if(t instanceof RegExp)return this.logs.filter((A=>t.test(A[e])));throw new s(`${e} parameter should be one of string, regexp, undefined or null`)}}class a{constructor(e={}){this.body=e.body,this.headers=e.headers,this.method=e.method;const t=function(e){try{const t=new URL(e.path,e.origin);return 0!==t.search.length||(t.search=new URLSearchParams(e.query).toString()),t}catch(e){throw new s("An error occurred when computing MockCallHistoryLog.url",{cause:e})}}(e);this.fullUrl=t.toString(),this.origin=t.origin,this.path=t.pathname,this.searchParams=Object.fromEntries(t.searchParams),this.protocol=t.protocol,this.host=t.host,this.port=t.port,this.hash=t.hash}toMap(){return new Map([["protocol",this.protocol],["host",this.host],["port",this.port],["origin",this.origin],["path",this.path],["hash",this.hash],["searchParams",this.searchParams],["fullUrl",this.fullUrl],["method",this.method],["body",this.body],["headers",this.headers]])}toString(){const e="->",t="|";let A="";return this.toMap().forEach(((r,s)=>{"string"!=typeof r&&null!=r||(A=`${A}${s}${e}${r}${t}`),("object"==typeof r&&null!==r||Array.isArray(r))&&(A=`${A}${s}${e}${JSON.stringify(r)}${t}`)})),A.slice(0,-1)}}class c{logs=[];calls(){return this.logs}firstCall(){return this.logs.at(0)}lastCall(){return this.logs.at(-1)}nthCall(e){if("number"!=typeof e)throw new s("nthCall must be called with a number");if(!Number.isInteger(e))throw new s("nthCall must be called with an integer");if(1!==Math.sign(e))throw new s("nthCall must be called with a positive value. use firstCall or lastCall instead");return this.logs.at(e-1)}filterCalls(e,t){if(0===this.logs.length)return this.logs;if("function"==typeof e)return this.logs.filter(e);if(e instanceof RegExp)return this.logs.filter((t=>e.test(t.toString())));if("object"==typeof e&&null!==e){if(0===Object.keys(e).length)return this.logs;const A={operator:"OR",...i(t)};let r=[];"protocol"in e&&(r=n(e.protocol,A,this.filterCallsByProtocol,r)),"host"in e&&(r=n(e.host,A,this.filterCallsByHost,r)),"port"in e&&(r=n(e.port,A,this.filterCallsByPort,r)),"origin"in e&&(r=n(e.origin,A,this.filterCallsByOrigin,r)),"path"in e&&(r=n(e.path,A,this.filterCallsByPath,r)),"hash"in e&&(r=n(e.hash,A,this.filterCallsByHash,r)),"fullUrl"in e&&(r=n(e.fullUrl,A,this.filterCallsByFullUrl,r)),"method"in e&&(r=n(e.method,A,this.filterCallsByMethod,r));return[...new Set(r)]}throw new s("criteria parameter should be one of function, regexp, or object")}filterCallsByProtocol=o.call(this,"protocol");filterCallsByHost=o.call(this,"host");filterCallsByPort=o.call(this,"port");filterCallsByOrigin=o.call(this,"origin");filterCallsByPath=o.call(this,"path");filterCallsByHash=o.call(this,"hash");filterCallsByFullUrl=o.call(this,"fullUrl");filterCallsByMethod=o.call(this,"method");clear(){this.logs=[]}[r](e){const t=new a(e);return this.logs.push(t),t}*[Symbol.iterator](){for(const e of this.calls())yield e}}e.exports.MockCallHistory=c,e.exports.MockCallHistoryLog=a},615:(e,t,A)=>{"use strict";const{promisify:r}=A(7975),s=A(1167),{buildMockDispatch:n}=A(991),{kDispatches:i,kMockAgent:o,kClose:a,kOriginalClose:c,kOrigin:g,kOriginalDispatch:l,kConnected:h,kIgnoreTrailingSlash:d}=A(3435),{MockInterceptor:u}=A(193),E=A(257),{InvalidArgumentError:I}=A(4465);class Q extends s{constructor(e,t){if(!t||!t.agent||"function"!=typeof t.agent.dispatch)throw new I("Argument opts.agent must implement Agent");super(e,t),this[o]=t.agent,this[g]=e,this[d]=t.ignoreTrailingSlash??!1,this[i]=[],this[h]=1,this[l]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=n.call(this),this.close=this[a]}get[E.kConnected](){return this[h]}intercept(e){return new u(e&&{ignoreTrailingSlash:this[d],...e},this[i])}cleanMocks(){this[i]=[]}async[a](){await r(this[c])(),this[h]=0,this[o][E.kClients].delete(this[g])}}e.exports=Q},3123:(e,t,A)=>{"use strict";const{UndiciError:r}=A(4465),s=Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED");class n extends r{constructor(e){super(e),this.name="MockNotMatchedError",this.message=e||"The request does not match any registered mock dispatches",this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}static[Symbol.hasInstance](e){return e&&!0===e[s]}get[s](){return!0}}e.exports={MockNotMatchedError:n}},193:(e,t,A)=>{"use strict";const{getResponseData:r,buildKey:s,addMockDispatch:n}=A(991),{kDispatches:i,kDispatchKey:o,kDefaultHeaders:a,kDefaultTrailers:c,kContentLength:g,kMockDispatch:l,kIgnoreTrailingSlash:h}=A(3435),{InvalidArgumentError:d}=A(4465),{serializePathWithQuery:u}=A(2858);class E{constructor(e){this[l]=e}delay(e){if("number"!=typeof e||!Number.isInteger(e)||e<=0)throw new d("waitInMs must be a valid integer > 0");return this[l].delay=e,this}persist(){return this[l].persist=!0,this}times(e){if("number"!=typeof e||!Number.isInteger(e)||e<=0)throw new d("repeatTimes must be a valid integer > 0");return this[l].times=e,this}}e.exports.MockInterceptor=class{constructor(e,t){if("object"!=typeof e)throw new d("opts must be an object");if("undefined"==typeof e.path)throw new d("opts.path must be defined");if("undefined"==typeof e.method&&(e.method="GET"),"string"==typeof e.path)if(e.query)e.path=u(e.path,e.query);else{const t=new URL(e.path,"data://");e.path=t.pathname+t.search}"string"==typeof e.method&&(e.method=e.method.toUpperCase()),this[o]=s(e),this[i]=t,this[h]=e.ignoreTrailingSlash??!1,this[a]={},this[c]={},this[g]=!1}createMockScopeDispatchData({statusCode:e,data:t,responseOptions:A}){const s=r(t),n=this[g]?{"content-length":s.length}:{};return{statusCode:e,data:t,headers:{...this[a],...n,...A.headers},trailers:{...this[c],...A.trailers}}}validateReplyParameters(e){if("undefined"==typeof e.statusCode)throw new d("statusCode must be defined");if("object"!=typeof e.responseOptions||null===e.responseOptions)throw new d("responseOptions must be an object")}reply(e){if("function"==typeof e){const t=t=>{const A=e(t);if("object"!=typeof A||null===A)throw new d("reply options callback must return an object");const r={data:"",responseOptions:{},...A};return this.validateReplyParameters(r),{...this.createMockScopeDispatchData(r)}},A=n(this[i],this[o],t,{ignoreTrailingSlash:this[h]});return new E(A)}const t={statusCode:e,data:void 0===arguments[1]?"":arguments[1],responseOptions:void 0===arguments[2]?{}:arguments[2]};this.validateReplyParameters(t);const A=this.createMockScopeDispatchData(t),r=n(this[i],this[o],A,{ignoreTrailingSlash:this[h]});return new E(r)}replyWithError(e){if("undefined"==typeof e)throw new d("error must be defined");const t=n(this[i],this[o],{error:e},{ignoreTrailingSlash:this[h]});return new E(t)}defaultReplyHeaders(e){if("undefined"==typeof e)throw new d("headers must be defined");return this[a]=e,this}defaultReplyTrailers(e){if("undefined"==typeof e)throw new d("trailers must be defined");return this[c]=e,this}replyContentLength(){return this[g]=!0,this}},e.exports.MockScope=E},5846:(e,t,A)=>{"use strict";const{promisify:r}=A(7975),s=A(8542),{buildMockDispatch:n}=A(991),{kDispatches:i,kMockAgent:o,kClose:a,kOriginalClose:c,kOrigin:g,kOriginalDispatch:l,kConnected:h,kIgnoreTrailingSlash:d}=A(3435),{MockInterceptor:u}=A(193),E=A(257),{InvalidArgumentError:I}=A(4465);class Q extends s{constructor(e,t){if(!t||!t.agent||"function"!=typeof t.agent.dispatch)throw new I("Argument opts.agent must implement Agent");super(e,t),this[o]=t.agent,this[g]=e,this[d]=t.ignoreTrailingSlash??!1,this[i]=[],this[h]=1,this[l]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=n.call(this),this.close=this[a]}get[E.kConnected](){return this[h]}intercept(e){return new u(e&&{ignoreTrailingSlash:this[d],...e},this[i])}cleanMocks(){this[i]=[]}async[a](){await r(this[c])(),this[h]=0,this[o][E.kClients].delete(this[g])}}e.exports=Q},3435:e=>{"use strict";e.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOriginalDispatch:Symbol("original dispatch"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected"),kIgnoreTrailingSlash:Symbol("ignore trailing slash"),kMockAgentMockCallHistoryInstance:Symbol("mock agent mock call history name"),kMockAgentRegisterCallHistory:Symbol("mock agent register mock call history"),kMockAgentAddCallHistoryLog:Symbol("mock agent add call history log"),kMockAgentIsCallHistoryEnabled:Symbol("mock agent is call history enabled"),kMockAgentAcceptsNonStandardSearchParameters:Symbol("mock agent accepts non standard search parameters"),kMockCallHistoryAddLog:Symbol("mock call history add log")}},991:(e,t,A)=>{"use strict";const{MockNotMatchedError:r}=A(3123),{kDispatches:s,kMockAgent:n,kOriginalDispatch:i,kOrigin:o,kGetNetConnect:a}=A(3435),{serializePathWithQuery:c}=A(2858),{STATUS_CODES:g}=A(7067),{types:{isPromise:l}}=A(7975),{InvalidArgumentError:h}=A(4465);function d(e,t){return"string"==typeof e?e===t:e instanceof RegExp?e.test(t):"function"==typeof e&&!0===e(t)}function u(e){return Object.fromEntries(Object.entries(e).map((([e,t])=>[e.toLocaleLowerCase(),t])))}function E(e,t){if(!Array.isArray(e))return"function"==typeof e.get?e.get(t):u(e)[t.toLocaleLowerCase()];for(let A=0;A<e.length;A+=2)if(e[A].toLocaleLowerCase()===t.toLocaleLowerCase())return e[A+1]}function I(e){const t=e.slice(),A=[];for(let e=0;e<t.length;e+=2)A.push([t[e],t[e+1]]);return Object.fromEntries(A)}function Q(e,t){if("function"==typeof e.headers)return Array.isArray(t)&&(t=I(t)),e.headers(t?u(t):{});if("undefined"==typeof e.headers)return!0;if("object"!=typeof t||"object"!=typeof e.headers)return!1;for(const[A,r]of Object.entries(e.headers)){if(!d(r,E(t,A)))return!1}return!0}function B(e){if("string"!=typeof e)return e;const t=e.split("?",3);if(2!==t.length)return e;const A=new URLSearchParams(t.pop());return A.sort(),[...t,A.toString()].join("?")}function C(e){return Buffer.isBuffer(e)||e instanceof Uint8Array||e instanceof ArrayBuffer?e:"object"==typeof e?JSON.stringify(e):e?e.toString():""}function p(e,t){const A=t.query?c(t.path,t.query):t.path,s="string"==typeof A?B(A):A,n=m(s);let i=e.filter((({consumed:e})=>!e)).filter((({path:e,ignoreTrailingSlash:t})=>t?d(m(B(e)),n):d(B(e),s)));if(0===i.length)throw new r(`Mock dispatch not matched for path '${s}'`);if(i=i.filter((({method:e})=>d(e,t.method))),0===i.length)throw new r(`Mock dispatch not matched for method '${t.method}' on path '${s}'`);if(i=i.filter((({body:e})=>"undefined"==typeof e||d(e,t.body))),0===i.length)throw new r(`Mock dispatch not matched for body '${t.body}' on path '${s}'`);if(i=i.filter((e=>Q(e,t.headers))),0===i.length){const e="object"==typeof t.headers?JSON.stringify(t.headers):t.headers;throw new r(`Mock dispatch not matched for headers '${e}' on path '${s}'`)}return i[0]}function f(e,t){const A=e.findIndex((e=>!!e.consumed&&function(e,{path:t,method:A,body:r,headers:s}){const n=d(e.path,t),i=d(e.method,A),o="undefined"==typeof e.body||d(e.body,r),a=Q(e,s);return n&&i&&o&&a}(e,t)));-1!==A&&e.splice(A,1)}function m(e){for(;e.endsWith("/");)e=e.slice(0,-1);return 0===e.length&&(e="/"),e}function y(e){const{path:t,method:A,body:r,headers:s,query:n}=e;return{path:t,method:A,body:r,headers:s,query:n}}function D(e){const t=Object.keys(e),A=[];for(let r=0;r<t.length;++r){const s=t[r],n=e[s],i=Buffer.from(`${s}`);if(Array.isArray(n))for(let e=0;e<n.length;++e)A.push(i,Buffer.from(`${n[e]}`));else A.push(i,Buffer.from(`${n}`))}return A}function S(e){return g[e]||"unknown"}function w(e,t){const A=y(e),r=p(this[s],A);r.timesInvoked++,r.data.callback&&(r.data={...r.data,...r.data.callback(e)});const{data:{statusCode:n,data:i,headers:o,trailers:a,error:c},delay:g,persist:h}=r,{timesInvoked:d,times:u}=r;if(r.consumed=!h&&d>=u,r.pending=d<u,null!==c)return f(this[s],A),t.onError(c),!0;function E(r,s=i){const c=Array.isArray(e.headers)?I(e.headers):e.headers,g="function"==typeof s?s({...e,headers:c}):s;if(l(g))return void g.then((e=>E(r,e)));const h=C(g),d=D(o),u=D(a);t.onConnect?.((e=>t.onError(e)),null),t.onHeaders?.(n,d,Q,S(n)),t.onData?.(Buffer.from(h)),t.onComplete?.(u),f(r,A)}function Q(){}return"number"==typeof g&&g>0?setTimeout((()=>{E(this[s])}),g):E(this[s]),!0}function b(e,t){const A=new URL(t);return!0===e||!(!Array.isArray(e)||!e.some((e=>d(e,A.host))))}e.exports={getResponseData:C,getMockDispatch:p,addMockDispatch:function(e,t,A,r){const s={...{timesInvoked:0,times:1,persist:!1,consumed:!1,...r},...t,pending:!0,data:{error:null,..."function"==typeof A?{callback:A}:{...A}}};return e.push(s),s},deleteMockDispatch:f,buildKey:y,generateKeyValues:D,matchValue:d,getResponse:async function(e){const t=[];for await(const A of e)t.push(A);return Buffer.concat(t).toString("utf8")},getStatusText:S,mockDispatch:w,buildMockDispatch:function(){const e=this[n],t=this[o],A=this[i];return function(s,n){if(e.isMockActive)try{w.call(this,s,n)}catch(i){if("UND_MOCK_ERR_MOCK_NOT_MATCHED"!==i.code)throw i;{const o=e[a]();if(!1===o)throw new r(`${i.message}: subsequent request to origin ${t} was not allowed (net.connect disabled)`);if(!b(o,t))throw new r(`${i.message}: subsequent request to origin ${t} was not allowed (net.connect is not enabled for this origin)`);A.call(this,s,n)}}else A.call(this,s,n)}},checkNetConnect:b,buildAndValidateMockOptions:function(e){const{agent:t,...A}=e;if("enableCallHistory"in A&&"boolean"!=typeof A.enableCallHistory)throw new h("options.enableCallHistory must to be a boolean");if("acceptNonStandardSearchParameters"in A&&"boolean"!=typeof A.acceptNonStandardSearchParameters)throw new h("options.acceptNonStandardSearchParameters must to be a boolean");if("ignoreTrailingSlash"in A&&"boolean"!=typeof A.ignoreTrailingSlash)throw new h("options.ignoreTrailingSlash must to be a boolean");return A},getHeaderByName:E,buildHeadersFromArray:I,normalizeSearchParams:function(e){if("string"!=typeof e)return e;const t=new URLSearchParams(e),A=new URLSearchParams;for(let[e,r]of t.entries()){e=e.replace("[]","");if(/^(['"]).*\1$/.test(r))A.append(e,r);else if(r.includes(",")){const t=r.split(",");for(const r of t)A.append(e,r)}else A.append(e,r)}return A}}},164:(e,t,A)=>{"use strict";const{Transform:r}=A(7075),{Console:s}=A(7540),n=process.versions.icu?"✅":"Y ",i=process.versions.icu?"❌":"N ";e.exports=class{constructor({disableColors:e}={}){this.transform=new r({transform(e,t,A){A(null,e)}}),this.logger=new s({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){const t=e.map((({method:e,path:t,data:{statusCode:A},persist:r,times:s,timesInvoked:o,origin:a})=>({Method:e,Origin:a,Path:t,"Status code":A,Persistent:r?n:i,Invocations:o,Remaining:r?1/0:s-o})));return this.logger.table(t),this.transform.read().toString()}}},1313:(e,t,A)=>{"use strict";const r=A(3315),s=A(7467),{SnapshotRecorder:n}=A(6632),i=A(832),{InvalidArgumentError:o,UndiciError:a}=A(4465),{validateSnapshotMode:c}=A(5505),g=Symbol("kSnapshotRecorder"),l=Symbol("kSnapshotMode"),h=Symbol("kSnapshotPath"),d=Symbol("kSnapshotLoaded"),u=Symbol("kRealAgent");let E=!1;e.exports=class extends s{constructor(e={}){E||(process.emitWarning("SnapshotAgent is experimental and subject to change","ExperimentalWarning"),E=!0);const{mode:t="record",snapshotPath:A=null,...s}=e;if(super(s),c(t),("playback"===t||"update"===t)&&!A)throw new o(`snapshotPath is required when mode is '${t}'`);this[l]=t,this[h]=A,this[g]=new n({snapshotPath:this[h],mode:this[l],maxSnapshots:e.maxSnapshots,autoFlush:e.autoFlush,flushInterval:e.flushInterval,matchHeaders:e.matchHeaders,ignoreHeaders:e.ignoreHeaders,excludeHeaders:e.excludeHeaders,matchBody:e.matchBody,matchQuery:e.matchQuery,caseSensitive:e.caseSensitive,shouldRecord:e.shouldRecord,shouldPlayback:e.shouldPlayback,excludeUrls:e.excludeUrls}),this[d]=!1,"record"!==this[l]&&"update"!==this[l]||(this[u]=new r(e)),"playback"!==this[l]&&"update"!==this[l]||!this[h]||this.loadSnapshots().catch((()=>{}))}dispatch(e,t){t=i.wrap(t);const A=this[l];if("playback"===A||"update"===A){if(!this[d])return this.#me(e,t);const r=this[g].findSnapshot(e);if(r)return this.#ye(r,t);if("update"===A)return this.#De(e,t);{const A=new a(`No snapshot found for ${e.method||"GET"} ${e.path}`);if(t.onError)return void t.onError(A);throw A}}if("record"===A)return this.#De(e,t)}async#me(e,t){return await this.loadSnapshots(),this.dispatch(e,t)}#De(e,t){const A={statusCode:null,headers:{},trailers:{},body:[]},r=this,s={onRequestStart(e,A){return t.onRequestStart(e,{...A,history:this.history})},onRequestUpgrade:(e,A,r,s)=>t.onRequestUpgrade(e,A,r,s),onResponseStart:(e,r,s,n)=>(A.statusCode=r,A.headers=s,t.onResponseStart(e,r,s,n)),onResponseData:(e,r)=>(A.body.push(r),t.onResponseData(e,r)),onResponseEnd(s,n){A.trailers=n;const i=Buffer.concat(A.body);r[g].record(e,{statusCode:A.statusCode,headers:A.headers,body:i,trailers:A.trailers}).then((()=>{t.onResponseEnd(s,n)})).catch((e=>{t.onResponseError(s,e)}))}};return this[u].dispatch(e,s)}#ye(e,t){try{const{response:A}=e,r={pause(){},resume(){},abort(e){this.aborted=!0,this.reason=e},aborted:!1,paused:!1};t.onRequestStart(r),t.onResponseStart(r,A.statusCode,A.headers);const s=Buffer.from(A.body,"base64");t.onResponseData(r,s),t.onResponseEnd(r,A.trailers)}catch(e){t.onError?.(e)}}async loadSnapshots(e){await this[g].loadSnapshots(e||this[h]),this[d]=!0,"playback"===this[l]&&this.#Se()}async saveSnapshots(e){return this[g].saveSnapshots(e||this[h])}#Se(){for(const e of this[g].getSnapshots()){const{request:t,responses:A,response:r}=e,s=new URL(t.url),n=this.get(s.origin),i=A?A[0]:r;i&&n.intercept({path:s.pathname+s.search,method:t.method,headers:t.headers,body:t.body}).reply(i.statusCode,i.body,{headers:i.headers,trailers:i.trailers}).persist()}}getRecorder(){return this[g]}getMode(){return this[l]}clearSnapshots(){this[g].clear()}resetCallCounts(){this[g].resetCallCounts()}deleteSnapshot(e){return this[g].deleteSnapshot(e)}getSnapshotInfo(e){return this[g].getSnapshotInfo(e)}replaceSnapshots(e){this[g].replaceSnapshots(e)}async close(){await this[g].close(),await(this[u]?.close()),await super.close()}}},6632:(e,t,A)=>{"use strict";const{writeFile:r,readFile:s,mkdir:n}=A(1455),{dirname:i,resolve:o}=A(6760),{setTimeout:a,clearTimeout:c}=A(7997),{InvalidArgumentError:g,UndiciError:l}=A(4465),{hashId:h,isUrlExcludedFactory:d,normalizeHeaders:u,createHeaderFilters:E}=A(5505);function I(e,t,A={}){const r=new URL(e.path,e.origin),s=e._normalizedHeaders||u(e.headers);return e._normalizedHeaders||(e._normalizedHeaders=s),{method:e.method||"GET",url:!1!==A.matchQuery?r.toString():`${r.origin}${r.pathname}`,headers:Q(s,t,A),body:!1!==A.matchBody&&e.body?String(e.body):""}}function Q(e,t,A={}){if(!e||"object"!=typeof e)return{};const{caseSensitive:r=!1}=A,s={},{ignore:n,exclude:i,match:o}=t;for(const[t,A]of Object.entries(e)){const e=r?t:t.toLowerCase();i.has(e)||(n.has(e)||(0===o.size||o.has(e))&&(s[e]=A))}return s}function B(e,t,A={}){if(!e||"object"!=typeof e)return{};const{caseSensitive:r=!1}=A,s={},{exclude:n}=t;for(const[t,A]of Object.entries(e)){const e=r?t:t.toLowerCase();n.has(e)||(s[e]=A)}return s}function C(e){const t=[e.method,e.url];if(e.headers&&"object"==typeof e.headers){const A=Object.keys(e.headers).sort();for(const r of A){const A=Array.isArray(e.headers[r])?e.headers[r]:[e.headers[r]];t.push(r);for(const e of A.sort())t.push(String(e))}}t.push(e.body);const A=t.join("|");return h(A)}e.exports={SnapshotRecorder:class{#we;#be;#Re=new Map;#Ne;#ke=1/0;#Fe=!1;#Ue;constructor(e={}){this.#Ne=e.snapshotPath,this.#ke=e.maxSnapshots||1/0,this.#Fe=e.autoFlush||!1,this.flushInterval=e.flushInterval||3e4,this._flushTimer=null,this.matchOptions={matchHeaders:e.matchHeaders||[],ignoreHeaders:e.ignoreHeaders||[],excludeHeaders:e.excludeHeaders||[],matchBody:!1!==e.matchBody,matchQuery:!1!==e.matchQuery,caseSensitive:e.caseSensitive||!1},this.#Ue=E(this.matchOptions),this.shouldRecord=e.shouldRecord||(()=>!0),this.shouldPlayback=e.shouldPlayback||(()=>!0),this.#be=d(e.excludeUrls),this.#Fe&&this.#Ne&&this.#Me()}async record(e,t){if(!this.shouldRecord(e))return;const A=new URL(e.path,e.origin).toString();if(this.#be(A))return;const r=I(e,this.#Ue,this.matchOptions),s=C(r),n=u(t.headers),i={statusCode:t.statusCode,headers:B(n,this.#Ue,this.matchOptions),body:Buffer.isBuffer(t.body)?t.body.toString("base64"):Buffer.from(String(t.body||"")).toString("base64"),trailers:t.trailers};if(this.#Re.size>=this.#ke&&!this.#Re.has(s)){const e=this.#Re.keys().next().value;this.#Re.delete(e)}const o=this.#Re.get(s);o&&o.responses?(o.responses.push(i),o.timestamp=(new Date).toISOString()):this.#Re.set(s,{request:r,responses:[i],callCount:0,timestamp:(new Date).toISOString()}),this.#Fe&&this.#Ne&&this.#Te()}findSnapshot(e){if(!this.shouldPlayback(e))return;const t=new URL(e.path,e.origin).toString();if(this.#be(t))return;const A=C(I(e,this.#Ue,this.matchOptions)),r=this.#Re.get(A);if(!r)return;const s=r.callCount||0,n=Math.min(s,r.responses.length-1);return r.callCount=s+1,{...r,response:r.responses[n]}}async loadSnapshots(e){const t=e||this.#Ne;if(!t)throw new g("Snapshot path is required");try{const e=await s(o(t),"utf8"),A=JSON.parse(e);if(Array.isArray(A)){this.#Re.clear();for(const{hash:e,snapshot:t}of A)this.#Re.set(e,t)}else this.#Re=new Map(Object.entries(A))}catch(e){if("ENOENT"!==e.code)throw new l(`Failed to load snapshots from ${t}`,{cause:e});this.#Re.clear()}}async saveSnapshots(e){const t=e||this.#Ne;if(!t)throw new g("Snapshot path is required");const A=o(t);await n(i(A),{recursive:!0});const s=Array.from(this.#Re.entries()).map((([e,t])=>({hash:e,snapshot:t})));await r(A,JSON.stringify(s,null,2),{flush:!0})}clear(){this.#Re.clear()}getSnapshots(){return Array.from(this.#Re.values())}size(){return this.#Re.size}resetCallCounts(){for(const e of this.#Re.values())e.callCount=0}deleteSnapshot(e){const t=C(I(e,this.#Ue,this.matchOptions));return this.#Re.delete(t)}getSnapshotInfo(e){const t=C(I(e,this.#Ue,this.matchOptions)),A=this.#Re.get(t);return A?{hash:t,request:A.request,responseCount:A.responses?A.responses.length:A.response?1:0,callCount:A.callCount||0,timestamp:A.timestamp}:null}replaceSnapshots(e){if(this.#Re.clear(),Array.isArray(e))for(const{hash:t,snapshot:A}of e)this.#Re.set(t,A);else e&&"object"==typeof e&&(this.#Re=new Map(Object.entries(e)))}#Me(){return this.#Te()}#ve(){this.#we&&(c(this.#we),this.saveSnapshots().catch((()=>{})),this.#we=null)}#Te(){this.#we=a((()=>{this.saveSnapshots().catch((()=>{})),this.#Fe?this.#we?.refresh():this.#we=null}),1e3)}destroy(){this.#ve(),this.#we&&(c(this.#we),this.#we=null)}async close(){this.#Ne&&0!==this.#Re.size&&await this.saveSnapshots(),this.destroy()}},formatRequestKey:I,createRequestHash:C,filterHeadersForMatching:Q,filterHeadersForStorage:B,createHeaderFilters:E}},5505:(e,t,A)=>{"use strict";const{InvalidArgumentError:r}=A(4465);let s;try{s=A(7598)}catch{}const n=s?.hash?e=>s.hash("sha256",e,"base64url"):e=>Buffer.from(e).toString("base64url");function i(e){return Array.isArray(e)&&!(1&e.length)}const o=["record","playback","update"];e.exports={createHeaderFilters:function(e={}){const{ignoreHeaders:t=[],excludeHeaders:A=[],matchHeaders:r=[],caseSensitive:s=!1}=e;return{ignore:new Set(t.map((e=>s?e:e.toLowerCase()))),exclude:new Set(A.map((e=>s?e:e.toLowerCase()))),match:new Set(r.map((e=>s?e:e.toLowerCase())))}},hashId:n,isUndiciHeaders:i,normalizeHeaders:function(e){const t={};if(!e)return t;if(i(e)){for(let A=0;A<e.length;A+=2){const r=e[A],s=e[A+1];if(r&&void 0!==s){const e=Buffer.isBuffer(r)?r.toString():r,A=Buffer.isBuffer(s)?s.toString():s;t[e.toLowerCase()]=A}}return t}if(e&&"object"==typeof e)for(const[A,r]of Object.entries(e))A&&"string"==typeof A&&(t[A.toLowerCase()]=Array.isArray(r)?r.join(", "):String(r));return t},isUrlExcludedFactory:function(e=[]){return 0===e.length?()=>!1:function(t){let A;for(const r of e)if("string"==typeof r){if(A||(A=t.toLowerCase()),A.includes(r.toLowerCase()))return!0}else if(r instanceof RegExp&&r.test(t))return!0;return!1}},validateSnapshotMode:function(e){if(!o.includes(e))throw new r(`Invalid snapshot mode: ${e}. Must be one of: ${o.join(", ")}`)}}},9453:(e,t,A)=>{"use strict";const{safeHTTPMethods:r,pathHasQueryOrFragment:s}=A(2858),{serializePathWithQuery:n}=A(2858);e.exports={makeCacheKey:function(e){if(!e.origin)throw new Error("opts.origin is undefined");let t=e.path||"/";return e.query&&!s(e.path)&&(t=n(t,e.query)),{origin:e.origin.toString(),method:e.method,path:t,headers:e.headers}},normalizeHeaders:function(e){let t;if(null==e.headers)t={};else if("function"==typeof e.headers[Symbol.iterator]){t={};for(const A of e.headers){if(!Array.isArray(A))throw new Error("opts.headers is not a valid header map");const[e,r]=A;if("string"!=typeof e||"string"!=typeof r)throw new Error("opts.headers is not a valid header map");t[e.toLowerCase()]=r}}else{if("object"!=typeof e.headers)throw new Error("opts.headers is not an object");t={};for(const A of Object.keys(e.headers))t[A.toLowerCase()]=e.headers[A]}return t},assertCacheKey:function(e){if("object"!=typeof e)throw new TypeError("expected key to be object, got "+typeof e);for(const t of["origin","method","path"])if("string"!=typeof e[t])throw new TypeError(`expected key.${t} to be string, got ${typeof e[t]}`);if(void 0!==e.headers&&"object"!=typeof e.headers)throw new TypeError("expected headers to be object, got "+typeof e)},assertCacheValue:function(e){if("object"!=typeof e)throw new TypeError("expected value to be object, got "+typeof e);for(const t of["statusCode","cachedAt","staleAt","deleteAt"])if("number"!=typeof e[t])throw new TypeError(`expected value.${t} to be number, got ${typeof e[t]}`);if("string"!=typeof e.statusMessage)throw new TypeError("expected value.statusMessage to be string, got "+typeof e.statusMessage);if(null!=e.headers&&"object"!=typeof e.headers)throw new TypeError("expected value.rawHeaders to be object, got "+typeof e.headers);if(void 0!==e.vary&&"object"!=typeof e.vary)throw new TypeError("expected value.vary to be object, got "+typeof e.vary);if(void 0!==e.etag&&"string"!=typeof e.etag)throw new TypeError("expected value.etag to be string, got "+typeof e.etag)},parseCacheControlHeader:function(e){const t={};let A;if(Array.isArray(e)){A=[];for(const t of e)A.push(...t.split(","))}else A=e.split(",");for(let e=0;e<A.length;e++){const r=A[e].toLowerCase(),s=r.indexOf("=");let n,i;switch(-1!==s?(n=r.substring(0,s).trimStart(),i=r.substring(s+1)):n=r.trim(),n){case"min-fresh":case"max-stale":case"max-age":case"s-maxage":case"stale-while-revalidate":case"stale-if-error":{if(void 0===i||" "===i[0])continue;i.length>=2&&'"'===i[0]&&'"'===i[i.length-1]&&(i=i.substring(1,i.length-1));const e=parseInt(i,10);if(e!=e)continue;if("max-age"===n&&n in t&&t[n]>=e)continue;t[n]=e;break}case"private":case"no-cache":if(i){if('"'===i[0]){const r=[i.substring(1)];let s='"'===i[i.length-1];if(!s)for(let t=e+1;t<A.length;t++){const e=A[t],n=e.length;if(r.push(e.trim()),0!==n&&'"'===e[n-1]){s=!0;break}}if(s){let e=r[r.length-1];'"'===e[e.length-1]&&(e=e.substring(0,e.length-1),r[r.length-1]=e),t[n]=n in t?t[n].concat(r):r}}else t[n]=n in t?t[n].concat(i):[i];break}case"public":case"no-store":case"must-revalidate":case"proxy-revalidate":case"immutable":case"no-transform":case"must-understand":case"only-if-cached":if(i)continue;t[n]=!0;break;default:continue}}return t},parseVaryHeader:function(e,t){if("string"==typeof e&&e.includes("*"))return t;const A={},r="string"==typeof e?e.split(","):e;for(const e of r){const r=e.trim().toLowerCase();A[r]=t[r]??null}return A},isEtagUsable:function(e){return!(e.length<=2)&&('"'===e[0]&&'"'===e[e.length-1]?!('"'===e[1]||e.startsWith('"W/')):!(!e.startsWith('W/"')||'"'!==e[e.length-1])&&4!==e.length)},assertCacheMethods:function(e,t="CacheMethods"){if(!Array.isArray(e))throw new TypeError(`expected type of ${t} needs to be an array, got ${null===e?"null":typeof e}`);if(0===e.length)throw new TypeError(`${t} needs to have at least one method`);for(const A of e)if(!r.includes(A))throw new TypeError(`element of ${t}-array needs to be one of following values: ${r.join(", ")}, got ${A}`)},assertCacheStore:function(e,t="CacheStore"){if("object"!=typeof e||null===e)throw new TypeError(`expected type of ${t} to be a CacheStore, got ${null===e?"null":typeof e}`);for(const A of["get","createWriteStream","delete"])if("function"!=typeof e[A])throw new TypeError(`${t} needs to have a \`${A}()\` function`)}}},8851:e=>{"use strict";e.exports={parseHttpDate:function(e){switch(e[3]){case",":return function(e){if(29!==e.length||" "!==e[4]||" "!==e[7]||" "!==e[11]||" "!==e[16]||":"!==e[19]||":"!==e[22]||" "!==e[25]||"G"!==e[26]||"M"!==e[27]||"T"!==e[28])return;let t=-1;if("S"===e[0]&&"u"===e[1]&&"n"===e[2])t=0;else if("M"===e[0]&&"o"===e[1]&&"n"===e[2])t=1;else if("T"===e[0]&&"u"===e[1]&&"e"===e[2])t=2;else if("W"===e[0]&&"e"===e[1]&&"d"===e[2])t=3;else if("T"===e[0]&&"h"===e[1]&&"u"===e[2])t=4;else if("F"===e[0]&&"r"===e[1]&&"i"===e[2])t=5;else{if("S"!==e[0]||"a"!==e[1]||"t"!==e[2])return;t=6}let A=0;if("0"===e[5]){const t=e.charCodeAt(6);if(t<49||t>57)return;A=t-48}else{const t=e.charCodeAt(5);if(t<49||t>51)return;const r=e.charCodeAt(6);if(r<48||r>57)return;A=10*(t-48)+(r-48)}let r=-1;if("J"===e[8]&&"a"===e[9]&&"n"===e[10])r=0;else if("F"===e[8]&&"e"===e[9]&&"b"===e[10])r=1;else if("M"===e[8]&&"a"===e[9])if("r"===e[10])r=2;else{if("y"!==e[10])return;r=4}else if("J"===e[8])if("a"===e[9]&&"n"===e[10])r=0;else{if("u"!==e[9])return;if("n"===e[10])r=5;else{if("l"!==e[10])return;r=6}}else if("A"===e[8])if("p"===e[9]&&"r"===e[10])r=3;else{if("u"!==e[9]||"g"!==e[10])return;r=7}else if("S"===e[8]&&"e"===e[9]&&"p"===e[10])r=8;else if("O"===e[8]&&"c"===e[9]&&"t"===e[10])r=9;else if("N"===e[8]&&"o"===e[9]&&"v"===e[10])r=10;else{if("D"!==e[8]||"e"!==e[9]||"c"!==e[10])return;r=11}const s=e.charCodeAt(12);if(s<48||s>57)return;const n=e.charCodeAt(13);if(n<48||n>57)return;const i=e.charCodeAt(14);if(i<48||i>57)return;const o=e.charCodeAt(15);if(o<48||o>57)return;const a=1e3*(s-48)+100*(n-48)+10*(i-48)+(o-48);let c=0;if("0"===e[17]){const t=e.charCodeAt(18);if(t<48||t>57)return;c=t-48}else{const t=e.charCodeAt(17);if(t<48||t>50)return;const A=e.charCodeAt(18);if(A<48||A>57)return;if(50===t&&A>51)return;c=10*(t-48)+(A-48)}let g=0;if("0"===e[20]){const t=e.charCodeAt(21);if(t<48||t>57)return;g=t-48}else{const t=e.charCodeAt(20);if(t<48||t>53)return;const A=e.charCodeAt(21);if(A<48||A>57)return;g=10*(t-48)+(A-48)}let l=0;if("0"===e[23]){const t=e.charCodeAt(24);if(t<48||t>57)return;l=t-48}else{const t=e.charCodeAt(23);if(t<48||t>53)return;const A=e.charCodeAt(24);if(A<48||A>57)return;l=10*(t-48)+(A-48)}const h=new Date(Date.UTC(a,r,A,c,g,l));return h.getUTCDay()===t?h:void 0}(e);case" ":return function(e){if(24!==e.length||" "!==e[7]||" "!==e[10]||" "!==e[19])return;let t=-1;if("S"===e[0]&&"u"===e[1]&&"n"===e[2])t=0;else if("M"===e[0]&&"o"===e[1]&&"n"===e[2])t=1;else if("T"===e[0]&&"u"===e[1]&&"e"===e[2])t=2;else if("W"===e[0]&&"e"===e[1]&&"d"===e[2])t=3;else if("T"===e[0]&&"h"===e[1]&&"u"===e[2])t=4;else if("F"===e[0]&&"r"===e[1]&&"i"===e[2])t=5;else{if("S"!==e[0]||"a"!==e[1]||"t"!==e[2])return;t=6}let A=-1;if("J"===e[4]&&"a"===e[5]&&"n"===e[6])A=0;else if("F"===e[4]&&"e"===e[5]&&"b"===e[6])A=1;else if("M"===e[4]&&"a"===e[5])if("r"===e[6])A=2;else{if("y"!==e[6])return;A=4}else if("J"===e[4])if("a"===e[5]&&"n"===e[6])A=0;else{if("u"!==e[5])return;if("n"===e[6])A=5;else{if("l"!==e[6])return;A=6}}else if("A"===e[4])if("p"===e[5]&&"r"===e[6])A=3;else{if("u"!==e[5]||"g"!==e[6])return;A=7}else if("S"===e[4]&&"e"===e[5]&&"p"===e[6])A=8;else if("O"===e[4]&&"c"===e[5]&&"t"===e[6])A=9;else if("N"===e[4]&&"o"===e[5]&&"v"===e[6])A=10;else{if("D"!==e[4]||"e"!==e[5]||"c"!==e[6])return;A=11}let r=0;if(" "===e[8]){const t=e.charCodeAt(9);if(t<49||t>57)return;r=t-48}else{const t=e.charCodeAt(8);if(t<49||t>51)return;const A=e.charCodeAt(9);if(A<48||A>57)return;r=10*(t-48)+(A-48)}let s=0;if("0"===e[11]){const t=e.charCodeAt(12);if(t<48||t>57)return;s=t-48}else{const t=e.charCodeAt(11);if(t<48||t>50)return;const A=e.charCodeAt(12);if(A<48||A>57)return;if(50===t&&A>51)return;s=10*(t-48)+(A-48)}let n=0;if("0"===e[14]){const t=e.charCodeAt(15);if(t<48||t>57)return;n=t-48}else{const t=e.charCodeAt(14);if(t<48||t>53)return;const A=e.charCodeAt(15);if(A<48||A>57)return;n=10*(t-48)+(A-48)}let i=0;if("0"===e[17]){const t=e.charCodeAt(18);if(t<48||t>57)return;i=t-48}else{const t=e.charCodeAt(17);if(t<48||t>53)return;const A=e.charCodeAt(18);if(A<48||A>57)return;i=10*(t-48)+(A-48)}const o=e.charCodeAt(20);if(o<48||o>57)return;const a=e.charCodeAt(21);if(a<48||a>57)return;const c=e.charCodeAt(22);if(c<48||c>57)return;const g=e.charCodeAt(23);if(g<48||g>57)return;const l=1e3*(o-48)+100*(a-48)+10*(c-48)+(g-48),h=new Date(Date.UTC(l,A,r,s,n,i));return h.getUTCDay()===t?h:void 0}(e);default:return function(e){let t=-1,A=-1;if("S"===e[0])"u"===e[1]&&"n"===e[2]&&"d"===e[3]&&"a"===e[4]&&"y"===e[5]?(A=0,t=6):"a"===e[1]&&"t"===e[2]&&"u"===e[3]&&"r"===e[4]&&"d"===e[5]&&"a"===e[6]&&"y"===e[7]&&(A=6,t=8);else if("M"===e[0]&&"o"===e[1]&&"n"===e[2]&&"d"===e[3]&&"a"===e[4]&&"y"===e[5])A=1,t=6;else if("T"===e[0])"u"===e[1]&&"e"===e[2]&&"s"===e[3]&&"d"===e[4]&&"a"===e[5]&&"y"===e[6]?(A=2,t=7):"h"===e[1]&&"u"===e[2]&&"r"===e[3]&&"s"===e[4]&&"d"===e[5]&&"a"===e[6]&&"y"===e[7]&&(A=4,t=8);else if("W"===e[0]&&"e"===e[1]&&"d"===e[2]&&"n"===e[3]&&"e"===e[4]&&"s"===e[5]&&"d"===e[6]&&"a"===e[7]&&"y"===e[8])A=3,t=9;else{if("F"!==e[0]||"r"!==e[1]||"i"!==e[2]||"d"!==e[3]||"a"!==e[4]||"y"!==e[5])return;A=5,t=6}if(","!==e[t]||e.length-t-1!=23||" "!==e[t+1]||"-"!==e[t+4]||"-"!==e[t+8]||" "!==e[t+11]||":"!==e[t+14]||":"!==e[t+17]||" "!==e[t+20]||"G"!==e[t+21]||"M"!==e[t+22]||"T"!==e[t+23])return;let r=0;if("0"===e[t+2]){const A=e.charCodeAt(t+3);if(A<49||A>57)return;r=A-48}else{const A=e.charCodeAt(t+2);if(A<49||A>51)return;const s=e.charCodeAt(t+3);if(s<48||s>57)return;r=10*(A-48)+(s-48)}let s=-1;if("J"===e[t+5]&&"a"===e[t+6]&&"n"===e[t+7])s=0;else if("F"===e[t+5]&&"e"===e[t+6]&&"b"===e[t+7])s=1;else if("M"===e[t+5]&&"a"===e[t+6]&&"r"===e[t+7])s=2;else if("A"===e[t+5]&&"p"===e[t+6]&&"r"===e[t+7])s=3;else if("M"===e[t+5]&&"a"===e[t+6]&&"y"===e[t+7])s=4;else if("J"===e[t+5]&&"u"===e[t+6]&&"n"===e[t+7])s=5;else if("J"===e[t+5]&&"u"===e[t+6]&&"l"===e[t+7])s=6;else if("A"===e[t+5]&&"u"===e[t+6]&&"g"===e[t+7])s=7;else if("S"===e[t+5]&&"e"===e[t+6]&&"p"===e[t+7])s=8;else if("O"===e[t+5]&&"c"===e[t+6]&&"t"===e[t+7])s=9;else if("N"===e[t+5]&&"o"===e[t+6]&&"v"===e[t+7])s=10;else{if("D"!==e[t+5]||"e"!==e[t+6]||"c"!==e[t+7])return;s=11}const n=e.charCodeAt(t+9);if(n<48||n>57)return;const i=e.charCodeAt(t+10);if(i<48||i>57)return;let o=10*(n-48)+(i-48);o+=o<70?2e3:1900;let a=0;if("0"===e[t+12]){const A=e.charCodeAt(t+13);if(A<48||A>57)return;a=A-48}else{const A=e.charCodeAt(t+12);if(A<48||A>50)return;const r=e.charCodeAt(t+13);if(r<48||r>57)return;if(50===A&&r>51)return;a=10*(A-48)+(r-48)}let c=0;if("0"===e[t+15]){const A=e.charCodeAt(t+16);if(A<48||A>57)return;c=A-48}else{const A=e.charCodeAt(t+15);if(A<48||A>53)return;const r=e.charCodeAt(t+16);if(r<48||r>57)return;c=10*(A-48)+(r-48)}let g=0;if("0"===e[t+18]){const A=e.charCodeAt(t+19);if(A<48||A>57)return;g=A-48}else{const A=e.charCodeAt(t+18);if(A<48||A>53)return;const r=e.charCodeAt(t+19);if(r<48||r>57)return;g=10*(A-48)+(r-48)}const l=new Date(Date.UTC(o,s,r,a,c,g));return l.getUTCDay()===A?l:void 0}(e)}}}},9250:e=>{"use strict";e.exports={createDeferredPromise:function(){let e,t;return{promise:new Promise(((A,r)=>{e=A,t=r})),resolve:e,reject:t}}}},4304:(e,t,A)=>{"use strict";const{kConnected:r,kPending:s,kRunning:n,kSize:i,kFree:o,kQueued:a}=A(257);e.exports={ClientStats:class{constructor(e){this.connected=e[r],this.pending=e[s],this.running=e[n],this.size=e[i]}},PoolStats:class{constructor(e){this.connected=e[r],this.free=e[o],this.pending=e[s],this.queued=e[a],this.running=e[n],this.size=e[i]}}}},3801:e=>{"use strict";let t=0;const A=1e3;let r;const s=Symbol("kFastTimer"),n=[];function i(){t+=499;let e=0,A=n.length;for(;e<A;){const r=n[e];0===r._state?(r._idleStart=t-499,r._state=1):1===r._state&&t>=r._idleStart+r._idleTimeout&&(r._state=-1,r._idleStart=-1,r._onTimeout(r._timerArg)),-1===r._state?(r._state=-2,0!=--A&&(n[e]=n[A])):++e}n.length=A,0!==n.length&&o()}function o(){r?.refresh?r.refresh():(clearTimeout(r),r=setTimeout(i,499),r?.unref())}class a{[s]=!0;_state=-2;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,t,A){this._onTimeout=e,this._idleTimeout=t,this._timerArg=A,this.refresh()}refresh(){-2===this._state&&n.push(this),r&&1!==n.length||o(),this._state=0}clear(){this._state=-1,this._idleStart=-1}}e.exports={setTimeout:(e,t,r)=>t<=A?setTimeout(e,t,r):new a(e,t,r),clearTimeout(e){e[s]?e.clear():clearTimeout(e)},setFastTimeout:(e,t,A)=>new a(e,t,A),clearFastTimeout(e){e.clear()},now:()=>t,tick(e=0){t+=e-A+1,i(),i()},reset(){t=0,n.length=0,clearTimeout(r),r=null},kFastTimer:s}},4420:(e,t,A)=>{"use strict";const r=A(4589),{kConstruct:s}=A(257),{urlEquals:n,getFieldValues:i}=A(3932),{kEnumerableProperty:o,isDisturbed:a}=A(2858),{webidl:c}=A(6097),{cloneResponse:g,fromInnerResponse:l,getResponseState:h}=A(4821),{Request:d,fromInnerRequest:u,getRequestState:E}=A(4609),{fetching:I}=A(7388),{urlIsHttpHttpsScheme:Q,readAllBytes:B}=A(6686),{createDeferredPromise:C}=A(9250);class p{#Le;constructor(){arguments[0]!==s&&c.illegalConstructor(),c.util.markAsUncloneable(this),this.#Le=arguments[1]}async match(e,t={}){c.brandCheck(this,p);const A="Cache.match";c.argumentLengthCheck(arguments,1,A),e=c.converters.RequestInfo(e),t=c.converters.CacheQueryOptions(t,A,"options");const r=this.#He(e,t,1);if(0!==r.length)return r[0]}async matchAll(e=void 0,t={}){c.brandCheck(this,p);return void 0!==e&&(e=c.converters.RequestInfo(e)),t=c.converters.CacheQueryOptions(t,"Cache.matchAll","options"),this.#He(e,t)}async add(e){c.brandCheck(this,p);c.argumentLengthCheck(arguments,1,"Cache.add");const t=[e=c.converters.RequestInfo(e)],A=this.addAll(t);return await A}async addAll(e){c.brandCheck(this,p);const t="Cache.addAll";c.argumentLengthCheck(arguments,1,t);const A=[],r=[];for(let A of e){if(void 0===A)throw c.errors.conversionFailed({prefix:t,argument:"Argument 1",types:["undefined is not allowed"]});if(A=c.converters.RequestInfo(A),"string"==typeof A)continue;const e=E(A);if(!Q(e.url)||"GET"!==e.method)throw c.errors.exception({header:t,message:"Expected http/s scheme when method is not GET."})}const s=[];for(const n of e){const e=E(new d(n));if(!Q(e.url))throw c.errors.exception({header:t,message:"Expected http/s scheme."});e.initiator="fetch",e.destination="subresource",r.push(e);const o=C();s.push(I({request:e,processResponse(e){if("error"===e.type||206===e.status||e.status<200||e.status>299)o.reject(c.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}));else if(e.headersList.contains("vary")){const t=i(e.headersList.get("vary"));for(const e of t)if("*"===e){o.reject(c.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(const e of s)e.abort();return}}},processResponseEndOfBody(e){e.aborted?o.reject(new DOMException("aborted","AbortError")):o.resolve(e)}})),A.push(o.promise)}const n=Promise.all(A),o=await n,a=[];let g=0;for(const e of o){const t={type:"put",request:r[g],response:e};a.push(t),g++}const l=C();let h=null;try{this.#Ye(a)}catch(e){h=e}return queueMicrotask((()=>{null===h?l.resolve(void 0):l.reject(h)})),l.promise}async put(e,t){c.brandCheck(this,p);const A="Cache.put";c.argumentLengthCheck(arguments,2,A),e=c.converters.RequestInfo(e),t=c.converters.Response(t,A,"response");let r=null;if(r=c.is.Request(e)?E(e):E(new d(e)),!Q(r.url)||"GET"!==r.method)throw c.errors.exception({header:A,message:"Expected an http/s scheme when method is not GET"});const s=h(t);if(206===s.status)throw c.errors.exception({header:A,message:"Got 206 status"});if(s.headersList.contains("vary")){const e=i(s.headersList.get("vary"));for(const t of e)if("*"===t)throw c.errors.exception({header:A,message:"Got * vary field value"})}if(s.body&&(a(s.body.stream)||s.body.stream.locked))throw c.errors.exception({header:A,message:"Response body is locked or disturbed"});const n=g(s),o=C();if(null!=s.body){const e=s.body.stream.getReader();B(e,o.resolve,o.reject)}else o.resolve(void 0);const l=[],u={type:"put",request:r,response:n};l.push(u);const I=await o.promise;null!=n.body&&(n.body.source=I);const f=C();let m=null;try{this.#Ye(l)}catch(e){m=e}return queueMicrotask((()=>{null===m?f.resolve():f.reject(m)})),f.promise}async delete(e,t={}){c.brandCheck(this,p);const A="Cache.delete";c.argumentLengthCheck(arguments,1,A),e=c.converters.RequestInfo(e),t=c.converters.CacheQueryOptions(t,A,"options");let s=null;if(c.is.Request(e)){if(s=E(e),"GET"!==s.method&&!t.ignoreMethod)return!1}else r("string"==typeof e),s=E(new d(e));const n=[],i={type:"delete",request:s,options:t};n.push(i);const o=C();let a,g=null;try{a=this.#Ye(n)}catch(e){g=e}return queueMicrotask((()=>{null===g?o.resolve(!!a?.length):o.reject(g)})),o.promise}async keys(e=void 0,t={}){c.brandCheck(this,p);void 0!==e&&(e=c.converters.RequestInfo(e)),t=c.converters.CacheQueryOptions(t,"Cache.keys","options");let A=null;if(void 0!==e)if(c.is.Request(e)){if(A=E(e),"GET"!==A.method&&!t.ignoreMethod)return[]}else"string"==typeof e&&(A=E(new d(e)));const r=C(),s=[];if(void 0===e)for(const e of this.#Le)s.push(e[0]);else{const e=this.#xe(A,t);for(const t of e)s.push(t[0])}return queueMicrotask((()=>{const e=[];for(const t of s){const A=u(t,void 0,(new AbortController).signal,"immutable");e.push(A)}r.resolve(Object.freeze(e))})),r.promise}#Ye(e){const t=this.#Le,A=[...t],s=[],n=[];try{for(const A of e){if("delete"!==A.type&&"put"!==A.type)throw c.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'});if("delete"===A.type&&null!=A.response)throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"});if(this.#xe(A.request,A.options,s).length)throw new DOMException("???","InvalidStateError");let e;if("delete"===A.type){if(e=this.#xe(A.request,A.options),0===e.length)return[];for(const A of e){const e=t.indexOf(A);r(-1!==e),t.splice(e,1)}}else if("put"===A.type){if(null==A.response)throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"});const n=A.request;if(!Q(n.url))throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"});if("GET"!==n.method)throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"});if(null!=A.options)throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"});e=this.#xe(A.request);for(const A of e){const e=t.indexOf(A);r(-1!==e),t.splice(e,1)}t.push([A.request,A.response]),s.push([A.request,A.response])}n.push([A.request,A.response])}return n}catch(e){throw this.#Le.length=0,this.#Le=A,e}}#xe(e,t,A){const r=[],s=A??this.#Le;for(const A of s){const[s,n]=A;this.#Pe(e,s,n,t)&&r.push(A)}return r}#Pe(e,t,A=null,r){const s=new URL(e.url),o=new URL(t.url);if(r?.ignoreSearch&&(o.search="",s.search=""),!n(s,o,!0))return!1;if(null==A||r?.ignoreVary||!A.headersList.contains("vary"))return!0;const a=i(A.headersList.get("vary"));for(const A of a){if("*"===A)return!1;if(t.headersList.get(A)!==e.headersList.get(A))return!1}return!0}#He(e,t,A=1/0){let r=null;if(void 0!==e)if(c.is.Request(e)){if(r=E(e),"GET"!==r.method&&!t.ignoreMethod)return[]}else"string"==typeof e&&(r=E(new d(e)));const s=[];if(void 0===e)for(const e of this.#Le)s.push(e[1]);else{const e=this.#xe(r,t);for(const t of e)s.push(t[1])}const n=[];for(const e of s){const t=l(e,"immutable");if(n.push(t.clone()),n.length>=A)break}return Object.freeze(n)}}Object.defineProperties(p.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:!0},match:o,matchAll:o,add:o,addAll:o,put:o,delete:o,keys:o});const f=[{key:"ignoreSearch",converter:c.converters.boolean,defaultValue:()=>!1},{key:"ignoreMethod",converter:c.converters.boolean,defaultValue:()=>!1},{key:"ignoreVary",converter:c.converters.boolean,defaultValue:()=>!1}];c.converters.CacheQueryOptions=c.dictionaryConverter(f),c.converters.MultiCacheQueryOptions=c.dictionaryConverter([...f,{key:"cacheName",converter:c.converters.DOMString}]),c.converters.Response=c.interfaceConverter(c.is.Response,"Response"),c.converters["sequence<RequestInfo>"]=c.sequenceConverter(c.converters.RequestInfo),e.exports={Cache:p}},6939:(e,t,A)=>{"use strict";const{Cache:r}=A(4420),{webidl:s}=A(6097),{kEnumerableProperty:n}=A(2858),{kConstruct:i}=A(257);class o{#Ve=new Map;constructor(){arguments[0]!==i&&s.illegalConstructor(),s.util.markAsUncloneable(this)}async match(e,t={}){if(s.brandCheck(this,o),s.argumentLengthCheck(arguments,1,"CacheStorage.match"),e=s.converters.RequestInfo(e),null!=(t=s.converters.MultiCacheQueryOptions(t)).cacheName){if(this.#Ve.has(t.cacheName)){const A=this.#Ve.get(t.cacheName),s=new r(i,A);return await s.match(e,t)}}else for(const A of this.#Ve.values()){const s=new r(i,A),n=await s.match(e,t);if(void 0!==n)return n}}async has(e){s.brandCheck(this,o);const t="CacheStorage.has";return s.argumentLengthCheck(arguments,1,t),e=s.converters.DOMString(e,t,"cacheName"),this.#Ve.has(e)}async open(e){s.brandCheck(this,o);const t="CacheStorage.open";if(s.argumentLengthCheck(arguments,1,t),e=s.converters.DOMString(e,t,"cacheName"),this.#Ve.has(e)){const t=this.#Ve.get(e);return new r(i,t)}const A=[];return this.#Ve.set(e,A),new r(i,A)}async delete(e){s.brandCheck(this,o);const t="CacheStorage.delete";return s.argumentLengthCheck(arguments,1,t),e=s.converters.DOMString(e,t,"cacheName"),this.#Ve.delete(e)}async keys(){s.brandCheck(this,o);return[...this.#Ve.keys()]}}Object.defineProperties(o.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:!0},match:n,has:n,open:n,delete:n,keys:n}),e.exports={CacheStorage:o}},3932:(e,t,A)=>{"use strict";const r=A(4589),{URLSerializer:s}=A(9934),{isValidHeaderName:n}=A(6686);e.exports={urlEquals:function(e,t,A=!1){return s(e,A)===s(t,A)},getFieldValues:function(e){r(null!==e);const t=[];for(let A of e.split(","))A=A.trim(),n(A)&&t.push(A);return t}}},3042:e=>{"use strict";e.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}},9391:(e,t,A)=>{"use strict";const{parseSetCookie:r}=A(6712),{stringify:s}=A(9871),{webidl:n}=A(6097),{Headers:i}=A(6558),o=n.brandCheckMultiple([i,globalThis.Headers].filter(Boolean));function a(e,t){n.argumentLengthCheck(arguments,2,"setCookie"),o(e),t=n.converters.Cookie(t);const A=s(t);A&&e.append("set-cookie",A,!0)}n.converters.DeleteCookieAttributes=n.dictionaryConverter([{converter:n.nullableConverter(n.converters.DOMString),key:"path",defaultValue:()=>null},{converter:n.nullableConverter(n.converters.DOMString),key:"domain",defaultValue:()=>null}]),n.converters.Cookie=n.dictionaryConverter([{converter:n.converters.DOMString,key:"name"},{converter:n.converters.DOMString,key:"value"},{converter:n.nullableConverter((e=>"number"==typeof e?n.converters["unsigned long long"](e):new Date(e))),key:"expires",defaultValue:()=>null},{converter:n.nullableConverter(n.converters["long long"]),key:"maxAge",defaultValue:()=>null},{converter:n.nullableConverter(n.converters.DOMString),key:"domain",defaultValue:()=>null},{converter:n.nullableConverter(n.converters.DOMString),key:"path",defaultValue:()=>null},{converter:n.nullableConverter(n.converters.boolean),key:"secure",defaultValue:()=>null},{converter:n.nullableConverter(n.converters.boolean),key:"httpOnly",defaultValue:()=>null},{converter:n.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:n.sequenceConverter(n.converters.DOMString),key:"unparsed",defaultValue:()=>[]}]),e.exports={getCookies:function(e){n.argumentLengthCheck(arguments,1,"getCookies"),o(e);const t=e.get("cookie"),A={};if(!t)return A;for(const e of t.split(";")){const[t,...r]=e.split("=");A[t.trim()]=r.join("=")}return A},deleteCookie:function(e,t,A){o(e);const r="deleteCookie";n.argumentLengthCheck(arguments,2,r),t=n.converters.DOMString(t,r,"name"),A=n.converters.DeleteCookieAttributes(A),a(e,{name:t,value:"",expires:new Date(0),...A})},getSetCookies:function(e){n.argumentLengthCheck(arguments,1,"getSetCookies"),o(e);const t=e.getSetCookie();return t?t.map((e=>r(e))):[]},setCookie:a,parseCookie:function(e){return e=n.converters.DOMString(e),r(e)}}},6712:(e,t,A)=>{"use strict";const{maxNameValuePairSize:r,maxAttributeValueSize:s}=A(3042),{isCTLExcludingHtab:n}=A(9871),{collectASequenceOfCodePointsFast:i}=A(9934),o=A(4589),{unescape:a}=A(1792);function c(e,t={}){if(0===e.length)return t;o(";"===e[0]);let A="";(e=e.slice(1)).includes(";")?(A=i(";",e,{position:0}),e=e.slice(A.length)):(A=e,e="");let r="",n="";if(A.includes("=")){const e={position:0};r=i("=",A,e),n=A.slice(e.position+1)}else r=A;if(r=r.trim(),n=n.trim(),n.length>s)return c(e,t);const a=r.toLowerCase();if("expires"===a){const e=new Date(n);t.expires=e}else if("max-age"===a){const A=n.charCodeAt(0);if((A<48||A>57)&&"-"!==n[0])return c(e,t);if(!/^\d+$/.test(n))return c(e,t);const r=Number(n);t.maxAge=r}else if("domain"===a){let e=n;"."===e[0]&&(e=e.slice(1)),e=e.toLowerCase(),t.domain=e}else if("path"===a){let e="";e=0===n.length||"/"!==n[0]?"/":n,t.path=e}else if("secure"===a)t.secure=!0;else if("httponly"===a)t.httpOnly=!0;else if("samesite"===a){let e="Default";const A=n.toLowerCase();A.includes("none")&&(e="None"),A.includes("strict")&&(e="Strict"),A.includes("lax")&&(e="Lax"),t.sameSite=e}else t.unparsed??=[],t.unparsed.push(`${r}=${n}`);return c(e,t)}e.exports={parseSetCookie:function(e){if(n(e))return null;let t="",A="",s="",o="";if(e.includes(";")){const r={position:0};t=i(";",e,r),A=e.slice(r.position)}else t=e;if(t.includes("=")){const e={position:0};s=i("=",t,e),o=t.slice(e.position+1)}else o=t;return s=s.trim(),o=o.trim(),s.length+o.length>r?null:{name:s,value:a(o),...c(A)}},parseUnparsedAttributes:c}},9871:e=>{"use strict";function t(e){for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(A<33||A>126||34===A||40===A||41===A||60===A||62===A||64===A||44===A||59===A||58===A||92===A||47===A||91===A||93===A||63===A||61===A||123===A||125===A)throw new Error("Invalid cookie name")}}function A(e){let t=e.length,A=0;if('"'===e[0]){if(1===t||'"'!==e[t-1])throw new Error("Invalid cookie value");--t,++A}for(;A<t;){const t=e.charCodeAt(A++);if(t<33||t>126||34===t||44===t||59===t||92===t)throw new Error("Invalid cookie value")}}function r(e){for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(A<32||127===A||59===A)throw new Error("Invalid cookie path")}}const s=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],n=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],i=Array(61).fill(0).map(((e,t)=>t.toString().padStart(2,"0")));function o(e){return"number"==typeof e&&(e=new Date(e)),`${s[e.getUTCDay()]}, ${i[e.getUTCDate()]} ${n[e.getUTCMonth()]} ${e.getUTCFullYear()} ${i[e.getUTCHours()]}:${i[e.getUTCMinutes()]}:${i[e.getUTCSeconds()]} GMT`}e.exports={isCTLExcludingHtab:function(e){for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(A>=0&&A<=8||A>=10&&A<=31||127===A)return!0}return!1},validateCookieName:t,validateCookiePath:r,validateCookieValue:A,toIMFDate:o,stringify:function(e){if(0===e.name.length)return null;t(e.name),A(e.value);const s=[`${e.name}=${e.value}`];e.name.startsWith("__Secure-")&&(e.secure=!0),e.name.startsWith("__Host-")&&(e.secure=!0,e.domain=null,e.path="/"),e.secure&&s.push("Secure"),e.httpOnly&&s.push("HttpOnly"),"number"==typeof e.maxAge&&(!function(e){if(e<0)throw new Error("Invalid cookie max-age")}(e.maxAge),s.push(`Max-Age=${e.maxAge}`)),e.domain&&(!function(e){if(e.startsWith("-")||e.endsWith(".")||e.endsWith("-"))throw new Error("Invalid cookie domain")}(e.domain),s.push(`Domain=${e.domain}`)),e.path&&(r(e.path),s.push(`Path=${e.path}`)),e.expires&&"Invalid Date"!==e.expires.toString()&&s.push(`Expires=${o(e.expires)}`),e.sameSite&&s.push(`SameSite=${e.sameSite}`);for(const t of e.unparsed){if(!t.includes("="))throw new Error("Invalid unparsed");const[e,...A]=t.split("=");s.push(`${e.trim()}=${A.join("=")}`)}return s.join("; ")}}},8813:(e,t,A)=>{"use strict";const{Transform:r}=A(7075),{isASCIINumber:s,isValidLastEventId:n}=A(4689),i=[239,187,191];e.exports={EventSourceStream:class extends r{state;checkBOM=!0;crlfCheck=!1;eventEndCheck=!1;buffer=null;pos=0;event={data:void 0,event:void 0,id:void 0,retry:void 0};constructor(e={}){e.readableObjectMode=!0,super(e),this.state=e.eventSourceSettings||{},e.push&&(this.push=e.push)}_transform(e,t,A){if(0!==e.length){if(this.buffer?this.buffer=Buffer.concat([this.buffer,e]):this.buffer=e,this.checkBOM)switch(this.buffer.length){case 1:return this.buffer[0]===i[0]||(this.checkBOM=!1),void A();case 2:if(this.buffer[0]===i[0]&&this.buffer[1]===i[1])return void A();this.checkBOM=!1;break;case 3:if(this.buffer[0]===i[0]&&this.buffer[1]===i[1]&&this.buffer[2]===i[2])return this.buffer=Buffer.alloc(0),this.checkBOM=!1,void A();this.checkBOM=!1;break;default:this.buffer[0]===i[0]&&this.buffer[1]===i[1]&&this.buffer[2]===i[2]&&(this.buffer=this.buffer.subarray(3)),this.checkBOM=!1}for(;this.pos<this.buffer.length;)if(this.eventEndCheck){if(this.crlfCheck){if(10===this.buffer[this.pos]){this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,this.crlfCheck=!1;continue}this.crlfCheck=!1}if(10===this.buffer[this.pos]||13===this.buffer[this.pos]){13===this.buffer[this.pos]&&(this.crlfCheck=!0),this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,(void 0!==this.event.data||this.event.event||void 0!==this.event.id||this.event.retry)&&this.processEvent(this.event),this.clearEvent();continue}this.eventEndCheck=!1}else 10!==this.buffer[this.pos]&&13!==this.buffer[this.pos]?this.pos++:(13===this.buffer[this.pos]&&(this.crlfCheck=!0),this.parseLine(this.buffer.subarray(0,this.pos),this.event),this.buffer=this.buffer.subarray(this.pos+1),this.pos=0,this.eventEndCheck=!0);A()}else A()}parseLine(e,t){if(0===e.length)return;const A=e.indexOf(58);if(0===A)return;let r="",i="";if(-1!==A){r=e.subarray(0,A).toString("utf8");let t=A+1;32===e[t]&&++t,i=e.subarray(t).toString("utf8")}else r=e.toString("utf8"),i="";switch(r){case"data":void 0===t[r]?t[r]=i:t[r]+=`\n${i}`;break;case"retry":s(i)&&(t[r]=i);break;case"id":n(i)&&(t[r]=i);break;case"event":i.length>0&&(t[r]=i)}}processEvent(e){e.retry&&s(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),void 0!==e.id&&n(e.id)&&(this.state.lastEventId=e.id),void 0!==e.data&&this.push({type:e.event||"message",options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event={data:void 0,event:void 0,id:void 0,retry:void 0}}}}},7928:(e,t,A)=>{"use strict";const{pipeline:r}=A(7075),{fetching:s}=A(7388),{makeRequest:n}=A(4609),{webidl:i}=A(6097),{EventSourceStream:o}=A(8813),{parseMIMEType:a}=A(9934),{createFastMessageEvent:c}=A(878),{isNetworkError:g}=A(4821),{kEnumerableProperty:l}=A(2858),{environmentSettingsObject:h}=A(6686);let d=!1;class u extends EventTarget{#Ge={open:null,error:null,message:null};#Oe;#Je=!1;#We=0;#qe=null;#X=null;#_e;#ge;constructor(e,t={}){super(),i.util.markAsUncloneable(this);const A="EventSource constructor";i.argumentLengthCheck(arguments,1,A),d||(d=!0,process.emitWarning("EventSource is experimental, expect them to change at any time.",{code:"UNDICI-ES"})),e=i.converters.USVString(e),t=i.converters.EventSourceInitDict(t,A,"eventSourceInitDict"),this.#_e=t.node.dispatcher||t.dispatcher,this.#ge={lastEventId:"",reconnectionTime:t.node.reconnectionTime};const r=h;let s;try{s=new URL(e,r.settingsObject.baseUrl),this.#ge.origin=s.origin}catch(e){throw new DOMException(e,"SyntaxError")}this.#Oe=s.href;let o="anonymous";!0===t.withCredentials&&(o="use-credentials",this.#Je=!0);const a={redirect:"follow",keepalive:!0,mode:"cors",credentials:"anonymous"===o?"same-origin":"omit",referrer:"no-referrer"};a.client=h.settingsObject,a.headersList=[["accept",{name:"accept",value:"text/event-stream"}]],a.cache="no-store",a.initiator="other",a.urlList=[new URL(this.#Oe)],this.#qe=n(a),this.#Xe()}get readyState(){return this.#We}get url(){return this.#Oe}get withCredentials(){return this.#Je}#Xe(){if(2===this.#We)return;this.#We=0;const e={request:this.#qe,dispatcher:this.#_e};e.processResponseEndOfBody=e=>{if(!g(e))return this.#Ze()},e.processResponse=e=>{if(g(e))return e.aborted?(this.close(),void this.dispatchEvent(new Event("error"))):void this.#Ze();const t=e.headersList.get("content-type",!0),A=null!==t?a(t):"failure",s="failure"!==A&&"text/event-stream"===A.essence;if(200!==e.status||!1===s)return this.close(),void this.dispatchEvent(new Event("error"));this.#We=1,this.dispatchEvent(new Event("open")),this.#ge.origin=e.urlList[e.urlList.length-1].origin;const n=new o({eventSourceSettings:this.#ge,push:e=>{this.dispatchEvent(c(e.type,e.options))}});r(e.body.stream,n,(e=>{!1===e?.aborted&&(this.close(),this.dispatchEvent(new Event("error")))}))},this.#X=s(e)}#Ze(){2!==this.#We&&(this.#We=0,this.dispatchEvent(new Event("error")),setTimeout((()=>{0===this.#We&&(this.#ge.lastEventId.length&&this.#qe.headersList.set("last-event-id",this.#ge.lastEventId,!0),this.#Xe())}),this.#ge.reconnectionTime)?.unref())}close(){i.brandCheck(this,u),2!==this.#We&&(this.#We=2,this.#X.abort(),this.#qe=null)}get onopen(){return this.#Ge.open}set onopen(e){this.#Ge.open&&this.removeEventListener("open",this.#Ge.open);const t=i.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("open",t),this.#Ge.open=e):this.#Ge.open=null}get onmessage(){return this.#Ge.message}set onmessage(e){this.#Ge.message&&this.removeEventListener("message",this.#Ge.message);const t=i.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("message",t),this.#Ge.message=e):this.#Ge.message=null}get onerror(){return this.#Ge.error}set onerror(e){this.#Ge.error&&this.removeEventListener("error",this.#Ge.error);const t=i.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("error",t),this.#Ge.error=e):this.#Ge.error=null}}const E={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:0,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:1,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:2,writable:!1}};Object.defineProperties(u,E),Object.defineProperties(u.prototype,E),Object.defineProperties(u.prototype,{close:l,onerror:l,onmessage:l,onopen:l,readyState:l,url:l,withCredentials:l}),i.converters.EventSourceInitDict=i.dictionaryConverter([{key:"withCredentials",converter:i.converters.boolean,defaultValue:()=>!1},{key:"dispatcher",converter:i.converters.any},{key:"node",converter:i.dictionaryConverter([{key:"reconnectionTime",converter:i.converters["unsigned long"],defaultValue:()=>3e3},{key:"dispatcher",converter:i.converters.any}]),defaultValue:()=>({})}]),e.exports={EventSource:u,defaultReconnectionTime:3e3}},4689:e=>{"use strict";e.exports={isValidLastEventId:function(e){return-1===e.indexOf("\0")},isASCIINumber:function(e){if(0===e.length)return!1;for(let t=0;t<e.length;t++)if(e.charCodeAt(t)<48||e.charCodeAt(t)>57)return!1;return!0}}},2530:(e,t,A)=>{"use strict";const r=A(2858),{ReadableStreamFrom:s,readableStreamClose:n,fullyReadBody:i,extractMimeType:o,utf8DecodeBytes:a}=A(6686),{FormData:c,setFormDataState:g}=A(3944),{webidl:l}=A(6097),h=A(4589),{isErrored:d,isDisturbed:u}=A(7075),{isArrayBuffer:E}=A(3429),{serializeAMimeType:I}=A(9934),{multipartFormDataParser:Q}=A(4614),{createDeferredPromise:B}=A(9250);let C;try{const e=A(7598);C=t=>e.randomInt(0,t)}catch{C=e=>Math.floor(Math.random()*e)}const p=new TextEncoder;function f(){}const m=new FinalizationRegistry((e=>{const t=e.deref();!t||t.locked||u(t)||d(t)||t.cancel("Response object has been garbage collected").catch(f)}));function y(e,t=!1){let A=null;A=l.is.ReadableStream(e)?e:l.is.Blob(e)?e.stream():new ReadableStream({pull(e){const t="string"==typeof o?p.encode(o):o;t.byteLength&&e.enqueue(t),queueMicrotask((()=>n(e)))},start(){},type:"bytes"}),h(l.is.ReadableStream(A));let i=null,o=null,a=null,c=null;if("string"==typeof e)o=e,c="text/plain;charset=UTF-8";else if(l.is.URLSearchParams(e))o=e.toString(),c="application/x-www-form-urlencoded;charset=UTF-8";else if(l.is.BufferSource(e))o=E(e)?new Uint8Array(e.slice()):new Uint8Array(e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength));else if(l.is.FormData(e)){const t=`----formdata-undici-0${`${C(1e11)}`.padStart(11,"0")}`,A=`--${t}\r\nContent-Disposition: form-data`,r=e=>e.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),s=e=>e.replace(/\r?\n|\r/g,"\r\n"),n=[],g=new Uint8Array([13,10]);a=0;let l=!1;for(const[t,i]of e)if("string"==typeof i){const e=p.encode(A+`; name="${r(s(t))}"`+`\r\n\r\n${s(i)}\r\n`);n.push(e),a+=e.byteLength}else{const e=p.encode(`${A}; name="${r(s(t))}"`+(i.name?`; filename="${r(i.name)}"`:"")+"\r\n"+`Content-Type: ${i.type||"application/octet-stream"}\r\n\r\n`);n.push(e,i,g),"number"==typeof i.size?a+=e.byteLength+i.size+g.byteLength:l=!0}const h=p.encode(`--${t}--\r\n`);n.push(h),a+=h.byteLength,l&&(a=null),o=e,i=async function*(){for(const e of n)e.stream?yield*e.stream():yield e},c=`multipart/form-data; boundary=${t}`}else if(l.is.Blob(e))o=e,a=e.size,e.type&&(c=e.type);else if("function"==typeof e[Symbol.asyncIterator]){if(t)throw new TypeError("keepalive");if(r.isDisturbed(e)||e.locked)throw new TypeError("Response body object should not be disturbed or locked");A=l.is.ReadableStream(e)?e:s(e)}if(("string"==typeof o||r.isBuffer(o))&&(a=Buffer.byteLength(o)),null!=i){let t;A=new ReadableStream({async start(){t=i(e)[Symbol.asyncIterator]()},async pull(e){const{value:r,done:s}=await t.next();if(s)queueMicrotask((()=>{e.close(),e.byobRequest?.respond(0)}));else if(!d(A)){const t=new Uint8Array(r);t.byteLength&&e.enqueue(t)}return e.desiredSize>0},async cancel(e){await t.return()},type:"bytes"})}return[{stream:A,source:o,length:a},c]}function D(e,t,A,r){try{l.brandCheck(e,A)}catch(e){return Promise.reject(e)}const s=r(e);if(S(s))return Promise.reject(new TypeError("Body is unusable: Body has already been read"));if(s.aborted)return Promise.reject(new DOMException("The operation was aborted.","AbortError"));const n=B(),o=n.reject,a=e=>{try{n.resolve(t(e))}catch(e){o(e)}};return null==s.body?(a(Buffer.allocUnsafe(0)),n.promise):(i(s.body,a,o),n.promise)}function S(e){const t=e.body;return null!=t&&(t.stream.locked||r.isDisturbed(t.stream))}function w(e){return JSON.parse(a(e))}function b(e){const t=e.headersList,A=o(t);return"failure"===A?null:A}e.exports={extractBody:y,safelyExtractBody:function(e,t=!1){return l.is.ReadableStream(e)&&(h(!r.isDisturbed(e),"The body has already been consumed."),h(!e.locked,"The stream is locked.")),y(e,t)},cloneBody:function(e){const{0:t,1:A}=e.stream.tee();return e.stream=t,{stream:A,length:e.length,source:e.source}},mixinBody:function(e,t){Object.assign(e.prototype,function(e,t){return{blob(){return D(this,(e=>{let A=b(t(this));return null===A?A="":A&&(A=I(A)),new Blob([e],{type:A})}),e,t)},arrayBuffer(){return D(this,(e=>new Uint8Array(e).buffer),e,t)},text(){return D(this,a,e,t)},json(){return D(this,w,e,t)},formData(){return D(this,(e=>{const A=b(t(this));if(null!==A)switch(A.essence){case"multipart/form-data":{const t=Q(e,A),r=new c;return g(r,t),r}case"application/x-www-form-urlencoded":{const t=new URLSearchParams(e.toString()),A=new c;for(const[e,r]of t)A.append(e,r);return A}}throw new TypeError('Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".')}),e,t)},bytes(){return D(this,(e=>new Uint8Array(e)),e,t)}}}(e,t))},streamRegistry:m,bodyUnusable:S}},9441:e=>{"use strict";const t=["GET","HEAD","POST"],A=new Set(t),r=[301,302,303,307,308],s=new Set(r),n=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],i=new Set(n),o=["no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],a=["",...o],c=new Set(o),g=["GET","HEAD","OPTIONS","TRACE"],l=new Set(g),h=["CONNECT","TRACE","TRACK"],d=new Set(h),u=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],E=new Set(u);e.exports={subresource:u,forbiddenMethods:h,requestBodyHeader:["content-encoding","content-language","content-location","content-type","content-length"],referrerPolicy:a,requestRedirect:["follow","manual","error"],requestMode:["navigate","same-origin","no-cors","cors"],requestCredentials:["omit","same-origin","include"],requestCache:["default","no-store","reload","no-cache","force-cache","only-if-cached"],redirectStatus:r,corsSafeListedMethods:t,nullBodyStatus:[101,204,205,304],safeMethods:g,badPorts:n,requestDuplex:["half"],subresourceSet:E,badPortsSet:i,redirectStatusSet:s,corsSafeListedMethodsSet:A,safeMethodsSet:l,forbiddenMethodsSet:d,referrerPolicyTokens:c}},9934:(e,t,A)=>{"use strict";const r=A(4589),s=new TextEncoder,n=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,i=/[\u000A\u000D\u0009\u0020]/,o=/[\u0009\u000A\u000C\u000D\u0020]/g,a=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function c(e,t=!1){if(!t)return e.href;const A=e.href,r=e.hash.length,s=0===r?A:A.substring(0,A.length-r);return!r&&A.endsWith("#")?s.slice(0,-1):s}function g(e,t,A){let r="";for(;A.position<t.length&&e(t[A.position]);)r+=t[A.position],A.position++;return r}function l(e,t,A){const r=t.indexOf(e,A.position),s=A.position;return-1===r?(A.position=t.length,t.slice(s)):(A.position=r,t.slice(s,A.position))}function h(e){return function(e){const t=e.length,A=new Uint8Array(t);let r=0;for(let s=0;s<t;++s){const t=e[s];37!==t?A[r++]=t:37!==t||d(e[s+1])&&d(e[s+2])?(A[r++]=u(e[s+1])<<4|u(e[s+2]),s+=2):A[r++]=37}return t===r?A:A.subarray(0,r)}(s.encode(e))}function d(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function u(e){return e>=48&&e<=57?e-48:(223&e)-55}function E(e){const t={position:0},A=l("/",e=B(e,!0,!0),t);if(0===A.length||!n.test(A))return"failure";if(t.position>=e.length)return"failure";t.position++;let r=l(";",e,t);if(r=B(r,!1,!0),0===r.length||!n.test(r))return"failure";const s=A.toLowerCase(),o=r.toLowerCase(),c={type:s,subtype:o,parameters:new Map,essence:`${s}/${o}`};for(;t.position<e.length;){t.position++,g((e=>i.test(e)),e,t);let A=g((e=>";"!==e&&"="!==e),e,t);if(A=A.toLowerCase(),t.position<e.length){if(";"===e[t.position])continue;t.position++}if(t.position>=e.length)break;let r=null;if('"'===e[t.position])r=I(e,t,!0),l(";",e,t);else if(r=l(";",e,t),r=B(r,!1,!0),0===r.length)continue;0===A.length||!n.test(A)||0!==r.length&&!a.test(r)||c.parameters.has(A)||c.parameters.set(A,r)}return c}function I(e,t,A=!1){const s=t.position;let n="";for(r('"'===e[t.position]),t.position++;n+=g((e=>'"'!==e&&"\\"!==e),e,t),!(t.position>=e.length);){const A=e[t.position];if(t.position++,"\\"!==A){r('"'===A);break}if(t.position>=e.length){n+="\\";break}n+=e[t.position],t.position++}return A?n:e.slice(s,t.position)}function Q(e){return 13===e||10===e||9===e||32===e}function B(e,t=!0,A=!0){return p(e,t,A,Q)}function C(e){return 13===e||10===e||9===e||12===e||32===e}function p(e,t,A,r){let s=0,n=e.length-1;if(t)for(;s<e.length&&r(e.charCodeAt(s));)s++;if(A)for(;n>0&&r(e.charCodeAt(n));)n--;return 0===s&&n===e.length-1?e:e.slice(s,n+1)}function f(e){const t=e.length;if(65535>t)return String.fromCharCode.apply(null,e);let A="",r=0,s=65535;for(;r<t;)r+s>t&&(s=t-r),A+=String.fromCharCode.apply(null,e.subarray(r,r+=s));return A}e.exports={dataURLProcessor:function(e){r("data:"===e.protocol);let t=c(e,!0);t=t.slice(5);const A={position:0};let s=l(",",t,A);const n=s.length;if(s=function(e,t=!0,A=!0){return p(e,t,A,C)}(s,!0,!0),A.position>=t.length)return"failure";A.position++;let i=h(t.slice(n+1));if(/;(\u0020){0,}base64$/i.test(s)){if(i=function(e){let t=(e=e.replace(o,"")).length;t%4==0&&61===e.charCodeAt(t-1)&&(--t,61===e.charCodeAt(t-1)&&--t);if(t%4==1)return"failure";if(/[^+/0-9A-Za-z]/.test(e.length===t?e:e.substring(0,t)))return"failure";const A=Buffer.from(e,"base64");return new Uint8Array(A.buffer,A.byteOffset,A.byteLength)}(f(i)),"failure"===i)return"failure";s=s.slice(0,-6),s=s.replace(/(\u0020)+$/,""),s=s.slice(0,-1)}s.startsWith(";")&&(s="text/plain"+s);let a=E(s);return"failure"===a&&(a=E("text/plain;charset=US-ASCII")),{mimeType:a,body:i}},URLSerializer:c,collectASequenceOfCodePoints:g,collectASequenceOfCodePointsFast:l,stringPercentDecode:h,parseMIMEType:E,collectAnHTTPQuotedString:I,serializeAMimeType:function(e){r("failure"!==e);const{parameters:t,essence:A}=e;let s=A;for(let[e,A]of t.entries())s+=";",s+=e,s+="=",n.test(A)||(A=A.replace(/(\\|")/g,"\\$1"),A='"'+A,A+='"'),s+=A;return s},removeChars:p,removeHTTPWhitespace:B,minimizeSupportedMimeType:function(e){switch(e.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return e.subtype.endsWith("+json")?"application/json":e.subtype.endsWith("+xml")?"application/xml":""},HTTP_TOKEN_CODEPOINTS:n,isomorphicDecode:f}},4614:(e,t,A)=>{"use strict";const{bufferToLowerCasedHeaderName:r}=A(2858),{utf8DecodeBytes:s}=A(6686),{HTTP_TOKEN_CODEPOINTS:n,isomorphicDecode:i}=A(9934),{makeEntry:o}=A(3944),{webidl:a}=A(6097),c=A(4589),g=Buffer.from('form-data; name="'),l=Buffer.from("filename"),h=Buffer.from("--"),d=Buffer.from("--\r\n");function u(e){for(let t=0;t<e.length;++t)if(-128&e.charCodeAt(t))return!1;return!0}function E(e,t){let A=null,s=null,o=null,a=null;for(;;){if(13===e[t.position]&&10===e[t.position+1]){if(null===A)throw p("header name is null");return{name:A,filename:s,contentType:o,encoding:a}}let c=Q((e=>10!==e&&13!==e&&58!==e),e,t);if(c=B(c,!0,!0,(e=>9===e||32===e)),!n.test(c.toString()))throw p("header name does not match the field-name token production");if(58!==e[t.position])throw p("expected :");switch(t.position++,Q((e=>32===e||9===e),e,t),r(c)){case"content-disposition":if(A=s=null,!C(e,g,t))throw p('expected form-data; name=" for content-disposition header');if(t.position+=17,A=I(e,t),59===e[t.position]&&32===e[t.position+1]){const A={position:t.position+2};if(C(e,l,A))if(42===e[A.position+8]){A.position+=10,Q((e=>32===e||9===e),e,A);const r=Q((e=>32!==e&&13!==e&&10!==e),e,A);if(117!==r[0]&&85!==r[0]||116!==r[1]&&84!==r[1]||102!==r[2]&&70!==r[2]||45!==r[3]||56!==r[4])throw p("unknown encoding, expected utf-8''");s=decodeURIComponent((new TextDecoder).decode(r.subarray(7))),t.position=A.position}else t.position+=11,Q((e=>32===e||9===e),e,t),t.position++,s=I(e,t)}break;case"content-type":{let A=Q((e=>10!==e&&13!==e),e,t);A=B(A,!1,!0,(e=>9===e||32===e)),o=i(A);break}case"content-transfer-encoding":{let A=Q((e=>10!==e&&13!==e),e,t);A=B(A,!1,!0,(e=>9===e||32===e)),a=i(A);break}default:Q((e=>10!==e&&13!==e),e,t)}if(13!==e[t.position]&&10!==e[t.position+1])throw p("expected CRLF");t.position+=2}}function I(e,t){c(34===e[t.position-1]);let A=Q((e=>10!==e&&13!==e&&34!==e),e,t);if(34!==e[t.position])throw p('expected "');return t.position++,A=(new TextDecoder).decode(A).replace(/%0A/gi,"\n").replace(/%0D/gi,"\r").replace(/%22/g,'"'),A}function Q(e,t,A){let r=A.position;for(;r<t.length&&e(t[r]);)++r;return t.subarray(A.position,A.position=r)}function B(e,t,A,r){let s=0,n=e.length-1;if(t)for(;s<e.length&&r(e[s]);)s++;if(A)for(;n>0&&r(e[n]);)n--;return 0===s&&n===e.length-1?e:e.subarray(s,n+1)}function C(e,t,A){if(e.length<t.length)return!1;for(let r=0;r<t.length;r++)if(t[r]!==e[A.position+r])return!1;return!0}function p(e){return new TypeError("Failed to parse body as FormData.",{cause:new TypeError(e)})}e.exports={multipartFormDataParser:function(e,t){c("failure"!==t&&"multipart/form-data"===t.essence);const A=t.parameters.get("boundary");if(void 0===A)throw p("missing boundary in content-type header");const r=Buffer.from(`--${A}`,"utf8"),n=[],i={position:0};for(;13===e[i.position]&&10===e[i.position+1];)i.position+=2;let g=e.length;for(;10===e[g-1]&&13===e[g-2];)g-=2;for(g!==e.length&&(e=e.subarray(0,g));;){if(!e.subarray(i.position,i.position+r.length).equals(r))throw p("expected a value starting with -- and the boundary");if(i.position+=r.length,i.position===e.length-2&&C(e,h,i)||i.position===e.length-4&&C(e,d,i))return n;if(13!==e[i.position]||10!==e[i.position+1])throw p("expected CRLF");i.position+=2;const t=E(e,i);let A,g,{name:l,filename:I,contentType:Q,encoding:B}=t;i.position+=2;{const t=e.indexOf(r.subarray(2),i.position);if(-1===t)throw p("expected boundary after body");A=e.subarray(i.position,t-4),i.position+=A.length,"base64"===B&&(A=Buffer.from(A.toString(),"base64"))}if(13!==e[i.position]||10!==e[i.position+1])throw p("expected CRLF");i.position+=2,null!==I?(Q??="text/plain",u(Q)||(Q=""),g=new File([A],I,{type:Q})):g=s(Buffer.from(A)),c(a.is.USVString(l)),c("string"==typeof g&&a.is.USVString(g)||a.is.File(g)),n.push(o(l,g,I))}},validateBoundary:function(e){const t=e.length;if(t<27||t>70)return!1;for(let A=0;A<t;++A){const t=e.charCodeAt(A);if(!(t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122||39===t||45===t||95===t))return!1}return!0}}},3944:(e,t,A)=>{"use strict";const{iteratorMixin:r}=A(6686),{kEnumerableProperty:s}=A(2858),{webidl:n}=A(6097),i=A(7975);class o{#ge=[];constructor(e=void 0){if(n.util.markAsUncloneable(this),void 0!==e)throw n.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]})}append(e,t,A=void 0){n.brandCheck(this,o);const r="FormData.append";n.argumentLengthCheck(arguments,2,r),e=n.converters.USVString(e),3===arguments.length||n.is.Blob(t)?(t=n.converters.Blob(t,r,"value"),void 0!==A&&(A=n.converters.USVString(A))):t=n.converters.USVString(t);const s=g(e,t,A);this.#ge.push(s)}delete(e){n.brandCheck(this,o);n.argumentLengthCheck(arguments,1,"FormData.delete"),e=n.converters.USVString(e),this.#ge=this.#ge.filter((t=>t.name!==e))}get(e){n.brandCheck(this,o);n.argumentLengthCheck(arguments,1,"FormData.get"),e=n.converters.USVString(e);const t=this.#ge.findIndex((t=>t.name===e));return-1===t?null:this.#ge[t].value}getAll(e){n.brandCheck(this,o);return n.argumentLengthCheck(arguments,1,"FormData.getAll"),e=n.converters.USVString(e),this.#ge.filter((t=>t.name===e)).map((e=>e.value))}has(e){n.brandCheck(this,o);return n.argumentLengthCheck(arguments,1,"FormData.has"),e=n.converters.USVString(e),-1!==this.#ge.findIndex((t=>t.name===e))}set(e,t,A=void 0){n.brandCheck(this,o);const r="FormData.set";n.argumentLengthCheck(arguments,2,r),e=n.converters.USVString(e),3===arguments.length||n.is.Blob(t)?(t=n.converters.Blob(t,r,"value"),void 0!==A&&(A=n.converters.USVString(A))):t=n.converters.USVString(t);const s=g(e,t,A),i=this.#ge.findIndex((t=>t.name===e));-1!==i?this.#ge=[...this.#ge.slice(0,i),s,...this.#ge.slice(i+1).filter((t=>t.name!==e))]:this.#ge.push(s)}[i.inspect.custom](e,t){const A=this.#ge.reduce(((e,t)=>(e[t.name]?Array.isArray(e[t.name])?e[t.name].push(t.value):e[t.name]=[e[t.name],t.value]:e[t.name]=t.value,e)),{__proto__:null});t.depth??=e,t.colors??=!0;const r=i.formatWithOptions(t,A);return`FormData ${r.slice(r.indexOf("]")+2)}`}static getFormDataState(e){return e.#ge}static setFormDataState(e,t){e.#ge=t}}const{getFormDataState:a,setFormDataState:c}=o;function g(e,t,A){if("string"==typeof t);else if(n.is.File(t)||(t=new File([t],"blob",{type:t.type})),void 0!==A){const e={type:t.type,lastModified:t.lastModified};t=new File([t],A,e)}return{name:e,value:t}}Reflect.deleteProperty(o,"getFormDataState"),Reflect.deleteProperty(o,"setFormDataState"),r("FormData",o,a,"name","value"),Object.defineProperties(o.prototype,{append:s,delete:s,get:s,getAll:s,has:s,set:s,[Symbol.toStringTag]:{value:"FormData",configurable:!0}}),n.is.FormData=n.util.MakeTypeAssertion(o),e.exports={FormData:o,makeEntry:g,setFormDataState:c}},2837:e=>{"use strict";const t=Symbol.for("undici.globalOrigin.1");e.exports={getGlobalOrigin:function(){return globalThis[t]},setGlobalOrigin:function(e){if(void 0===e)return void Object.defineProperty(globalThis,t,{value:void 0,writable:!0,enumerable:!1,configurable:!1});const A=new URL(e);if("http:"!==A.protocol&&"https:"!==A.protocol)throw new TypeError(`Only http & https urls are allowed, received ${A.protocol}`);Object.defineProperty(globalThis,t,{value:A,writable:!0,enumerable:!1,configurable:!1})}}},6558:(e,t,A)=>{"use strict";const{kConstruct:r}=A(257),{kEnumerableProperty:s}=A(2858),{iteratorMixin:n,isValidHeaderName:i,isValidHeaderValue:o}=A(6686),{webidl:a}=A(6097),c=A(4589),g=A(7975);function l(e){return 10===e||13===e||9===e||32===e}function h(e){let t=0,A=e.length;for(;A>t&&l(e.charCodeAt(A-1));)--A;for(;A>t&&l(e.charCodeAt(t));)++t;return 0===t&&A===e.length?e:e.substring(t,A)}function d(e,t){if(Array.isArray(t))for(let A=0;A<t.length;++A){const r=t[A];if(2!==r.length)throw a.errors.exception({header:"Headers constructor",message:`expected name/value pair to be length 2, found ${r.length}.`});u(e,r[0],r[1])}else{if("object"!=typeof t||null===t)throw a.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]});{const A=Object.keys(t);for(let r=0;r<A.length;++r)u(e,A[r],t[A[r]])}}}function u(e,t,A){if(A=h(A),!i(t))throw a.errors.invalidArgument({prefix:"Headers.append",value:t,type:"header name"});if(!o(A))throw a.errors.invalidArgument({prefix:"Headers.append",value:A,type:"header value"});if("immutable"===B(e))throw new TypeError("immutable");return p(e).append(t,A,!1)}function E(e,t){return e[0]<t[0]?-1:1}class I{cookies=null;sortedMap;headersMap;constructor(e){e instanceof I?(this.headersMap=new Map(e.headersMap),this.sortedMap=e.sortedMap,this.cookies=null===e.cookies?null:[...e.cookies]):(this.headersMap=new Map(e),this.sortedMap=null)}contains(e,t){return this.headersMap.has(t?e:e.toLowerCase())}clear(){this.headersMap.clear(),this.sortedMap=null,this.cookies=null}append(e,t,A){this.sortedMap=null;const r=A?e:e.toLowerCase(),s=this.headersMap.get(r);if(s){const e="cookie"===r?"; ":", ";this.headersMap.set(r,{name:s.name,value:`${s.value}${e}${t}`})}else this.headersMap.set(r,{name:e,value:t});"set-cookie"===r&&(this.cookies??=[]).push(t)}set(e,t,A){this.sortedMap=null;const r=A?e:e.toLowerCase();"set-cookie"===r&&(this.cookies=[t]),this.headersMap.set(r,{name:e,value:t})}delete(e,t){this.sortedMap=null,t||(e=e.toLowerCase()),"set-cookie"===e&&(this.cookies=null),this.headersMap.delete(e)}get(e,t){return this.headersMap.get(t?e:e.toLowerCase())?.value??null}*[Symbol.iterator](){for(const{0:e,1:{value:t}}of this.headersMap)yield[e,t]}get entries(){const e={};if(0!==this.headersMap.size)for(const{name:t,value:A}of this.headersMap.values())e[t]=A;return e}rawValues(){return this.headersMap.values()}get entriesList(){const e=[];if(0!==this.headersMap.size)for(const{0:t,1:{name:A,value:r}}of this.headersMap)if("set-cookie"===t)for(const t of this.cookies)e.push([A,t]);else e.push([A,r]);return e}toSortedArray(){const e=this.headersMap.size,t=new Array(e);if(e<=32){if(0===e)return t;const A=this.headersMap[Symbol.iterator](),r=A.next().value;t[0]=[r[0],r[1].value],c(null!==r[1].value);for(let r,s,n=1,i=0,o=0,a=0,g=0;n<e;++n){for(s=A.next().value,r=t[n]=[s[0],s[1].value],c(null!==r[1]),a=0,o=n;a<o;)g=a+(o-a>>1),t[g][0]<=r[0]?a=g+1:o=g;if(n!==g){for(i=n;i>a;)t[i]=t[--i];t[a]=r}}if(!A.next().done)throw new TypeError("Unreachable");return t}{let e=0;for(const{0:A,1:{value:r}}of this.headersMap)t[e++]=[A,r],c(null!==r);return t.sort(E)}}}class Q{#ze;#je;constructor(e=void 0){a.util.markAsUncloneable(this),e!==r&&(this.#je=new I,this.#ze="none",void 0!==e&&d(this,e=a.converters.HeadersInit(e,"Headers constructor","init")))}append(e,t){a.brandCheck(this,Q),a.argumentLengthCheck(arguments,2,"Headers.append");const A="Headers.append";return u(this,e=a.converters.ByteString(e,A,"name"),t=a.converters.ByteString(t,A,"value"))}delete(e){a.brandCheck(this,Q),a.argumentLengthCheck(arguments,1,"Headers.delete");if(e=a.converters.ByteString(e,"Headers.delete","name"),!i(e))throw a.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"});if("immutable"===this.#ze)throw new TypeError("immutable");this.#je.contains(e,!1)&&this.#je.delete(e,!1)}get(e){a.brandCheck(this,Q),a.argumentLengthCheck(arguments,1,"Headers.get");const t="Headers.get";if(e=a.converters.ByteString(e,t,"name"),!i(e))throw a.errors.invalidArgument({prefix:t,value:e,type:"header name"});return this.#je.get(e,!1)}has(e){a.brandCheck(this,Q),a.argumentLengthCheck(arguments,1,"Headers.has");const t="Headers.has";if(e=a.converters.ByteString(e,t,"name"),!i(e))throw a.errors.invalidArgument({prefix:t,value:e,type:"header name"});return this.#je.contains(e,!1)}set(e,t){a.brandCheck(this,Q),a.argumentLengthCheck(arguments,2,"Headers.set");const A="Headers.set";if(e=a.converters.ByteString(e,A,"name"),t=h(t=a.converters.ByteString(t,A,"value")),!i(e))throw a.errors.invalidArgument({prefix:A,value:e,type:"header name"});if(!o(t))throw a.errors.invalidArgument({prefix:A,value:t,type:"header value"});if("immutable"===this.#ze)throw new TypeError("immutable");this.#je.set(e,t,!1)}getSetCookie(){a.brandCheck(this,Q);const e=this.#je.cookies;return e?[...e]:[]}[g.inspect.custom](e,t){return t.depth??=e,`Headers ${g.formatWithOptions(t,this.#je.entries)}`}static getHeadersGuard(e){return e.#ze}static setHeadersGuard(e,t){e.#ze=t}static getHeadersList(e){return e.#je}static setHeadersList(e,t){e.#je=t}}const{getHeadersGuard:B,setHeadersGuard:C,getHeadersList:p,setHeadersList:f}=Q;Reflect.deleteProperty(Q,"getHeadersGuard"),Reflect.deleteProperty(Q,"setHeadersGuard"),Reflect.deleteProperty(Q,"getHeadersList"),Reflect.deleteProperty(Q,"setHeadersList"),n("Headers",Q,(function(e){const t=p(e);if(!t)return[];if(t.sortedMap)return t.sortedMap;const A=[],r=t.toSortedArray(),s=t.cookies;if(null===s||1===s.length)return t.sortedMap=r;for(let e=0;e<r.length;++e){const{0:t,1:n}=r[e];if("set-cookie"===t)for(let e=0;e<s.length;++e)A.push([t,s[e]]);else A.push([t,n])}return t.sortedMap=A}),0,1),Object.defineProperties(Q.prototype,{append:s,delete:s,get:s,has:s,set:s,getSetCookie:s,[Symbol.toStringTag]:{value:"Headers",configurable:!0},[g.inspect.custom]:{enumerable:!1}}),a.converters.HeadersInit=function(e,t,A){if(a.util.Type(e)===a.util.Types.OBJECT){const r=Reflect.get(e,Symbol.iterator);if(!g.types.isProxy(e)&&r===Q.prototype.entries)try{return p(e).entriesList}catch{}return"function"==typeof r?a.converters["sequence<sequence<ByteString>>"](e,t,A,r.bind(e)):a.converters["record<ByteString, ByteString>"](e,t,A)}throw a.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence<sequence<ByteString>>","record<ByteString, ByteString>"]})},e.exports={fill:d,compareHeaderName:E,Headers:Q,HeadersList:I,getHeadersGuard:B,setHeadersGuard:C,setHeadersList:f,getHeadersList:p}},7388:(e,t,A)=>{"use strict";const{makeNetworkError:r,makeAppropriateNetworkError:s,filterResponse:n,makeResponse:i,fromInnerResponse:o,getResponseState:a}=A(4821),{HeadersList:c}=A(6558),{Request:g,cloneRequest:l,getRequestDispatcher:h,getRequestState:d}=A(4609),u=A(8522),{makePolicyContainer:E,clonePolicyContainer:I,requestBadPort:Q,TAOCheck:B,appendRequestOriginHeader:C,responseLocationURL:p,requestCurrentURL:f,setRequestReferrerPolicyOnRedirect:m,tryUpgradeRequestToAPotentiallyTrustworthyURL:y,createOpaqueTimingInfo:D,appendFetchMetadata:S,corsCheck:w,crossOriginResourcePolicyCheck:b,determineRequestsReferrer:R,coarsenedSharedCurrentTime:N,sameOrigin:k,isCancelled:F,isAborted:U,isErrorLike:M,fullyReadBody:T,readableStreamClose:v,isomorphicEncode:L,urlIsLocal:H,urlIsHttpHttpsScheme:Y,urlHasHttpsScheme:x,clampAndCoarsenConnectionTimingInfo:P,simpleRangeHeaderValue:V,buildContentRange:G,createInflate:O,extractMimeType:J}=A(6686),W=A(4589),{safelyExtractBody:q,extractBody:_}=A(2530),{redirectStatusSet:X,nullBodyStatus:Z,safeMethodsSet:z,requestBodyHeader:j,subresourceSet:$}=A(9441),K=A(8474),{Readable:ee,pipeline:te,finished:Ae,isErrored:re,isReadable:se}=A(7075),{addAbortListener:ne,bufferToLowerCasedHeaderName:ie}=A(2858),{dataURLProcessor:oe,serializeAMimeType:ae,minimizeSupportedMimeType:ce}=A(9934),{getGlobalDispatcher:ge}=A(9879),{webidl:le}=A(6097),{STATUS_CODES:he}=A(7067),{bytesMatch:de}=A(7420),{createDeferredPromise:ue}=A(9250),Ee="function"==typeof u.createZstdDecompress,Ie=["GET","HEAD"],Qe="undefined"!=typeof __UNDICI_IS_NODE__||"undefined"!=typeof esbuildDetection?"node":"undici";let Be;class Ce extends K{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state="ongoing"}terminate(e){"ongoing"===this.state&&(this.state="terminated",this.connection?.destroy(e),this.emit("terminated",e))}abort(e){"ongoing"===this.state&&(this.state="aborted",e||(e=new DOMException("The operation was aborted.","AbortError")),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit("terminated",e))}}function pe(e){fe(e,"fetch")}function fe(e,t="other"){if("error"===e.type&&e.aborted)return;if(!e.urlList?.length)return;const A=e.urlList[0];let r=e.timingInfo,s=e.cacheState;Y(A)&&null!==r&&(e.timingAllowPassed||(r=D({startTime:r.startTime}),s=""),r.endTime=N(),e.timingInfo=r,me(r,A.href,t,globalThis,s,"",e.status))}const me=performance.markResourceTiming;function ye(e,t,A,r){if(e&&e.reject(r),null!=t.body?.stream&&se(t.body.stream)&&t.body.stream.cancel(r).catch((e=>{if("ERR_INVALID_STATE"!==e.code)throw e})),null==A)return;const s=a(A);null!=s.body?.stream&&se(s.body.stream)&&s.body.stream.cancel(r).catch((e=>{if("ERR_INVALID_STATE"!==e.code)throw e}))}function De({request:e,processRequestBodyChunkLength:t,processRequestEndOfBody:A,processResponse:r,processResponseEndOfBody:s,processResponseConsumeBody:n,useParallelQueue:i=!1,dispatcher:o=ge()}){W(o);let a=null,c=!1;null!=e.client&&(a=e.client.globalObject,c=e.client.crossOriginIsolatedCapability);const g=N(c),l=D({startTime:g}),h={controller:new Ce(o),request:e,timingInfo:l,processRequestBodyChunkLength:t,processRequestEndOfBody:A,processResponse:r,processResponseConsumeBody:n,processResponseEndOfBody:s,taskDestination:a,crossOriginIsolatedCapability:c};if(W(!e.body||e.body.stream),"client"===e.window&&(e.window="Window"===e.client?.globalObject?.constructor?.name?e.client:"no-window"),"client"===e.origin&&(e.origin=e.client.origin),"client"===e.policyContainer&&(null!=e.client?e.policyContainer=I(e.client.policyContainer):e.policyContainer=E()),!e.headersList.contains("accept",!0)){const t="*/*";e.headersList.append("accept",t,!0)}return e.headersList.contains("accept-language",!0)||e.headersList.append("accept-language","*",!0),e.priority,$.has(e.destination),Se(h,!1),h.controller}async function Se(e,t){try{const A=e.request;let s=null;if(A.localURLsOnly&&!H(f(A))&&(s=r("local URLs only")),y(A),"blocked"===Q(A)&&(s=r("bad port")),""===A.referrerPolicy&&(A.referrerPolicy=A.policyContainer.referrerPolicy),"no-referrer"!==A.referrer&&(A.referrer=R(A)),null===s){const t=f(A);k(t,A.url)&&"basic"===A.responseTainting||"data:"===t.protocol||"navigate"===A.mode||"websocket"===A.mode?(A.responseTainting="basic",s=await we(e)):"same-origin"===A.mode?s=r('request mode cannot be "same-origin"'):"no-cors"===A.mode?"follow"!==A.redirect?s=r('redirect mode cannot be "follow" for "no-cors" request'):(A.responseTainting="opaque",s=await we(e)):Y(f(A))?(A.responseTainting="cors",s=await Ne(e)):s=r("URL scheme must be a HTTP(S) scheme")}if(t)return s;0===s.status||s.internalResponse||(A.responseTainting,"basic"===A.responseTainting?s=n(s,"basic"):"cors"===A.responseTainting?s=n(s,"cors"):"opaque"===A.responseTainting?s=n(s,"opaque"):W(!1));let i=0===s.status?s:s.internalResponse;if(0===i.urlList.length&&i.urlList.push(...A.urlList),A.timingAllowFailed||(s.timingAllowPassed=!0),"opaque"===s.type&&206===i.status&&i.rangeRequested&&!A.headers.contains("range",!0)&&(s=i=r()),0===s.status||"HEAD"!==A.method&&"CONNECT"!==A.method&&!Z.includes(i.status)||(i.body=null,e.controller.dump=!0),A.integrity){const t=t=>Re(e,r(t));if("opaque"===A.responseTainting||null==s.body)return void t(s.error);const n=r=>{de(r,A.integrity)?(s.body=q(r)[0],Re(e,s)):t("integrity mismatch")};T(s.body,n,t)}else Re(e,s)}catch(t){e.controller.terminate(t)}}function we(e){if(F(e)&&0===e.request.redirectCount)return Promise.resolve(s(e));const{request:t}=e,{protocol:n}=f(t);switch(n){case"about:":return Promise.resolve(r("about scheme is not supported"));case"blob:":{Be||(Be=A(4573).resolveObjectURL);const e=f(t);if(0!==e.search.length)return Promise.resolve(r("NetworkError when attempting to fetch resource."));const s=Be(e.toString());if("GET"!==t.method||!le.is.Blob(s))return Promise.resolve(r("invalid method"));const n=i(),o=s.size,a=L(`${o}`),c=s.type;if(t.headersList.contains("range",!0)){n.rangeRequested=!0;const e=t.headersList.get("range",!0),A=V(e,!0);if("failure"===A)return Promise.resolve(r("failed to fetch the data URL"));let{rangeStartValue:i,rangeEndValue:a}=A;if(null===i)i=o-a,a=i+a-1;else{if(i>=o)return Promise.resolve(r("Range start is greater than the blob's size."));(null===a||a>=o)&&(a=o-1)}const g=s.slice(i,a,c),l=_(g);n.body=l[0];const h=L(`${g.size}`),d=G(i,a,o);n.status=206,n.statusText="Partial Content",n.headersList.set("content-length",h,!0),n.headersList.set("content-type",c,!0),n.headersList.set("content-range",d,!0)}else{const e=_(s);n.statusText="OK",n.body=e[0],n.headersList.set("content-length",a,!0),n.headersList.set("content-type",c,!0)}return Promise.resolve(n)}case"data:":{const e=f(t),A=oe(e);if("failure"===A)return Promise.resolve(r("failed to fetch the data URL"));const s=ae(A.mimeType);return Promise.resolve(i({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:s}]],body:q(A.body)[0]}))}case"file:":return Promise.resolve(r("not implemented... yet..."));case"http:":case"https:":return Ne(e).catch((e=>r(e)));default:return Promise.resolve(r("unknown scheme"))}}function be(e,t){e.request.done=!0,null!=e.processResponseDone&&queueMicrotask((()=>e.processResponseDone(t)))}function Re(e,t){let A=e.timingInfo;const r=()=>{const r=Date.now();"document"===e.request.destination&&(e.controller.fullTimingInfo=A),e.controller.reportTimingSteps=()=>{if(!Y(e.request.url))return;A.endTime=r;let s=t.cacheState;const n=t.bodyInfo;t.timingAllowPassed||(A=D(A),s="");let i=0;if("navigator"!==e.request.mode||!t.hasCrossOriginRedirects){i=t.status;const e=J(t.headersList);"failure"!==e&&(n.contentType=ce(e))}null!=e.request.initiatorType&&me(A,e.request.url.href,e.request.initiatorType,globalThis,s,n,i)};queueMicrotask((()=>(e.request.done=!0,null!=e.processResponseEndOfBody&&queueMicrotask((()=>e.processResponseEndOfBody(t))),void(null!=e.request.initiatorType&&e.controller.reportTimingSteps()))))};null!=e.processResponse&&queueMicrotask((()=>{e.processResponse(t),e.processResponse=null}));const s="error"===t.type?t:t.internalResponse??t;null==s.body?r():Ae(s.body.stream,(()=>{r()}))}async function Ne(e){const t=e.request;let A=null,s=null;const n=e.timingInfo;if(t.serviceWorkers,null===A){if("follow"===t.redirect&&(t.serviceWorkers="none"),s=A=await ke(e),"cors"===t.responseTainting&&"failure"===w(t,A))return r("cors failure");"failure"===B(t,A)&&(t.timingAllowFailed=!0)}return"opaque"!==t.responseTainting&&"opaque"!==A.type||"blocked"!==b(t.origin,t.client,t.destination,s)?(X.has(s.status)&&("manual"!==t.redirect&&e.controller.connection.destroy(void 0,!1),"error"===t.redirect?A=r("unexpected redirect"):"manual"===t.redirect?A=s:"follow"===t.redirect?A=await function(e,t){const A=e.request,s=t.internalResponse?t.internalResponse:t;let n;try{if(n=p(s,f(A).hash),null==n)return t}catch(e){return Promise.resolve(r(e))}if(!Y(n))return Promise.resolve(r("URL scheme must be a HTTP(S) scheme"));if(20===A.redirectCount)return Promise.resolve(r("redirect count exceeded"));if(A.redirectCount+=1,"cors"===A.mode&&(n.username||n.password)&&!k(A,n))return Promise.resolve(r('cross origin not allowed for request mode "cors"'));if("cors"===A.responseTainting&&(n.username||n.password))return Promise.resolve(r('URL cannot contain credentials for request mode "cors"'));if(303!==s.status&&null!=A.body&&null==A.body.source)return Promise.resolve(r());if([301,302].includes(s.status)&&"POST"===A.method||303===s.status&&!Ie.includes(A.method)){A.method="GET",A.body=null;for(const e of j)A.headersList.delete(e)}k(f(A),n)||(A.headersList.delete("authorization",!0),A.headersList.delete("proxy-authorization",!0),A.headersList.delete("cookie",!0),A.headersList.delete("host",!0));null!=A.body&&(W(null!=A.body.source),A.body=q(A.body.source)[0]);const i=e.timingInfo;i.redirectEndTime=i.postRedirectStartTime=N(e.crossOriginIsolatedCapability),0===i.redirectStartTime&&(i.redirectStartTime=i.startTime);return A.urlList.push(n),m(A,s),Se(e,!0)}(e,A):W(!1)),A.timingInfo=n,A):r("blocked")}async function ke(e,t=!1,A=!1){const n=e.request;let o=null,a=null,g=null;"no-window"===n.window&&"error"===n.redirect?(o=e,a=n):(a=l(n),o={...e},o.request=a);const h="include"===n.credentials||"same-origin"===n.credentials&&"basic"===n.responseTainting,d=a.body?a.body.length:null;let E=null;if(null==a.body&&["POST","PUT"].includes(a.method)&&(E="0"),null!=d&&(E=L(`${d}`)),null!=E&&a.headersList.append("content-length",E,!0),null!=d&&a.keepalive,le.is.URL(a.referrer)&&a.headersList.append("referer",L(a.referrer.href),!0),C(a),S(a),a.headersList.contains("user-agent",!0)||a.headersList.append("user-agent",Qe,!0),"default"===a.cache&&(a.headersList.contains("if-modified-since",!0)||a.headersList.contains("if-none-match",!0)||a.headersList.contains("if-unmodified-since",!0)||a.headersList.contains("if-match",!0)||a.headersList.contains("if-range",!0))&&(a.cache="no-store"),"no-cache"!==a.cache||a.preventNoCacheCacheControlHeaderModification||a.headersList.contains("cache-control",!0)||a.headersList.append("cache-control","max-age=0",!0),"no-store"!==a.cache&&"reload"!==a.cache||(a.headersList.contains("pragma",!0)||a.headersList.append("pragma","no-cache",!0),a.headersList.contains("cache-control",!0)||a.headersList.append("cache-control","no-cache",!0)),a.headersList.contains("range",!0)&&a.headersList.append("accept-encoding","identity",!0),a.headersList.contains("accept-encoding",!0)||(x(f(a))?a.headersList.append("accept-encoding","br, gzip, deflate",!0):a.headersList.append("accept-encoding","gzip, deflate",!0)),a.headersList.delete("host",!0),a.cache="no-store","no-store"!==a.cache&&a.cache,null==g){if("only-if-cached"===a.cache)return r("only if cached");const e=await async function(e){W(!e.controller.connection||e.controller.connection.destroyed),e.controller.connection={abort:null,destroyed:!1,destroy(e,t=!0){this.destroyed||(this.destroyed=!0,t&&this.abort?.(e??new DOMException("The operation was aborted.","AbortError")))}};const t=e.request;let A=null;const n=e.timingInfo,o=null;null==o&&(t.cache="no-store");t.mode;let a=null;if(null==t.body&&e.processRequestEndOfBody)queueMicrotask((()=>e.processRequestEndOfBody()));else if(null!=t.body){const A=async function*(t){F(e)||(yield t,e.processRequestBodyChunkLength?.(t.byteLength))},r=()=>{F(e)||e.processRequestEndOfBody&&e.processRequestEndOfBody()},s=t=>{F(e)||("AbortError"===t.name?e.controller.abort():e.controller.terminate(t))};a=async function*(){try{for await(const e of t.body.stream)yield*A(e);r()}catch(e){s(e)}}()}try{const{body:t,status:r,statusText:s,headersList:n,socket:o}=await E({body:a});if(o)A=i({status:r,statusText:s,headersList:n,socket:o});else{const o=t[Symbol.asyncIterator]();e.controller.next=()=>o.next(),A=i({status:r,statusText:s,headersList:n})}}catch(t){return"AbortError"===t.name?(e.controller.connection.destroy(),s(e,t)):r(t)}const g=()=>e.controller.resume(),l=t=>{F(e)||e.controller.abort(t)},h=new ReadableStream({start(t){e.controller.controller=t},pull:g,cancel:l,type:"bytes"});A.body={stream:h,source:null,length:null},e.controller.resume||e.controller.on("terminated",d);function d(t){U(e)?(A.aborted=!0,se(h)&&e.controller.controller.error(e.controller.serializedAbortReason)):se(h)&&e.controller.controller.error(new TypeError("terminated",{cause:M(t)?t:void 0})),e.controller.connection.destroy()}return e.controller.resume=async()=>{for(;;){let t,r;try{const{done:A,value:r}=await e.controller.next();if(U(e))break;t=A?void 0:r}catch(A){e.controller.ended&&!n.encodedBodySize?t=void 0:(t=A,r=!0)}if(void 0===t)return v(e.controller.controller),void be(e,A);if(n.decodedBodySize+=t?.byteLength??0,r)return void e.controller.terminate(t);const s=new Uint8Array(t);if(s.byteLength&&e.controller.controller.enqueue(s),re(h))return void e.controller.terminate();if(e.controller.controller.desiredSize<=0)return}},A;function E({body:A}){const r=f(t),s=e.controller.dispatcher;return new Promise(((i,o)=>s.dispatch({path:r.pathname+r.search,origin:r.origin,method:t.method,body:s.isMockActive?t.body&&(t.body.source||t.body.stream):A,headers:t.headersList.entries,maxRedirections:0,upgrade:"websocket"===t.mode?"websocket":void 0},{body:null,abort:null,onConnect(t){const{connection:A}=e.controller;n.finalConnectionTimingInfo=P(void 0,n.postRedirectStartTime,e.crossOriginIsolatedCapability),A.destroyed?t(new DOMException("The operation was aborted.","AbortError")):(e.controller.on("terminated",t),this.abort=A.abort=t),n.finalNetworkRequestStartTime=N(e.crossOriginIsolatedCapability)},onResponseStarted(){n.finalNetworkResponseStartTime=N(e.crossOriginIsolatedCapability)},onHeaders(e,A,r,s){if(e<200)return!1;const n=new c;for(let e=0;e<A.length;e+=2)n.append(ie(A[e]),A[e+1].toString("latin1"),!0);const o=n.get("location",!0);this.body=new ee({read:r});const a=o&&"follow"===t.redirect&&X.has(e),g=[];if("HEAD"!==t.method&&"CONNECT"!==t.method&&!Z.includes(e)&&!a){const e=n.get("content-encoding",!0),t=e?e.toLowerCase().split(","):[];for(let e=t.length-1;e>=0;--e){const A=t[e].trim();if("x-gzip"===A||"gzip"===A)g.push(u.createGunzip({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if("deflate"===A)g.push(O({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if("br"===A)g.push(u.createBrotliDecompress({flush:u.constants.BROTLI_OPERATION_FLUSH,finishFlush:u.constants.BROTLI_OPERATION_FLUSH}));else{if("zstd"!==A||!Ee){g.length=0;break}g.push(u.createZstdDecompress({flush:u.constants.ZSTD_e_continue,finishFlush:u.constants.ZSTD_e_end}))}}}const l=this.onError.bind(this);return i({status:e,statusText:s,headersList:n,body:g.length?te(this.body,...g,(e=>{e&&this.onError(e)})).on("error",l):this.body.on("error",l)}),!0},onData(t){if(e.controller.dump)return;const A=t;return n.encodedBodySize+=A.byteLength,this.body.push(A)},onComplete(){this.abort&&e.controller.off("terminated",this.abort),e.controller.ended=!0,this.body.push(null)},onError(t){this.abort&&e.controller.off("terminated",this.abort),this.body?.destroy(t),e.controller.terminate(t),o(t)},onUpgrade(e,t,A){if(101!==e)return;const r=new c;for(let e=0;e<t.length;e+=2)r.append(ie(t[e]),t[e+1].toString("latin1"),!0);return i({status:e,statusText:he[e],headersList:r,socket:A}),!0}})))}}(o,h,A);!z.has(a.method)&&e.status>=200&&e.status,null==g&&(g=e)}if(g.urlList=[...a.urlList],a.headersList.contains("range",!0)&&(g.rangeRequested=!0),g.requestIncludesCredentials=h,407===g.status)return"no-window"===n.window?r():F(e)?s(e):r("proxy authentication required");if(421===g.status&&!A&&(null==n.body||null!=n.body.source)){if(F(e))return s(e);e.controller.connection.destroy(),g=await ke(e,t,!0)}return g}e.exports={fetch:function(e,t=void 0){le.argumentLengthCheck(arguments,1,"globalThis.fetch");let A,r=ue();try{A=new g(e,t)}catch(e){return r.reject(e),r.promise}const s=d(A);if(A.signal.aborted)return ye(r,s,null,A.signal.reason),r.promise;const n=s.client.globalObject;"ServiceWorkerGlobalScope"===n?.constructor?.name&&(s.serviceWorkers="none");let i=null,a=!1,c=null;return ne(A.signal,(()=>{a=!0,W(null!=c),c.abort(A.signal.reason);const e=i?.deref();ye(r,s,e,A.signal.reason)})),c=De({request:s,processResponseEndOfBody:pe,processResponse:e=>{a||(e.aborted?ye(r,s,i,c.serializedAbortReason):"error"!==e.type?(i=new WeakRef(o(e,"immutable")),r.resolve(i.deref()),r=null):r.reject(new TypeError("fetch failed",{cause:e.error})))},dispatcher:h(A)}),r.promise},Fetch:Ce,fetching:De,finalizeAndReportTiming:fe}},4609:(e,t,A)=>{"use strict";const{extractBody:r,mixinBody:s,cloneBody:n,bodyUnusable:i}=A(2530),{Headers:o,fill:a,HeadersList:c,setHeadersGuard:g,getHeadersGuard:l,setHeadersList:h,getHeadersList:d}=A(6558),u=A(2858),E=A(7975),{isValidHTTPToken:I,sameOrigin:Q,environmentSettingsObject:B}=A(6686),{forbiddenMethodsSet:C,corsSafeListedMethodsSet:p,referrerPolicy:f,requestRedirect:m,requestMode:y,requestCredentials:D,requestCache:S,requestDuplex:w}=A(9441),{kEnumerableProperty:b,normalizedMethodRecordsBase:R,normalizedMethodRecords:N}=u,{webidl:k}=A(6097),{URLSerializer:F}=A(9934),{kConstruct:U}=A(257),M=A(4589),{getMaxListeners:T,setMaxListeners:v,defaultMaxListeners:L}=A(8474),H=Symbol("abortController"),Y=new FinalizationRegistry((({signal:e,abort:t})=>{e.removeEventListener("abort",t)})),x=new WeakMap;let P;try{P=T((new AbortController).signal)>0}catch{P=!1}function V(e){return function t(){const A=e.deref();if(void 0!==A){Y.unregister(t),this.removeEventListener("abort",t),A.abort(this.reason);const e=x.get(A.signal);if(void 0!==e){if(0!==e.size){for(const t of e){const e=t.deref();void 0!==e&&e.abort(this.reason)}e.clear()}x.delete(A.signal)}}}}let G=!1;class O{#$e;#_e;#Ce;#ge;constructor(e,t=void 0){if(k.util.markAsUncloneable(this),e===U)return;k.argumentLengthCheck(arguments,1,"Request constructor"),e=k.converters.RequestInfo(e),t=k.converters.RequestInit(t);let A=null,s=null;const n=B.settingsObject.baseUrl;let l=null;if("string"==typeof e){let r;this.#_e=t.dispatcher;try{r=new URL(e,n)}catch(t){throw new TypeError("Failed to parse URL from "+e,{cause:t})}if(r.username||r.password)throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e);A=z({urlList:[r]}),s="cors"}else M(k.is.Request(e)),A=e.#ge,l=e.#$e,this.#_e=t.dispatcher||e.#_e;const E=B.settingsObject.origin;let f="client";if("EnvironmentSettingsObject"===A.window?.constructor?.name&&Q(A.window,E)&&(f=A.window),null!=t.window)throw new TypeError(`'window' option '${f}' must be null`);"window"in t&&(f="no-window"),A=z({method:A.method,headersList:A.headersList,unsafeRequest:A.unsafeRequest,client:B.settingsObject,window:f,priority:A.priority,origin:A.origin,referrer:A.referrer,referrerPolicy:A.referrerPolicy,mode:A.mode,credentials:A.credentials,cache:A.cache,redirect:A.redirect,integrity:A.integrity,keepalive:A.keepalive,reloadNavigation:A.reloadNavigation,historyNavigation:A.historyNavigation,urlList:[...A.urlList]});const m=0!==Object.keys(t).length;if(m&&("navigate"===A.mode&&(A.mode="same-origin"),A.reloadNavigation=!1,A.historyNavigation=!1,A.origin="client",A.referrer="client",A.referrerPolicy="",A.url=A.urlList[A.urlList.length-1],A.urlList=[A.url]),void 0!==t.referrer){const e=t.referrer;if(""===e)A.referrer="no-referrer";else{let t;try{t=new URL(e,n)}catch(t){throw new TypeError(`Referrer "${e}" is not a valid URL.`,{cause:t})}"about:"===t.protocol&&"client"===t.hostname||E&&!Q(t,B.settingsObject.baseUrl)?A.referrer="client":A.referrer=t}}let y;if(void 0!==t.referrerPolicy&&(A.referrerPolicy=t.referrerPolicy),y=void 0!==t.mode?t.mode:s,"navigate"===y)throw k.errors.exception({header:"Request constructor",message:"invalid request mode navigate."});if(null!=y&&(A.mode=y),void 0!==t.credentials&&(A.credentials=t.credentials),void 0!==t.cache&&(A.cache=t.cache),"only-if-cached"===A.cache&&"same-origin"!==A.mode)throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode");if(void 0!==t.redirect&&(A.redirect=t.redirect),null!=t.integrity&&(A.integrity=String(t.integrity)),void 0!==t.keepalive&&(A.keepalive=Boolean(t.keepalive)),void 0!==t.method){let e=t.method;const r=N[e];if(void 0!==r)A.method=r;else{if(!I(e))throw new TypeError(`'${e}' is not a valid HTTP method.`);const t=e.toUpperCase();if(C.has(t))throw new TypeError(`'${e}' HTTP method is unsupported.`);e=R[t]??e,A.method=e}G||"patch"!==A.method||(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:"UNDICI-FETCH-patch"}),G=!0)}void 0!==t.signal&&(l=t.signal),this.#ge=A;const D=new AbortController;if(this.#$e=D.signal,null!=l)if(l.aborted)D.abort(l.reason);else{this[H]=D;const e=V(new WeakRef(D));P&&T(l)===L&&v(1500,l),u.addAbortListener(l,e),Y.register(D,{signal:l,abort:e},e)}if(this.#Ce=new o(U),h(this.#Ce,A.headersList),g(this.#Ce,"request"),"no-cors"===y){if(!p.has(A.method))throw new TypeError(`'${A.method} is unsupported in no-cors mode.`);g(this.#Ce,"request-no-cors")}if(m){const e=d(this.#Ce),A=void 0!==t.headers?t.headers:new c(e);if(e.clear(),A instanceof c){for(const{name:t,value:r}of A.rawValues())e.append(t,r,!1);e.cookies=A.cookies}else a(this.#Ce,A)}const S=k.is.Request(e)?e.#ge.body:null;if(!(null==t.body&&null==S||"GET"!==A.method&&"HEAD"!==A.method))throw new TypeError("Request with GET/HEAD method cannot have body.");let w=null;if(null!=t.body){const[e,s]=r(t.body,A.keepalive);w=e,s&&!d(this.#Ce).contains("content-type",!0)&&this.#Ce.append("content-type",s,!0)}const b=w??S;if(null!=b&&null==b.source){if(null!=w&&null==t.duplex)throw new TypeError("RequestInit: duplex option is required when sending a body.");if("same-origin"!==A.mode&&"cors"!==A.mode)throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"');A.useCORSPreflightFlag=!0}let F=b;if(null==w&&null!=S){if(i(e.#ge))throw new TypeError("Cannot construct a Request with a Request object that has already been used.");const t=new TransformStream;S.stream.pipeThrough(t),F={source:S.source,length:S.length,stream:t.readable}}this.#ge.body=F}get method(){return k.brandCheck(this,O),this.#ge.method}get url(){return k.brandCheck(this,O),F(this.#ge.url)}get headers(){return k.brandCheck(this,O),this.#Ce}get destination(){return k.brandCheck(this,O),this.#ge.destination}get referrer(){return k.brandCheck(this,O),"no-referrer"===this.#ge.referrer?"":"client"===this.#ge.referrer?"about:client":this.#ge.referrer.toString()}get referrerPolicy(){return k.brandCheck(this,O),this.#ge.referrerPolicy}get mode(){return k.brandCheck(this,O),this.#ge.mode}get credentials(){return k.brandCheck(this,O),this.#ge.credentials}get cache(){return k.brandCheck(this,O),this.#ge.cache}get redirect(){return k.brandCheck(this,O),this.#ge.redirect}get integrity(){return k.brandCheck(this,O),this.#ge.integrity}get keepalive(){return k.brandCheck(this,O),this.#ge.keepalive}get isReloadNavigation(){return k.brandCheck(this,O),this.#ge.reloadNavigation}get isHistoryNavigation(){return k.brandCheck(this,O),this.#ge.historyNavigation}get signal(){return k.brandCheck(this,O),this.#$e}get body(){return k.brandCheck(this,O),this.#ge.body?this.#ge.body.stream:null}get bodyUsed(){return k.brandCheck(this,O),!!this.#ge.body&&u.isDisturbed(this.#ge.body.stream)}get duplex(){return k.brandCheck(this,O),"half"}clone(){if(k.brandCheck(this,O),i(this.#ge))throw new TypeError("unusable");const e=j(this.#ge),t=new AbortController;if(this.signal.aborted)t.abort(this.signal.reason);else{let e=x.get(this.signal);void 0===e&&(e=new Set,x.set(this.signal,e));const A=new WeakRef(t);e.add(A),u.addAbortListener(t.signal,V(A))}return $(e,this.#_e,t.signal,l(this.#Ce))}[E.inspect.custom](e,t){null===t.depth&&(t.depth=2),t.colors??=!0;const A={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${E.formatWithOptions(t,A)}`}static setRequestSignal(e,t){return e.#$e=t,e}static getRequestDispatcher(e){return e.#_e}static setRequestDispatcher(e,t){e.#_e=t}static setRequestHeaders(e,t){e.#Ce=t}static getRequestState(e){return e.#ge}static setRequestState(e,t){e.#ge=t}}const{setRequestSignal:J,getRequestDispatcher:W,setRequestDispatcher:q,setRequestHeaders:_,getRequestState:X,setRequestState:Z}=O;function z(e){return{method:e.method??"GET",localURLsOnly:e.localURLsOnly??!1,unsafeRequest:e.unsafeRequest??!1,body:e.body??null,client:e.client??null,reservedClient:e.reservedClient??null,replacesClientId:e.replacesClientId??"",window:e.window??"client",keepalive:e.keepalive??!1,serviceWorkers:e.serviceWorkers??"all",initiator:e.initiator??"",destination:e.destination??"",priority:e.priority??null,origin:e.origin??"client",policyContainer:e.policyContainer??"client",referrer:e.referrer??"client",referrerPolicy:e.referrerPolicy??"",mode:e.mode??"no-cors",useCORSPreflightFlag:e.useCORSPreflightFlag??!1,credentials:e.credentials??"same-origin",useCredentials:e.useCredentials??!1,cache:e.cache??"default",redirect:e.redirect??"follow",integrity:e.integrity??"",cryptoGraphicsNonceMetadata:e.cryptoGraphicsNonceMetadata??"",parserMetadata:e.parserMetadata??"",reloadNavigation:e.reloadNavigation??!1,historyNavigation:e.historyNavigation??!1,userActivation:e.userActivation??!1,taintedOrigin:e.taintedOrigin??!1,redirectCount:e.redirectCount??0,responseTainting:e.responseTainting??"basic",preventNoCacheCacheControlHeaderModification:e.preventNoCacheCacheControlHeaderModification??!1,done:e.done??!1,timingAllowFailed:e.timingAllowFailed??!1,urlList:e.urlList,url:e.urlList[0],headersList:e.headersList?new c(e.headersList):new c}}function j(e){const t=z({...e,body:null});return null!=e.body&&(t.body=n(e.body)),t}function $(e,t,A,r){const s=new O(U);Z(s,e),q(s,t),J(s,A);const n=new o(U);return _(s,n),h(n,e.headersList),g(n,r),s}Reflect.deleteProperty(O,"setRequestSignal"),Reflect.deleteProperty(O,"getRequestDispatcher"),Reflect.deleteProperty(O,"setRequestDispatcher"),Reflect.deleteProperty(O,"setRequestHeaders"),Reflect.deleteProperty(O,"getRequestState"),Reflect.deleteProperty(O,"setRequestState"),s(O,X),Object.defineProperties(O.prototype,{method:b,url:b,headers:b,redirect:b,clone:b,signal:b,duplex:b,destination:b,body:b,bodyUsed:b,isHistoryNavigation:b,isReloadNavigation:b,keepalive:b,integrity:b,cache:b,credentials:b,attribute:b,referrerPolicy:b,referrer:b,mode:b,[Symbol.toStringTag]:{value:"Request",configurable:!0}}),k.is.Request=k.util.MakeTypeAssertion(O),k.converters.RequestInfo=function(e){return"string"==typeof e?k.converters.USVString(e):k.is.Request(e)?e:k.converters.USVString(e)},k.converters.RequestInit=k.dictionaryConverter([{key:"method",converter:k.converters.ByteString},{key:"headers",converter:k.converters.HeadersInit},{key:"body",converter:k.nullableConverter(k.converters.BodyInit)},{key:"referrer",converter:k.converters.USVString},{key:"referrerPolicy",converter:k.converters.DOMString,allowedValues:f},{key:"mode",converter:k.converters.DOMString,allowedValues:y},{key:"credentials",converter:k.converters.DOMString,allowedValues:D},{key:"cache",converter:k.converters.DOMString,allowedValues:S},{key:"redirect",converter:k.converters.DOMString,allowedValues:m},{key:"integrity",converter:k.converters.DOMString},{key:"keepalive",converter:k.converters.boolean},{key:"signal",converter:k.nullableConverter((e=>k.converters.AbortSignal(e,"RequestInit","signal")))},{key:"window",converter:k.converters.any},{key:"duplex",converter:k.converters.DOMString,allowedValues:w},{key:"dispatcher",converter:k.converters.any}]),e.exports={Request:O,makeRequest:z,fromInnerRequest:$,cloneRequest:j,getRequestDispatcher:W,getRequestState:X}},4821:(e,t,A)=>{"use strict";const{Headers:r,HeadersList:s,fill:n,getHeadersGuard:i,setHeadersGuard:o,setHeadersList:a}=A(6558),{extractBody:c,cloneBody:g,mixinBody:l,streamRegistry:h,bodyUnusable:d}=A(2530),u=A(2858),E=A(7975),{kEnumerableProperty:I}=u,{isValidReasonPhrase:Q,isCancelled:B,isAborted:C,serializeJavascriptValueToJSONString:p,isErrorLike:f,isomorphicEncode:m,environmentSettingsObject:y}=A(6686),{redirectStatusSet:D,nullBodyStatus:S}=A(9441),{webidl:w}=A(6097),{URLSerializer:b}=A(9934),{kConstruct:R}=A(257),N=A(4589),k=new TextEncoder("utf-8");class F{#Ce;#ge;static error(){return G(Y(),"immutable")}static json(e,t=void 0){w.argumentLengthCheck(arguments,1,"Response.json"),null!==t&&(t=w.converters.ResponseInit(t));const A=k.encode(p(e)),r=c(A),s=G(H({}),"response");return V(s,t,{body:r[0],type:"application/json"}),s}static redirect(e,t=302){let A;w.argumentLengthCheck(arguments,1,"Response.redirect"),e=w.converters.USVString(e),t=w.converters["unsigned short"](t);try{A=new URL(e,y.settingsObject.baseUrl)}catch(t){throw new TypeError(`Failed to parse URL from ${e}`,{cause:t})}if(!D.has(t))throw new RangeError(`Invalid status code ${t}`);const r=G(H({}),"immutable");r.#ge.status=t;const s=m(b(A));return r.#ge.headersList.append("location",s,!0),r}constructor(e=null,t=void 0){if(w.util.markAsUncloneable(this),e===R)return;null!==e&&(e=w.converters.BodyInit(e,"Response","body")),t=w.converters.ResponseInit(t),this.#ge=H({}),this.#Ce=new r(R),o(this.#Ce,"response"),a(this.#Ce,this.#ge.headersList);let A=null;if(null!=e){const[t,r]=c(e);A={body:t,type:r}}V(this,t,A)}get type(){return w.brandCheck(this,F),this.#ge.type}get url(){w.brandCheck(this,F);const e=this.#ge.urlList,t=e[e.length-1]??null;return null===t?"":b(t,!0)}get redirected(){return w.brandCheck(this,F),this.#ge.urlList.length>1}get status(){return w.brandCheck(this,F),this.#ge.status}get ok(){return w.brandCheck(this,F),this.#ge.status>=200&&this.#ge.status<=299}get statusText(){return w.brandCheck(this,F),this.#ge.statusText}get headers(){return w.brandCheck(this,F),this.#Ce}get body(){return w.brandCheck(this,F),this.#ge.body?this.#ge.body.stream:null}get bodyUsed(){return w.brandCheck(this,F),!!this.#ge.body&&u.isDisturbed(this.#ge.body.stream)}clone(){if(w.brandCheck(this,F),d(this.#ge))throw w.errors.exception({header:"Response.clone",message:"Body has already been consumed."});const e=L(this.#ge);return this.#ge.body?.stream&&h.register(this,new WeakRef(this.#ge.body.stream)),G(e,i(this.#Ce))}[E.inspect.custom](e,t){null===t.depth&&(t.depth=2),t.colors??=!0;const A={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${E.formatWithOptions(t,A)}`}static getResponseHeaders(e){return e.#Ce}static setResponseHeaders(e,t){e.#Ce=t}static getResponseState(e){return e.#ge}static setResponseState(e,t){e.#ge=t}}const{getResponseHeaders:U,setResponseHeaders:M,getResponseState:T,setResponseState:v}=F;function L(e){if(e.internalResponse)return P(L(e.internalResponse),e.type);const t=H({...e,body:null});return null!=e.body&&(t.body=g(e.body)),t}function H(e){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...e,headersList:e?.headersList?new s(e?.headersList):new s,urlList:e?.urlList?[...e.urlList]:[]}}function Y(e){return H({type:"error",status:0,error:f(e)?e:new Error(e?String(e):e),aborted:e&&"AbortError"===e.name})}function x(e,t){return t={internalResponse:e,...t},new Proxy(e,{get:(e,A)=>A in t?t[A]:e[A],set:(e,A,r)=>(N(!(A in t)),e[A]=r,!0)})}function P(e,t){return"basic"===t?x(e,{type:"basic",headersList:e.headersList}):"cors"===t?x(e,{type:"cors",headersList:e.headersList}):"opaque"===t?x(e,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null}):"opaqueredirect"===t?x(e,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null}):void N(!1)}function V(e,t,A){if(null!==t.status&&(t.status<200||t.status>599))throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');if("statusText"in t&&null!=t.statusText&&!Q(String(t.statusText)))throw new TypeError("Invalid statusText");if("status"in t&&null!=t.status&&(T(e).status=t.status),"statusText"in t&&null!=t.statusText&&(T(e).statusText=t.statusText),"headers"in t&&null!=t.headers&&n(U(e),t.headers),A){if(S.includes(e.status))throw w.errors.exception({header:"Response constructor",message:`Invalid response status code ${e.status}`});T(e).body=A.body,null==A.type||T(e).headersList.contains("content-type",!0)||T(e).headersList.append("content-type",A.type,!0)}}function G(e,t){const A=new F(R);v(A,e);const s=new r(R);return M(A,s),a(s,e.headersList),o(s,t),e.body?.stream&&h.register(A,new WeakRef(e.body.stream)),A}Reflect.deleteProperty(F,"getResponseHeaders"),Reflect.deleteProperty(F,"setResponseHeaders"),Reflect.deleteProperty(F,"getResponseState"),Reflect.deleteProperty(F,"setResponseState"),l(F,T),Object.defineProperties(F.prototype,{type:I,url:I,status:I,ok:I,redirected:I,statusText:I,headers:I,clone:I,body:I,bodyUsed:I,[Symbol.toStringTag]:{value:"Response",configurable:!0}}),Object.defineProperties(F,{json:I,redirect:I,error:I}),w.converters.XMLHttpRequestBodyInit=function(e,t,A){return"string"==typeof e?w.converters.USVString(e,t,A):w.is.Blob(e)||w.is.BufferSource(e)||w.is.FormData(e)||w.is.URLSearchParams(e)?e:w.converters.DOMString(e,t,A)},w.converters.BodyInit=function(e,t,A){return w.is.ReadableStream(e)||e?.[Symbol.asyncIterator]?e:w.converters.XMLHttpRequestBodyInit(e,t,A)},w.converters.ResponseInit=w.dictionaryConverter([{key:"status",converter:w.converters["unsigned short"],defaultValue:()=>200},{key:"statusText",converter:w.converters.ByteString,defaultValue:()=>""},{key:"headers",converter:w.converters.HeadersInit}]),w.is.Response=w.util.MakeTypeAssertion(F),e.exports={isNetworkError:function(e){return"error"===e.type&&0===e.status},makeNetworkError:Y,makeResponse:H,makeAppropriateNetworkError:function(e,t=null){return N(B(e)),C(e)?Y(Object.assign(new DOMException("The operation was aborted.","AbortError"),{cause:t})):Y(Object.assign(new DOMException("Request was cancelled."),{cause:t}))},filterResponse:P,Response:F,cloneResponse:L,fromInnerResponse:G,getResponseState:T}},6686:(e,t,A)=>{"use strict";const{Transform:r}=A(7075),s=A(8522),{redirectStatusSet:n,referrerPolicyTokens:i,badPortsSet:o}=A(9441),{getGlobalOrigin:a}=A(2837),{collectASequenceOfCodePoints:c,collectAnHTTPQuotedString:g,removeChars:l,parseMIMEType:h}=A(9934),{performance:d}=A(643),{ReadableStreamFrom:u,isValidHTTPToken:E,normalizedMethodRecordsBase:I}=A(2858),Q=A(4589),{isUint8Array:B}=A(3429),{webidl:C}=A(6097);function p(e){const t=e.urlList,A=t.length;return 0===A?null:t[A-1].toString()}function f(e){for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(A>126||A<32)return!1}return!0}function m(e){return e.urlList[e.urlList.length-1]}const y=E;function D(e){return!1===("\t"===e[0]||" "===e[0]||"\t"===e[e.length-1]||" "===e[e.length-1]||e.includes("\n")||e.includes("\r")||e.includes("\0"))}function S(e,t){return e}function w(){return{referrerPolicy:"strict-origin-when-cross-origin"}}function b(e,t=!1){return Q(C.is.URL(e)),Y(e=new URL(e))?"no-referrer":(e.username="",e.password="",e.hash="",!0===t&&(e.pathname="",e.search=""),e)}const R=RegExp.prototype.test.bind(/^127\.(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){2}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)$/),N=RegExp.prototype.test.bind(/^(?:(?:0{1,4}:){7}|(?:0{1,4}:){1,6}:|::)0{0,3}1$/);function k(e){return e.includes(":")?("["===e[0]&&"]"===e[e.length-1]&&(e=e.slice(1,-1)),N(e)):R(e)}function F(e){return!!C.is.URL(e)&&("about:blank"===e.href||"about:srcdoc"===e.href||("data:"===e.protocol||("blob:"===e.protocol||!(null==(t=e.origin)||"null"===t||"https:"!==(t=new URL(t)).protocol&&"wss:"!==t.protocol&&!k(t.hostname)&&"localhost"!==t.hostname&&"localhost."!==t.hostname&&!t.hostname.endsWith(".localhost")&&!t.hostname.endsWith(".localhost.")&&"file:"!==t.protocol))));var t}function U(e,t){return e.origin===t.origin&&"null"===e.origin||e.protocol===t.protocol&&e.hostname===t.hostname&&e.port===t.port}const M=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function T(e,t,A=0,r=1){class s{#Ke;#et;#tt;constructor(e,t){this.#Ke=e,this.#et=t,this.#tt=0}next(){if("object"!=typeof this||null===this||!(#Ke in this))throw new TypeError(`'next' called on an object that does not implement interface ${e} Iterator.`);const s=this.#tt,n=t(this.#Ke);if(s>=n.length)return{value:void 0,done:!0};const{[A]:i,[r]:o}=n[s];let a;switch(this.#tt=s+1,this.#et){case"key":a=i;break;case"value":a=o;break;case"key+value":a=[i,o]}return{value:a,done:!1}}}return delete s.prototype.constructor,Object.setPrototypeOf(s.prototype,M),Object.defineProperties(s.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${e} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(e,t){return new s(e,t)}}const v=/[^\x00-\xFF]/;function L(e){return Q(!v.test(e)),e}async function H(e,t,A){try{const r=[];let s=0;for(;;){const{done:n,value:i}=await e.read();if(n)return void t(Buffer.concat(r,s));if(!B(i))return void A(new TypeError("Received non-Uint8Array chunk"));r.push(i),s+=i.length}}catch(e){A(e)}}function Y(e){Q("protocol"in e);const t=e.protocol;return"about:"===t||"blob:"===t||"data:"===t}function x(e){return"string"==typeof e&&":"===e[5]&&"h"===e[0]&&"t"===e[1]&&"t"===e[2]&&"p"===e[3]&&"s"===e[4]||"https:"===e.protocol}function P(e){Q("protocol"in e);const t=e.protocol;return"http:"===t||"https:"===t}class V extends r{#At;constructor(e){super(),this.#At=e}_transform(e,t,A){if(!this._inflateStream){if(0===e.length)return void A();this._inflateStream=8==(15&e[0])?s.createInflate(this.#At):s.createInflateRaw(this.#At),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",(()=>this.push(null))),this._inflateStream.on("error",(e=>this.destroy(e)))}this._inflateStream.write(e,t,A)}_final(e){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),e()}}function G(e,t){const A=t.get(e,!0);return null===A?null:function(e){const t=e,A={position:0},r=[];let s="";for(;A.position<t.length;){if(s+=c((e=>'"'!==e&&","!==e),t,A),A.position<t.length)if(34===t.charCodeAt(A.position)){if(s+=g(t,A),A.position<t.length)continue}else Q(44===t.charCodeAt(A.position)),A.position++;s=l(s,!0,!0,(e=>9===e||32===e)),r.push(s),s=""}return r}(A)}const O=new TextDecoder;class J{get baseUrl(){return a()}get origin(){return this.baseUrl?.origin}policyContainer={referrerPolicy:"strict-origin-when-cross-origin"}}const W=new class{settingsObject=new J};e.exports={isAborted:function(e){return"aborted"===e.controller.state},isCancelled:function(e){return"aborted"===e.controller.state||"terminated"===e.controller.state},isValidEncodedURL:f,ReadableStreamFrom:u,tryUpgradeRequestToAPotentiallyTrustworthyURL:function(e){},clampAndCoarsenConnectionTimingInfo:function(e,t,A){return!e?.startTime||e.startTime<t?{domainLookupStartTime:t,domainLookupEndTime:t,connectionStartTime:t,connectionEndTime:t,secureConnectionStartTime:t,ALPNNegotiatedProtocol:e?.ALPNNegotiatedProtocol}:{domainLookupStartTime:S(e.domainLookupStartTime),domainLookupEndTime:S(e.domainLookupEndTime),connectionStartTime:S(e.connectionStartTime),connectionEndTime:S(e.connectionEndTime),secureConnectionStartTime:S(e.secureConnectionStartTime),ALPNNegotiatedProtocol:e.ALPNNegotiatedProtocol}},coarsenedSharedCurrentTime:function(e){return S(d.now())},determineRequestsReferrer:function(e){const t=e.referrerPolicy;Q(t);let A=null;if("client"===e.referrer){const e=a();if(!e||"null"===e.origin)return"no-referrer";A=new URL(e)}else C.is.URL(e.referrer)&&(A=e.referrer);let r=b(A);const s=b(A,!0);switch(r.toString().length>4096&&(r=s),t){case"no-referrer":return"no-referrer";case"origin":return null!=s?s:b(A,!0);case"unsafe-url":return r;case"strict-origin":{const t=m(e);return F(r)&&!F(t)?"no-referrer":s}case"strict-origin-when-cross-origin":{const t=m(e);return U(r,t)?r:F(r)&&!F(t)?"no-referrer":s}case"same-origin":return U(e,r)?r:"no-referrer";case"origin-when-cross-origin":return U(e,r)?r:s;case"no-referrer-when-downgrade":{const t=m(e);return F(r)&&!F(t)?"no-referrer":r}}},makePolicyContainer:w,clonePolicyContainer:function(e){return{referrerPolicy:e.referrerPolicy}},appendFetchMetadata:function(e){let t=null;t=e.mode,e.headersList.set("sec-fetch-mode",t,!0)},appendRequestOriginHeader:function(e){let t=e.origin;if("client"!==t&&void 0!==t)if("cors"===e.responseTainting||"websocket"===e.mode)e.headersList.append("origin",t,!0);else if("GET"!==e.method&&"HEAD"!==e.method){switch(e.referrerPolicy){case"no-referrer":t=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":e.origin&&x(e.origin)&&!x(m(e))&&(t=null);break;case"same-origin":U(e,m(e))||(t=null)}e.headersList.append("origin",t,!0)}},TAOCheck:function(){return"success"},corsCheck:function(){return"success"},crossOriginResourcePolicyCheck:function(){return"allowed"},createOpaqueTimingInfo:function(e){return{startTime:e.startTime??0,redirectStartTime:0,redirectEndTime:0,postRedirectStartTime:e.startTime??0,finalServiceWorkerStartTime:0,finalNetworkResponseStartTime:0,finalNetworkRequestStartTime:0,endTime:0,encodedBodySize:0,decodedBodySize:0,finalConnectionTimingInfo:null}},setRequestReferrerPolicyOnRedirect:function(e,t){const A=function(e){const t=(e.headersList.get("referrer-policy",!0)??"").split(",");let A="";if(t.length)for(let e=t.length;0!==e;e--){const r=t[e-1].trim();if(i.has(r)){A=r;break}}return A}(t);""!==A&&(e.referrerPolicy=A)},isValidHTTPToken:E,requestBadPort:function(e){const t=m(e);return P(t)&&o.has(t.port)?"blocked":"allowed"},requestCurrentURL:m,responseURL:p,responseLocationURL:function(e,t){if(!n.has(e.status))return null;let A=e.headersList.get("location",!0);var r;return null!==A&&D(A)&&(f(A)||(r=A,A=Buffer.from(r,"binary").toString("utf8")),A=new URL(A,p(e))),A&&!A.hash&&(A.hash=t),A},isURLPotentiallyTrustworthy:F,isValidReasonPhrase:function(e){for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(!(9===A||A>=32&&A<=126||A>=128&&A<=255))return!1}return!0},sameOrigin:U,normalizeMethod:function(e){return I[e.toLowerCase()]??e},serializeJavascriptValueToJSONString:function(e){const t=JSON.stringify(e);if(void 0===t)throw new TypeError("Value is not JSON serializable");return Q("string"==typeof t),t},iteratorMixin:function(e,t,A,r=0,s=1){const n=T(e,A,r,s),i={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return C.brandCheck(this,t),n(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return C.brandCheck(this,t),n(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return C.brandCheck(this,t),n(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(A,r=globalThis){if(C.brandCheck(this,t),C.argumentLengthCheck(arguments,1,`${e}.forEach`),"function"!=typeof A)throw new TypeError(`Failed to execute 'forEach' on '${e}': parameter 1 is not of type 'Function'.`);for(const{0:e,1:t}of n(this,"key+value"))A.call(r,t,e,this)}}};return Object.defineProperties(t.prototype,{...i,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:i.entries.value}})},createIterator:T,isValidHeaderName:y,isValidHeaderValue:D,isErrorLike:function(e){return e instanceof Error||"Error"===e?.constructor?.name||"DOMException"===e?.constructor?.name},fullyReadBody:function(e,t,A){const r=t,s=A;try{H(e.stream.getReader(),r,s)}catch(e){s(e)}},readableStreamClose:function(e){try{e.close(),e.byobRequest?.respond(0)}catch(e){if(!e.message.includes("Controller is already closed")&&!e.message.includes("ReadableStream is already closed"))throw e}},isomorphicEncode:L,urlIsLocal:Y,urlHasHttpsScheme:x,urlIsHttpHttpsScheme:P,readAllBytes:H,simpleRangeHeaderValue:function(e,t){const A=e;if(!A.startsWith("bytes"))return"failure";const r={position:5};if(t&&c((e=>"\t"===e||" "===e),A,r),61!==A.charCodeAt(r.position))return"failure";r.position++,t&&c((e=>"\t"===e||" "===e),A,r);const s=c((e=>{const t=e.charCodeAt(0);return t>=48&&t<=57}),A,r),n=s.length?Number(s):null;if(t&&c((e=>"\t"===e||" "===e),A,r),45!==A.charCodeAt(r.position))return"failure";r.position++,t&&c((e=>"\t"===e||" "===e),A,r);const i=c((e=>{const t=e.charCodeAt(0);return t>=48&&t<=57}),A,r),o=i.length?Number(i):null;return r.position<A.length||null===o&&null===n||n>o?"failure":{rangeStartValue:n,rangeEndValue:o}},buildContentRange:function(e,t,A){let r="bytes ";return r+=L(`${e}`),r+="-",r+=L(`${t}`),r+="/",r+=L(`${A}`),r},createInflate:function(e){return new V(e)},extractMimeType:function(e){let t=null,A=null,r=null;const s=G("content-type",e);if(null===s)return"failure";for(const e of s){const s=h(e);"failure"!==s&&"*/*"!==s.essence&&(r=s,r.essence!==A?(t=null,r.parameters.has("charset")&&(t=r.parameters.get("charset")),A=r.essence):r.parameters.has("charset")||null===t||r.parameters.set("charset",t))}return null==r?"failure":r},getDecodeSplit:G,utf8DecodeBytes:function(e){return 0===e.length?"":(239===e[0]&&187===e[1]&&191===e[2]&&(e=e.subarray(3)),O.decode(e))},environmentSettingsObject:W,isOriginIPPotentiallyTrustworthy:k}},7420:(e,t,A)=>{"use strict";const r=A(4589),s=new Map([["sha256",0],["sha384",1],["sha512",2]]);let n;try{n=A(7598);const e=n.getHashes();0===e.length&&s.clear();for(const t of s.keys())!1===e.includes(t)&&s.delete(t)}catch{s.clear()}const i=Map.prototype.get.bind(s),o=Map.prototype.has.bind(s),a=void 0===n||0===s.size?()=>!0:(e,t)=>{const A=g(t);if(0===A.length)return!0;const r=c(A);for(const t of r){const A=t.alg,r=t.val;if(h(l(A,e),r))return!0}return!1};function c(e){const t=[];let A=null;for(const s of e){if(r(o(s.alg),"Invalid SRI hash algorithm token"),0===t.length){t.push(s),A=s;continue}const e=A.alg,n=i(e),a=s.alg,c=i(a);c<n||(c>n?(A=s,t[0]=s,t.length=1):t.push(s))}return t}function g(e){const t=[];for(const A of e.split(" ")){const e=A.split("?",1)[0];let r="";const s=[e.slice(0,6),e.slice(7)],n=s[0];if(!o(n))continue;s[1]&&(r=s[1]);const i={alg:n,val:r};t.push(i)}return t}const l=(e,t)=>n.hash(e,t,"base64");function h(e,t){let A=e.length;0!==A&&"="===e[A-1]&&(A-=1),0!==A&&"="===e[A-1]&&(A-=1);let r=t.length;if(0!==r&&"="===t[r-1]&&(r-=1),0!==r&&"="===t[r-1]&&(r-=1),A!==r)return!1;for(let r=0;r<A;++r)if(!(e[r]===t[r]||"+"===e[r]&&"-"===t[r]||"/"===e[r]&&"_"===t[r]))return!1;return!0}e.exports={applyAlgorithmToBytes:l,bytesMatch:a,caseSensitiveMatch:h,isValidSRIHashAlgorithm:o,getStrongestMetadata:c,parseMetadata:g}},6097:(e,t,A)=>{"use strict";const{types:r,inspect:s}=A(7975),{markAsUncloneable:n}=A(5919),i=Function.call.bind(Function.prototype[Symbol.hasInstance]),o={converters:{},util:{},errors:{},is:{}};o.errors.exception=function(e){return new TypeError(`${e.header}: ${e.message}`)},o.errors.conversionFailed=function(e){const t=1===e.types.length?"":" one of",A=`${e.argument} could not be converted to${t}: ${e.types.join(", ")}.`;return o.errors.exception({header:e.prefix,message:A})},o.errors.invalidArgument=function(e){return o.errors.exception({header:e.prefix,message:`"${e.value}" is an invalid ${e.type}.`})},o.brandCheck=function(e,t){if(!i(t,e)){const e=new TypeError("Illegal invocation");throw e.code="ERR_INVALID_THIS",e}},o.brandCheckMultiple=function(e){const t=e.map((e=>o.util.MakeTypeAssertion(e)));return e=>{if(t.every((t=>!t(e)))){const e=new TypeError("Illegal invocation");throw e.code="ERR_INVALID_THIS",e}}},o.argumentLengthCheck=function({length:e},t,A){if(e<t)throw o.errors.exception({message:`${t} argument${1!==t?"s":""} required, but${e?" only":""} ${e} found.`,header:A})},o.illegalConstructor=function(){throw o.errors.exception({header:"TypeError",message:"Illegal constructor"})},o.util.MakeTypeAssertion=function(e){return t=>i(e,t)},o.util.Type=function(e){switch(typeof e){case"undefined":return 1;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"bigint":return 6;case"function":case"object":return null===e?7:8}},o.util.Types={UNDEFINED:1,BOOLEAN:2,STRING:3,SYMBOL:4,NUMBER:5,BIGINT:6,NULL:7,OBJECT:8},o.util.TypeValueToString=function(e){switch(o.util.Type(e)){case 1:return"Undefined";case 2:return"Boolean";case 3:return"String";case 4:return"Symbol";case 5:return"Number";case 6:return"BigInt";case 7:return"Null";case 8:return"Object"}},o.util.markAsUncloneable=n||(()=>{}),o.util.ConvertToInt=function(e,t,A,r){let s,n;64===t?(s=Math.pow(2,53)-1,n="unsigned"===A?0:Math.pow(-2,53)+1):"unsigned"===A?(n=0,s=Math.pow(2,t)-1):(n=Math.pow(-2,t)-1,s=Math.pow(2,t-1)-1);let i=Number(e);if(0===i&&(i=0),o.util.HasFlag(r,o.attributes.EnforceRange)){if(Number.isNaN(i)||i===Number.POSITIVE_INFINITY||i===Number.NEGATIVE_INFINITY)throw o.errors.exception({header:"Integer conversion",message:`Could not convert ${o.util.Stringify(e)} to an integer.`});if(i=o.util.IntegerPart(i),i<n||i>s)throw o.errors.exception({header:"Integer conversion",message:`Value must be between ${n}-${s}, got ${i}.`});return i}return!Number.isNaN(i)&&o.util.HasFlag(r,o.attributes.Clamp)?(i=Math.min(Math.max(i,n),s),i=Math.floor(i)%2==0?Math.floor(i):Math.ceil(i),i):Number.isNaN(i)||0===i&&Object.is(0,i)||i===Number.POSITIVE_INFINITY||i===Number.NEGATIVE_INFINITY?0:(i=o.util.IntegerPart(i),i%=Math.pow(2,t),"signed"===A&&i>=Math.pow(2,t)-1?i-Math.pow(2,t):i)},o.util.IntegerPart=function(e){const t=Math.floor(Math.abs(e));return e<0?-1*t:t},o.util.Stringify=function(e){switch(o.util.Type(e)){case 4:return`Symbol(${e.description})`;case 8:return s(e);case 3:return`"${e}"`;case 6:return`${e}n`;default:return`${e}`}},o.util.IsResizableArrayBuffer=function(e){if(r.isArrayBuffer(e))return e.resizable;if(r.isSharedArrayBuffer(e))return e.growable;throw o.errors.exception({header:"IsResizableArrayBuffer",message:`"${o.util.Stringify(e)}" is not an array buffer.`})},o.util.HasFlag=function(e,t){return"number"==typeof e&&(e&t)===t},o.sequenceConverter=function(e){return(t,A,r,s)=>{if(8!==o.util.Type(t))throw o.errors.exception({header:A,message:`${r} (${o.util.Stringify(t)}) is not iterable.`});const n="function"==typeof s?s():t?.[Symbol.iterator]?.(),i=[];let a=0;if(void 0===n||"function"!=typeof n.next)throw o.errors.exception({header:A,message:`${r} is not iterable.`});for(;;){const{done:t,value:s}=n.next();if(t)break;i.push(e(s,A,`${r}[${a++}]`))}return i}},o.recordConverter=function(e,t){return(A,s,n)=>{if(8!==o.util.Type(A))throw o.errors.exception({header:s,message:`${n} ("${o.util.TypeValueToString(A)}") is not an Object.`});const i={};if(!r.isProxy(A)){const r=[...Object.getOwnPropertyNames(A),...Object.getOwnPropertySymbols(A)];for(const a of r){const r=o.util.Stringify(a),c=e(a,s,`Key ${r} in ${n}`),g=t(A[a],s,`${n}[${r}]`);i[c]=g}return i}const a=Reflect.ownKeys(A);for(const r of a){const o=Reflect.getOwnPropertyDescriptor(A,r);if(o?.enumerable){const o=e(r,s,n),a=t(A[r],s,n);i[o]=a}}return i}},o.interfaceConverter=function(e,t){return(A,r,s)=>{if(!e(A))throw o.errors.exception({header:r,message:`Expected ${s} ("${o.util.Stringify(A)}") to be an instance of ${t}.`});return A}},o.dictionaryConverter=function(e){return(t,A,r)=>{const s={};if(null!=t&&8!==o.util.Type(t))throw o.errors.exception({header:A,message:`Expected ${t} to be one of: Null, Undefined, Object.`});for(const n of e){const{key:e,defaultValue:i,required:a,converter:c}=n;if(!0===a&&(null==t||!Object.hasOwn(t,e)))throw o.errors.exception({header:A,message:`Missing required key "${e}".`});let g=t?.[e];const l=void 0!==i;if(l&&void 0===g&&(g=i()),a||l||void 0!==g){if(g=c(g,A,`${r}.${e}`),n.allowedValues&&!n.allowedValues.includes(g))throw o.errors.exception({header:A,message:`${g} is not an accepted type. Expected one of ${n.allowedValues.join(", ")}.`});s[e]=g}}return s}},o.nullableConverter=function(e){return(t,A,r)=>null===t?t:e(t,A,r)},o.is.USVString=function(e){return"string"==typeof e&&e.isWellFormed()},o.is.ReadableStream=o.util.MakeTypeAssertion(ReadableStream),o.is.Blob=o.util.MakeTypeAssertion(Blob),o.is.URLSearchParams=o.util.MakeTypeAssertion(URLSearchParams),o.is.File=o.util.MakeTypeAssertion(File),o.is.URL=o.util.MakeTypeAssertion(URL),o.is.AbortSignal=o.util.MakeTypeAssertion(AbortSignal),o.is.MessagePort=o.util.MakeTypeAssertion(MessagePort),o.is.BufferSource=function(e){return r.isArrayBuffer(e)||ArrayBuffer.isView(e)&&r.isArrayBuffer(e.buffer)},o.converters.DOMString=function(e,t,A,r){if(null===e&&o.util.HasFlag(r,o.attributes.LegacyNullToEmptyString))return"";if("symbol"==typeof e)throw o.errors.exception({header:t,message:`${A} is a symbol, which cannot be converted to a DOMString.`});return String(e)},o.converters.ByteString=function(e,t,A){if("symbol"==typeof e)throw o.errors.exception({header:t,message:`${A} is a symbol, which cannot be converted to a ByteString.`});const r=String(e);for(let e=0;e<r.length;e++)if(r.charCodeAt(e)>255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${e} has a value of ${r.charCodeAt(e)} which is greater than 255.`);return r},o.converters.USVString=function(e){return"string"==typeof e?e.toWellFormed():`${e}`.toWellFormed()},o.converters.boolean=function(e){return Boolean(e)},o.converters.any=function(e){return e},o.converters["long long"]=function(e,t,A){return o.util.ConvertToInt(e,64,"signed",0,t,A)},o.converters["unsigned long long"]=function(e,t,A){return o.util.ConvertToInt(e,64,"unsigned",0,t,A)},o.converters["unsigned long"]=function(e,t,A){return o.util.ConvertToInt(e,32,"unsigned",0,t,A)},o.converters["unsigned short"]=function(e,t,A,r){return o.util.ConvertToInt(e,16,"unsigned",r,t,A)},o.converters.ArrayBuffer=function(e,t,A,s){if(8!==o.util.Type(e)||!r.isArrayBuffer(e))throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["ArrayBuffer"]});if(!o.util.HasFlag(s,o.attributes.AllowResizable)&&o.util.IsResizableArrayBuffer(e))throw o.errors.exception({header:t,message:`${A} cannot be a resizable ArrayBuffer.`});return e},o.converters.SharedArrayBuffer=function(e,t,A,s){if(8!==o.util.Type(e)||!r.isSharedArrayBuffer(e))throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["SharedArrayBuffer"]});if(!o.util.HasFlag(s,o.attributes.AllowResizable)&&o.util.IsResizableArrayBuffer(e))throw o.errors.exception({header:t,message:`${A} cannot be a resizable SharedArrayBuffer.`});return e},o.converters.TypedArray=function(e,t,A,s,n){if(8!==o.util.Type(e)||!r.isTypedArray(e)||e.constructor.name!==t.name)throw o.errors.conversionFailed({prefix:A,argument:`${s} ("${o.util.Stringify(e)}")`,types:[t.name]});if(!o.util.HasFlag(n,o.attributes.AllowShared)&&r.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:A,message:`${s} cannot be a view on a shared array buffer.`});if(!o.util.HasFlag(n,o.attributes.AllowResizable)&&o.util.IsResizableArrayBuffer(e.buffer))throw o.errors.exception({header:A,message:`${s} cannot be a view on a resizable array buffer.`});return e},o.converters.DataView=function(e,t,A,s){if(8!==o.util.Type(e)||!r.isDataView(e))throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["DataView"]});if(!o.util.HasFlag(s,o.attributes.AllowShared)&&r.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:t,message:`${A} cannot be a view on a shared array buffer.`});if(!o.util.HasFlag(s,o.attributes.AllowResizable)&&o.util.IsResizableArrayBuffer(e.buffer))throw o.errors.exception({header:t,message:`${A} cannot be a view on a resizable array buffer.`});return e},o.converters.ArrayBufferView=function(e,t,A,s){if(8!==o.util.Type(e)||!r.isArrayBufferView(e))throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["ArrayBufferView"]});if(!o.util.HasFlag(s,o.attributes.AllowShared)&&r.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:t,message:`${A} cannot be a view on a shared array buffer.`});if(!o.util.HasFlag(s,o.attributes.AllowResizable)&&o.util.IsResizableArrayBuffer(e.buffer))throw o.errors.exception({header:t,message:`${A} cannot be a view on a resizable array buffer.`});return e},o.converters.BufferSource=function(e,t,A,s){if(r.isArrayBuffer(e))return o.converters.ArrayBuffer(e,t,A,s);if(r.isArrayBufferView(e))return s&=~o.attributes.AllowShared,o.converters.ArrayBufferView(e,t,A,s);if(r.isSharedArrayBuffer(e))throw o.errors.exception({header:t,message:`${A} cannot be a SharedArrayBuffer.`});throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["ArrayBuffer","ArrayBufferView"]})},o.converters.AllowSharedBufferSource=function(e,t,A,s){if(r.isArrayBuffer(e))return o.converters.ArrayBuffer(e,t,A,s);if(r.isSharedArrayBuffer(e))return o.converters.SharedArrayBuffer(e,t,A,s);if(r.isArrayBufferView(e))return s|=o.attributes.AllowShared,o.converters.ArrayBufferView(e,t,A,s);throw o.errors.conversionFailed({prefix:t,argument:`${A} ("${o.util.Stringify(e)}")`,types:["ArrayBuffer","SharedArrayBuffer","ArrayBufferView"]})},o.converters["sequence<ByteString>"]=o.sequenceConverter(o.converters.ByteString),o.converters["sequence<sequence<ByteString>>"]=o.sequenceConverter(o.converters["sequence<ByteString>"]),o.converters["record<ByteString, ByteString>"]=o.recordConverter(o.converters.ByteString,o.converters.ByteString),o.converters.Blob=o.interfaceConverter(o.is.Blob,"Blob"),o.converters.AbortSignal=o.interfaceConverter(o.is.AbortSignal,"AbortSignal"),o.converters.EventHandlerNonNull=function(e){return 8!==o.util.Type(e)?null:"function"==typeof e?e:()=>{}},o.attributes={Clamp:1,EnforceRange:2,AllowShared:4,AllowResizable:8,LegacyNullToEmptyString:16},e.exports={webidl:o}},8251:(e,t,A)=>{"use strict";const{uid:r,states:s,sentCloseFrameState:n,emptyBuffer:i,opcodes:o}=A(6490),{parseExtensions:a,isClosed:c,isClosing:g,isEstablished:l,validateCloseCodeAndReason:h}=A(8983),{makeRequest:d}=A(4609),{fetching:u}=A(7388),{Headers:E,getHeadersList:I}=A(6558),{getDecodeSplit:Q}=A(6686),{WebsocketFrameSend:B}=A(6834),C=A(4589);let p;try{p=A(7598)}catch{}function f(e,t,A,r=!1){if(t??=null,A??="",r&&h(t,A),c(e.readyState)||g(e.readyState));else if(l(e.readyState))if(e.closeState.has(n.SENT)||e.closeState.has(n.RECEIVED))e.readyState=s.CLOSING;else{const r=new B;0!==A.length&&null===t&&(t=1e3),C(null===t||Number.isInteger(t)),null===t&&0===A.length?r.frameData=i:null!==t&&null===A?(r.frameData=Buffer.allocUnsafe(2),r.frameData.writeUInt16BE(t,0)):null!==t&&null!==A?(r.frameData=Buffer.allocUnsafe(2+Buffer.byteLength(A)),r.frameData.writeUInt16BE(t,0),r.frameData.write(A,2,"utf-8")):r.frameData=i,e.socket.write(r.createFrame(o.CLOSE)),e.closeState.add(n.SENT),e.readyState=s.CLOSING}else m(e),e.readyState=s.CLOSING}function m(e,t,A,r){l(e.readyState)&&f(e,t,A,!1),e.controller.abort(),e.socket?!1===e.socket.destroyed&&e.socket.destroy():e.onSocketClose()}e.exports={establishWebSocketConnection:function(e,t,A,n,i){const o=e;o.protocol="ws:"===e.protocol?"http:":"https:";const c=d({urlList:[o],client:A,serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(i.headers){const e=I(new E(i.headers));c.headersList=e}const g=p.randomBytes(16).toString("base64");c.headersList.append("sec-websocket-key",g,!0),c.headersList.append("sec-websocket-version","13",!0);for(const e of t)c.headersList.append("sec-websocket-protocol",e,!0);return c.headersList.append("sec-websocket-extensions","permessage-deflate; client_max_window_bits",!0),u({request:c,useParallelQueue:!0,dispatcher:i.dispatcher,processResponse(e){if("error"===e.type&&(n.readyState=s.CLOSED),"error"===e.type||101!==e.status)return void m(n,1002,"Received network error or non-101 status code.",e.error);if(0!==t.length&&!e.headersList.get("Sec-WebSocket-Protocol"))return void m(n,1002,"Server did not respond with sent protocols.");if("websocket"!==e.headersList.get("Upgrade")?.toLowerCase())return void m(n,1002,'Server did not set Upgrade header to "websocket".');if("upgrade"!==e.headersList.get("Connection")?.toLowerCase())return void m(n,1002,'Server did not set Connection header to "upgrade".');if(e.headersList.get("Sec-WebSocket-Accept")!==p.createHash("sha1").update(g+r).digest("base64"))return void m(n,1002,"Incorrect hash received in Sec-WebSocket-Accept header.");const A=e.headersList.get("Sec-WebSocket-Extensions");let i;if(null!==A&&(i=a(A),!i.has("permessage-deflate")))return void m(n,1002,"Sec-WebSocket-Extensions header does not match.");const o=e.headersList.get("Sec-WebSocket-Protocol");if(null!==o){if(!Q("sec-websocket-protocol",c.headersList).includes(o))return void m(n,1002,"Protocol was not set in the opening handshake.")}e.socket.on("data",n.onSocketData),e.socket.on("close",n.onSocketClose),e.socket.on("error",n.onSocketError),n.wasEverConnected=!0,n.onConnectionEstablished(e,i)}})},failWebsocketConnection:m,closeWebSocketConnection:f}},6490:e=>{"use strict";const t=Buffer.allocUnsafe(0);e.exports={uid:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",sentCloseFrameState:{SENT:1,RECEIVED:2},staticPropertyDescriptors:{enumerable:!0,writable:!1,configurable:!1},states:{CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},opcodes:{CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},maxUnsigned16Bit:65535,parserStates:{INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},emptyBuffer:t,sendHints:{text:1,typedArray:2,arrayBuffer:3,blob:4}}},878:(e,t,A)=>{"use strict";const{webidl:r}=A(6097),{kEnumerableProperty:s}=A(2858),{kConstruct:n}=A(257);class i extends Event{#rt;constructor(e,t={}){if(e===n)return super(arguments[1],arguments[2]),void r.util.markAsUncloneable(this);const A="MessageEvent constructor";r.argumentLengthCheck(arguments,1,A),super(e=r.converters.DOMString(e,A,"type"),t=r.converters.MessageEventInit(t,A,"eventInitDict")),this.#rt=t,r.util.markAsUncloneable(this)}get data(){return r.brandCheck(this,i),this.#rt.data}get origin(){return r.brandCheck(this,i),this.#rt.origin}get lastEventId(){return r.brandCheck(this,i),this.#rt.lastEventId}get source(){return r.brandCheck(this,i),this.#rt.source}get ports(){return r.brandCheck(this,i),Object.isFrozen(this.#rt.ports)||Object.freeze(this.#rt.ports),this.#rt.ports}initMessageEvent(e,t=!1,A=!1,s=null,n="",o="",a=null,c=[]){return r.brandCheck(this,i),r.argumentLengthCheck(arguments,1,"MessageEvent.initMessageEvent"),new i(e,{bubbles:t,cancelable:A,data:s,origin:n,lastEventId:o,source:a,ports:c})}static createFastMessageEvent(e,t){const A=new i(n,e,t);return A.#rt=t,A.#rt.data??=null,A.#rt.origin??="",A.#rt.lastEventId??="",A.#rt.source??=null,A.#rt.ports??=[],A}}const{createFastMessageEvent:o}=i;delete i.createFastMessageEvent;class a extends Event{#rt;constructor(e,t={}){const A="CloseEvent constructor";r.argumentLengthCheck(arguments,1,A),super(e=r.converters.DOMString(e,A,"type"),t=r.converters.CloseEventInit(t)),this.#rt=t,r.util.markAsUncloneable(this)}get wasClean(){return r.brandCheck(this,a),this.#rt.wasClean}get code(){return r.brandCheck(this,a),this.#rt.code}get reason(){return r.brandCheck(this,a),this.#rt.reason}}class c extends Event{#rt;constructor(e,t){const A="ErrorEvent constructor";r.argumentLengthCheck(arguments,1,A),super(e,t),r.util.markAsUncloneable(this),e=r.converters.DOMString(e,A,"type"),t=r.converters.ErrorEventInit(t??{}),this.#rt=t}get message(){return r.brandCheck(this,c),this.#rt.message}get filename(){return r.brandCheck(this,c),this.#rt.filename}get lineno(){return r.brandCheck(this,c),this.#rt.lineno}get colno(){return r.brandCheck(this,c),this.#rt.colno}get error(){return r.brandCheck(this,c),this.#rt.error}}Object.defineProperties(i.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:!0},data:s,origin:s,lastEventId:s,source:s,ports:s,initMessageEvent:s}),Object.defineProperties(a.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:!0},reason:s,code:s,wasClean:s}),Object.defineProperties(c.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:!0},message:s,filename:s,lineno:s,colno:s,error:s}),r.converters.MessagePort=r.interfaceConverter(r.is.MessagePort,"MessagePort"),r.converters["sequence<MessagePort>"]=r.sequenceConverter(r.converters.MessagePort);const g=[{key:"bubbles",converter:r.converters.boolean,defaultValue:()=>!1},{key:"cancelable",converter:r.converters.boolean,defaultValue:()=>!1},{key:"composed",converter:r.converters.boolean,defaultValue:()=>!1}];r.converters.MessageEventInit=r.dictionaryConverter([...g,{key:"data",converter:r.converters.any,defaultValue:()=>null},{key:"origin",converter:r.converters.USVString,defaultValue:()=>""},{key:"lastEventId",converter:r.converters.DOMString,defaultValue:()=>""},{key:"source",converter:r.nullableConverter(r.converters.MessagePort),defaultValue:()=>null},{key:"ports",converter:r.converters["sequence<MessagePort>"],defaultValue:()=>[]}]),r.converters.CloseEventInit=r.dictionaryConverter([...g,{key:"wasClean",converter:r.converters.boolean,defaultValue:()=>!1},{key:"code",converter:r.converters["unsigned short"],defaultValue:()=>0},{key:"reason",converter:r.converters.USVString,defaultValue:()=>""}]),r.converters.ErrorEventInit=r.dictionaryConverter([...g,{key:"message",converter:r.converters.DOMString,defaultValue:()=>""},{key:"filename",converter:r.converters.USVString,defaultValue:()=>""},{key:"lineno",converter:r.converters["unsigned long"],defaultValue:()=>0},{key:"colno",converter:r.converters["unsigned long"],defaultValue:()=>0},{key:"error",converter:r.converters.any}]),e.exports={MessageEvent:i,CloseEvent:a,ErrorEvent:c,createFastMessageEvent:o}},6834:(e,t,A)=>{"use strict";const{maxUnsigned16Bit:r,opcodes:s}=A(6490),n=8192;let i,o=null,a=n;try{i=A(7598)}catch{i={randomFillSync:function(e,t,A){for(let t=0;t<e.length;++t)e[t]=255*Math.random()|0;return e}}}function c(){return a===n&&(a=0,i.randomFillSync(o??=Buffer.allocUnsafeSlow(n),0,n)),[o[a++],o[a++],o[a++],o[a++]]}e.exports={WebsocketFrameSend:class{constructor(e){this.frameData=e}createFrame(e){const t=this.frameData,A=c(),s=t?.byteLength??0;let n=s,i=6;s>r?(i+=8,n=127):s>125&&(i+=2,n=126);const o=Buffer.allocUnsafe(s+i);o[0]=o[1]=0,o[0]|=128,o[0]=(240&o[0])+e,o[i-4]=A[0],o[i-3]=A[1],o[i-2]=A[2],o[i-1]=A[3],o[1]=n,126===n?o.writeUInt16BE(s,2):127===n&&(o[2]=o[3]=0,o.writeUIntBE(s,4,6)),o[1]|=128;for(let e=0;e<s;++e)o[i+e]=t[e]^A[3&e];return o}static createFastTextFrame(e){const t=c(),A=e.length;for(let r=0;r<A;++r)e[r]^=t[3&r];let n=A,i=6;A>r?(i+=8,n=127):A>125&&(i+=2,n=126);const o=Buffer.allocUnsafeSlow(i);return o[0]=128|s.TEXT,o[1]=128|n,o[i-4]=t[0],o[i-3]=t[1],o[i-2]=t[2],o[i-1]=t[3],126===n?o.writeUInt16BE(A,2):127===n&&(o[2]=o[3]=0,o.writeUIntBE(A,4,6)),[o,e]}},generateMask:c}},8975:(e,t,A)=>{"use strict";const{createInflateRaw:r,Z_DEFAULT_WINDOWBITS:s}=A(8522),{isValidClientWindowBits:n}=A(8983),i=Buffer.from([0,0,255,255]),o=Symbol("kBuffer"),a=Symbol("kLength");e.exports={PerMessageDeflate:class{#st;#k={};constructor(e){this.#k.serverNoContextTakeover=e.has("server_no_context_takeover"),this.#k.serverMaxWindowBits=e.get("server_max_window_bits")}decompress(e,t,A){if(!this.#st){let e=s;if(this.#k.serverMaxWindowBits){if(!n(this.#k.serverMaxWindowBits))return void A(new Error("Invalid server_max_window_bits"));e=Number.parseInt(this.#k.serverMaxWindowBits)}this.#st=r({windowBits:e}),this.#st[o]=[],this.#st[a]=0,this.#st.on("data",(e=>{this.#st[o].push(e),this.#st[a]+=e.length})),this.#st.on("error",(e=>{this.#st=null,A(e)}))}this.#st.write(e),t&&this.#st.write(i),this.#st.flush((()=>{const e=Buffer.concat(this.#st[o],this.#st[a]);this.#st[o].length=0,this.#st[a]=0,A(null,e)}))}}}},834:(e,t,A)=>{"use strict";const{Writable:r}=A(7075),s=A(4589),{parserStates:n,opcodes:i,states:o,emptyBuffer:a,sentCloseFrameState:c}=A(6490),{isValidStatusCode:g,isValidOpcode:l,websocketMessageReceived:h,utf8Decode:d,isControlFrame:u,isTextBinaryFrame:E,isContinuationFrame:I}=A(8983),{failWebsocketConnection:Q}=A(8251),{WebsocketFrameSend:B}=A(6834),{PerMessageDeflate:C}=A(8975);e.exports={ByteParser:class extends r{#nt=[];#it=0;#ot=0;#at=!1;#ge=n.INFO;#ct={};#gt=[];#lt;#v;constructor(e,t){super(),this.#v=e,this.#lt=null==t?new Map:t,this.#lt.has("permessage-deflate")&&this.#lt.set("permessage-deflate",new C(t))}_write(e,t,A){this.#nt.push(e),this.#ot+=e.length,this.#at=!0,this.run(A)}run(e){for(;this.#at;)if(this.#ge===n.INFO){if(this.#ot<2)return e();const t=this.consume(2),A=!!(128&t[0]),r=15&t[0],s=!(128&~t[1]),o=!A&&r!==i.CONTINUATION,a=127&t[1],c=64&t[0],g=32&t[0],h=16&t[0];if(!l(r))return Q(this.#v,1002,"Invalid opcode received"),e();if(s)return Q(this.#v,1002,"Frame cannot be masked"),e();if(0!==c&&!this.#lt.has("permessage-deflate"))return void Q(this.#v,1002,"Expected RSV1 to be clear.");if(0!==g||0!==h)return void Q(this.#v,1002,"RSV1, RSV2, RSV3 must be clear");if(o&&!E(r))return void Q(this.#v,1002,"Invalid frame type was fragmented.");if(E(r)&&this.#gt.length>0)return void Q(this.#v,1002,"Expected continuation frame");if(this.#ct.fragmented&&o)return void Q(this.#v,1002,"Fragmented frame exceeded 125 bytes.");if((a>125||o)&&u(r))return void Q(this.#v,1002,"Control frame either too large or fragmented");if(I(r)&&0===this.#gt.length&&!this.#ct.compressed)return void Q(this.#v,1002,"Unexpected continuation frame");a<=125?(this.#ct.payloadLength=a,this.#ge=n.READ_DATA):126===a?this.#ge=n.PAYLOADLENGTH_16:127===a&&(this.#ge=n.PAYLOADLENGTH_64),E(r)&&(this.#ct.binaryType=r,this.#ct.compressed=0!==c),this.#ct.opcode=r,this.#ct.masked=s,this.#ct.fin=A,this.#ct.fragmented=o}else if(this.#ge===n.PAYLOADLENGTH_16){if(this.#ot<2)return e();const t=this.consume(2);this.#ct.payloadLength=t.readUInt16BE(0),this.#ge=n.READ_DATA}else if(this.#ge===n.PAYLOADLENGTH_64){if(this.#ot<8)return e();const t=this.consume(8),A=t.readUInt32BE(0);if(A>2**31-1)return void Q(this.#v,1009,"Received payload length > 2^31 bytes.");const r=t.readUInt32BE(4);this.#ct.payloadLength=(A<<8)+r,this.#ge=n.READ_DATA}else if(this.#ge===n.READ_DATA){if(this.#ot<this.#ct.payloadLength)return e();const t=this.consume(this.#ct.payloadLength);if(u(this.#ct.opcode))this.#at=this.parseControlFrame(t),this.#ge=n.INFO;else{if(this.#ct.compressed){this.#lt.get("permessage-deflate").decompress(t,this.#ct.fin,((t,A)=>{if(t)Q(this.#v,1007,t.message);else{if(this.writeFragments(A),!this.#ct.fin)return this.#ge=n.INFO,this.#at=!0,void this.run(e);h(this.#v,this.#ct.binaryType,this.consumeFragments()),this.#at=!0,this.#ge=n.INFO,this.run(e)}})),this.#at=!1;break}this.writeFragments(t),!this.#ct.fragmented&&this.#ct.fin&&h(this.#v,this.#ct.binaryType,this.consumeFragments()),this.#ge=n.INFO}}}consume(e){if(e>this.#ot)throw new Error("Called consume() before buffers satiated.");if(0===e)return a;this.#ot-=e;const t=this.#nt[0];if(t.length>e)return this.#nt[0]=t.subarray(e,t.length),t.subarray(0,e);if(t.length===e)return this.#nt.shift();{let t=0;const A=Buffer.allocUnsafeSlow(e);for(;t!==e;){const r=this.#nt[0],s=r.length;if(s+t===e){A.set(this.#nt.shift(),t);break}if(s+t>e){A.set(r.subarray(0,e-t),t),this.#nt[0]=r.subarray(e-t);break}A.set(this.#nt.shift(),t),t+=s}return A}}writeFragments(e){this.#it+=e.length,this.#gt.push(e)}consumeFragments(){const e=this.#gt;if(1===e.length)return this.#it=0,e.shift();let t=0;const A=Buffer.allocUnsafeSlow(this.#it);for(let r=0;r<e.length;++r){const s=e[r];A.set(s,t),t+=s.length}return this.#gt=[],this.#it=0,A}parseCloseBody(e){let t;if(s(1!==e.length),e.length>=2&&(t=e.readUInt16BE(0)),void 0!==t&&!g(t))return{code:1002,reason:"Invalid status code",error:!0};let A=e.subarray(2);239===A[0]&&187===A[1]&&191===A[2]&&(A=A.subarray(3));try{A=d(A)}catch{return{code:1007,reason:"Invalid UTF-8",error:!0}}return{code:t,reason:A,error:!1}}parseControlFrame(e){const{opcode:t,payloadLength:A}=this.#ct;if(t===i.CLOSE){if(1===A)return Q(this.#v,1002,"Received close frame with a 1-byte body."),!1;if(this.#ct.closeInfo=this.parseCloseBody(e),this.#ct.closeInfo.error){const{code:e,reason:t}=this.#ct.closeInfo;return Q(this.#v,e,t),!1}if(!this.#v.closeState.has(c.SENT)&&!this.#v.closeState.has(c.RECEIVED)){let e=a;this.#ct.closeInfo.code&&(e=Buffer.allocUnsafe(2),e.writeUInt16BE(this.#ct.closeInfo.code,0));const t=new B(e);this.#v.socket.write(t.createFrame(i.CLOSE)),this.#v.closeState.add(c.SENT)}return this.#v.readyState=o.CLOSING,this.#v.closeState.add(c.RECEIVED),!1}if(t===i.PING){if(!this.#v.closeState.has(c.RECEIVED)){const t=new B(e);this.#v.socket.write(t.createFrame(i.PONG)),this.#v.onPing(e)}}else t===i.PONG&&this.#v.onPong(e);return!0}get closingInfo(){return this.#ct.closeInfo}}}},2534:(e,t,A)=>{"use strict";const{WebsocketFrameSend:r}=A(6834),{opcodes:s,sendHints:n}=A(6490),i=A(1726);function o(e,t){return new r(function(e,t){switch(t){case n.text:case n.typedArray:return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);case n.arrayBuffer:case n.blob:return new Uint8Array(e)}}(e,t)).createFrame(t===n.text?s.TEXT:s.BINARY)}e.exports={SendQueue:class{#ht=new i;#dt=!1;#ut;constructor(e){this.#ut=e}add(e,t,A){if(A!==n.blob){if(this.#dt){const r={promise:null,callback:t,frame:o(e,A)};this.#ht.push(r)}else if(A===n.text){const{0:A,1:s}=r.createFastTextFrame(e);this.#ut.cork(),this.#ut.write(A),this.#ut.write(s,t),this.#ut.uncork()}else this.#ut.write(o(e,A),t);return}const s={promise:e.arrayBuffer().then((e=>{s.promise=null,s.frame=o(e,A)})),callback:t,frame:null};this.#ht.push(s),this.#dt||this.#Et()}async#Et(){this.#dt=!0;const e=this.#ht;for(;!e.isEmpty();){const t=e.shift();null!==t.promise&&await t.promise,this.#ut.write(t.frame,t.callback),t.callback=t.frame=null}this.#dt=!1}}}},7053:(e,t,A)=>{"use strict";const{webidl:r}=A(6097),{validateCloseCodeAndReason:s}=A(8983),{kConstruct:n}=A(257),{kEnumerableProperty:i}=A(2858);class o extends(function(){class e extends DOMException{get reason(){return""}}return void 0!==(new e).reason?DOMException:new Proxy(DOMException,{construct(e,t,A){const r=Reflect.construct(e,t,e);return Object.setPrototypeOf(r,A.prototype),r}})}()){#It;#W;constructor(e="",t=void 0){if(super(e=r.converters.DOMString(e,"WebSocketError","message"),"WebSocketError"),t===n)return;null!==t&&(t=r.converters.WebSocketCloseInfo(t));let A=t.closeCode??null;const i=t.reason??"";s(A,i),0!==i.length&&null===A&&(A=1e3),this.#It=A,this.#W=i}get closeCode(){return this.#It}get reason(){return this.#W}static createUnvalidatedWebSocketError(e,t,A){const r=new o(e,n);return r.#It=t,r.#W=A,r}}const{createUnvalidatedWebSocketError:a}=o;delete o.createUnvalidatedWebSocketError,Object.defineProperties(o.prototype,{closeCode:i,reason:i,[Symbol.toStringTag]:{value:"WebSocketError",writable:!1,enumerable:!1,configurable:!0}}),r.is.WebSocketError=r.util.MakeTypeAssertion(o),e.exports={WebSocketError:o,createUnvalidatedWebSocketError:a}},27:(e,t,A)=>{"use strict";const{createDeferredPromise:r}=A(9250),{environmentSettingsObject:s}=A(6686),{states:n,opcodes:i,sentCloseFrameState:o}=A(6490),{webidl:a}=A(6097),{getURLRecord:c,isValidSubprotocol:g,isEstablished:l,utf8Decode:h}=A(8983),{establishWebSocketConnection:d,failWebsocketConnection:u,closeWebSocketConnection:E}=A(8251),{channels:I}=A(772),{WebsocketFrameSend:Q}=A(6834),{ByteParser:B}=A(834),{WebSocketError:C,createUnvalidatedWebSocketError:p}=A(7053),{utf8DecodeBytes:f}=A(6686),{kEnumerableProperty:m}=A(2858);let y=!1;class D{#Oe;#Qt;#Bt;#Ct;#pt;#ft;#mt=!1;#v={onConnectionEstablished:(e,t)=>this.#yt(e,t),onMessage:(e,t)=>this.#Dt(e,t),onParserError:e=>u(this.#v,null,e.message),onParserDrain:()=>this.#v.socket.resume(),onSocketData:e=>{this.#St.write(e)||this.#v.socket.pause()},onSocketError:e=>{this.#v.readyState=n.CLOSING,I.socketError.hasSubscribers&&I.socketError.publish(e),this.#v.socket.destroy()},onSocketClose:()=>this.#wt(),onPing:()=>{},onPong:()=>{},readyState:n.CONNECTING,socket:null,closeState:new Set,controller:null,wasEverConnected:!1};#St;constructor(e,t=void 0){y||(process.emitWarning("WebSocketStream is experimental! Expect it to change at any time.",{code:"UNDICI-WSS"}),y=!0),a.argumentLengthCheck(arguments,1,"WebSocket"),e=a.converters.USVString(e),null!==t&&(t=a.converters.WebSocketStreamOptions(t));const A=s.settingsObject.baseUrl,i=c(e,A),o=t.protocols;if(o.length!==new Set(o.map((e=>e.toLowerCase()))).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(o.length>0&&!o.every((e=>g(e))))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(this.#Oe=i.toString(),this.#Qt=r(),this.#Bt=r(),null!=t.signal){const e=t.signal;if(e.aborted)return this.#Qt.reject(e.reason),void this.#Bt.reject(e.reason);e.addEventListener("abort",(()=>{l(this.#v.readyState)||(u(this.#v),this.#v.readyState=n.CLOSING,this.#Qt.reject(e.reason),this.#Bt.reject(e.reason),this.#mt=!0)}),{once:!0})}const h=s.settingsObject;this.#v.controller=d(i,o,h,this.#v,t)}get url(){return this.#Oe.toString()}get opened(){return this.#Qt.promise}get closed(){return this.#Bt.promise}close(e=void 0){null!==e&&(e=a.converters.WebSocketCloseInfo(e));const t=e.closeCode??null,A=e.reason;E(this.#v,t,A,!0)}#bt(e){e=a.converters.WebSocketStreamWrite(e);const t=r();let A=null,s=null;if(a.is.BufferSource(e))A=new Uint8Array(ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e.slice()),s=i.BINARY;else{let r;try{r=a.converters.DOMString(e)}catch(e){return t.reject(e),t.promise}A=(new TextEncoder).encode(r),s=i.TEXT}if(!this.#v.closeState.has(o.SENT)&&!this.#v.closeState.has(o.RECEIVED)){const e=new Q(A);this.#v.socket.write(e.createFrame(s),(()=>{t.resolve(void 0)}))}return t.promise}#yt(e,t){this.#v.socket=e.socket;const A=new B(this.#v,t);A.on("drain",(()=>this.#v.onParserDrain())),A.on("error",(e=>this.#v.onParserError(e))),this.#St=A,this.#v.readyState=n.OPEN;const r=t??"",s=e.headersList.get("sec-websocket-protocol")??"",i=new ReadableStream({start:e=>{this.#pt=e},pull(t){let A;for(;t.desiredSize>0&&null!==(A=e.socket.read());)t.enqueue(A)},cancel:e=>this.#Rt(e)}),o=new WritableStream({write:e=>this.#bt(e),close:()=>E(this.#v,null,null),abort:e=>this.#Nt(e)});this.#Ct=i,this.#ft=o,this.#Qt.resolve({extensions:r,protocol:s,readable:i,writable:o})}#Dt(e,t){if(this.#v.readyState!==n.OPEN)return;let A;if(e===i.TEXT)try{A=h(t)}catch{return void u(this.#v,"Received invalid UTF-8 in text frame.")}else e===i.BINARY&&(A=new Uint8Array(t.buffer,t.byteOffset,t.byteLength));this.#pt.enqueue(A)}#wt(){const e=this.#v.closeState.has(o.SENT)&&this.#v.closeState.has(o.RECEIVED);if(this.#v.readyState=n.CLOSED,this.#mt)return;this.#v.wasEverConnected||this.#Qt.reject(new C("Socket never opened"));const t=this.#St.closingInfo;let A=t?.code??1005;this.#v.closeState.has(o.SENT)||this.#v.closeState.has(o.RECEIVED)||(A=1006);const r=null==t?.reason?"":f(Buffer.from(t.reason));if(e)this.#pt.close(),this.#ft.locked||this.#ft.abort(new DOMException("A closed WebSocketStream cannot be written to","InvalidStateError")),this.#Bt.resolve({closeCode:A,reason:r});else{const e=p("unclean close",A,r);this.#pt.error(e),this.#ft.abort(e),this.#Bt.reject(e)}}#Nt(e){let t=null,A="";a.is.WebSocketError(e)&&(t=e.closeCode,A=e.reason),E(this.#v,t,A)}#Rt(e){this.#Nt(e)}}Object.defineProperties(D.prototype,{url:m,opened:m,closed:m,close:m,[Symbol.toStringTag]:{value:"WebSocketStream",writable:!1,enumerable:!1,configurable:!0}}),a.converters.WebSocketStreamOptions=a.dictionaryConverter([{key:"protocols",converter:a.sequenceConverter(a.converters.USVString),defaultValue:()=>[]},{key:"signal",converter:a.nullableConverter(a.converters.AbortSignal),defaultValue:()=>null}]),a.converters.WebSocketCloseInfo=a.dictionaryConverter([{key:"closeCode",converter:e=>a.converters["unsigned short"](e,a.attributes.EnforceRange)},{key:"reason",converter:a.converters.USVString,defaultValue:()=>""}]),a.converters.WebSocketStreamWrite=function(e){return"string"==typeof e?a.converters.USVString(e):a.converters.BufferSource(e)},e.exports={WebSocketStream:D}},8983:(e,t,A)=>{"use strict";const{states:r,opcodes:s}=A(6490),{isUtf8:n}=A(4573),{collectASequenceOfCodePointsFast:i,removeHTTPWhitespace:o}=A(9934);function a(e){return e===s.CLOSE||e===s.PING||e===s.PONG}function c(e){return e===s.CONTINUATION}function g(e){return e===s.TEXT||e===s.BINARY}const l=(()=>{if("string"==typeof process.versions.icu){const e=new TextDecoder("utf-8",{fatal:!0});return e.decode.bind(e)}return function(e){if(n(e))return e.toString("utf-8");throw new TypeError("Invalid utf-8 received.")}})();e.exports={isConnecting:function(e){return e===r.CONNECTING},isEstablished:function(e){return e===r.OPEN},isClosing:function(e){return e===r.CLOSING},isClosed:function(e){return e===r.CLOSED},fireEvent:function(e,t,A=(e,t)=>new Event(e,t),r={}){const s=A(e,r);t.dispatchEvent(s)},isValidSubprotocol:function(e){if(0===e.length)return!1;for(let t=0;t<e.length;++t){const A=e.charCodeAt(t);if(A<33||A>126||34===A||40===A||41===A||44===A||47===A||58===A||59===A||60===A||61===A||62===A||63===A||64===A||91===A||92===A||93===A||123===A||125===A)return!1}return!0},isValidStatusCode:function(e){return e>=1e3&&e<1015?1004!==e&&1005!==e&&1006!==e:e>=3e3&&e<=4999},websocketMessageReceived:function(e,t,A){e.onMessage(t,A)},utf8Decode:l,isControlFrame:a,isContinuationFrame:c,isTextBinaryFrame:g,isValidOpcode:function(e){return g(e)||c(e)||a(e)},parseExtensions:function(e){const t={position:0},A=new Map;for(;t.position<e.length;){const r=i(";",e,t),[s,n=""]=r.split("=",2);A.set(o(s,!0,!1),o(n,!1,!0)),t.position++}return A},isValidClientWindowBits:function(e){for(let t=0;t<e.length;t++){const A=e.charCodeAt(t);if(A<48||A>57)return!1}return!0},toArrayBuffer:function(e){return e.byteLength===e.buffer.byteLength?e.buffer:new Uint8Array(e).buffer},getURLRecord:function(e,t){let A;try{A=new URL(e,t)}catch(e){throw new DOMException(e,"SyntaxError")}if("http:"===A.protocol?A.protocol="ws:":"https:"===A.protocol&&(A.protocol="wss:"),"ws:"!==A.protocol&&"wss:"!==A.protocol)throw new DOMException("expected a ws: or wss: url","SyntaxError");if(A.hash.length||A.href.endsWith("#"))throw new DOMException("hash","SyntaxError");return A},validateCloseCodeAndReason:function(e,t){if(null!==e&&1e3!==e&&(e<3e3||e>4999))throw new DOMException("invalid code","InvalidAccessError");if(null!==t){const e=Buffer.byteLength(t);if(e>123)throw new DOMException(`Reason must be less than 123 bytes; received ${e}`,"SyntaxError")}}}},2984:(e,t,A)=>{"use strict";const{isArrayBuffer:r}=A(3429),{webidl:s}=A(6097),{URLSerializer:n}=A(9934),{environmentSettingsObject:i}=A(6686),{staticPropertyDescriptors:o,states:a,sentCloseFrameState:c,sendHints:g,opcodes:l}=A(6490),{isConnecting:h,isEstablished:d,isClosing:u,isClosed:E,isValidSubprotocol:I,fireEvent:Q,utf8Decode:B,toArrayBuffer:C,getURLRecord:p}=A(8983),{establishWebSocketConnection:f,closeWebSocketConnection:m,failWebsocketConnection:y}=A(8251),{ByteParser:D}=A(834),{kEnumerableProperty:S}=A(2858),{getGlobalDispatcher:w}=A(9879),{ErrorEvent:b,CloseEvent:R,createFastMessageEvent:N}=A(878),{SendQueue:k}=A(2534),{WebsocketFrameSend:F}=A(6834),{channels:U}=A(772);class M extends EventTarget{#Ge={open:null,error:null,close:null,message:null};#kt=0;#Ft="";#lt="";#Ut;#v={onConnectionEstablished:(e,t)=>this.#yt(e,t),onMessage:(e,t)=>this.#Dt(e,t),onParserError:e=>y(this.#v,null,e.message),onParserDrain:()=>this.#Mt(),onSocketData:e=>{this.#St.write(e)||this.#v.socket.pause()},onSocketError:e=>{this.#v.readyState=a.CLOSING,U.socketError.hasSubscribers&&U.socketError.publish(e),this.#v.socket.destroy()},onSocketClose:()=>this.#wt(),onPing:e=>{U.ping.hasSubscribers&&U.ping.publish({payload:e,websocket:this})},onPong:e=>{U.pong.hasSubscribers&&U.pong.publish({payload:e,websocket:this})},readyState:a.CONNECTING,socket:null,closeState:new Set,controller:null,wasEverConnected:!1};#Oe;#Tt;#St;constructor(e,t=[]){super(),s.util.markAsUncloneable(this);const A="WebSocket constructor";s.argumentLengthCheck(arguments,1,A);const r=s.converters["DOMString or sequence<DOMString> or WebSocketInit"](t,A,"options");e=s.converters.USVString(e),t=r.protocols;const n=i.settingsObject.baseUrl,o=p(e,n);if("string"==typeof t&&(t=[t]),t.length!==new Set(t.map((e=>e.toLowerCase()))).size)throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");if(t.length>0&&!t.every((e=>I(e))))throw new DOMException("Invalid Sec-WebSocket-Protocol value","SyntaxError");this.#Oe=new URL(o.href);const a=i.settingsObject;this.#v.controller=f(o,t,a,this.#v,r),this.#v.readyState=M.CONNECTING,this.#Tt="blob"}close(e=void 0,t=void 0){s.brandCheck(this,M);void 0!==e&&(e=s.converters["unsigned short"](e,"WebSocket.close","code",s.attributes.Clamp)),void 0!==t&&(t=s.converters.USVString(t)),e??=null,t??="",m(this.#v,e,t,!0)}send(e){s.brandCheck(this,M);const t="WebSocket.send";if(s.argumentLengthCheck(arguments,1,t),e=s.converters.WebSocketSendData(e,t,"data"),h(this.#v.readyState))throw new DOMException("Sent before connected.","InvalidStateError");if(d(this.#v.readyState)&&!u(this.#v.readyState))if("string"==typeof e){const t=Buffer.from(e);this.#kt+=t.byteLength,this.#Ut.add(t,(()=>{this.#kt-=t.byteLength}),g.text)}else r(e)?(this.#kt+=e.byteLength,this.#Ut.add(e,(()=>{this.#kt-=e.byteLength}),g.arrayBuffer)):ArrayBuffer.isView(e)?(this.#kt+=e.byteLength,this.#Ut.add(e,(()=>{this.#kt-=e.byteLength}),g.typedArray)):s.is.Blob(e)&&(this.#kt+=e.size,this.#Ut.add(e,(()=>{this.#kt-=e.size}),g.blob))}get readyState(){return s.brandCheck(this,M),this.#v.readyState}get bufferedAmount(){return s.brandCheck(this,M),this.#kt}get url(){return s.brandCheck(this,M),n(this.#Oe)}get extensions(){return s.brandCheck(this,M),this.#lt}get protocol(){return s.brandCheck(this,M),this.#Ft}get onopen(){return s.brandCheck(this,M),this.#Ge.open}set onopen(e){s.brandCheck(this,M),this.#Ge.open&&this.removeEventListener("open",this.#Ge.open);const t=s.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("open",t),this.#Ge.open=e):this.#Ge.open=null}get onerror(){return s.brandCheck(this,M),this.#Ge.error}set onerror(e){s.brandCheck(this,M),this.#Ge.error&&this.removeEventListener("error",this.#Ge.error);const t=s.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("error",t),this.#Ge.error=e):this.#Ge.error=null}get onclose(){return s.brandCheck(this,M),this.#Ge.close}set onclose(e){s.brandCheck(this,M),this.#Ge.close&&this.removeEventListener("close",this.#Ge.close);const t=s.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("close",t),this.#Ge.close=e):this.#Ge.close=null}get onmessage(){return s.brandCheck(this,M),this.#Ge.message}set onmessage(e){s.brandCheck(this,M),this.#Ge.message&&this.removeEventListener("message",this.#Ge.message);const t=s.converters.EventHandlerNonNull(e);null!==t?(this.addEventListener("message",t),this.#Ge.message=e):this.#Ge.message=null}get binaryType(){return s.brandCheck(this,M),this.#Tt}set binaryType(e){s.brandCheck(this,M),this.#Tt="blob"!==e&&"arraybuffer"!==e?"blob":e}#yt(e,t){this.#v.socket=e.socket;const A=new D(this.#v,t);A.on("drain",(()=>this.#v.onParserDrain())),A.on("error",(e=>this.#v.onParserError(e))),this.#St=A,this.#Ut=new k(e.socket),this.#v.readyState=a.OPEN;const r=e.headersList.get("sec-websocket-extensions");null!==r&&(this.#lt=r);const s=e.headersList.get("sec-websocket-protocol");if(null!==s&&(this.#Ft=s),Q("open",this),U.open.hasSubscribers){const t=e.headersList.entries;U.open.publish({address:e.socket.address(),protocol:this.#Ft,extensions:this.#lt,websocket:this,handshakeResponse:{status:e.status,statusText:e.statusText,headers:t}})}}#Dt(e,t){if(this.#v.readyState!==a.OPEN)return;let A;if(e===l.TEXT)try{A=B(t)}catch{return void y(this.#v,1007,"Received invalid UTF-8 in text frame.")}else e===l.BINARY&&(A="blob"===this.#Tt?new Blob([t]):C(t));Q("message",this,N,{origin:this.#Oe.origin,data:A})}#Mt(){this.#v.socket.resume()}#wt(){const e=this.#v.closeState.has(c.SENT)&&this.#v.closeState.has(c.RECEIVED);let t=1005,A="";const r=this.#St?.closingInfo;r&&!r.error&&(t=r.code??1005,A=r.reason),this.#v.readyState=a.CLOSED,this.#v.closeState.has(c.RECEIVED)||(t=1006,Q("error",this,((e,t)=>new b(e,t)),{error:new TypeError(A)})),Q("close",this,((e,t)=>new R(e,t)),{wasClean:e,code:t,reason:A}),U.close.hasSubscribers&&U.close.publish({websocket:this,code:t,reason:A})}static ping(e,t){if(Buffer.isBuffer(t)){if(t.length>125)throw new TypeError("A PING frame cannot have a body larger than 125 bytes.")}else if(void 0!==t)throw new TypeError("Expected buffer payload");const A=e.#v.readyState;if(d(A)&&!u(A)&&!E(A)){const A=new F(t);e.#v.socket.write(A.createFrame(l.PING))}}}const{ping:T}=M;Reflect.deleteProperty(M,"ping"),M.CONNECTING=M.prototype.CONNECTING=a.CONNECTING,M.OPEN=M.prototype.OPEN=a.OPEN,M.CLOSING=M.prototype.CLOSING=a.CLOSING,M.CLOSED=M.prototype.CLOSED=a.CLOSED,Object.defineProperties(M.prototype,{CONNECTING:o,OPEN:o,CLOSING:o,CLOSED:o,url:S,readyState:S,bufferedAmount:S,onopen:S,onerror:S,onclose:S,close:S,onmessage:S,binaryType:S,send:S,extensions:S,protocol:S,[Symbol.toStringTag]:{value:"WebSocket",writable:!1,enumerable:!1,configurable:!0}}),Object.defineProperties(M,{CONNECTING:o,OPEN:o,CLOSING:o,CLOSED:o}),s.converters["sequence<DOMString>"]=s.sequenceConverter(s.converters.DOMString),s.converters["DOMString or sequence<DOMString>"]=function(e,t,A){return s.util.Type(e)===s.util.Types.OBJECT&&Symbol.iterator in e?s.converters["sequence<DOMString>"](e):s.converters.DOMString(e,t,A)},s.converters.WebSocketInit=s.dictionaryConverter([{key:"protocols",converter:s.converters["DOMString or sequence<DOMString>"],defaultValue:()=>[]},{key:"dispatcher",converter:s.converters.any,defaultValue:()=>w()},{key:"headers",converter:s.nullableConverter(s.converters.HeadersInit)}]),s.converters["DOMString or sequence<DOMString> or WebSocketInit"]=function(e){return s.util.Type(e)!==s.util.Types.OBJECT||Symbol.iterator in e?{protocols:s.converters["DOMString or sequence<DOMString>"](e)}:s.converters.WebSocketInit(e)},s.converters.WebSocketSendData=function(e){if(s.util.Type(e)===s.util.Types.OBJECT){if(s.is.Blob(e))return e;if(s.is.BufferSource(e))return e}return s.converters.USVString(e)},e.exports={WebSocket:M,ping:T}},7562:function(e,t,A){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,A,r){void 0===r&&(r=A);var s=Object.getOwnPropertyDescriptor(t,A);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[A]}}),Object.defineProperty(e,r,s)}:function(e,t,A,r){void 0===r&&(r=A),e[r]=t[A]}),s=this&&this.__exportStar||function(e,t){for(var A in e)"default"===A||Object.prototype.hasOwnProperty.call(t,A)||r(t,e,A)};Object.defineProperty(t,"__esModule",{value:!0}),t.sdk=t.MixinDeviceBase=t.ScryptedDeviceBase=void 0,s(A(4192),t);const n=A(4192);A(3339);class i extends n.DeviceBase{constructor(e){super(),this.nativeId=e}get storage(){return this._storage||(this._storage=t.sdk.deviceManager.getDeviceStorage(this.nativeId)),this._storage}get log(){return this._log||(this._log=t.sdk.deviceManager.getDeviceLogger(this.nativeId)),this._log}get console(){return this._console||(this._console=t.sdk.deviceManager.getDeviceConsole(this.nativeId)),this._console}async createMediaObject(e,A){return t.sdk.mediaManager.createMediaObject(e,A,{sourceId:this.id})}getMediaObjectConsole(e){return"string"!=typeof e.sourceId?this.console:t.sdk.deviceManager.getMixinConsole(e.sourceId,this.nativeId)}_lazyLoadDeviceState(){this._deviceState||(this.nativeId?this._deviceState=t.sdk.deviceManager.getDeviceState(this.nativeId):this._deviceState=t.sdk.deviceManager.getDeviceState())}onDeviceEvent(e,A){return t.sdk.deviceManager.onDeviceEvent(this.nativeId,e,A)}}t.ScryptedDeviceBase=i;class o extends n.DeviceBase{constructor(e){super(),this._listeners=new Set,this.mixinDevice=e.mixinDevice,this.mixinDeviceInterfaces=e.mixinDeviceInterfaces,this.mixinStorageSuffix=e.mixinStorageSuffix,this._deviceState=e.mixinDeviceState,this.nativeId=t.sdk.systemManager.getDeviceById(this.id).nativeId,this.mixinProviderNativeId=e.mixinProviderNativeId,this._deviceState.__rpcproxy_traps_all_properties&&"string"==typeof this._deviceState.id&&(this._deviceState=t.sdk.deviceManager.createDeviceState(this._deviceState.id,this._deviceState.setState))}get storage(){if(!this._storage){const e=this.mixinStorageSuffix,A=this.id+(e?":"+e:"");this._storage=t.sdk.deviceManager.getMixinStorage(A,this.mixinProviderNativeId)}return this._storage}get console(){return this._console||(t.sdk.deviceManager.getMixinConsole?this._console=t.sdk.deviceManager.getMixinConsole(this.id,this.mixinProviderNativeId):this._console=t.sdk.deviceManager.getDeviceConsole(this.mixinProviderNativeId)),this._console}async createMediaObject(e,A){return t.sdk.mediaManager.createMediaObject(e,A,{sourceId:this.id})}getMediaObjectConsole(e){return"string"!=typeof e.sourceId?this.console:t.sdk.deviceManager.getMixinConsole(e.sourceId,this.mixinProviderNativeId)}onDeviceEvent(e,A){return t.sdk.deviceManager.onMixinEvent(this.id,this,e,A)}_lazyLoadDeviceState(){}manageListener(e){this._listeners.add(e)}release(){for(const e of this._listeners)e.removeListener()}}t.MixinDeviceBase=o,function(){function e(e){return function(){return this._lazyLoadDeviceState(),this._deviceState?.[e]}}function t(e){return function(t){this._lazyLoadDeviceState(),this._deviceState?this._deviceState[e]=t:console.warn("device state is unavailable. the device must be discovered with deviceManager.onDeviceDiscovered or deviceManager.onDevicesChanged before the state can be set.")}}for(const A of Object.values(n.ScryptedInterfaceProperty))A!==n.ScryptedInterfaceProperty.nativeId&&(Object.defineProperty(i.prototype,A,{set:t(A),get:e(A)}),Object.defineProperty(o.prototype,A,{set:t(A),get:e(A)}))}(),t.sdk={};try{let e=!1;try{process.env.SCRYPTED_SDK_ES_MODULE||process.env.SCRYPTED_SDK_MODULE;const r=process.env.SCRYPTED_SDK_CJS_MODULE||process.env.SCRYPTED_SDK_MODULE;if(r)if("undefined"!=typeof require){const A=require(process.env.SCRYPTED_SDK_MODULE);Object.assign(t.sdk,A.getScryptedStatic()),e=!0}else{const s=A(3891)(r);Object.assign(t.sdk,s.getScryptedStatic()),e=!0}}catch(e){throw console.warn("failed to load sdk module",e),e}if(!e){let e;try{e=pluginRuntimeAPI}catch(e){}Object.assign(t.sdk,{log:deviceManager.getDeviceLogger(void 0),deviceManager,endpointManager,mediaManager,systemManager,pluginHostAPI,...e})}try{t.sdk.systemManager.setScryptedInterfaceDescriptors?.(n.TYPES_VERSION,n.ScryptedInterfaceDescriptors)?.catch((()=>{}))}catch(e){}}catch(e){console.error("sdk initialization error, import @scrypted/types or use @scrypted/client instead",e)}t.default=t.sdk},6117:function(e,t,A){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,A,r){void 0===r&&(r=A);var s=Object.getOwnPropertyDescriptor(t,A);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[A]}}),Object.defineProperty(e,r,s)}:function(e,t,A,r){void 0===r&&(r=A),e[r]=t[A]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var A in e)"default"!==A&&Object.prototype.hasOwnProperty.call(e,A)&&r(t,e,A);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.StorageSettings=void 0;const i=n(A(7562)),{systemManager:o}=i.default;t.StorageSettings=class{constructor(e,t){this.device=e,this.settings=t,this.values={},this.hasValue={};for(const e of Object.keys(t)){const A=t[e],r=()=>this.getItem(e);let s;s="clippath"!==A.type?r:()=>{try{return JSON.parse(r())}catch(e){}},Object.defineProperty(this.values,e,{get:s,set:t=>this.putSetting(e,t),enumerable:!0}),Object.defineProperty(this.hasValue,e,{get:()=>null!=this.device.storage.getItem(e),enumerable:!0})}}get keys(){const e={};for(const t of Object.keys(this.settings))e[t]=t;return e}async getSettings(){const e=await(this.options?.onGet?.()),t=[];for(const[A,r]of Object.entries(this.settings)){let s=Object.assign({},r);e?.[A]&&(s=Object.assign(s,e[A])),s.onGet&&(s=Object.assign(s,await s.onGet())),s.hide||await(this.options?.hide?.[A]?.())||(s.key=A,s.value=this.getItemInternal(A,s,!0),"function"==typeof s.deviceFilter&&(s.deviceFilter=s.deviceFilter.toString()),t.push(s),delete s.onPut,delete s.onGet,delete s.mapPut,delete s.mapGet)}return t}async putSetting(e,t){const A=this.settings[e];let r;return A&&(r=this.getItemInternal(e,A)),this.putSettingInternal(A,r,e,t)}putSettingInternal(e,t,A,r){e?.noStore||(e?.mapPut&&(r=e.mapPut(t,r)),null==r?this.device.storage.removeItem(A):"object"==typeof r?this.device.storage.setItem(A,JSON.stringify(r)):this.device.storage.setItem(A,r?.toString())),e?.onPut?.(t,r),e?.hide||this.device.onDeviceEvent(i.ScryptedInterface.Settings,void 0)}getItemInternal(e,t,A){if(!t)return this.device.storage.getItem(e);const r=function(e,t,A,r){if(null==e)return A();const s=t.multiple?"array":t.type;if("boolean"===s)return"true"===e||"false"!==e&&(A()||!1);if("number"===s){const t=parseFloat(e);return isNaN(t)?A()||0:t}if("integer"===s){const t=parseInt(e);return isNaN(t)?A()||0:t}if("array"===s){if(!e)return A()||[];try{return JSON.parse(e)}catch(e){return A()||[]}}if("device"===s)return r?e:o.getDeviceById(e)||o.getDeviceById(A());if(e&&t.json)try{return JSON.parse(e)}catch(e){return A()}return e||A()}(this.device.storage.getItem(e),t,(()=>null!=t.persistedDefaultValue?(this.putSettingInternal(t,void 0,e,t.persistedDefaultValue),t.persistedDefaultValue):t.defaultValue),A);return t.mapGet?t.mapGet(r):r}getItem(e){return this.getItemInternal(e,this.settings[e])}}},3891:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=3891,e.exports=t},4192:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ScryptedMimeTypes=t.ScryptedInterface=t.MediaPlayerState=t.SecuritySystemObstruction=t.SecuritySystemMode=t.AirQuality=t.AirPurifierMode=t.AirPurifierStatus=t.ChargeState=t.LockState=t.PanTiltZoomMovement=t.ThermostatMode=t.TemperatureUnit=t.FanMode=t.HumidityMode=t.ScryptedDeviceType=t.ScryptedInterfaceDescriptors=t.ScryptedInterfaceMethod=t.ScryptedInterfaceProperty=t.DeviceBase=t.TYPES_VERSION=void 0,t.TYPES_VERSION="0.3.108";var A,r,s,n,i,o,a,c,g,l,h,d,u,E,I,Q,B,C;t.DeviceBase=class{},function(e){e.id="id",e.info="info",e.interfaces="interfaces",e.mixins="mixins",e.name="name",e.nativeId="nativeId",e.pluginId="pluginId",e.providedInterfaces="providedInterfaces",e.providedName="providedName",e.providedRoom="providedRoom",e.providedType="providedType",e.providerId="providerId",e.room="room",e.type="type",e.scryptedRuntimeArguments="scryptedRuntimeArguments",e.on="on",e.brightness="brightness",e.colorTemperature="colorTemperature",e.rgb="rgb",e.hsv="hsv",e.buttons="buttons",e.sensors="sensors",e.running="running",e.paused="paused",e.docked="docked",e.temperatureSetting="temperatureSetting",e.temperature="temperature",e.temperatureUnit="temperatureUnit",e.humidity="humidity",e.audioVolumes="audioVolumes",e.recordingActive="recordingActive",e.ptzCapabilities="ptzCapabilities",e.lockState="lockState",e.entryOpen="entryOpen",e.batteryLevel="batteryLevel",e.chargeState="chargeState",e.online="online",e.fromMimeType="fromMimeType",e.toMimeType="toMimeType",e.converters="converters",e.binaryState="binaryState",e.tampered="tampered",e.sleeping="sleeping",e.powerDetected="powerDetected",e.audioDetected="audioDetected",e.motionDetected="motionDetected",e.ambientLight="ambientLight",e.occupied="occupied",e.flooded="flooded",e.ultraviolet="ultraviolet",e.luminance="luminance",e.position="position",e.securitySystemState="securitySystemState",e.pm10Density="pm10Density",e.pm25Density="pm25Density",e.vocDensity="vocDensity",e.noxDensity="noxDensity",e.co2ppm="co2ppm",e.airQuality="airQuality",e.airPurifierState="airPurifierState",e.filterChangeIndication="filterChangeIndication",e.filterLifeLevel="filterLifeLevel",e.humiditySetting="humiditySetting",e.fan="fan",e.applicationInfo="applicationInfo",e.systemDevice="systemDevice"}(A||(t.ScryptedInterfaceProperty=A={})),function(e){e.listen="listen",e.probe="probe",e.setMixins="setMixins",e.setName="setName",e.setRoom="setRoom",e.setType="setType",e.getPluginJson="getPluginJson",e.turnOff="turnOff",e.turnOn="turnOn",e.setBrightness="setBrightness",e.getTemperatureMaxK="getTemperatureMaxK",e.getTemperatureMinK="getTemperatureMinK",e.setColorTemperature="setColorTemperature",e.setRgb="setRgb",e.setHsv="setHsv",e.pressButton="pressButton",e.sendNotification="sendNotification",e.start="start",e.stop="stop",e.pause="pause",e.resume="resume",e.dock="dock",e.setTemperature="setTemperature",e.setTemperatureUnit="setTemperatureUnit",e.getPictureOptions="getPictureOptions",e.takePicture="takePicture",e.getAudioStream="getAudioStream",e.setAudioVolumes="setAudioVolumes",e.startDisplay="startDisplay",e.stopDisplay="stopDisplay",e.getVideoStream="getVideoStream",e.getVideoStreamOptions="getVideoStreamOptions",e.getPrivacyMasks="getPrivacyMasks",e.setPrivacyMasks="setPrivacyMasks",e.getVideoTextOverlays="getVideoTextOverlays",e.setVideoTextOverlay="setVideoTextOverlay",e.getRecordingStream="getRecordingStream",e.getRecordingStreamCurrentTime="getRecordingStreamCurrentTime",e.getRecordingStreamOptions="getRecordingStreamOptions",e.getRecordingStreamThumbnail="getRecordingStreamThumbnail",e.deleteRecordingStream="deleteRecordingStream",e.setRecordingActive="setRecordingActive",e.ptzCommand="ptzCommand",e.getRecordedEvents="getRecordedEvents",e.getVideoClip="getVideoClip",e.getVideoClips="getVideoClips",e.getVideoClipThumbnail="getVideoClipThumbnail",e.removeVideoClips="removeVideoClips",e.setVideoStreamOptions="setVideoStreamOptions",e.startIntercom="startIntercom",e.stopIntercom="stopIntercom",e.lock="lock",e.unlock="unlock",e.addPassword="addPassword",e.getPasswords="getPasswords",e.removePassword="removePassword",e.activate="activate",e.deactivate="deactivate",e.isReversible="isReversible",e.closeEntry="closeEntry",e.openEntry="openEntry",e.getDevice="getDevice",e.releaseDevice="releaseDevice",e.adoptDevice="adoptDevice",e.discoverDevices="discoverDevices",e.createDevice="createDevice",e.getCreateDeviceSettings="getCreateDeviceSettings",e.reboot="reboot",e.getRefreshFrequency="getRefreshFrequency",e.refresh="refresh",e.getMediaStatus="getMediaStatus",e.load="load",e.seek="seek",e.skipNext="skipNext",e.skipPrevious="skipPrevious",e.convert="convert",e.convertMedia="convertMedia",e.getSettings="getSettings",e.putSetting="putSetting",e.armSecuritySystem="armSecuritySystem",e.disarmSecuritySystem="disarmSecuritySystem",e.setAirPurifierState="setAirPurifierState",e.getReadmeMarkdown="getReadmeMarkdown",e.getOauthUrl="getOauthUrl",e.onOauthCallback="onOauthCallback",e.canMixin="canMixin",e.getMixin="getMixin",e.releaseMixin="releaseMixin",e.onRequest="onRequest",e.onConnection="onConnection",e.onPush="onPush",e.run="run",e.eval="eval",e.loadScripts="loadScripts",e.saveScript="saveScript",e.forkInterface="forkInterface",e.trackObjects="trackObjects",e.getDetectionInput="getDetectionInput",e.getObjectTypes="getObjectTypes",e.detectObjects="detectObjects",e.generateObjectDetections="generateObjectDetections",e.getDetectionModel="getDetectionModel",e.setHumidity="setHumidity",e.setFan="setFan",e.startRTCSignalingSession="startRTCSignalingSession",e.createRTCSignalingSession="createRTCSignalingSession",e.getScryptedUserAccessControl="getScryptedUserAccessControl",e.generateVideoFrames="generateVideoFrames",e.connectStream="connectStream",e.getTTYSettings="getTTYSettings"}(r||(t.ScryptedInterfaceMethod=r={})),t.ScryptedInterfaceDescriptors={ScryptedDevice:{name:"ScryptedDevice",methods:["listen","probe","setMixins","setName","setRoom","setType"],properties:["id","info","interfaces","mixins","name","nativeId","pluginId","providedInterfaces","providedName","providedRoom","providedType","providerId","room","type"]},ScryptedPlugin:{name:"ScryptedPlugin",methods:["getPluginJson"],properties:[]},ScryptedPluginRuntime:{name:"ScryptedPluginRuntime",methods:[],properties:["scryptedRuntimeArguments"]},OnOff:{name:"OnOff",methods:["turnOff","turnOn"],properties:["on"]},Brightness:{name:"Brightness",methods:["setBrightness"],properties:["brightness"]},ColorSettingTemperature:{name:"ColorSettingTemperature",methods:["getTemperatureMaxK","getTemperatureMinK","setColorTemperature"],properties:["colorTemperature"]},ColorSettingRgb:{name:"ColorSettingRgb",methods:["setRgb"],properties:["rgb"]},ColorSettingHsv:{name:"ColorSettingHsv",methods:["setHsv"],properties:["hsv"]},Buttons:{name:"Buttons",methods:[],properties:["buttons"]},PressButtons:{name:"PressButtons",methods:["pressButton"],properties:[]},Sensors:{name:"Sensors",methods:[],properties:["sensors"]},Notifier:{name:"Notifier",methods:["sendNotification"],properties:[]},StartStop:{name:"StartStop",methods:["start","stop"],properties:["running"]},Pause:{name:"Pause",methods:["pause","resume"],properties:["paused"]},Dock:{name:"Dock",methods:["dock"],properties:["docked"]},TemperatureSetting:{name:"TemperatureSetting",methods:["setTemperature"],properties:["temperatureSetting"]},Thermometer:{name:"Thermometer",methods:["setTemperatureUnit"],properties:["temperature","temperatureUnit"]},HumiditySensor:{name:"HumiditySensor",methods:[],properties:["humidity"]},Camera:{name:"Camera",methods:["getPictureOptions","takePicture"],properties:[]},Microphone:{name:"Microphone",methods:["getAudioStream"],properties:[]},AudioVolumeControl:{name:"AudioVolumeControl",methods:["setAudioVolumes"],properties:["audioVolumes"]},Display:{name:"Display",methods:["startDisplay","stopDisplay"],properties:[]},VideoCamera:{name:"VideoCamera",methods:["getVideoStream","getVideoStreamOptions"],properties:[]},VideoCameraMask:{name:"VideoCameraMask",methods:["getPrivacyMasks","setPrivacyMasks"],properties:[]},VideoTextOverlays:{name:"VideoTextOverlays",methods:["getVideoTextOverlays","setVideoTextOverlay"],properties:[]},VideoRecorder:{name:"VideoRecorder",methods:["getRecordingStream","getRecordingStreamCurrentTime","getRecordingStreamOptions","getRecordingStreamThumbnail"],properties:["recordingActive"]},VideoRecorderManagement:{name:"VideoRecorderManagement",methods:["deleteRecordingStream","setRecordingActive"],properties:[]},PanTiltZoom:{name:"PanTiltZoom",methods:["ptzCommand"],properties:["ptzCapabilities"]},EventRecorder:{name:"EventRecorder",methods:["getRecordedEvents"],properties:[]},VideoClips:{name:"VideoClips",methods:["getVideoClip","getVideoClips","getVideoClipThumbnail","removeVideoClips"],properties:[]},VideoCameraConfiguration:{name:"VideoCameraConfiguration",methods:["setVideoStreamOptions"],properties:[]},Intercom:{name:"Intercom",methods:["startIntercom","stopIntercom"],properties:[]},Lock:{name:"Lock",methods:["lock","unlock"],properties:["lockState"]},PasswordStore:{name:"PasswordStore",methods:["addPassword","getPasswords","removePassword"],properties:[]},Scene:{name:"Scene",methods:["activate","deactivate","isReversible"],properties:[]},Entry:{name:"Entry",methods:["closeEntry","openEntry"],properties:[]},EntrySensor:{name:"EntrySensor",methods:[],properties:["entryOpen"]},DeviceProvider:{name:"DeviceProvider",methods:["getDevice","releaseDevice"],properties:[]},DeviceDiscovery:{name:"DeviceDiscovery",methods:["adoptDevice","discoverDevices"],properties:[]},DeviceCreator:{name:"DeviceCreator",methods:["createDevice","getCreateDeviceSettings"],properties:[]},Battery:{name:"Battery",methods:[],properties:["batteryLevel"]},Charger:{name:"Charger",methods:[],properties:["chargeState"]},Reboot:{name:"Reboot",methods:["reboot"],properties:[]},Refresh:{name:"Refresh",methods:["getRefreshFrequency","refresh"],properties:[]},MediaPlayer:{name:"MediaPlayer",methods:["getMediaStatus","load","seek","skipNext","skipPrevious"],properties:[]},Online:{name:"Online",methods:[],properties:["online"]},BufferConverter:{name:"BufferConverter",methods:["convert"],properties:["fromMimeType","toMimeType"]},MediaConverter:{name:"MediaConverter",methods:["convertMedia"],properties:["converters"]},Settings:{name:"Settings",methods:["getSettings","putSetting"],properties:[]},BinarySensor:{name:"BinarySensor",methods:[],properties:["binaryState"]},TamperSensor:{name:"TamperSensor",methods:[],properties:["tampered"]},Sleep:{name:"Sleep",methods:[],properties:["sleeping"]},PowerSensor:{name:"PowerSensor",methods:[],properties:["powerDetected"]},AudioSensor:{name:"AudioSensor",methods:[],properties:["audioDetected"]},MotionSensor:{name:"MotionSensor",methods:[],properties:["motionDetected"]},AmbientLightSensor:{name:"AmbientLightSensor",methods:[],properties:["ambientLight"]},OccupancySensor:{name:"OccupancySensor",methods:[],properties:["occupied"]},FloodSensor:{name:"FloodSensor",methods:[],properties:["flooded"]},UltravioletSensor:{name:"UltravioletSensor",methods:[],properties:["ultraviolet"]},LuminanceSensor:{name:"LuminanceSensor",methods:[],properties:["luminance"]},PositionSensor:{name:"PositionSensor",methods:[],properties:["position"]},SecuritySystem:{name:"SecuritySystem",methods:["armSecuritySystem","disarmSecuritySystem"],properties:["securitySystemState"]},PM10Sensor:{name:"PM10Sensor",methods:[],properties:["pm10Density"]},PM25Sensor:{name:"PM25Sensor",methods:[],properties:["pm25Density"]},VOCSensor:{name:"VOCSensor",methods:[],properties:["vocDensity"]},NOXSensor:{name:"NOXSensor",methods:[],properties:["noxDensity"]},CO2Sensor:{name:"CO2Sensor",methods:[],properties:["co2ppm"]},AirQualitySensor:{name:"AirQualitySensor",methods:[],properties:["airQuality"]},AirPurifier:{name:"AirPurifier",methods:["setAirPurifierState"],properties:["airPurifierState"]},FilterMaintenance:{name:"FilterMaintenance",methods:[],properties:["filterChangeIndication","filterLifeLevel"]},Readme:{name:"Readme",methods:["getReadmeMarkdown"],properties:[]},OauthClient:{name:"OauthClient",methods:["getOauthUrl","onOauthCallback"],properties:[]},MixinProvider:{name:"MixinProvider",methods:["canMixin","getMixin","releaseMixin"],properties:[]},HttpRequestHandler:{name:"HttpRequestHandler",methods:["onRequest"],properties:[]},EngineIOHandler:{name:"EngineIOHandler",methods:["onConnection"],properties:[]},PushHandler:{name:"PushHandler",methods:["onPush"],properties:[]},Program:{name:"Program",methods:["run"],properties:[]},Scriptable:{name:"Scriptable",methods:["eval","loadScripts","saveScript"],properties:[]},ClusterForkInterface:{name:"ClusterForkInterface",methods:["forkInterface"],properties:[]},ObjectTracker:{name:"ObjectTracker",methods:["trackObjects"],properties:[]},ObjectDetector:{name:"ObjectDetector",methods:["getDetectionInput","getObjectTypes"],properties:[]},ObjectDetection:{name:"ObjectDetection",methods:["detectObjects","generateObjectDetections","getDetectionModel"],properties:[]},ObjectDetectionPreview:{name:"ObjectDetectionPreview",methods:[],properties:[]},ObjectDetectionGenerator:{name:"ObjectDetectionGenerator",methods:[],properties:[]},HumiditySetting:{name:"HumiditySetting",methods:["setHumidity"],properties:["humiditySetting"]},Fan:{name:"Fan",methods:["setFan"],properties:["fan"]},RTCSignalingChannel:{name:"RTCSignalingChannel",methods:["startRTCSignalingSession"],properties:[]},RTCSignalingClient:{name:"RTCSignalingClient",methods:["createRTCSignalingSession"],properties:[]},LauncherApplication:{name:"LauncherApplication",methods:[],properties:["applicationInfo"]},ScryptedUser:{name:"ScryptedUser",methods:["getScryptedUserAccessControl"],properties:[]},VideoFrameGenerator:{name:"VideoFrameGenerator",methods:["generateVideoFrames"],properties:[]},StreamService:{name:"StreamService",methods:["connectStream"],properties:[]},TTY:{name:"TTY",methods:[],properties:[]},TTYSettings:{name:"TTYSettings",methods:["getTTYSettings"],properties:[]},ScryptedSystemDevice:{name:"ScryptedSystemDevice",methods:[],properties:["systemDevice"]},ScryptedDeviceCreator:{name:"ScryptedDeviceCreator",methods:[],properties:[]},ScryptedSettings:{name:"ScryptedSettings",methods:[],properties:[]}},function(e){e.Builtin="Builtin",e.Camera="Camera",e.Fan="Fan",e.Light="Light",e.Switch="Switch",e.Outlet="Outlet",e.Sensor="Sensor",e.Scene="Scene",e.Program="Program",e.Automation="Automation",e.Vacuum="Vacuum",e.Notifier="Notifier",e.Thermostat="Thermostat",e.Lock="Lock",e.PasswordControl="PasswordControl",e.Display="Display",e.SmartDisplay="SmartDisplay",e.Speaker="Speaker",e.SmartSpeaker="SmartSpeaker",e.Event="Event",e.Entry="Entry",e.Garage="Garage",e.DeviceProvider="DeviceProvider",e.DataSource="DataSource",e.API="API",e.Doorbell="Doorbell",e.Irrigation="Irrigation",e.Valve="Valve",e.Person="Person",e.SecuritySystem="SecuritySystem",e.WindowCovering="WindowCovering",e.Siren="Siren",e.AirPurifier="AirPurifier",e.Unknown="Unknown"}(s||(t.ScryptedDeviceType=s={})),function(e){e.Humidify="Humidify",e.Dehumidify="Dehumidify",e.Auto="Auto",e.Off="Off"}(n||(t.HumidityMode=n={})),function(e){e.Auto="Auto",e.Manual="Manual"}(i||(t.FanMode=i={})),function(e){e.C="C",e.F="F"}(o||(t.TemperatureUnit=o={})),function(e){e.Off="Off",e.Cool="Cool",e.Heat="Heat",e.HeatCool="HeatCool",e.Auto="Auto",e.FanOnly="FanOnly",e.Purifier="Purifier",e.Eco="Eco",e.Dry="Dry",e.On="On"}(a||(t.ThermostatMode=a={})),function(e){e.Absolute="Absolute",e.Relative="Relative",e.Continuous="Continuous",e.Preset="Preset",e.Home="Home"}(c||(t.PanTiltZoomMovement=c={})),function(e){e.Locked="Locked",e.Unlocked="Unlocked",e.Jammed="Jammed"}(g||(t.LockState=g={})),function(e){e.Trickle="trickle",e.Charging="charging",e.NotCharging="not-charging"}(l||(t.ChargeState=l={})),function(e){e.Inactive="Inactive",e.Idle="Idle",e.Active="Active",e.ActiveNightMode="ActiveNightMode"}(h||(t.AirPurifierStatus=h={})),function(e){e.Manual="Manual",e.Automatic="Automatic"}(d||(t.AirPurifierMode=d={})),function(e){e.Unknown="Unknown",e.Excellent="Excellent",e.Good="Good",e.Fair="Fair",e.Inferior="Inferior",e.Poor="Poor"}(u||(t.AirQuality=u={})),function(e){e.Disarmed="Disarmed",e.HomeArmed="HomeArmed",e.AwayArmed="AwayArmed",e.NightArmed="NightArmed"}(E||(t.SecuritySystemMode=E={})),function(e){e.Sensor="Sensor",e.Occupied="Occupied",e.Time="Time",e.Error="Error"}(I||(t.SecuritySystemObstruction=I={})),function(e){e.Idle="Idle",e.Playing="Playing",e.Paused="Paused",e.Buffering="Buffering"}(Q||(t.MediaPlayerState=Q={})),function(e){e.ScryptedDevice="ScryptedDevice",e.ScryptedPlugin="ScryptedPlugin",e.ScryptedPluginRuntime="ScryptedPluginRuntime",e.OnOff="OnOff",e.Brightness="Brightness",e.ColorSettingTemperature="ColorSettingTemperature",e.ColorSettingRgb="ColorSettingRgb",e.ColorSettingHsv="ColorSettingHsv",e.Buttons="Buttons",e.PressButtons="PressButtons",e.Sensors="Sensors",e.Notifier="Notifier",e.StartStop="StartStop",e.Pause="Pause",e.Dock="Dock",e.TemperatureSetting="TemperatureSetting",e.Thermometer="Thermometer",e.HumiditySensor="HumiditySensor",e.Camera="Camera",e.Microphone="Microphone",e.AudioVolumeControl="AudioVolumeControl",e.Display="Display",e.VideoCamera="VideoCamera",e.VideoCameraMask="VideoCameraMask",e.VideoTextOverlays="VideoTextOverlays",e.VideoRecorder="VideoRecorder",e.VideoRecorderManagement="VideoRecorderManagement",e.PanTiltZoom="PanTiltZoom",e.EventRecorder="EventRecorder",e.VideoClips="VideoClips",e.VideoCameraConfiguration="VideoCameraConfiguration",e.Intercom="Intercom",e.Lock="Lock",e.PasswordStore="PasswordStore",e.Scene="Scene",e.Entry="Entry",e.EntrySensor="EntrySensor",e.DeviceProvider="DeviceProvider",e.DeviceDiscovery="DeviceDiscovery",e.DeviceCreator="DeviceCreator",e.Battery="Battery",e.Charger="Charger",e.Reboot="Reboot",e.Refresh="Refresh",e.MediaPlayer="MediaPlayer",e.Online="Online",e.BufferConverter="BufferConverter",e.MediaConverter="MediaConverter",e.Settings="Settings",e.BinarySensor="BinarySensor",e.TamperSensor="TamperSensor",e.Sleep="Sleep",e.PowerSensor="PowerSensor",e.AudioSensor="AudioSensor",e.MotionSensor="MotionSensor",e.AmbientLightSensor="AmbientLightSensor",e.OccupancySensor="OccupancySensor",e.FloodSensor="FloodSensor",e.UltravioletSensor="UltravioletSensor",e.LuminanceSensor="LuminanceSensor",e.PositionSensor="PositionSensor",e.SecuritySystem="SecuritySystem",e.PM10Sensor="PM10Sensor",e.PM25Sensor="PM25Sensor",e.VOCSensor="VOCSensor",e.NOXSensor="NOXSensor",e.CO2Sensor="CO2Sensor",e.AirQualitySensor="AirQualitySensor",e.AirPurifier="AirPurifier",e.FilterMaintenance="FilterMaintenance",e.Readme="Readme",e.OauthClient="OauthClient",e.MixinProvider="MixinProvider",e.HttpRequestHandler="HttpRequestHandler",e.EngineIOHandler="EngineIOHandler",e.PushHandler="PushHandler",e.Program="Program",e.Scriptable="Scriptable",e.ClusterForkInterface="ClusterForkInterface",e.ObjectTracker="ObjectTracker",e.ObjectDetector="ObjectDetector",e.ObjectDetection="ObjectDetection",e.ObjectDetectionPreview="ObjectDetectionPreview",e.ObjectDetectionGenerator="ObjectDetectionGenerator",e.HumiditySetting="HumiditySetting",e.Fan="Fan",e.RTCSignalingChannel="RTCSignalingChannel",e.RTCSignalingClient="RTCSignalingClient",e.LauncherApplication="LauncherApplication",e.ScryptedUser="ScryptedUser",e.VideoFrameGenerator="VideoFrameGenerator",e.StreamService="StreamService",e.TTY="TTY",e.TTYSettings="TTYSettings",e.ScryptedSystemDevice="ScryptedSystemDevice",e.ScryptedDeviceCreator="ScryptedDeviceCreator",e.ScryptedSettings="ScryptedSettings"}(B||(t.ScryptedInterface=B={})),function(e){e.Url="text/x-uri",e.InsecureLocalUrl="text/x-insecure-local-uri",e.LocalUrl="text/x-local-uri",e.ServerId="text/x-server-id",e.PushEndpoint="text/x-push-endpoint",e.SchemePrefix="x-scrypted/x-scrypted-scheme-",e.MediaStreamUrl="text/x-media-url",e.MediaObject="x-scrypted/x-scrypted-media-object",e.RequestMediaObject="x-scrypted/x-scrypted-request-media-object",e.RequestMediaStream="x-scrypted/x-scrypted-request-stream",e.MediaStreamFeedback="x-scrypted/x-media-stream-feedback",e.FFmpegInput="x-scrypted/x-ffmpeg-input",e.FFmpegTranscodeStream="x-scrypted/x-ffmpeg-transcode-stream",e.RTCSignalingChannel="x-scrypted/x-scrypted-rtc-signaling-channel",e.RTCSignalingSession="x-scrypted/x-scrypted-rtc-signaling-session",e.RTCConnectionManagement="x-scrypted/x-scrypted-rtc-connection-management",e.Image="x-scrypted/x-scrypted-image"}(C||(t.ScryptedMimeTypes=C={}))},4417:function(e,t,A){"use strict";var r,s=this&&this.__createBinding||(Object.create?function(e,t,A,r){void 0===r&&(r=A);var s=Object.getOwnPropertyDescriptor(t,A);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[A]}}),Object.defineProperty(e,r,s)}:function(e,t,A,r){void 0===r&&(r=A),e[r]=t[A]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var A in e)Object.prototype.hasOwnProperty.call(e,A)&&(t[t.length]=A);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var A=r(e),i=0;i<A.length;i++)"default"!==A[i]&&s(t,e,A[i]);return n(t,e),t});Object.defineProperty(t,"__esModule",{value:!0}),t.ReolinkNativeCamera=t.b64ToMo=t.moToB64=void 0;const o=i(A(7562)),a=A(6117),c=A(5741),g=A(840),l=A(5050),h=A(5098);t.moToB64=async e=>{const t=await o.default.mediaManager.convertMediaObjectToBuffer(e,"image/jpeg");return t?.toString("base64")};t.b64ToMo=async e=>{const t=Buffer.from(e,"base64");return await o.default.mediaManager.createMediaObject(t,"image/jpeg")};class d extends o.ScryptedDeviceBase{constructor(e,t){super(t),this.camera=e}async turnOff(){this.camera.getLogger().log(`Siren toggle: turnOff (device=${this.nativeId})`),this.on=!1;try{await this.setSiren(!1),this.camera.getLogger().log(`Siren toggle: turnOff ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`Siren toggle: turnOff failed (device=${this.nativeId})`,e),e}}async turnOn(){this.camera.getLogger().log(`Siren toggle: turnOn (device=${this.nativeId})`),this.on=!0;try{await this.setSiren(!0),this.camera.getLogger().log(`Siren toggle: turnOn ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`Siren toggle: turnOn failed (device=${this.nativeId})`,e),e}}async setSiren(e){this.camera.markActivity();const t=await this.camera.ensureClient(),A=this.camera.getRtspChannel();await this.camera.withBaichuanRetry((async()=>await t.setSiren(A,e)))}}class u extends o.ScryptedDeviceBase{constructor(e,t){super(t),this.camera=e}async setBrightness(e){this.camera.getLogger().log(`Floodlight toggle: setBrightness (device=${this.nativeId} brightness=${e})`),this.brightness=e;try{await this.setFloodlight(void 0,e),this.camera.getLogger().log(`Floodlight toggle: setBrightness ok (device=${this.nativeId} brightness=${e})`)}catch(t){throw this.camera.getLogger().warn(`Floodlight toggle: setBrightness failed (device=${this.nativeId} brightness=${e})`,t),t}}async turnOff(){this.camera.getLogger().log(`Floodlight toggle: turnOff (device=${this.nativeId})`),this.on=!1;try{await this.setFloodlight(!1),this.camera.getLogger().log(`Floodlight toggle: turnOff ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`Floodlight toggle: turnOff failed (device=${this.nativeId})`,e),e}}async turnOn(){this.camera.getLogger().log(`Floodlight toggle: turnOn (device=${this.nativeId})`),this.on=!0;try{await this.setFloodlight(!0),this.camera.getLogger().log(`Floodlight toggle: turnOn ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`Floodlight toggle: turnOn failed (device=${this.nativeId})`,e),e}}async setFloodlight(e,t){this.camera.markActivity();const A=await this.camera.ensureClient(),r=this.camera.getRtspChannel();await this.camera.withBaichuanRetry((async()=>await A.setWhiteLedState(r,e,t)))}}class E extends o.ScryptedDeviceBase{constructor(e,t){super(t),this.camera=e}async turnOff(){this.camera.getLogger().log(`PIR toggle: turnOff (device=${this.nativeId})`),this.on=!1;try{await this.setPir(!1),this.camera.getLogger().log(`PIR toggle: turnOff ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`PIR toggle: turnOff failed (device=${this.nativeId})`,e),e}}async turnOn(){this.camera.getLogger().log(`PIR toggle: turnOn (device=${this.nativeId})`),this.on=!0;try{await this.setPir(!0),this.camera.getLogger().log(`PIR toggle: turnOn ok (device=${this.nativeId})`)}catch(e){throw this.camera.getLogger().warn(`PIR toggle: turnOn failed (device=${this.nativeId})`,e),e}}async setPir(e){this.camera.markActivity();const t=await this.camera.ensureClient(),A=this.camera.getRtspChannel();await this.camera.withBaichuanRetry((async()=>await t.setPirInfo(A,{enable:e?1:0})))}}class I extends o.ScryptedDeviceBase{constructor(e,t){super(e),this.plugin=t,this.refreshingState=!1,this.subscribedToEvents=!1,this.periodicStarted=!1,this.lastActivityMs=Date.now(),this.udpFallbackAlerted=!1,this.dispatchEventsApplySeq=0,this.storageSettings=new a.StorageSettings(this,{ipAddress:{title:"IP Address",type:"string"},uid:{title:"UID",description:"Reolink UID (required for battery cameras / BCUDP).",type:"string"},username:{type:"string",title:"Username"},password:{type:"password",title:"Password"},rtspChannel:{type:"number",hide:!0,defaultValue:0},capabilities:{json:!0,hide:!0},dispatchEvents:{subgroup:"Advanced",title:"Dispatch Events",description:"Select which events to emit. Empty disables event subscription entirely.",multiple:!0,combobox:!0,immediate:!0,defaultValue:["motion","objects"],choices:["motion","objects"],onPut:async()=>{this.scheduleApplyEventDispatchSettings()}},debugLogs:{subgroup:"Advanced",title:"Debug Logs",description:"Enable specific debug logs. Baichuan client logs require reconnect; event logs are immediate.",multiple:!0,combobox:!0,immediate:!0,defaultValue:[],choices:["enabled","debugRtsp","traceStream","traceTalk","debugH264","debugParamSets","eventLogs"],onPut:async(e,t)=>{const A=new Set(e),r=new Set(t);A.delete("eventLogs"),r.delete("eventLogs");(A.size!==r.size||Array.from(A).some((e=>!r.has(e))))&&await this.resetBaichuanClient("debugLogs changed")}},motionTimeout:{subgroup:"Advanced",title:"Motion Timeout",defaultValue:20,type:"number"},presets:{group:"PTZ",title:"Presets to enable",description:'PTZ Presets in the format "id=name". Where id is the PTZ Preset identifier and name is a friendly name.',multiple:!0,defaultValue:[],combobox:!0,onPut:async(e,t)=>{const A={...this.ptzCapabilities,presets:{}};for(const e of t){const[t,r]=e.split("=");A.presets[t]=r}this.ptzCapabilities=A},mapGet:()=>{const e=this.ptzCapabilities?.presets||{};return Object.entries(e).map((([e,t])=>e+"="+t))}},ptzMoveDurationMs:{title:"PTZ Move Duration (ms)",description:"How long a PTZ command moves before sending stop. Higher = more movement per click.",type:"number",defaultValue:300,group:"PTZ"},ptzZoomStep:{group:"PTZ",title:"PTZ Zoom Step",description:"How much to change zoom per zoom command (in zoom factor units, where 1.0 is normal).",type:"number",defaultValue:.1},ptzCreatePreset:{group:"PTZ",title:"Create Preset",description:"Enter a name and press Save to create a new PTZ preset at the current position.",type:"string",placeholder:"e.g. Door",defaultValue:"",onPut:async(e,t)=>{const A=String(t??"").trim();if(!A)return void(""!==String(t??"")&&await this.storageSettings.putSetting("ptzCreatePreset",""));this.markActivity();const r=this.getLogger();r.log(`PTZ presets: create preset requested (name=${A})`);const s=await this.withBaichuanRetry((async()=>await this.ptzPresets.createPtzPreset(A))),n=`${s.id}=${s.name}`;await this.storageSettings.putSetting("ptzSelectedPreset",n),await this.storageSettings.putSetting("ptzCreatePreset",""),r.log(`PTZ presets: created preset id=${s.id} name=${s.name}`)}},ptzSelectedPreset:{group:"PTZ",title:"Selected Preset",description:'Select the preset to update or delete. Format: "id=name".',type:"string",combobox:!1,immediate:!0},ptzUpdateSelectedPreset:{group:"PTZ",title:"Update Selected Preset Position",description:"Overwrite the selected preset with the current PTZ position.",type:"button",immediate:!0,onPut:async()=>{const e=this.getSelectedPresetId();if(void 0===e)throw new Error("No preset selected");this.markActivity();const t=this.getLogger();t.log(`PTZ presets: update position requested (presetId=${e})`),await this.withBaichuanRetry((async()=>await this.ptzPresets.updatePtzPresetToCurrentPosition(e))),t.log(`PTZ presets: update position ok (presetId=${e})`)}},ptzDeleteSelectedPreset:{group:"PTZ",title:"Delete Selected Preset",description:"Delete the selected preset (firmware dependent).",type:"button",immediate:!0,onPut:async()=>{const e=this.getSelectedPresetId();if(void 0===e)throw new Error("No preset selected");this.markActivity();const t=this.getLogger();t.log(`PTZ presets: delete requested (presetId=${e})`),await this.withBaichuanRetry((async()=>await this.ptzPresets.deletePtzPreset(e))),await this.storageSettings.putSetting("ptzSelectedPreset",""),t.log(`PTZ presets: delete ok (presetId=${e})`)}},cachedPresets:{multiple:!0,hide:!0,json:!0,defaultValue:[]},prebufferSet:{type:"boolean",hide:!0},intercomBlocksPerPayload:{subgroup:"Advanced",title:"Intercom Blocks Per Payload",description:"Lower reduces latency (more packets). Typical: 1-4. Requires restarting talk session to take effect.",type:"number",defaultValue:1}}),this.streamManager=new l.StreamManager({createStreamClient:()=>this.createStreamClient(),getLogger:()=>this.getLogger()}),this.intercom=new c.ReolinkBaichuanIntercom(this),this.ptzPresets=new g.ReolinkPtzPresets(this),this.storageSettings.settings.presets.onGet=async()=>({choices:this.storageSettings.values.cachedPresets.map((e=>e.id+"="+e.name))}),this.storageSettings.settings.ptzSelectedPreset.onGet=async()=>({choices:(this.storageSettings.values.cachedPresets||[]).map((e=>e.id+"="+e.name))}),setTimeout((async()=>{await this.init()}),2e3)}getSelectedPresetId(){const e=this.storageSettings.values.ptzSelectedPreset;if(!e)return;const t=e.includes("=")?e.split("=")[0]:e,A=Number(t);return Number.isFinite(A)?A:void 0}isRecoverableBaichuanError(e){const t=e?.message||e?.toString?.()||"";return"string"==typeof t&&(t.includes("Baichuan socket closed")||t.includes("socket hang up")||t.includes("ECONNRESET")||t.includes("EPIPE"))}async resetBaichuanClient(e){try{await(this.baichuanApi?.close())}catch(e){this.getLogger().warn("Error closing Baichuan client during reset",e)}finally{if(this.eventsApi&&this.onSimpleEvent)try{this.eventsApi.simpleEvents.off("event",this.onSimpleEvent)}catch{}this.baichuanApi=void 0,this.subscribedToEvents=!1,this.eventsApi=void 0}if(e){const t=e?.message||e?.toString?.()||e;this.getLogger().warn(`Baichuan client reset requested: ${t}`)}}async withBaichuanRetry(e){try{return await e()}catch(t){if(!this.isRecoverableBaichuanError(t))throw t;return await this.resetBaichuanClient(t),await e()}}getLogger(){return this.console}async init(){const e=this.getLogger();await this.ensureClient(),await this.refreshDeviceState(),await this.reportDevices(),this.updateDeviceInfo(),this.updatePtzCaps();try{this.isEventDispatchEnabled()&&await this.ensureBaichuanEventSubscription()}catch(t){e.warn("Failed to subscribe to Baichuan events",t)}if(this.startPeriodicTasks(),this.hasBattery()&&!this.storageSettings.getItem("prebufferSet")){const t=o.default.systemManager.getDeviceById(this.id);e.log("Disabling prebbufer for battery cam"),await t.putSetting("prebuffer:enabledStreams","[]"),this.storageSettings.values.prebufferSet=!0}}async ensureClient(){if(this.baichuanApi&&this.baichuanApi.client.loggedIn)return this.baichuanApi;const{ipAddress:e,username:t,password:A,uid:r}=this.storageSettings.values;if(!e||!t||!A)throw new Error("Missing camera credentials");this.baichuanApi&&await this.baichuanApi.close();const s=this.getBaichuanDebugOptions(),{api:n}=await(0,h.connectBaichuanWithTcpUdpFallback)({host:e,username:t,password:A,uid:r,logger:this.console,...s?{debugOptions:s}:{}},(({uid:t,uidMissing:A})=>{const r=!A&&t?`UID ${(0,h.maskUid)(t)}`:"UID MISSING";this.udpFallbackAlerted||(this.udpFallbackAlerted=!0,this.log.a(`Baichuan TCP failed for camera ${this.name} (${e}). This appears to be a battery camera: UID is required and UDP/BCUDP will be used (${r}).`))}));return this.baichuanApi=n,n}async createStreamClient(){const e=(await this.ensureClient()).client.getTransport(),{ipAddress:t,username:A,password:r,uid:s}=this.storageSettings.values;if(!t||!A||!r)throw new Error("Missing camera credentials");const n=this.getBaichuanDebugOptions(),i=await(0,h.createBaichuanApi)({host:t,username:A,password:r,uid:s,logger:this.console,...n?{debugOptions:n}:{}},e);return await i.login(),i}getClient(){return this.baichuanApi}async refreshDeviceState(){if(this.refreshingState)return;this.refreshingState=!0;const e=this.getLogger(),t=await this.ensureClient(),A=this.getRtspChannel();try{const{capabilities:e,abilities:r,support:s,presets:n}=await t.getDeviceCapabilities(A);this.storageSettings.values.capabilities=e,this.ptzPresets.setCachedPtzPresets(n),this.console.log(`Refreshed device capabilities: ${JSON.stringify({capabilities:e,abilities:r,support:s,presets:n})}`)}catch(t){e.error("Failed to refresh abilities",t)}try{const t=await this.getDeviceInterfaces(),A={nativeId:this.nativeId,providerNativeId:this.plugin.nativeId,name:this.name,interfaces:t,type:this.type,info:this.info};e.log(`Updating device interfaces: ${JSON.stringify(t)}`),await o.default.deviceManager.onDeviceDiscovered(A)}catch(t){e.error("Failed to update device interfaces",t)}this.refreshingState=!1}async ensureBaichuanEventSubscription(){if(!this.isEventDispatchEnabled())return void await this.disableBaichuanEventSubscription();if(this.subscribedToEvents)return;const e=await this.ensureClient();try{await e.subscribeEvents()}catch{}if(this.onSimpleEvent||=e=>{try{if(!this.isEventDispatchEnabled())return;this.isEventLogsEnabled()&&this.getLogger().debug(`Baichuan event: ${JSON.stringify(e)}`);const t=this.getRtspChannel();if(void 0!==e?.channel&&e.channel!==t)return;const A=[];let r=!1;switch(e?.type){case"motion":case"doorbell":r=this.shouldDispatchMotion();break;case"people":case"vehicle":case"animal":case"face":case"package":case"other":this.shouldDispatchObjects()&&A.push(e.type);break;default:return}this.processEvents({motion:r,objects:A}).catch((()=>{}))}catch{}},this.eventsApi&&this.eventsApi!==e&&this.onSimpleEvent)try{this.eventsApi.simpleEvents.off("event",this.onSimpleEvent)}catch{}this.eventsApi!==e&&this.onSimpleEvent&&(e.simpleEvents.on("event",this.onSimpleEvent),this.eventsApi=e),this.subscribedToEvents=!0}async disableBaichuanEventSubscription(){const e=this.getClient();if(e?.client?.loggedIn)try{await e.unsubscribeEvents()}catch{}if(this.eventsApi&&this.onSimpleEvent)try{this.eventsApi.simpleEvents.off("event",this.onSimpleEvent)}catch{}this.subscribedToEvents=!1,this.eventsApi=void 0,this.motionTimeout&&clearTimeout(this.motionTimeout),this.motionDetected=!1}async applyEventDispatchSettings(){const e=this.getLogger(),t=Array.from(this.getDispatchEventsSelection()).sort(),A=t.join(","),r=this.lastAppliedDispatchEventsKey;if(void 0!==r&&r!==A&&e.log(`Dispatch Events changed: ${t.length?t.join(", "):"(disabled)"}`),this.markActivity(),!this.isEventDispatchEnabled())return this.subscribedToEvents&&e.log("Event listener stopped (Dispatch Events disabled)"),await this.disableBaichuanEventSubscription(),void(this.lastAppliedDispatchEventsKey=A);if(this.shouldDispatchMotion()||(this.motionTimeout&&clearTimeout(this.motionTimeout),this.motionDetected=!1),r===A&&this.subscribedToEvents)this.lastAppliedDispatchEventsKey=A;else{if(!this.subscribedToEvents)return e.log(`Event listener started (${t.join(", ")})`),await this.ensureBaichuanEventSubscription(),void(this.lastAppliedDispatchEventsKey=A);e.log(`Event listener restarting (${t.join(", ")})`),await this.disableBaichuanEventSubscription(),await this.ensureBaichuanEventSubscription(),this.lastAppliedDispatchEventsKey=A}}markActivity(){this.lastActivityMs=Date.now()}shouldAvoidWakingBatteryCamera(){if(!this.hasBattery())return!1;if(this.sleeping)return!0;const e=this.getClient();if(!e?.client?.loggedIn)return!0;return Date.now()-this.lastActivityMs>3e4}async release(){return this.statusPollTimer&&clearInterval(this.statusPollTimer),this.eventsRestartTimer&&clearInterval(this.eventsRestartTimer),this.resetBaichuanClient()}startPeriodicTasks(){this.periodicStarted||(this.periodicStarted=!0,this.statusPollTimer=setInterval((()=>{this.periodic10sTick().catch((()=>{}))}),1e4),this.eventsRestartTimer=setInterval((()=>{this.periodic60sRestartEvents().catch((()=>{}))}),6e4))}async periodic10sTick(){if(!this.shouldAvoidWakingBatteryCamera()&&(this.hasBattery()||await this.ensureClient(),await this.refreshAuxDevicesStatus(),this.isEventDispatchEnabled()&&!this.subscribedToEvents)){if(this.hasBattery()){const e=this.getClient();if(!e?.client?.loggedIn)return}await this.ensureBaichuanEventSubscription()}}async periodic60sRestartEvents(){if(this.shouldAvoidWakingBatteryCamera())return;if(!this.isEventDispatchEnabled())return void await this.disableBaichuanEventSubscription();if(this.hasBattery()){const e=this.getClient();if(!e?.client?.loggedIn)return}else await this.ensureClient();const e=this.getClient();if(e){try{await e.unsubscribeEvents()}catch{}this.subscribedToEvents=!1,await this.ensureBaichuanEventSubscription()}}async refreshAuxDevicesStatus(){const e=this.getClient();if(!e)return;const t=this.getRtspChannel();try{if(this.hasFloodlight()){const A=await e.getWhiteLedState(t);this.floodlight&&(this.floodlight.on=!!A.enabled,void 0!==A.brightness&&(this.floodlight.brightness=A.brightness))}}catch{}try{if(this.hasPirEvents()){const A=await e.getPirInfo(t);this.pirSensor&&(this.pirSensor.on=!!A.enabled)}}catch{}}async getVideoTextOverlays(){this.getClient()}async setVideoTextOverlay(e,t){await this.ensureClient()}updatePtzCaps(){const{hasPanTilt:e,hasZoom:t}=this.getPtzCapabilities();this.ptzCapabilities={...this.ptzCapabilities,pan:e,tilt:e,zoom:t}}getAbilities(){return this.storageSettings.values.capabilities}async getDetectionInput(e,t){return null}async ptzCommand(e){this.markActivity();const t=await this.ensureClient();if(!t)return;const A=this.getRtspChannel(),r=e.preset;if(null!=r){const e=Number(r);return Number.isFinite(e)?void await this.ptzPresets.moveToPreset(e):void this.getLogger().warn(`Invalid PTZ preset id: ${r}`)}let s="start",n="Left";if(void 0!==e.pan)0===e.pan?(s="stop",n="Left"):(n=e.pan>0?"Right":"Left",s="start");else if(void 0!==e.tilt)0===e.tilt?(s="stop",n="Up"):(n=e.tilt>0?"Up":"Down",s="start");else if(void 0!==e.zoom){const r=Number(e.zoom);if(!Number.isFinite(r)||0===r)return;const s=Number(this.storageSettings.values.ptzZoomStep),n=Number.isFinite(s)&&s>0?s:.2,i=await t.getZoomFocus(A);if(!i?.zoom)return void this.getLogger().warn("Zoom command requested but camera did not report zoom support.");const o=(i.zoom.curPos??1e3)/1e3,a=(i.zoom.minPos??1e3)/1e3,c=(i.zoom.maxPos??1e3)/1e3,g=r>0?1:-1,l=Math.min(c,Math.max(a,o+g*n));return void await t.zoomToFactor(A,l)}const i={action:s,command:n,speed:"number"==typeof e.speed?e.speed:32,autoStopMs:Number(this.storageSettings.values.ptzMoveDurationMs)||500};await t.ptz(A,i)}async getObjectTypes(){try{const e=await this.ensureClient(),t=await e.getAiState(),A=[];return t&&"object"==typeof t&&"support"in t&&t.support&&A.push("people","vehicle","dog_cat","face","package"),{classes:A}}catch(e){return{classes:[]}}}hasSiren(){const e=this.getAbilities();return Boolean(e?.hasSiren)}hasFloodlight(){const e=this.getAbilities();return Boolean(e?.hasFloodlight)}hasBattery(){const e=this.getAbilities();return Boolean(e?.hasBattery)}getPtzCapabilities(){const e=this.getAbilities(),t=Boolean(e?.hasZoom),A=Boolean(e?.hasPan&&e?.hasTilt),r=Boolean(e?.hasPresets);return{hasZoom:t,hasPanTilt:A,hasPresets:r,hasPtz:t||A||r}}hasPtzCtrl(){const e=this.getAbilities();return Boolean(e?.hasPtz)}hasPirEvents(){const e=this.getAbilities();return Boolean(e?.hasPir)}async getDeviceInterfaces(){const e=[o.ScryptedInterface.VideoCamera,o.ScryptedInterface.Settings,...this.plugin.getCameraInterfaces()];try{try{const t=this.getClient();if(t){const A=await t.getTalkAbility(this.getRtspChannel());Array.isArray(A?.audioConfigList)&&A.audioConfigList.length>0&&e.push(o.ScryptedInterface.Intercom)}}catch{}const{hasPtz:t}=this.getPtzCapabilities();t&&e.push(o.ScryptedInterface.PanTiltZoom),(await this.getObjectTypes()).classes.length>0&&e.push(o.ScryptedInterface.ObjectDetector),(this.hasSiren()||this.hasFloodlight()||this.hasPirEvents())&&e.push(o.ScryptedInterface.DeviceProvider),this.hasBattery()&&e.push(o.ScryptedInterface.Battery,o.ScryptedInterface.Sleep)}catch(e){this.getLogger().error("Error getting device interfaces",e)}return e}async processBatteryData(e){this.getLogger();const t=e.batteryPercent,A=e.sleeping||!1;A!==this.sleeping&&(this.sleeping=A),t!==this.batteryLevel&&(this.batteryLevel=t??this.batteryLevel)}async updateDeviceInfo(){const e=this.storageSettings.values.ipAddress;if(!e)return;const t=await this.ensureClient(),A=await t.getInfo(),r=this.info||{};r.ip=e,r.serialNumber=A?.serialNumber||A?.itemNo,r.firmware=A?.firmwareVersion||A?.firmVer,r.version=A?.hardwareVersion||A?.boardInfo,r.model=A?.type||A?.typeInfo,r.manufacturer="Reolink native",r.managementUrl=`http://${e}`,this.info=r}async processEvents(e){const t=this.getLogger();if(this.isEventDispatchEnabled()&&(this.isEventLogsEnabled()&&t.debug(`Events received: ${JSON.stringify(e)}`),this.shouldDispatchMotion()&&e.motion!==this.motionDetected&&(e.motion?(this.motionDetected=!0,this.motionTimeout&&clearTimeout(this.motionTimeout),this.motionTimeout=setTimeout((()=>this.motionDetected=!1),1e3*this.storageSettings.values.motionTimeout)):(this.motionDetected=!1,this.motionTimeout&&clearTimeout(this.motionTimeout))),this.shouldDispatchObjects()&&e.objects?.length)){const t={timestamp:Date.now(),detections:[]};for(const A of e.objects)t.detections.push({className:A,score:1});o.default.deviceManager.onDeviceEvent(this.nativeId,o.ScryptedInterface.ObjectDetector,t)}}normalizeDebugLogs(e){const t=new Set(["enabled","debugRtsp","traceStream","traceTalk","debugH264","debugParamSets","eventLogs"]),A=Array.isArray(e)?e:"string"==typeof e?[e]:[],r=[];for(const e of A){if("string"!=typeof e)continue;const A=e.trim();t.has(A)&&r.push(A)}return Array.from(new Set(r))}getBaichuanDebugOptions(){const e=new Set(this.normalizeDebugLogs(this.storageSettings.values.debugLogs));if(!e.size)return;const t={},A=new Set(["enabled","debugRtsp","traceStream","traceTalk","debugH264","debugParamSets"]);for(const r of e)A.has(r)&&(t[r]=!0);return Object.keys(t).length?t:void 0}isEventLogsEnabled(){return new Set(this.normalizeDebugLogs(this.storageSettings.values.debugLogs)).has("eventLogs")}getDispatchEventsSelection(){return new Set(this.storageSettings.values.dispatchEvents)}isEventDispatchEnabled(){return this.getDispatchEventsSelection().size>0}shouldDispatchMotion(){return this.getDispatchEventsSelection().has("motion")}shouldDispatchObjects(){return this.getDispatchEventsSelection().has("objects")}scheduleApplyEventDispatchSettings(){this.dispatchEventsApplySeq++;const e=this.dispatchEventsApplySeq;this.dispatchEventsApplyTimer&&clearTimeout(this.dispatchEventsApplyTimer),this.dispatchEventsApplyTimer=setTimeout((()=>{this.applyEventDispatchSettings().catch((t=>{e===this.dispatchEventsApplySeq&&this.getLogger().warn("Failed to apply Dispatch Events setting",t)}))}),300)}async takeSnapshotInternal(e){return this.markActivity(),this.withBaichuanRetry((async()=>{try{const e=Date.now(),A=await this.ensureClient(),r=await A.getSnapshot(),s=await this.createMediaObject(r,"image/jpeg");return this.lastB64Snapshot=await(0,t.moToB64)(s),this.lastSnapshotTaken=e,s}catch(e){throw this.getLogger().error("Error taking snapshot",e),e}}))}async getPictureOptions(){return[]}getSettings(){return this.storageSettings.getSettings()}async takePicture(e){const A=this.hasBattery(),r=Date.now(),s=this.getLogger(),n=!this.lastSnapshotTaken||r-this.lastSnapshotTaken>36e5,i=!this.lastSnapshotTaken||r-this.lastSnapshotTaken>15e3;let o=!1;if(this.lastB64Snapshot&&this.lastSnapshotTaken?this.sleeping&&n?(s.log("Allowing new snapshot while sleeping because older than 1 hour"),o=!0):!this.sleeping&&A&&i?(s.log("Allowing new snapshot because older than 15 seconds"),o=!0):o=!0:(s.log("Allowing new snapshot because not taken yet"),o=!0),o)return this.takeSnapshotInternal(e?.timeout);if(this.lastB64Snapshot){return await(0,t.b64ToMo)(this.lastB64Snapshot)}return null}getRtspChannel(){const e=this.storageSettings.values.rtspChannel;return void 0!==e?Number(e):0}async getVideoStream(e){if(this.markActivity(),!e)throw new Error("video streams not set up or no longer exists.");const t=await this.getVideoStreamOptions(),A=t?.find((t=>t.id===e.id))||t?.[0];if(!A)throw new Error("No stream options available");const r=(0,l.parseStreamProfileFromId)(A.id)||"main";return this.withBaichuanRetry((async()=>{const e=this.getRtspChannel(),t=`${e}_${r}`,s=A?.video?.codec?.includes("265")?"H265":A?.video?.codec?.includes("264")?"H264":void 0,{host:n,port:i,sdp:a,audio:c}=await this.streamManager.getRfcStream(e,r,t,s),{url:g,...l}=A;l.container="rtp",c&&(l.audio||={},l.audio.codec=c.codec,l.audio.sampleRate=c.sampleRate,l.audio.channels=c.channels);const h={url:`tcp://${n}:${i}`,sdp:a,mediaStreamOptions:l},d=JSON.stringify(h);return await o.default.mediaManager.createMediaObject(Buffer.from(d),"x-scrypted/x-rfc4571",{sourceId:this.id})}))}async getVideoStreamOptions(){return this.markActivity(),this.withBaichuanRetry((async()=>{const e=await this.ensureClient(),t=this.storageSettings.values.rtspChannel,A=await e.getStreamMetadata(t),r=[];for(const e of A.streams){const t=e.profile,A=e.videoEncType.includes("264")?"h264":e.videoEncType.includes("265")?"h265":e.videoEncType.toLowerCase(),s="main"===t?"mainstream":"sub"===t?"substream":"extstream",n="main"===t?"Main Stream":"sub"===t?"Sub Stream":"Ext Stream";r.push({name:n,id:s,container:"rtp",video:{codec:A,width:e.width,height:e.height},url:""})}return r}))}async getOtherSettings(){return await this.storageSettings.getSettings()}async putSetting(e,t){await this.storageSettings.putSetting(e,t)}showRtspUrlOverride(){return!1}async reportDevices(){const e=this.hasSiren(),t=this.hasFloodlight(),A=this.hasPirEvents(),r=[];if(e){const e=`${this.nativeId}-siren`,t={providerNativeId:this.nativeId,name:`${this.name} Siren`,nativeId:e,info:{...this.info},interfaces:[o.ScryptedInterface.OnOff],type:o.ScryptedDeviceType.Siren};r.push(t)}if(t){const e=`${this.nativeId}-floodlight`,t={providerNativeId:this.nativeId,name:`${this.name} Floodlight`,nativeId:e,info:{...this.info},interfaces:[o.ScryptedInterface.OnOff],type:o.ScryptedDeviceType.Light};r.push(t)}if(A){const e=`${this.nativeId}-pir`,t={providerNativeId:this.nativeId,name:`${this.name} PIR sensor`,nativeId:e,info:{...this.info},interfaces:[o.ScryptedInterface.OnOff],type:o.ScryptedDeviceType.Switch};r.push(t)}o.default.deviceManager.onDevicesChanged({providerNativeId:this.nativeId,devices:r})}async getDevice(e){return e.endsWith("-siren")?(this.siren||=new d(this,e),this.siren):e.endsWith("-floodlight")?(this.floodlight||=new u(this,e),this.floodlight):e.endsWith("-pir")?(this.pirSensor||=new E(this,e),this.pirSensor):void 0}async releaseDevice(e,t){t.endsWith("-siren")?delete this.siren:t.endsWith("-floodlight")?delete this.floodlight:t.endsWith("-pir")&&delete this.pirSensor}async startIntercom(e){await this.intercom.start(e)}stopIntercom(){return this.intercom.stop()}}t.ReolinkNativeCamera=I},5098:(e,t,A)=>{"use strict";function r(e){const t=e?.trim();return t||void 0}function s(e){const t=e?.message||e?.toString?.()||"";return"string"==typeof t&&(t.includes("ECONNREFUSED")||t.includes("ETIMEDOUT")||t.includes("EHOSTUNREACH")||t.includes("ENETUNREACH")||t.includes("socket hang up")||t.includes("TCP connection timeout")||t.includes("Baichuan socket closed"))}async function n(e,t){const{ReolinkBaichuanApi:s}=await Promise.resolve().then(A.bind(A,2470)),n={host:e.host,username:e.username,password:e.password,logger:e.logger,...e.debugOptions?{debugOptions:e.debugOptions}:{}},i=A=>{try{A.client.on("error",(A=>{const r=e.logger??console,s=A?.message||A?.toString?.()||String(A);r.error(`[BaichuanClient] error (${t}) ${e.host}: ${s}`)}))}catch{}};if("tcp"===t){const e=new s({...n,keepAliveInterval:1e4,tcpSocketKeepAlive:!0,transport:"tcp"});return i(e),e}const o=r(e.uid);if(!o)throw new Error("UID is required for battery cameras (BCUDP)");const a=new s({...n,transport:"udp",udp:{mode:"uid",uid:o,host:e.host,broadcast:!1}});return i(a),a}Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeUid=r,t.maskUid=function(e){const t=e.trim();return t.length<=8?t:`${t.slice(0,4)}…${t.slice(-4)}`},t.isTcpFailureThatShouldFallbackToUdp=s,t.createBaichuanApi=n,t.connectBaichuanWithTcpUdpFallback=async function(e,t){let A;try{return A=await n(e,"tcp"),await A.login(),{api:A,transport:"tcp"}}catch(i){try{await(A?.close())}catch{}if(!s(i))throw i;const o=r(e.uid),a=!o;if(t?.({host:e.host,uid:o,uidMissing:a,tcpError:i}),a)throw new Error(`Baichuan TCP failed and this camera likely requires UDP/BCUDP. Set the Reolink UID in settings to continue (ip=${e.host}).`);const c=await n(e,"udp");return await c.login(),{api:c,transport:"udp"}}}},5741:function(e,t,A){"use strict";var r,s=this&&this.__createBinding||(Object.create?function(e,t,A,r){void 0===r&&(r=A);var s=Object.getOwnPropertyDescriptor(t,A);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[A]}}),Object.defineProperty(e,r,s)}:function(e,t,A,r){void 0===r&&(r=A),e[r]=t[A]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var A in e)Object.prototype.hasOwnProperty.call(e,A)&&(t[t.length]=A);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var A=r(e),i=0;i<A.length;i++)"default"!==A[i]&&s(t,e,A[i]);return n(t,e),t});Object.defineProperty(t,"__esModule",{value:!0}),t.ReolinkBaichuanIntercom=void 0;const o=i(A(7562)),a=A(1421);t.ReolinkBaichuanIntercom=class{constructor(e){this.camera=e,this.loggedCodecInfo=!1,this.maxBacklogMs=40,this.sendChain=Promise.resolve(),this.pcmBuffer=Buffer.alloc(0)}get blocksPerPayload(){return Math.max(1,Math.min(8,this.camera.storageSettings.values.intercomBlocksPerPayload??1))}async start(e){this.camera.markActivity();const t=this.camera.getLogger(),A=await o.default.mediaManager.convertMediaObjectToJSON(e,o.ScryptedMimeTypes.FFmpegInput);await this.stop();const r=await this.camera.ensureClient(),s=this.camera.getRtspChannel();if(!this.loggedCodecInfo){this.loggedCodecInfo=!0;try{const e=await r.getTalkAbility(s),A=e.audioConfigList?.map((e=>({audioType:e.audioType,sampleRate:e.sampleRate,samplePrecision:e.samplePrecision,lengthPerEncoder:e.lengthPerEncoder,soundTrack:e.soundTrack})));t.log("Intercom TalkAbility",{channel:s,duplexList:e.duplexList,audioStreamModeList:e.audioStreamModeList,audioConfigList:A})}catch(e){t.warn("Intercom: unable to fetch TalkAbility",e)}}const n=await this.camera.withBaichuanRetry((async()=>r.createTalkSession(s,{blocksPerPayload:this.blocksPerPayload})));this.session=n,this.pcmBuffer=Buffer.alloc(0),this.sendChain=Promise.resolve();const{audioConfig:i,blockSize:c,fullBlockSize:g}=n.info,l=i.sampleRate,h=2*c+1,d=2*h;if(this.maxBacklogBytes=Math.max(d,Math.floor(this.maxBacklogMs/1e3*l*1*2)),!Number.isFinite(l)||l<=0)throw await this.stop(),new Error(`Invalid talk sampleRate: ${l}`);if(!Number.isFinite(c)||c<=0||!Number.isFinite(g)||g!==c+4)throw await this.stop(),new Error(`Invalid talk block sizes: blockSize=${c} fullBlockSize=${g}`);t.log("Starting intercom (baichuan/native-api flow)",{channel:s,audioType:i.audioType,sampleRate:i.sampleRate,samplePrecision:i.samplePrecision,lengthPerEncoder:i.lengthPerEncoder,soundTrack:i.soundTrack,blockSize:c,fullBlockSize:g,samplesPerBlock:h,bytesNeeded:d,maxBacklogMs:this.maxBacklogMs,maxBacklogBytes:this.maxBacklogBytes,blocksPerPayload:this.blocksPerPayload});const u=this.buildFfmpegPcmArgs(A,{sampleRate:l,channels:1});t.log("Intercom ffmpeg decode args",u);const E=(0,a.spawn)("ffmpeg",u,{stdio:["ignore","pipe","pipe"]});if(this.session!==n){try{E.kill("SIGKILL")}catch{}return}this.ffmpeg=E,E.stdout.on("data",(e=>{this.session===n&&e?.length&&this.enqueuePcm(n,e,d,c)}));let I=0;E.stderr.on("data",(e=>{I++<12&&t.warn("Intercom ffmpeg",e.toString().trim())})),E.on("exit",((e,A)=>{t.warn(`Intercom ffmpeg exited code=${e} signal=${A}`),this.stop().catch((()=>{}))})),t.log("Intercom started (ffmpeg decode -> PCM -> IMA ADPCM)")}stop(){return this.stopping||(this.stopping=(async()=>{const e=this.camera.getLogger(),t=this.ffmpeg;this.ffmpeg=void 0;const A=this.session;this.session=void 0,this.pcmBuffer=Buffer.alloc(0);const r=async e=>new Promise((t=>setTimeout(t,e)));if(t&&null==t.exitCode){try{t.kill("SIGKILL")}catch{}try{await Promise.race([new Promise((e=>t.once("exit",(()=>e())))),r(1e3)])}catch{}}try{await Promise.race([this.sendChain,r(250)])}catch{}if(this.sendChain=Promise.resolve(),A)try{await Promise.race([A.stop(),r(2e3)])}catch(t){e.warn("Intercom session stop error",t)}})().finally((()=>{this.stopping=void 0}))),this.stopping}clamp16(e){return e>32767?32767:e<-32768?-32768:0|e}enqueuePcm(e,t,A,r){const s=this.camera.getLogger();this.sendChain=this.sendChain.then((async()=>{if(this.session!==e)return;this.pcmBuffer=this.pcmBuffer.length?Buffer.concat([this.pcmBuffer,t]):t;const s=this.maxBacklogBytes??A;if(this.pcmBuffer.length>s){const e=s-s%2;this.pcmBuffer=this.pcmBuffer.subarray(this.pcmBuffer.length-e)}for(;this.pcmBuffer.length>=A;){const t=this.pcmBuffer.subarray(0,A);this.pcmBuffer=this.pcmBuffer.subarray(A);const s=new Int16Array(t.buffer,t.byteOffset,t.length/2),n=this.encodeImaAdpcm(s,r);await e.sendAudio(n)}})).catch((e=>{s.warn("Intercom PCM->ADPCM pipeline error",e)}))}buildFfmpegPcmArgs(e,t){const A=e.inputArguments??[],r=[];let s;for(let e=0;e<A.length;e++){const t=A[e];if("-i"===t){const t=A[e+1];if("string"==typeof t){s||(s=t),e++;continue}}r.push(t)}const n=s??e.url;if(!n)throw new Error("FFmpegInput missing url/input");return[...r,"-i",n,"-map","0:a:0?","-fflags","nobuffer","-flags","low_delay","-flush_packets","1","-vn","-sn","-dn","-acodec","pcm_s16le","-ar",t.sampleRate.toString(),"-ac",t.channels.toString(),"-f","s16le","pipe:1"]}encodeImaAdpcm(e,t){const A=2*t+1,r=Math.ceil(e.length/A),s=[],n=Int8Array.from([-1,-1,-1,-1,2,4,6,8,-1,-1,-1,-1,2,4,6,8]),i=Int16Array.from([7,8,9,10,11,12,13,14,16,17,19,21,23,25,28,31,34,37,41,45,50,55,60,66,73,80,88,97,107,118,130,143,157,173,190,209,230,253,279,307,337,371,408,449,494,544,598,658,724,796,876,963,1060,1166,1282,1411,1552,1707,1878,2066,2272,2499,2749,3024,3327,3660,4026,4428,4871,5358,5894,6484,7132,7845,8630,9493,10442,11487,12635,13899,15289,16818,18500,20350,22385,24623,27086,29794,32767]);let o=0;for(let A=0;A<r;A++){const A=Buffer.alloc(4+t);let r=e[o]??0,a=0;A.writeInt16LE(r,0),A.writeUInt8(a,2),A.writeUInt8(0,3),o++;const c=new Uint8Array(2*t);for(let t=0;t<c.length;t++){const A=e[o]??r;o++;let s=A-r,g=0;s<0&&(g=8,s=-s);let l=i[a]??7,h=0,d=l>>3;s>=l&&(h|=4,s-=l,d+=l),l>>=1,s>=l&&(h|=2,s-=l,d+=l),l>>=1,s>=l&&(h|=1,d+=l),g?r-=d:r+=d,r=this.clamp16(r),a+=n[h]??0,a<0&&(a=0),a>88&&(a=88),c[t]=15&(h|g)}for(let e=0;e<t;e++){const t=c[2*e]??0,r=c[2*e+1]??0;A[4+e]=15&t|(15&r)<<4}s.push(A)}return Buffer.concat(s)}}},7927:function(e,t,A){"use strict";var r,s=this&&this.__createBinding||(Object.create?function(e,t,A,r){void 0===r&&(r=A);var s=Object.getOwnPropertyDescriptor(t,A);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[A]}}),Object.defineProperty(e,r,s)}:function(e,t,A,r){void 0===r&&(r=A),e[r]=t[A]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var A in e)Object.prototype.hasOwnProperty.call(e,A)&&(t[t.length]=A);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var A=r(e),i=0;i<A.length;i++)"default"!==A[i]&&s(t,e,A[i]);return n(t,e),t});Object.defineProperty(t,"__esModule",{value:!0});const o=i(A(7562)),a=A(4417),c=A(5098);class g extends o.ScryptedDeviceBase{constructor(){super(...arguments),this.devices=new Map}getScryptedDeviceCreator(){return"Reolink Native camera"}getCameraInterfaces(){return[o.ScryptedInterface.Reboot,o.ScryptedInterface.VideoCameraConfiguration,o.ScryptedInterface.Camera,o.ScryptedInterface.AudioSensor,o.ScryptedInterface.MotionSensor,o.ScryptedInterface.VideoTextOverlays]}async getDevice(e){if(this.devices.has(e))return this.devices.get(e);const t=this.createCamera(e);return this.devices.set(e,t),t}async createDevice(e,t){const A=e.ip?.toString();let r={};const s=e.username?.toString(),n=e.password?.toString(),i=e.uid?.toString();if(A&&s&&n){const{api:a}=await(0,c.connectBaichuanWithTcpUdpFallback)({host:A,username:s,password:n,uid:i,logger:this.console},(({uid:e,uidMissing:t})=>{const r=!t&&e?`UID ${(0,c.maskUid)(e)}`:"UID MISSING";this.console.log(`Baichuan TCP failed during discovery for ${A}; falling back to UDP/BCUDP (${r}).`)}));try{const c=await a.getInfo(),g=c?.name,l=0,{abilities:h,capabilities:d}=await a.getDeviceCapabilities(l);this.console.log(JSON.stringify({abilities:h,capabilities:d,deviceInfo:c})),t=c.serialNumber,e.newCamera||=g,await o.default.deviceManager.onDeviceDiscovered({nativeId:t,name:g,interfaces:this.getCameraInterfaces(),type:o.ScryptedDeviceType.Camera,providerNativeId:this.nativeId});const u=await this.getDevice(t);return u.info=r,u.storageSettings.values.username=s,u.storageSettings.values.password=n,u.storageSettings.values.rtspChannel=l,u.storageSettings.values.ipAddress=A,i&&(u.storageSettings.values.uid=i),u.storageSettings.values.capabilities=d,u.updateDeviceInfo(),t}catch(e){throw this.console.error("Error adding Reolink camera",e),await a.close(),e}finally{await a.close()}}}async releaseDevice(e,t){if(this.devices.has(t)){const e=this.devices.get(t);await e.release(),this.devices.delete(t)}}async getCreateDeviceSettings(){return[{key:"ip",title:"IP Address",placeholder:"192.168.2.222"},{key:"username",title:"Username"},{key:"password",title:"Password",type:"password"},{key:"uid",title:"UID",description:"Reolink UID (required for battery cameras)"}]}createCamera(e){return new a.ReolinkNativeCamera(e,this)}}t.default=g},840:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ReolinkPtzPresets=void 0;t.ReolinkPtzPresets=class{constructor(e){this.camera=e}get storageSettings(){return this.camera.storageSettings}getPtzCapabilitiesStore(){return this.camera.ptzCapabilities}setPtzCapabilitiesStore(e){this.camera.ptzCapabilities=e}parsePresetIdFromSettingValue(e){const t=String(e??"").trim();if(!t)return;const A=t.includes("=")?t.split("=")[0]:t,r=Number(A);return Number.isFinite(r)?r:void 0}syncEnabledPresetsSettingAndCaps(e){const t=this.storageSettings.values.presets??[];if(!t.length)return;const A=new Map(e.map((e=>[e.id,e.name]))),r={};for(const e of t){const t=this.parsePresetIdFromSettingValue(e);if(void 0===t)continue;const s=(e.includes("=")?e.substring(e.indexOf("=")+1).trim():"")||A.get(t);s&&(r[String(t)]=s)}this.setPtzCapabilitiesStore({...this.getPtzCapabilitiesStore()??{},presets:r})}setCachedPtzPresets(e){const t=Array.isArray(e)?e:[];this.storageSettings.values.cachedPresets=t;const A={};for(const e of t)A[String(e.id)]=e.name;this.setPtzCapabilitiesStore({...this.getPtzCapabilitiesStore()??{},presets:A})}getCachedPtzPresets(){const e=this.storageSettings.values.cachedPresets;return Array.isArray(e)?e:[]}nextFreePresetId(e){const t=new Set(e.map((e=>e.id)));for(let e=1;e<=255;e++)if(!t.has(e))return e;throw new Error("No free PTZ preset id available (1..255)")}async refreshPtzPresets(){const e=await this.camera.ensureClient(),t=this.camera.getRtspChannel(),A=await e.getPtzPresets(t);return this.setCachedPtzPresets(A),this.syncEnabledPresetsSettingAndCaps(A),A}async moveToPreset(e){const t=await this.camera.ensureClient(),A=this.camera.getRtspChannel();await t.moveToPtzPreset(A,e)}async createPtzPreset(e,t){const A=await this.camera.ensureClient(),r=this.camera.getRtspChannel(),s=String(e??"").trim();if(!s)throw new Error("Preset name is required");const n=await A.getPtzPresets(r),i=new Set(n.map((e=>e.id)));let o,a=[];const c=t??this.nextFreePresetId(n);for(let e=0;e<5;e++){const n=t??c+e;if(!t&&i.has(n))continue;await A.setPtzPreset(r,n,s);const g=await A.getPtzPresets(r);a=g;if(g.some((e=>e.id===n))){o=n;break}}if(void 0===o)throw this.setCachedPtzPresets(a),this.syncEnabledPresetsSettingAndCaps(a),new Error("PTZ preset save did not persist (camera returned an empty/unchanged preset list). Try a different preset id.");this.setCachedPtzPresets(a);const g=this.storageSettings.values.presets??[];if(g.length){g.some((e=>this.parsePresetIdFromSettingValue(e)===o))||(g.push(`${o}=${s}`),this.storageSettings.values.presets=g)}return this.syncEnabledPresetsSettingAndCaps(a),{id:o,name:s}}async updatePtzPresetToCurrentPosition(e){const t=await this.camera.ensureClient(),A=this.camera.getRtspChannel(),r=this.getCachedPtzPresets().find((t=>t.id===e)),s=r?.name??`Preset ${e}`;await t.setPtzPreset(A,e,s),await this.refreshPtzPresets()}async deletePtzPreset(e){const t=await this.camera.ensureClient(),A=this.camera.getRtspChannel();await t.deletePtzPreset(A,e);const r=this.storageSettings.values.presets;if(Array.isArray(r)&&r.length){const t=r.filter((e=>"string"==typeof e)).filter((t=>this.parsePresetIdFromSettingValue(t)!==e));this.storageSettings.values.presets=t}await this.refreshPtzPresets()}async renamePtzPreset(e,t){const A=await this.camera.ensureClient(),r=this.camera.getRtspChannel(),s=String(t??"").trim();if(!s)throw new Error("Preset name is required");await A.moveToPtzPreset(r,e),await A.setPtzPreset(r,e,s),await this.refreshPtzPresets()}}},5050:(e,t,A)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StreamManager=void 0,t.parseStreamProfileFromId=function(e){if(!e)return;return"mainstream"===e?"main":"substream"===e?"sub":"extstream"===e?"ext":void 0};t.StreamManager=class{constructor(e){this.opts=e,this.nativeRfcServers=new Map,this.nativeRfcServerCreatePromises=new Map}getLogger(){return this.opts.getLogger()}async ensureNativeRfcServer(e,t,r,s){const n=this.nativeRfcServerCreatePromises.get(e);if(n)return await n;const i=(async()=>{const n=this.nativeRfcServers.get(e);if(n?.server?.listening){if(!s||n.videoType===s)return{host:n.host,port:n.port,sdp:n.sdp,audio:n.audio};this.getLogger().warn(`Native RFC cache codec mismatch for ${e}: cached=${n.videoType} expected=${s}; recreating server.`)}if(n){try{await n.close("recreate")}catch{}this.nativeRfcServers.delete(e)}const i=await this.opts.createStreamClient(),{createScryptedRfc4571TcpServer:o}=await Promise.resolve().then(A.bind(A,2470)),a=await o({api:i,channel:t,profile:r,logger:this.getLogger(),expectedVideoType:s,closeApiOnTeardown:!0});return this.nativeRfcServers.set(e,a),a.server.once("close",(()=>{const t=this.nativeRfcServers.get(e);t?.server===a.server&&this.nativeRfcServers.delete(e)})),{host:a.host,port:a.port,sdp:a.sdp,audio:a.audio}})();this.nativeRfcServerCreatePromises.set(e,i);try{return await i}finally{this.nativeRfcServerCreatePromises.delete(e)}}async getRfcStream(e,t,A,r){return await this.ensureNativeRfcServer(A,e,t,r)}}},3339:e=>{"use strict";e.exports=require("module")},4589:e=>{"use strict";e.exports=require("node:assert")},6698:e=>{"use strict";e.exports=require("node:async_hooks")},4573:e=>{"use strict";e.exports=require("node:buffer")},1421:e=>{"use strict";e.exports=require("node:child_process")},7540:e=>{"use strict";e.exports=require("node:console")},7598:e=>{"use strict";e.exports=require("node:crypto")},3053:e=>{"use strict";e.exports=require("node:diagnostics_channel")},610:e=>{"use strict";e.exports=require("node:dns")},8474:e=>{"use strict";e.exports=require("node:events")},1455:e=>{"use strict";e.exports=require("node:fs/promises")},7067:e=>{"use strict";e.exports=require("node:http")},2467:e=>{"use strict";e.exports=require("node:http2")},7030:e=>{"use strict";e.exports=require("node:net")},6760:e=>{"use strict";e.exports=require("node:path")},643:e=>{"use strict";e.exports=require("node:perf_hooks")},1792:e=>{"use strict";e.exports=require("node:querystring")},99:e=>{"use strict";e.exports=require("node:sqlite")},7075:e=>{"use strict";e.exports=require("node:stream")},7997:e=>{"use strict";e.exports=require("node:timers")},1692:e=>{"use strict";e.exports=require("node:tls")},7975:e=>{"use strict";e.exports=require("node:util")},3429:e=>{"use strict";e.exports=require("node:util/types")},5919:e=>{"use strict";e.exports=require("node:worker_threads")},8522:e=>{"use strict";e.exports=require("node:zlib")},2470:(e,t,A)=>{"use strict";A.d(t,{ReolinkBaichuanApi:()=>rt,createScryptedRfc4571TcpServer:()=>Et});const r=require("crypto"),s=require("events"),n=require("net"),i=require("dgram"),o=require("timers"),a=require("fs"),c=require("path");A(9038);const g=require("child_process"),l=require("http");var h=Buffer.from([240,222,188,10]),d=Buffer.from([160,203,237,15]),u=Uint8Array.from([31,45,60,75,90,105,120,255]),E=Buffer.from("0123456789abcdef","utf8"),I=25620;function Q(e){return e===I||0===e}var B=289;function C(e){return function(e){return(0,r.createHash)("md5").update(e,"utf8").digest("hex").toUpperCase()}(e).slice(0,31)}function p(e,t){const A=C(`${e}-${t}`).slice(0,16);return Buffer.from(A,"utf8")}function f(e,t){const A=255&t,r=Buffer.allocUnsafe(e.length);for(let t=0;t<e.length;t++){const s=u[(A+t)%u.length];r[t]=e[t]^s^A}return r}function m(e,t){return f(e,t)}function y(e,t){if(0===e.length)return Buffer.alloc(0);const A=(0,r.createCipheriv)("aes-128-cfb",t,E);return A.setAutoPadding(!1),Buffer.concat([A.update(e),A.final()])}function D(e,t){if(0===e.length)return Buffer.alloc(0);const A=(0,r.createDecipheriv)("aes-128-cfb",t,E);return A.setAutoPadding(!1),Buffer.concat([A.update(e),A.final()])}function S(e){const t=Q(e.messageClass),A=t?24:20,r=Buffer.alloc(A),s=e.magic??h;if(4!==s.length)throw new Error("magic must be 4 bytes");return s.copy(r,0),r.writeUInt32LE(e.cmdId>>>0,4),r.writeUInt32LE(e.bodyLen>>>0,8),r.writeUInt8(255&e.channelId,12),r.writeUInt8(255&e.streamType,13),r.writeUInt16LE(65535&e.msgNum,14),r.writeUInt16LE(65535&e.responseCode,16),r.writeUInt16LE(65535&e.messageClass,18),t&&r.writeUInt32LE((e.payloadOffset??0)>>>0,20),r}function w(e){if(e.length<20)throw new Error("not enough data for Baichuan header");const t=e.subarray(0,4);if(!t.equals(h)&&!t.equals(d))throw new Error(`invalid Baichuan magic: ${t.toString("hex")}`);const A=e.readUInt32LE(4),r=e.readUInt32LE(8),s=e.readUInt8(12),n=e.readUInt8(13),i=e.readUInt16LE(14),o=e.readUInt16LE(16),a=e.readUInt16LE(18),c=Q(a)?24:20;if(e.length<c)throw new Error("not enough data for Baichuan header (needs 24 bytes)");const g=e.readUInt32LE(12),l={magic:Buffer.from(t),cmdId:A,bodyLen:r,channelId:s,streamType:n,msgNum:i,responseCode:o,messageClass:a};return 24===c&&(l.payloadOffset=e.readUInt32LE(20)),{header:l,headerLen:c,messageKey:g}}var b=class{buffer=Buffer.alloc(0);push(e){if(0===e.length)return[];const t=e;this.buffer=0===this.buffer.length?t:Buffer.concat([this.buffer,t]);const A=[];for(;!(this.buffer.length<4);){if(!this.buffer.subarray(0,4).equals(h)&&!this.buffer.subarray(0,4).equals(d)){const e=this.buffer.indexOf(h),t=this.buffer.indexOf(d),A=-1===e?t:-1===t?e:Math.min(e,t);if(-1===A){this.buffer=this.buffer.subarray(Math.max(0,this.buffer.length-3));break}if(this.buffer=this.buffer.subarray(A),this.buffer.length<20)break}if(this.buffer.length<20)break;let e;try{e=w(this.buffer)}catch{break}const{header:t,headerLen:r,messageKey:s}=e,n=r+t.bodyLen;if(this.buffer.length<n)break;const i=this.buffer.subarray(0,n),o=i.subarray(r);let a=0;if(24===r){const e=t.payloadOffset??0;a=e>0?Math.min(e,t.bodyLen):0}const c=o.subarray(0,a),g=o.subarray(a);A.push({header:t,body:o,extension:c,payload:g,messageKey:s,raw:i}),this.buffer=this.buffer.subarray(n)}return A}};function R(e){if(null==e||"string"!=typeof e){throw new Error(`xmlEscape: expected string but got ${typeof e}: ${e}`)}return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function N(e){return null==e?'<?xml version="1.0" encoding="UTF-8" ?><Extension version="1.1"></Extension>':`<?xml version="1.0" encoding="UTF-8" ?>\n<Extension version="1.1">\n<channelId>${e}</channelId>\n</Extension>`}function k(e){return null==e?'<?xml version="1.0" encoding="UTF-8" ?><Extension version="1.1"><binaryData>1</binaryData></Extension>':`<?xml version="1.0" encoding="UTF-8" ?>\n<Extension version="1.1">\n<binaryData>1</binaryData>\n<channelId>${e}</channelId>\n</Extension>`}function F(e,t){const A=new RegExp(`<${t}>([^<]*)</${t}>`).exec(e);return A?.[1]}function U(e,t,A,r){let s="";const n=r?.name;"setPos"===A&&void 0!==n&&(s=`<name>${R(n)}</name>`);let i="";return void 0!==r?.enable&&(i=`<enable>${r.enable}</enable>`),`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<PtzPreset version="1.1">\n<channelId>${e}</channelId>\n<presetList>\n<preset>\n<id>${t}</id>\n<command>${A}</command>\n${s}\n${i}\n</preset>\n</presetList>\n</PtzPreset>\n</body>`}function M(e,t){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<audioPlayInfo version="1.1">\n${void 0!==e?`<channelId>${e}</channelId>`:""}\n<playMode>2</playMode>\n<playDuration>10</playDuration>\n<playTimes>1</playTimes>\n<onOff>${t}</onOff>\n</audioPlayInfo>\n</body>`}function T(e,t){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<audioPlayInfo version="1.1">\n${void 0!==e?`<channelId>${e}</channelId>`:""}\n<playMode>0</playMode>\n<playDuration>10</playDuration>\n<playTimes>${t}</playTimes>\n<onOff>1</onOff>\n</audioPlayInfo>\n</body>`}function v(e,t,A=180){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<FloodlightManual version="1.1">\n<channelId>${e}</channelId>\n<status>${t}</status>\n<duration>${A}</duration>\n</FloodlightManual>\n</body>`}var L,H=713543482,Y=713543456,x=713543440;function P(e){const t=function(){if(L)return L;const e=new Uint32Array(256);for(let t=0;t<256;t++){let A=t;for(let e=0;e<8;e++)A=1&A?3988292384^A>>>1:A>>>1;e[t]=A>>>0}return L=e,e}();let A=0;for(let r=0;r<e.length;r++){A=(t[255&(A^e[r])]^A>>>8)>>>0}return A>>>0}var V=Uint32Array.from([523058251,1517059981,941043275,2188469082,2252282411,2781280216,2205278644,401789861]);function G(e,t){const A=Buffer.allocUnsafe(t.length),r=function*(e){let t=0;for(;;){const A=V[t%V.length]+(e>>>0)>>>0;yield 255&A,yield A>>>8&255,yield A>>>16&255,yield A>>>24&255,t++}}(e>>>0);for(let e=0;e<t.length;e++)A[e]=t[e]^r.next().value;return A}function O(e,t){return e.readInt32LE(t)}function J(e,t){const A=G(e,Buffer.from(t,"utf8")),r=P(A),s=Buffer.alloc(20);return s.writeUInt32LE(H,0),s.writeUInt32LE(A.length>>>0,4),s.writeUInt32LE(1,8),s.writeUInt32LE(e>>>0,12),s.writeUInt32LE(r>>>0,16),Buffer.concat([s,A])}function W(e){const t=Buffer.alloc(20);return t.writeUInt32LE(x,0),t.writeInt32LE(0|e.connectionId,4),t.writeUInt32LE(0,8),t.writeUInt32LE(e.packetId>>>0,12),t.writeUInt32LE(e.payload.length>>>0,16),Buffer.concat([t,e.payload])}function q(e){if(e.length<4)throw new Error("BCUDP packet too short");const t=e.readUInt32LE(0);if(t===H){if(e.length<20)throw new Error("BCUDP discovery header too short");const t=e.readUInt32LE(4),A=e.readUInt32LE(8);if(1!==A)throw new Error(`BCUDP discovery unknownA expected 1, got ${A}`);const r=e.readUInt32LE(12),s=e.readUInt32LE(16),n=e.subarray(20);if(n.length<t)throw new Error("BCUDP discovery payload truncated");const i=n.subarray(0,t);if(s>>>0!=P(i)>>>0)throw new Error("BCUDP discovery CRC mismatch");const o=function(e,t){return G(e,t)}(r,i);return{kind:"discovery",tid:r,xml:o.toString("utf8")}}if(t===Y){if(e.length<28)throw new Error("BCUDP ack header too short");const t=O(e,4),A=e.readUInt32LE(8);if(0!==A)throw new Error(`BCUDP ack unknownA expected 0, got ${A}`);const r=e.readUInt32LE(12),s=e.readUInt32LE(16),n=e.readUInt32LE(20),i=e.readUInt32LE(24),o=e.subarray(28);if(o.length<i)throw new Error("BCUDP ack payload truncated");return{kind:"ack",connectionId:t,groupId:r,packetId:s,maybeLatency:n,payload:o.subarray(0,i)}}if(t===x){if(e.length<20)throw new Error("BCUDP data header too short");const t=O(e,4),A=e.readUInt32LE(8);if(0!==A)throw new Error(`BCUDP data unknownA expected 0, got ${A}`);const r=e.readUInt32LE(12),s=e.readUInt32LE(16),n=e.subarray(20);if(n.length<s)throw new Error("BCUDP data payload truncated");return{kind:"data",connectionId:t,packetId:r,payload:n.subarray(0,s)}}throw new Error(`Unknown BCUDP magic 0x${t.toString(16)}`)}function _(e){return`<P2P>${e}</P2P>`}var X=class{currentValues=[];lastReceiveTime=null;displayValue=0;lastDisplayTime=null;getValue(){return this.displayValue}feed(){const e=performance.now();if(null!==this.lastReceiveTime){const t=1e3*(e-this.lastReceiveTime);this.currentValues.push(t)}if(this.lastReceiveTime=e,null!==this.lastDisplayTime){if(e-this.lastDisplayTime>1e3){this.lastDisplayTime=e;const t=this.currentValues.length;if(t>0){const e=this.currentValues.reduce(((e,t)=>e+t),0);this.displayValue=Math.floor(e/t)}else this.displayValue=0;this.currentValues=[]}}else this.lastDisplayTime=e,this.displayValue=0}},Z=class extends s.EventEmitter{opts;sock;remote;mtu;clientId;cameraId;sid;sendPacketId=0;packetsWant=0;received=new Map;sent=new Map;ackTimer;resendTimer;hbTimer;discoveryTid;ackScheduled=!1;ackLatency=new X;lastAckPacket=Buffer.alloc(0);ackSentCount=0;pendingData=[];pendingDataOffset=0;drainScheduled=!1;constructor(e){super(),this.opts=e,this.mtu=e.mtu??1350}async connect(){if(this.sock)return;const e=i.createSocket("udp4");this.sock=e;try{e.setRecvBufferSize(4194304),e.setSendBufferSize(4194304)}catch(e){}e.on("message",((e,t)=>{try{const A=q(e);this.handlePacket(A,t.address,t.port)}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}})),e.on("error",(e=>this.emit("error",e))),e.on("close",(()=>this.emit("close"))),await new Promise((t=>e.bind(0,"0.0.0.0",(()=>t())))),"direct"===this.opts.mode?(this.remote={host:this.opts.host,port:this.opts.port},this.clientId=this.opts.clientId,this.cameraId=this.opts.cameraId):await this.discoveryUid(e),this.startTimers()}async discoveryUid(e){if("uid"!==this.opts.mode)throw new Error("Internal: discoveryUid called for non-uid mode");const t=this.opts.port?[this.opts.port]:[2015,2018],A=this.opts.host??"255.255.255.255",r=this.opts.broadcast??!0,s=this.opts.discoveryTimeout??3e4,n=this.opts.discoveryRetryInterval??500;r&&e.setBroadcast(!0);const i=e.address(),a="string"==typeof i?0:i.port,c=0|Math.floor(2147483647*Math.random())||82e3,g=function(e){const t=e.os??"MAC";return _(`<C2D_C><uid>${R(e.uid)}</uid><cli><port>${e.clientPort}</port></cli><cid>${e.cid}</cid><mtu>${e.mtu}</mtu><debug>false</debug><p>${R(t)}</p></C2D_C>`)}({uid:this.opts.uid,clientPort:a,cid:c,mtu:this.mtu}),l=await new Promise(((r,i)=>{const a=setTimeout((()=>{c&&clearInterval(c),e.off("message",m),i(new Error(`BCUDP discovery timeout after ${s}ms (camera may be sleeping or unreachable)`))}),s);let c,l,h,d,u,E=0,I=!1,Q=!1,B=!1;const C=t=>{d&&(u||(u=setTimeout((()=>{const A=d,s=l,n=h;A&&(e.off("message",m),clearTimeout(a),c&&clearInterval(c),this.emit("debug","discovery_finalize",{reason:t,...null!=s?{sid:s}:{},...A}),r({...A,...null!=s?{sid:s}:{},...null!=n?{tid:n}:{}}))}),250)))},p=(t,A)=>{if(!I&&d)try{const r=(0|Math.floor(255*Math.random()))>>>0,s=J(r,function(e){const t=e.conn??"local";return _("<C2D_T>"+(null!=e.sid?`<sid>${e.sid}</sid>`:"")+`<conn>${R(t)}</conn><cid>${e.cid}</cid><mtu>${e.mtu}</mtu></C2D_T>`)}({...null!=l?{sid:l}:{},cid:d.cid,mtu:this.mtu,conn:"local"}));e.send(s,A,t),I=!0,this.emit("debug","discovery_t_send",{sid:l,cid:d.cid,did:d.did,rhost:t,rport:A})}catch(e){this.emit("debug","discovery_t_send_error",e)}},f=(t,A,r,s)=>{if(!B)try{const n=J(t,function(e){const t=e.conn??"local";return _(`<C2D_A><sid>${e.sid}</sid><conn>${R(t)}</conn><cid>${e.cid}</cid><did>${e.did}</did><mtu>${e.mtu}</mtu></C2D_A>`)}({sid:s.sid,conn:s.conn??"local",cid:s.cid,did:s.did,mtu:this.mtu}));e.send(n,r,A),B=!0,this.emit("debug","discovery_a_send",{sid:s.sid,cid:s.cid,did:s.did,rhost:A,rport:r})}catch(e){this.emit("debug","discovery_a_send_error",e)}},m=(e,t)=>{try{const A=q(e);if("discovery"!==A.kind)return;this.emit("debug","discovery_rx",{tid:A.tid,rhost:t.address,rport:t.port,xmlPreview:A.xml.slice(0,120)});const r=function(e){const t=/<D2C_CFM>([\s\S]*?)<\/D2C_CFM>/.exec(e);if(!t)return;const A=t[1]??"",r=/<sid>(-?\d+)<\/sid>/.exec(A)?.[1];if(null==r)return;const s=/<conn>([^<]+)<\/conn>/.exec(A)?.[1],n=/<rsp>(-?\d+)<\/rsp>/.exec(A)?.[1],i=/<cid>(-?\d+)<\/cid>/.exec(A)?.[1],o=/<did>(-?\d+)<\/did>/.exec(A)?.[1];return{sid:Number(r),...null!=s?{conn:s}:{},...null!=n?{rsp:Number(n)}:{},...null!=i?{cid:Number(i)}:{},...null!=o?{did:Number(o)}:{}}}(A.xml);r&&(l=r.sid,d||null==r.cid||null==r.did||(d={cid:r.cid,did:r.did,rhost:t.address,rport:t.port}),d&&(p(t.address,t.port),C("cfm")));const s=function(e){const t=/<D2C_T>([\s\S]*?)<\/D2C_T>/.exec(e);if(!t)return;const A=t[1]??"",r=/<sid>(-?\d+)<\/sid>/.exec(A)?.[1],s=/<cid>(-?\d+)<\/cid>/.exec(A)?.[1],n=/<did>(-?\d+)<\/did>/.exec(A)?.[1];if(null==r||null==s||null==n)return;const i=/<conn>([^<]+)<\/conn>/.exec(A)?.[1];return{sid:Number(r),cid:Number(s),did:Number(n),...null!=i?{conn:i}:{}}}(A.xml);if(s)return Q=!0,l=s.sid,d||(d={cid:s.cid,did:s.did,rhost:t.address,rport:t.port}),this.emit("debug","discovery_t_rx",{sid:s.sid,cid:s.cid,did:s.did,rhost:t.address,rport:t.port}),f(A.tid,t.address,t.port,s),void C("t_a");const n=function(e){const t=/<D2C_C_R>([\s\S]*?)<\/D2C_C_R>/.exec(e);if(!t)return;const A=t[1]??"",r=/<rsp>(-?\d+)<\/rsp>/.exec(A)?.[1],s=/<cid>(-?\d+)<\/cid>/.exec(A)?.[1],n=/<did>(-?\d+)<\/did>/.exec(A)?.[1];if(null==r||null==s||null==n)return;const i=/<sid>(-?\d+)<\/sid>/.exec(A)?.[1],o=/<timer>([\s\S]*?)<\/timer>/.exec(A)?.[1],a=o?/<def>(-?\d+)<\/def>/.exec(o)?.[1]:void 0,c=o?/<hb>(-?\d+)<\/hb>/.exec(o)?.[1]:void 0,g=o?/<hbt>(-?\d+)<\/hbt>/.exec(o)?.[1]:void 0,l=null!=a||null!=c||null!=g?{...null!=a?{def:Number(a)}:{},...null!=c?{hb:Number(c)}:{},...null!=g?{hbt:Number(g)}:{}}:void 0;return{rsp:Number(r),cid:Number(s),did:Number(n),...null!=i?{sid:Number(i)}:{},...l?{timer:l}:{}}}(A.xml);if(!n)return;if(0!==n.rsp)return;return this.emit("debug","discovery_success",{retryCount:E,rhost:t.address,rport:t.port,sid:n.sid??l,timer:n.timer}),h=A.tid,d={cid:n.cid,did:n.did,rhost:t.address,rport:t.port},null!=n.sid&&(l=n.sid),p(t.address,t.port),void(Q||B?C("cr_t"):null!=l?(u&&clearTimeout(u),u=setTimeout((()=>{C("cr_timeout")}),1500)):C("cr_no_sid"))}catch{}};e.on("message",m);const y=()=>{const r=J((0|Math.floor(255*Math.random()))>>>0,g);for(const s of t)try{e.send(r,s,A),E++,this.emit("debug","discovery_send",{retryCount:E,host:A,port:s})}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}};y(),c=(0,o.setInterval)((()=>{y()}),n)}));this.clientId=l.cid,this.cameraId=l.did,this.sid=l.sid,this.discoveryTid=l.tid,this.remote={host:l.rhost,port:l.rport}}startTimers(){if(!this.sock||!this.remote||null==this.clientId||null==this.cameraId)throw new Error("BCUDP not ready");this.updateAckPacket(),this.sendHeartbeat(),this.ackTimer=(0,o.setInterval)((()=>{try{this.sendAckFast()}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}}),10),this.resendTimer=(0,o.setInterval)((()=>{try{this.resendOutstanding()}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}}),500),this.hbTimer=(0,o.setInterval)((()=>{try{this.sendHeartbeat()}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}}),1e3)}sendHeartbeat(){if(!this.sock||!this.remote||null==this.clientId||null==this.cameraId)return;const e=(0|Math.floor(255*Math.random()))>>>0;let t;var A;t=_(`<C2D_HB><cid>${(A={cid:this.clientId,did:this.cameraId}).cid}</cid><did>${A.did}</did></C2D_HB>`);const r=J(e,t);if(this.emit("debug","udp_hb_send",{tid:e,xml:t,host:this.remote.host,port:this.remote.port}),this.sock.send(r,this.remote.port,this.remote.host),"uid"===this.opts.mode){try{this.sock.send(r,2015,this.remote.host)}catch{}try{this.sock.send(r,2018,this.remote.host)}catch{}}}buildAckPayload(){if(0===this.packetsWant)return{packetId:4294967295,payload:Buffer.alloc(0)};let e=this.packetsWant;for(;this.received.has(e);)e++;let t=e-1;for(const e of this.received.keys())e>t&&(t=e);const A=e+200-1;if(t>A&&(t=A),t<e)return{packetId:e-1>>>0,payload:Buffer.alloc(0)};const r=t-e+1,s=Buffer.allocUnsafe(r);for(let t=0;t<r;t++)s[t]=this.received.has(e+t)?1:0;return{packetId:e-1>>>0,payload:s}}updateAckPacket(){if(null==this.cameraId)return;const{packetId:e,payload:t}=this.buildAckPayload();this.lastAckPacket=function(e){const t=e.payload??Buffer.alloc(0),A=Buffer.alloc(28);return A.writeUInt32LE(Y,0),A.writeInt32LE(0|e.connectionId,4),A.writeUInt32LE(0,8),A.writeUInt32LE(e.groupId>>>0,12),A.writeUInt32LE(e.packetId>>>0,16),A.writeUInt32LE((e.maybeLatency??0)>>>0,20),A.writeUInt32LE(t.length>>>0,24),Buffer.concat([A,t])}({connectionId:this.cameraId,groupId:4294967295===e&&0===t.length?4294967295:0,packetId:e,maybeLatency:this.ackLatency.getValue(),payload:t})}sendAckFast(){this.sock&&this.remote&&0!==this.lastAckPacket.length&&(this.sock.send(this.lastAckPacket,this.remote.port,this.remote.host),this.ackSentCount++,this.ackSentCount%100==0&&this.emit("debug","ack_sent_100",{latency:this.ackLatency.getValue()}))}scheduleAck(e="data"){if("manual"===e){if(this.ackScheduled)return;this.ackScheduled=!0,setImmediate((()=>{this.ackScheduled=!1;try{this.sendAckFast()}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}})),this.emit("debug","ack_scheduled",{reason:e})}}resendOutstanding(){if(this.sock&&this.remote)for(const[,e]of this.sent)this.sock.send(e.buf,this.remote.port,this.remote.host)}handleAckFromCamera(e,t){if(4294967295!==e){for(const t of this.sent.keys())t<=e&&this.sent.delete(t);for(let A=0;A<t.length;A++){if((t[A]??0)>0){const t=e+1+A>>>0;this.sent.delete(t)}}}this.ackLatency.feed()}scheduleDrain(){this.drainScheduled||(this.drainScheduled=!0,setImmediate((()=>{this.drainScheduled=!1;try{for(;this.pendingDataOffset<this.pendingData.length;this.pendingDataOffset++)this.emit("data",this.pendingData[this.pendingDataOffset])}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}finally{this.pendingDataOffset>=this.pendingData.length&&(this.pendingData=[],this.pendingDataOffset=0)}})))}flushReceived(){for(;this.received.has(this.packetsWant);){const e=this.received.get(this.packetsWant);this.received.delete(this.packetsWant),this.packetsWant++,this.pendingData.push(e)}this.pendingData.length>this.pendingDataOffset&&this.scheduleDrain()}handlePacket(e,t,A){const r=e=>{this.remote&&this.remote.host===t&&this.remote.port===A||(this.remote={host:t,port:A},this.emit("debug","remote_update",{reason:e,host:t,port:A}))};this.remote||r("first_packet"),"ack"!==e.kind?"data"!==e.kind?"discovery"===e.kind&&this.emit("debug","discovery_rx_connected",{tid:e.tid,xml:e.xml}):null!=this.clientId&&e.connectionId===this.clientId&&(r("data"),e.packetId>=this.packetsWant&&(this.received.set(e.packetId,e.payload),this.flushReceived(),this.updateAckPacket(),this.packetsWant%100==0&&this.emit("debug","udp_progress",{packetsWant:this.packetsWant}))):null!=this.clientId&&e.connectionId===this.clientId&&(r("ack"),this.handleAckFromCamera(e.packetId,e.payload))}write(e){if(!this.sock||!this.remote||null==this.cameraId)throw new Error("BCUDP stream is not connected");const t=this.mtu-20;for(let A=0;A<e.length;A+=t){const r=e.subarray(A,Math.min(e.length,A+t)),s=this.sendPacketId>>>0;this.sendPacketId=this.sendPacketId+1>>>0;const n=W({connectionId:this.cameraId,packetId:s,payload:Buffer.from(r)});this.sent.set(s,{packetId:s,buf:n,ts:Date.now()}),this.sock.send(n,this.remote.port,this.remote.host)}}async close(){this.ackTimer&&clearInterval(this.ackTimer),this.resendTimer&&clearInterval(this.resendTimer),this.hbTimer&&clearInterval(this.hbTimer),this.ackTimer=void 0,this.resendTimer=void 0,this.hbTimer=void 0;const e=this.sock;this.sock=void 0,e&&await new Promise((t=>e.close((()=>t()))))}};function z(e){e.dumpEnabled&&a.mkdirSync(e.dumpDir,{recursive:!0})}function j(e,t,A,r){e.traceStream&&t.debug(`[${A}] ${r}`)}function $(e,t,A,r){e.traceTalk&&t.debug(`[${A}] ${r}`)}function K(e){return 10===e||11===e||201===e||202===e}var ee=class extends s.EventEmitter{opts;debugCfg;logger;tcpSocket;udpSocket;transport="tcp";parser=new b;pending=new Map;msgNum=0;loggedIn=!1;subscribed=!1;keepAliveTimer;keepAlivePingInFlight=!1;enc={kind:"none"};nonce;videoSubscriptions=new Map;streamTraceStats=new Map;constructor(e){super(),this.opts=e,this.logger=e.logger??console,this.debugCfg=function(e){const t=!0===e?.enabled,A=!0===e?.debugRtsp,r=!0===e?.traceStream,s=!0===e?.traceTalk,n=!0===e?.debugH264||t,i=!0===e?.debugParamSets,o=!0===e?.dump?.enabled;return{enabled:t,debugRtsp:A,traceStream:r,traceTalk:s,debugH264:n,debugParamSets:i,dumpEnabled:o,dumpDir:e?.dump?.dir&&e.dump.dir.trim()||c.join(process.cwd(),"test","frames-debug"),dumpBcMedia:e?.dump?.bcmedia??o,dumpNals:e?.dump?.nals??o}}({...e.debug?{enabled:!0}:{},...e.debugOptions??{}})}logDebug(e,t){this.opts.debug&&(this.logger.debug(`[BaichuanClient] ${e}`,t),this.emit("debug",e,t))}getTransport(){return this.transport}getDebugConfig(){return this.debugCfg}get username(){return this.opts.username}startKeepAlive(){if(this.keepAliveTimer)return;let e=this.opts.keepAliveInterval;void 0===e&&(e="udp"===this.transport?2500:3e4),e<=0||(this.keepAliveTimer=setInterval((()=>{this.keepAlivePingInFlight||(this.keepAlivePingInFlight=!0,(async()=>{try{await this.sendPing()}catch(e){this.logDebug("keepalive_ping_error",e)}finally{this.keepAlivePingInFlight=!1}})())}),e),this.keepAliveTimer.unref?.())}stopKeepAlive(){this.keepAliveTimer&&(clearInterval(this.keepAliveTimer),this.keepAliveTimer=void 0),this.keepAlivePingInFlight=!1}async sendPing(){if((this.tcpSocket||this.udpSocket)&&this.loggedIn)try{await this.sendFrame({cmdId:93,channel:this.opts.channel??0,channelIdOverride:0,messageClass:I,streamType:0,extensionXml:""})}catch(e){this.logDebug("keepalive_ping_failed",e)}}async connect(){const e=this.opts.transport??"tcp";if("tcp"!==e)if("udp"!==e)try{await Promise.race([this.connectTcp(),new Promise(((e,t)=>setTimeout((()=>t(new Error("TCP connection timeout (falling back to UDP)"))),4e3)))])}catch(e){this.logDebug("auto:tcp_failed",e),await this.connectUdp()}else await this.connectUdp();else await this.connectTcp()}async connectTcp(){if(this.tcpSocket&&!this.tcpSocket.destroyed)return void(this.transport="tcp");const e=this.opts.port??9e3,t=n.createConnection({host:this.opts.host,port:e});this.tcpSocket=t,this.transport="tcp";if(this.opts.tcpSocketKeepAlive??!0){const e=this.opts.tcpSocketKeepAliveInitialDelayMs??3e4;try{t.setKeepAlive(!0,e)}catch(e){this.logDebug("tcp_setKeepAlive_failed",e)}}t.on("data",(e=>{const t=this.parser.push(e);for(const e of t)this.handleFrame(e)})),t.on("close",(()=>{this.stopKeepAlive(),this.emit("close");for(const[,e]of this.pending)e.reject(new Error("Baichuan socket closed"));this.pending.clear()})),t.on("error",(e=>this.emit("error",e))),await new Promise(((e,A)=>{t.once("connect",(()=>e())),t.once("error",(e=>A(e)))})),this.startKeepAlive()}async connectUdp(){if(this.udpSocket)return void(this.transport="udp");const e=this.opts.udp;if(!e)throw new Error("Baichuan UDP requested but `options.udp` is not set (required for BCUDP, typical for battery cameras).");const t=new Z(e);this.udpSocket=t,this.transport="udp",t.on("data",(e=>{const t=this.parser.push(e);for(const e of t)this.handleFrame(e)})),t.on("close",(()=>{this.stopKeepAlive(),this.emit("close");for(const[,e]of this.pending)e.reject(new Error("Baichuan UDP stream closed"));this.pending.clear()})),t.on("error",(e=>this.emit("error",e))),t.on("debug",((e,t)=>{this.logDebug(`udp_${e}`,t)})),await t.connect(),this.startKeepAlive()}async close(){this.stopKeepAlive();const e=this.tcpSocket;this.tcpSocket=void 0,e&&await new Promise((t=>{e.once("close",(()=>t())),e.destroy()}));const t=this.udpSocket;this.udpSocket=void 0,t&&await t.close()}handleFrame(e){if("udp"===this.transport&&234===e.header.cmdId&&200!==e.header.responseCode){try{const t=S({cmdId:e.header.cmdId,bodyLen:0,channelId:e.header.channelId,streamType:e.header.streamType,msgNum:e.header.msgNum,responseCode:200,messageClass:e.header.messageClass,payloadOffset:0});this.logDebug("udp_keepalive_rx",{msgNum:e.header.msgNum,channelId:e.header.channelId,streamType:e.header.streamType}),this.writeWire(t),this.logDebug("udp_keepalive_tx",{msgNum:e.header.msgNum,channelId:e.header.channelId,streamType:e.header.streamType})}catch(e){this.logDebug("udp_keepalive_error",e)}return}this.debugCfg.traceTalk&&K(e.header.cmdId)&&$(this.debugCfg,this.logger,"BaichuanTalk",`rx cmdId=${e.header.cmdId} msgNum=${e.header.msgNum} responseCode=${e.header.responseCode} channelId=${e.header.channelId} bodyLen=${e.body.length} payloadLen=${e.payload.length} payloadOffset=${e.header.payloadOffset??0}`),this.emit("frame",e);const t=`${e.header.cmdId}:${e.header.msgNum}`,A=this.pending.get(t);if(A)return this.pending.delete(t),void A.resolve(e);const r=this.videoSubscriptions.get(e.header.cmdId);if(r&&r.size>0){if(r.has(e.header.msgNum)){if(this.debugCfg.traceStream&&3===e.header.cmdId){const t=Date.now(),A=e.header.msgNum,r=this.streamTraceStats.get(A)??{lastLogMs:t,frames:0};r.frames++,t-r.lastLogMs>=500&&(j(this.debugCfg,this.logger,"BaichuanTrace",`rx stream frames cmdId=3 msgNum=${e.header.msgNum} frames=${r.frames} lastChannelId=${e.header.channelId} lastBodyLen=${e.body.length} lastPayloadLen=${e.payload.length} lastPayloadOffset=${e.header.payloadOffset??0}`),r.lastLogMs=t,r.frames=0),this.streamTraceStats.set(A,r)}this.emit("push",e)}}else if(this.emit("push",e),33===e.header.cmdId)try{const t=this.parseEvents(e);for(const e of t)this.emit("event",e)}catch(e){this.logDebug("event_parse_error",e)}}subscribeVideoStream(e,t){this.videoSubscriptions.has(e)||this.videoSubscriptions.set(e,new Set),this.videoSubscriptions.get(e).add(t),3!==e||this.streamTraceStats.has(t)||this.streamTraceStats.set(t,{lastLogMs:Date.now(),frames:0})}unsubscribeVideoStream(e,t){const A=this.videoSubscriptions.get(e);A&&(void 0!==t?(A.delete(t),0===A.size&&this.videoSubscriptions.delete(e),3===e&&this.streamTraceStats.delete(t)):(this.videoSubscriptions.delete(e),3===e&&this.streamTraceStats.clear()))}parseEvents(e){const t=e.body;if(0===t.length)return[];const A=this.tryDecryptXml(t,e.header.channelId,this.enc);if(!A||!A.startsWith("<?xml"))return[];const r=e.header.channelId,s=250===r?0:Math.max(0,r-1),n=Date.now();if(A.includes("<AlarmEventList")){const e=[],t=A.matchAll(/<AlarmEvent\b[^>]*>([\s\S]*?)<\/AlarmEvent>/g);for(const A of t){const t=A[1]??"",r=F(t,"channelId"),i=void 0!==r?Number(r):s,o=(F(t,"status")??"").trim().toUpperCase(),a=(F(t,"AItype")??F(t,"aiType")??F(t,"aitype")??"").trim();if(o.includes("MD"))e.push({channel:i,type:"motion",motion:{channel:i,state:!0,timestamp:n,source:"md"},timestamp:n});else if(o.includes("PIR"))e.push({channel:i,type:"motion",motion:{channel:i,state:!0,timestamp:n,source:"pir"},timestamp:n});else if(a){const t={people:"people",vehicle:"vehicle",dog_cat:"dog_cat",face:"face",package:"package"};e.push({channel:i,type:"ai",ai:{channel:i,type:t[a.toLowerCase()]??"other",detected:!0,timestamp:n},timestamp:n})}else o.includes("AI")?e.push({channel:i,type:"ai",ai:{channel:i,type:"other",detected:!0,timestamp:n},timestamp:n}):o.includes("VIS")?e.push({channel:i,type:"visitor",timestamp:n}):o.includes("DN")&&e.push({channel:i,type:"daynight",timestamp:n})}return e}const i=A.match(/<Event\b[^>]*>([\s\S]*?)<\/Event>/);if(!i)return[];const o=i[1]??"",a=(F(o,"status")??"").trim(),c=(F(o,"AItype")??"").trim();if(a.toUpperCase().includes("MD"))return[{channel:s,type:"motion",motion:{channel:s,state:!0,timestamp:n,source:"md"},timestamp:n}];if(a.toUpperCase().includes("PIR"))return[{channel:s,type:"motion",motion:{channel:s,state:!0,timestamp:n,source:"pir"},timestamp:n}];if(c){return[{channel:s,type:"ai",ai:{channel:s,type:{people:"people",vehicle:"vehicle",dog_cat:"dog_cat",face:"face",package:"package"}[c.toLowerCase()]??"other",detected:!0,timestamp:n},timestamp:n}]}return[]}nextMsgNum(){return this.msgNum=this.msgNum+1&65535,this.msgNum}peekNextMsgNum(){return this.msgNum+1&65535}requireSocket(){if("tcp"!==this.transport)throw new Error("Internal: requireSocket called while not using TCP");if(!this.tcpSocket||this.tcpSocket.destroyed)throw new Error("Baichuan TCP socket is not connected");return this.tcpSocket}writeWire(e){if("tcp"!==this.transport){if(!this.udpSocket)throw new Error("Baichuan UDP stream is not connected");this.udpSocket.write(e)}else this.requireSocket().write(e)}encodeBodyXml(e,t,A,r){const s=Buffer.from(e,"utf8"),n=Buffer.from(t,"utf8");return"none"===r.kind?Buffer.concat([s,n]):"bc"===r.kind?Buffer.concat([f(s,A),f(n,A)]):"aes"===r.kind||"full_aes"===r.kind?Buffer.concat([y(s,r.key),y(n,r.key)]):Buffer.concat([s,n])}encodeBodyBinary(e,t,A,r){const s=Buffer.from(e,"utf8");return"none"===r.kind?Buffer.concat([s,t]):"bc"===r.kind?Buffer.concat([f(s,A),t]):"aes"===r.kind||"full_aes"===r.kind?Buffer.concat([y(s,r.key),t]):Buffer.concat([s,t])}async sendBinaryPayloadNoReply(e){await this.connect();const t=e.channel??this.opts.channel??0,A=e.channelIdOverride??(null==e.channel?250:t+1),r=this.nextMsgNum(),s=e.cmdId,n=e.extensionXml??k(t),i=Buffer.byteLength(n,"utf8"),o=i+e.payload.length,a=e.messageClass??I,c=S({cmdId:s,bodyLen:o,channelId:A,streamType:e.streamType??0,msgNum:r,responseCode:0,messageClass:a,payloadOffset:i}),g=e.encryption??this.enc,l=this.encodeBodyBinary(n,e.payload,A,g),h=Buffer.concat([c,l]);this.logDebug("tx",{cmdId:s,msgNum:r,channelId:A,messageClass:a,bodyLen:o,binaryPayload:!0}),this.debugCfg.traceTalk&&K(s)&&$(this.debugCfg,this.logger,"BaichuanTalk",`tx cmdId=${s} msgNum=${r} channelId=${A} streamType=${e.streamType??0} class=0x${a.toString(16)} bodyLen=${o} payloadOffset=${i} binaryPayloadLen=${e.payload.length}`),this.writeWire(h)}tryDecryptXml(e,t,A){const r=e=>e.toString("utf8"),s=A=>{let s;try{s="none"===A.kind?e:"bc"===A.kind?m(e,t):D(e,A.key)}catch{return}const n=r(s);return n.startsWith("<?xml")?n:void 0};return s(A)??("bc"!==A.kind?s({kind:"bc"}):void 0)??s({kind:"none"})??r(e)}async sendXml(e){await this.connect();const t=e.channel??this.opts.channel??0,A=e.channelIdOverride??(null==e.channel?250:t+1),r=this.nextMsgNum(),s=e.cmdId,n=e.extensionXml??(null!=e.channel?N(t):""),i=e.payloadXml??"",o=e.messageClass??I,a=Buffer.byteLength(n,"utf8"),c=a+Buffer.byteLength(i,"utf8"),g=S({cmdId:s,bodyLen:c,channelId:A,streamType:e.streamType??0,msgNum:r,responseCode:0,messageClass:o,payloadOffset:a}),l=`${s}:${r}`,h=e.encryption??this.enc,d=this.encodeBodyXml(n,i,A,h),u=Buffer.concat([g,d]),E=e.timeoutMs??1e4,Q=new Promise(((e,t)=>{const A=setTimeout((()=>{this.pending.delete(l),t(new Error(`Baichuan timeout cmdId=${s} msgNum=${r}`))}),E);this.pending.set(l,{resolve:t=>{clearTimeout(A),e(t)},reject:e=>{clearTimeout(A),t(e)}})}));this.logDebug("tx",{cmdId:s,msgNum:r,channelId:A,messageClass:o,bodyLen:c}),!this.debugCfg.traceStream||3!==s&&4!==s||j(this.debugCfg,this.logger,"BaichuanTrace",`tx cmdId=${s} msgNum=${r} channelId=${A} streamType=${e.streamType??0} class=0x${o.toString(16)} bodyLen=${c} payloadOffset=${a}`),this.debugCfg.traceTalk&&K(s)&&$(this.debugCfg,this.logger,"BaichuanTalk",`tx cmdId=${s} msgNum=${r} channelId=${A} streamType=${e.streamType??0} class=0x${o.toString(16)} bodyLen=${c} payloadOffset=${a}`),this.writeWire(u);const B=await Q;if(this.logDebug("rx",{cmdId:B.header.cmdId,responseCode:B.header.responseCode,msgNum:B.header.msgNum}),!this.debugCfg.traceStream||3!==s&&4!==s||j(this.debugCfg,this.logger,"BaichuanTrace",`rx cmdId=${B.header.cmdId} msgNum=${B.header.msgNum} responseCode=${B.header.responseCode} channelId=${B.header.channelId} bodyLen=${B.body.length} payloadLen=${B.payload.length} payloadOffset=${B.header.payloadOffset??0}`),this.debugCfg.traceTalk&&K(s)&&$(this.debugCfg,this.logger,"BaichuanTalk",`rx cmdId=${B.header.cmdId} msgNum=${B.header.msgNum} responseCode=${B.header.responseCode} channelId=${B.header.channelId} bodyLen=${B.body.length} payloadLen=${B.payload.length} payloadOffset=${B.header.payloadOffset??0}`),400===B.header.responseCode){if(0===B.body.length)throw new Error("Baichuan authentication failed (responseCode 400, empty body) - check username/password")}const C=B.body;if(0===C.length)return"";return this.tryDecryptXml(C,B.header.channelId,h)}async sendFrame(e){await this.connect();const t=e.channel??this.opts.channel??0,A=e.channelIdOverride??(null==e.channel?250:t+1),r=e.msgNumOverride??this.nextMsgNum(),s=e.cmdId,n=e.extensionXml??(null!=e.channel?N(t):""),i=e.payloadXml??"",o=e.messageClass??I,a=Buffer.byteLength(n,"utf8"),c=a+Buffer.byteLength(i,"utf8"),g=S({cmdId:s,bodyLen:c,channelId:A,streamType:e.streamType??0,msgNum:r,responseCode:0,messageClass:o,payloadOffset:a}),l=`${s}:${r}`,h=e.encryption??this.enc,d=this.encodeBodyXml(n,i,A,h),u=Buffer.concat([g,d]),E=e.timeoutMs??1e4,Q=new Promise(((e,t)=>{const A=setTimeout((()=>{this.pending.delete(l),t(new Error(`Baichuan timeout cmdId=${s} msgNum=${r}`))}),E);this.pending.set(l,{resolve:t=>{clearTimeout(A),e(t)},reject:e=>{clearTimeout(A),t(e)}})}));this.logDebug("tx",{cmdId:s,msgNum:r,channelId:A,messageClass:o,bodyLen:c}),!this.debugCfg.traceStream||3!==s&&4!==s||j(this.debugCfg,this.logger,"BaichuanTrace",`tx cmdId=${s} msgNum=${r} channelId=${A} streamType=${e.streamType??0} class=0x${o.toString(16)} bodyLen=${c} payloadOffset=${a}`),this.debugCfg.traceTalk&&K(s)&&$(this.debugCfg,this.logger,"BaichuanTalk",`tx cmdId=${s} msgNum=${r} channelId=${A} streamType=${e.streamType??0} class=0x${o.toString(16)} bodyLen=${c} payloadOffset=${a}`),this.writeWire(u);const B=await Q;return this.logDebug("rx",{cmdId:B.header.cmdId,responseCode:B.header.responseCode,msgNum:B.header.msgNum}),!this.debugCfg.traceStream||3!==s&&4!==s||j(this.debugCfg,this.logger,"BaichuanTrace",`rx cmdId=${B.header.cmdId} msgNum=${B.header.msgNum} responseCode=${B.header.responseCode} channelId=${B.header.channelId} bodyLen=${B.body.length} payloadLen=${B.payload.length} payloadOffset=${B.header.payloadOffset??0}`),this.debugCfg.traceTalk&&K(s)&&$(this.debugCfg,this.logger,"BaichuanTalk",`rx cmdId=${B.header.cmdId} msgNum=${B.header.msgNum} responseCode=${B.header.responseCode} channelId=${B.header.channelId} bodyLen=${B.body.length} payloadLen=${B.payload.length} payloadOffset=${B.header.payloadOffset??0}`),B}async sendBinary(e){if(109===e.cmdId)return await this.sendBinarySnapshot109(e);await this.connect();const t=e.channel??this.opts.channel??0,A=e.channelIdOverride??(null==e.channel?250:t+1),r=this.nextMsgNum(),s=e.cmdId,n=e.extensionXml??(null!=e.channel?k(t):k(void 0)),i=e.payloadXml??"",o=e.messageClass??I,a=Buffer.byteLength(n,"utf8"),c=a+Buffer.byteLength(i,"utf8"),g=S({cmdId:s,bodyLen:c,channelId:A,streamType:0,msgNum:r,responseCode:0,messageClass:o,payloadOffset:a}),l=`${s}:${r}`,h=e.encryption??this.enc,d=this.encodeBodyXml(n,i,A,h),u=Buffer.concat([g,d]),E=e.timeoutMs??1e4,Q=new Promise(((e,t)=>{const A=setTimeout((()=>{this.pending.delete(l),t(new Error(`Baichuan timeout cmdId=${s} msgNum=${r}`))}),E);this.pending.set(l,{resolve:t=>{clearTimeout(A),e(t)},reject:e=>{clearTimeout(A),t(e)}})}));this.logDebug("tx",{cmdId:s,msgNum:r,channelId:A,messageClass:o,bodyLen:c,binary:!0}),this.writeWire(u);const B=await Q;if(this.logDebug("rx",{cmdId:B.header.cmdId,responseCode:B.header.responseCode,msgNum:B.header.msgNum,binary:!0}),400===B.header.responseCode){if(0===B.body.length)throw new Error("Baichuan binary request failed (responseCode 400, empty body)")}const C=B.payload;if(0===C.length)return Buffer.alloc(0);return this.tryDecryptBinary(C,B.header.channelId,h)}async sendBinarySnapshot109(e){await this.connect();const t=e.channel??this.opts.channel??0,A=e.channelIdOverride??(null==e.channel?250:t+1),r=this.nextMsgNum(),s=e.cmdId,n=e.extensionXml??(null!=e.channel?N(t):""),i=e.payloadXml??"",o=e.messageClass??I,a=Buffer.byteLength(n,"utf8"),c=a+Buffer.byteLength(i,"utf8"),g=S({cmdId:s,bodyLen:c,channelId:A,streamType:e.streamType??0,msgNum:r,responseCode:0,messageClass:o,payloadOffset:a}),l=e.encryption??this.enc,h=this.encodeBodyXml(n,i,A,l),d=Buffer.concat([g,h]),u=e.timeoutMs??15e3,E=[];let Q=!1;return await new Promise(((e,t)=>{let n,i=!1;const a=()=>{this.off("frame",I),n&&clearTimeout(n)},g=t=>{i||(i=!0,a(),e(t))},h=e=>{i||(i=!0,a(),t(e instanceof Error?e:new Error(String(e))))},I=e=>{if(e.header.cmdId===s)if(e.header.msgNum===r&&e.header.responseCode>=400)h(new Error(`Baichuan snapshot request rejected (cmdId=${s} msgNum=${r} responseCode=${e.header.responseCode})`));else try{let t=!1;if(e.extension.length>0){this.tryDecryptXml(e.extension,e.header.channelId,l).includes("<binaryData>1</binaryData>")&&(t=!0)}const A=this.tryDecryptBinary(e.payload,e.header.channelId,l);if(0===A.length)return;const r=A.subarray(0,Math.min(16,A.length)).toString("utf8"),s=r.startsWith("<?xml")||r.trimStart().startsWith("<");if(!t&&s)return;let n=A;if(!Q){const r=(e=>{for(let t=0;t+1<e.length;t++)if(255===e[t]&&216===e[t+1])return t;return-1})(A);if(-1===r){if(!t)return;n=A,E.push(n);const r=Buffer.concat(E);return void(201===e.header.responseCode&&g(r))}Q=!0,n=A.subarray(r)}E.push(n);const i=Buffer.concat(E);if((e=>{for(let t=0;t+1<e.length;t++)if(255===e[t]&&217===e[t+1])return!0;return!1})(i)||201===e.header.responseCode){const e=i.indexOf(Buffer.from([255,217]));if(-1!==e)return void g(i.subarray(0,e+2));g(i)}}catch(e){h(e)}};n=setTimeout((()=>{h(new Error(`Baichuan timeout waiting snapshot push cmdId=${s} msgNum=${r}`))}),u),this.on("frame",I);try{this.logDebug("tx",{cmdId:s,msgNum:r,channelId:A,messageClass:o,bodyLen:c,binary:!0,snapshot:!0}),this.writeWire(d)}catch(e){h(e)}}))}tryDecryptBinary(e,t,A){if(0===e.length)return e;const r=A=>{try{return"none"===A.kind?e:"bc"===A.kind?m(e,t):"aes"===A.kind||"full_aes"===A.kind?D(e,A.key):null}catch{return null}};return r(A)??("bc"===A.kind||"none"===this.enc.kind||"aes"!==this.enc.kind&&"full_aes"!==this.enc.kind?null:r(this.enc))??("bc"!==A.kind?r({kind:"bc"}):null)??r({kind:"none"})??e}async login(e="full_aes"){if(this.loggedIn)return;let t;const A=e=>new Promise((t=>setTimeout(t,e)));for(let s=1;s<=3;s++)try{const t="none"===e?56320:"bc"===e?56321:56338;await this.connect();const A=this.nextMsgNum(),s=1,n=S({cmdId:s,bodyLen:0,channelId:250,streamType:0,msgNum:A,responseCode:t,messageClass:25876}),i=`${s}:${A}`,o=new Promise(((e,t)=>{const A=setTimeout((()=>{this.pending.delete(i),t(new Error("Baichuan timeout waiting for nonce"))}),1e4);this.pending.set(i,{resolve:t=>{clearTimeout(A),e(t)},reject:e=>{clearTimeout(A),t(e)}})}));this.writeWire(n);const a=await o,c=a.header.responseCode;if(c>>>8!=221)throw new Error(`Baichuan login: expected encryption info (0xDDxx), got 0x${c.toString(16)}`);const g=255&c,l=F(this.tryDecryptXml(a.body,a.header.channelId,0===g?{kind:"none"}:{kind:"bc"}),"nonce");if(!l)throw new Error("Baichuan login: nonce not found in XML");if(this.nonce=l,0===g)this.enc={kind:"none"};else if(1===g)this.enc={kind:"bc"};else if(2===g)this.enc={kind:"aes",key:p(l,this.opts.password)};else{if(18!==g)throw new Error(`Baichuan login: unknown encType=0x${g.toString(16)}`);this.enc={kind:"full_aes",key:p(l,this.opts.password)}}const h=C(`${this.opts.username}${l}`),d=C(`${this.opts.password}${l}`),u=(r=d,`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<LoginUser version="1.1">\n<userName>${R(h)}</userName>\n<password>${R(r)}</password>\n<userVer>1</userVer>\n</LoginUser>\n<LoginNet version="1.1">\n<type>LAN</type>\n<udpPort>0</udpPort>\n</LoginNet>\n</body>`);this.logDebug("login_hash",{username:this.opts.username,nonce:l,userHash:h,passHashLength:d.length,loginXmlLength:u.length,loginXmlPreview:u.substring(0,200)});const E=await this.sendFrame({cmdId:1,payloadXml:u,extensionXml:"",messageClass:I,encryption:{kind:"bc"},timeoutMs:1e4}),Q=this.tryDecryptXml(E.body,E.header.channelId,{kind:"bc"});if(this.logDebug("login_reply",{replyLength:Q.length,replyPreview:Q.substring(0,200),startsWithXml:Q.startsWith("<?xml")}),0===Q.length)throw new Error("Baichuan login failed: empty reply (camera may be sleeping/waking, session may be stale, or username/password may be invalid)");if(!Q.startsWith("<?xml")){const e=Q.length>0?Q.substring(0,100):"(empty)";throw new Error(`Baichuan login: unexpected non-XML reply (length: ${Q.length}, preview: ${e})`)}return void(this.loggedIn=!0)}catch(e){t=e,this.loggedIn=!1;try{await this.close()}catch{}if(s<3){await A(1500);continue}throw e}var r;throw t instanceof Error?t:new Error(String(t))}};function te(e){if(e.length<4)return null;const t=e.readUInt32LE(0);return 825241649===t?function(e){if(e.length<32)return null;const t=e.readUInt32LE(4);if(32!==t)return null;const A={type:"InfoV1",videoWidth:e.readUInt32LE(8),videoHeight:e.readUInt32LE(12),fps:e.readUInt8(17),startYear:e.readUInt8(18),startMonth:e.readUInt8(19),startDay:e.readUInt8(20),startHour:e.readUInt8(21),startMin:e.readUInt8(22),startSeconds:e.readUInt8(23),endYear:e.readUInt8(24),endMonth:e.readUInt8(25),endDay:e.readUInt8(26),endHour:e.readUInt8(27),endMin:e.readUInt8(28),endSeconds:e.readUInt8(29)};return{media:A,consumed:32}}(e):842018865===t?function(e){if(e.length<32)return null;const t=e.readUInt32LE(4);if(32!==t)return null;const A={type:"InfoV2",videoWidth:e.readUInt32LE(8),videoHeight:e.readUInt32LE(12),fps:e.readUInt8(17),startYear:e.readUInt8(18),startMonth:e.readUInt8(19),startDay:e.readUInt8(20),startHour:e.readUInt8(21),startMin:e.readUInt8(22),startSeconds:e.readUInt8(23),endYear:e.readUInt8(24),endMonth:e.readUInt8(25),endDay:e.readUInt8(26),endHour:e.readUInt8(27),endMin:e.readUInt8(28),endSeconds:e.readUInt8(29)};return{media:A,consumed:32}}(e):t>=1667510320&&t<=1667510329?function(e){if(e.length<20)return null;const t=e.toString("utf8",4,8);if("H264"!==t&&"H265"!==t)return null;const A=t,r=e.readUInt32LE(8),s=e.readUInt32LE(12),n=e.readUInt32LE(16);let i=20;const o=e.readUInt32LE(i);let a;if(i+=4,e.length<i+s)return null;const c=e.subarray(i,i+s);s>=4&&(a=c.readUInt32LE(0));if(i+=s,e.length<i+r)return null;const g=e.subarray(i,i+r);i+=r;const l=r%8==0?0:8-r%8;if(e.length<i+l)return null;i+=l;return{media:{type:"Iframe",videoType:A,microseconds:n,...void 0!==a?{time:a}:{},additionalHeader:c,additionalHeaderSize:s,unknown:o,data:g},consumed:i}}(e):t>=1667510576&&t<=1667510585?function(e){if(e.length<20)return null;const t=e.toString("utf8",4,8);if("H264"!==t&&"H265"!==t)return null;const A=t,r=e.readUInt32LE(8),s=e.readUInt32LE(12),n=e.readUInt32LE(16);let i=20;const o=e.readUInt32LE(i);if(i+=4,e.length<i+s)return null;const a=e.subarray(i,i+s);if(i+=s,e.length<i+r)return null;const c=e.subarray(i,i+r);i+=r;const g=r%8==0?0:8-r%8;if(e.length<i+g)return null;i+=g;return{media:{type:"Pframe",videoType:A,microseconds:n,additionalHeader:a,additionalHeaderSize:s,unknown:o,data:c},consumed:i}}(e):1651979568===t?function(e){if(e.length<12)return null;const t=e.readUInt16LE(4),A=e.readUInt16LE(6);if(t!==A)return null;const r=8,s=r+t+(t%8==0?0:8-t%8);if(e.length<s)return null;const n=e.subarray(r,r+t);return{media:{type:"Aac",data:n},consumed:s}}(e):1651978544===t?function(e){if(e.length<12)return null;const t=e.readUInt16LE(4),A=e.readUInt16LE(6);if(t!==A)return null;const r=e.readUInt16LE(8);if(256!==r)return null;e.readUInt16LE(10);const s=4;if(t<s)return null;const n=t-s,i=12,o=i+n+(t%8==0?0:8-t%8);if(e.length<o)return null;const a=e.subarray(i,i+n);return{media:{type:"Adpcm",data:a},consumed:o}}(e):null}var Ae=class{buffer=Buffer.alloc(0);strict;amountSkipped=0;logger;constructor(e=!1,t){this.strict=e,this.logger=t}decode(e){this.buffer=0===this.buffer.length?e:Buffer.concat([this.buffer,e]);const t=[];for(;this.buffer.length>=4;){const e=te(this.buffer);if(!e){const e=this.buffer.readUInt32LE(0);if(825241649===e||842018865===e||e>=1667510320&&e<=1667510329||e>=1667510576&&e<=1667510585||1651979568===e||1651978544===e)break;if(this.strict)throw new Error(`[BcMediaCodec] Invalid data in stream (no valid magic at buffer start, len=${this.buffer.length})`);0===this.amountSkipped&&this.logger?.warn("[BcMediaCodec] Error in stream, attempting to recover..."),this.amountSkipped+=this.buffer.length,this.buffer=Buffer.alloc(0);break}this.amountSkipped>0&&(this.strict,this.logger?.warn(`[BcMediaCodec] Recovered stream after skipping ${this.amountSkipped} bytes`),this.amountSkipped=0),t.push(e.media),this.buffer=this.buffer.subarray(e.consumed)}return t}getRemainingBuffer(){return this.buffer}clear(){this.buffer=Buffer.alloc(0),this.amountSkipped=0}},re=Buffer.from([0,0,0,1]),se=Buffer.from([0,0,1]);function ne(e){return!(e.length<4)&&(!!e.subarray(0,4).equals(re)||!!e.subarray(0,3).equals(se))}function ie(e,t){const A=[];let r=0,s=0;for(;r<e.length;){if(r+4>e.length)return null;const n=t(e,r);if(r+=4,n<=0)return null;if(n>e.length-r)return null;A.push(re),A.push(e.subarray(r,r+n)),r+=n,s++}return 0===s?null:Buffer.concat(A)}function oe(e,t){const A=[];let r=0,s=0;for(;r<e.length;){if(r+2>e.length)return null;const n=t(e,r);if(r+=2,n<=0)return null;if(n>e.length-r)return null;A.push(re),A.push(e.subarray(r,r+n)),r+=n,s++}return 0===s?null:Buffer.concat(A)}function ae(e,t){const A=[];let r=0,s=0;const n=(e,A)=>{if(A+3>e.length)return 0;const r=e[A],s=e[A+1],n=e[A+2];return"be"===t?(r<<16|s<<8|n)>>>0:(n<<16|s<<8|r)>>>0};for(;r<e.length;){if(r+3>e.length)return null;const t=n(e,r);if(r+=3,t<=0)return null;if(t>e.length-r)return null;A.push(re),A.push(e.subarray(r,r+t)),r+=t,s++}return 0===s?null:Buffer.concat(A)}function ce(e){if(ne(e))return e;const t=Buffer.from([0,0,0,1]),A=Buffer.from([0,0,1]),r=Math.min(64,e.length),s=e.subarray(0,r).indexOf(t);if(s>0)return e.subarray(s);const n=e.subarray(0,r).indexOf(A);if(n>0)return e.subarray(n);const i=ie(e,((e,t)=>e.readUInt32BE(t)));if(i)return i;const o=ie(e,((e,t)=>e.readUInt32LE(t)));if(o)return o;const a=ae(e,"be");if(a)return a;const c=ae(e,"le");if(c)return c;const g=oe(e,((e,t)=>e.readUInt16BE(t)));if(g)return g;const l=oe(e,((e,t)=>e.readUInt16LE(t)));if(l)return l;const h=function(e){if(e.length<1)return null;const t=31&e[0],A=[],r=e=>{0!==e.length&&A.push(re,e)};if(24===t){let t=1;for(;t+2<=e.length;){const A=e.readUInt16BE(t);if(t+=2,A<=0||t+A>e.length)return null;r(e.subarray(t,t+A)),t+=A}return A.length?Buffer.concat(A):null}if(25===t){let t=3;if(t>e.length)return null;for(;t+2<=e.length;){const A=e.readUInt16BE(t);if(t+=2,A<=0||t+A>e.length)return null;r(e.subarray(t,t+A)),t+=A}return A.length?Buffer.concat(A):null}if(26===t){let t=3;if(t>e.length)return null;for(;t+2<=e.length;){const A=e.readUInt16BE(t);if(t+=2,t+1+2>e.length)return null;if(t+=1,t+=2,A<=0||t+A>e.length)return null;r(e.subarray(t,t+A)),t+=A}return A.length?Buffer.concat(A):null}if(27===t){let t=3;if(t>e.length)return null;for(;t+2<=e.length;){const A=e.readUInt16BE(t);if(t+=2,t+1+3>e.length)return null;if(t+=1,t+=3,A<=0||t+A>e.length)return null;r(e.subarray(t,t+A)),t+=A}return A.length?Buffer.concat(A):null}return null}(e);return h||(function(e){if(e.length<1)return!1;const t=e[0];if(void 0===t)return!1;if(128&t)return!1;const A=31&t;return A>=1&&A<=23}(e)?Buffer.concat([re,e]):e)}function ge(e){const t=[];for(let A=0;A<e.length-3;A++)0===e[A]&&0===e[A+1]&&(1===e[A+2]?(t.push({idx:A,len:3}),A+=2):0===e[A+2]&&1===e[A+3]&&(t.push({idx:A,len:4}),A+=3));if(0===t.length)return[];const A=[];for(let r=0;r<t.length;r++){const s=t[r],n=s.idx+s.len,i=t[r+1]?t[r+1].idx:e.length;i>n&&A.push(e.subarray(n,i))}return A}function le(e){if(!ne(e))return!1;const t=ge(e);if(0===t.length)return!1;for(const e of t){if(e.length<1)return!1;const t=e[0];if(void 0===t)return!1;if(128&t)return!1;const A=31&t;if(0===A||A>=24)return!1}return!0}function he(e){const t=ge(e);let A=!1,r=!1,s=!1;for(const e of t){const t=31&(e[0]??0);7===t&&(A=!0),8===t&&(r=!0),5===t&&(s=!0)}return s&&A&&r}var de=class e{fuNalHeader=null;fuParts=[];static parseRtpPayload(e){if(!e||e.length<12)return null;if(2!==(e[0]>>6&3))return null;const t=!!(32&e[0]),A=!!(16&e[0]);let r=12+4*(15&e[0]);if(r>e.length)return null;if(A){if(r+4>e.length)return null;if(r+=4+4*e.readUInt16BE(r+2),r>e.length)return null}let s=e.length;if(t){const t=e[e.length-1];if(t<=0||t>e.length)return null;if(s=e.length-t,s<r)return null}return s<=r?null:e.subarray(r,s)}reset(){this.fuNalHeader=null,this.fuParts=[]}push(t){if(0===t.length)return[];const A=e.parseRtpPayload(t);if(A&&(t=A),ne(t))return[t];const r=t[0];if(128&r)return[];const s=31&r;if(s>=1&&s<=23)return[Buffer.concat([re,t])];if(24===s){if(t.length<3)return[];let e=1;const A=[];for(;e+2<=t.length;){const r=t.readUInt16BE(e);if(e+=2,r<=0||e+r>t.length)return[];const s=t.subarray(e,e+r);if(e+=r,s.length<1)return[];if(128&s[0])return[];const n=31&s[0];if(0===n||n>=24)return[];A.push(Buffer.concat([re,s]))}return A}if(28===s||29===s){if(t.length<2)return[];const e=t[0],A=t[1],r=!!(128&A),n=!!(64&A),i=224&e|31&A;let o=2;if(29===s){if(t.length<o+2)return[];o+=2}const a=t.subarray(o);if(r)this.fuNalHeader=i,this.fuParts=[a];else{if(null==this.fuNalHeader)return[];this.fuParts.push(a)}if(n&&null!=this.fuNalHeader){const e=Buffer.concat([Buffer.from([this.fuNalHeader]),...this.fuParts]);return this.reset(),[Buffer.concat([re,e])]}return[]}return[]}};var ue=Buffer.from([0,0,0,1]),Ee=Buffer.from([0,0,1]);function Ie(e){return!(e.length<4)&&(!!e.subarray(0,4).equals(ue)||!!e.subarray(0,3).equals(Ee))}function Qe(e,t){const A=[];let r=0,s=0;for(;r<e.length;){if(r+4>e.length)return null;const n=t(e,r);if(r+=4,n<=0)return null;if(n>e.length-r)return null;A.push(ue),A.push(e.subarray(r,r+n)),r+=n,s++}return 0===s?null:Buffer.concat(A)}function Be(e,t){const A=[];let r=0,s=0;for(;r<e.length;){if(r+2>e.length)return null;const n=t(e,r);if(r+=2,n<=0)return null;if(n>e.length-r)return null;A.push(ue),A.push(e.subarray(r,r+n)),r+=n,s++}return 0===s?null:Buffer.concat(A)}function Ce(e,t){const A=[];let r=0,s=0;const n=(e,A)=>{if(A+3>e.length)return 0;const r=e[A],s=e[A+1],n=e[A+2];return"be"===t?(r<<16|s<<8|n)>>>0:(n<<16|s<<8|r)>>>0};for(;r<e.length;){if(r+3>e.length)return null;const t=n(e,r);if(r+=3,t<=0)return null;if(t>e.length-r)return null;A.push(ue),A.push(e.subarray(r,r+t)),r+=t,s++}return 0===s?null:Buffer.concat(A)}function pe(e){if(Ie(e))return e;const t=Buffer.from([0,0,0,1]),A=Buffer.from([0,0,1]),r=Math.min(64,e.length),s=e.subarray(0,r).indexOf(t);if(s>0)return e.subarray(s);const n=e.subarray(0,r).indexOf(A);if(n>0)return e.subarray(n);const i=Qe(e,((e,t)=>e.readUInt32BE(t)));if(i)return i;const o=Qe(e,((e,t)=>e.readUInt32LE(t)));if(o)return o;const a=Ce(e,"be");if(a)return a;const c=Ce(e,"le");if(c)return c;const g=Be(e,((e,t)=>e.readUInt16BE(t)));if(g)return g;const l=Be(e,((e,t)=>e.readUInt16LE(t)));return l||(function(e){if(e.length<2)return!1;const t=e[0],A=e[1];return void 0!==t&&void 0!==A&&(!(128&t)&&(t>>1&63)<=40)}(e)?Buffer.concat([ue,e]):e)}var fe=class e{fuParts=null;reset(){this.fuParts=null}static parseRtpPayload(e){if(!e||e.length<12)return null;if(2!==(e[0]>>6&3))return null;const t=!!(32&e[0]),A=!!(16&e[0]);let r=12+4*(15&e[0]);if(r>e.length)return null;if(A){if(r+4>e.length)return null;if(r+=4+4*e.readUInt16BE(r+2),r>e.length)return null}let s=e.length;if(t){const t=e[e.length-1];if(t<=0||t>e.length)return null;if(s=e.length-t,s<r)return null}return s<=r?null:e.subarray(r,s)}push(t){if(!t||t.length<2)return[];const A=e.parseRtpPayload(t);A&&(t=A);const r=t[0],s=t[1];if(128&r)return[];const n=r>>1&63;if(48===n){let e=2;const A=[];for(;e+2<=t.length;){const r=t.readUInt16BE(e);if(e+=2,r<=0||e+r>t.length)return[];const s=t.subarray(e,e+r);e+=r,s.length&&A.push(ue,s)}return A.length?[Buffer.concat(A)]:[]}if(49===n){if(t.length<3)return[];const e=t[2],A=!!(128&e),n=!!(64&e),i=129&r|(63&(63&e))<<1,o=s,a=t.subarray(3);if(A)this.fuParts=[ue,Buffer.from([i,o]),a];else{if(!this.fuParts)return[];this.fuParts.push(a)}if(n){if(!this.fuParts)return[];const e=Buffer.concat(this.fuParts);return this.fuParts=null,[e]}return[]}return[Buffer.concat([ue,t])]}};function me(e){const t=[];for(let A=0;A<e.length-3;A++)0===e[A]&&0===e[A+1]&&(1===e[A+2]?(t.push({idx:A,len:3}),A+=2):0===e[A+2]&&1===e[A+3]&&(t.push({idx:A,len:4}),A+=3));if(0===t.length)return[];const A=[];for(let r=0;r<t.length;r++){const s=t[r],n=s.idx+s.len,i=t[r+1]?t[r+1].idx:e.length;i>n&&A.push(e.subarray(n,i))}return A}function ye(e){if(e.length<1)return null;const t=e[0];return void 0===t||128&t?null:t>>1&63}function De(e){return e>=16&&e<=23}function Se(e){if(!Ie(e))return!1;const t=me(e);if(0===t.length)return!1;for(const e of t){if(e.length<2)return!1;const t=e[0];if(void 0===t)return!1;if(128&t)return!1;const A=ye(e);if(null===A)return!1;if(A>40)return!1}return!0}function we(e){const t=me(e);let A=!1,r=!1,s=!1,n=!1;for(const e of t){const t=ye(e);null!==t&&(32===t&&(A=!0),33===t&&(r=!0),34===t&&(s=!0),De(t)&&(n=!0))}return n&&A&&r&&s}function be(e){const t=me(e);for(const e of t){if(32===ye(e))return e}return null}function Re(e){const t=me(e);for(const e of t){if(33===ye(e))return e}return null}function Ne(e){const t=me(e);for(const e of t){if(34===ye(e))return e}return null}var ke=Buffer.from([0,0,0,1]);var Fe=class{running=!1;queue=[];maxQueueSize;constructor(e){this.maxQueueSize=e}enqueue(e){this.queue.length>=this.maxQueueSize||(this.queue.push(e),this.pump())}pump(){this.running||(this.running=!0,this.run())}async run(){try{for(;this.queue.length>0;){const e=this.queue.shift();if(e)try{await e()}catch{}}}finally{this.running=!1}}};function Ue(e){const t=[];for(let A=0;A<e.length;A++)A>=2&&3===e[A]&&0===e[A-1]&&0===e[A-2]||t.push(e[A]);return Buffer.from(t)}var Me=class{b;bitPos=0;constructor(e){this.b=e}readBits(e){if(e<=0)return 0;let t=0;for(let A=0;A<e;A++){const e=this.bitPos>>3;if(e>=this.b.length)return null;const A=7-(7&this.bitPos);t=t<<1|this.b[e]>>A&1,this.bitPos++}return t>>>0}readUE(){let e=0;for(;;){const t=this.readBits(1);if(null==t)return null;if(0!==t)break;if(e++,e>31)return null}const t=e?this.readBits(e):0;return null==t?null:(1<<e)-1+t>>>0}};function Te(e){if(7!=(31&(e[0]??0)))return null;const t=Ue(e.subarray(1)),A=new Me(t);return null==A.readBits(8)||null==A.readBits(8)||null==A.readBits(8)?null:A.readUE()}function ve(e){if(8!=(31&(e[0]??0)))return null;const t=Ue(e.subarray(1)),A=new Me(t),r=A.readUE(),s=A.readUE();return null==r||null==s?null:{ppsId:r,spsId:s}}function Le(e){const t=31&(e[0]??0);if(1!==t&&5!==t)return null;const A=Ue(e.subarray(1)),r=new Me(A);return null==r.readUE()||null==r.readUE()?null:r.readUE()}var He=class e extends s.EventEmitter{client;api;channel;profile;logger;active=!1;videoFrameHandler;expectedStreamType;activeMsgNum;bcMediaCodec;debugH264LogsLeft;debugSavedSamples;warnedNonAnnexBOnce=!1;depacketizer=new de;depacketizerH265=new fe;dumpChunkIdx=0;dumpNalLines=0;dumpIo=new Fe(200);spsById=new Map;ppsById=new Map;lastSps=null;lastPps=null;lastPrependedPpsId=null;lastVps=null;lastSpsH265=null;lastPpsH265=null;lastPrependedParamSetsH265=!1;static scoreBcMediaLike(e){if(e.length<4)return{score:-1,first:-1};const t=Math.min(65536,e.length-4);let A=0,r=-1;for(let s=0;s<=t;s++){const t=e.readUInt32LE(s);if((825241649===t||842018865===t||t>=1667510320&&t<=1667510329||t>=1667510576&&t<=1667510585||1651979568===t||1651978544===t)&&(A++,r<0&&(r=s),A>32&&0===r))break}return{score:1e3*A-(r<0?5e4:r),first:r}}chooseDecryptedOrRawCandidate(t){const{raw:A,enc:r,channelId:s,allowResync:n}=t,i=e.scoreBcMediaLike(A),o="aes"===this.client.enc.kind||"full_aes"===this.client.enc.kind||"bc"===this.client.enc.kind?this.client.tryDecryptBinary(A,s,r):A,a=e.scoreBcMediaLike(o).score>i.score?o:A;if(!n)return a;const c=e.scoreBcMediaLike(a);return c.first>0?a.subarray(c.first):a}constructor(e){super(),this.client=e.client,this.api=e.api,this.channel=e.channel,this.profile=e.profile,this.logger=e.logger,this.expectedStreamType="sub"===this.profile?1:0,this.bcMediaCodec=new Ae(!1,this.logger);const t=this.client.getDebugConfig();this.debugH264LogsLeft=t.debugH264?200:0,this.debugSavedSamples=!1,this.dumpChunkIdx=0,this.spsById=new Map,this.ppsById=new Map,this.lastSps=null,this.lastPps=null,this.lastPrependedPpsId=null,this.lastVps=null,this.lastSpsH265=null,this.lastPpsH265=null,this.lastPrependedParamSetsH265=!1}async start(){if(this.active)throw new Error("Video stream already active");if(this.depacketizer.reset(),this.depacketizerH265.reset(),this.api)try{await this.api.startVideoStream(this.channel,this.profile);try{const e=this.api.getActiveVideoMsgNum;this.activeMsgNum="function"==typeof e?e(this.channel,this.profile):void 0}catch{this.activeMsgNum=void 0}}catch(e){const t=e instanceof Error?e:new Error(String(e));if("udp"===this.client.getTransport?.())throw t;this.emit("error",t)}let e=0,t=0;this.videoFrameHandler=A=>{if(3!==A.header.cmdId)return;if(A.header.streamType!==this.expectedStreamType)return;if(void 0!==this.activeMsgNum&&A.header.msgNum!==this.activeMsgNum)return;e++;const r=this.client.getDebugConfig(),s=r.debugRtsp||function(e,t){if(null==e)return t;const A=e.trim().toLowerCase();return"1"===A||"true"===A||"yes"===A||"on"===A||"0"!==A&&"false"!==A&&"no"!==A&&"off"!==A&&t}(process.env.BAICHUAN_DEBUG_RTSP,!1);1===e&&s&&this.logger?.log(`[BaichuanVideoStream] First cmd_id=3 frame received (bodyLen: ${A.body.length}, channelId: ${A.header.channelId})`),(e%10==0||e<=5)&&s&&this.logger?.log(`[BaichuanVideoStream] Received ${e} Baichuan frames (cmd_id=3)`);const n=this.client.enc,i=A.payload.length>0?A.payload:A.body;let o=i;if(0===A.payload.length){let e=0;const t=i.indexOf(Buffer.from("</Extension>")),A=i.indexOf(Buffer.from("</body>"));-1!==t?e=t+Buffer.from("</Extension>").length:-1!==A&&(e=A+Buffer.from("</body>").length),o=i.subarray(e)}const g=this.chooseDecryptedOrRawCandidate({raw:o,enc:n,channelId:A.header.channelId,allowResync:0===A.payload.length});if(1===e&&s&&this.logger?.log(`[BaichuanVideoStream] Data after XML: ${g.length} bytes, first 32 bytes: ${g.subarray(0,Math.min(32,g.length)).toString("hex")}`),r.dumpEnabled&&z(r),r.dumpBcMedia&&this.dumpChunkIdx<200){const e=r.dumpDir,t=String(this.dumpChunkIdx).padStart(4,"0"),A=c.join(e,`bcmedia_chunk_${t}.bin`),s=c.join(e,"bcmedia_info.json"),n=Buffer.from(g),i=0===this.dumpChunkIdx,o=i?JSON.stringify({note:"Chunks fed into the BcMedia decoder (after XML stripping/alignment).",profile:this.profile,channel:this.channel,encKind:this.client.enc.kind},null,2):"";this.dumpIo.enqueue((async()=>{await a.promises.writeFile(A,n),i&&await a.promises.writeFile(s,o)})),this.dumpChunkIdx++}const l=this.bcMediaCodec.decode(g);t+=l.length;const h=new Map;for(const e of l)h.set(e.type,(h.get(e.type)||0)+1);if(e<=10||e%20==0){const A=this.bcMediaCodec.getRemainingBuffer(),r=Array.from(h.entries()).map((([e,t])=>`${e}:${t}`)).join(", ");s&&this.logger?.log(`[BaichuanVideoStream] Frame #${e}: dataToParse=${g.length} bytes, parsed ${l.length} BcMedia packets (${r||"none"}), total: ${t}, remaining buffer: ${A.length} bytes`)}let d=0,u=0;for(const t of l){const A=(e,t,A)=>{if("H264"===A){const t=ge(e);for(const e of t){const t=31&(e[0]??0);if(7===t){const t=Te(e);if(null!=t){if(!o(e))continue;this.spsById.set(t,e),r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Cached H.264 SPS id=${t} len=${e.length}`)}o(e)&&(this.lastSps=e)}if(8===t){const t=ve(e);if(t){const A=this.spsById.get(t.spsId);if(A&&!o(A))continue;this.ppsById.set(t.ppsId,{nal:e,spsId:t.spsId}),r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Cached H.264 PPS id=${t.ppsId} (spsId=${t.spsId}) len=${e.length}`)}this.lastPps=e}}}else if("H265"===A){const t=be(e);t&&(this.lastVps=t,r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Cached H.265 VPS len=${t.length}`));const A=Re(e);A&&(this.lastSpsH265=A,r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Cached H.265 SPS len=${A.length}`));const s=Ne(e);s&&(this.lastPpsH265=s,r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Cached H.265 PPS len=${s.length}`))}},n=(e,t)=>{if("H264"===t){const t=ge(e);if(0===t.length)return e;const A=t.map((e=>31&(e[0]??0)));if(A.includes(7)&&A.includes(8))return e;if(!A.some((e=>1===e||5===e||19===e||20===e)))return e;let s=null;for(const e of t){const t=31&(e[0]??0);if(1===t||5===t){s=Le(e);break}}if(r.debugParamSets&&this.logger?.warn(`[BaichuanVideoStream] Slice references ppsId=${s??"?"} lastPrepended=${this.lastPrependedPpsId??"?"}`),null==s||s>255)return null!=this.lastPrependedPpsId?e:this.lastSps&&this.lastPps?(this.lastPrependedPpsId=-1,Buffer.concat([ke,this.lastSps,ke,this.lastPps,e])):e;if(this.lastPrependedPpsId===s)return e;const n=this.ppsById.get(s);if(n){const t=this.spsById.get(n.spsId);if(t)return this.lastPrependedPpsId=s,Buffer.concat([ke,t,ke,n.nal,e])}return Buffer.alloc(0)}if("H265"===t){const t=me(e);if(0===t.length)return e;const A=t.map((e=>ye(e))).filter((e=>null!==e));if(A.includes(32)&&A.includes(33)&&A.includes(34))return e;return A.some((e=>e>=0&&e<=9||e>=16&&e<=23))?this.lastPrependedParamSetsH265?e:this.lastVps&&this.lastSpsH265&&this.lastPpsH265?(this.lastPrependedParamSetsH265=!0,r.debugParamSets&&this.logger?.warn("[BaichuanVideoStream] Prepending H.265 VPS/SPS/PPS to frame"),Buffer.concat([ke,this.lastVps,ke,this.lastSpsH265,ke,this.lastPpsH265,e])):e:e}return e},i=(e,t,A)=>{if(r.dumpNals)try{r.dumpEnabled&&z(r);const s=r.dumpDir,n=ge(e),i=n.map((e=>31&(e[0]??0)));let o=null;const g=[],l=[];for(const e of n){const t=31&(e[0]??0);if(1!==t&&5!==t||null!=o||(o=Le(e)),7===t){const t=Te(e);null!=t&&g.push(t)}if(8===t){const t=ve(e);t&&l.push(t.ppsId)}}if(this.dumpNalLines>=2e4)return;const h=JSON.stringify({label:t,microseconds:A,len:e.length,nalTypes:i,slicePpsId:o,auSpsIds:g,auPpsIds:l,cachedSps:this.spsById.size,cachedPps:this.ppsById.size,lastPrependedPpsId:this.lastPrependedPpsId})+"\n";this.dumpNalLines++;const d=c.join(s,"nal_dump.ndjson");this.dumpIo.enqueue((async()=>{await a.promises.appendFile(d,h)}))}catch{}},o=e=>{if(e.length<4)return!1;if(7!=(31&(e[0]??0)))return!1;const t=e[1]??0,A=e[3]??0;return!!new Set([66,77,88,100,110,122,244]).has(t)&&!(0===A||A>255)};if("Iframe"===t.type){const o="H265"===t.videoType?pe(t.data):ce(t.data),g=!0;A(o,"Iframe",t.videoType);const l=n(o,t.videoType);if(0===l.length)continue;if(i(l,"Iframe",t.microseconds),"H264"===t.videoType){if(!le(l)||!he(l)){r.debugH264&&this.logger?.warn(`[BaichuanVideoStream] Dropping invalid H.264 Iframe (Annex-B) len=${l.length}`);continue}}else if("H265"===t.videoType){if(!Se(l)){r.debugH264&&this.logger?.warn(`[BaichuanVideoStream] Dropping invalid H.265 Iframe (Annex-B) len=${l.length}`);continue}we(l)||r.debugH264&&this.logger?.warn(`[BaichuanVideoStream] H.265 Iframe missing VPS/SPS/PPS or IRAP, but continuing len=${l.length}`)}if(r.debugH264&&!this.debugSavedSamples)try{const e=r.dumpDir;a.mkdirSync(e,{recursive:!0}),"Iframe"===t.type&&ne(o)&&a.writeFileSync(c.join(e,"iframe_annexb.bin"),o)}catch{}if(!this.warnedNonAnnexBOnce&&!ne(o)){this.warnedNonAnnexBOnce=!0;const e=t.data,A=e.subarray(0,Math.min(24,e.length)).toString("hex"),r=o.subarray(0,Math.min(24,o.length)).toString("hex");this.logger?.warn(`[BaichuanVideoStream] WARNING: non-AnnexB frame after conversion (${t.type} ${t.videoType}) len=${e.length} head=${A} convertedLen=${o.length} convertedHead=${r}`)}if(this.emit("videoFrame",l),this.emit("videoAccessUnit",{data:l,isKeyframe:g,videoType:t.videoType,microseconds:t.microseconds,..."Iframe"===t.type&&"time"in t&&void 0!==t.time?{time:t.time}:{}}),d++,e<=5||d<=5){const e=ne(o)?"yes":"no";s&&this.logger?.log(`[BaichuanVideoStream] Emitted ${t.type} (${t.videoType}) ${t.data.length} bytes -> ${o.length} bytes (Annex-B, startCode:${e})`)}}else if("Pframe"===t.type){const e=t.data,s=ne(e)?e:"H265"===t.videoType?pe(e):ce(e),o=ne(s)?[s]:"H265"===t.videoType?this.depacketizerH265.push(e):this.depacketizer.push(e);if(0===o.length)continue;for(const e of o){A(e,"Pframe",t.videoType);const s=n(e,t.videoType);if(0===s.length)continue;const o=s;i(o,"Pframe",t.microseconds);if("H265"===t.videoType?Se(o):le(o))this.emit("videoFrame",o),this.emit("videoAccessUnit",{data:o,isKeyframe:!1,videoType:t.videoType,microseconds:t.microseconds}),d++;else if(r.debugH264&&this.debugH264LogsLeft>0){this.debugH264LogsLeft--;const e=o.subarray(0,Math.min(24,o.length)).toString("hex");this.logger?.warn(`[BaichuanVideoStream] Dropping invalid Pframe (${t.videoType}): len=${o.length} head=${e}`)}}}"Aac"!==t.type&&"Adpcm"!==t.type||(u++,this.emit("audioFrame",t.data)),"InfoV1"===t.type||t.type}if((e<=10||e%20==0&&(d>0||u>0))&&s&&this.logger?.log(`[BaichuanVideoStream] Frame #${e}: emitted ${d} video frames, ${u} audio frames`),d>0&&(e<=10||e%50==0)){}},this.client.on("push",this.videoFrameHandler),this.active=!0}async stop(){if(this.active){if(this.depacketizer.reset(),this.depacketizerH265.reset(),this.videoFrameHandler&&this.client.removeListener("push",this.videoFrameHandler),this.videoFrameHandler=void 0,this.bcMediaCodec.clear(),this.activeMsgNum=void 0,this.api)try{await this.api.stopVideoStream(this.channel,this.profile)}catch(e){this.emit("error",e instanceof Error?e:new Error(String(e)))}this.active=!1,this.emit("close")}}isActive(){return this.active}};async function*Ye(e,t,A){const r=new He({client:e.client,api:e,channel:t,profile:A,logger:e.logger});let s=null,n=null,i=null,o=!1,a=!1;const c=e=>{a=!0},g=()=>{a=!0};try{await r.start(),r.on("error",c),r.on("close",g);const e=new Promise((e=>{const t=A=>{A.isKeyframe&&!s&&(s={sps:null,pps:null},r.removeListener("videoAccessUnit",t),e(s))};r.on("videoAccessUnit",t),setTimeout((()=>{s||(s={sps:null,pps:null},r.removeListener("videoAccessUnit",t),e(s))}),5e3)}));await Promise.race([e,new Promise((e=>setTimeout(e,5e3)))]);const t=[],A=200;let l=null;for(r.on("videoAccessUnit",(e=>{a||(t.push({audio:!1,data:e.data,codec:null,sampleRate:null,microseconds:e.microseconds,videoType:e.videoType}),t.length>A&&t.splice(0,t.length-A),l&&(l(),l=null))})),r.on("audioFrame",(e=>{a||(n||(n="aac",i=8e3),t.push({audio:!0,data:e,codec:n,sampleRate:i,microseconds:null}),t.length>A&&t.splice(0,t.length-A),l&&(l(),l=null))})),o=!0;!a;)if(t.length>0){const e=t.shift();yield e}else await new Promise((e=>{l=e,setTimeout((()=>{l===e&&(l=null,e())}),1e3)}))}finally{a=!0;try{await r.stop()}catch{}r.removeListener("error",c),r.removeListener("close",g)}}var xe=class{key;transport;videoType;keepAliveTimer;constructor(e,t){this.transport=e,this.videoType=t,this.key=function(e,t){return`${e}-${"H264"===t?"h264":"h265"}`}(e,t)}async startKeepAlive(e){this.stopKeepAlive(),e.client.getTransport()}stopKeepAlive(){this.keepAliveTimer&&(clearInterval(this.keepAliveTimer),this.keepAliveTimer=void 0)}},Pe=Buffer.from([0,0,0,1]);function Ve(...e){const t=e.filter((e=>!!e&&e.length>0));if(0===t.length)return null;const A=[];for(const e of t)A.push(Pe,e);return Buffer.concat(A)}var Ge=class extends xe{ffmpegFormat="h264";sdpCodec="H264";sps=null;pps=null;constructor(e){super(e,"H264")}extractParameterSets(e){const t=ge(e);for(const e of t){if(e.length<1)continue;const t=31&(e[0]??0);if(7!==t||this.sps||(this.sps=e),8!==t||this.pps||(this.pps=e),this.sps&&this.pps)break}}getFmtp(){let e="packetization-mode=1";if(this.sps&&this.sps.length>=4){e+=`;profile-level-id=${Buffer.from([this.sps[1],this.sps[2],this.sps[3]]).toString("hex")}`}return this.sps&&this.pps?(e+=`;sprop-parameter-sets=${this.sps.toString("base64")},${this.pps.toString("base64")}`,{fmtp:e,hasParamSets:!0}):{fmtp:e,hasParamSets:!1}}getParameterSetsAnnexB(){return Ve(this.sps,this.pps)}},Oe=class extends xe{ffmpegFormat="hevc";sdpCodec="H265";vps=null;sps=null;pps=null;constructor(e){super(e,"H265")}extractParameterSets(e){const t=be(e),A=Re(e),r=Ne(e);t&&!this.vps&&(this.vps=t),A&&!this.sps&&(this.sps=A),r&&!this.pps&&(this.pps=r)}getFmtp(){let e="";return this.vps&&this.sps&&this.pps?(e=`sprop-vps=${this.vps.toString("base64")};sprop-sps=${this.sps.toString("base64")};sprop-pps=${this.pps.toString("base64")}`,{fmtp:e,hasParamSets:!0}):{fmtp:e,hasParamSets:!1}}getParameterSetsAnnexB(){return Ve(this.vps,this.sps,this.pps)}};function Je(e,t){return"H264"===t?new Ge(e):new Oe(e)}var We=class{maxItems;queue=[];waiting;closed=!1;constructor(e){this.maxItems=Math.max(1,0|e)}push(e){if(!this.closed){if(this.waiting){const{resolve:t}=this.waiting;return this.waiting=void 0,void t({value:e,done:!1})}this.queue.push(e),this.queue.length>this.maxItems&&this.queue.splice(0,this.queue.length-this.maxItems)}}close(){if(!this.closed&&(this.closed=!0,this.waiting)){const{resolve:e}=this.waiting;this.waiting=void 0,e({value:void 0,done:!0})}}async next(){if(this.closed)return{value:void 0,done:!0};const e=this.queue.shift();return void 0!==e?{value:e,done:!1}:await new Promise((e=>{this.waiting={resolve:e}}))}},qe=class{opts;queues=new Map;source=null;running=!1;pumpPromise=null;constructor(e){this.opts=e}start(){this.running||(this.running=!0,this.source=this.opts.createSource(),this.pumpPromise=(async()=>{try{for await(const e of this.source){try{this.opts.onFrame?.(e)}catch{}for(const t of this.queues.values())t.push(e)}}catch(e){this.opts.onError?.(e)}finally{for(const e of this.queues.values())e.close();this.queues.clear()}})())}subscribe(e){const t=new We(this.opts.maxQueueItems);this.queues.set(e,t);const A=this;return async function*(){try{for(;;){const e=await t.next();if(e.done)return;yield e.value}}finally{t.close(),A.queues.delete(e)}}()}async stop(){if(!this.running)return;this.running=!1;const e=this.source;this.source=null;for(const e of this.queues.values())e.close();this.queues.clear();try{await(e?.return(void 0))}catch{}try{await this.pumpPromise}catch{}this.pumpPromise=null}};var _e=class e extends s.EventEmitter{api;channel;profile;listenHost;listenPort;path;logger;tcpRtpFraming;active=!1;flow;connectedClients=new Set;nativeStreamActive=!1;clientConnectionServer;streamMetadata=null;clientResources=new Map;isRtspDebugEnabled(){return this.api.client.getDebugConfig().debugRtsp||function(e,t){if(null==e)return t;const A=e.trim().toLowerCase();return"1"===A||"true"===A||"yes"===A||"on"===A||"0"!==A&&"false"!==A&&"no"!==A&&"off"!==A&&t}(process.env.BAICHUAN_DEBUG_RTSP,!1)}rtspDebugLog(e){this.isRtspDebugEnabled()&&this.logger.debug(`[BaichuanRtspServer] ${e}`)}firstFramePromise=null;firstFrameResolve=null;firstFrameReceived=!1;firstAudioPromise=null;firstAudioResolve=null;firstAudioDetected=!1;hasAudio=!1;audioInfo=null;audioPrimingFrame=null;tempStreamGenerator=null;nativeFanout=null;noClientAutoStopTimer;static isAdtsAacFrame(e){return e.length>=2&&255===e[0]&&!(240&~e[1])}static parseAdtsSamplingInfo(t){if(t.length<7)return null;if(!e.isAdtsAacFrame(t))return null;const A=t[2]>>2&15,r=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350][A]??null;if(!r)return null;const s=(1&t[2])<<2|t[3]>>6&3,n=0===s?1:s,i=(t[2]>>6&3)+1<<11|A<<7|s<<3;return{sampleRate:r,channels:n,configHex:Buffer.from([i>>8&255,255&i]).toString("hex")}}static parseInterleavedChannels(e){const t=e.match(/interleaved\s*=\s*(\d+)\s*-\s*(\d+)/i);if(!t)return null;const A=Number.parseInt(t[1],10),r=Number.parseInt(t[2],10);return Number.isFinite(A)&&Number.isFinite(r)?{rtp:A,rtcp:r}:null}static splitAnnexBNals(e){const t=[],A=e.length,r=t=>{if(t+3<=A&&0===e[t]&&0===e[t+1]){if(1===e[t+2])return 3;if(t+4<=A&&0===e[t+2]&&1===e[t+3])return 4}return 0};let s=0;for(;s<A;){if(r(s))break;s++}for(;s<A;){const n=r(s);if(!n){s++;continue}const i=s+n;let o=i;for(;o<A;){if(r(o))break;o++}if(i<o){const A=e.subarray(i,o);A.length>0&&t.push(A)}s=o}return t}static stripAdtsHeader(t){if(!e.isAdtsAacFrame(t))return null;if(t.length<7)return null;const A=!(1&~t[1])?7:9;return t.length<=A?null:t.subarray(A)}constructor(e){super(),this.api=e.api,this.channel=e.channel,this.profile=e.profile,this.listenHost=e.listenHost??"127.0.0.1",this.listenPort=e.listenPort??8554,this.path=e.path??`/stream/${this.profile}`,this.logger=e.logger??console,this.tcpRtpFraming=e.tcpRtpFraming??"rfc4571";const t=this.api.client.getTransport();this.flow=Je(t,"H264")}clearNoClientAutoStopTimer(){this.noClientAutoStopTimer&&(clearTimeout(this.noClientAutoStopTimer),this.noClientAutoStopTimer=void 0)}setFlowVideoType(e,t){if(this.flow.videoType===e)return;const A=this.api.client.getTransport();this.flow.stopKeepAlive(),this.flow=Je(A,e),this.rtspDebugLog(`Using RTSP flow ${this.flow.key} (${t})`)}async start(){if(this.active)throw new Error("RTSP server is already active");try{const e=(await this.api.getStreamMetadata(this.channel)).streams.find((e=>e.profile===this.profile));if(e){this.streamMetadata={frameRate:e.frameRate||25,width:e.width,height:e.height};const t=String(e.videoEncType??"").trim().toLowerCase(),A=t.includes("265")||t.includes("hevc")?"H265":"H264";this.setFlowVideoType(A,"metadata")}}catch(e){this.logger.warn(`[BaichuanRtspServer] Could not get stream metadata: ${e}`),this.streamMetadata={frameRate:25,width:1920,height:1080},this.setFlowVideoType("H264","metadata unavailable")}this.clientConnectionServer=n.createServer((e=>{this.handleRtspConnection(e)})),await new Promise(((e,t)=>{this.clientConnectionServer.listen(this.listenPort,this.listenHost,(()=>{const t=this.clientConnectionServer.address();t&&"object"==typeof t&&"port"in t&&(this.listenPort=t.port),e()})),this.clientConnectionServer.on("error",(e=>{t(e)}))})),this.active=!0,this.logger.info(`[BaichuanRtspServer] RTSP server started on ${this.listenHost}:${this.listenPort}, path: ${this.path}`)}handleRtspConnection(t){const A=`${t.remoteAddress}:${t.remotePort}`;this.logger.info(`[BaichuanRtspServer] RTSP client connected: ${A}`);let r,s="",n=Buffer.alloc(0),i=!1,o=null,a=null;const c=()=>{this.removeClient(A);const e=this.clientResources.get(A);if(e){if(e.ffmpeg)try{e.ffmpeg.stdin?.end(),e.ffmpeg.kill("SIGTERM"),setTimeout((()=>{try{e.ffmpeg?.kill("SIGKILL")}catch{}}),1e3)}catch{}if(e.udpSocket)try{e.udpSocket.close()}catch{}if(e.udpSocketAudio)try{e.udpSocketAudio.close()}catch{}if(e.rtspSocket&&!e.rtspSocket.destroyed)try{e.rtspSocket.destroy()}catch{}this.clientResources.delete(A)}if(r){try{r.stdin?.end(),r.kill("SIGTERM"),setTimeout((()=>{try{r?.kill("SIGKILL")}catch{}}),1e3)}catch{}r=void 0}if(o){try{o.close()}catch{}o=null}if(a){try{a.close()}catch{}a=null}};t.on("close",c),t.on("error",(e=>{e&&"object"==typeof e&&"code"in e&&"EPIPE"!==e.code&&this.logger.error("[BaichuanRtspServer] RTSP client error:",e),c()})),t.on("data",(async g=>{for(n=Buffer.concat([n,g]);n.includes("\r\n\r\n");){const g=n.indexOf("\r\n\r\n"),l=n.subarray(0,g).toString();if(n=n.subarray(g+4),!l.trim())continue;const h=l.split("\r\n"),d=h[0]?.split(" ");if(!d||d.length<3)continue;const u=d[0],E=d[1],I=d[2],Q=l.match(/CSeq:\s*(\d+)/i),B=Q?parseInt(Q[1]??"0",10):0,C=(e,A,r={},s)=>{let n=`${I} ${e} ${A}\r\n`;n+=`CSeq: ${B}\r\n`;for(const[e,t]of Object.entries(r))n+=`${e}: ${t}\r\n`;s&&(n+=`Content-Length: ${Buffer.byteLength(s,"utf8")}\r\n`),n+="\r\n",s&&(n+=s),t.write(n)};if(this.rtspDebugLog(`RTSP ${u} ${E}`),"OPTIONS"===u)C(200,"OK",{Public:"DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS"});else if("DESCRIBE"===u){if(!this.firstFrameReceived&&0===this.connectedClients.size){try{this.nativeStreamActive||await this.startNativeStream()}catch(e){this.logger.warn(`[BaichuanRtspServer] Failed to start native stream for SDP priming: ${e}`)}const{hasParamSets:e}=this.flow.getFmtp();if(!e){const e="udp"===this.api.client.getTransport()?4e3:1500;try{await Promise.race([this.firstFramePromise||Promise.resolve(),new Promise((t=>setTimeout(t,e)))])}catch{}}}{const{fmtp:e,hasParamSets:t}=this.flow.getFmtp(),r=e.length>160?`${e.slice(0,160)}...`:e;this.logger.info(`[BaichuanRtspServer] DESCRIBE SDP for ${A} path=${this.path} codec=${this.flow.sdpCodec} hasParamSets=${t} fmtp=${r}`),t||this.rtspDebugLog(`DESCRIBE responding without parameter sets yet (client=${A}, path=${this.path}, flow=${this.flow.key})`)}const e=this.generateSdp();C(200,"OK",{"Content-Type":"application/sdp","Content-Base":`rtsp://${this.listenHost}:${this.listenPort}${this.path}/`},e)}else if("SETUP"===u){const n=E?.includes("track0"),c=E?.includes("track1");if(!n&&!c){C(404,"Not Found",{Session:s||`session_${Date.now()}_${Math.random().toString(36).substring(7)}`});continue}if(c&&!this.hasAudio){C(404,"Not Found",{Session:s||`session_${Date.now()}_${Math.random().toString(36).substring(7)}`});continue}this.connectedClients.add(A),this.emit("client",A),this.clearNoClientAutoStopTimer(),1!==this.connectedClients.size||this.nativeStreamActive||await this.startNativeStream();const g=l.match(/Transport:\s*([^\r\n]+)/i),h=(g?.[1]??"").trim();i=!h||(h.includes("TCP")||h.includes("tcp")),s||(s=`session_${Date.now()}_${Math.random().toString(36).substring(7)}`);const d=this.clientResources.get(A);if(d?d.rtspSocket=t:this.clientResources.set(A,{ffmpeg:void 0,udpSocket:null,udpSocketAudio:null,rtspSocket:t,pipelineStarted:!1,seenFirstVideoKeyframe:!1,setupTrack0:!1,setupTrack1:!1,isPlaying:!1}),i){const t=this.clientResources.get(A),r=e.parseInterleavedChannels(h);if(t)if(c){const e=r??{rtp:2,rtcp:3};t.track1RtpChannel=e.rtp,t.track1RtcpChannel=e.rtcp}else{const e=r??{rtp:0,rtcp:1};t.track0RtpChannel=e.rtp,t.track0RtcpChannel=e.rtcp}}{const e=this.clientResources.get(A);e&&!e.pipelineStarted&&(e.pipelineStarted=!0,await this.startClientFfmpeg(A,t,i,((e,t,s)=>{r=e,o=t,a=s;const n=this.clientResources.get(A);n&&(n.ffmpeg=e,n.udpSocket=t,n.udpSocketAudio=s)})))}{const e=this.clientResources.get(A);e&&(c?e.setupTrack1=!0:e.setupTrack0=!0,this.rtspDebugLog(`SETUP done for ${A}: track0=${!!e.setupTrack0} track1=${!!e.setupTrack1} playing=${!!e.isPlaying}`))}if(i){const e=this.clientResources.get(A),t=c?{rtp:2,rtcp:3}:{rtp:0,rtcp:1};C(200,"OK",{Transport:`RTP/AVP/TCP;unicast;interleaved=${`${c?e?.track1RtpChannel??t.rtp:e?.track0RtpChannel??t.rtp}-${c?e?.track1RtcpChannel??t.rtcp:e?.track0RtcpChannel??t.rtcp}`}`,Session:s})}else C(200,"OK",{Transport:"RTP/AVP/UDP;unicast;client_port=5004-5005;server_port=5004-5005",Session:s})}else if("PLAY"===u){{const e=this.clientResources.get(A);e&&(e.isPlaying=!0,this.rtspDebugLog(`PLAY for ${A}: track0=${!!e.setupTrack0} track1=${!!e.setupTrack1} playing=${!!e.isPlaying}`))}C(200,"OK",{Session:s,Range:"npt=0.000-"})}else"TEARDOWN"===u?(c(),C(200,"OK",{Session:s}),t.end()):C(501,"Not Implemented")}}))}generateSdp(){const e=this.flow.sdpCodec;let t="v=0\r\n";t+=`o=- ${Date.now()} ${Date.now()} IN IP4 ${this.listenHost}\r\n`,t+="s=Baichuan Stream\r\n",t+=`c=IN IP4 ${this.listenHost}\r\n`,t+="t=0 0\r\n",t+="m=video 0 RTP/AVP 96\r\n",t+=`a=rtpmap:96 ${e}/90000\r\n`,this.streamMetadata?.frameRate&&(t+=`a=framerate:${this.streamMetadata.frameRate}\r\n`),this.streamMetadata?.width&&this.streamMetadata?.height&&(t+=`a=framesize:96 ${this.streamMetadata.width}-${this.streamMetadata.height}\r\n`),t+="a=control:track0\r\n";const{fmtp:A,hasParamSets:r}=this.flow.getFmtp();if(r||this.logger.warn(`[BaichuanRtspServer] SDP missing parameter sets for flow ${this.flow.key}`),A&&(t+=`a=fmtp:96 ${A}\r\n`),this.hasAudio){t+="m=audio 0 RTP/AVP 97\r\n";const e=this.audioInfo,A=e?.sampleRate??8e3,r=e?.channels??1,s=e?.configHex??"";t+=`a=rtpmap:97 mpeg4-generic/${A}/${r}\r\n`,s&&(t+=`a=fmtp:97 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=${s}; SizeLength=13; IndexLength=3; IndexDeltaLength=3;\r\n`),t+="a=control:track1\r\n"}return t+="a=setup:passive\r\n",t+="a=connection:new\r\n",t}async startClientFfmpeg(t,A,r,s){let n=this.streamMetadata;if(!n||!n.frameRate)try{const e=(await this.api.getStreamMetadata(this.channel)).streams.find((e=>e.profile===this.profile));e&&(n={frameRate:e.frameRate||25,width:e.width,height:e.height},this.rtspDebugLog(`Fetched metadata for profile ${this.profile}: ${n.frameRate} fps`))}catch(e){this.logger.warn(`[BaichuanRtspServer] Could not fetch stream metadata: ${e}`),n={frameRate:25,width:1920,height:1080}}const o=this.flow.ffmpegFormat;let a=0,c=0,l=null,h=null;const d=r,u=(e,t)=>{if("rfc4571"===(r?"rtsp-interleaved":this.tcpRtpFraming)){const e=Buffer.alloc(2);return e.writeUInt16BE(65535&t.length,0),Buffer.concat([e,t])}const A=Buffer.alloc(4);return A[0]=36,A[1]=255&e,A[2]=t.length>>8&255,A[3]=255&t.length,Buffer.concat([A,t])};if(r&&!d){a=5e4+Math.floor(1e4*Math.random()),l=i.createSocket("udp4"),await new Promise(((e,t)=>{l.once("listening",(()=>e())),l.once("error",t),l.bind(a,"127.0.0.1")}));const e=(e,r)=>{if(!A||A.destroyed||!A.writable)return!1;if(r.length<12)return!1;if(2!==(r[0]>>6&3))return!1;const s=this.clientResources.get(t);if(!s?.isPlaying)return!1;const n=s?.track0RtpChannel??0,i=s?.track1RtpChannel??2;if(e===n&&!s?.setupTrack0)return!1;if(e===i&&!s?.setupTrack1)return!1;try{return A.write(u(e,r))}catch(e){if(e&&"object"==typeof e&&"code"in e&&"EPIPE"===e.code)return!1}return!1};if(l){const A=this.clientResources.get(t),r=A?.track0RtpChannel??0;let s=0,n=!1,i=!1;l.on("message",(A=>{n||(n=!0,this.rtspDebugLog(`First video RTP packet received from ffmpeg for client ${t} (len=${A.length})`));e(r,A)&&!i&&(i=!0,this.rtspDebugLog(`First video RTP packet forwarded via TCP interleaved for client ${t}`)),s++,s%1e3==0&&this.rtspDebugLog(`Forwarded ${s} RTP packets to client ${t} via TCP interleaved`)}))}if(this.hasAudio){c=a+2+2*Math.floor(1e3*Math.random()),h=i.createSocket("udp4"),await new Promise(((e,t)=>{h.once("listening",(()=>e())),h.once("error",t),h.bind(c,"127.0.0.1")}));let A=0,r=!1,s=!1;h.on("message",(n=>{const i=this.clientResources.get(t),o=i?.track1RtpChannel??2;A++,r||(r=!0,this.rtspDebugLog(`First audio RTP packet received from ffmpeg for client ${t} (len=${n.length})`));e(o,n)&&!s&&(s=!0,this.rtspDebugLog(`First audio RTP packet forwarded via TCP interleaved for client ${t}`)),A%1e3==0&&this.rtspDebugLog(`Forwarded ${A} audio RTP packets to client ${t} via TCP interleaved`)}))}}const E=this.clientResources.get(t),I=this.isRtspDebugEnabled(),Q=e=>this.rtspDebugLog(e),B=(e,t)=>{if(!A||A.destroyed||!A.writable)return!1;try{return A.write(u(e,t))}catch(e){if(e&&"object"==typeof e&&"code"in e&&"EPIPE"===e.code)return!1}return!1},C=(e,t,A,r,s)=>{const n=Buffer.alloc(12);return n[0]=128,n[1]=(t?128:0)|127&e,n.writeUInt16BE(65535&A,2),n.writeUInt32BE(r>>>0,4),n.writeUInt32BE(s>>>0,8),n},p=(e,t,A)=>{const r=e?97:96;if(E?.isPlaying&&(!e||E?.setupTrack1)&&(e||E?.setupTrack0))if(e){void 0===E.rtpAudioSeq&&(E.rtpAudioSeq=Math.floor(65536*Math.random())),void 0===E.rtpAudioTimestamp&&(E.rtpAudioTimestamp=0),void 0===E.rtpAudioSsrc&&(E.rtpAudioSsrc=4294967295*Math.random()>>>0);const e=C(r,A,E.rtpAudioSeq,E.rtpAudioTimestamp,E.rtpAudioSsrc);E.rtpAudioSeq=E.rtpAudioSeq+1&65535,B(E?.track1RtpChannel??2,Buffer.concat([e,t]))}else{void 0===E.rtpVideoSeq&&(E.rtpVideoSeq=Math.floor(65536*Math.random())),void 0===E.rtpVideoTimestamp&&(E.rtpVideoTimestamp=0),void 0===E.rtpVideoSsrc&&(E.rtpVideoSsrc=4294967295*Math.random()>>>0);const e=C(r,A,E.rtpVideoSeq,E.rtpVideoTimestamp,E.rtpVideoSsrc);E.rtpVideoSeq=E.rtpVideoSeq+1&65535,B(E?.track0RtpChannel??0,Buffer.concat([e,t]))}},f=1200,m=t=>{const A=e.splitAnnexBNals(t);for(const e of A){if(e.length<1)continue;if(5===(31&(e[0]??0)))return!0}return!1},y=(e,t)=>{if(e.length<=f)return void p(!1,e,t);const A=e[0],r=31&A,s=224&A|28,n=e.subarray(1);let i=0;for(;i<n.length;){const e=n.length-i,A=Math.min(e,1198),o=0===i,a=i+A>=n.length,c=(o?128:0)|(a?64:0)|r,g=n.subarray(i,i+A),l=Buffer.concat([Buffer.from([s,c]),g]);p(!1,l,t&&a),i+=A}},D=(e,t)=>{if(e.length<=f)return void p(!1,e,t);if(e.length<3)return;const A=e[0],r=A>>1&63,s=129&A|98,n=e[1],i=e.subarray(2);let o=0;for(;o<i.length;){const e=i.length-o,A=Math.min(e,1197),a=0===o,c=o+A>=i.length,g=(a?128:0)|(c?64:0)|63&r,l=i.subarray(o,o+A),h=Buffer.concat([Buffer.from([s,n,g]),l]);p(!1,h,t&&c),o+=A}},S=n?.frameRate&&n.frameRate>0?n.frameRate:25,w=Math.max(1,Math.round(9e4/S)),b=e=>{if(!E)return;if(null==e)return;if(!Number.isFinite(e))return;if(void 0===E.rtpVideoTimestamp&&(E.rtpVideoTimestamp=0),void 0===E.rtpVideoBaseTimestamp&&(E.rtpVideoBaseTimestamp=E.rtpVideoTimestamp),void 0===E.rtpVideoBaseMicroseconds)return E.rtpVideoBaseMicroseconds=e>>>0,void(E.rtpVideoLastTimestamp=E.rtpVideoTimestamp);const t=(e>>>0)-(E.rtpVideoBaseMicroseconds>>>0)>>>0;let A=((E.rtpVideoBaseTimestamp??0)>>>0)+Math.round(9e4*t/1e6)>>>0;const r=E.rtpVideoLastTimestamp;void 0!==r&&A<=r>>>0&&(A=1+(r>>>0)>>>0),E.rtpVideoTimestamp=A,E.rtpVideoLastTimestamp=A},R=(t,A,r=!0)=>{const s=e.splitAnnexBNals(A);if(0!==s.length){for(let e=0;e<s.length;e++){const A=s[e],r=e===s.length-1;"H265"===t?D(A,r):y(A,r)}r&&void 0!==E?.rtpVideoTimestamp&&void 0===E?.rtpVideoBaseMicroseconds&&(E.rtpVideoTimestamp=E.rtpVideoTimestamp+w>>>0)}},N=t=>{const A=e.stripAdtsHeader(t);if(!A)return;const r=Buffer.from([0,16]),s=8191&A.length,n=Buffer.alloc(2);n[0]=s>>5&255,n[1]=(31&s)<<3;const i=Buffer.concat([r,n,A]);p(!0,i,!0),void 0!==E?.rtpAudioTimestamp&&(E.rtpAudioTimestamp=E.rtpAudioTimestamp+1024>>>0)},k=e=>{const t=me(e);for(const e of t){if(e.length<2)continue;const t=e[0];if(void 0===t)continue;if(128&t)continue;if(De(t>>1&63))return!0}return!1};let F,U;if(d&&s(void 0,null,null),!d){const e=["-hide_banner","-loglevel","error","-fflags","+genpts+igndts"],A=n?.frameRate||25;if(A>0&&(e.push("-r",A.toString()),this.rtspDebugLog(`Using frame rate ${A} fps for client ${t}`)),e.push("-f",o,"-i","pipe:0"),this.hasAudio&&e.push("-f","aac","-i","pipe:3"),r){if(e.push("-map","0:v:0","-c:v","copy","-vsync","cfr","-avoid_negative_ts","make_zero","-f","rtp","-payload_type","96",`rtp://127.0.0.1:${a}?pkt_size=1300`),this.hasAudio&&h&&c){const t=this.audioInfo,A=t?.sampleRate??8e3,r=t?.channels??1;e.push("-map","1:a:0","-c:a","aac","-profile:a","aac_low","-ar",String(A),"-ac",String(r),"-flags:a","+global_header","-f","rtp","-payload_type","97",`rtp://127.0.0.1:${c}?pkt_size=1300`)}}else e.push("-map","0:v:0","-c:v","copy","-vsync","cfr","-avoid_negative_ts","make_zero","-f","rtp","-payload_type","96","rtp://127.0.0.1:5004?pkt_size=1300");const i=["pipe","ignore","pipe"];this.hasAudio&&i.push("pipe"),this.rtspDebugLog(`Spawning ffmpeg for client ${t}: ffmpeg ${e.join(" ")}`),F=(0,g.spawn)("ffmpeg",e,{stdio:i});try{const e=this.flow.getParameterSetsAnnexB();e&&e.length>0&&F?.stdin&&(F.stdin.write(e),this.rtspDebugLog(`Wrote video parameter sets to ffmpeg stdin for client ${t} (len=${e.length})`))}catch(e){this.logger.warn(`[BaichuanRtspServer] Failed to write video parameter sets to ffmpeg for client ${t}: ${e}`)}if(F.on("error",(e=>{this.logger.error(`[BaichuanRtspServer] Failed to spawn ffmpeg for client ${t}:`,e)})),F.on("close",((e,A)=>{this.rtspDebugLog(`ffmpeg exited for client ${t} (code=${e}, signal=${A})`)})),s(F,l,h),F.stdin?.on("error",(e=>{const A=e?.code;"EPIPE"!==A&&"ERR_STREAM_WRITE_AFTER_END"!==A?this.logger.error(`[BaichuanRtspServer] FFmpeg stdin error for client ${t}:`,e):this.rtspDebugLog(`FFmpeg stdin error (${A}) for client ${t}`)})),U=this.hasAudio?F.stdio?.[3]:void 0,U?.on?.("error",(e=>{const A=e?.code;"EPIPE"!==A&&"ERR_STREAM_WRITE_AFTER_END"!==A?this.logger.error(`[BaichuanRtspServer] FFmpeg audio pipe error for client ${t}:`,e):this.rtspDebugLog(`FFmpeg audio pipe error (${A}) for client ${t}`)})),U&&this.audioPrimingFrame)try{U.write(this.audioPrimingFrame)}catch{}}this.rtspDebugLog(`Creating native stream iterator for client ${t}`);const M=this.nativeFanout?this.nativeFanout.subscribe(t):Ye(this.api,this.channel,this.profile);this.tempStreamGenerator=null;let T=0,v=Date.now();const L=n&&n.frameRate>0?1e3/n.frameRate:40;(async()=>{try{this.rtspDebugLog(`Starting to feed frames to client ${t} (target FPS: ${n?.frameRate||25}, interval: ${L}ms)`);let A=0,r=!1,s=!1,i=!1,o=!1,a=!1;for await(const n of M){if(!this.connectedClients.has(t)){this.rtspDebugLog(`Client ${t} disconnected, stopping frame feed`);break}const c=F?.stdin;if(!d&&(!c||c.destroyed||c.writableEnded||c.writableFinished)){this.rtspDebugLog(`FFmpeg stdin closed for client ${t}`);break}if(0===n.data.length)continue;if(!n.audio&&!i&&(i=!0,I)){const e=n.data.subarray(0,16).toString("hex");Q(`First video frame received from generator for client ${t} (len=${n.data.length}, videoType=${String(n.videoType??this.flow.videoType)}, head=${e})`)}if(n.audio){if(A++,1===A&&this.rtspDebugLog(`Audio frames detected (codec: ${n.codec||"unknown"}, sampleRate: ${n.sampleRate||"unknown"})`),A%100==0&&this.rtspDebugLog(`Received ${A} audio frames (not sent to RTSP yet)`),d){if(!E?.seenFirstVideoKeyframe)continue;if(this.hasAudio&&e.isAdtsAacFrame(n.data)){if(I&&!s){s=!0;const e=n.data.subarray(0,16).toString("hex");Q(`First audio ADTS frame packetized to RTP for client ${t} (len=${n.data.length}, head=${e})`)}N(n.data)}continue}if(this.hasAudio&&U&&!U.writableEnded&&!U.writableFinished){const A=U;if(!A)continue;if(e.isAdtsAacFrame(n.data))try{if(!s){s=!0;const e=n.data.subarray(0,16).toString("hex");this.rtspDebugLog(`First audio frame written to ffmpeg pipe for client ${t} (len=${n.data.length}, head=${e})`)}A.write(n.data)||await new Promise((e=>A.once("drain",(()=>e()))))}catch{}}continue}if("H264"===n.videoType||"H265"===n.videoType){const e="H264"===n.videoType?ce(n.data):pe(n.data);0===T&&this.setFlowVideoType(n.videoType,"first video frame");if(this.flow.getFmtp().hasParamSets)this.firstFrameReceived||this.markFirstFrameReceived();else{this.flow.extractParameterSets(e);this.flow.getFmtp().hasParamSets&&this.markFirstFrameReceived()}}T++,T%100==0&&this.rtspDebugLog(`Sent ${T} frames to client ${t} (frame size: ${n.data.length} bytes)`);const g=Date.now(),l=L-(g-v);if(l>0&&await new Promise((e=>setTimeout(e,Math.min(l,2*L)))),v=Date.now(),d){const e=n.videoType??this.flow.videoType,A="H264"===e?ce(n.data):pe(n.data);if(!E?.seenFirstVideoKeyframe)if("H265"===e){const{hasParamSets:r}=this.flow.getFmtp();if(!r){I&&!o&&(o=!0,Q(`H265 gating: waiting for VPS/SPS/PPS before sending RTP to client ${t}`));continue}if(!E?.rtpSentVideoConfig){const t=this.flow.getParameterSetsAnnexB();t&&t.length>0&&(R(e,t,!1),E.rtpSentVideoConfig=!0)}E.h265WaitStartMs||(E.h265WaitStartMs=Date.now());const s=k(A),n=Date.now()-E.h265WaitStartMs;if(!s&&n<2e3){I&&!a&&(a=!0,Q(`H265 gating: waiting for IRAP (or timeout) for client ${t}`));continue}E.seenFirstVideoKeyframe=!0}else{const{hasParamSets:r}=this.flow.getFmtp();if(!r){I&&!o&&(o=!0,Q(`H264 gating: waiting for SPS/PPS before sending RTP to client ${t}`));continue}if(!E?.rtpSentVideoConfig){const t=this.flow.getParameterSetsAnnexB();t&&t.length>0&&(R(e,t,!1),E.rtpSentVideoConfig=!0)}if(!m(A))continue;E.seenFirstVideoKeyframe=!0}const s=n.microseconds;if(b(s),!E?.rtpSentVideoConfig){const t=this.flow.getParameterSetsAnnexB();t&&t.length>0&&(R(e,t,!1),E.rtpSentVideoConfig=!0)}if(!r&&(r=!0,I)){const e=n.data.subarray(0,16).toString("hex");Q(`First video access unit packetized to RTP for client ${t} (len=${n.data.length}, head=${e})`)}R(e,A,!0)}else try{if(c&&!c.destroyed&&!c.writableEnded&&!c.writableFinished){if(!r){r=!0;const e=n.data.subarray(0,16).toString("hex");this.rtspDebugLog(`First video frame written to ffmpeg stdin for client ${t} (len=${n.data.length}, head=${e})`)}c.write("H264"===n.videoType?ce(n.data):n.data)||await new Promise((e=>{c?c.once("drain",(()=>e())):e()}))}}catch(e){const A=e?.code;if("EPIPE"===A||"ERR_STREAM_WRITE_AFTER_END"===A){this.rtspDebugLog(`EPIPE writing to ffmpeg for client ${t}`);break}this.logger.error(`[BaichuanRtspServer] Error writing frame to ffmpeg for client ${t}:`,e)}}this.rtspDebugLog(`Finished feeding frames to client ${t} (total: ${T} frames)`)}catch(e){this.logger.error(`[BaichuanRtspServer] Error in feedFrames for client ${t}:`,e)}})().catch((e=>{this.logger.error(`[BaichuanRtspServer] Error feeding frames to client ${t}:`,e)})),F?.stderr?.on("data",(e=>{const A=e.toString();(A.includes("error")||A.includes("Error"))&&this.logger.error(`[BaichuanRtspServer] FFmpeg error for client ${t}: ${A}`)}))}async startNativeStream(){this.nativeStreamActive||(this.nativeStreamActive=!0,this.firstFrameReceived=!1,this.firstAudioDetected=!1,this.hasAudio=!1,this.audioInfo=null,this.audioPrimingFrame=null,this.firstFramePromise=new Promise((e=>{this.firstFrameResolve=e})),this.firstAudioPromise=new Promise((e=>{this.firstAudioResolve=e})),this.rtspDebugLog(`Starting native stream for profile ${this.profile} (waiting for camera to start transmitting...)`),await this.flow.startKeepAlive(this.api),this.nativeFanout=new qe({maxQueueItems:200,createSource:()=>Ye(this.api,this.channel,this.profile),onFrame:t=>{if(t.audio){if(!this.hasAudio&&"tcp"===this.api.client.getTransport()&&e.isAdtsAacFrame(t.data)){const A=e.parseAdtsSamplingInfo(t.data);A&&(this.hasAudio=!0,this.audioInfo={codec:"aac-adts",sampleRate:A.sampleRate,channels:A.channels,configHex:A.configHex},this.audioPrimingFrame=Buffer.from(t.data),this.markFirstAudioDetected(),this.rtspDebugLog(`Audio detected (AAC/ADTS ${A.sampleRate}Hz ch=${A.channels}); advertising RTSP track1 as mpeg4-generic`))}return}if(0===t.data.length)return;"H264"!==t.videoType&&"H265"!==t.videoType||this.setFlowVideoType(t.videoType,"native stream"),this.flow.extractParameterSets(t.data);const{hasParamSets:A}=this.flow.getFmtp();A&&this.markFirstFrameReceived()},onError:e=>{this.logger.warn(`[BaichuanRtspServer] Shared native stream error: ${e}`)}}),this.nativeFanout.start(),this.clearNoClientAutoStopTimer(),this.noClientAutoStopTimer=setTimeout((()=>{0===this.connectedClients.size&&(this.rtspDebugLog("Auto-stopping primed native stream (no clients connected)"),this.stopNativeStream())}),15e3),this.noClientAutoStopTimer?.unref?.())}markFirstFrameReceived(){!this.firstFrameReceived&&this.firstFrameResolve&&(this.firstFrameReceived=!0,this.rtspDebugLog(`First frame received from camera for profile ${this.profile}`),this.firstFrameResolve(),this.firstFrameResolve=null)}markFirstAudioDetected(){!this.firstAudioDetected&&this.firstAudioResolve&&(this.firstAudioDetected=!0,this.firstAudioResolve(),this.firstAudioResolve=null)}async stopNativeStream(){if(this.nativeStreamActive){if(this.rtspDebugLog("Stopping native stream"),this.flow.stopKeepAlive(),this.clearNoClientAutoStopTimer(),this.nativeStreamActive=!1,this.firstFrameReceived=!1,this.firstFramePromise=null,this.firstFrameResolve&&(this.firstFrameResolve=null),this.firstAudioDetected=!1,this.firstAudioPromise=null,this.firstAudioResolve&&(this.firstAudioResolve=null),this.nativeFanout){const e=this.nativeFanout;this.nativeFanout=null,await e.stop()}if(this.tempStreamGenerator){try{await this.tempStreamGenerator.return(void 0)}catch{}this.tempStreamGenerator=null}}}removeClient(e){this.connectedClients.has(e)&&(this.connectedClients.delete(e),this.emit("clientDisconnected",e),this.logger.info(`[BaichuanRtspServer] RTSP client disconnected: ${e}`),0===this.connectedClients.size&&this.stopNativeStream())}async waitUntilReady(e=3e4){return new Promise(((t,A)=>{if(!this.clientConnectionServer)return void A(new Error("RTSP server not started"));const r=setTimeout((()=>{A(new Error(`Timeout waiting for RTSP server to be ready (${e}ms). Camera may be sleeping or not responding.`))}),e),s=()=>{const e=new n.Socket;e.setTimeout(1e3),e.on("connect",(()=>{e.destroy(),this.nativeStreamActive&&this.firstFramePromise?(this.rtspDebugLog("Port is listening, waiting for camera to start transmitting frames..."),this.firstFramePromise.then((()=>{clearTimeout(r),t()})).catch((e=>{clearTimeout(r),A(e)}))):(clearTimeout(r),t())})),e.on("timeout",(()=>{e.destroy(),setTimeout(s,500)})),e.on("error",(()=>{e.destroy(),setTimeout(s,500)})),e.connect(this.listenPort,this.listenHost)};s()}))}async stop(){if(!this.active)return;this.logger.info(`[BaichuanRtspServer] Stopping RTSP server on ${this.listenHost}:${this.listenPort}...`),await this.stopNativeStream();const e=Array.from(this.connectedClients);for(const t of e){const e=this.clientResources.get(t);if(e){if(e.ffmpeg)try{e.ffmpeg.stdin?.end(),e.ffmpeg.kill("SIGTERM"),setTimeout((()=>{try{e.ffmpeg?.kill("SIGKILL")}catch{}}),1e3)}catch{}if(e.udpSocket)try{e.udpSocket.close()}catch{}if(e.rtspSocket&&!e.rtspSocket.destroyed)try{e.rtspSocket.destroy()}catch{}}}this.clientResources.clear(),this.clientConnectionServer&&(await new Promise((e=>{this.clientConnectionServer?.close((()=>{e()}))})),this.clientConnectionServer=void 0),this.active=!1,this.connectedClients.clear(),this.emit("close"),this.logger.info("[BaichuanRtspServer] RTSP server stopped")}getRtspUrl(){return`rtsp://${this.listenHost}:${this.listenPort}${this.path}`}isActive(){return this.active}getClientCount(){return this.connectedClients.size}};function Xe(e){if(null==e)return;const t=Number(e);return Number.isFinite(t)?t:void 0}function Ze(e){if("number"==typeof e)return e>0;if("string"==typeof e){const t=Number(e);return Number.isFinite(t)?t>0:e.length>0&&"0"!==e}return Boolean(e)}function ze(e,t){if(!e)return!1;for(const[A,r]of Object.entries(e))if(t.test(A)&&Ze(r))return!0;return!1}function je(e){if(!e)return;const t=e.match(/<Support[^>]*>([\s\S]*?)<\/Support>/i);if(!t)return;const A=t[1]??"",r=A.match(/<ptzMode>([^<]*)<\/ptzMode>/i)?.[1],s=[];for(const e of A.matchAll(/<item[^>]*>([\s\S]*?)<\/item>/gi)){const t=e[1]??"",A={chnID:Xe(t.match(/<chnID>([^<]*)<\/chnID>/i)?.[1])??0};for(const e of t.matchAll(/<([A-Za-z0-9_]+)>([^<]*)<\/\1>/g)){const t=e[1],r=e[2];if(!t)continue;if("chnID"===t)continue;const s=Xe(r);A[t]=s??r}s.push(A)}const n={items:s};void 0!==r&&(n.ptzMode=r);const i=(e,t)=>{const r=(e=>{const t=A.match(new RegExp(`<${e}>([^<]*)<\\/${e}>`,"i"));return Xe(t?.[1])})(t);void 0!==r&&(n[e]=r)};i("IOInputPortNum","IOInputPortNum"),i("IOOutputPortNum","IOOutputPortNum"),i("diskNum","diskNum"),i("channelNum","channelNum"),i("audioNum","audioNum"),i("ptzCfg","ptzCfg"),i("B485","B485"),i("autoUpdate","autoUpdate"),i("pushAlarm","pushAlarm"),i("ftp","ftp"),i("ftpTest","ftpTest"),i("email","email"),i("wifi","wifi"),i("record","record"),i("wifiTest","wifiTest"),i("rtsp","rtsp"),i("onvif","onvif"),i("audioTalk","audioTalk");const o=(e=>{const t=A.match(new RegExp(`<${e}>([^<]*)<\\/${e}>`,"i"));return t?.[1]})("subVersion");return void 0!==o&&(n.subVersion=o),n}function $e(e){const{channel:t}=e,A=function(e,t){if(!e||"object"!=typeof e)return;const A=e[t],r=e[t+1],s=e.Host,n={...s&&"object"==typeof s?s:{},...A&&"object"==typeof A?A:{},...r&&"object"==typeof r?r:{}};return Object.keys(n).length?n:void 0}(e.abilities,t),r=function(e,t){if(!e?.items?.length)return;const A=e=>{const t=e;let A=0;null==t.name&&(A+=2);const r=["ptzType","ptzControl","ptzPreset","ledCtrl","lightType","battery","audioVersion","motion","encCtrl","newIspCfg","remoteAbility"];for(const e of r)void 0!==t[e]&&(A+=3);return A+=Math.min(10,Math.max(0,Object.keys(t).length-1)),A},r=t=>{const r=e.items.filter((e=>e.chnID===t));if(r.length)return r.slice().sort(((e,t)=>A(t)-A(e)))[0]};return r(t)??r(t+1)}(e.support,t),s=e.support?.ptzMode,n="string"==typeof s?s.toLowerCase():void 0,i="none"===n||"0"===n,o=!!r&&Ze(r.battery),a=!!r&&Ze(r.ptzPreset),c=r?r.lightType:void 0,g="number"==typeof c?c:"string"==typeof c?Number(c):void 0,l=!!n&&("none"!==n&&"0"!==n),h=!!n&&(n.includes("pt")||"pt"===n||"ptz"===n),d=!!n&&n.includes("z"),u=ze(A,/battery/i),E=ze(A,/white\s*led|whiteLed|flood\s*light|floodlight/i),I=ze(A,/audio\s*alarm|audioAlarm|siren|pushAlarn|audioPlay/i),Q=ze(A,/ptz/i),B=ze(A,/zoom|zoomFocus|StartZoomFocus/i),C=ze(A,/preset/i),p=ze(A,/(^|_)pir/i),f=!i&&(h||Q),m=!i&&(h||Q),y=!i&&(d||B),D=!i&&(a||C),S={channel:t,hasPan:f,hasTilt:m,hasZoom:y,hasPresets:D,hasPtz:!i&&(l||f||m||y||D),hasBattery:o||u,hasSiren:I,hasFloodlight:Number.isFinite(g)?g>0:E,hasPir:p};return void 0!==n&&(S.ptzMode=n),S}function Ke(e){return new Promise((t=>setTimeout(t,e)))}function et(e,t){const A=new RegExp(`<${t}\\b[^>]*>([\\s\\S]*?)<\\/${t}>`,"g"),r=[];let s;for(;s=A.exec(e);)r.push(s[1]??"");return r}function tt(e){const t=F(e,"audioType"),A=Number.parseInt(F(e,"sampleRate")??"",10),r=Number.parseInt(F(e,"samplePrecision")??"",10),s=Number.parseInt(F(e,"lengthPerEncoder")??"",10),n=F(e,"soundTrack"),i=F(e,"priority");if(!(t&&Number.isFinite(A)&&Number.isFinite(r)&&Number.isFinite(s)&&n))return null;const o={audioType:t,sampleRate:A,samplePrecision:r,lengthPerEncoder:s,soundTrack:n};if(void 0!==i){const e=Number.parseInt(i,10);Number.isFinite(e)&&(o.priority=e)}return o}function At(e,t){const A=4+e.length,r=A%8==0?0:8-A%8,s=12+e.length+r,n=Buffer.alloc(s);return n.writeUInt32LE(1651978544,0),n.writeUInt16LE(A,4),n.writeUInt16LE(A,6),n.writeUInt16LE(256,8),n.writeUInt16LE(t,10),e.copy(n,12),n}var rt=class{client;logger;simpleEvents=new s.EventEmitter;rtspServers=new Set;activeVideoMsgNums=new Map;constructor(e){this.logger=e.logger??console,this.client=new ee(e),this.client.on("event",(e=>{const t=function(e){const t=e.timestamp??Date.now();if("motion"===e.type)return{type:"motion",channel:e.channel,timestamp:t};if("visitor"===e.type)return{type:"doorbell",channel:e.channel,timestamp:t};if("daynight"===e.type)return{type:"daynight",channel:e.channel,timestamp:t};if("ai"===e.type){const A=e.ai,r=A?.type;return{type:r?{people:"people",vehicle:"vehicle",dog_cat:"animal",face:"face",package:"package",other:"other"}[r]:"other",channel:e.channel,timestamp:t}}return null}(e);t&&this.simpleEvents.emit("event",t)}))}normalizeChannel(e){return null==e?0:e}async login(e){await this.client.login(e)}async close(){await this.cleanup(),await this.client.close()}async cleanup(){const e=Array.from(this.rtspServers);this.rtspServers.clear(),await Promise.allSettled(e.map((async e=>{try{await e.stop()}catch(e){this.logger.error("[ReolinkBaichuanApi] Error stopping RTSP server during cleanup:",e)}}))),e.length>0&&this.logger.info(`[ReolinkBaichuanApi] Cleaned up ${e.length} RTSP server(s)`)}async sendXml(e,t=3){this.client.loggedIn||await this.client.login();try{const A=await this.client.sendFrame(e);if(400===A.header.responseCode){if(t>0){if(0===A.body.length)try{this.client.loggedIn=!1,await this.client.login()}catch{}const r=1500;return await new Promise((e=>setTimeout(e,r))),await this.sendXml(e,t-1)}if(0===A.body.length)throw new Error("Baichuan request failed (responseCode 400, empty body). Possible causes: camera sleeping/waking (battery), expired session, or invalid username/password.")}if(0===A.body.length)return"";return this.client.tryDecryptXml(A.body,A.header.channelId,this.client.enc)}catch(e){throw e}}async getTalkAbility(e){return function(e){const t=et(e,"TalkAbility")[0];if(!t)throw new Error("TalkAbility XML not found in response");return{duplexList:et(t,"duplexList").map((e=>F(e,"duplex"))).filter((e=>!!e)),audioStreamModeList:et(t,"audioStreamModeList").map((e=>F(e,"audioStreamMode"))).filter((e=>!!e)),audioConfigList:et(t,"audioConfig").map(tt).filter((e=>!!e))}}(await this.sendXml({cmdId:10,...void 0!==e?{channel:e}:{}}))}async createTalkSession(e=0,t){this.client.loggedIn||await this.client.login();const A=await this.getTalkAbility(e),r=A.audioConfigList.find((e=>"adpcm"===e.audioType.toLowerCase()))??A.audioConfigList[0];if(!r)throw new Error(`Talk not supported on channel ${e} (no audioConfig in TalkAbility)`);const s=A.duplexList[0]??"FDX",n=A.audioStreamModeList[0]??"followVideoStream",i={channel:e,duplex:s,audioStreamMode:n,audioConfig:r},o=Math.floor(r.lengthPerEncoder/2),a=o+4;if(o<=0||a<=4)throw new Error(`Invalid talk audio config: lengthPerEncoder=${r.lengthPerEncoder}`);const c=function(e){const t=e.audioConfig;return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<TalkConfig version="1.1">\n<channelId>${e.channel}</channelId>\n<duplex>${R(e.duplex)}</duplex>\n<audioStreamMode>${R(e.audioStreamMode)}</audioStreamMode>\n<audioConfig>\n<audioType>${R(t.audioType)}</audioType>\n<sampleRate>${t.sampleRate}</sampleRate>\n<samplePrecision>${t.samplePrecision}</samplePrecision>\n<lengthPerEncoder>${t.lengthPerEncoder}</lengthPerEncoder>\n<soundTrack>${R(t.soundTrack)}</soundTrack>\n</audioConfig>\n</TalkConfig>\n</body>`}(i);await(async()=>{const t=await this.client.sendFrame({cmdId:201,channel:e,payloadXml:c,messageClass:I});if(422!==t.header.responseCode){if(200!==t.header.responseCode)throw new Error(`TalkConfig rejected (responseCode ${t.header.responseCode})`)}else{await this.client.sendFrame({cmdId:11,channel:e,payloadXml:"",messageClass:I});const t=await this.client.sendFrame({cmdId:201,channel:e,payloadXml:c,messageClass:I});if(200!==t.header.responseCode)throw new Error(`TalkConfig rejected after reset (responseCode ${t.header.responseCode})`)}})();const g={channel:e,audioConfig:r,blockSize:o,fullBlockSize:a};let l=Buffer.alloc(0),h=!1,d=!1,u=Date.now();const E=Math.max(1,Math.min(8,Math.floor(t?.blocksPerPayload??1))),Q=async t=>{if(0===t.length)return;if(t.length>E)throw new Error(`Internal error: too many blocks in payload (${t.length})`);const A=[];let s=0;for(const e of t)A.push(At(e,o)),s+=Math.max(0,2*(e.length-4)+1);await this.client.sendBinaryPayloadNoReply({cmdId:202,channel:e,extensionXml:k(e),payload:Buffer.concat(A),messageClass:I});const n=s/r.sampleRate*1e3,i=Date.now();i>u?u=i+n:u+=n;const a=u-Date.now();a>0&&await Ke(a)},B=async()=>{if(!d){d=!0;try{for(;;){if(!(l.length>=a)){if(h){if(l.length>0){const e=Buffer.alloc(a,255);l.copy(e,0),l=Buffer.alloc(0),await Q([e])}break}break}{const e=[];for(;e.length<E&&l.length>=a;)e.push(l.subarray(0,a)),l=l.subarray(a);await Q(e)}}}finally{d=!1}}};return{info:g,sendAudio:async e=>{if(h)throw new Error("Talk session is closed");0!==e.length&&(l=0===l.length?e:Buffer.concat([l,e]),await B())},stop:async()=>{if(h)return;h=!0,await B();const t=u-Date.now();t>0?await Ke(t+100):await Ke(100);const A=await this.client.sendFrame({cmdId:11,channel:e,payloadXml:"",messageClass:I});if(200!==A.header.responseCode)throw new Error(`TalkReset rejected (responseCode ${A.header.responseCode})`)}}}async sendBinary(e){return await this.client.login(),await this.client.sendBinary(e)}async getNetPort(){const e={},t=(await this.sendXml({cmdId:37})).matchAll(/<([A-Za-z]+)Port[^>]*>([\s\S]*?)<\/\1Port>/g);for(const A of t){const t=(A[1]??"").toLowerCase(),r=A[2]??"",s={};for(const e of r.matchAll(/<([A-Za-z]+)>(-?\d+)<\/\1>/g)){const t=(e[1]??"").toLowerCase(),A=Number(e[2]);Number.isFinite(A)&&(s[t]=A)}Object.keys(s).length&&(e[t]=s)}return e}async setPortEnabled(e){const t=`${e.port[0].toUpperCase()}${e.port.slice(1)}Port`,A=`<?xml version="1.0" encoding="UTF-8" ?><body><${t} version="1.1"><enable>${e.enable?1:0}</enable></${t}></body>`;await this.sendXml({cmdId:36,payloadXml:A})}async getInfo(e){const t={cmdId:null==e?80:318};void 0!==e&&(t.channel=e);return function(e,t){const A={};for(const r of t){const t=F(e,r);void 0!==t&&(A[r]=t)}return A}(await this.sendXml(t),["type","hardwareVersion","firmwareVersion","itemNo","serialNumber","name"])}async getEncXml(e){const t=this.normalizeChannel(e);return await this.sendXml({cmdId:56,channel:t})}async getStreamMetadata(e){const t=this.normalizeChannel(e),A=await this.getEncXml(t),r=[];let s=!0;const n={0:"H.264",1:"H.265",2:"MJPEG",3:"MPEG4"},i=A.match(/<mainStream[^>]*>([\s\S]*?)<\/mainStream>/);if(i){const e=i[1]??"",t=Number(F(e,"width")??"0"),A=Number(F(e,"height")??"0"),o=Number(F(e,"videoEncType")??"0"),a=Number(F(e,"frame")??"0"),c=Number(F(e,"bitRate")??"0"),g=Number(F(e,"audio")??"0"),l=F(e,"enable");(void 0===l||"1"===l||"true"===l)&&(r.push({profile:"main",audio:g,width:t,height:A,videoEncType:n[o]??`Unknown(${o})`,videoEncTypeInt:o,frameRate:a,bitRate:c}),s=s&&1===g)}const o=A.match(/<subStream[^>]*>([\s\S]*?)<\/subStream>/);if(o){const e=o[1]??"",t=Number(F(e,"width")??"0"),A=Number(F(e,"height")??"0"),i=Number(F(e,"videoEncType")??"0"),a=Number(F(e,"frame")??"0"),c=Number(F(e,"bitRate")??"0"),g=Number(F(e,"audio")??"0"),l=F(e,"enable");(void 0===l||"1"===l||"true"===l)&&(r.push({profile:"sub",audio:g,width:t,height:A,videoEncType:n[i]??`Unknown(${i})`,videoEncTypeInt:i,frameRate:a,bitRate:c}),s=s&&1===g)}const a=["extStream","thirdStream","externStream","extraStream"];for(const e of a){const t=A.match(new RegExp(`<${e}[^>]*>([\\s\\S]*?)<\\/${e}>`));if(!t)continue;const i=t[1]??"",o=Number(F(i,"width")??"0"),a=Number(F(i,"height")??"0"),c=Number(F(i,"videoEncType")??"0"),g=Number(F(i,"frame")??"0"),l=Number(F(i,"bitRate")??"0"),h=Number(F(i,"audio")??"0"),d=F(i,"enable");(void 0===d||"1"===d||"true"===d)&&(r.push({profile:"ext",audio:h,width:o,height:a,videoEncType:n[c]??`Unknown(${c})`,videoEncTypeInt:c,frameRate:g,bitRate:l}),s=s&&1===h);break}return{channel:t,streams:r,audioEnabled:s}}async setEncXml(e,t){const A="number"==typeof e?this.normalizeChannel(e):0,r="number"==typeof e?t:e;await this.sendXml({cmdId:57,channel:A,payloadXml:r})}async setStreamVideoCodec(e,t,A){const r="number"==typeof e?this.normalizeChannel(e):this.normalizeChannel(A),s="number"==typeof e?t:e,n="H.265"===("number"==typeof e?A:t)?1:0,i="main"===s?["mainStream"]:"sub"===s?["subStream"]:["extStream","thirdStream","externStream","extraStream"],o=await this.getEncXml(r);let a=null;for(const e of i){const t=new RegExp(`(<${e}[^>]*>[\\s\\S]*?<videoEncType>)(\\d+)(</videoEncType>)`);if(!t.test(o))continue;const A=o.replace(t,`$1${n}$3`);if(A!==o){a=A;break}}if(!a)throw new Error(`Could not find <videoEncType> for profile=${s} (tags=${i.join(",")}) in GetEnc XML (channel=${r}).`);await this.setEncXml(r,a)}async setNetPort(e){null!=e.onvifEnable&&await this.setPortEnabled({port:"onvif",enable:1===e.onvifEnable}),null!=e.rtmpEnable&&await this.setPortEnabled({port:"rtmp",enable:1===e.rtmpEnable}),null!=e.rtspEnable&&await this.setPortEnabled({port:"rtsp",enable:1===e.rtspEnable})}async reboot(e){const t={cmdId:23};void 0!==e&&(t.channel=e),await this.sendXml(t)}async ping(){await this.sendXml({cmdId:93})}async getGeneralXml(e){const t={cmdId:104};return void 0!==e&&(t.channel=e),await this.sendXml(t)}async setGeneralXml(e,t){const A="number"==typeof e||void 0===e?e:void 0,r="string"==typeof e?e:t;await this.sendXml({cmdId:105,...void 0===A?{}:{channel:A},payloadXml:r})}static buildChannelExtensionXml(e){return`<?xml version="1.0" encoding="UTF-8" ?><Extension version="1.1"><channelId>${R(String(e))}</channelId></Extension>`}async getMotionState(e){const t=F(await this.sendXml({cmdId:46,...void 0!==e?{channel:e}:{}}),"enable");return"1"===t||"true"===t}async getOsd(e){const t=this.normalizeChannel(e),A=await this.sendXml({cmdId:26,channel:t});return{channel:t,osdChannel:{enable:Number(F(A,"enable")??"0"),name:F(A,"name")??"",pos:F(A,"pos")??""},osdTime:{enable:Number(F(A,"timeEnable")??"0"),pos:F(A,"timePos")??""},watermark:Number(F(A,"watermark")??"0")}}async setOsd(e,t){const A="number"==typeof e?this.normalizeChannel(e):this.normalizeChannel(t),r="number"==typeof e?t:e,s=`<?xml version="1.0" encoding="UTF-8" ?><body><Osd version="1.1"><channel>${A}</channel><osdChannel><enable>${r.osdChannel.enable}</enable><name>${R(r.osdChannel.name)}</name><pos>${R(r.osdChannel.pos)}</pos></osdChannel><osdTime><enable>${r.osdTime.enable}</enable><pos>${R(r.osdTime.pos)}</pos></osdTime><watermark>${r.watermark}</watermark></Osd></body>`;await this.sendXml({cmdId:25,channel:A,payloadXml:s})}async getAiState(e){const t=await this.sendXml({cmdId:342,...void 0!==e?{channel:e}:{}});return{channel:e??0,alarm_state:Number(F(t,"alarm_state")??"0"),support:Number(F(t,"support")??"0")}}async getSnapshot(e=0){const t=`<body><Snap version="1.1"><channelId>${e}</channelId><logicChannel>${e}</logicChannel><time>0</time><fullFrame>0</fullFrame><streamType>main</streamType></Snap></body>`;return await this.client.login(),await this.client.sendBinary({cmdId:109,channel:e,payloadXml:t,extensionXml:N(e),timeoutMs:15e3})}async subscribeEvents(){await this.client.login();await this.client.sendXml({cmdId:31,extensionXml:'<?xml version="1.0" encoding="UTF-8" ?><Extension version="1.1"><channelId>251</channelId></Extension>'}),this.client.subscribed=!0}async unsubscribeEvents(){this.client.subscribed=!1}async getEvents(e){const t=await this.sendXml({cmdId:33,...void 0!==e?{channel:e}:{}});return{channel:e??0,ai:{channel:e??0,alarm_state:Number(F(t,"alarm_state")??"0")}}}async getTwoWayAudioConfig(e){const t=F(await this.sendXml({cmdId:10,...void 0!==e?{channel:e}:{}}),"audioStreamMode"),A={channel:e??0,enabled:"mixAudioStream"===t||"followVideoStream"===t};return t&&(A.mode=t),A}async startTwoWayAudio(e){await this.sendXml({cmdId:10,...void 0!==e?{channel:e}:{}})}async sendAudioData(e,t){const A={cmdId:10,payloadXml:""};void 0!==t&&(A.channel=t),await this.client.sendBinary(A)}async stopTwoWayAudio(e){}async startVideoStream(e,t="sub"){const A=this.normalizeChannel(e),r=A,s={main:{handle:0,streamType:0,streamName:"mainStream"},sub:{handle:256,streamType:1,streamName:"subStream"},ext:{handle:1024,streamType:0,streamName:"externStream"}}[t];if(!s)throw new Error(`Invalid stream profile: ${t}`);if(!s.streamName)throw new Error(`Stream name not found for profile: ${t}, config: ${JSON.stringify(s)}`);const n=s.streamName;if("string"!=typeof n)throw new Error(`streamName is not a string: ${typeof n}, value: ${n}, config: ${JSON.stringify(s)}`);const i=function(e,t,A){if(!t||"string"!=typeof t)throw new Error(`buildPreviewXml: streamType is required (string) but got: ${typeof t} = ${t}`);return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<Preview version="1.0">\n${void 0!==A?`<channelId>${A}</channelId>\n`:""}<handle>${e}</handle>\n<streamType>${R(t)}</streamType>\n</Preview>\n</body>`}(s.handle,n,r),o="udp"===this.client.getTransport?.()?3:1;let a;for(let e=1;e<=o;e++){const n=this.client.peekNextMsgNum();this.client.subscribeVideoStream(3,n);try{const e={cmdId:3,channel:A,channelIdOverride:r,extensionXml:N(r),payloadXml:i,messageClass:I,streamType:s.streamType},n=await this.client.sendFrame(e);if(200!==n.header.responseCode)throw new Error(`Video stream request rejected (response_code ${n.header.responseCode}). Neolink expects response_code 200, camera returned ${n.header.responseCode}`);return void this.activeVideoMsgNums.set(`${A}:${t}`,n.header.msgNum)}catch(t){a=t;try{this.client.unsubscribeVideoStream(3,n)}catch{}if(e<o){await new Promise((e=>setTimeout(e,250)));continue}}}throw a instanceof Error?a:new Error(String(a))}getActiveVideoMsgNum(e,t="sub"){const A=this.normalizeChannel(e);return this.activeVideoMsgNums.get(`${A}:${t}`)}async stopVideoStream(e,t="sub"){const A=this.normalizeChannel(e),r=A,s={main:{handle:0,streamType:0},sub:{handle:256,streamType:1},ext:{handle:1024,streamType:0}}[t],n=function(e,t){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<Preview version="1.0">\n${void 0!==t?`<channelId>${t}</channelId>\n`:""}<handle>${e}</handle>\n</Preview>\n</body>`}(s.handle,r),i=`${A}:${t}`,o=this.activeVideoMsgNums.get(i);this.activeVideoMsgNums.delete(i);try{await this.client.sendFrame({cmdId:4,channel:A,channelIdOverride:r,extensionXml:N(r),payloadXml:n,messageClass:I,streamType:s.streamType,...void 0!==o?{msgNumOverride:o}:{},timeoutMs:2e3})}catch{}}async getPtzPresets(e){const t=this.normalizeChannel(e),A=t,r=await this.sendXml({cmdId:190,channel:t,channelIdOverride:A,extensionXml:N(A),messageClass:I,streamType:0});return this.parsePtzPresetList(r).filter((e=>void 0===e.enable||"1"===e.enable)).filter((e=>void 0===e.name||""!==String(e.name).trim())).map((e=>({id:e.id,name:e.name??`Preset ${e.id}`})))}parsePtzPresetList(e){const t=[],A=e.matchAll(/<preset\b[^>]*>([\s\S]*?)<\/preset>/gi);for(const e of A){const A=e[1]??"",r=/<id>([^<]*)<\/id>/i.exec(A)?.[1];if(!r)continue;const s=Number(r);if(!Number.isFinite(s))continue;const n=/<name>([^<]*)<\/name>/i.exec(A),i=/<enable>([^<]*)<\/enable>/i.exec(A),o={id:s},a=n?.[1],c=i?.[1];void 0!==a&&(o.name=a),void 0!==c&&(o.enable=c),t.push(o)}return t}async getPtzPresetsRaw(e){const t=this.normalizeChannel(e),A=t,r=await this.sendXml({cmdId:190,channel:t,channelIdOverride:A,extensionXml:N(A),messageClass:I,streamType:0});return this.parsePtzPresetList(r)}async ptz(e,t){const A="number"==typeof e?this.normalizeChannel(e):0,r="number"==typeof e?t:e,s=A;let n,i;if("stop"===r.action)n="stop";else{const e={Left:"left",Right:"right",Up:"up",Down:"down"}[r.command];if(!e)throw new Error(`Unsupported PTZ command for MSG_ID_PTZ_CONTROL: ${r.command}`);n=e}if("stop"===n)i=0;else{const e=r.speed;i=void 0===e?32:e>0&&e<=1?Math.max(1,64*e):e}const o=function(e,t,A){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<PtzControl version="1.1">\n<channelId>${e}</channelId>\n<command>${R(t)}</command>\n<speed>${A}</speed>\n</PtzControl>\n</body>`}(s,n,i),a=N(s),c=await this.client.sendFrame({cmdId:18,channel:A,channelIdOverride:s,extensionXml:a,payloadXml:o,messageClass:I,streamType:0});if(200!==c.header.responseCode){let e="";if(c.body.length>0)try{const t=this.client.tryDecryptXml;if(t){const A=t.call(this.client,c.body,c.header.channelId,this.client.enc);A&&(e=` - Error details: ${A.substring(0,200)}`)}}catch{}throw new Error(`PTZ control rejected (response_code ${c.header.responseCode})${e}`)}if("start"===r.action&&"stop"!==n){const e=r.autoStopMs??500;e>0&&setTimeout((()=>{this.ptz(A,{action:"stop",command:r.command}).catch((()=>{}))}),e)}}async moveToPtzPreset(e,t){const A=void 0===t?this.normalizeChannel(void 0):this.normalizeChannel(e),r=A,s=function(e,t,A,r){return U(e,t,A,void 0===r?void 0:{name:r})}(r,void 0===t?e:t,"toPos"),n=N(r),i=await this.client.sendFrame({cmdId:19,channel:A,channelIdOverride:r,extensionXml:n,payloadXml:s,messageClass:I,streamType:0});if(200!==i.header.responseCode)throw new Error(`PTZ preset move rejected (response_code ${i.header.responseCode})`)}async setPtzPreset(e,t,A){const r="string"==typeof t?this.normalizeChannel(A):this.normalizeChannel(e),s=r,n=U(s,"string"==typeof t?e:t,"setPos",{name:"string"==typeof t?t:A,enable:1}),i=N(s),o=await this.client.sendFrame({cmdId:19,channel:r,channelIdOverride:s,extensionXml:i,payloadXml:n,messageClass:I,streamType:0});if(200!==o.header.responseCode)throw new Error(`PTZ preset save rejected (response_code ${o.header.responseCode})`)}async deletePtzPreset(e,t){const A=void 0===t?this.normalizeChannel(void 0):this.normalizeChannel(e),r=void 0===t?e:t,s=A,n=N(s);let i;try{const e=await this.getPtzPresetsRaw(A);i=e.find((e=>e.id===r))?.name}catch{}const o=[{label:"command=delPos",payloadXml:U(s,r,"delPos")},{label:"enable=0 (no name)",payloadXml:U(s,r,"setPos",{enable:0})},{label:"name='' (no enable)",payloadXml:U(s,r,"setPos",{name:""})},{label:"enable=0 name=''",payloadXml:U(s,r,"setPos",{name:"",enable:0})},...i?[{label:"enable=0 name=current",payloadXml:U(s,r,"setPos",{name:i,enable:0})}]:[],{label:"enable=0 name='Preset N'",payloadXml:U(s,r,"setPos",{name:`Preset ${r}`,enable:0})}];let a,c=!1;for(const e of o)try{const t=await this.client.sendFrame({cmdId:19,channel:A,channelIdOverride:s,extensionXml:n,payloadXml:e.payloadXml,messageClass:I,streamType:0});if(200!==t.header.responseCode)throw new Error(`PTZ preset delete rejected (response_code ${t.header.responseCode})`);c=!0;try{const e=(await this.getPtzPresetsRaw(A)).find((e=>e.id===r));if(!e)return;const t=void 0!==e.name&&""===String(e.name).trim(),s=void 0!==e.enable&&"0"===String(e.enable).trim();if(t||s)return}catch(e){a=e}}catch(e){a=e}if(!c)throw a instanceof Error?a:new Error("PTZ preset delete failed");this.logger.warn("PTZ presets (baichuan): deletePtzPreset did not take effect (firmware ignored request)",{channel:A,channelId:s,presetId:r})}async getPtzPosition(e){const t=this.normalizeChannel(e),A=await this.sendXml({cmdId:433,channel:t}),r=F(A,"pPos"),s=F(A,"tPos"),n={};return void 0!==r&&(n.pan=Number(r)),void 0!==s&&(n.tilt=Number(s)),n}async getZoomFocus(e){const t=this.normalizeChannel(e),A=t,r=await this.sendXml({cmdId:294,channel:t,channelIdOverride:A,extensionXml:N(A),messageClass:I,streamType:0}),s=e=>{const t=new RegExp(`<${e}>([\\s\\S]*?)</${e}>`).exec(r),A=t?.[1];if(!A)return;const s=F(A,"maxPos"),n=F(A,"minPos"),i=F(A,"curPos");return void 0!==s&&void 0!==n&&void 0!==i?{maxPos:Number(s),minPos:Number(n),curPos:Number(i)}:void 0},n={},i=s("zoom"),o=s("focus");return i&&(n.zoom=i),o&&(n.focus=o),n}async zoomToFactor(e,t){const A=void 0===t?0:this.normalizeChannel(e),r=void 0===t?e:t,s=A,n=(await this.getZoomFocus(A)).zoom;if(!n)throw new Error("Camera did not return <zoom> info (zoom may be unsupported)");const i=Math.round(1e3*r),o=function(e,t){return`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<StartZoomFocus version="1.1">\n<channelId>${e}</channelId>\n<command>zoomPos</command>\n<movePos>${Math.trunc(t)}</movePos>\n</StartZoomFocus>\n</body>`}(s,Math.min(n.maxPos,Math.max(n.minPos,i))),a=N(s),c=await this.client.sendFrame({cmdId:295,channel:A,channelIdOverride:s,extensionXml:a,payloadXml:o,messageClass:I,streamType:0});if(200!==c.header.responseCode)throw new Error(`Zoom rejected (response_code ${c.header.responseCode})`)}async getBatteryStatus(e){const t=this.normalizeChannel(e);try{const e=await Promise.race([this.sendXml({cmdId:252,channel:t}),new Promise(((e,t)=>setTimeout((()=>t(new Error("Timeout"))),5e3)))]),A=F(e,"batteryPercent"),r=F(e,"chargeStatus"),s={channel:t,sleeping:!1};return void 0!==A&&(s.batteryPercent=Number(A)),void 0!==r&&(s.chargeStatus=r),s}catch(e){const A={channel:t,sleeping:!0};return e instanceof Error&&e.message,A}}async getBatteryInfo(e){const t=this.normalizeChannel(e),A=await this.sendXml({cmdId:252,channel:t}),r=F(A,"batteryPercent"),s=F(A,"chargeStatus"),n={channel:t};return void 0!==r&&(n.batteryPercent=Number(r)),void 0!==s&&(n.chargeStatus=s),n}async wakeUp(e,t){const A=this.normalizeChannel(e);try{await this.getEncXml(A);const e=t??1500;e>0&&await new Promise((t=>setTimeout(t,e)))}catch(e){throw e}}async isSleeping(e){const t=this.normalizeChannel(e);try{return await Promise.race([this.getBatteryInfo(t),new Promise(((e,t)=>setTimeout((()=>t(new Error("Timeout"))),5e3)))]),!1}catch(e){return!0}}async getPirInfo(e){const t=this.normalizeChannel(e),A=await this.sendXml({cmdId:212,channel:t}),r=F(A,"enable"),s=F(A,"sensiValue"),n=F(A,"reduceFalseAlarm"),i=F(A,"interval"),o=F(A,"intervalSecMax"),a={channel:t};return void 0!==r&&(a.enable=Number(r)),void 0!==s&&(a.sensitive=Number(s)),void 0!==n&&(a.reduceAlarm=Number(n)),void 0!==i&&(a.interval=Number(i)),void 0!==o&&(a.intervalMax=Number(o)),{enabled:"1"===r,state:a}}async setPirInfo(e,t){const A="number"==typeof e?e:t,r="number"==typeof e?t:e,s=this.normalizeChannel(A);let n=await this.sendXml({cmdId:212,channel:s});void 0!==r.enable&&(n=n.replace(/<enable>[^<]*<\/enable>/,`<enable>${r.enable}</enable>`)),void 0!==r.sensitive&&(n=n.replace(/<sensiValue>[^<]*<\/sensiValue>/,`<sensiValue>${r.sensitive}</sensiValue>`)),void 0!==r.reduceAlarm&&(n=n.replace(/<reduceFalseAlarm>[^<]*<\/reduceFalseAlarm>/,`<reduceFalseAlarm>${r.reduceAlarm}</reduceFalseAlarm>`)),void 0!==r.interval&&(n=n.replace(/<interval>[^<]*<\/interval>/,`<interval>${r.interval}</interval>`)),await this.sendXml({cmdId:213,channel:s,payloadXml:n})}async setMotionDetection(e,t,A){const r="number"==typeof e?e:A,s="number"==typeof e?t:e,n="number"==typeof e?A:t,i=this.normalizeChannel(r);let o=await this.sendXml({cmdId:46,channel:i});void 0!==s&&(o=o.replace(/<enable>[^<]*<\/enable>/,`<enable>${s?"1":"0"}</enable>`)),void 0!==n&&(o=o.replace(/<sensitivityDefault>[^<]*<\/sensitivityDefault>/,`<sensitivityDefault>${n}</sensitivityDefault>`)),await this.sendXml({cmdId:47,channel:i,payloadXml:o})}async setAiDetection(e,t,A,r){const s="number"==typeof e?e:r,n="number"==typeof e?t:e,i="number"==typeof e?A:t,o="number"==typeof e?r:A,a=this.normalizeChannel(s),c=`<?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<GetAiAlarm version="1.1">\n<channelId>${a+1}</channelId>\n<aiType>${R(n)}</aiType>\n</GetAiAlarm>\n</body>`;let g=await this.sendXml({cmdId:342,channel:a,payloadXml:c});void 0!==i&&(g=g.replace(/<sensitivity>[^<]*<\/sensitivity>/,`<sensitivity>${i}</sensitivity>`)),void 0!==o&&(g=g.replace(/<stayTime>[^<]*<\/stayTime>/,`<stayTime>${o}</stayTime>`)),await this.sendXml({cmdId:343,channel:a,payloadXml:g})}async getSiren(e){try{const t=await this.sendXml({cmdId:547,...void 0!==e?{channel:e}:{}});return{enabled:"1"===F(t,"status")}}catch{return{enabled:!1}}}async setSiren(e,t,A){const r="boolean"==typeof e?A??0:e,s="boolean"==typeof e?e:t,n="boolean"==typeof e?t:A,i=void 0!==r?r+1:void 0;let o;if(void 0!==n)o=T(i,n);else{o=M(i,s?1:0)}try{await this.sendXml({cmdId:263,...void 0!==r?{channel:r}:{},payloadXml:o})}catch(e){if(!0!==s||void 0!==n)throw e;o=T(i,2),await this.sendXml({cmdId:263,...void 0!==r?{channel:r}:{},payloadXml:o})}}async getWhiteLedState(e){const t=this.normalizeChannel(e),A=await this.sendXml({cmdId:B,channel:t}),r=F(A,"enable"),s=F(A,"state"),n=F(A,"status"),i=F(A,"brightness_cur"),o={enabled:"1"===r||"1"===s||"1"===n};return void 0!==i&&(o.brightness=Number(i)),o}async setWhiteLedState(e,t,A){const r="number"==typeof e?e:A??0,s="number"==typeof e?t:e,n="number"==typeof e?A:t,i=this.normalizeChannel(r);if(void 0!==s)try{const e=v(i,s?1:0,s?180:0);await this.sendXml({cmdId:288,channel:i,payloadXml:e})}catch(e){let t=await this.sendXml({cmdId:B,channel:i});/<enable>[^<]*<\/enable>/i.test(t)&&(t=t.replace(/<enable>[^<]*<\/enable>/i,`<enable>${s?1:0}</enable>`)),/<state>[^<]*<\/state>/i.test(t)&&(t=t.replace(/<state>[^<]*<\/state>/i,`<state>${s?1:0}</state>`)),/<status>[^<]*<\/status>/i.test(t)&&(t=t.replace(/<status>[^<]*<\/status>/i,`<status>${s?1:0}</status>`)),await this.sendXml({cmdId:290,channel:i,payloadXml:t})}if(void 0!==n){let e=await this.sendXml({cmdId:B,channel:i});/<brightness_cur>[^<]*<\/brightness_cur>/i.test(e)&&(e=e.replace(/<brightness_cur>[^<]*<\/brightness_cur>/i,`<brightness_cur>${n}</brightness_cur>`)),/<enable>[^<]*<\/enable>/i.test(e)&&(e=e.replace(/<enable>[^<]*<\/enable>/i,"<enable>1</enable>")),await this.sendXml({cmdId:290,channel:i,payloadXml:e})}}async getAbilityInfo(){const e=this.client.username,t=`<?xml version="1.0" encoding="UTF-8" ?>\n<Extension version="1.1">\n<userName>${R(e)}</userName>\n<token>system, streaming, PTZ, IO, security, replay, disk, network, alarm, record, video, image</token>\n</Extension>`;const A=await this.sendXml({cmdId:151,extensionXml:t}),r={},s=["system","streaming","PTZ","IO","security","replay","disk","network","alarm","record","video","image"];for(const e of s){const t=new RegExp(`<${e}[^>]*>([\\s\\S]*?)<\\/${e}>`,"i"),s=A.match(t);if(s){const e=(s[1]??"").matchAll(/<subModule[^>]*>([\s\S]*?)<\/subModule>/g);for(const t of e){const e=t[1]??"",A=F(e,"channelId")||F(e,"chnID"),s=F(e,"abilityValue");if(s){const e=A?Number(A):"Host";r[e]||(r[e]={});const t=s.split(",").map((e=>e.trim())).filter(Boolean);for(const A of t)r[e][A]=1}}}}const n=A.match(/<AbilityInfo[^>]*>([\s\S]*?)<\/AbilityInfo>/);if(n){const e=(n[1]??"").matchAll(/<([A-Za-z]+)[^>]*>([^<]*)<\/\1>/g);r.Host||(r.Host={});for(const t of e){const e=t[1],A=t[2];if(e&&void 0!==A&&!["image","video","subModule"].includes(e)&&"channelId"!==e&&"abilityValue"!==e){const t=Number(A);r.Host[e]=Number.isNaN(t)?A:t}}}return r.Host&&0===Object.keys(r.Host).length&&delete r.Host,r}async getAbilityVersion(e,t){const A=(await this.getAbilityInfo())[null!=t?t:"Host"];if(!A)return 0;const r=A[e];if("number"==typeof r)return r;if("string"==typeof r){const e=Number(r);return Number.isNaN(e)?0:e}return 0}async getSupportInfo(){return je(await this.sendXml({cmdId:199}))}async getDeviceCapabilities(e){const t=this.normalizeChannel(e),[A,r]=await Promise.allSettled([this.getAbilityInfo(),this.getSupportInfo()]),s="fulfilled"===A.status?A.value:void 0,n="fulfilled"===r.status?r.value:void 0,i={channel:t};s&&(i.abilities=s),n&&(i.support=n);const o=$e(i);if(!o.hasSiren){const e=async()=>{try{return await this.sendXml({cmdId:547,channel:t,timeoutMs:1e3}),!0}catch{return!1}},A=async()=>{try{const e=M(t+1,0);return await this.sendXml({cmdId:263,channel:t,payloadXml:e,timeoutMs:1e3}),!0}catch{return!1}};(await e()||await A())&&(o.hasSiren=!0)}if(!o.hasFloodlight){const e=(n?.items??[]).filter((e=>e.chnID===t||e.chnID===t+1)),A=e=>{const t=e?.lightType;if("number"==typeof t)return t;if("string"==typeof t){const e=Number(t);return Number.isFinite(e)?e:void 0}},r=e.map((e=>A(e))).filter((e=>Number.isFinite(e)));if(r.some((e=>0===e)));else if(r.some((e=>e>0)))o.hasFloodlight=!0;else try{const e=await this.sendXml({cmdId:B,channel:t,timeoutMs:1e3});/(<FloodlightTask\b|<FloodlightManual\b|<FloodlightStatusList\b|<WhiteLed\b)/i.test(e)&&(o.hasFloodlight=!0)}catch{}}let a;if(o.hasPresets){const e=(await Promise.allSettled([this.getPtzPresets(t)]))[0];"fulfilled"===e?.status&&(a=e.value,o.hasPresets=a.length>0)}const c={capabilities:o};return s&&(c.abilities=s),n&&(c.support=n),a&&(c.presets=a),c}async createRtspStream(e,t,A){const r="number"==typeof e?this.normalizeChannel(e):0,s="number"==typeof e?t:e,n="number"==typeof e?A:t;let i;try{const e=await this.getStreamMetadata(r);if(Array.isArray(e)){const t=e.find((e=>e.profile===s));t?.videoEncType&&(i=t.videoEncType)}else if(e&&"object"==typeof e&&"streams"in e){const t=e.streams;if(Array.isArray(t)){const e=t.find((e=>e?.profile===s));e?.videoEncType&&(i=e.videoEncType)}}}catch(e){this.logger.warn(`[ReolinkBaichuanApi] Could not fetch stream metadata, will auto-detect codec: ${e instanceof Error?e.message:e}`)}const o={api:this,channel:r,profile:s,...void 0!==n?.listenHost?{listenHost:n.listenHost}:{},...void 0!==n?.listenPort?{listenPort:n.listenPort}:{},...void 0!==n?.path?{path:n.path}:{},logger:this.logger},a=new _e(o);return await a.start(),this.rtspServers.add(a),a.once("close",(()=>{this.rtspServers.delete(a)})),a}};function st(e,t,A){const r=[];let s=0;const n=(e,r)=>{if(4===t)return"be"===A?e.readUInt32BE(r):e.readUInt32LE(r);if(2===t)return"be"===A?e.readUInt16BE(r):e.readUInt16LE(r);if(3===t){const t=e[r],s=e[r+1],n=e[r+2];return"be"===A?(t<<16|s<<8|n)>>>0:(n<<16|s<<8|t)>>>0}return e.readUInt8(r)};for(;s+t<=e.length;){const A=n(e,s);if(s+=t,!A)return[];if(s+A>e.length)return[];const i=e.subarray(s,s+A);s+=A,i.length&&r.push(i)}return s!==e.length?[]:r}function nt(e,t){if(!t.length)return Number.POSITIVE_INFINITY;let A=0;for(const r of t)if(r.length){if(128&r[0])A+=10;else if("H264"===e){const e=31&r[0];(e<1||e>23)&&A++}else if("H265"===e){if(r.length<2){A++;continue}const e=r[0]>>1&63;e>=0&&e<=29||e>=32&&e<=40||e>=48&&e<=50||A++}}else A++;return A}function it(e,t){if(!e?.length)return[];const A=[],r=function(e,t=64){if(!e?.length)return-1;const A=Math.min(e.length,Math.max(0,t));for(let t=0;t+3<A;t++)if(0===e[t]&&0===e[t+1]){if(1===e[t+2])return t;if(0===e[t+2]&&1===e[t+3])return t}return-1}(e,64);if(r>=0){const t=function(e){const t=[],A=e.length,r=t=>{if(t+3<=A&&0===e[t]&&0===e[t+1]){if(1===e[t+2])return 3;if(t+4<=A&&0===e[t+2]&&1===e[t+3])return 4}return 0};let s=0;for(;s<A&&!r(s);)s++;for(;s<A;){const n=r(s);if(!n){s++;continue}const i=s+n;let o=i;for(;o<A&&!r(o);)o++;if(i<o){const A=e.subarray(i,o);A.length>0&&t.push(A)}s=o}return t}(0===r?e:e.subarray(r));t.length&&A.push(t)}A.push(st(e,4,"be")),A.push(st(e,4,"le")),A.push(st(e,3,"be")),A.push(st(e,3,"le")),A.push(st(e,2,"be")),A.push(st(e,2,"le")),A.push(st(e,1,"be"));const s=function(e){if(e.length>=4&&0===e[0]&&0===e[1]){if(1===e[2])return e.subarray(3);if(0===e[2]&&1===e[3])return e.subarray(4)}return e}(e);s.length&&A.push([s]);let n=[],i=Number.POSITIVE_INFINITY;for(const e of A){if(!e.length)continue;const A=nt(t,e);if(A<i&&(i=A,n=e,0===i))break}return n}function ot(e){const t=it(e,"H264");let A,r,s;for(const e of t){if(e.length<1)continue;const t=31&e[0];if(7===t){if(A=e,e.length>=4){s=Buffer.from([e[1],e[2],e[3]]).toString("hex")}}else 8===t&&(r=e)}const n={};return A&&(n.sps=A),r&&(n.pps=r),s&&(n.profileLevelId=s),n}function at(e){const t=it(e,"H265");let A,r,s;for(const e of t){if(e.length<2)continue;const t=e[0]>>1&63;32===t?A=e:33===t?r=e:34===t&&(s=e)}const n={};return A&&(n.vps=A),r&&(n.sps=r),s&&(n.pps=s),n}var ct=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350];function gt(e){if(e.length<7)return null;if(255!==e[0]||240&~e[1])return null;const t=!(1&~e[1]),A=((192&e[2])>>6)+1,r=(60&e[2])>>2,s=ct[r]??0,n=(1&e[2])<<2|(192&e[3])>>6;if(!s||!n)return null;const i=t?7:9;if(e.length<i)return null;return{headerLength:i,sampleRate:s,channels:n,configHex:((31&A)<<11|(15&r)<<7|(15&n)<<3).toString(16).padStart(4,"0")}}var lt=class{constructor(e){this.payloadType=e,this.seq=r.randomBytes(2).readUInt16BE(0)}seq=0;timestamp=0;ssrc=r.randomBytes(4).readUInt32BE(0);setTimestamp(e){this.timestamp=e>>>0}getTimestamp(){return this.timestamp>>>0}advanceTimestamp(e){this.timestamp=this.timestamp+(e>>>0)>>>0}writePacket(e,t){const A=Buffer.alloc(12);return A[0]=128,A[1]=(t?128:0)|127&this.payloadType,A.writeUInt16BE(65535&this.seq,2),A.writeUInt32BE(this.timestamp>>>0,4),A.writeUInt32BE(this.ssrc>>>0,8),this.seq=this.seq+1&65535,Buffer.concat([A,e])}};function ht(e,t,A,r,s){const n=A.maxRtpPayload,i=[];if(e.length<=n)return i.push(t.writePacket(e,r&&s)),i;const o=e[0],a=31&o,c=128&o|96&o|28,g=e.subarray(1);let l=0;for(;l<g.length;){const e=g.length-l,A=Math.min(e,n-2),o=0===l,h=l+A>=g.length,d=(o?128:0)|(h?64:0)|31&a,u=Buffer.concat([Buffer.from([c,d]),g.subarray(l,l+A)]);i.push(t.writePacket(u,r&&s&&h)),l+=A}return i}function dt(e,t,A,r,s){const n=A.maxRtpPayload,i=[];if(e.length<=n)return i.push(t.writePacket(e,r&&s)),i;if(e.length<3)return i;const o=e[0],a=o>>1&63,c=129&o|98,g=e[1],l=e.subarray(2);let h=0;for(;h<l.length;){const e=l.length-h,A=Math.min(e,n-3),o=0===h,d=h+A>=l.length,u=(o?128:0)|(d?64:0)|63&a,E=Buffer.concat([Buffer.from([c,g,u]),l.subarray(h,h+A)]);i.push(t.writePacket(E,r&&s&&d)),h+=A}return i}var ut=class e{constructor(e,t,A,r=25,s=1200){this.logger=e,this.videoPayloadType=t,this.maxRtpPayload=s,this.videoRtp=new lt(t),void 0!==A&&(this.audioRtp=new lt(A)),this.fallbackVideoIncrement=Math.max(1,Math.round(this.videoClockRate/Math.max(1,r)))}clients=new Set;closed=!1;videoRtp;audioRtp;videoBaseUs;videoBaseTs;videoLastTs;videoClockRate=9e4;fallbackVideoIncrement;cachedH264ParamSetsAnnexB;cachedH265ParamSetsAnnexB;addClient(e){if(this.closed)return void e.destroy();const t={socket:e,needsKeyframe:!0,sentVideoConfig:!1};this.clients.add(t);const A=()=>{this.clients.delete(t);try{e.destroy()}catch{}};e.on("error",A),e.on("close",A)}static ANNEXB_START_CODE=Buffer.from([0,0,0,1]);static joinAnnexBNals(...t){const A=t.filter((e=>!!e&&e.length>0));if(!A.length)return;const r=[];for(const t of A)r.push(e.ANNEXB_START_CODE,t);return Buffer.concat(r)}updateVideoParamSetsFromAccessUnit(t,A){if(!A?.length)return;if("H264"===t){const{sps:t,pps:r}=ot(A);return void(t&&r&&(this.cachedH264ParamSetsAnnexB=e.joinAnnexBNals(t,r)))}const{vps:r,sps:s,pps:n}=at(A);r&&s&&n&&(this.cachedH265ParamSetsAnnexB=e.joinAnnexBNals(r,s,n))}sendCachedVideoConfigToClient(e,t){if(this.closed)return;if(t.sentVideoConfig)return;const A="H265"===e?this.cachedH265ParamSetsAnnexB:this.cachedH264ParamSetsAnnexB;if(!A?.length)return;const r=it(A,e);if(!r.length)return;const s={maxRtpPayload:this.maxRtpPayload};for(let A=0;A<r.length;A++){const n=r[A],i=A===r.length-1,o="H265"===e?dt(n,this.videoRtp,s,!1,i):ht(n,this.videoRtp,s,!1,i);for(const e of o)this.writeRtpPacketToClient(t,e)}t.sentVideoConfig=!0}close(){if(!this.closed){this.closed=!0;for(const e of Array.from(this.clients))try{e.socket.destroy()}catch{}this.clients.clear()}}writeRtpPacketToClient(e,t){if(e.socket.destroyed||!e.socket.writable)return;const A=Buffer.alloc(2);A.writeUInt16BE(65535&t.length,0);const r=Buffer.concat([A,t]);try{e.socket.write(r)}catch{try{e.socket.destroy()}catch{}}}writeRtpPacketToClients(e,t){for(const A of this.clients)t(A)&&this.writeRtpPacketToClient(A,e)}setVideoTimestampFromMicroseconds(e){if(null==e)return;if(!Number.isFinite(e))return;if(void 0===this.videoBaseUs)return this.videoBaseUs=e>>>0,void 0===this.videoBaseTs&&(this.videoBaseTs=this.videoRtp.getTimestamp()),void(this.videoLastTs=this.videoRtp.getTimestamp());const t=(e>>>0)-(this.videoBaseUs>>>0)>>>0;let A=((this.videoBaseTs??0)>>>0)+Math.round(t*this.videoClockRate/1e6)>>>0;void 0!==this.videoLastTs&&A<=this.videoLastTs>>>0&&(A=1+(this.videoLastTs>>>0)>>>0),this.videoRtp.setTimestamp(A),this.videoLastTs=A}sendVideoAccessUnit(e,t,A,r){if(this.closed)return;this.updateVideoParamSetsFromAccessUnit(e,t);const s=it(t,e);if(!s.length)return;let n=!1;if("H264"===e)for(const e of s){if(5===(31&e[0])){n=!0;break}}else for(const e of s){if(e.length<2)continue;const t=e[0]>>1&63;if(t>=16&&t<=23){n=!0;break}}const i=A||n,o=e=>!!i||!e.needsKeyframe;let a=!1;for(const e of this.clients)if(o(e)){a=!0;break}if(!a){for(const t of this.clients)t.needsKeyframe&&this.sendCachedVideoConfigToClient(e,t);return}this.setVideoTimestampFromMicroseconds(r);for(const t of this.clients)t.needsKeyframe&&this.sendCachedVideoConfigToClient(e,t);const c={maxRtpPayload:this.maxRtpPayload};for(let t=0;t<s.length;t++){const A=s[t],r=t===s.length-1,n="H265"===e?dt(A,this.videoRtp,c,!0,r):ht(A,this.videoRtp,c,!0,r);for(const e of n)this.writeRtpPacketToClients(e,o)}if(void 0===this.videoBaseUs&&this.videoRtp.advanceTimestamp(this.fallbackVideoIncrement),i)for(const e of this.clients)e.needsKeyframe=!1}sendAudioAdtsFrame(e){if(this.closed)return{};if(!this.audioRtp)return{};const{packets:t,config:A}=function(e,t){const A=gt(e);if(!A)return{packets:[]};const r=e.subarray(A.headerLength);if(!r.length)return{packets:[]};const s=Buffer.from([0,16]),n=8191&r.length,i=Buffer.alloc(2);i[0]=n>>5&255,i[1]=(31&n)<<3;const o=Buffer.concat([s,i,r]);return{packets:[t.writePacket(o,!0)],config:{sampleRate:A.sampleRate,channels:A.channels,configHex:A.configHex}}}(e,this.audioRtp);for(const e of t)this.writeRtpPacketToClients(e,(e=>!e.needsKeyframe));return t.length&&this.audioRtp.advanceTimestamp(1024),A?{parsed:A}:{}}sendAudioRtpPacket(e){if(this.closed)return;if(!e||e.length<12)return;2===(e[0]>>6&3)&&this.writeRtpPacketToClients(e,(e=>!e.needsKeyframe))}static parseRtpPayload(e){if(!e||e.length<12)return;if(2!==(e[0]>>6&3))return;const t=!!(32&e[0]),A=!!(16&e[0]);let r=12+4*(15&e[0]);if(r>e.length)return;if(A){if(r+4>e.length)return;if(r+=4+4*e.readUInt16BE(r+2),r>e.length)return}let s=e.length;if(t){const t=e[e.length-1];if(t<=0||t>e.length)return;if(s=e.length-t,s<r)return}return s<=r?void 0:e.subarray(r,s)}static isH264KeyframeLikeRtpPacket(t){const A=e.parseRtpPayload(t);if(!A||A.length<1)return!1;const r=31&A[0];if(r>=1&&r<=23)return 5===r||7===r||8===r;if(24===r){let e=1;for(;e+2<=A.length;){const t=A.readUInt16BE(e);if(e+=2,!t||e+t>A.length)break;const r=31&A[e];if(5===r||7===r||8===r)return!0;e+=t}return!1}if(28===r&&A.length>=2){const e=A[1],t=31&e;return!!!!(128&e)&&(5===t||7===t||8===t)}return!1}static isH265KeyframeLikeRtpPacket(t){const A=e.parseRtpPayload(t);if(!A||A.length<2)return!1;const r=A[0]>>1&63,s=e=>e>=16&&e<=21||(32===e||33===e||34===e);if(49===r&&A.length>=3){const e=A[2];return!!!!(128&e)&&s(63&e)}return s(r)}sendVideoRtpPacket(t,A){if(this.closed)return;if(!A||A.length<12)return;if(2!==(A[0]>>6&3))return;const r="H265"===t?e.isH265KeyframeLikeRtpPacket(A):e.isH264KeyframeLikeRtpPacket(A);if(this.writeRtpPacketToClients(A,(e=>!!r||!e.needsKeyframe)),r)for(const e of this.clients)e.needsKeyframe=!1}};async function Et(e){const{api:t,channel:A,profile:r,logger:s,expectedVideoType:i,host:o="127.0.0.1",videoPayloadType:a=96,audioPayloadType:c=97,keyframeTimeoutMs:g=5e3,idleTeardownMs:l=2500,closeApiOnTeardown:h=!0}=e,d=`[native-rfc4571 ch=${A} profile=${r}]`,u=e=>s.warn(`${d} ${e}`);u(`starting (host=${o} videoPT=${a} audioPT=${c} expectedVideoType=${i??"n/a"} keyframeTimeoutMs=${g} idleTeardownMs=${l})`);const E=new He({client:t.client,api:t,channel:A,profile:r,logger:s});await E.start(),u("baichuan stream started; waiting for keyframe to extract parameter sets");const I=await(async()=>await new Promise(((e,t)=>{const s=setTimeout((()=>{o(),t(new Error(`Timeout waiting for keyframe on native stream channel=${A} profile=${r}`))}),g),n=e=>{o(),t(e instanceof Error?e:new Error(String(e)))},i=t=>{if(!t?.isKeyframe)return;const A=t.videoType,r=t.data;if("H264"===A){const{sps:t,pps:s,profileLevelId:n}=ot(r);if(!t||!s)return;return o(),void e({videoType:A,accessUnit:r,...n?{profileLevelId:n}:{},h264:{sps:t,pps:s}})}const{vps:s,sps:n,pps:i}=at(r);s&&n&&i&&(o(),e({videoType:A,accessUnit:r,h265:{vps:s,sps:n,pps:i}}))},o=()=>{clearTimeout(s),E.removeListener("error",n),E.removeListener("videoAccessUnit",i)};E.on("error",n),E.on("videoAccessUnit",i)})))();i&&I.videoType!==i&&u(`expectedVideoType mismatch (expected=${i} actual=${I.videoType})`),u(`video detected: codec=${I.videoType} (primed via keyframe)`);let Q,B=25;try{const e=await t.getStreamMetadata(A),s=(Array.isArray(e)?e:Array.isArray(e?.streams)?e.streams:[]).find((e=>e?.profile===r)),n=Number(s?.frameRate);Number.isFinite(n)&&n>0&&(B=n)}catch{}u(`video framerate hint: ${B} fps`);Q=await(async()=>await new Promise((e=>{let t=!1,A=3;const r=setTimeout((()=>{i(),t&&s.warn("Native audio frames seen but not ADTS AAC; cannot advertise audio track."),e(void 0)}),5e3),n=r=>{t=!0;const n=gt(r);if(n)i(),e({sampleRate:n.sampleRate,channels:n.channels,configHex:n.configHex});else if(A-- >0){const e=r.subarray(0,Math.min(16,r.length)).toString("hex");s.warn(`Native audioFrame not ADTS: len=${r.length} head=${e}`)}},i=()=>{clearTimeout(r),E.removeListener("audioFrame",n)};E.on("audioFrame",n)})))(),u(Q?`audio detected: codec=aac sampleRate=${Q.sampleRate} channels=${Q.channels}`:"audio not detected/advertised (no ADTS AAC config within timeout)");const C={videoType:I.videoType,payloadType:a,..."H264"===I.videoType?{h264:{sps:I.h264.sps,pps:I.h264.pps,...I.profileLevelId?{profileLevelId:I.profileLevelId}:{}}}:{h265:{vps:I.h265.vps,sps:I.h265.sps,pps:I.h265.pps}}},p=Q?{codec:"aac",payloadType:c,sampleRate:Q.sampleRate,channels:Q.channels,configHex:Q.configHex}:void 0,f=function(e,t){let A="v=0\r\n";if(A+="o=- 0 0 IN IP4 0.0.0.0\r\n",A+="s=No Name\r\n",A+="t=0 0\r\n",A+=`m=video 0 RTP/AVP ${e.payloadType}\r\n`,A+="c=IN IP4 0.0.0.0\r\n",A+=`a=rtpmap:${e.payloadType} ${e.videoType}/90000\r\n`,"H264"===e.videoType&&e.h264){const t=e.h264.sps.toString("base64"),r=e.h264.pps.toString("base64"),s=e.h264.profileLevelId?`profile-level-id=${e.h264.profileLevelId};`:"";A+=`a=fmtp:${e.payloadType} packetization-mode=1;${s}sprop-parameter-sets=${t},${r}\r\n`}if("H265"===e.videoType&&e.h265){const t=e.h265.vps.toString("base64"),r=e.h265.sps.toString("base64"),s=e.h265.pps.toString("base64");A+=`a=fmtp:${e.payloadType} sprop-vps=${t};sprop-sps=${r};sprop-pps=${s}\r\n`}return"aac"===t?.codec&&(A+=`m=audio 0 RTP/AVP ${t.payloadType}\r\n`,A+="c=IN IP4 0.0.0.0\r\n",A+="b=AS:128\r\n",A+=`a=rtpmap:${t.payloadType} MPEG4-GENERIC/${t.sampleRate}/${t.channels}\r\n`,A+=`a=fmtp:${t.payloadType} profile-level-id=1; mode=AAC-hbr; sizelength=13; indexlength=3; indexdeltalength=3; config=${t.configHex}\r\n`),"opus"===t?.codec&&(A+=`m=audio 0 RTP/AVP ${t.payloadType}\r\n`,A+="c=IN IP4 0.0.0.0\r\n",A+="b=AS:128\r\n",A+=`a=rtpmap:${t.payloadType} opus/${t.sampleRate}/${t.channels}\r\n`),A}(C,p),m=new ut(s,a,p?c:void 0,B);u(`SDP ready (video=${I.videoType}/90000 pt=${a}${p?`, audio=aac/${p.sampleRate}/${p.channels} pt=${c}`:", audio=none"})`);let y,D=0,S=!1;const w=()=>{y&&(clearTimeout(y),y=void 0)},b=e=>{l&&(y||(y=setTimeout((()=>{y=void 0,0===D&&e(new Error("No RFC4571 clients (idle)")).catch((()=>{}))}),l)))},R=n.createServer(),N=async e=>{if(S)return;S=!0,w();const A=e?.message||e?.toString?.()||e,r=R.address(),s=r&&"string"!=typeof r?`${r.address}:${r.port}`:"unbound";u(A?`teardown requested (addr=${s} clients=${D} reason=${A})`:`teardown requested (addr=${s} clients=${D})`),m.close();try{await E.stop()}catch{}if(h)try{await t.close()}catch{}try{R.close()}catch{}u("teardown complete")};R.on("connection",(e=>{D++,w(),m.addClient(e);const t=`${e.remoteAddress??"unknown"}:${e.remotePort??"unknown"}`;u(`client connected (remote=${t} clients=${D})`);let A=!0;const r=()=>{A&&(A=!1,D=Math.max(0,D-1),u(`client disconnected (remote=${t} clients=${D})`),0===D&&b(N))};e.once("close",r),e.once("error",r)})),E.on("videoAccessUnit",(e=>{try{m.sendVideoAccessUnit(e.videoType,e.data,e.isKeyframe,e.microseconds)}catch(e){N(e).catch((()=>{}))}})),p&&E.on("audioFrame",(e=>{try{m.sendAudioAdtsFrame(e)}catch(e){N(e).catch((()=>{}))}})),E.on("error",(e=>{N(e).catch((()=>{}))})),E.on("close",(e=>{N(e).catch((()=>{}))})),await new Promise(((e,t)=>{R.once("error",t),R.listen(0,o,(()=>e()))}));const k=R.address();if(!k||"string"==typeof k)throw new Error("Failed to bind RFC TCP server");const F=k.port;if(!F)throw new Error("Failed to bind RFC TCP server");u(`listening (addr=${o}:${F})`);const U=p?{codec:"aac",sampleRate:p.sampleRate,channels:p.channels}:void 0;return b(N),{host:o,port:F,sdp:f,videoType:I.videoType,...U?{audio:U}:{},server:R,videoStream:E,close:N}}var It=Buffer.from([0,0,0,1]),Qt=Buffer.from([0,0,1]);function Bt(e){const t=[];for(let A=0;A<e.length-3;A++)0===e[A]&&0===e[A+1]&&(1===e[A+2]?(t.push({idx:A,len:3}),A+=2):0===e[A+2]&&1===e[A+3]&&(t.push({idx:A,len:4}),A+=3));if(0===t.length)return[];const A=[];for(let r=0;r<t.length;r++){const s=t[r],n=s.idx+s.len,i=t[r+1],o=i?i.idx:e.length;o>n&&A.push(e.subarray(n,o))}return A}function Ct(e){if(e.length<1)return null;const t=e[0];return void 0===t?null:31&t}s.EventEmitter}},t={};function A(r){var s=t[r];if(void 0!==s)return s.exports;var n=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(n.exports,n,n.exports,A),n.loaded=!0,n.exports}A.d=(e,t)=>{for(var r in t)A.o(t,r)&&!A.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},A.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),A.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var r=A(7927),s=exports="undefined"==typeof exports?{}:exports;for(var n in r)s[n]=r[n];r.__esModule&&Object.defineProperty(s,"__esModule",{value:!0})})();
|
|
3
3
|
//# sourceMappingURL=main.nodejs.js.map
|