helia 6.0.15-14e78732 → 6.0.15-1c79dae5

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/index.min.js CHANGED
@@ -1,6 +1,6 @@
1
1
  (function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Helia = factory()}(typeof self !== 'undefined' ? self : this, function () {
2
2
  "use strict";var Helia=(()=>{var CN=Object.create;var em=Object.defineProperty;var PN=Object.getOwnPropertyDescriptor;var kN=Object.getOwnPropertyNames;var ON=Object.getPrototypeOf,RN=Object.prototype.hasOwnProperty;var Wn=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Lt=(r,e)=>{for(var t in e)em(r,t,{get:e[t],enumerable:!0})},Xv=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of kN(e))!RN.call(r,o)&&o!==t&&em(r,o,{get:()=>e[o],enumerable:!(n=PN(e,o))||n.enumerable});return r};var nr=(r,e,t)=>(t=r!=null?CN(ON(r)):{},Xv(e||!r||!r.__esModule?em(t,"default",{value:r,enumerable:!0}):t,r)),DN=r=>Xv(em({},"__esModule",{value:!0}),r);var ax=Wn((cG,m6)=>{"use strict";var fL=Object.prototype.hasOwnProperty,Wr="~";function fd(){}Object.create&&(fd.prototype=Object.create(null),new fd().__proto__||(Wr=!1));function dL(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function sx(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new dL(t,n||r,o),s=Wr?Wr+e:e;return r._events[s]?r._events[s].fn?r._events[s]=[r._events[s],i]:r._events[s].push(i):(r._events[s]=i,r._eventsCount++),r}function hm(r,e){--r._eventsCount===0?r._events=new fd:delete r._events[e]}function Dr(){this._events=new fd,this._eventsCount=0}Dr.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)fL.call(t,n)&&e.push(Wr?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Dr.prototype.listeners=function(e){var t=Wr?Wr+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o<i;o++)s[o]=n[o].fn;return s};Dr.prototype.listenerCount=function(e){var t=Wr?Wr+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Dr.prototype.emit=function(e,t,n,o,i,s){var a=Wr?Wr+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,f,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,i),!0;case 6:return c.fn.call(c.context,t,n,o,i,s),!0}for(u=1,f=new Array(l-1);u<l;u++)f[u-1]=arguments[u];c.fn.apply(c.context,f)}else{var d=c.length,h;for(u=0;u<d;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!f)for(h=1,f=new Array(l-1);h<l;h++)f[h-1]=arguments[h];c[u].fn.apply(c[u].context,f)}}return!0};Dr.prototype.on=function(e,t,n){return sx(this,e,t,n,!1)};Dr.prototype.once=function(e,t,n){return sx(this,e,t,n,!0)};Dr.prototype.removeListener=function(e,t,n,o){var i=Wr?Wr+e:e;if(!this._events[i])return this;if(!t)return hm(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&hm(this,i);else{for(var a=0,c=[],l=s.length;a<l;a++)(s[a].fn!==t||o&&!s[a].once||n&&s[a].context!==n)&&c.push(s[a]);c.length?this._events[i]=c.length===1?c[0]:c:hm(this,i)}return this};Dr.prototype.removeAllListeners=function(e){var t;return e?(t=Wr?Wr+e:e,this._events[t]&&hm(this,t)):(this._events=new fd,this._eventsCount=0),this};Dr.prototype.off=Dr.prototype.removeListener;Dr.prototype.addListener=Dr.prototype.on;Dr.prefixed=Wr;Dr.EventEmitter=Dr;typeof m6<"u"&&(m6.exports=Dr)});var Ax=Wn((pX,_x)=>{_x.exports=function(r){if(!r)throw Error("hashlru must have a max value, of type number, greater than 0");var e=0,t=Object.create(null),n=Object.create(null);function o(i,s){t[i]=s,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(i){return t[i]!==void 0||n[i]!==void 0},remove:function(i){t[i]!==void 0&&(t[i]=void 0),n[i]!==void 0&&(n[i]=void 0)},get:function(i){var s=t[i];if(s!==void 0)return s;if((s=n[i])!==void 0)return o(i,s),s},set:function(i,s){t[i]!==void 0?t[i]=s:o(i,s)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var LS=Wn(Gd=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,f,u,d;return l=(c&255<<24)>>>24,f=(c&255<<16)>>>16,u=(c&65280)>>>8,d=c&255,[l,f,u,d].join(".")},s=function(c){var l,f,u,d,h,m;for(l=[],u=d=0;d<=3&&c.length!==0;u=++d){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}m=e(c),h=m[0],f=m[1],c=c.substring(f),l.push(h)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),i=t("a"),o=t("A"),e=function(c){var l,f,u,d,h;for(d=0,l=10,f="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,f="7")),h=u;u<c.length;){if("0"<=c[u]&&c[u]<=f)d=d*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")d=d*l+(10+t(c[u])-i)>>>0;else if("A"<=c[u]&&c[u]<="F")d=d*l+(10+t(c[u])-o)>>>0;else break;else break;if(d>4294967295)throw new Error("too large");u++}if(u===h)throw new Error("empty octet");return[d,u]},r=(function(){function c(l,f){var u,d,h,m;if(typeof l!="string")throw new Error("Missing `net' parameter");if(f||(m=l.split("/",2),l=m[0],f=m[1]),f||(f=32),typeof f=="string"&&f.indexOf(".")>-1){try{this.maskLong=s(f)}catch(w){throw u=w,new Error("Invalid mask: "+f)}for(d=h=32;h>=0;d=--h)if(this.maskLong===4294967295<<32-d>>>0){this.bitmask=d;break}}else if(f||f===0)this.bitmask=parseInt(f,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(s(l)&this.maskLong)>>>0}catch(w){throw u=w,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+f);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(s(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var f,u,d;for(d=s(this.first),u=s(this.last),f=0;d<=u;)l(a(d),d,f),f++,d++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c})(),Gd.ip2long=s,Gd.long2ip=a,Gd.Netmask=r}).call(Gd)});var L2=Wn((Ple,Dw)=>{var Cle=(function(){typeof Dw<"u"&&(Dw.exports=w);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,i=864e13,s=4294967296,a=1e6,c="000000000",l=Math.trunc||function(C){var T=C-C%1;return T==0&&(C<0||C===0&&1/C!=1/0)?-0:T},f=w.prototype,u=(w.fromDate=function(C){return new w(+C)},w.fromInt64BE=V(0,1,2,3,0,4),w.fromInt64LE=V(3,2,1,0,4,0),w.fromString=function(z){var T,K=new w,z=(z+="").replace(/^\s*[+\-]?\d+/,function(I){var I=+I,S=1970+(I-1970)%400;return K.year=I-S,S}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(U,I,S){return I<0&&(S*=-1),T=6e4*(60*+I+ +S),""}).replace(/\.\d+$/,function(U){return K.nano=+(U+c).substr(1,9),""}).split(/\D+/);if(1<z.length?z[1]--:z[1]=0,K.time=T=Date.UTC.apply(Date,z)-(T||0),isNaN(T))throw new TypeError("Invalid Date");return y(K)},w.fromTimeT=function(C){return N(C,0)},f.year=0,f.time=0,f.nano=0,f.addNano=function(C){return this.nano+=+C||0,this},f.getNano=function(){var C=y(this);return(C.time%1e3*a+ +C.nano+1e9)%1e9},f.getTimeT=function(){var T=y(this),C=Math.floor(T.time/1e3),T=T.year;return T&&(C+=T*t*r/e),C},f.getYear=function(){return this.toDate().getUTCFullYear()+this.year},f.toDate=function(){return b(y(this).time)},f.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},f.toString=function(C){var T=this,K=T.toDate(),z={H:function(){return Z(K.getUTCHours())},L:function(){return se(K.getUTCMilliseconds(),3)},M:function(){return Z(K.getUTCMinutes())},N:function(){return se(T.getNano(),9)},S:function(){return Z(K.getUTCSeconds())},Y:function(){var U=T.getYear();return 999999<U?"+"+U:9999<U?"+"+se(U,6):0<=U?se(U,4):-999999<=U?"-"+se(-U,6):U},a:function(){return h[K.getUTCDay()]},b:function(){return d[K.getUTCMonth()]},d:function(){return Z(K.getUTCDate())},e:function(){return(function(U){return(9<U?"":" ")+(0|U)})(K.getUTCDate())},m:function(){return Z(K.getUTCMonth()+1)}};return(function U(I){return I.replace(/%./g,function(S){var D=S[1],x=m[D],D=z[D];return x?U(x):D?D():S})})(C||u)},f.writeInt64BE=O(0,1,2,3,0,4),f.writeInt64LE=O(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),d=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],h=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],m={"%":"%",F:"%Y-%m-%d",n:`
3
- `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return w;function w(C,T,K){var z=this;if(!(z instanceof w))return new w(C,T,K);z.time=+C||0,z.nano=+T||0,z.year=+K||0,y(z)}function y(C){var T,K,z,U=C.year,I=C.time,S=C.nano,x=((S<0||a<=S)&&(S-=(K=Math.floor(S/a))*a,I+=K,K=1),U%e);return(I<-i||i<I||x)&&((T=l(I/o))&&(U+=T*e,I-=T*o),(z=b(I)).setUTCFullYear(x+z.getUTCFullYear()),z=(I=+z)+(T=l((U-=x)/e))*o,T&&-i<=z&&z<=i&&(U-=T*e,I=z),K=1),K&&(C.year=U,C.time=I,C.nano=S),C}function b(C){var T=new Date(0);return T.setTime(C),T}function N(U,z){U=+U||0;var K=l((z=(z|0)*s)/n)+l(U/n),z=z%n+U%n,U=l(z/n);return U&&(K+=U,z-=U*n),new w(1e3*z,0,K*e)}function O(C,T,K,z,U,I){return function(x,D){var H=y(this);x=x||new Array(8),Q(x,D|=0);var M=Math.floor(H.time/1e3),H=H.year*(t*r/e),q=l(H/s)+l(M/s),H=H%s+M%s,M=Math.floor(H/s);return M&&(q+=M,H-=M*s),S(x,D+U,q),S(x,D+I,H),x};function S(x,D,q){x[D+C]=q>>24&255,x[D+T]=q>>16&255,x[D+K]=q>>8&255,x[D+z]=255&q}}function V(C,T,K,z,U,I){return function(x,D){Q(x,D|=0);var q=S(x,D+U);return N(S(x,D+I),q)};function S(x,D){return 16777216*x[D+C]+(x[D+T]<<16|x[D+K]<<8|x[D+z])}}function Q(C,T){if(C=C&&C.length,C==null)throw new TypeError("Invalid Buffer");if(C<T+8)throw new RangeError("Out of range")}function Z(C){return(9<C?"":"0")+(0|C)}function se(C,T){return(c+(0|C)).substr(-T)}})()});var yI=Wn((x0e,gI)=>{"use strict";function AK(r){return r>=55296&&r<=56319}function TK(r){return r>=56320&&r<=57343}gI.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,i=0,s,a,c=0;c<o;c+=1){if(s=t.charCodeAt(c),a=t[c],AK(s)&&TK(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),i+=e(a),i===n)return t.slice(0,c+1);if(i>n)return t.slice(0,c-a.length+1)}return t}});var bI=Wn((E0e,wI)=>{"use strict";function IK(r){return r>=55296&&r<=56319}function CK(r){return r>=56320&&r<=57343}wI.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,i=null,s=0;s<t;s++)o=e.charCodeAt(s),CK(o)?i!=null&&IK(i)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),i=o;return n}});var xI=Wn((S0e,vI)=>{"use strict";var PK=yI(),kK=bI();vI.exports=PK.bind(null,kK)});var _I=Wn((_0e,SI)=>{"use strict";var OK=xI(),RK=/[\/\?<>\\:\*\|"]/g,DK=/[\x00-\x1f\x80-\x9f]/g,NK=/^\.+$/,LK=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,BK=/[\. ]+$/;function EI(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(RK,e).replace(DK,e).replace(NK,e).replace(LK,e).replace(BK,e);return OK(t,255)}SI.exports=function(r,e){var t=e&&e.replacement||"",n=EI(r,t);return t===""?n:EI(n,"")}});var os=Wn(Xu=>{"use strict";var UK="[object ArrayBuffer]",ns=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===UK}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let i=0;i<n.length;i++)if(n[i]!==o[i])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let s of t)n+=s.byteLength;let o=new Uint8Array(n),i=0;for(let s of t){let a=this.toUint8Array(s);o.set(a,i),i+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},g7="string",FK=/^[0-9a-f\s]+$/i,$K=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,jK=/^[a-zA-Z0-9-_]+$/,Bg=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=ns.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},no=class{static toString(e,t=!1){let n=ns.toArrayBuffer(e),o=new DataView(n),i="";for(let s=0;s<n.byteLength;s+=2){let a=o.getUint16(s,t);i+=String.fromCharCode(a)}return i}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let i=0;i<e.length;i++)o.setUint16(i*2,e.charCodeAt(i),t);return n}},Mg=class r{static isHex(e){return typeof e===g7&&FK.test(e)}static isBase64(e){return typeof e===g7&&$K.test(e)}static isBase64Url(e){return typeof e===g7&&jK.test(e)}static ToString(e,t="utf8"){let n=ns.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return no.toString(n,!0);case"utf16":case"utf16be":return no.toString(n);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return no.fromString(e,!0);case"utf16":case"utf16be":return no.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=ns.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return Bg.fromString(e);case"utf16":case"utf16be":return no.fromString(e);case"utf16le":case"usc2":return no.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return Bg.toString(e);case"utf16":case"utf16be":return no.toString(e);case"utf16le":case"usc2":return no.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=ns.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=ns.toUint8Array(e),n="",o=t.length;for(let i=0;i<o;i++){let s=t[i];s<16&&(n+="0"),n+=s.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let i=t.slice(o,o+2);n[o/2]=parseInt(i,16)}return n.buffer}static ToUtf16String(e,t=!1){return no.toString(e,t)}static FromUtf16String(e,t=!1){return no.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let n=0;n<t;n++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};Mg.DEFAULT_UTF8_ENCODING="utf8";function KK(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let i in o)t[i]=o[i]}return t}function VK(...r){let e=r.map(o=>o.byteLength).reduce((o,i)=>o+i),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let i of o)t[n++]=i}),t.buffer}function HK(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}Xu.BufferSourceConverter=ns;Xu.Convert=Mg;Xu.assign=KK;Xu.combine=VK;Xu.isEqual=HK});var VP=Wn(gi=>{"use strict";Object.defineProperty(gi,"__esModule",{value:!0});gi.parseCookie=jP;gi.parse=jP;gi.stringifyCookie=vH;gi.stringifySetCookie=Gy;gi.serialize=Gy;gi.parseSetCookie=xH;gi.stringifySetCookie=Gy;gi.serialize=Gy;var FP=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,$P=/^[\u0021-\u003A\u003C-\u007E]*$/,mH=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,gH=/^[\u0020-\u003A\u003D-\u007E]*$/,yH=/^-?\d+$/,wH=Object.prototype.toString,bH=(()=>{let r=function(){};return r.prototype=Object.create(null),r})();function jP(r,e){let t=new bH,n=r.length;if(n<2)return t;let o=e?.decode||KP,i=0;do{let s=db(r,i,n);if(s===-1)break;let a=fb(r,i,n);if(s>a){i=r.lastIndexOf(";",s-1)+1;continue}let c=aa(r,i,s);t[c]===void 0&&(t[c]=o(aa(r,s+1,a))),i=a+1}while(i<n);return t}function vH(r,e){let t=e?.encode||encodeURIComponent,n=[];for(let o of Object.keys(r)){let i=r[o];if(i===void 0)continue;if(!FP.test(o))throw new TypeError(`cookie name is invalid: ${o}`);let s=t(i);if(!$P.test(s))throw new TypeError(`cookie val is invalid: ${i}`);n.push(`${o}=${s}`)}return n.join("; ")}function Gy(r,e,t){let n=typeof r=="object"?r:{...t,name:r,value:String(e)},i=(typeof e=="object"?e:t)?.encode||encodeURIComponent;if(!FP.test(n.name))throw new TypeError(`argument name is invalid: ${n.name}`);let s=n.value?i(n.value):"";if(!$P.test(s))throw new TypeError(`argument val is invalid: ${n.value}`);let a=n.name+"="+s;if(n.maxAge!==void 0){if(!Number.isInteger(n.maxAge))throw new TypeError(`option maxAge is invalid: ${n.maxAge}`);a+="; Max-Age="+n.maxAge}if(n.domain){if(!mH.test(n.domain))throw new TypeError(`option domain is invalid: ${n.domain}`);a+="; Domain="+n.domain}if(n.path){if(!gH.test(n.path))throw new TypeError(`option path is invalid: ${n.path}`);a+="; Path="+n.path}if(n.expires){if(!EH(n.expires)||!Number.isFinite(n.expires.valueOf()))throw new TypeError(`option expires is invalid: ${n.expires}`);a+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(a+="; HttpOnly"),n.secure&&(a+="; Secure"),n.partitioned&&(a+="; Partitioned"),n.priority)switch(typeof n.priority=="string"?n.priority.toLowerCase():void 0){case"low":a+="; Priority=Low";break;case"medium":a+="; Priority=Medium";break;case"high":a+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${n.priority}`)}if(n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:case"strict":a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"none":a+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${n.sameSite}`)}return a}function xH(r,e){let t=e?.decode||KP,n=r.length,o=fb(r,0,n),i=db(r,0,o),s=i===-1?{name:"",value:t(aa(r,0,o))}:{name:aa(r,0,i),value:t(aa(r,i+1,o))},a=o+1;for(;a<n;){let c=fb(r,a,n),l=db(r,a,c),f=l===-1?aa(r,a,c):aa(r,a,l),u=l===-1?void 0:aa(r,l+1,c);switch(f.toLowerCase()){case"httponly":s.httpOnly=!0;break;case"secure":s.secure=!0;break;case"partitioned":s.partitioned=!0;break;case"domain":s.domain=u;break;case"path":s.path=u;break;case"max-age":u&&yH.test(u)&&(s.maxAge=Number(u));break;case"expires":if(!u)break;let d=new Date(u);Number.isFinite(d.valueOf())&&(s.expires=d);break;case"priority":if(!u)break;let h=u.toLowerCase();(h==="low"||h==="medium"||h==="high")&&(s.priority=h);break;case"samesite":if(!u)break;let m=u.toLowerCase();(m==="lax"||m==="strict"||m==="none")&&(s.sameSite=m);break}a=c+1}return s}function fb(r,e,t){let n=r.indexOf(";",e);return n===-1?t:n}function db(r,e,t){let n=r.indexOf("=",e);return n<t?n:-1}function aa(r,e,t){let n=e,o=t;do{let i=r.charCodeAt(n);if(i!==32&&i!==9)break}while(++n<o);for(;o>n;){let i=r.charCodeAt(o-1);if(i!==32&&i!==9)break;o--}return r.slice(n,o)}function KP(r){if(r.indexOf("%")===-1)return r;try{return decodeURIComponent(r)}catch{return r}}function EH(r){return wH.call(r)==="[object Date]"}});var EO=Wn(()=>{var xO;(function(r){(function(e){var t=typeof globalThis=="object"||typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof this=="object"?this:a(),n=o(r);typeof t.Reflect<"u"&&(n=o(t.Reflect,n)),e(n,t),typeof t.Reflect>"u"&&(t.Reflect=r);function o(c,l){return function(f,u){Object.defineProperty(c,f,{configurable:!0,writable:!0,value:u}),l&&l(f,u)}}function i(){try{return Function("return this;")()}catch{}}function s(){try{return(0,eval)("(function() { return this; })()")}catch{}}function a(){return i()||s()}})(function(e,t){var n=Object.prototype.hasOwnProperty,o=typeof Symbol=="function",i=o&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",s=o&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",a=typeof Object.create=="function",c={__proto__:[]}instanceof Array,l=!a&&!c,f={create:a?function(){return i6(Object.create(null))}:c?function(){return i6({__proto__:null})}:function(){return i6({})},has:l?function(_,R){return n.call(_,R)}:function(_,R){return R in _},get:l?function(_,R){return n.call(_,R)?_[R]:void 0}:function(_,R){return _[R]}},u=Object.getPrototypeOf(Function),d=typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:SN(),h=typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:_N(),m=typeof WeakMap=="function"?WeakMap:AN(),w=o?Symbol.for("@reflect-metadata:registry"):void 0,y=vN(),b=xN(y);function N(_,R,$,J){if(F($)){if(!Ci(_))throw new TypeError;if(!Ts(R))throw new TypeError;return U(_,R)}else{if(!Ci(_))throw new TypeError;if(!me(R))throw new TypeError;if(!me(J)&&!F(J)&&!Le(J))throw new TypeError;return Le(J)&&(J=void 0),$=it($),I(_,R,$,J)}}e("decorate",N);function O(_,R){function $(J,Ee){if(!me(J))throw new TypeError;if(!F(Ee)&&!J1(Ee))throw new TypeError;H(_,R,J,Ee)}return $}e("metadata",O);function V(_,R,$,J){if(!me($))throw new TypeError;return F(J)||(J=it(J)),H(_,R,$,J)}e("defineMetadata",V);function Q(_,R,$){if(!me(R))throw new TypeError;return F($)||($=it($)),S(_,R,$)}e("hasMetadata",Q);function Z(_,R,$){if(!me(R))throw new TypeError;return F($)||($=it($)),x(_,R,$)}e("hasOwnMetadata",Z);function se(_,R,$){if(!me(R))throw new TypeError;return F($)||($=it($)),D(_,R,$)}e("getMetadata",se);function C(_,R,$){if(!me(R))throw new TypeError;return F($)||($=it($)),q(_,R,$)}e("getOwnMetadata",C);function T(_,R){if(!me(_))throw new TypeError;return F(R)||(R=it(R)),M(_,R)}e("getMetadataKeys",T);function K(_,R){if(!me(_))throw new TypeError;return F(R)||(R=it(R)),G(_,R)}e("getOwnMetadataKeys",K);function z(_,R,$){if(!me(R))throw new TypeError;if(F($)||($=it($)),!me(R))throw new TypeError;F($)||($=it($));var J=od(R,$,!1);return F(J)?!1:J.OrdinaryDeleteMetadata(_,R,$)}e("deleteMetadata",z);function U(_,R){for(var $=_.length-1;$>=0;--$){var J=_[$],Ee=J(R);if(!F(Ee)&&!Le(Ee)){if(!Ts(Ee))throw new TypeError;R=Ee}}return R}function I(_,R,$,J){for(var Ee=_.length-1;Ee>=0;--Ee){var jt=_[Ee],Jt=jt(R,$,J);if(!F(Jt)&&!Le(Jt)){if(!me(Jt))throw new TypeError;J=Jt}}return J}function S(_,R,$){var J=x(_,R,$);if(J)return!0;var Ee=o6(R);return Le(Ee)?!1:S(_,Ee,$)}function x(_,R,$){var J=od(R,$,!1);return F(J)?!1:Ct(J.OrdinaryHasOwnMetadata(_,R,$))}function D(_,R,$){var J=x(_,R,$);if(J)return q(_,R,$);var Ee=o6(R);if(!Le(Ee))return D(_,Ee,$)}function q(_,R,$){var J=od(R,$,!1);if(!F(J))return J.OrdinaryGetOwnMetadata(_,R,$)}function H(_,R,$,J){var Ee=od($,J,!0);Ee.OrdinaryDefineOwnMetadata(_,R,$,J)}function M(_,R){var $=G(_,R),J=o6(_);if(J===null)return $;var Ee=M(J,R);if(Ee.length<=0)return $;if($.length<=0)return Ee;for(var jt=new h,Jt=[],je=0,ae=$;je<ae.length;je++){var he=ae[je],ge=jt.has(he);ge||(jt.add(he),Jt.push(he))}for(var be=0,Ve=Ee;be<Ve.length;be++){var he=Ve[be],ge=jt.has(he);ge||(jt.add(he),Jt.push(he))}return Jt}function G(_,R){var $=od(_,R,!1);return $?$.OrdinaryOwnMetadataKeys(_,R):[]}function te(_){if(_===null)return 1;switch(typeof _){case"undefined":return 0;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"object":return _===null?1:6;default:return 6}}function F(_){return _===void 0}function Le(_){return _===null}function $e(_){return typeof _=="symbol"}function me(_){return typeof _=="object"?_!==null:typeof _=="function"}function He(_,R){switch(te(_)){case 0:return _;case 1:return _;case 2:return _;case 3:return _;case 4:return _;case 5:return _}var $=R===3?"string":R===5?"number":"default",J=nd(_,i);if(J!==void 0){var Ee=J.call(_,$);if(me(Ee))throw new TypeError;return Ee}return ot(_,$==="default"?"number":$)}function ot(_,R){if(R==="string"){var $=_.toString;if(go($)){var J=$.call(_);if(!me(J))return J}var Ee=_.valueOf;if(go(Ee)){var J=Ee.call(_);if(!me(J))return J}}else{var Ee=_.valueOf;if(go(Ee)){var J=Ee.call(_);if(!me(J))return J}var jt=_.toString;if(go(jt)){var J=jt.call(_);if(!me(J))return J}}throw new TypeError}function Ct(_){return!!_}function ze(_){return""+_}function it(_){var R=He(_,3);return $e(R)?R:ze(R)}function Ci(_){return Array.isArray?Array.isArray(_):_ instanceof Object?_ instanceof Array:Object.prototype.toString.call(_)==="[object Array]"}function go(_){return typeof _=="function"}function Ts(_){return typeof _=="function"}function J1(_){switch(te(_)){case 3:return!0;case 4:return!0;default:return!1}}function Ll(_,R){return _===R||_!==_&&R!==R}function nd(_,R){var $=_[R];if($!=null){if(!go($))throw new TypeError;return $}}function Hv(_){var R=nd(_,s);if(!go(R))throw new TypeError;var $=R.call(_);if(!me($))throw new TypeError;return $}function qv(_){return _.value}function Wv(_){var R=_.next();return R.done?!1:R}function zv(_){var R=_.return;R&&R.call(_)}function o6(_){var R=Object.getPrototypeOf(_);if(typeof _!="function"||_===u||R!==u)return R;var $=_.prototype,J=$&&Object.getPrototypeOf($);if(J==null||J===Object.prototype)return R;var Ee=J.constructor;return typeof Ee!="function"||Ee===_?R:Ee}function bN(){var _;!F(w)&&typeof t.Reflect<"u"&&!(w in t.Reflect)&&typeof t.Reflect.defineMetadata=="function"&&(_=EN(t.Reflect));var R,$,J,Ee=new m,jt={registerProvider:Jt,getProvider:ae,setProvider:ge};return jt;function Jt(be){if(!Object.isExtensible(jt))throw new Error("Cannot add provider to a frozen registry.");switch(!0){case _===be:break;case F(R):R=be;break;case R===be:break;case F($):$=be;break;case $===be:break;default:J===void 0&&(J=new h),J.add(be);break}}function je(be,Ve){if(!F(R)){if(R.isProviderFor(be,Ve))return R;if(!F($)){if($.isProviderFor(be,Ve))return R;if(!F(J))for(var Et=Hv(J);;){var Kt=Wv(Et);if(!Kt)return;var yo=qv(Kt);if(yo.isProviderFor(be,Ve))return zv(Et),yo}}}if(!F(_)&&_.isProviderFor(be,Ve))return _}function ae(be,Ve){var Et=Ee.get(be),Kt;return F(Et)||(Kt=Et.get(Ve)),F(Kt)&&(Kt=je(be,Ve),F(Kt)||(F(Et)&&(Et=new d,Ee.set(be,Et)),Et.set(Ve,Kt))),Kt}function he(be){if(F(be))throw new TypeError;return R===be||$===be||!F(J)&&J.has(be)}function ge(be,Ve,Et){if(!he(Et))throw new Error("Metadata provider not registered.");var Kt=ae(be,Ve);if(Kt!==Et){if(!F(Kt))return!1;var yo=Ee.get(be);F(yo)&&(yo=new d,Ee.set(be,yo)),yo.set(Ve,Et)}return!0}}function vN(){var _;return!F(w)&&me(t.Reflect)&&Object.isExtensible(t.Reflect)&&(_=t.Reflect[w]),F(_)&&(_=bN()),!F(w)&&me(t.Reflect)&&Object.isExtensible(t.Reflect)&&Object.defineProperty(t.Reflect,w,{enumerable:!1,configurable:!1,writable:!1,value:_}),_}function xN(_){var R=new m,$={isProviderFor:function(he,ge){var be=R.get(he);return F(be)?!1:be.has(ge)},OrdinaryDefineOwnMetadata:Jt,OrdinaryHasOwnMetadata:Ee,OrdinaryGetOwnMetadata:jt,OrdinaryOwnMetadataKeys:je,OrdinaryDeleteMetadata:ae};return y.registerProvider($),$;function J(he,ge,be){var Ve=R.get(he),Et=!1;if(F(Ve)){if(!be)return;Ve=new d,R.set(he,Ve),Et=!0}var Kt=Ve.get(ge);if(F(Kt)){if(!be)return;if(Kt=new d,Ve.set(ge,Kt),!_.setProvider(he,ge,$))throw Ve.delete(ge),Et&&R.delete(he),new Error("Wrong provider for target.")}return Kt}function Ee(he,ge,be){var Ve=J(ge,be,!1);return F(Ve)?!1:Ct(Ve.has(he))}function jt(he,ge,be){var Ve=J(ge,be,!1);if(!F(Ve))return Ve.get(he)}function Jt(he,ge,be,Ve){var Et=J(be,Ve,!0);Et.set(he,ge)}function je(he,ge){var be=[],Ve=J(he,ge,!1);if(F(Ve))return be;for(var Et=Ve.keys(),Kt=Hv(Et),yo=0;;){var Gv=Wv(Kt);if(!Gv)return be.length=yo,be;var TN=qv(Gv);try{be[yo]=TN}catch(IN){try{zv(Kt)}finally{throw IN}}yo++}}function ae(he,ge,be){var Ve=J(ge,be,!1);if(F(Ve)||!Ve.delete(he))return!1;if(Ve.size===0){var Et=R.get(ge);F(Et)||(Et.delete(be),Et.size===0&&R.delete(Et))}return!0}}function EN(_){var R=_.defineMetadata,$=_.hasOwnMetadata,J=_.getOwnMetadata,Ee=_.getOwnMetadataKeys,jt=_.deleteMetadata,Jt=new m,je={isProviderFor:function(ae,he){var ge=Jt.get(ae);return!F(ge)&&ge.has(he)?!0:Ee(ae,he).length?(F(ge)&&(ge=new h,Jt.set(ae,ge)),ge.add(he),!0):!1},OrdinaryDefineOwnMetadata:R,OrdinaryHasOwnMetadata:$,OrdinaryGetOwnMetadata:J,OrdinaryOwnMetadataKeys:Ee,OrdinaryDeleteMetadata:jt};return je}function od(_,R,$){var J=y.getProvider(_,R);if(!F(J))return J;if($){if(y.setProvider(_,R,b))return b;throw new Error("Illegal state.")}}function SN(){var _={},R=[],$=(function(){function je(ae,he,ge){this._index=0,this._keys=ae,this._values=he,this._selector=ge}return je.prototype["@@iterator"]=function(){return this},je.prototype[s]=function(){return this},je.prototype.next=function(){var ae=this._index;if(ae>=0&&ae<this._keys.length){var he=this._selector(this._keys[ae],this._values[ae]);return ae+1>=this._keys.length?(this._index=-1,this._keys=R,this._values=R):this._index++,{value:he,done:!1}}return{value:void 0,done:!0}},je.prototype.throw=function(ae){throw this._index>=0&&(this._index=-1,this._keys=R,this._values=R),ae},je.prototype.return=function(ae){return this._index>=0&&(this._index=-1,this._keys=R,this._values=R),{value:ae,done:!0}},je})(),J=(function(){function je(){this._keys=[],this._values=[],this._cacheKey=_,this._cacheIndex=-2}return Object.defineProperty(je.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),je.prototype.has=function(ae){return this._find(ae,!1)>=0},je.prototype.get=function(ae){var he=this._find(ae,!1);return he>=0?this._values[he]:void 0},je.prototype.set=function(ae,he){var ge=this._find(ae,!0);return this._values[ge]=he,this},je.prototype.delete=function(ae){var he=this._find(ae,!1);if(he>=0){for(var ge=this._keys.length,be=he+1;be<ge;be++)this._keys[be-1]=this._keys[be],this._values[be-1]=this._values[be];return this._keys.length--,this._values.length--,Ll(ae,this._cacheKey)&&(this._cacheKey=_,this._cacheIndex=-2),!0}return!1},je.prototype.clear=function(){this._keys.length=0,this._values.length=0,this._cacheKey=_,this._cacheIndex=-2},je.prototype.keys=function(){return new $(this._keys,this._values,Ee)},je.prototype.values=function(){return new $(this._keys,this._values,jt)},je.prototype.entries=function(){return new $(this._keys,this._values,Jt)},je.prototype["@@iterator"]=function(){return this.entries()},je.prototype[s]=function(){return this.entries()},je.prototype._find=function(ae,he){if(!Ll(this._cacheKey,ae)){this._cacheIndex=-1;for(var ge=0;ge<this._keys.length;ge++)if(Ll(this._keys[ge],ae)){this._cacheIndex=ge;break}}return this._cacheIndex<0&&he&&(this._cacheIndex=this._keys.length,this._keys.push(ae),this._values.push(void 0)),this._cacheIndex},je})();return J;function Ee(je,ae){return je}function jt(je,ae){return ae}function Jt(je,ae){return[je,ae]}}function _N(){var _=(function(){function R(){this._map=new d}return Object.defineProperty(R.prototype,"size",{get:function(){return this._map.size},enumerable:!0,configurable:!0}),R.prototype.has=function($){return this._map.has($)},R.prototype.add=function($){return this._map.set($,$),this},R.prototype.delete=function($){return this._map.delete($)},R.prototype.clear=function(){this._map.clear()},R.prototype.keys=function(){return this._map.keys()},R.prototype.values=function(){return this._map.keys()},R.prototype.entries=function(){return this._map.entries()},R.prototype["@@iterator"]=function(){return this.keys()},R.prototype[s]=function(){return this.keys()},R})();return _}function AN(){var _=16,R=f.create(),$=J();return(function(){function ae(){this._key=J()}return ae.prototype.has=function(he){var ge=Ee(he,!1);return ge!==void 0?f.has(ge,this._key):!1},ae.prototype.get=function(he){var ge=Ee(he,!1);return ge!==void 0?f.get(ge,this._key):void 0},ae.prototype.set=function(he,ge){var be=Ee(he,!0);return be[this._key]=ge,this},ae.prototype.delete=function(he){var ge=Ee(he,!1);return ge!==void 0?delete ge[this._key]:!1},ae.prototype.clear=function(){this._key=J()},ae})();function J(){var ae;do ae="@@WeakMap@@"+je();while(f.has(R,ae));return R[ae]=!0,ae}function Ee(ae,he){if(!n.call(ae,$)){if(!he)return;Object.defineProperty(ae,$,{value:f.create()})}return ae[$]}function jt(ae,he){for(var ge=0;ge<he;++ge)ae[ge]=Math.random()*255|0;return ae}function Jt(ae){if(typeof Uint8Array=="function"){var he=new Uint8Array(ae);return typeof crypto<"u"?crypto.getRandomValues(he):typeof msCrypto<"u"?msCrypto.getRandomValues(he):jt(he,ae),he}return jt(new Array(ae),ae)}function je(){var ae=Jt(_);ae[6]=ae[6]&79|64,ae[8]=ae[8]&191|128;for(var he="",ge=0;ge<_;++ge){var be=ae[ge];(ge===4||ge===6||ge===8)&&(he+="-"),be<16&&(he+="0"),he+=be.toString(16).toLowerCase()}return he}}function i6(_){return _.__=void 0,delete _.__,_}})})(xO||(xO={}))});var OR=Wn((ZNe,I4)=>{var fR,dR,hR,pR,mR,gR,yR,wR,bR,T4,z9,vR,xR,Hf,ER,SR,_R,AR,TR,IR,CR,PR,kR;(function(r){var e=typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){r(t(e,t(n)))}):typeof I4=="object"&&typeof I4.exports=="object"?r(t(e,t(I4.exports))):r(t(e));function t(n,o){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(i,s){return n[i]=o?o(i,s):s}}})(function(r){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var o in n)n.hasOwnProperty(o)&&(t[o]=n[o])};fR=function(t,n){e(t,n);function o(){this.constructor=t}t.prototype=n===null?Object.create(n):(o.prototype=n.prototype,new o)},dR=Object.assign||function(t){for(var n,o=1,i=arguments.length;o<i;o++){n=arguments[o];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},hR=function(t,n){var o={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&n.indexOf(i)<0&&(o[i]=t[i]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,i=Object.getOwnPropertySymbols(t);s<i.length;s++)n.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(t,i[s])&&(o[i[s]]=t[i[s]]);return o},pR=function(t,n,o,i){var s=arguments.length,a=s<3?n:i===null?i=Object.getOwnPropertyDescriptor(n,o):i,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(t,n,o,i);else for(var l=t.length-1;l>=0;l--)(c=t[l])&&(a=(s<3?c(a):s>3?c(n,o,a):c(n,o))||a);return s>3&&a&&Object.defineProperty(n,o,a),a},mR=function(t,n){return function(o,i){n(o,i,t)}},gR=function(t,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,n)},yR=function(t,n,o,i){function s(a){return a instanceof o?a:new o(function(c){c(a)})}return new(o||(o=Promise))(function(a,c){function l(d){try{u(i.next(d))}catch(h){c(h)}}function f(d){try{u(i.throw(d))}catch(h){c(h)}}function u(d){d.done?a(d.value):s(d.value).then(l,f)}u((i=i.apply(t,n||[])).next())})},wR=function(t,n){var o={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,s,a,c;return c={next:l(0),throw:l(1),return:l(2)},typeof Symbol=="function"&&(c[Symbol.iterator]=function(){return this}),c;function l(u){return function(d){return f([u,d])}}function f(u){if(i)throw new TypeError("Generator is already executing.");for(;o;)try{if(i=1,s&&(a=u[0]&2?s.return:u[0]?s.throw||((a=s.return)&&a.call(s),0):s.next)&&!(a=a.call(s,u[1])).done)return a;switch(s=0,a&&(u=[u[0]&2,a.value]),u[0]){case 0:case 1:a=u;break;case 4:return o.label++,{value:u[1],done:!1};case 5:o.label++,s=u[1],u=[0];continue;case 7:u=o.ops.pop(),o.trys.pop();continue;default:if(a=o.trys,!(a=a.length>0&&a[a.length-1])&&(u[0]===6||u[0]===2)){o=0;continue}if(u[0]===3&&(!a||u[1]>a[0]&&u[1]<a[3])){o.label=u[1];break}if(u[0]===6&&o.label<a[1]){o.label=a[1],a=u;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(u);break}a[2]&&o.ops.pop(),o.trys.pop();continue}u=n.call(t,o)}catch(d){u=[6,d],s=0}finally{i=a=0}if(u[0]&5)throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}},kR=function(t,n,o,i){i===void 0&&(i=o),t[i]=n[o]},bR=function(t,n){for(var o in t)o!=="default"&&!n.hasOwnProperty(o)&&(n[o]=t[o])},T4=function(t){var n=typeof Symbol=="function"&&Symbol.iterator,o=n&&t[n],i=0;if(o)return o.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},z9=function(t,n){var o=typeof Symbol=="function"&&t[Symbol.iterator];if(!o)return t;var i=o.call(t),s,a=[],c;try{for(;(n===void 0||n-- >0)&&!(s=i.next()).done;)a.push(s.value)}catch(l){c={error:l}}finally{try{s&&!s.done&&(o=i.return)&&o.call(i)}finally{if(c)throw c.error}}return a},vR=function(){for(var t=[],n=0;n<arguments.length;n++)t=t.concat(z9(arguments[n]));return t},xR=function(){for(var t=0,n=0,o=arguments.length;n<o;n++)t+=arguments[n].length;for(var i=Array(t),s=0,n=0;n<o;n++)for(var a=arguments[n],c=0,l=a.length;c<l;c++,s++)i[s]=a[c];return i},Hf=function(t){return this instanceof Hf?(this.v=t,this):new Hf(t)},ER=function(t,n,o){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i=o.apply(t,n||[]),s,a=[];return s={},c("next"),c("throw"),c("return"),s[Symbol.asyncIterator]=function(){return this},s;function c(m){i[m]&&(s[m]=function(w){return new Promise(function(y,b){a.push([m,w,y,b])>1||l(m,w)})})}function l(m,w){try{f(i[m](w))}catch(y){h(a[0][3],y)}}function f(m){m.value instanceof Hf?Promise.resolve(m.value.v).then(u,d):h(a[0][2],m)}function u(m){l("next",m)}function d(m){l("throw",m)}function h(m,w){m(w),a.shift(),a.length&&l(a[0][0],a[0][1])}},SR=function(t){var n,o;return n={},i("next"),i("throw",function(s){throw s}),i("return"),n[Symbol.iterator]=function(){return this},n;function i(s,a){n[s]=t[s]?function(c){return(o=!o)?{value:Hf(t[s](c)),done:s==="return"}:a?a(c):c}:a}},_R=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=t[Symbol.asyncIterator],o;return n?n.call(t):(t=typeof T4=="function"?T4(t):t[Symbol.iterator](),o={},i("next"),i("throw"),i("return"),o[Symbol.asyncIterator]=function(){return this},o);function i(a){o[a]=t[a]&&function(c){return new Promise(function(l,f){c=t[a](c),s(l,f,c.done,c.value)})}}function s(a,c,l,f){Promise.resolve(f).then(function(u){a({value:u,done:l})},c)}},AR=function(t,n){return Object.defineProperty?Object.defineProperty(t,"raw",{value:n}):t.raw=n,t},TR=function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var o in t)Object.hasOwnProperty.call(t,o)&&(n[o]=t[o]);return n.default=t,n},IR=function(t){return t&&t.__esModule?t:{default:t}},CR=function(t,n){if(!n.has(t))throw new TypeError("attempted to get private field on non-instance");return n.get(t)},PR=function(t,n,o){if(!n.has(t))throw new TypeError("attempted to set private field on non-instance");return n.set(t,o),o},r("__extends",fR),r("__assign",dR),r("__rest",hR),r("__decorate",pR),r("__param",mR),r("__metadata",gR),r("__awaiter",yR),r("__generator",wR),r("__exportStar",bR),r("__createBinding",kR),r("__values",T4),r("__read",z9),r("__spread",vR),r("__spreadArrays",xR),r("__await",Hf),r("__asyncGenerator",ER),r("__asyncDelegator",SR),r("__asyncValues",_R),r("__makeTemplateObject",AR),r("__importStar",TR),r("__importDefault",IR),r("__classPrivateFieldGet",CR),r("__classPrivateFieldSet",PR)})});var tz={};Lt(tz,{DEFAULT_SESSION_MAX_PROVIDERS:()=>$8,DEFAULT_SESSION_MIN_PROVIDERS:()=>F8,InsufficientProvidersError:()=>fh,InvalidCodecError:()=>j8,NoRoutersAvailableError:()=>Zs,UnknownCodecError:()=>hh,UnknownHashAlgorithmError:()=>dh,createHelia:()=>ez,heliaDefaults:()=>Vv,libp2pDefaults:()=>n6});var Yv=Symbol.for("@libp2p/connection");var Pi=Symbol.for("@libp2p/content-routing");var qr=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},tm=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},rm=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},P=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},ki=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},id=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}},sd=class extends Error{static name="UnsupportedOperationError";constructor(e="Unsupported operation"){super(e),this.name="UnsupportedOperationError"}};var $a=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},Bl=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},wo=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},Ml=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}};var Go=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},ad=class extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}},Xe=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},Ul=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},Xo=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},nm=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},Is=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Fl=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},Be=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},ja=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},Yo=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},_n=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Cs=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},Ka=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},cd=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},om=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},$l=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},bo=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var im=class extends Event{data;constructor(e,t){super("message",t),this.data=e}},Ps=class extends Event{error;local;constructor(e,t,n){super("close",n),this.error=t,this.local=e}},sm=class extends Ps{constructor(e,t){super(!0,e,t)}},am=class extends Ps{constructor(e,t){super(!1,e,t)}};var Va=Symbol.for("@libp2p/peer-discovery");var cm=Symbol.for("@libp2p/peer-id");function Rr(r){return!!r?.[cm]}var Oi=Symbol.for("@libp2p/peer-routing");var Ha="keep-alive";function lm(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function er(...r){let e=[];for(let t of r)lm(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function or(...r){let e=[];for(let t of r)lm(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}var ks=Symbol.for("@libp2p/transport");var ld;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ld||(ld={}));var _e=class extends EventTarget{#e=new Map;constructor(){super()}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:i})=>i!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};var qe=Symbol.for("@libp2p/service-capabilities"),An=Symbol.for("@libp2p/service-dependencies");var f6={};Lt(f6,{base32:()=>ir,base32hex:()=>VN,base32hexpad:()=>qN,base32hexpadupper:()=>WN,base32hexupper:()=>HN,base32pad:()=>jN,base32padupper:()=>KN,base32upper:()=>$N,base32z:()=>zN});var Fz=new Uint8Array(0);function Qv(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function vo(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function Zv(r){return new TextEncoder().encode(r)}function Jv(r){return new TextDecoder().decode(r)}function NN(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var i=r.charAt(o),s=i.charCodeAt(0);if(t[s]!==255)throw new TypeError(i+" is ambiguous");t[s]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),f=Math.log(256)/Math.log(a);function u(m){if(m instanceof Uint8Array||(ArrayBuffer.isView(m)?m=new Uint8Array(m.buffer,m.byteOffset,m.byteLength):Array.isArray(m)&&(m=Uint8Array.from(m))),!(m instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(m.length===0)return"";for(var w=0,y=0,b=0,N=m.length;b!==N&&m[b]===0;)b++,w++;for(var O=(N-b)*f+1>>>0,V=new Uint8Array(O);b!==N;){for(var Q=m[b],Z=0,se=O-1;(Q!==0||Z<y)&&se!==-1;se--,Z++)Q+=256*V[se]>>>0,V[se]=Q%a>>>0,Q=Q/a>>>0;if(Q!==0)throw new Error("Non-zero carry");y=Z,b++}for(var C=O-y;C!==O&&V[C]===0;)C++;for(var T=c.repeat(w);C<O;++C)T+=r.charAt(V[C]);return T}function d(m){if(typeof m!="string")throw new TypeError("Expected String");if(m.length===0)return new Uint8Array;var w=0;if(m[w]!==" "){for(var y=0,b=0;m[w]===c;)y++,w++;for(var N=(m.length-w)*l+1>>>0,O=new Uint8Array(N);m[w];){var V=t[m.charCodeAt(w)];if(V===255)return;for(var Q=0,Z=N-1;(V!==0||Q<b)&&Z!==-1;Z--,Q++)V+=a*O[Z]>>>0,O[Z]=V%256>>>0,V=V/256>>>0;if(V!==0)throw new Error("Non-zero carry");b=Q,w++}if(m[w]!==" "){for(var se=N-b;se!==N&&O[se]===0;)se++;for(var C=new Uint8Array(y+(N-se)),T=y;se!==N;)C[T++]=O[se++];return C}}}function h(m){var w=d(m);if(w)return w;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:d,decode:h}}var LN=NN,BN=LN,ex=BN;var a6=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},c6=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let o=t.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return tx(this,e)}},l6=class{decoders;constructor(e){this.decoders=e}or(e){return tx(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function tx(r,e){return new l6({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var u6=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new a6(e,t,n),this.decoder=new c6(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function jl({name:r,prefix:e,encode:t,decode:n}){return new u6(r,e,t,n)}function Os({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=ex(t,r);return jl({prefix:e,name:r,encode:n,decode:i=>vo(o(i))})}function MN(r,e,t,n){let o=r.length;for(;r[o-1]==="=";)--o;let i=new Uint8Array(o*t/8|0),s=0,a=0,c=0;for(let l=0;l<o;++l){let f=e[r[l]];if(f===void 0)throw new SyntaxError(`Non-${n} character`);a=a<<t|f,s+=t,s>=8&&(s-=8,i[c++]=255&a>>s)}if(s>=t||(255&a<<8-s)!==0)throw new SyntaxError("Unexpected end of data");return i}function UN(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,i="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,i+=e[o&a>>s];if(s!==0&&(i+=e[o&a<<t-s]),n)for(;(i.length*t&7)!==0;)i+="=";return i}function FN(r){let e={};for(let t=0;t<r.length;++t)e[r[t]]=t;return e}function Bt({name:r,prefix:e,bitsPerChar:t,alphabet:n}){let o=FN(n);return jl({prefix:e,name:r,encode(i){return UN(i,n,t)},decode(i){return MN(i,o,t,r)}})}var ir=Bt({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),$N=Bt({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),jN=Bt({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),KN=Bt({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),VN=Bt({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),HN=Bt({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),qN=Bt({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),WN=Bt({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),zN=Bt({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var d6={};Lt(d6,{base58btc:()=>ft,base58flickr:()=>GN});var ft=Os({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),GN=Os({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var h6={};Lt(h6,{base64:()=>qt,base64pad:()=>ud,base64url:()=>qa,base64urlpad:()=>XN});var qt=Bt({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),ud=Bt({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),qa=Bt({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),XN=Bt({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});function YN(r,e){if(typeof r=="string")return QN(r);if(typeof r=="number")return eL(r,e);throw Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(r)}`)}var um=YN;function QN(r){if(typeof r!="string"||r.length===0||r.length>100)throw Error(`Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(r)}`);let e=/^(?<value>-?\d*\.?\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(r);if(!e?.groups)return NaN;let{value:t,unit:n="ms"}=e.groups,o=parseFloat(t),i=n.toLowerCase();switch(i){case"years":case"year":case"yrs":case"yr":case"y":return o*315576e5;case"months":case"month":case"mo":return o*26298e5;case"weeks":case"week":case"w":return o*6048e5;case"days":case"day":case"d":return o*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return o*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return o*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return o*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:throw Error(`Unknown unit "${i}" provided to ms.parse(). value=${JSON.stringify(r)}`)}}function ZN(r){let e=Math.abs(r);return e>=315576e5?`${Math.round(r/315576e5)}y`:e>=26298e5?`${Math.round(r/26298e5)}mo`:e>=6048e5?`${Math.round(r/6048e5)}w`:e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function JN(r){let e=Math.abs(r);return e>=315576e5?Wa(r,e,315576e5,"year"):e>=26298e5?Wa(r,e,26298e5,"month"):e>=6048e5?Wa(r,e,6048e5,"week"):e>=864e5?Wa(r,e,864e5,"day"):e>=36e5?Wa(r,e,36e5,"hour"):e>=6e4?Wa(r,e,6e4,"minute"):e>=1e3?Wa(r,e,1e3,"second"):`${r} ms`}function eL(r,e){if(typeof r!="number"||!Number.isFinite(r))throw Error("Value provided to ms.format() must be of type number.");return e?.long?JN(r):ZN(r)}function Wa(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function p6(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=um,t.destroy=l,Object.keys(r).forEach(f=>{t[f]=r[f]}),t.names=[],t.skips=[],t.formatters={};function e(f){let u=0;for(let d=0;d<f.length;d++)u=(u<<5)-u+f.charCodeAt(d),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(f,u){let d,h=null,m,w;function y(...b){if(!y.enabled)return;let N=y,O=Number(new Date),V=O-(d||O);N.diff=V,N.prev=d,N.curr=O,d=O,b[0]=t.coerce(b[0]),typeof b[0]!="string"&&b.unshift("%O");let Q=0;b[0]=b[0].replace(/%([a-zA-Z%])/g,(se,C)=>{if(se==="%%")return"%";Q++;let T=t.formatters[C];if(typeof T=="function"){let K=b[Q];se=T.call(N,K),b.splice(Q,1),Q--}return se}),t.formatArgs.call(N,b),u?.onLog!=null&&u.onLog(...b),(N.log||t.log).apply(N,b)}return y.namespace=f,y.useColors=t.useColors(),y.color=t.selectColor(f),y.extend=n,y.destroy=t.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(m!==t.namespaces&&(m=t.namespaces,w=t.enabled(f)),w),set:b=>{h=b}}),typeof t.init=="function"&&t.init(y),y}function n(f,u){let d=t(this.namespace+(typeof u>"u"?":":u)+f);return d.log=this.log,d}function o(f){t.save(f),t.namespaces=f,t.names=[],t.skips=[];let u,d=(typeof f=="string"?f:"").split(/[\s,]+/),h=d.length;for(u=0;u<h;u++)d[u]&&(f=d[u].replace(/\*/g,".*?"),f[0]==="-"?t.skips.push(new RegExp("^"+f.substr(1)+"$")):t.names.push(new RegExp("^"+f+"$")))}function i(){let f=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),f}function s(f){if(f[f.length-1]==="*")return!0;let u,d;for(u=0,d=t.skips.length;u<d;u++)if(t.skips[u].test(f))return!1;for(u=0,d=t.names.length;u<d;u++)if(t.names[u].test(f))return!0;return!1}function a(f){return f.toString().substring(2,f.toString().length-2).replace(/\.\*\?$/,"*")}function c(f){return f instanceof Error?f.stack??f.message:f}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.setupFormatters(t.formatters),t.enable(t.load()),t}var fm=aL(),tL=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function rL(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function nL(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+um(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}var oL=console.debug??console.log??(()=>{});function iL(r){try{r?fm?.setItem("debug",r):fm?.removeItem("debug")}catch{}}function sL(){let r;try{r=fm?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function aL(){try{return localStorage}catch{}}function cL(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var rx=p6({formatArgs:nL,save:iL,load:sL,useColors:rL,setupFormatters:cL,colors:tL,storage:fm,log:oL});var sn=rx;sn.formatters.b=r=>r==null?"undefined":ft.baseEncode(r);sn.formatters.t=r=>r==null?"undefined":ir.baseEncode(r);sn.formatters.m=r=>r==null?"undefined":qt.baseEncode(r);sn.formatters.p=r=>r==null?"undefined":r.toString();sn.formatters.c=r=>r==null?"undefined":r.toString();sn.formatters.k=r=>r==null?"undefined":r.toString();sn.formatters.a=r=>r==null?"undefined":r.toString();function nx(r,e=""){let t=ox(r.message),n=ox(r.stack);return t!=null&&n!=null?n.includes(t)?`${n.split(`
3
+ `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return w;function w(C,T,K){var z=this;if(!(z instanceof w))return new w(C,T,K);z.time=+C||0,z.nano=+T||0,z.year=+K||0,y(z)}function y(C){var T,K,z,U=C.year,I=C.time,S=C.nano,x=((S<0||a<=S)&&(S-=(K=Math.floor(S/a))*a,I+=K,K=1),U%e);return(I<-i||i<I||x)&&((T=l(I/o))&&(U+=T*e,I-=T*o),(z=b(I)).setUTCFullYear(x+z.getUTCFullYear()),z=(I=+z)+(T=l((U-=x)/e))*o,T&&-i<=z&&z<=i&&(U-=T*e,I=z),K=1),K&&(C.year=U,C.time=I,C.nano=S),C}function b(C){var T=new Date(0);return T.setTime(C),T}function N(U,z){U=+U||0;var K=l((z=(z|0)*s)/n)+l(U/n),z=z%n+U%n,U=l(z/n);return U&&(K+=U,z-=U*n),new w(1e3*z,0,K*e)}function O(C,T,K,z,U,I){return function(x,D){var H=y(this);x=x||new Array(8),Q(x,D|=0);var M=Math.floor(H.time/1e3),H=H.year*(t*r/e),q=l(H/s)+l(M/s),H=H%s+M%s,M=Math.floor(H/s);return M&&(q+=M,H-=M*s),S(x,D+U,q),S(x,D+I,H),x};function S(x,D,q){x[D+C]=q>>24&255,x[D+T]=q>>16&255,x[D+K]=q>>8&255,x[D+z]=255&q}}function V(C,T,K,z,U,I){return function(x,D){Q(x,D|=0);var q=S(x,D+U);return N(S(x,D+I),q)};function S(x,D){return 16777216*x[D+C]+(x[D+T]<<16|x[D+K]<<8|x[D+z])}}function Q(C,T){if(C=C&&C.length,C==null)throw new TypeError("Invalid Buffer");if(C<T+8)throw new RangeError("Out of range")}function Z(C){return(9<C?"":"0")+(0|C)}function se(C,T){return(c+(0|C)).substr(-T)}})()});var vI=Wn((G0e,bI)=>{"use strict";function AK(r){return r>=55296&&r<=56319}function TK(r){return r>=56320&&r<=57343}bI.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,i=0,s,a,c=0;c<o;c+=1){if(s=t.charCodeAt(c),a=t[c],AK(s)&&TK(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),i+=e(a),i===n)return t.slice(0,c+1);if(i>n)return t.slice(0,c-a.length+1)}return t}});var EI=Wn((X0e,xI)=>{"use strict";function IK(r){return r>=55296&&r<=56319}function CK(r){return r>=56320&&r<=57343}xI.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,i=null,s=0;s<t;s++)o=e.charCodeAt(s),CK(o)?i!=null&&IK(i)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),i=o;return n}});var _I=Wn((Y0e,SI)=>{"use strict";var PK=vI(),kK=EI();SI.exports=PK.bind(null,kK)});var II=Wn((Q0e,TI)=>{"use strict";var OK=_I(),RK=/[\/\?<>\\:\*\|"]/g,DK=/[\x00-\x1f\x80-\x9f]/g,NK=/^\.+$/,LK=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,BK=/[\. ]+$/;function AI(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(RK,e).replace(DK,e).replace(NK,e).replace(LK,e).replace(BK,e);return OK(t,255)}TI.exports=function(r,e){var t=e&&e.replacement||"",n=AI(r,t);return t===""?n:AI(n,"")}});var os=Wn(Xu=>{"use strict";var UK="[object ArrayBuffer]",ns=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===UK}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let i=0;i<n.length;i++)if(n[i]!==o[i])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let s of t)n+=s.byteLength;let o=new Uint8Array(n),i=0;for(let s of t){let a=this.toUint8Array(s);o.set(a,i),i+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},g7="string",FK=/^[0-9a-f\s]+$/i,$K=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,jK=/^[a-zA-Z0-9-_]+$/,$g=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=ns.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},oo=class{static toString(e,t=!1){let n=ns.toArrayBuffer(e),o=new DataView(n),i="";for(let s=0;s<n.byteLength;s+=2){let a=o.getUint16(s,t);i+=String.fromCharCode(a)}return i}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let i=0;i<e.length;i++)o.setUint16(i*2,e.charCodeAt(i),t);return n}},jg=class r{static isHex(e){return typeof e===g7&&FK.test(e)}static isBase64(e){return typeof e===g7&&$K.test(e)}static isBase64Url(e){return typeof e===g7&&jK.test(e)}static ToString(e,t="utf8"){let n=ns.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return oo.toString(n,!0);case"utf16":case"utf16be":return oo.toString(n);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return oo.fromString(e,!0);case"utf16":case"utf16be":return oo.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=ns.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return $g.fromString(e);case"utf16":case"utf16be":return oo.fromString(e);case"utf16le":case"usc2":return oo.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return $g.toString(e);case"utf16":case"utf16be":return oo.toString(e);case"utf16le":case"usc2":return oo.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=ns.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=ns.toUint8Array(e),n="",o=t.length;for(let i=0;i<o;i++){let s=t[i];s<16&&(n+="0"),n+=s.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let i=t.slice(o,o+2);n[o/2]=parseInt(i,16)}return n.buffer}static ToUtf16String(e,t=!1){return oo.toString(e,t)}static FromUtf16String(e,t=!1){return oo.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let n=0;n<t;n++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};jg.DEFAULT_UTF8_ENCODING="utf8";function KK(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let i in o)t[i]=o[i]}return t}function VK(...r){let e=r.map(o=>o.byteLength).reduce((o,i)=>o+i),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let i of o)t[n++]=i}),t.buffer}function HK(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}Xu.BufferSourceConverter=ns;Xu.Convert=jg;Xu.assign=KK;Xu.combine=VK;Xu.isEqual=HK});var VP=Wn(gi=>{"use strict";Object.defineProperty(gi,"__esModule",{value:!0});gi.parseCookie=jP;gi.parse=jP;gi.stringifyCookie=vH;gi.stringifySetCookie=Gy;gi.serialize=Gy;gi.parseSetCookie=xH;gi.stringifySetCookie=Gy;gi.serialize=Gy;var FP=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,$P=/^[\u0021-\u003A\u003C-\u007E]*$/,mH=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,gH=/^[\u0020-\u003A\u003D-\u007E]*$/,yH=/^-?\d+$/,wH=Object.prototype.toString,bH=(()=>{let r=function(){};return r.prototype=Object.create(null),r})();function jP(r,e){let t=new bH,n=r.length;if(n<2)return t;let o=e?.decode||KP,i=0;do{let s=db(r,i,n);if(s===-1)break;let a=fb(r,i,n);if(s>a){i=r.lastIndexOf(";",s-1)+1;continue}let c=aa(r,i,s);t[c]===void 0&&(t[c]=o(aa(r,s+1,a))),i=a+1}while(i<n);return t}function vH(r,e){let t=e?.encode||encodeURIComponent,n=[];for(let o of Object.keys(r)){let i=r[o];if(i===void 0)continue;if(!FP.test(o))throw new TypeError(`cookie name is invalid: ${o}`);let s=t(i);if(!$P.test(s))throw new TypeError(`cookie val is invalid: ${i}`);n.push(`${o}=${s}`)}return n.join("; ")}function Gy(r,e,t){let n=typeof r=="object"?r:{...t,name:r,value:String(e)},i=(typeof e=="object"?e:t)?.encode||encodeURIComponent;if(!FP.test(n.name))throw new TypeError(`argument name is invalid: ${n.name}`);let s=n.value?i(n.value):"";if(!$P.test(s))throw new TypeError(`argument val is invalid: ${n.value}`);let a=n.name+"="+s;if(n.maxAge!==void 0){if(!Number.isInteger(n.maxAge))throw new TypeError(`option maxAge is invalid: ${n.maxAge}`);a+="; Max-Age="+n.maxAge}if(n.domain){if(!mH.test(n.domain))throw new TypeError(`option domain is invalid: ${n.domain}`);a+="; Domain="+n.domain}if(n.path){if(!gH.test(n.path))throw new TypeError(`option path is invalid: ${n.path}`);a+="; Path="+n.path}if(n.expires){if(!EH(n.expires)||!Number.isFinite(n.expires.valueOf()))throw new TypeError(`option expires is invalid: ${n.expires}`);a+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(a+="; HttpOnly"),n.secure&&(a+="; Secure"),n.partitioned&&(a+="; Partitioned"),n.priority)switch(typeof n.priority=="string"?n.priority.toLowerCase():void 0){case"low":a+="; Priority=Low";break;case"medium":a+="; Priority=Medium";break;case"high":a+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${n.priority}`)}if(n.sameSite)switch(typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite){case!0:case"strict":a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"none":a+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${n.sameSite}`)}return a}function xH(r,e){let t=e?.decode||KP,n=r.length,o=fb(r,0,n),i=db(r,0,o),s=i===-1?{name:"",value:t(aa(r,0,o))}:{name:aa(r,0,i),value:t(aa(r,i+1,o))},a=o+1;for(;a<n;){let c=fb(r,a,n),l=db(r,a,c),f=l===-1?aa(r,a,c):aa(r,a,l),u=l===-1?void 0:aa(r,l+1,c);switch(f.toLowerCase()){case"httponly":s.httpOnly=!0;break;case"secure":s.secure=!0;break;case"partitioned":s.partitioned=!0;break;case"domain":s.domain=u;break;case"path":s.path=u;break;case"max-age":u&&yH.test(u)&&(s.maxAge=Number(u));break;case"expires":if(!u)break;let d=new Date(u);Number.isFinite(d.valueOf())&&(s.expires=d);break;case"priority":if(!u)break;let h=u.toLowerCase();(h==="low"||h==="medium"||h==="high")&&(s.priority=h);break;case"samesite":if(!u)break;let m=u.toLowerCase();(m==="lax"||m==="strict"||m==="none")&&(s.sameSite=m);break}a=c+1}return s}function fb(r,e,t){let n=r.indexOf(";",e);return n===-1?t:n}function db(r,e,t){let n=r.indexOf("=",e);return n<t?n:-1}function aa(r,e,t){let n=e,o=t;do{let i=r.charCodeAt(n);if(i!==32&&i!==9)break}while(++n<o);for(;o>n;){let i=r.charCodeAt(o-1);if(i!==32&&i!==9)break;o--}return r.slice(n,o)}function KP(r){if(r.indexOf("%")===-1)return r;try{return decodeURIComponent(r)}catch{return r}}function EH(r){return wH.call(r)==="[object Date]"}});var EO=Wn(()=>{var xO;(function(r){(function(e){var t=typeof globalThis=="object"||typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof this=="object"?this:a(),n=o(r);typeof t.Reflect<"u"&&(n=o(t.Reflect,n)),e(n,t),typeof t.Reflect>"u"&&(t.Reflect=r);function o(c,l){return function(f,u){Object.defineProperty(c,f,{configurable:!0,writable:!0,value:u}),l&&l(f,u)}}function i(){try{return Function("return this;")()}catch{}}function s(){try{return(0,eval)("(function() { return this; })()")}catch{}}function a(){return i()||s()}})(function(e,t){var n=Object.prototype.hasOwnProperty,o=typeof Symbol=="function",i=o&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",s=o&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",a=typeof Object.create=="function",c={__proto__:[]}instanceof Array,l=!a&&!c,f={create:a?function(){return i6(Object.create(null))}:c?function(){return i6({__proto__:null})}:function(){return i6({})},has:l?function(_,R){return n.call(_,R)}:function(_,R){return R in _},get:l?function(_,R){return n.call(_,R)?_[R]:void 0}:function(_,R){return _[R]}},u=Object.getPrototypeOf(Function),d=typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:SN(),h=typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:_N(),m=typeof WeakMap=="function"?WeakMap:AN(),w=o?Symbol.for("@reflect-metadata:registry"):void 0,y=vN(),b=xN(y);function N(_,R,$,J){if(F($)){if(!Ci(_))throw new TypeError;if(!Ts(R))throw new TypeError;return U(_,R)}else{if(!Ci(_))throw new TypeError;if(!me(R))throw new TypeError;if(!me(J)&&!F(J)&&!Le(J))throw new TypeError;return Le(J)&&(J=void 0),$=it($),I(_,R,$,J)}}e("decorate",N);function O(_,R){function $(J,Ee){if(!me(J))throw new TypeError;if(!F(Ee)&&!J1(Ee))throw new TypeError;H(_,R,J,Ee)}return $}e("metadata",O);function V(_,R,$,J){if(!me($))throw new TypeError;return F(J)||(J=it(J)),H(_,R,$,J)}e("defineMetadata",V);function Q(_,R,$){if(!me(R))throw new TypeError;return F($)||($=it($)),S(_,R,$)}e("hasMetadata",Q);function Z(_,R,$){if(!me(R))throw new TypeError;return F($)||($=it($)),x(_,R,$)}e("hasOwnMetadata",Z);function se(_,R,$){if(!me(R))throw new TypeError;return F($)||($=it($)),D(_,R,$)}e("getMetadata",se);function C(_,R,$){if(!me(R))throw new TypeError;return F($)||($=it($)),q(_,R,$)}e("getOwnMetadata",C);function T(_,R){if(!me(_))throw new TypeError;return F(R)||(R=it(R)),M(_,R)}e("getMetadataKeys",T);function K(_,R){if(!me(_))throw new TypeError;return F(R)||(R=it(R)),G(_,R)}e("getOwnMetadataKeys",K);function z(_,R,$){if(!me(R))throw new TypeError;if(F($)||($=it($)),!me(R))throw new TypeError;F($)||($=it($));var J=od(R,$,!1);return F(J)?!1:J.OrdinaryDeleteMetadata(_,R,$)}e("deleteMetadata",z);function U(_,R){for(var $=_.length-1;$>=0;--$){var J=_[$],Ee=J(R);if(!F(Ee)&&!Le(Ee)){if(!Ts(Ee))throw new TypeError;R=Ee}}return R}function I(_,R,$,J){for(var Ee=_.length-1;Ee>=0;--Ee){var jt=_[Ee],Jt=jt(R,$,J);if(!F(Jt)&&!Le(Jt)){if(!me(Jt))throw new TypeError;J=Jt}}return J}function S(_,R,$){var J=x(_,R,$);if(J)return!0;var Ee=o6(R);return Le(Ee)?!1:S(_,Ee,$)}function x(_,R,$){var J=od(R,$,!1);return F(J)?!1:Ct(J.OrdinaryHasOwnMetadata(_,R,$))}function D(_,R,$){var J=x(_,R,$);if(J)return q(_,R,$);var Ee=o6(R);if(!Le(Ee))return D(_,Ee,$)}function q(_,R,$){var J=od(R,$,!1);if(!F(J))return J.OrdinaryGetOwnMetadata(_,R,$)}function H(_,R,$,J){var Ee=od($,J,!0);Ee.OrdinaryDefineOwnMetadata(_,R,$,J)}function M(_,R){var $=G(_,R),J=o6(_);if(J===null)return $;var Ee=M(J,R);if(Ee.length<=0)return $;if($.length<=0)return Ee;for(var jt=new h,Jt=[],je=0,ae=$;je<ae.length;je++){var he=ae[je],ge=jt.has(he);ge||(jt.add(he),Jt.push(he))}for(var be=0,Ve=Ee;be<Ve.length;be++){var he=Ve[be],ge=jt.has(he);ge||(jt.add(he),Jt.push(he))}return Jt}function G(_,R){var $=od(_,R,!1);return $?$.OrdinaryOwnMetadataKeys(_,R):[]}function te(_){if(_===null)return 1;switch(typeof _){case"undefined":return 0;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"object":return _===null?1:6;default:return 6}}function F(_){return _===void 0}function Le(_){return _===null}function $e(_){return typeof _=="symbol"}function me(_){return typeof _=="object"?_!==null:typeof _=="function"}function He(_,R){switch(te(_)){case 0:return _;case 1:return _;case 2:return _;case 3:return _;case 4:return _;case 5:return _}var $=R===3?"string":R===5?"number":"default",J=nd(_,i);if(J!==void 0){var Ee=J.call(_,$);if(me(Ee))throw new TypeError;return Ee}return ot(_,$==="default"?"number":$)}function ot(_,R){if(R==="string"){var $=_.toString;if(go($)){var J=$.call(_);if(!me(J))return J}var Ee=_.valueOf;if(go(Ee)){var J=Ee.call(_);if(!me(J))return J}}else{var Ee=_.valueOf;if(go(Ee)){var J=Ee.call(_);if(!me(J))return J}var jt=_.toString;if(go(jt)){var J=jt.call(_);if(!me(J))return J}}throw new TypeError}function Ct(_){return!!_}function ze(_){return""+_}function it(_){var R=He(_,3);return $e(R)?R:ze(R)}function Ci(_){return Array.isArray?Array.isArray(_):_ instanceof Object?_ instanceof Array:Object.prototype.toString.call(_)==="[object Array]"}function go(_){return typeof _=="function"}function Ts(_){return typeof _=="function"}function J1(_){switch(te(_)){case 3:return!0;case 4:return!0;default:return!1}}function Ll(_,R){return _===R||_!==_&&R!==R}function nd(_,R){var $=_[R];if($!=null){if(!go($))throw new TypeError;return $}}function Hv(_){var R=nd(_,s);if(!go(R))throw new TypeError;var $=R.call(_);if(!me($))throw new TypeError;return $}function qv(_){return _.value}function Wv(_){var R=_.next();return R.done?!1:R}function zv(_){var R=_.return;R&&R.call(_)}function o6(_){var R=Object.getPrototypeOf(_);if(typeof _!="function"||_===u||R!==u)return R;var $=_.prototype,J=$&&Object.getPrototypeOf($);if(J==null||J===Object.prototype)return R;var Ee=J.constructor;return typeof Ee!="function"||Ee===_?R:Ee}function bN(){var _;!F(w)&&typeof t.Reflect<"u"&&!(w in t.Reflect)&&typeof t.Reflect.defineMetadata=="function"&&(_=EN(t.Reflect));var R,$,J,Ee=new m,jt={registerProvider:Jt,getProvider:ae,setProvider:ge};return jt;function Jt(be){if(!Object.isExtensible(jt))throw new Error("Cannot add provider to a frozen registry.");switch(!0){case _===be:break;case F(R):R=be;break;case R===be:break;case F($):$=be;break;case $===be:break;default:J===void 0&&(J=new h),J.add(be);break}}function je(be,Ve){if(!F(R)){if(R.isProviderFor(be,Ve))return R;if(!F($)){if($.isProviderFor(be,Ve))return R;if(!F(J))for(var Et=Hv(J);;){var Kt=Wv(Et);if(!Kt)return;var yo=qv(Kt);if(yo.isProviderFor(be,Ve))return zv(Et),yo}}}if(!F(_)&&_.isProviderFor(be,Ve))return _}function ae(be,Ve){var Et=Ee.get(be),Kt;return F(Et)||(Kt=Et.get(Ve)),F(Kt)&&(Kt=je(be,Ve),F(Kt)||(F(Et)&&(Et=new d,Ee.set(be,Et)),Et.set(Ve,Kt))),Kt}function he(be){if(F(be))throw new TypeError;return R===be||$===be||!F(J)&&J.has(be)}function ge(be,Ve,Et){if(!he(Et))throw new Error("Metadata provider not registered.");var Kt=ae(be,Ve);if(Kt!==Et){if(!F(Kt))return!1;var yo=Ee.get(be);F(yo)&&(yo=new d,Ee.set(be,yo)),yo.set(Ve,Et)}return!0}}function vN(){var _;return!F(w)&&me(t.Reflect)&&Object.isExtensible(t.Reflect)&&(_=t.Reflect[w]),F(_)&&(_=bN()),!F(w)&&me(t.Reflect)&&Object.isExtensible(t.Reflect)&&Object.defineProperty(t.Reflect,w,{enumerable:!1,configurable:!1,writable:!1,value:_}),_}function xN(_){var R=new m,$={isProviderFor:function(he,ge){var be=R.get(he);return F(be)?!1:be.has(ge)},OrdinaryDefineOwnMetadata:Jt,OrdinaryHasOwnMetadata:Ee,OrdinaryGetOwnMetadata:jt,OrdinaryOwnMetadataKeys:je,OrdinaryDeleteMetadata:ae};return y.registerProvider($),$;function J(he,ge,be){var Ve=R.get(he),Et=!1;if(F(Ve)){if(!be)return;Ve=new d,R.set(he,Ve),Et=!0}var Kt=Ve.get(ge);if(F(Kt)){if(!be)return;if(Kt=new d,Ve.set(ge,Kt),!_.setProvider(he,ge,$))throw Ve.delete(ge),Et&&R.delete(he),new Error("Wrong provider for target.")}return Kt}function Ee(he,ge,be){var Ve=J(ge,be,!1);return F(Ve)?!1:Ct(Ve.has(he))}function jt(he,ge,be){var Ve=J(ge,be,!1);if(!F(Ve))return Ve.get(he)}function Jt(he,ge,be,Ve){var Et=J(be,Ve,!0);Et.set(he,ge)}function je(he,ge){var be=[],Ve=J(he,ge,!1);if(F(Ve))return be;for(var Et=Ve.keys(),Kt=Hv(Et),yo=0;;){var Gv=Wv(Kt);if(!Gv)return be.length=yo,be;var TN=qv(Gv);try{be[yo]=TN}catch(IN){try{zv(Kt)}finally{throw IN}}yo++}}function ae(he,ge,be){var Ve=J(ge,be,!1);if(F(Ve)||!Ve.delete(he))return!1;if(Ve.size===0){var Et=R.get(ge);F(Et)||(Et.delete(be),Et.size===0&&R.delete(Et))}return!0}}function EN(_){var R=_.defineMetadata,$=_.hasOwnMetadata,J=_.getOwnMetadata,Ee=_.getOwnMetadataKeys,jt=_.deleteMetadata,Jt=new m,je={isProviderFor:function(ae,he){var ge=Jt.get(ae);return!F(ge)&&ge.has(he)?!0:Ee(ae,he).length?(F(ge)&&(ge=new h,Jt.set(ae,ge)),ge.add(he),!0):!1},OrdinaryDefineOwnMetadata:R,OrdinaryHasOwnMetadata:$,OrdinaryGetOwnMetadata:J,OrdinaryOwnMetadataKeys:Ee,OrdinaryDeleteMetadata:jt};return je}function od(_,R,$){var J=y.getProvider(_,R);if(!F(J))return J;if($){if(y.setProvider(_,R,b))return b;throw new Error("Illegal state.")}}function SN(){var _={},R=[],$=(function(){function je(ae,he,ge){this._index=0,this._keys=ae,this._values=he,this._selector=ge}return je.prototype["@@iterator"]=function(){return this},je.prototype[s]=function(){return this},je.prototype.next=function(){var ae=this._index;if(ae>=0&&ae<this._keys.length){var he=this._selector(this._keys[ae],this._values[ae]);return ae+1>=this._keys.length?(this._index=-1,this._keys=R,this._values=R):this._index++,{value:he,done:!1}}return{value:void 0,done:!0}},je.prototype.throw=function(ae){throw this._index>=0&&(this._index=-1,this._keys=R,this._values=R),ae},je.prototype.return=function(ae){return this._index>=0&&(this._index=-1,this._keys=R,this._values=R),{value:ae,done:!0}},je})(),J=(function(){function je(){this._keys=[],this._values=[],this._cacheKey=_,this._cacheIndex=-2}return Object.defineProperty(je.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),je.prototype.has=function(ae){return this._find(ae,!1)>=0},je.prototype.get=function(ae){var he=this._find(ae,!1);return he>=0?this._values[he]:void 0},je.prototype.set=function(ae,he){var ge=this._find(ae,!0);return this._values[ge]=he,this},je.prototype.delete=function(ae){var he=this._find(ae,!1);if(he>=0){for(var ge=this._keys.length,be=he+1;be<ge;be++)this._keys[be-1]=this._keys[be],this._values[be-1]=this._values[be];return this._keys.length--,this._values.length--,Ll(ae,this._cacheKey)&&(this._cacheKey=_,this._cacheIndex=-2),!0}return!1},je.prototype.clear=function(){this._keys.length=0,this._values.length=0,this._cacheKey=_,this._cacheIndex=-2},je.prototype.keys=function(){return new $(this._keys,this._values,Ee)},je.prototype.values=function(){return new $(this._keys,this._values,jt)},je.prototype.entries=function(){return new $(this._keys,this._values,Jt)},je.prototype["@@iterator"]=function(){return this.entries()},je.prototype[s]=function(){return this.entries()},je.prototype._find=function(ae,he){if(!Ll(this._cacheKey,ae)){this._cacheIndex=-1;for(var ge=0;ge<this._keys.length;ge++)if(Ll(this._keys[ge],ae)){this._cacheIndex=ge;break}}return this._cacheIndex<0&&he&&(this._cacheIndex=this._keys.length,this._keys.push(ae),this._values.push(void 0)),this._cacheIndex},je})();return J;function Ee(je,ae){return je}function jt(je,ae){return ae}function Jt(je,ae){return[je,ae]}}function _N(){var _=(function(){function R(){this._map=new d}return Object.defineProperty(R.prototype,"size",{get:function(){return this._map.size},enumerable:!0,configurable:!0}),R.prototype.has=function($){return this._map.has($)},R.prototype.add=function($){return this._map.set($,$),this},R.prototype.delete=function($){return this._map.delete($)},R.prototype.clear=function(){this._map.clear()},R.prototype.keys=function(){return this._map.keys()},R.prototype.values=function(){return this._map.keys()},R.prototype.entries=function(){return this._map.entries()},R.prototype["@@iterator"]=function(){return this.keys()},R.prototype[s]=function(){return this.keys()},R})();return _}function AN(){var _=16,R=f.create(),$=J();return(function(){function ae(){this._key=J()}return ae.prototype.has=function(he){var ge=Ee(he,!1);return ge!==void 0?f.has(ge,this._key):!1},ae.prototype.get=function(he){var ge=Ee(he,!1);return ge!==void 0?f.get(ge,this._key):void 0},ae.prototype.set=function(he,ge){var be=Ee(he,!0);return be[this._key]=ge,this},ae.prototype.delete=function(he){var ge=Ee(he,!1);return ge!==void 0?delete ge[this._key]:!1},ae.prototype.clear=function(){this._key=J()},ae})();function J(){var ae;do ae="@@WeakMap@@"+je();while(f.has(R,ae));return R[ae]=!0,ae}function Ee(ae,he){if(!n.call(ae,$)){if(!he)return;Object.defineProperty(ae,$,{value:f.create()})}return ae[$]}function jt(ae,he){for(var ge=0;ge<he;++ge)ae[ge]=Math.random()*255|0;return ae}function Jt(ae){if(typeof Uint8Array=="function"){var he=new Uint8Array(ae);return typeof crypto<"u"?crypto.getRandomValues(he):typeof msCrypto<"u"?msCrypto.getRandomValues(he):jt(he,ae),he}return jt(new Array(ae),ae)}function je(){var ae=Jt(_);ae[6]=ae[6]&79|64,ae[8]=ae[8]&191|128;for(var he="",ge=0;ge<_;++ge){var be=ae[ge];(ge===4||ge===6||ge===8)&&(he+="-"),be<16&&(he+="0"),he+=be.toString(16).toLowerCase()}return he}}function i6(_){return _.__=void 0,delete _.__,_}})})(xO||(xO={}))});var OR=Wn((ZNe,I4)=>{var fR,dR,hR,pR,mR,gR,yR,wR,bR,T4,z9,vR,xR,Hf,ER,SR,_R,AR,TR,IR,CR,PR,kR;(function(r){var e=typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){r(t(e,t(n)))}):typeof I4=="object"&&typeof I4.exports=="object"?r(t(e,t(I4.exports))):r(t(e));function t(n,o){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(i,s){return n[i]=o?o(i,s):s}}})(function(r){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var o in n)n.hasOwnProperty(o)&&(t[o]=n[o])};fR=function(t,n){e(t,n);function o(){this.constructor=t}t.prototype=n===null?Object.create(n):(o.prototype=n.prototype,new o)},dR=Object.assign||function(t){for(var n,o=1,i=arguments.length;o<i;o++){n=arguments[o];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},hR=function(t,n){var o={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&n.indexOf(i)<0&&(o[i]=t[i]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,i=Object.getOwnPropertySymbols(t);s<i.length;s++)n.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(t,i[s])&&(o[i[s]]=t[i[s]]);return o},pR=function(t,n,o,i){var s=arguments.length,a=s<3?n:i===null?i=Object.getOwnPropertyDescriptor(n,o):i,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(t,n,o,i);else for(var l=t.length-1;l>=0;l--)(c=t[l])&&(a=(s<3?c(a):s>3?c(n,o,a):c(n,o))||a);return s>3&&a&&Object.defineProperty(n,o,a),a},mR=function(t,n){return function(o,i){n(o,i,t)}},gR=function(t,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,n)},yR=function(t,n,o,i){function s(a){return a instanceof o?a:new o(function(c){c(a)})}return new(o||(o=Promise))(function(a,c){function l(d){try{u(i.next(d))}catch(h){c(h)}}function f(d){try{u(i.throw(d))}catch(h){c(h)}}function u(d){d.done?a(d.value):s(d.value).then(l,f)}u((i=i.apply(t,n||[])).next())})},wR=function(t,n){var o={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,s,a,c;return c={next:l(0),throw:l(1),return:l(2)},typeof Symbol=="function"&&(c[Symbol.iterator]=function(){return this}),c;function l(u){return function(d){return f([u,d])}}function f(u){if(i)throw new TypeError("Generator is already executing.");for(;o;)try{if(i=1,s&&(a=u[0]&2?s.return:u[0]?s.throw||((a=s.return)&&a.call(s),0):s.next)&&!(a=a.call(s,u[1])).done)return a;switch(s=0,a&&(u=[u[0]&2,a.value]),u[0]){case 0:case 1:a=u;break;case 4:return o.label++,{value:u[1],done:!1};case 5:o.label++,s=u[1],u=[0];continue;case 7:u=o.ops.pop(),o.trys.pop();continue;default:if(a=o.trys,!(a=a.length>0&&a[a.length-1])&&(u[0]===6||u[0]===2)){o=0;continue}if(u[0]===3&&(!a||u[1]>a[0]&&u[1]<a[3])){o.label=u[1];break}if(u[0]===6&&o.label<a[1]){o.label=a[1],a=u;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(u);break}a[2]&&o.ops.pop(),o.trys.pop();continue}u=n.call(t,o)}catch(d){u=[6,d],s=0}finally{i=a=0}if(u[0]&5)throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}},kR=function(t,n,o,i){i===void 0&&(i=o),t[i]=n[o]},bR=function(t,n){for(var o in t)o!=="default"&&!n.hasOwnProperty(o)&&(n[o]=t[o])},T4=function(t){var n=typeof Symbol=="function"&&Symbol.iterator,o=n&&t[n],i=0;if(o)return o.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},z9=function(t,n){var o=typeof Symbol=="function"&&t[Symbol.iterator];if(!o)return t;var i=o.call(t),s,a=[],c;try{for(;(n===void 0||n-- >0)&&!(s=i.next()).done;)a.push(s.value)}catch(l){c={error:l}}finally{try{s&&!s.done&&(o=i.return)&&o.call(i)}finally{if(c)throw c.error}}return a},vR=function(){for(var t=[],n=0;n<arguments.length;n++)t=t.concat(z9(arguments[n]));return t},xR=function(){for(var t=0,n=0,o=arguments.length;n<o;n++)t+=arguments[n].length;for(var i=Array(t),s=0,n=0;n<o;n++)for(var a=arguments[n],c=0,l=a.length;c<l;c++,s++)i[s]=a[c];return i},Hf=function(t){return this instanceof Hf?(this.v=t,this):new Hf(t)},ER=function(t,n,o){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i=o.apply(t,n||[]),s,a=[];return s={},c("next"),c("throw"),c("return"),s[Symbol.asyncIterator]=function(){return this},s;function c(m){i[m]&&(s[m]=function(w){return new Promise(function(y,b){a.push([m,w,y,b])>1||l(m,w)})})}function l(m,w){try{f(i[m](w))}catch(y){h(a[0][3],y)}}function f(m){m.value instanceof Hf?Promise.resolve(m.value.v).then(u,d):h(a[0][2],m)}function u(m){l("next",m)}function d(m){l("throw",m)}function h(m,w){m(w),a.shift(),a.length&&l(a[0][0],a[0][1])}},SR=function(t){var n,o;return n={},i("next"),i("throw",function(s){throw s}),i("return"),n[Symbol.iterator]=function(){return this},n;function i(s,a){n[s]=t[s]?function(c){return(o=!o)?{value:Hf(t[s](c)),done:s==="return"}:a?a(c):c}:a}},_R=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=t[Symbol.asyncIterator],o;return n?n.call(t):(t=typeof T4=="function"?T4(t):t[Symbol.iterator](),o={},i("next"),i("throw"),i("return"),o[Symbol.asyncIterator]=function(){return this},o);function i(a){o[a]=t[a]&&function(c){return new Promise(function(l,f){c=t[a](c),s(l,f,c.done,c.value)})}}function s(a,c,l,f){Promise.resolve(f).then(function(u){a({value:u,done:l})},c)}},AR=function(t,n){return Object.defineProperty?Object.defineProperty(t,"raw",{value:n}):t.raw=n,t},TR=function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var o in t)Object.hasOwnProperty.call(t,o)&&(n[o]=t[o]);return n.default=t,n},IR=function(t){return t&&t.__esModule?t:{default:t}},CR=function(t,n){if(!n.has(t))throw new TypeError("attempted to get private field on non-instance");return n.get(t)},PR=function(t,n,o){if(!n.has(t))throw new TypeError("attempted to set private field on non-instance");return n.set(t,o),o},r("__extends",fR),r("__assign",dR),r("__rest",hR),r("__decorate",pR),r("__param",mR),r("__metadata",gR),r("__awaiter",yR),r("__generator",wR),r("__exportStar",bR),r("__createBinding",kR),r("__values",T4),r("__read",z9),r("__spread",vR),r("__spreadArrays",xR),r("__await",Hf),r("__asyncGenerator",ER),r("__asyncDelegator",SR),r("__asyncValues",_R),r("__makeTemplateObject",AR),r("__importStar",TR),r("__importDefault",IR),r("__classPrivateFieldGet",CR),r("__classPrivateFieldSet",PR)})});var tz={};Lt(tz,{DEFAULT_SESSION_MAX_PROVIDERS:()=>$8,DEFAULT_SESSION_MIN_PROVIDERS:()=>F8,InsufficientProvidersError:()=>fh,InvalidCodecError:()=>j8,NoRoutersAvailableError:()=>Zs,UnknownCodecError:()=>hh,UnknownHashAlgorithmError:()=>dh,createHelia:()=>ez,heliaDefaults:()=>Vv,libp2pDefaults:()=>n6});var Yv=Symbol.for("@libp2p/connection");var Pi=Symbol.for("@libp2p/content-routing");var qr=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},tm=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},rm=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},P=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},ki=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},id=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}},sd=class extends Error{static name="UnsupportedOperationError";constructor(e="Unsupported operation"){super(e),this.name="UnsupportedOperationError"}};var $a=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},Bl=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},wo=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},Ml=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}};var Go=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},ad=class extends Error{static name="StreamBufferError";constructor(e="The stream buffer was full"){super(e),this.name="StreamBufferError"}},Xe=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},Ul=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},Xo=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},nm=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},Is=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Fl=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},Be=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},ja=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},Yo=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},_n=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Cs=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},Ka=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},cd=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},om=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},$l=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},bo=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var im=class extends Event{data;constructor(e,t){super("message",t),this.data=e}},Ps=class extends Event{error;local;constructor(e,t,n){super("close",n),this.error=t,this.local=e}},sm=class extends Ps{constructor(e,t){super(!0,e,t)}},am=class extends Ps{constructor(e,t){super(!1,e,t)}};var Va=Symbol.for("@libp2p/peer-discovery");var cm=Symbol.for("@libp2p/peer-id");function Rr(r){return!!r?.[cm]}var Oi=Symbol.for("@libp2p/peer-routing");var Ha="keep-alive";function lm(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function er(...r){let e=[];for(let t of r)lm(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function or(...r){let e=[];for(let t of r)lm(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}var ks=Symbol.for("@libp2p/transport");var ld;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ld||(ld={}));var _e=class extends EventTarget{#e=new Map;constructor(){super()}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:i})=>i!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};var qe=Symbol.for("@libp2p/service-capabilities"),An=Symbol.for("@libp2p/service-dependencies");var f6={};Lt(f6,{base32:()=>ir,base32hex:()=>VN,base32hexpad:()=>qN,base32hexpadupper:()=>WN,base32hexupper:()=>HN,base32pad:()=>jN,base32padupper:()=>KN,base32upper:()=>$N,base32z:()=>zN});var Fz=new Uint8Array(0);function Qv(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function vo(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function Zv(r){return new TextEncoder().encode(r)}function Jv(r){return new TextDecoder().decode(r)}function NN(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var i=r.charAt(o),s=i.charCodeAt(0);if(t[s]!==255)throw new TypeError(i+" is ambiguous");t[s]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),f=Math.log(256)/Math.log(a);function u(m){if(m instanceof Uint8Array||(ArrayBuffer.isView(m)?m=new Uint8Array(m.buffer,m.byteOffset,m.byteLength):Array.isArray(m)&&(m=Uint8Array.from(m))),!(m instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(m.length===0)return"";for(var w=0,y=0,b=0,N=m.length;b!==N&&m[b]===0;)b++,w++;for(var O=(N-b)*f+1>>>0,V=new Uint8Array(O);b!==N;){for(var Q=m[b],Z=0,se=O-1;(Q!==0||Z<y)&&se!==-1;se--,Z++)Q+=256*V[se]>>>0,V[se]=Q%a>>>0,Q=Q/a>>>0;if(Q!==0)throw new Error("Non-zero carry");y=Z,b++}for(var C=O-y;C!==O&&V[C]===0;)C++;for(var T=c.repeat(w);C<O;++C)T+=r.charAt(V[C]);return T}function d(m){if(typeof m!="string")throw new TypeError("Expected String");if(m.length===0)return new Uint8Array;var w=0;if(m[w]!==" "){for(var y=0,b=0;m[w]===c;)y++,w++;for(var N=(m.length-w)*l+1>>>0,O=new Uint8Array(N);m[w];){var V=t[m.charCodeAt(w)];if(V===255)return;for(var Q=0,Z=N-1;(V!==0||Q<b)&&Z!==-1;Z--,Q++)V+=a*O[Z]>>>0,O[Z]=V%256>>>0,V=V/256>>>0;if(V!==0)throw new Error("Non-zero carry");b=Q,w++}if(m[w]!==" "){for(var se=N-b;se!==N&&O[se]===0;)se++;for(var C=new Uint8Array(y+(N-se)),T=y;se!==N;)C[T++]=O[se++];return C}}}function h(m){var w=d(m);if(w)return w;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:d,decode:h}}var LN=NN,BN=LN,ex=BN;var a6=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},c6=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let o=t.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return tx(this,e)}},l6=class{decoders;constructor(e){this.decoders=e}or(e){return tx(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function tx(r,e){return new l6({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var u6=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new a6(e,t,n),this.decoder=new c6(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function jl({name:r,prefix:e,encode:t,decode:n}){return new u6(r,e,t,n)}function Os({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=ex(t,r);return jl({prefix:e,name:r,encode:n,decode:i=>vo(o(i))})}function MN(r,e,t,n){let o=r.length;for(;r[o-1]==="=";)--o;let i=new Uint8Array(o*t/8|0),s=0,a=0,c=0;for(let l=0;l<o;++l){let f=e[r[l]];if(f===void 0)throw new SyntaxError(`Non-${n} character`);a=a<<t|f,s+=t,s>=8&&(s-=8,i[c++]=255&a>>s)}if(s>=t||(255&a<<8-s)!==0)throw new SyntaxError("Unexpected end of data");return i}function UN(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,i="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,i+=e[o&a>>s];if(s!==0&&(i+=e[o&a<<t-s]),n)for(;(i.length*t&7)!==0;)i+="=";return i}function FN(r){let e={};for(let t=0;t<r.length;++t)e[r[t]]=t;return e}function Bt({name:r,prefix:e,bitsPerChar:t,alphabet:n}){let o=FN(n);return jl({prefix:e,name:r,encode(i){return UN(i,n,t)},decode(i){return MN(i,o,t,r)}})}var ir=Bt({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),$N=Bt({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),jN=Bt({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),KN=Bt({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),VN=Bt({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),HN=Bt({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),qN=Bt({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),WN=Bt({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),zN=Bt({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var d6={};Lt(d6,{base58btc:()=>ft,base58flickr:()=>GN});var ft=Os({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),GN=Os({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var h6={};Lt(h6,{base64:()=>qt,base64pad:()=>ud,base64url:()=>qa,base64urlpad:()=>XN});var qt=Bt({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),ud=Bt({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),qa=Bt({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),XN=Bt({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});function YN(r,e){if(typeof r=="string")return QN(r);if(typeof r=="number")return eL(r,e);throw Error(`Value provided to ms() must be a string or number. value=${JSON.stringify(r)}`)}var um=YN;function QN(r){if(typeof r!="string"||r.length===0||r.length>100)throw Error(`Value provided to ms.parse() must be a string with length between 1 and 99. value=${JSON.stringify(r)}`);let e=/^(?<value>-?\d*\.?\d+) *(?<unit>milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|months?|mo|years?|yrs?|y)?$/i.exec(r);if(!e?.groups)return NaN;let{value:t,unit:n="ms"}=e.groups,o=parseFloat(t),i=n.toLowerCase();switch(i){case"years":case"year":case"yrs":case"yr":case"y":return o*315576e5;case"months":case"month":case"mo":return o*26298e5;case"weeks":case"week":case"w":return o*6048e5;case"days":case"day":case"d":return o*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return o*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return o*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return o*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:throw Error(`Unknown unit "${i}" provided to ms.parse(). value=${JSON.stringify(r)}`)}}function ZN(r){let e=Math.abs(r);return e>=315576e5?`${Math.round(r/315576e5)}y`:e>=26298e5?`${Math.round(r/26298e5)}mo`:e>=6048e5?`${Math.round(r/6048e5)}w`:e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function JN(r){let e=Math.abs(r);return e>=315576e5?Wa(r,e,315576e5,"year"):e>=26298e5?Wa(r,e,26298e5,"month"):e>=6048e5?Wa(r,e,6048e5,"week"):e>=864e5?Wa(r,e,864e5,"day"):e>=36e5?Wa(r,e,36e5,"hour"):e>=6e4?Wa(r,e,6e4,"minute"):e>=1e3?Wa(r,e,1e3,"second"):`${r} ms`}function eL(r,e){if(typeof r!="number"||!Number.isFinite(r))throw Error("Value provided to ms.format() must be of type number.");return e?.long?JN(r):ZN(r)}function Wa(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function p6(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=um,t.destroy=l,Object.keys(r).forEach(f=>{t[f]=r[f]}),t.names=[],t.skips=[],t.formatters={};function e(f){let u=0;for(let d=0;d<f.length;d++)u=(u<<5)-u+f.charCodeAt(d),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(f,u){let d,h=null,m,w;function y(...b){if(!y.enabled)return;let N=y,O=Number(new Date),V=O-(d||O);N.diff=V,N.prev=d,N.curr=O,d=O,b[0]=t.coerce(b[0]),typeof b[0]!="string"&&b.unshift("%O");let Q=0;b[0]=b[0].replace(/%([a-zA-Z%])/g,(se,C)=>{if(se==="%%")return"%";Q++;let T=t.formatters[C];if(typeof T=="function"){let K=b[Q];se=T.call(N,K),b.splice(Q,1),Q--}return se}),t.formatArgs.call(N,b),u?.onLog!=null&&u.onLog(...b),(N.log||t.log).apply(N,b)}return y.namespace=f,y.useColors=t.useColors(),y.color=t.selectColor(f),y.extend=n,y.destroy=t.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(m!==t.namespaces&&(m=t.namespaces,w=t.enabled(f)),w),set:b=>{h=b}}),typeof t.init=="function"&&t.init(y),y}function n(f,u){let d=t(this.namespace+(typeof u>"u"?":":u)+f);return d.log=this.log,d}function o(f){t.save(f),t.namespaces=f,t.names=[],t.skips=[];let u,d=(typeof f=="string"?f:"").split(/[\s,]+/),h=d.length;for(u=0;u<h;u++)d[u]&&(f=d[u].replace(/\*/g,".*?"),f[0]==="-"?t.skips.push(new RegExp("^"+f.substr(1)+"$")):t.names.push(new RegExp("^"+f+"$")))}function i(){let f=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),f}function s(f){if(f[f.length-1]==="*")return!0;let u,d;for(u=0,d=t.skips.length;u<d;u++)if(t.skips[u].test(f))return!1;for(u=0,d=t.names.length;u<d;u++)if(t.names[u].test(f))return!0;return!1}function a(f){return f.toString().substring(2,f.toString().length-2).replace(/\.\*\?$/,"*")}function c(f){return f instanceof Error?f.stack??f.message:f}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.setupFormatters(t.formatters),t.enable(t.load()),t}var fm=aL(),tL=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function rL(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function nL(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+um(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}var oL=console.debug??console.log??(()=>{});function iL(r){try{r?fm?.setItem("debug",r):fm?.removeItem("debug")}catch{}}function sL(){let r;try{r=fm?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function aL(){try{return localStorage}catch{}}function cL(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var rx=p6({formatArgs:nL,save:iL,load:sL,useColors:rL,setupFormatters:cL,colors:tL,storage:fm,log:oL});var sn=rx;sn.formatters.b=r=>r==null?"undefined":ft.baseEncode(r);sn.formatters.t=r=>r==null?"undefined":ir.baseEncode(r);sn.formatters.m=r=>r==null?"undefined":qt.baseEncode(r);sn.formatters.p=r=>r==null?"undefined":r.toString();sn.formatters.c=r=>r==null?"undefined":r.toString();sn.formatters.k=r=>r==null?"undefined":r.toString();sn.formatters.a=r=>r==null?"undefined":r.toString();function nx(r,e=""){let t=ox(r.message),n=ox(r.stack);return t!=null&&n!=null?n.includes(t)?`${n.split(`
4
4
  `).join(`
5
5
  ${e}`)}`:`${t}
6
6
  ${e}${n.split(`
@@ -18,7 +18,7 @@ ${e}[Error list was empty]`,t.trim()}return nx(r,e)}sn.formatters.e=r=>r==null?"
18
18
  HTTP/1.1 %d %s
19
19
  %s
20
20
  `,d.status,d.statusText,[...d.headers.entries()].map(([m,w])=>`${m}: ${w}`).join(`
21
- `)),!d.ok)throw this.#t++,new Error(`Unable to fetch raw block for CID ${e} from gateway ${this.url}, recieved ${d.status} ${d.statusText}`);let h=await hT(d,n,{signal:s.signal,log:this.log});return this.#a++,h}),this.#c.set(i,c)}return await c}catch(c){throw t?.aborted===!0?new Error(`Fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`Unable to fetch raw block for CID ${e} - ${c.message}`))}finally{t?.removeEventListener("abort",a),this.#c.delete(i)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#a/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#a,pendingResponses:this.#c.size}}toString(){return`TrustlessGateway(${this.url})`}};var Ow=class extends Ac{routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??R2,this.allowLocal=t.allowLocal??D2,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*O2(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}async convertToProvider(e,t){if(Rr(e))return;let n=kw(Array.isArray(e)?e:[e],this.allowInsecure,this.allowLocal);if(n.length===0)return;let o=ea(n[0]);return new $u(o,{logger:this.logger,transformRequestInit:this.transformRequestInit})}};function mT(r,e){return new Ow(r,e)}var N2=class{allowInsecure;allowLocal;transformRequestInit;routing;log;logger;constructor(e,t={}){this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.logger=e.logger,this.routing=e.routing,this.allowInsecure=t.allowInsecure??R2,this.allowLocal=t.allowLocal??D2,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of O2(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})){this.log("getting block for %c from %s",e,o.url);try{let i=await o.getRawBlock(e,t);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(i)}catch(s){this.log.error("failed to validate block for %c from %s - %e",e,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s - %e",e,o.url,i),i instanceof Error?n.push(i):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${o.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,o.url);break}}}throw n.length>0?new AggregateError(n,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}createSession(e={}){return mT({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var R2=!1,D2=!1,pT=2097152;function Rw(r={}){return e=>new N2(e,r)}async function*Ih(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var sj=nr(L2(),1);var Lo=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},B2=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},ju=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},M2=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},U2=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},F2=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},Ch=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var un;(function(r){let e;(function(o){o.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(o){o[o.EOL=0]="EOL"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.value!=null&&(i.uint32(10),i.bytes(o.value)),o.signatureV1!=null&&(i.uint32(18),i.bytes(o.signatureV1)),o.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(o.validityType,i)),o.validity!=null&&(i.uint32(34),i.bytes(o.validity)),o.sequence!=null&&(i.uint32(40),i.uint64(o.sequence)),o.ttl!=null&&(i.uint32(48),i.uint64(o.ttl)),o.pubKey!=null&&(i.uint32(58),i.bytes(o.pubKey)),o.signatureV2!=null&&(i.uint32(66),i.bytes(o.signatureV2)),o.data!=null&&(i.uint32(74),i.bytes(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.value=o.bytes();break}case 2:{a.signatureV1=o.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(o);break}case 4:{a.validity=o.bytes();break}case 5:{a.sequence=o.uint64();break}case 6:{a.ttl=o.uint64();break}case 7:{a.pubKey=o.bytes();break}case 8:{a.signatureV2=o.bytes();break}case 9:{a.data=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(un||(un={}));var tj=zn("ipns:utils"),gT=B("/ipns/");var rj=0,nj=18;function yT(r){let e;if(r.pubKey!=null)try{e=Vt(r.pubKey)}catch(t){throw tj.error(t),t}if(e!=null)return e}function wT(r){let e=B("ipns-signature:");return gt([e,r])}function Ph(r){return"signatureV1"in r?un.encode({value:B(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:B(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):un.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function si(r){let e=un.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw new Lo("Missing data or signatureV2");let t=bT(e.data),n=oj(t.Value),o=j(t.Validity);if(e.value!=null&&e.signatureV1!=null)return ij(e),{value:n,validityType:un.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:un.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}function kh(r){return gt([gT,r.bytes])}function Ku(r){let e=lt(r.slice(gT.length));if(!$2(e,rj)&&!$2(e,nj))throw new Is("Multihash in IPNS key was not identity or sha2-256");return e}function bT(r){let e=Nn(r);if(e.ValidityType===0)e.ValidityType=un.ValidityType.EOL;else throw new ju("The validity type is unsupported");return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e}function oj(r){let e=j(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${ce.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${ce.parse(e).toV1().toString()}`}catch{}throw new U2("Value must be a valid content path starting with /")}function ij(r){if(r.data==null)throw new F2("Record data is missing");let e=bT(r.data);if(!we(e.Value,r.value??new Uint8Array(0)))throw new Lo('Field "value" did not match between protobuf and CBOR');if(!we(e.Validity,r.validity??new Uint8Array(0)))throw new Lo('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new Lo('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new Lo('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new Lo('Field "ttl" did not match between protobuf and CBOR')}function $2(r,e){return r.code===e}var zle=zn("ipns"),Gle=300*1e9,aj="/ipns/",Xle=aj.length;var vT=nr(L2(),1);var j2=zn("ipns:validator"),cj=1024*10;async function lj(r,e){let t=si(e),n;try{let o=wT(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw j2.error("record signature verification failed"),new Lo("Record signature verification failed");if(t.validityType===un.ValidityType.EOL){if(vT.default.fromString(t.validity).toDate().getTime()<Date.now())throw j2.error("record has expired"),new B2("record has expired")}else if(t.validityType!=null)throw j2.error("the validity type is unsupported"),new ju("The validity type is unsupported");j2("ipns record for %s is valid",t.value)}async function K2(r,e){if(e.byteLength>cj)throw new M2("The record is too large");let t=Ku(r),n;$2(t,0)&&(n=Fm(t));let o=si(e),i=yT(o)??n;if(i==null)throw new Ch("Could not extract public key from IPNS record or routing key");let s=kh(i.toMultihash());if(!we(s,r))throw new Ch("Embedded public key did not match routing key");await lj(i,e)}var V2=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Vu(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let i of r){if(typeof i=="string"&&(i=new TextEncoder().encode(i)),ql(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new V2("Incoming message too long");let s=o.split(t);o=s.pop()??"";for(let a=0;a<s.length;a++)yield JSON.parse(s[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}function uj(r){return r[Symbol.asyncIterator]!=null}function fj(r){if(uj(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var xT=fj;function Nw(r){return{url:"https://delegated-ipfs.dev",filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var ET="[a-fA-F\\d:]",ta=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${ET})|(?<=${ET})(?=\\s|$))`:"",Bo="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",Gt="[a-fA-F\\d]{1,4}",H2=`
21
+ `)),!d.ok)throw this.#t++,new Error(`Unable to fetch raw block for CID ${e} from gateway ${this.url}, recieved ${d.status} ${d.statusText}`);let h=await hT(d,n,{signal:s.signal,log:this.log});return this.#a++,h}),this.#c.set(i,c)}return await c}catch(c){throw t?.aborted===!0?new Error(`Fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`Unable to fetch raw block for CID ${e} - ${c.message}`))}finally{t?.removeEventListener("abort",a),this.#c.delete(i)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#a/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#a,pendingResponses:this.#c.size}}toString(){return`TrustlessGateway(${this.url})`}};var Ow=class extends Ac{routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??R2,this.allowLocal=t.allowLocal??D2,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*O2(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}async convertToProvider(e,t){if(Rr(e))return;let n=kw(Array.isArray(e)?e:[e],this.allowInsecure,this.allowLocal);if(n.length===0)return;let o=ea(n[0]);return new $u(o,{logger:this.logger,transformRequestInit:this.transformRequestInit})}};function mT(r,e){return new Ow(r,e)}var N2=class{allowInsecure;allowLocal;transformRequestInit;routing;log;logger;constructor(e,t={}){this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.logger=e.logger,this.routing=e.routing,this.allowInsecure=t.allowInsecure??R2,this.allowLocal=t.allowLocal??D2,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of O2(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})){this.log("getting block for %c from %s",e,o.url);try{let i=await o.getRawBlock(e,t);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(i)}catch(s){this.log.error("failed to validate block for %c from %s - %e",e,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s - %e",e,o.url,i),i instanceof Error?n.push(i):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${o.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,o.url);break}}}throw n.length>0?new AggregateError(n,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}createSession(e={}){return mT({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var R2=!1,D2=!1,pT=2097152;function Rw(r={}){return e=>new N2(e,r)}async function*Ih(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var sj=nr(L2(),1);var Lo=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},B2=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},ju=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},M2=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},U2=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},F2=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},Ch=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var un;(function(r){let e;(function(o){o.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(o){o[o.EOL=0]="EOL"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.value!=null&&(i.uint32(10),i.bytes(o.value)),o.signatureV1!=null&&(i.uint32(18),i.bytes(o.signatureV1)),o.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(o.validityType,i)),o.validity!=null&&(i.uint32(34),i.bytes(o.validity)),o.sequence!=null&&(i.uint32(40),i.uint64(o.sequence)),o.ttl!=null&&(i.uint32(48),i.uint64(o.ttl)),o.pubKey!=null&&(i.uint32(58),i.bytes(o.pubKey)),o.signatureV2!=null&&(i.uint32(66),i.bytes(o.signatureV2)),o.data!=null&&(i.uint32(74),i.bytes(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.value=o.bytes();break}case 2:{a.signatureV1=o.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(o);break}case 4:{a.validity=o.bytes();break}case 5:{a.sequence=o.uint64();break}case 6:{a.ttl=o.uint64();break}case 7:{a.pubKey=o.bytes();break}case 8:{a.signatureV2=o.bytes();break}case 9:{a.data=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(un||(un={}));var tj=zn("ipns:utils"),gT=B("/ipns/");var rj=0,nj=18;function yT(r){let e;if(r.pubKey!=null)try{e=Vt(r.pubKey)}catch(t){throw tj.error(t),t}if(e!=null)return e}function wT(r){let e=B("ipns-signature:");return gt([e,r])}function Ph(r){return"signatureV1"in r?un.encode({value:B(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:B(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):un.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function si(r){let e=un.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw new Lo("Missing data or signatureV2");let t=bT(e.data),n=oj(t.Value),o=j(t.Validity);if(e.value!=null&&e.signatureV1!=null)return ij(e),{value:n,validityType:un.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:un.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}function kh(r){return gt([gT,r.bytes])}function Ku(r){let e=lt(r.slice(gT.length));if(!$2(e,rj)&&!$2(e,nj))throw new Is("Multihash in IPNS key was not identity or sha2-256");return e}function bT(r){let e=Nn(r);if(e.ValidityType===0)e.ValidityType=un.ValidityType.EOL;else throw new ju("The validity type is unsupported");return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e}function oj(r){let e=j(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${ce.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${ce.parse(e).toV1().toString()}`}catch{}throw new U2("Value must be a valid content path starting with /")}function ij(r){if(r.data==null)throw new F2("Record data is missing");let e=bT(r.data);if(!we(e.Value,r.value??new Uint8Array(0)))throw new Lo('Field "value" did not match between protobuf and CBOR');if(!we(e.Validity,r.validity??new Uint8Array(0)))throw new Lo('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new Lo('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new Lo('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new Lo('Field "ttl" did not match between protobuf and CBOR')}function $2(r,e){return r.code===e}var zle=zn("ipns"),Gle=300*1e9,aj="/ipns/",Xle=aj.length;var vT=nr(L2(),1);var j2=zn("ipns:validator"),cj=1024*10;async function lj(r,e){let t=si(e),n;try{let o=wT(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw j2.error("record signature verification failed"),new Lo("Record signature verification failed");if(t.validityType===un.ValidityType.EOL){if(vT.default.fromString(t.validity).toDate().getTime()<Date.now())throw j2.error("record has expired"),new B2("record has expired")}else if(t.validityType!=null)throw j2.error("the validity type is unsupported"),new ju("The validity type is unsupported");j2("ipns record for %s is valid",t.value)}async function K2(r,e){if(e.byteLength>cj)throw new M2("The record is too large");let t=Ku(r),n;$2(t,0)&&(n=Fm(t));let o=si(e),i=yT(o)??n;if(i==null)throw new Ch("Could not extract public key from IPNS record or routing key");let s=kh(i.toMultihash());if(!we(s,r))throw new Ch("Embedded public key did not match routing key");await lj(i,e)}var V2=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Vu(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let i of r){if(typeof i=="string"&&(i=new TextEncoder().encode(i)),ql(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new V2("Incoming message too long");let s=o.split(t);o=s.pop()??"";for(let a=0;a<s.length;a++)yield JSON.parse(s[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var Oc=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},no=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function uj(r){return r[Symbol.asyncIterator]!=null}function fj(r){if(uj(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var xT=fj;var ET=B("/ipns/");function ST(r){return we(r.subarray(0,ET.byteLength),ET)}var H2=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){try{yield*to(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[],routing:"delegated-http-routing-v1"}))}catch(n){if(n instanceof Xe)return;throw n}}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!ST(e))return;let o=Ku(e),i=ce.createV1(114,o),s=si(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!ST(e))throw new Xe("Not found");let n=Ku(e),o=ce.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return Ph(i)}catch(i){throw i.name==="BadResponseError"?new Xe("Not found"):i}}toString(){return`DelegatedRoutingV1HttpApiClientContentRouting(${this.client.url})`}},q2=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await xT(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Xe("Not found")}async*getClosestPeers(e,t={}){let n;try{n=ce.decode(e)}catch{n=Ut(Pt.decode(e))}for await(let o of this.client.getClosestPeers(n,t))yield{id:o.ID,multiaddrs:o.Addrs??[]}}toString(){return`DelegatedRoutingV1HttpApiClientPeerRouting(${this.client.url})`}};var W2={concurrentRequests:4,timeout:3e4,cacheTTL:300*1e3,cacheName:"delegated-routing-v1-cache"},z2=class{url;started;httpQueue;shutDownController;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;log;constructor(e,t){this.log=e.logger.forComponent("delegated-routing-v1-http-api-client"),this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new za({concurrency:t.concurrentRequests??W2.concurrentRequests}),this.inFlightRequests=new Map,this.url=t.url instanceof URL?t.url:new URL(t.url),this.timeout=t.timeout??W2.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new H2(this),this.peerRouting=new q2(this),this.cacheName=t.cacheName??W2.cacheName,this.cacheTTL=t.cacheTTL??W2.cacheTTL}get[Pi](){return this.contentRouting}get[Oi](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&this.log("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){this.log("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=De([this.shutDownController.signal,n,t.signal]);let i=Ue(),s=Ue(),a=0;this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let c=new URL(`${this.url}routing/v1/providers/${e}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{accept:"application/x-ndjson, application/json;q=0.8"},signal:o},f=await this.#r(c.toString(),l);if(!f.ok){if(f.status===404)return;throw f.status===422?new Oc("Request does not conform to schema or semantic constraints"):new no(`Unexpected status code: ${f.status}`)}let u=f.headers.get("Content-Type");if(u==null)throw new no("No Content-Type header received");if(f.body==null){if(u!=="application/x-ndjson")throw new no("Routing response had no body");return}if(u.startsWith("application/json")){let h=(await f.json()).Providers??[];for(let m of h){let w=this.#e(m);w!=null&&(a++,yield w)}}else if(u.includes("application/x-ndjson"))for await(let d of Vu(Ih(f.body))){let h=this.#e(d);h!=null&&(a++,yield h)}else throw new no(`Unsupported Content-Type: ${u}`)}finally{o.clear(),s.resolve(),this.log("getProviders finished found %d providers for %c",a,e)}}async*getPeers(e,t={}){this.log("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=De([this.shutDownController.signal,n,t.signal]);let i=Ue(),s=Ue();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.url}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)return;if(l.status===422)throw new Oc("Request does not conform to schema or semantic constraints");if(l.body==null)throw new no("Routing response had no body");if(l.headers.get("Content-Type")?.startsWith("application/json")){let d=(await l.json()).Peers??[];for(let h of d){let m=this.#e(h);m!=null&&(yield m)}}else for await(let u of Vu(Ih(l.body))){let d=this.#e(u);d!=null&&(yield d)}}catch(a){this.log.error("getPeers errored - %e",a)}finally{o.clear(),s.resolve(),this.log("getPeers finished: %c",e)}}async*getClosestPeers(e,t={}){let n;if(Rr(e))n=e.toCID().toString();else if(ce.asCID(e)===e||e instanceof ce)n=e.toV1().toString();else throw new P("Key must be CID or PeerId");this.log("getClosestPeers starts: %s",n);let o=AbortSignal.timeout(this.timeout),i=De([this.shutDownController.signal,o,t.signal]);let s=Ue(),a=Ue();this.httpQueue.add(async()=>(s.resolve(),a.promise));try{await s.promise;let c=new URL(`${this.url}routing/v1/dht/closest/peers/${n}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{Accept:"application/x-ndjson"},signal:i},f=await this.#r(c.toString(),l);if(f.status===404)return;if(f.status===422)throw new Oc("Request does not conform to schema or semantic constraints");if(f.body==null)throw new no("Routing response had no body");if(f.headers.get("Content-Type")?.startsWith("application/json")){let h=(await f.json()).Peers??[];for(let m of h){let w=this.#e(m);w!=null&&(yield w)}}else for await(let d of Vu(Ih(f.body))){let h=this.#e(d);h!=null&&(yield h)}}catch(c){this.log.error("getClosestPeers errored - %e",c)}finally{i.clear(),a.resolve(),this.log("getClosestPeers finished: %s",n)}}async getIPNS(e,t={}){this.log("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=De([this.shutDownController.signal,n,t.signal]);let i=Ue(),s=Ue();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.url}routing/v1/ipns/${e}`;try{await i.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(this.log("getIPNS GET %s %d",a,l.status),l.status===404)throw new Xe("No matching records found");if(l.status===422)throw new Oc("Request does not conform to schema or semantic constraints");if(!l.ok)throw new no(`Unexpected status code: ${l.status}`);let f=l.headers.get("Content-Type");if(f==null||!f.includes("application/vnd.ipfs.ipns-record"))throw new Xe("No matching records found");if(l.body==null)throw new no("GET ipns response had no body");let u=await l.arrayBuffer(),d=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await K2(kh(e.multihash),d),si(d)}catch(c){throw this.log.error("getIPNS GET %s error - %e",a,c),c}finally{o.clear(),s.resolve(),this.log("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){this.log("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=De([this.shutDownController.signal,o,n.signal]);let s=Ue(),a=Ue();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.url}routing/v1/ipns/${e}`;try{await s.promise;let l=Ph(t),f={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},u=await this.#r(c,f);if(this.log("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new no("PUT ipns response had status other than 200")}catch(l){throw this.log.error("putIPNS PUT %s error - %e",c,l.stack),l}finally{i.clear(),a.resolve(),this.log("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(ie)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:yt(e.ID),Addrs:n,Protocols:t}}catch(t){this.log.error("could not conform record to peer schema - %e",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return this.log("returning cached response for %s",o),this.logResponse(c),c;this.log("evicting cached response for %s",o),await this.cache?.delete(e)}else this.cache!=null&&this.log("cache miss for %s",o)}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return this.log("deduplicating outgoing request for %s",o),c.clone()}this.log("outgoing request:"),this.logRequest(e,t);let s=fetch(e,t).then(async c=>{if(this.log("incoming response:"),this.logResponse(c),this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,f=new Headers(c.headers);f.set("x-cache-expires",l.toString());let u=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:f});await this.cache.put(e,u)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,s),await s}toString(){return`DefaultDelegatedRoutingV1HttpApiClient(${this.url})`}logRequest(e,t){let n=new Headers(t.headers);this.log("%s %s HTTP/1.1",t.method??"GET",e);for(let[o,i]of n.entries())this.log("%s: %s",o,i)}logResponse(e){this.log("HTTP/1.1 %d %s",e.status,e.statusText);for(let[t,n]of e.headers.entries())this.log("%s: %s",t,n)}};function _T(r){return e=>new z2(e,r)}function Nw(r){return{url:"https://delegated-ipfs.dev",filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var AT="[a-fA-F\\d:]",ta=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${AT})|(?<=${AT})(?=\\s|$))`:"",Bo="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",Gt="[a-fA-F\\d]{1,4}",G2=`
22
22
  (?:
23
23
  (?:${Gt}:){7}(?:${Gt}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
24
24
  (?:${Gt}:){6}(?:${Bo}|:${Gt}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
@@ -29,7 +29,7 @@ HTTP/1.1 %d %s
29
29
  (?:${Gt}:){1}(?:(?::${Gt}){0,4}:${Bo}|(?::${Gt}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
30
30
  (?::(?:(?::${Gt}){0,5}:${Bo}|(?::${Gt}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
31
31
  )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
32
- `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),dj=new RegExp(`(?:^${Bo}$)|(?:^${H2}$)`),hj=new RegExp(`^${Bo}$`),pj=new RegExp(`^${H2}$`),Lw=r=>r&&r.exact?dj:new RegExp(`(?:${ta(r)}${Bo}${ta(r)})|(?:${ta(r)}${H2}${ta(r)})`,"g");Lw.v4=r=>r&&r.exact?hj:new RegExp(`${ta(r)}${Bo}${ta(r)}`,"g");Lw.v6=r=>r&&r.exact?pj:new RegExp(`${ta(r)}${H2}${ta(r)}`,"g");var Bw=Lw;function Mw(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function ST(){return!1}var{toString:mj}=Object.prototype;function Uw(r){return mj.call(r)==="[object RegExp]"}var _T={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function Fw(r,e={}){if(!Uw(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(_T).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?_T[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function $w(r,e,{timeout:t}={}){try{return Mw(()=>Fw(r).test(e),{timeout:t})()}catch(n){if(ST(n))return!1;throw n}}var gj=15,yj=45,AT={timeout:400};function jw(r){return r.length>yj?!1:$w(Bw.v6({exact:!0}),r,AT)}function TT(r){return r.length>gj?!1:$w(Bw.v4({exact:!0}),r,AT)}var IT={http:"80",https:"443",ws:"80",wss:"443"},wj=["http","https","ws","wss"];function q2(r,e){e=e??{};let t=e.defaultDnsType??"dns",{scheme:n,hostname:o,port:i,path:s}=bj(r),a=[vj(o,t),xj(i,n),Ej(n)];s!=null&&a.push(Sj(s));let c="/"+a.filter(l=>!!l).reduce((l,f)=>l.concat(f),[]).join("/");return ie(c)}function bj(r){let[e]=r.split(":");wj.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o,pathname:i,search:s}=new URL(r);if(o==null||o===""){let c=_j(e);c!=null&&(o=c),c==null&&t==="http:"&&(o="80")}let a;return i!=null&&i!==""&&i!=="/"&&(i.startsWith("/")&&(i=i.substring(1)),a=i),s!=null&&s!==""&&(a=a??"",a+=s),{scheme:e,hostname:n,port:o,path:a}}function vj(r,e){if(!(r==null||r==="")){if(TT(r))return["ip4",r];if(jw(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(jw(t))return["ip6",t]}return[e,r]}}function xj(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function Ej(r){if(r.match(/^tcp$|^udp$/)==null)return r==="https"?["/tls/http"]:r==="wss"?["/tls/ws"]:[r]}function Sj(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function _j(r){if(!(r==null||r===""||IT[r]==null))return IT[r]}var Aj=["https://trustless-gateway.link","https://4everland.io"],Tj=2336;function Ij(r){return r=r.toString(),{id:Do(ce.createV1(Tj,Nr.digest(B(r)))),multiaddrs:[q2(r)]}}function Cj(r){return new URL(j(r.id.toMultihash().digest))}var Kw=class{gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??Aj).map(t=>Ij(t)),this.shuffle=e.shuffle??!0}async*findProviders(e,t){yield*(this.shuffle?this.gateways.toSorted(()=>Math.random()>.5?1:-1):this.gateways).map(n=>({...n,protocols:["transport-ipfs-gateway-http"],routing:"http-gateway-routing"}))}toString(){return`HTTPGatewayRouter([${this.gateways.map(e=>Cj(e)).join(", ")}])`}};function Vw(r={}){return new Kw(r)}var Hw=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}toString(){return"Libp2pRouter()"}};function qw(r){return new Hw(r)}function Pj(r){return r[Symbol.asyncIterator]!=null}function kj(r){if(Pj(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var Ji=kj;function Oj(r){return typeof r?.then=="function"}var Oh=class extends Xi{data;constructor(){super(),this.data=new Map}put(e,t,n){n?.signal?.throwIfAborted();let o;if(t instanceof Uint8Array)o=[t];else{let i=Ji(t);if(Oj(i))return i.then(s=>this._put(e,s,n));o=i}return this._put(e,o,n)}_put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(ir.encode(e.multihash.bytes),t),e}*get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(ir.encode(e.multihash.bytes));if(n==null)throw new eo;yield*n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(ir.encode(e.multihash.bytes))}async delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(ir.encode(e.multihash.bytes))}*getAll(e){e?.signal?.throwIfAborted();for(let[t,n]of this.data.entries())yield{cid:ce.createV1(Ga,lt(ir.decode(t))),bytes:(async function*(){yield*n})()},e?.signal?.throwIfAborted()}};var lfe=zn("blockstore:core:tiered");var CT="SHARDING";function Dj(r){return r[Symbol.asyncIterator]!=null}function Nj(r,e){return Dj(r)?(async function*(){yield*(await Ji(r)).sort(e)})():(function*(){yield*Ji(r).sort(e)})()}var W2=Nj;var es=class{put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield n}async*getMany(e,t={}){for await(let n of e)yield{key:n,value:await this.get(n,t)}}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await an(this.putMany(e,n)),e=[],await an(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null){let o=e.prefix;n=Ro(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Ro(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>W2(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=Ro(n,()=>o++>=i)}return e.limit!=null&&(n=Js(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Ro(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Ro(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>W2(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=Ro(n,()=>i++>=o)}return e.limit!=null&&(n=Js(n,e.limit)),n}};var Oc=class extends es{data;constructor(){super(),this.data=new Map}put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(e.toString(),t),e}get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(e.toString());if(n==null)throw new eo;return n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(e.toString())}delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(e.toString())}*_all(e,t){t?.signal?.throwIfAborted();for(let[n,o]of this.data.entries())yield{key:new ht(n),value:o},t?.signal?.throwIfAborted()}*_allKeys(e,t){t?.signal?.throwIfAborted();for(let n of this.data.keys())yield new ht(n),t?.signal?.throwIfAborted()}};var jfe=new ht(CT);var tde=zn("datastore:core:tiered");async function kT(r){if(r.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new P("Private network is enforced, but no protector was provided");return r}var Rh;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:ke(0),payloadType:ke(0),payload:ke(0),signature:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=t.bytes();break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(Rh||(Rh={}));var z2=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var Mn=class r{static createFromProtobuf=e=>{let t=Rh.decode(e),n=Vt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t,n)=>{if(t==null)throw new Error("Missing private key");let o=e.domain,i=e.codec,s=e.marshal(),a=OT(o,i,s),c=await t.sign(a.subarray(),n);return new r({publicKey:t.publicKey,payloadType:i,payload:s,signature:c})};static openAndCertify=async(e,t,n)=>{let o=r.createFromProtobuf(e);if(!await o.validate(t,n))throw new z2("Envelope signature is not valid for the given domain");return o};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:i}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=i}marshal(){return this.marshaled==null&&(this.marshaled=Rh.encode({publicKey:sr(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return e==null?!1:we(this.marshal(),e.marshal())}async validate(e,t){let n=OT(e,this.payloadType,this.payload);return this.publicKey.verify(n.subarray(),this.signature,t)}},OT=(r,e,t)=>{let n=B(r),o=Ur(n.byteLength),i=Ur(e.length),s=Ur(t.length);return new de(o,n,i,e,s,t)};var RT="libp2p-peer-record",DT=Uint8Array.from([3,1]);var Dh;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=Ie((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.multiaddr!=null&&i.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(i.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={multiaddr:ke(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let f=i.uint32();switch(f>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(f&7);break}}}return c})),o),n.encode=i=>Te(i,n.codec()),n.decode=(i,s)=>Ae(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=Ie((n,o,i={})=>{if(i.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(s,o);i.lengthDelimited!==!1&&o.ldelim()},(n,o,i={})=>{let s={peerId:ke(0),seq:0n,addresses:[]},a=o==null?n.len:n.pos+o;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{s.peerId=n.bytes();break}case 2:{s.seq=n.uint64();break}case 3:{if(i.limits?.addresses!=null&&s.addresses.length===i.limits.addresses)throw new dt('Decode error - map field "addresses" had too many elements');s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:i.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return s})),t),r.encode=n=>Te(n,r.codec()),r.decode=(n,o)=>Ae(n,r.codec(),o)})(Dh||(Dh={}));function NT(r,e){let t=(n,o)=>n.toString().localeCompare(o.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,o)=>e[o].equals(n)))}var Jr=class r{static createFromProtobuf=e=>{let t=Dh.decode(e),n=Ut(lt(t.peerId)),o=(t.addresses??[]).map(s=>ie(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=RT;static CODEC=DT;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:o}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=o??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=Dh.encode({peerId:this.peerId.toMultihash().bytes,seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!NT(this.multiaddrs,e.multiaddrs))}};var ts;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=Ie((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&s.value.byteLength>0&&(a.uint32(18),a.bytes(s.value)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:"",value:ke(0)},f=a==null?s.len:s.pos+a;for(;s.pos<f;){let u=s.uint32();switch(u>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(u&7);break}}}return l})),i),o.encode=s=>Te(s,o.codec()),o.decode=(s,a)=>Ae(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=Ie((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&(a.uint32(18),X2.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},f=a==null?s.len:s.pos+a;for(;s.pos<f;){let u=s.uint32();switch(u>>>3){case 1:{l.key=s.string();break}case 2:{l.value=X2.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(u&7);break}}}return l})),i),o.encode=s=>Te(s,o.codec()),o.decode=(s,a)=>Ae(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),G2.codec().encode(a,i);if(o.protocols!=null)for(let a of o.protocols)i.uint32(18),i.string(a);if(o.publicKey!=null&&(i.uint32(34),i.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(i.uint32(42),i.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())i.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},i);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())i.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},i);o.updated!=null&&(i.uint32(64),i.uint64Number(o.updated)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(s.limits?.addresses!=null&&a.addresses.length===s.limits.addresses)throw new dt('Decode error - map field "addresses" had too many elements');a.addresses.push(G2.codec().decode(o,o.uint32(),{limits:s.limits?.addresses$}));break}case 2:{if(s.limits?.protocols!=null&&a.protocols.length===s.limits.protocols)throw new dt('Decode error - map field "protocols" had too many elements');a.protocols.push(o.string());break}case 4:{a.publicKey=o.bytes();break}case 5:{a.peerRecordEnvelope=o.bytes();break}case 6:{if(s.limits?.metadata!=null&&a.metadata.size===s.limits.metadata)throw new Bd('Decode error - map field "metadata" had too many elements');let f=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(f.key,f.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new Bd('Decode error - map field "tags" had too many elements');let f=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(f.key,f.value);break}case 8:{a.updated=o.uint64Number();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(ts||(ts={}));var G2;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),t.observed!=null&&(n.uint32(24),n.uint64Number(t.observed)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={multiaddr:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.multiaddr=t.bytes();break}case 2:{i.isCertified=t.bool();break}case 3:{i.observed=t.uint64Number();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(G2||(G2={}));var X2;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.value=t.uint32();break}case 2:{i.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(X2||(X2={}));function Lj(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;r.type==="RSA"&&(t=r.toMultihash());let n=Vt(e.publicKey,t);return ii(n)}function LT(r,e,t){let n=ts.decode(e);return Hu(r,n,t)}function Hu(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[i,s]of e.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...e,id:Lj(r,e),addresses:e.addresses.filter(({observed:i})=>i!=null&&i>Date.now()-t).map(({multiaddr:i,isCertified:s})=>({multiaddr:ie(i),isCertified:s??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function BT(r,e){return Bj(r.addresses,e.addresses)&&Mj(r.protocols,e.protocols)&&Uj(r.publicKey,e.publicKey)&&Fj(r.peerRecordEnvelope,e.peerRecordEnvelope)&&$j(r.metadata,e.metadata)&&jj(r.tags,e.tags)}function Bj(r,e){return UT(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!we(t.multiaddr,n.multiaddr)))}function Mj(r,e){return UT(r,e,(t,n)=>t===n)}function Uj(r,e){return MT(r,e)}function Fj(r,e){return MT(r,e)}function $j(r,e){return FT(r,e,(t,n)=>we(t,n))}function jj(r,e){return FT(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function MT(r,e){return r==null&&e==null?!0:r!=null&&e!=null?we(r,e):!1}function UT(r,e,t){if(r.length!==e.length)return!1;for(let n=0;n<r.length;n++)if(!t(r[n],e[n]))return!1;return!0}function FT(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let i=e.get(n);if(i==null||!t(o,i))return!1}return!0}var Ww="/peers/";function Nh(r){if(!Rr(r)||r.type==null)throw new P("Invalid PeerId");let e=r.toCID().toString();return new ht(`${Ww}${e}`)}async function $T(r,e,t,n,o){let i=new Map;for(let s of t){if(s==null)continue;if(s.multiaddr instanceof Uint8Array&&(s.multiaddr=ie(s.multiaddr)),!ni(s.multiaddr))throw new P("Multiaddr was invalid");if(!await e(r,s.multiaddr,o))continue;let a=s.isCertified??!1,c=s.multiaddr.toString(),l=i.get(c);l!=null?s.isCertified=l.isCertified||a:i.set(c,{multiaddr:s.multiaddr,isCertified:a})}return[...i.values()].sort((s,a)=>s.multiaddr.toString().localeCompare(a.multiaddr.toString())).map(({isCertified:s,multiaddr:a})=>{let c=a.getComponents().find(l=>l.code===421)?.value;return r.equals(c)&&(a=a.decapsulate(ie(`/p2p/${r}`))),{isCertified:s,multiaddr:a.bytes}})}async function Q2(r,e,t,n){if(e==null)throw new P("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new P("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new P("peer id did not match existing peer id");let i=o?.addresses??[],s=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(i=[],e.multiaddrs!=null&&i.push(...e.multiaddrs.map(d=>({isCertified:!1,multiaddr:d}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let d=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Y2(d,{validate:jT})}if(e.tags!=null){let d=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Y2(d,{validate:KT,map:VT})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(d=>({isCertified:!1,multiaddr:d}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...e.protocols])),e.metadata!=null){let d=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,m]of d)m==null?a.delete(h):a.set(h,m);a=Y2([...a.entries()],{validate:jT})}if(e.tags!=null){let d=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[m,w]of d)w==null?h.delete(m):h.set(m,w);c=Y2([...h.entries()],{validate:KT,map:VT})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let f;o?.id.publicKey!=null?f=sr(o.id.publicKey):e.publicKey!=null?f=sr(e.publicKey):r.publicKey!=null&&(f=sr(r.publicKey));let u={addresses:await $T(r,n.addressFilter??(async()=>!0),i,n.existingPeer?.peerPB.addresses,n),protocols:[...s.values()].sort((d,h)=>d.localeCompare(h)),metadata:a,tags:c,publicKey:f,peerRecordEnvelope:l};return u.addresses.forEach(d=>{d.observed=n.existingPeer?.peerPB.addresses?.find(h=>we(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete u.publicKey,u}function Y2(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([i],[s])=>i.localeCompare(s)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function jT(r,e){if(typeof r!="string")throw new P("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new P("Metadata value must be a Uint8Array")}function KT(r,e){if(typeof r!="string")throw new P("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new P("Tag value must be an integer");if(e.value<0||e.value>100)throw new P("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new P("Tag ttl must be an integer");if(e.ttl<0)throw new P("Tag ttl must be between greater than 0")}}function VT(r,e){let t;e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl)));let n={value:e.value??0};return t!=null&&(n.expiry=t),n}function HT(r){let e=r.toString().split("/")[2],t=ce.parse(e,ir);return Do(t)}function zw(r,e,t){let n=HT(r);return LT(n,e,t)}function Kj(r,e){return{prefix:Ww,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(zw(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(zw(n.key,n.value,e),zw(o.key,o.value,e)))}}var Z2=class{peerId;datastore;locks;addressFilter;log;maxAddressAge;maxPeerAge;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.locks=Yi({name:"libp2p_peer_store_locks",metrics:e.metrics}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}getLock(e){let t=this.locks.get(e);return t==null&&(t={refs:0,lock:gh({name:e.toString(),singleProcess:!0})},this.locks.set(e,t)),t.refs++,t}maybeRemoveLock(e,t){t.refs--,t.refs===0&&(t.lock.finalize(),this.locks.delete(e))}async getReadLock(e,t){let n=this.getLock(e);try{let o=await n.lock.readLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async getWriteLock(e,t){let n=this.getLock(e);try{let o=await n.lock.writeLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async has(e,t){try{return await this.load(e,t),!0}catch(n){if(n.name!=="NotFoundError")throw n}return!1}async delete(e,t){this.peerId.equals(e)||await this.datastore.delete(Nh(e),t)}async load(e,t){let n=Nh(e),o=await this.datastore.get(n,t),i=ts.decode(o);if(this.#r(e,i))throw await this.datastore.delete(n,t),new Xe;return Hu(e,i,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t,n){let o=await this.#e(e,n),i=await Q2(e,t,"patch",{...n,addressFilter:this.addressFilter});return this.#t(e,i,o)}async patch(e,t,n){let o=await this.#e(e,n),i=await Q2(e,t,"patch",{...n,addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,o)}async merge(e,t,n){let o=await this.#e(e,n),i=await Q2(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,o)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(Kj(e??{},this.maxAddressAge),e)){let o=HT(t);if(o.equals(this.peerId))continue;let i=ts.decode(n);if(this.#r(o,i)){await this.datastore.delete(t,e);continue}yield Hu(o,i,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e,t){try{let n=Nh(e),o=await this.datastore.get(n,t),i=ts.decode(o);if(this.#r(e,i))throw await this.datastore.delete(n,t),new Xe;return{peerPB:i,peer:Hu(e,i,this.maxAddressAge)}}catch(n){n.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",n)}}async#t(e,t,n,o){t.updated=Date.now();let i=ts.encode(t);return await this.datastore.put(Nh(e),i,o),{peer:Hu(e,t,this.maxAddressAge),previous:n?.peer,updated:n==null||!BT(t,n.peerPB)}}#r(e,t){if(t.updated==null)return!0;if(this.peerId.equals(e))return!1;let n=t.updated<Date.now()-this.maxPeerAge,o=Date.now()-this.maxAddressAge,i=t.addresses.filter(s=>s.observed!=null&&s.observed>o);return n&&i.length===0}};var Gw=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new Z2(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){for await(let n of this.store.all(t))e(n)}async all(e){return Ji(this.store.all(e))}async delete(e,t){let n=await this.store.getReadLock(e,t);try{await this.store.delete(e,t)}finally{n()}}async has(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.has(e,t)}finally{this.log.trace("has release read lock"),n?.()}}async get(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.load(e,t)}finally{n?.()}}async getInfo(e,t){let n=await this.get(e,t);return{id:n.id,multiaddrs:n.addresses.map(({multiaddr:o})=>o)}}async save(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.save(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async patch(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.patch(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async merge(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.merge(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async consumePeerRecord(e,t,n){let o=Rr(t)?t:Rr(t?.expectedPeer)?t.expectedPeer:void 0,i=Rr(t)||t===void 0?n:t,s=await Mn.openAndCertify(e,Jr.DOMAIN,i),a=Do(s.publicKey.toCID());if(o?.equals(a)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",o,a),!1;let c=Jr.createFromProtobuf(s.payload),l;try{l=await this.get(a,i)}catch(f){if(f.name!=="NotFoundError")throw f}if(l?.peerRecordEnvelope!=null){let f=Mn.createFromProtobuf(l.peerRecordEnvelope),u=Jr.createFromProtobuf(f.payload);if(u.seqNumber>=c.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,c.seqNumber),!1}return await this.patch(c.peerId,{peerRecordEnvelope:e,addresses:c.multiaddrs.map(f=>({isCertified:!0,multiaddr:f}))},i),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function qT(r,e={}){return new Gw(r,e)}var WT=864e13;var J2=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=zt({name:"libp2p_address_manager_dns_mappings",metrics:e.metrics})}has(e){let t=Ce(e),n=t.host;(t.type==="ip4"||t.type==="ip6")&&t.sni!=null&&(n=t.sni);for(let o of this.mappings.values())if(o.domain===n)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=pu(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?WT-Date.now():0,lastVerified:o?WT-Date.now():void 0})})}remove(e){let t=Ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,i]of this.mappings.entries())i.domain===t.sni&&(this.log("removing %s to %s DNS mapping %e",o,i.domain),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n].multiaddr;if(!mr(o))continue;let i=Ce(o);for(let[s,a]of this.mappings.entries()){if(i.host!==s)continue;let c=this.maybeAddSNIComponent(o,a.domain);c!=null&&(e.splice(n,1),n--,t.push({multiaddr:c,verified:a.verified,type:"dns-mapping",expires:a.expires,lastVerified:a.lastVerified}))}}return t}maybeAddSNIComponent(e,t){let n=e.getComponents();for(let o=0;o<n.length;o++)if(n[o].code===448&&n[o+1]?.code!==449)return n.splice(o+1,0,{name:"sni",code:449,value:t}),ie(n)}confirm(e,t){let n=Ce(e),o=n.host;(n.type==="ip4"||n.type==="ip6")&&n.sni!=null&&(o=n.sni);let i=!1;for(let[s,a]of this.mappings.entries())a.domain===o&&(this.log("marking %s to %s DNS mapping as verified",s,a.domain),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=Ce(e);if(n.type!=="ip4"&&n.type!=="ip6")return!1;let o=n.sni??n.host,i=!1;for(let[s,a]of this.mappings.entries())a.domain===o&&(this.log("removing verification of %s to %s DNS mapping",s,a.domain),i=i||a.verified,a.verified=!1,a.expires=Date.now()+t);return i}};var eg=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=zt({name:"libp2p_address_manager_ip_mappings",metrics:e.metrics})}has(e){let t=Ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t.host)return!0;return!1}add(e,t,n,o=t,i="tcp"){let s=`${e}-${t}-${i}`,a=this.mappings.get(s)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:To(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=Ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,i]of this.mappings.entries()){for(let s=0;s<i.length;s++){let a=i[s];a.externalIp===t.host&&a.externalPort===t.port&&a.protocol===t.protocol&&(this.log("removing %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,t.host,t.port,t.protocol),n=n||a.verified,i.splice(s,1),s--)}i.length===0&&this.mappings.delete(o)}return n}getAll(e){let t=[];for(let{multiaddr:n}of e){if(!mr(n))continue;let o=Ce(n);if(o.type!=="ip4"&&o.type!=="ip6")continue;let i;if(o.protocol==="tcp"?i=`${o.host}-${o.port}-tcp`:o.protocol==="udp"&&(i=`${o.host}-${o.port}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)t.push({multiaddr:this.maybeOverrideIp(n,a.externalIp,a.externalFamily,a.protocol,a.externalPort),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}maybeOverrideIp(e,t,n,o,i){let s=e.getComponents(),a=s.findIndex(l=>l.code===4||l.code===41),c=s.findIndex(l=>l.name===o);return a>-1&&c>-1?(s[a].value=t,s[a].code=n===4?4:41,s[c].value=`${i}`,ie(s)):e}confirm(e,t){if(!mr(e))return!1;let n=Ce(e),o=!1;for(let i of this.mappings.values())for(let s of i)s.externalIp===n.host&&(this.log("marking %s to %s IP mapping as verified",s.internalIp,s.externalIp),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){if(!mr(e))return!1;let n=Ce(e),o=!1;for(let i of this.mappings.values())for(let s=0;s<i.length;s++){let a=i[s];a.externalIp===n.host&&a.externalPort===n.port&&a.protocol===n.protocol&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,n.host,n.port,n.protocol),o=o||a.verified,a.verified=!1,a.expires=Date.now()+t)}return o}};var Vj={maxObservedAddresses:10},tg=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=zt({name:"libp2p_address_manager_observed_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??Vj.maxObservedAddresses}has(e){return this.addresses.has(e.toString())}removePrefixed(e){for(let t of this.addresses.keys())t.toString().startsWith(e)&&this.addresses.delete(t)}add(e){this.addresses.size!==this.maxObservedAddresses&&(Mt(e)||DS(e)||(this.log("adding observed address %a",e),this.addresses.set(e.toString(),{verified:!1,expires:0})))}getAll(){return Array.from(this.addresses).map(([e,t])=>({multiaddr:ie(e),verified:t.verified,type:"observed",expires:t.expires,lastVerified:t.lastVerified}))}remove(e){let t=this.addresses.get(e.toString())?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(e.toString()),t}confirm(e,t){let n=e.toString(),o=this.addresses.get(n)??{verified:!1,expires:Date.now()+t,lastVerified:Date.now()},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.log("marking observed address %a as verified",n),this.addresses.set(n,o),i}};var Hj={maxObservedAddresses:10},rg=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=zt({name:"libp2p_address_manager_transport_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??Hj.maxObservedAddresses}get(e,t){if(Mt(e))return{multiaddr:e,verified:!0,type:"transport",expires:Date.now()+t,lastVerified:Date.now()};let n=this.toKey(e),o=this.addresses.get(n);return o==null&&(o={verified:!mr(e),expires:0},this.addresses.set(n,o)),{multiaddr:e,verified:o.verified,type:"transport",expires:o.expires,lastVerified:o.lastVerified}}has(e){let t=this.toKey(e);return this.addresses.has(t)}remove(e){let t=this.toKey(e),n=this.addresses.get(t)?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(t),n}confirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0,lastVerified:0},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),i}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},i=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),i}toKey(e){if(!mr(e))return e.toString();let t=Ce(e);return`${t.host}-${t.port}-${t.protocol}`}};var zT=6e4,GT={maxObservedAddresses:10,addressVerificationTTL:zT*10,addressVerificationRetry:zT*5},qj=r=>r;function Xw(r,e){let t=r.getComponents().findLast(n=>n.code===421)?.value;return t!=null&&yt(t).equals(e)&&(r=r.decapsulate(ie(`/p2p/${e.toString()}`))),r}var ng=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:i=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.appendAnnounce=new Set(i.map(s=>s.toString())),this.observed=new tg(e,t),this.dnsMappings=new J2(e,t),this.ipMappings=new eg(e,t),this.transportAddresses=new rg(e,t),this.announceFilter=t.announceFilter??qj,this.observedAddressFilter=$r(1024),this.addressVerificationTTL=t.addressVerificationTTL??GT.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??GT.addressVerificationRetry,this._updatePeerStoreAddresses=$i(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAddresses().map(t=>t.getComponents().findLast(n=>n.code===421)?.value===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses - %e",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>ie(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>ie(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>ie(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=Ce(e),n;switch(t.type){case"ip4":{n=`${t.host}:${t.port}`;break}case"ip6":{n=`[${t.host}]:${t.port}`;break}default:return}this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=Xw(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=Xw(e,this.components.peerId);let n=!0;(t?.type==="transport"||this.transportAddresses.has(e))&&!this.transportAddresses.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="dns-mapping"||this.dnsMappings.has(e))&&!this.dnsMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="ip-mapping"||this.ipMappings.has(e))&&!this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="observed"||this.observed.has(e))&&(this.maybeUpgradeToIPMapping(e)?(this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL),n=!1):!this.observed.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1)),n||this._updatePeerStoreAddresses()}removeObservedAddr(e,t){e=Xw(e,this.components.peerId);let n=!1;this.observed.has(e)&&!this.observed.remove(e)&&n&&(n=!1),this.transportAddresses.has(e)&&!this.transportAddresses.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.dnsMappings.has(e)&&!this.dnsMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.ipMappings.has(e)&&!this.ipMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),n&&this._updatePeerStoreAddresses()}getAddresses(){let e=new Set,t=this.getAddressesWithMetadata().filter(n=>{if(!n.verified)return!1;let o=n.multiaddr.toString();return e.has(o)?!1:(e.add(o),!0)}).map(n=>n.multiaddr);return this.announceFilter(t.map(n=>{let o=ie(n);return o.getComponents().pop()?.value===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(e)}),e.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];t=t.concat(this.components.transportManager.getAddrs().map(o=>this.transportAddresses.get(o,this.addressVerificationTTL)));let n=this.getAppendAnnounceAddrs();return n.length>0&&(this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(n)}),t=t.concat(n.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()})))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove(ie(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${To(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove(ie(`/ip${To(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e)||!mr(e))return!1;let t=Ce(e);if(t.type!=="ip4"||pu(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>Zi.exactMatch(i)||kc.exactMatch(i),i=>Pc.exactMatch(i),i=>sT.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(f=>Ce(f).type==="ip4"&&i(f)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>!zd(l)).pop();if(a==null)continue;let c=Ce(a);return c.port==null?!1:(this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.protocol),!0)}return!1}};var XT;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(XT||(XT={}));var og=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},ig=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},qu=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},Lh=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},sg=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},ag=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},cg=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},Bh=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},lg=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},ug=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},fg=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},dg=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},hg=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},ra=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Rc=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},pg=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}},mg=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}};var Yw=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=Rs())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>lm(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},Wj=["metrics","connectionProtector","dns"],zj=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function YT(r={}){let e=new Yw(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!zj.includes(o)){let s=e.components[o];if(s==null&&!Wj.includes(o))throw new og(`${o} not set`);return s}return Reflect.get(n,o,i)},set(n,o,i){return typeof o=="string"?e.components[o]=i:Reflect.set(n,o,i),!0}})}function QT(r){let e={};for(let t of Object.values(r.components))for(let n of Gj(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of Xj(t))if(e[n]!==!0)throw new ig(`Service "${Yj(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function Gj(r){return Array.isArray(r?.[qe])?r[qe]:[]}function Xj(r){return Array.isArray(r?.[An])?r[An]:[]}function Yj(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function ZT(r={}){return r.denyDialMultiaddr==null&&(r.denyDialMultiaddr=e=>Zi.matches(e)?!0:Mt(e)),r}var Qw=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Zw=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},JT=r=>globalThis.DOMException===void 0?new Zw(r):new DOMException(r),eI=r=>{let e=r.reason===void 0?JT("This operation was aborted."):r.reason;return e instanceof Error?e:JT(e)};function Jw(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((f,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(eI(h)),a=()=>{u(eI(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(f,u);return}let d=new Qw;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?f():o instanceof Error?u(o):(d.message=o??`Promise timed out after ${t} milliseconds`,u(d))},t),(async()=>{try{f(await r)}catch(h){u(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}var Qj=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function Zj(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:f}=Qj(r),u=async(...h)=>{let m=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(m))return}catch(w){n(),s(w);return}c.push(m),t.count===c.length&&(n(),i(c))},d=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)f(h,u);for(let h of t.rejectionEvents)a.includes(h)||f(h,d)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,d);t.signal&&t.signal.addEventListener("abort",()=>{d(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Jw(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function Mh(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=Zj(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}function gg(r){if(Rr(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getComponents().findLast(o=>o.code===421)?.value;t=n==null?void 0:yt(n),e.forEach(o=>{if(!ni(o))throw new Xo("Invalid multiaddr");let i=o.getComponents().findLast(s=>s.code===421)?.value;if(i==null){if(t!=null)throw new P("Multiaddrs must all have the same peer id or have no peer id")}else{let s=yt(i);if(t?.equals(s)!==!0)throw new P("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!tT.exactMatch(n)),{peerId:t,multiaddrs:e}}var Jj=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function tI(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??Jj;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}function Uh(r){let e=Ce(r),t=e.cidr;if(e.type!=="ip4"&&e.type!=="ip6")throw new P(`Multiaddr ${r} was not an IPv4 or IPv6 address`);if(t==null)switch(e.type){case"ip4":{t=32;break}case"ip6":{t=128;break}default:throw new P(`Multiaddr ${r} was not an IPv4 or IPv6 address`)}return new gc(e.host,t)}function e7(r){return!fr.exactMatch(r)}function yg(r,e,t){if(r==null||e==null)return;let n=e.sort((i,s)=>i.direct?-1:s.direct?1:0).find(i=>i.limits==null);if(n==null||n.direct||t==null)return n;if(!t.some(i=>e7(i)))return n}var wg=class{connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.allow=(t.allow??[]).map(n=>Uh(n)),this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),this.maybePruneConnections=this.maybePruneConnections.bind(this)}start(){this.events.addEventListener("connection:open",this.maybePruneConnections)}stop(){this.events.removeEventListener("connection:open",this.maybePruneConnections)}maybePruneConnections(){this._maybePruneConnections().catch(e=>{this.log.error("error while pruning connections - %e",e)})}async _maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length,n=this.connectionManager.getMaxConnections();if(this.log("checking max connections limit %d/%d",t,n),t<=n)return;let o=new jr;for(let c of e){let l=c.remotePeer;if(!o.has(l)){o.set(l,0);try{let f=await this.peerStore.get(l);o.set(l,[...f.tags.values()].reduce((u,d)=>u+d.value,0))}catch(f){f.name!=="NotFoundError"&&this.log.error("error loading peer tags - %e",f)}}}let i=this.sortConnections(e,o),s=Math.max(t-n,0),a=[];for(let c of i)if(this.log("too many connections open - closing a connection to %p",c.remotePeer),this.allow.some(f=>{if(mr(c.remoteAddr)){let u=Ce(c.remoteAddr);return f.contains(u.host)}return!0})||a.push(c),a.length===s)break;await Promise.all(a.map(async c=>{await tI(c,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:a})}sortConnections(e,t){return e.sort((n,o)=>{let i=n.timeline.open,s=o.timeline.open;return i<s?1:i>s?-1:0}).sort((n,o)=>n.direction==="outbound"&&o.direction==="inbound"?1:n.direction==="inbound"&&o.direction==="outbound"?-1:0).sort((n,o)=>n.streams.length>o.streams.length?1:n.streams.length<o.streams.length?-1:0).sort((n,o)=>{let i=t.get(n.remotePeer)??0,s=t.get(o.remotePeer)??0;return i>s?1:i<s?-1:0})}};var rI="last-dial-failure",nI="last-dial-success";var oI=100,bg=50;function eK(r,e){let t=Pc.exactMatch(r.multiaddr),n=Pc.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=kc.exactMatch(r.multiaddr),i=kc.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=Zi.exactMatch(r.multiaddr),a=Zi.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=Th.exactMatch(r.multiaddr),l=Th.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let f=Ah.exactMatch(r.multiaddr),u=Ah.exactMatch(e.multiaddr);if(f&&!u)return-1;if(!f&&u)return 1;let d=Pw.exactMatch(r.multiaddr),h=Pw.exactMatch(e.multiaddr);return d&&!h?-1:!d&&h?1:0}function tK(r,e){let t=zd(r.multiaddr),n=zd(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function rK(r,e){let t=Mt(r.multiaddr),n=Mt(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function nK(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function oK(r,e){let t=fr.exactMatch(r.multiaddr),n=fr.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function iI(r){return r.sort(eK).sort(nK).sort(oK).sort(rK).sort(tK)}var t7=class{dns;canResolve(e){return e.getComponents().some(({name:t})=>t==="dnsaddr")}async resolve(e,t){let n=e.getComponents().find(c=>c.name==="dnsaddr")?.value;if(n==null)return[e];let i=await this.getDNS(t).query(`_dnsaddr.${n}`,{signal:t?.signal,types:[Tn.TXT]}),s=e.getComponents().find(c=>c.name==="p2p")?.value,a=[];for(let c of i.Answer){let l=c.data.replace(/["']/g,"").trim().split("=")[1];l!=null&&(s!=null&&!l.includes(s)||a.push(ie(l)))}return a}getDNS(e){return e.dns!=null?e.dns:(this.dns==null&&(this.dns=xm()),this.dns)}},Fh=new t7;async function r7(r,e,t){let n=t.depth??0;if(n>(t.maxRecursiveDepth??32))throw new mg("Max recursive depth reached");let o=!1,i=[];for(let s of Object.values(e))if(s.canResolve(r)){o=!0;let a=await s.resolve(r,t);for(let c of a)i.push(...await r7(c,e,{...t,depth:n+1}))}return o===!1&&i.push(r),i}var $h={maxParallelDials:bg,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:Fh}},vg=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;resolvers;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??$h.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??$h.maxDialQueueLength,this.dialTimeout=t.dialTimeout??$h.dialTimeout,this.connections=t.connections??new jr,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.resolvers=t.resolvers??$h.resolvers,this.shutDownController=new AbortController,this.shutDownController.signal,this.queue=new O0({concurrency:t.maxParallelDials??$h.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("failure",n=>{n.detail?.error.name!==qr.name&&this.log.error("error in dial queue - %e",n.detail.error)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=gg(e);if(n!=null&&t.force!==!0){let s=yg(n,this.connections.get(n),o);if(s!=null)return this.log("already connected to %a",s.remoteAddr),t.onProgress?.(new oe("dial-queue:already-connected")),s}let i=this.queue.queue.find(s=>{if(n?.equals(s.options.peerId)===!0)return!0;let a=s.options.multiaddrs;if(a==null)return!1;for(let c of o)if(a.has(c.toString()))return!0;return!1});if(i!=null){this.log("joining existing dial target for %p",n);for(let s of o)i.options.multiaddrs.add(s.toString());return t.onProgress?.(new oe("dial-queue:already-in-dial-queue")),i.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Cs("Dial queue is full");return this.log("creating dial target for %p",n,o.map(s=>s.toString())),t.onProgress?.(new oe("dial-queue:add-to-dial-queue")),this.queue.add(async s=>{s.onProgress?.(new oe("dial-queue:start-dial"));let a=De([this.shutDownController.signal,s.signal]);try{return await this.dialPeer(s,a)}finally{a.clear()}},{peerId:n,priority:t.priority??s7,multiaddrs:new Set(o.map(s=>s.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,i=new Set,s=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);s||o.size>0;){c++,s=!1;let f=[],u=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...u]);let d=await this.calculateMultiaddrs(n,u,{...e,signal:t});for(let h of d){if(i.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}f.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,f.map(h=>h.multiaddr.toString())),e?.onProgress?.(new oe("dial-queue:calculated-addresses",f));for(let h of f){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new Cs("Peer had more than maxPeerAddrsToDial");a++;try{let m=await this.components.transportManager.dial(h.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",h.multiaddr);try{await this.components.peerStore.merge(m.remotePeer,{multiaddrs:[m.remoteAddr],metadata:{[nI]:B(Date.now().toString())}})}catch(w){this.log.error("could not update last dial failure key for %p - %e",n,w)}return m}catch(m){if(this.log.error("dial failed to %a - %e",h.multiaddr,m),i.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[rI]:B(Date.now().toString())}})}catch(w){this.log.error("could not update last dial failure key for %p - %e",n,w)}if(t.aborted)throw new Yo(m.message);l.push(m)}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:ie(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Cs("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new Bh("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:d})=>d.toString()))}catch(u){if(u.name!=="NotFoundError")throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:d})=>d.toString())),o.push(...u.multiaddrs.map(d=>({multiaddr:d,isCertified:!1})))}catch(u){u.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,u)}}}let i=(await Promise.all(o.map(async u=>{let d=await r7(u.multiaddr,this.resolvers,{dns:this.components.dns,log:this.log,...n});return d.length===1&&d[0].equals(u.multiaddr)?u:d.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;i=i.map(d=>d.multiaddr.getComponents().pop()?.name!=="p2p"?{multiaddr:d.multiaddr.encapsulate(u),isCertified:d.isCertified}:d)}let s=i.filter(u=>{if(this.components.transportManager.dialTransportForMultiaddr(u.multiaddr)==null)return!1;let d=u.multiaddr.getComponents().findLast(h=>h.code===421)?.value;return e!=null&&d!=null?e.equals(d):!0}),a=new Map;for(let u of s){let d=u.multiaddr.toString(),h=a.get(d);if(h!=null){h.isCertified=h.isCertified||u.isCertified||!1;continue}a.set(d,u)}let c=[...a.values()];if(c.length===0)throw new fg("The dial request has no valid addresses");let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let f=this.addressSorter==null?iI(l):l.sort(this.addressSorter);if(f.length===0)throw new Bh("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",i.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",f.map(({multiaddr:u})=>u.toString())),f}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnLimitedConnection===!1?n.find(o=>!fr.matches(o.multiaddr))!=null:!0}catch{}return!1}};var iK=Object.prototype.toString,sK=r=>iK.call(r)==="[object Error]",aK=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]);function a7(r){if(!(r&&sK(r)&&r.name==="TypeError"&&typeof r.message=="string"))return!1;let{message:t,stack:n}=r;return t==="Load failed"?n===void 0||"__sentry_captured__"in r:t.startsWith("error sending request for url")?!0:aK.has(t)}function cK(r){if(typeof r=="number"){if(r<0)throw new TypeError("Expected `retries` to be a non-negative number.");if(Number.isNaN(r))throw new TypeError("Expected `retries` to be a valid number or Infinity, got NaN.")}else if(r!==void 0)throw new TypeError("Expected `retries` to be a number or Infinity.")}function xg(r,e,{min:t=0,allowInfinity:n=!1}={}){if(e!==void 0){if(typeof e!="number"||Number.isNaN(e))throw new TypeError(`Expected \`${r}\` to be a number${n?" or Infinity":""}.`);if(!n&&!Number.isFinite(e))throw new TypeError(`Expected \`${r}\` to be a finite number.`);if(e<t)throw new TypeError(`Expected \`${r}\` to be \u2265 ${t}.`)}}var c7=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}};function lK(r,e){let t=Math.max(1,r+1),n=e.randomize?Math.random()+1:1,o=Math.round(n*e.minTimeout*e.factor**(t-1));return o=Math.min(o,e.maxTimeout),o}function sI(r,e){return Number.isFinite(e)?e-(performance.now()-r):e}async function uK({error:r,attemptNumber:e,retriesConsumed:t,startTime:n,options:o}){let i=r instanceof Error?r:new TypeError(`Non-error was thrown: "${r}". You should only throw errors.`);if(i instanceof c7)throw i.originalError;let s=Number.isFinite(o.retries)?Math.max(0,o.retries-t):o.retries,a=o.maxRetryTime??Number.POSITIVE_INFINITY,c=Object.freeze({error:i,attemptNumber:e,retriesLeft:s,retriesConsumed:t});if(await o.onFailedAttempt(c),sI(n,a)<=0)throw i;let l=await o.shouldConsumeRetry(c),f=sI(n,a);if(f<=0||s<=0)throw i;if(i instanceof TypeError&&!a7(i)){if(l)throw i;return o.signal?.throwIfAborted(),!1}if(!await o.shouldRetry(c))throw i;if(!l)return o.signal?.throwIfAborted(),!1;let u=lK(t,o),d=Math.min(u,f);return o.signal?.throwIfAborted(),d>0&&await new Promise((h,m)=>{let w=()=>{clearTimeout(y),o.signal?.removeEventListener("abort",w),m(o.signal.reason)},y=setTimeout(()=>{o.signal?.removeEventListener("abort",w),h()},d);o.unref&&y.unref?.(),o.signal?.addEventListener("abort",w,{once:!0})}),o.signal?.throwIfAborted(),!0}async function l7(r,e={}){if(e={...e},cK(e.retries),Object.hasOwn(e,"forever"))throw new Error("The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead.");e.retries??=10,e.factor??=2,e.minTimeout??=1e3,e.maxTimeout??=Number.POSITIVE_INFINITY,e.maxRetryTime??=Number.POSITIVE_INFINITY,e.randomize??=!1,e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.shouldConsumeRetry??=()=>!0,xg("factor",e.factor,{min:0,allowInfinity:!1}),xg("minTimeout",e.minTimeout,{min:0,allowInfinity:!1}),xg("maxTimeout",e.maxTimeout,{min:0,allowInfinity:!0}),xg("maxRetryTime",e.maxRetryTime,{min:0,allowInfinity:!0}),e.factor>0||(e.factor=1),e.signal?.throwIfAborted();let t=0,n=0,o=performance.now();for(;!Number.isFinite(e.retries)||n<=e.retries;){t++;try{e.signal?.throwIfAborted();let i=await r(t);return e.signal?.throwIfAborted(),i}catch(i){await uK({error:i,attemptNumber:t,retriesConsumed:n,startTime:o,options:e})&&n++}}throw new Error("Retry attempts exhausted without throwing an error.")}var Eg=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;events;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new vr({concurrency:t.maxParallelReconnects??5,metricName:"libp2p_reconnect_queue",metrics:e.metrics}),this.started=!1,this.retries=t.retries??5,this.backoffFactor=t.backoffFactor,this.retryInterval=t.retryInterval,this.events=e.events,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p - %e",n.detail,o)})})}async maybeReconnect(e){if(!this.started)return;let t=await this.peerStore.get(e);aI(t)&&(this.queue.has(e)||this.queue.add(async n=>{await l7(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(i){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,i),i}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(async n=>{this.log.error("failed to reconnect to %p - %e",e,n);let o={};[...t.tags.keys()].forEach(i=>{i.startsWith(Ha)&&(o[i]=void 0)}),await this.peerStore.merge(e,{tags:o}),this.events.safeDispatchEvent("peer:reconnect-failure",{detail:e})}).catch(async n=>{this.log.error("failed to remove keep-alive tag from %p - %e",e,n)}))}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>aI(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error("could not open connection to keepalive peer - %e",n)})}))}).catch(e=>{this.log.error("error reconnect to peers after start - %e",e)})}stop(){this.started=!1,this.queue.abort()}};function aI(r){for(let e of r.tags.keys())if(e.startsWith(Ha))return!0;return!1}var s7=50,u7={maxConnections:oI,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},Sg=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;outboundPendingConnections;maxConnections;dialQueue;reconnectQueue;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;peerId;constructor(e,t={}){if(this.maxConnections=t.maxConnections??u7.maxConnections,this.maxConnections<1)throw new P("Connection Manager maxConnections must be greater than 0");this.connections=new jr,this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.allow=(t.allow??[]).map(n=>Uh(ie(n))),this.deny=(t.deny??[]).map(n=>Uh(ie(n))),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??u7.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new Pu({points:t.inboundConnectionThreshold??u7.inboundConnectionThreshold,duration:1}),this.connectionPruner=new wg({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{allow:t.allow?.map(n=>ie(n))}),this.dialQueue=new vg(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??bg,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:Fh},connections:this.connections}),this.reconnectQueue=new Eg({events:e.events,peerStore:e.peerStore,logger:e.logger,connectionManager:this},{retries:t.reconnectRetries,retryInterval:t.reconnectRetryInterval,backoffFactor:t.reconnectBackoffFactor,maxParallelReconnects:t.maxParallelReconnects})}[Symbol.toStringTag]="@libp2p/connection-manager";async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,"inbound pending":this.incomingPendingConnections,outbound:0,"outbound pending":this.outboundPendingConnections};for(let t of this.connections.values())for(let n of t)e[n.direction]++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let i=`${o.direction} ${o.protocol??"unnegotiated"}`;e[i]=(e[i]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let i={};for(let s of o.streams){let a=`${s.direction} ${s.protocol??"unnegotiated"}`;i[a]=(i[a]??0)+1}for(let[s,a]of Object.entries(i))e[s]=e[s]??[],e[s].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((s,a)=>s-a);let i=Math.floor(o.length*.9);t[n]=o[i]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await er(this.dialQueue,this.reconnectQueue,this.connectionPruner),this.started=!0,this.log("started")}async stop(){this.events.removeEventListener("connection:open",this.onConnect),this.events.removeEventListener("connection:close",this.onDisconnect),await or(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push(Promise.all([Mh(n,"close",{signal:AbortSignal.timeout(500)}),n.close({signal:AbortSignal.timeout(500)})]).catch(o=>{n.abort(o)}));this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}setMaxConnections(e){if(this.maxConnections<1)throw new P("Connection Manager maxConnections must be greater than 0");let t=!1;e<this.maxConnections&&(t=!0),this.maxConnections=e,t&&this.connectionPruner.maybePruneConnections()}onConnect(e){this._onConnect(e).catch(t=>{this.log.error("could not connect - %e",t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}if(t.status!=="open")return;let n=t.remotePeer,o=!this.connections.has(n),i=this.connections.get(n)??[];i.push(t),this.connections.set(n,i),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),o&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e,n=t.remotePeer,i=(this.connections.get(n)??[]).filter(s=>s.id!==t.id);this.connections.set(n,i),i.length===0&&(this.log.trace("peer %p disconnected, removing connection map entry",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:n}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.started)throw new _n("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n,multiaddrs:o}=gg(e);if(this.peerId.equals(n))throw new Ul("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let c=yg(n,this.getConnections(n),o);if(c!=null)return this.log("had an existing connection to %p as %a",n,c.remoteAddr),t.onProgress?.(new oe("dial-queue:already-connected")),c}let i=await this.dialQueue.dial(e,{...t,priority:t.priority??s7});if(i.status!=="open")throw new $a("Remote closed connection during opening");let s=this.connections.get(i.remotePeer);s==null&&(s=[],this.connections.set(i.remotePeer,s));let a=!1;for(let c of s)if(c.id===i.id&&(a=!0),t.force!==!0&&c.id!==i.id&&c.remoteAddr.equals(i.remoteAddr))return i.abort(new Xo("Duplicate multiaddr connection")),c;return a||s.push(i),i}finally{this.outboundPendingConnections--}}async openStream(e,t,n={}){return(await this.openConnection(e,n)).newStream(t,n)}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await Promise.all([Mh(o,"close",t),o.close(t)])}catch(i){o.abort(i)}}))}acceptIncomingConnection(e){if(this.deny.some(o=>{if(mr(e.remoteAddr)){let i=Ce(e.remoteAddr);return o.contains(i.host)}return!1}))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>{if(mr(e.remoteAddr)){let i=Ce(e.remoteAddr);return o.contains(i.host)}return!0}))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(mr(e.remoteAddr)){let o=Ce(e.remoteAddr);try{this.inboundConnectionRateLimiter.consume(o.host,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o.host),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>ie(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var hK=1e4,pK="1.0.0",mK="ping",gK="ipfs",cI=32,yK=!0,_g=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??gK}/${mK}/${pK}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??hK,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??yK,this.timeout=new Io({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[qe]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,this.abortController.signal,this.heartbeatInterval=setInterval(()=>{this.components.connectionManager.getConnections().forEach(e=>{Promise.resolve().then(async()=>{let t=Date.now();try{let n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal}),o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),i=l0(o);t=Date.now(),await Promise.all([i.write(Yr(cI),{signal:n}),i.read({bytes:cI,signal:n})]),e.rtt=Date.now()-t,await o.close({signal:n})}catch(n){if(n.name!=="UnsupportedProtocolError")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat - %e",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var Ag=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e,this.findProviders=e.metrics?.traceFunction("libp2p.contentRouting.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()}),getAttributesFromYieldedValue:(n,o)=>({...o,providers:[...Array.isArray(o.providers)?o.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:j(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:j(n,"base36")})})??this.get}[Symbol.toStringTag]="@libp2p/content-routing";isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new qu("No content routers available");let n=this,o=new Bn;for await(let i of Qr(...n.routers.filter(s=>s.findProviders instanceof Function).map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new qu("No content routers available");await Promise.all(this.routers.filter(n=>n.provide instanceof Function).map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new qu("No content routers available");await Promise.all(this.routers.filter(n=>n.cancelReprovide instanceof Function).map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new _n;await Promise.all(this.routers.filter(o=>o.put instanceof Function).map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new _n;return Promise.any(this.routers.filter(n=>n.get instanceof Function).map(async n=>n.get(e,t)))}};var Tg=globalThis.CustomEvent??Event;async function*rs(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=Ue(),a=Ue(),c=!1,l,f=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let m of r){if(i.length===t&&(s=Ue(),await s.promise),f)break;let w={done:!1};i.push(w),m().then(y=>{w.done=!0,w.ok=!0,w.value=y,o.dispatchEvent(new Tg("task-complete"))},y=>{w.done=!0,w.err=y,o.dispatchEvent(new Tg("task-complete"))})}c=!0,o.dispatchEvent(new Tg("task-complete"))}catch(m){l=m,o.dispatchEvent(new Tg("task-complete"))}});function u(){return n?i[0]?.done:!!i.find(m=>m.done)}function*d(){for(;i.length>0&&i[0].done;){let m=i[0];if(i.shift(),m.ok)yield m.value;else throw f=!0,s.resolve(),m.err;s.resolve()}}function*h(){for(;u();)for(let m=0;m<i.length;m++)if(i[m].done){let w=i[m];if(i.splice(m,1),m--,w.ok)yield w.value;else throw f=!0,s.resolve(),w.err;s.resolve()}}for(;;){if(u()||(a=Ue(),await a.promise),l!=null||(n?yield*d():yield*h(),l!=null))throw l;if(c&&i.length===0)break}}var Ig=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[],this.findPeer=e.metrics?.traceFunction("libp2p.peerRouting.findPeer",this.findPeer.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,peer:n.toString()})})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.peerRouting.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,key:j(n,"base36")}),getAttributesFromYieldedValue:(n,o)=>({...o,peers:[...Array.isArray(o.peers)?o.peers:[],n.id.toString()]})})??this.getClosestPeers}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new Lh("No peer routers available");if(e.toString()===this.peerId.toString())throw new sg("Should not try to find self");let n=this,o=Qr(...this.routers.filter(i=>i.findPeer instanceof Function).map(i=>(async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error("router failed to find peer - %e",s)}})()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),i;throw new Xe}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Lh("No peer routers available");let n=this,o=$r(1024);for await(let i of rs((async function*(){let s=Qr(...n.routers.filter(a=>a.getClosestPeers instanceof Function).map(a=>a.getClosestPeers(e,t)));for await(let a of s)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs - %e",c);return}return a}})()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var Cg=class extends _e{peerRouting;log;walking;walkers;shutdownController;walkController;needNext;constructor(e){super(),this.log=e.logger.forComponent("libp2p:random-walk"),this.peerRouting=e.peerRouting,this.walkers=0,this.walking=!1,this.shutdownController=new AbortController,this.shutdownController.signal}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,this.shutdownController.signal}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=De([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=Ue(),yield(await Mh(this,"walk:peer",{signal:t,rejectionEvents:["walk:error"]})).detail}catch(n){throw n.detail!=null?n.detail:n}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,this.walkController.signal;let e=De([this.walkController.signal,this.shutdownController.signal]);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=Yr(32),i=Date.now();for await(let s of this.peerRouting.getClosestPeers(o,{signal:e}))e.aborted&&this.log("aborting walk"),e.throwIfAborted(),this.log("found peer %p after %dms for %d walkers",s.id,Date.now()-i,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:s}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await ut(this.needNext.promise,e)),i=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("random walk errored - %e",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored - %e",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var f7=32,d7=64,Pg=class{log;topologies;handlers;components;middleware;constructor(e){this.components=e,this.log=e.logger.forComponent("libp2p:registrar"),this.middleware=new Map,this.topologies=new Map,e.metrics?.registerMetricGroup("libp2p_registrar_topologies",{calculate:()=>{let t={};for(let[n,o]of this.topologies)t[n]=o.size;return t}}),this.handlers=zt({name:"libp2p_registrar_protocol_handlers",metrics:e.metrics}),this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new ag(`No handler registered for protocol ${e}`);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e)&&n?.force!==!0)throw new cg(`Handler already registered for protocol ${e}`);this.handlers.set(e,{handler:t,options:{maxInboundStreams:f7,maxOutboundStreams:d7,...n}}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]},n)}async unhandle(e,t){(Array.isArray(e)?e:[e]).forEach(o=>{this.handlers.delete(o)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()},t)}async register(e,t){if(t==null)throw new P("invalid topology");let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}use(e,t){this.middleware.set(e,t)}unuse(e){this.middleware.delete(e)}getMiddleware(e){return this.middleware.get(e)??[]}async _onDisconnect(e){let t=e.detail,n={signal:AbortSignal.timeout(5e3)};try{let o=await this.components.peerStore.get(t,n);for(let i of o.protocols){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{a.filter?.has(t)!==!1&&(a.filter?.remove(t),await a.onDisconnect?.(t))}))}}catch(o){if(o.name==="NotFoundError")return;this.log.error("could not inform topologies of disconnecting peer %p - %e",t,o)}}async _onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));try{for(let i of o){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),await a.onDisconnect?.(t.id))}))}}catch(i){this.log.error("could not inform topologies of updated peer %p - %e",t.id,i)}}async _onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;try{for(let i of t){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),await a.onConnect?.(o,n))}))}}catch(i){this.log.error("could not inform topologies of updated peer after identify %p - %e",o,i)}}};var kg=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=zt({name:"libp2p_transport_manager_transports",metrics:this.components.metrics}),this.listeners=zt({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??ld.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new P("Transport must have a valid tag");if(this.transports.has(t))throw new P(`There is already a transport with the tag ${t}`);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.dialTransportForMultiaddr(e);if(n==null)throw new pg(`No transport available for address ${String(e)}`);return t?.onProgress?.(new oe("transport-manager:selected-transport",n[Symbol.toStringTag])),n.dial(e,{...t,upgrader:this.components.upgrader})}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}dialTransportForMultiaddr(e){for(let t of this.transports.values())if(t.dialFilter([e]).length>0)return t}listenTransportForMultiaddr(e){for(let t of this.transports.values())if(t.listenFilter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new _n("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t={errors:new Map,ipv4:{success:0,attempts:0},ipv6:{success:0,attempts:0}};e.forEach(i=>{t.errors.set(i.toString(),new lg)});let n=[];for(let[i,s]of this.transports.entries()){let a=s.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",i,c);let l=s.createListener({upgrader:this.components.upgrader}),f=this.listeners.get(i)??[];f==null&&(f=[],this.listeners.set(i,f)),f.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let u=f.findIndex(d=>d===l);f.splice(u,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),Aw.matches(c)?t.ipv4.attempts++:Tw.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),Aw.matches(c)&&t.ipv4.success++,Tw.matches(c)&&t.ipv6.success++},u=>{throw this.log.error("transport %s could not listen on address %a - %e",i,c,u),t.errors.set(c.toString(),u),u}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(i=>i.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===ld.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new ug(`Some configured addresses failed to be listened on, you may need to remove one or more listen addresses from your configuration or set \`transportManager.faultTolerance\` to NO_FATAL:
32
+ `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),dj=new RegExp(`(?:^${Bo}$)|(?:^${G2}$)`),hj=new RegExp(`^${Bo}$`),pj=new RegExp(`^${G2}$`),Lw=r=>r&&r.exact?dj:new RegExp(`(?:${ta(r)}${Bo}${ta(r)})|(?:${ta(r)}${G2}${ta(r)})`,"g");Lw.v4=r=>r&&r.exact?hj:new RegExp(`${ta(r)}${Bo}${ta(r)}`,"g");Lw.v6=r=>r&&r.exact?pj:new RegExp(`${ta(r)}${G2}${ta(r)}`,"g");var Bw=Lw;function Mw(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function TT(){return!1}var{toString:mj}=Object.prototype;function Uw(r){return mj.call(r)==="[object RegExp]"}var IT={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function Fw(r,e={}){if(!Uw(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(IT).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?IT[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function $w(r,e,{timeout:t}={}){try{return Mw(()=>Fw(r).test(e),{timeout:t})()}catch(n){if(TT(n))return!1;throw n}}var gj=15,yj=45,CT={timeout:400};function jw(r){return r.length>yj?!1:$w(Bw.v6({exact:!0}),r,CT)}function PT(r){return r.length>gj?!1:$w(Bw.v4({exact:!0}),r,CT)}var kT={http:"80",https:"443",ws:"80",wss:"443"},wj=["http","https","ws","wss"];function X2(r,e){e=e??{};let t=e.defaultDnsType??"dns",{scheme:n,hostname:o,port:i,path:s}=bj(r),a=[vj(o,t),xj(i,n),Ej(n)];s!=null&&a.push(Sj(s));let c="/"+a.filter(l=>!!l).reduce((l,f)=>l.concat(f),[]).join("/");return ie(c)}function bj(r){let[e]=r.split(":");wj.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o,pathname:i,search:s}=new URL(r);if(o==null||o===""){let c=_j(e);c!=null&&(o=c),c==null&&t==="http:"&&(o="80")}let a;return i!=null&&i!==""&&i!=="/"&&(i.startsWith("/")&&(i=i.substring(1)),a=i),s!=null&&s!==""&&(a=a??"",a+=s),{scheme:e,hostname:n,port:o,path:a}}function vj(r,e){if(!(r==null||r==="")){if(PT(r))return["ip4",r];if(jw(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(jw(t))return["ip6",t]}return[e,r]}}function xj(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function Ej(r){if(r.match(/^tcp$|^udp$/)==null)return r==="https"?["/tls/http"]:r==="wss"?["/tls/ws"]:[r]}function Sj(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function _j(r){if(!(r==null||r===""||kT[r]==null))return kT[r]}var Aj=["https://trustless-gateway.link","https://4everland.io"],Tj=2336;function Ij(r){return r=r.toString(),{id:Do(ce.createV1(Tj,Nr.digest(B(r)))),multiaddrs:[X2(r)]}}function Cj(r){return new URL(j(r.id.toMultihash().digest))}var Kw=class{gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??Aj).map(t=>Ij(t)),this.shuffle=e.shuffle??!0}async*findProviders(e,t){yield*(this.shuffle?this.gateways.toSorted(()=>Math.random()>.5?1:-1):this.gateways).map(n=>({...n,protocols:["transport-ipfs-gateway-http"],routing:"http-gateway-routing"}))}toString(){return`HTTPGatewayRouter([${this.gateways.map(e=>Cj(e)).join(", ")}])`}};function Vw(r={}){return new Kw(r)}var Hw=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}toString(){return"Libp2pRouter()"}};function qw(r){return new Hw(r)}function Pj(r){return r[Symbol.asyncIterator]!=null}function kj(r){if(Pj(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var Ji=kj;function Oj(r){return typeof r?.then=="function"}var Oh=class extends Xi{data;constructor(){super(),this.data=new Map}put(e,t,n){n?.signal?.throwIfAborted();let o;if(t instanceof Uint8Array)o=[t];else{let i=Ji(t);if(Oj(i))return i.then(s=>this._put(e,s,n));o=i}return this._put(e,o,n)}_put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(ir.encode(e.multihash.bytes),t),e}*get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(ir.encode(e.multihash.bytes));if(n==null)throw new eo;yield*n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(ir.encode(e.multihash.bytes))}async delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(ir.encode(e.multihash.bytes))}*getAll(e){e?.signal?.throwIfAborted();for(let[t,n]of this.data.entries())yield{cid:ce.createV1(Ga,lt(ir.decode(t))),bytes:(async function*(){yield*n})()},e?.signal?.throwIfAborted()}};var Bfe=zn("blockstore:core:tiered");var OT="SHARDING";function Dj(r){return r[Symbol.asyncIterator]!=null}function Nj(r,e){return Dj(r)?(async function*(){yield*(await Ji(r)).sort(e)})():(function*(){yield*Ji(r).sort(e)})()}var Y2=Nj;var es=class{put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield n}async*getMany(e,t={}){for await(let n of e)yield{key:n,value:await this.get(n,t)}}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await an(this.putMany(e,n)),e=[],await an(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null){let o=e.prefix;n=Ro(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Ro(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>Y2(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=Ro(n,()=>o++>=i)}return e.limit!=null&&(n=Js(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Ro(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Ro(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>Y2(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=Ro(n,()=>i++>=o)}return e.limit!=null&&(n=Js(n,e.limit)),n}};var Rc=class extends es{data;constructor(){super(),this.data=new Map}put(e,t,n){return n?.signal?.throwIfAborted(),this.data.set(e.toString(),t),e}get(e,t){t?.signal?.throwIfAborted();let n=this.data.get(e.toString());if(n==null)throw new eo;return n}has(e,t){return t?.signal?.throwIfAborted(),this.data.has(e.toString())}delete(e,t){t?.signal?.throwIfAborted(),this.data.delete(e.toString())}*_all(e,t){t?.signal?.throwIfAborted();for(let[n,o]of this.data.entries())yield{key:new ht(n),value:o},t?.signal?.throwIfAborted()}*_allKeys(e,t){t?.signal?.throwIfAborted();for(let n of this.data.keys())yield new ht(n),t?.signal?.throwIfAborted()}};var pde=new ht(OT);var Cde=zn("datastore:core:tiered");async function DT(r){if(r.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new P("Private network is enforced, but no protector was provided");return r}var Rh;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:ke(0),payloadType:ke(0),payload:ke(0),signature:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=t.bytes();break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(Rh||(Rh={}));var Q2=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var Mn=class r{static createFromProtobuf=e=>{let t=Rh.decode(e),n=Vt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t,n)=>{if(t==null)throw new Error("Missing private key");let o=e.domain,i=e.codec,s=e.marshal(),a=NT(o,i,s),c=await t.sign(a.subarray(),n);return new r({publicKey:t.publicKey,payloadType:i,payload:s,signature:c})};static openAndCertify=async(e,t,n)=>{let o=r.createFromProtobuf(e);if(!await o.validate(t,n))throw new Q2("Envelope signature is not valid for the given domain");return o};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:i}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=i}marshal(){return this.marshaled==null&&(this.marshaled=Rh.encode({publicKey:sr(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return e==null?!1:we(this.marshal(),e.marshal())}async validate(e,t){let n=NT(e,this.payloadType,this.payload);return this.publicKey.verify(n.subarray(),this.signature,t)}},NT=(r,e,t)=>{let n=B(r),o=Ur(n.byteLength),i=Ur(e.length),s=Ur(t.length);return new de(o,n,i,e,s,t)};var LT="libp2p-peer-record",BT=Uint8Array.from([3,1]);var Dh;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=Ie((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.multiaddr!=null&&i.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(i.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={multiaddr:ke(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let f=i.uint32();switch(f>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(f&7);break}}}return c})),o),n.encode=i=>Te(i,n.codec()),n.decode=(i,s)=>Ae(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=Ie((n,o,i={})=>{if(i.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(s,o);i.lengthDelimited!==!1&&o.ldelim()},(n,o,i={})=>{let s={peerId:ke(0),seq:0n,addresses:[]},a=o==null?n.len:n.pos+o;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{s.peerId=n.bytes();break}case 2:{s.seq=n.uint64();break}case 3:{if(i.limits?.addresses!=null&&s.addresses.length===i.limits.addresses)throw new dt('Decode error - map field "addresses" had too many elements');s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:i.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return s})),t),r.encode=n=>Te(n,r.codec()),r.decode=(n,o)=>Ae(n,r.codec(),o)})(Dh||(Dh={}));function MT(r,e){let t=(n,o)=>n.toString().localeCompare(o.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,o)=>e[o].equals(n)))}var Jr=class r{static createFromProtobuf=e=>{let t=Dh.decode(e),n=Ut(lt(t.peerId)),o=(t.addresses??[]).map(s=>ie(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=LT;static CODEC=BT;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:o}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=o??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=Dh.encode({peerId:this.peerId.toMultihash().bytes,seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!MT(this.multiaddrs,e.multiaddrs))}};var ts;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=Ie((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&s.value.byteLength>0&&(a.uint32(18),a.bytes(s.value)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:"",value:ke(0)},f=a==null?s.len:s.pos+a;for(;s.pos<f;){let u=s.uint32();switch(u>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(u&7);break}}}return l})),i),o.encode=s=>Te(s,o.codec()),o.decode=(s,a)=>Ae(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=Ie((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&(a.uint32(18),J2.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},f=a==null?s.len:s.pos+a;for(;s.pos<f;){let u=s.uint32();switch(u>>>3){case 1:{l.key=s.string();break}case 2:{l.value=J2.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(u&7);break}}}return l})),i),o.encode=s=>Te(s,o.codec()),o.decode=(s,a)=>Ae(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),Z2.codec().encode(a,i);if(o.protocols!=null)for(let a of o.protocols)i.uint32(18),i.string(a);if(o.publicKey!=null&&(i.uint32(34),i.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(i.uint32(42),i.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())i.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},i);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())i.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},i);o.updated!=null&&(i.uint32(64),i.uint64Number(o.updated)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(s.limits?.addresses!=null&&a.addresses.length===s.limits.addresses)throw new dt('Decode error - map field "addresses" had too many elements');a.addresses.push(Z2.codec().decode(o,o.uint32(),{limits:s.limits?.addresses$}));break}case 2:{if(s.limits?.protocols!=null&&a.protocols.length===s.limits.protocols)throw new dt('Decode error - map field "protocols" had too many elements');a.protocols.push(o.string());break}case 4:{a.publicKey=o.bytes();break}case 5:{a.peerRecordEnvelope=o.bytes();break}case 6:{if(s.limits?.metadata!=null&&a.metadata.size===s.limits.metadata)throw new Bd('Decode error - map field "metadata" had too many elements');let f=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(f.key,f.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new Bd('Decode error - map field "tags" had too many elements');let f=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(f.key,f.value);break}case 8:{a.updated=o.uint64Number();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(ts||(ts={}));var Z2;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),t.observed!=null&&(n.uint32(24),n.uint64Number(t.observed)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={multiaddr:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.multiaddr=t.bytes();break}case 2:{i.isCertified=t.bool();break}case 3:{i.observed=t.uint64Number();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(Z2||(Z2={}));var J2;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.value=t.uint32();break}case 2:{i.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(J2||(J2={}));function Lj(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;r.type==="RSA"&&(t=r.toMultihash());let n=Vt(e.publicKey,t);return ii(n)}function UT(r,e,t){let n=ts.decode(e);return Hu(r,n,t)}function Hu(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[i,s]of e.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...e,id:Lj(r,e),addresses:e.addresses.filter(({observed:i})=>i!=null&&i>Date.now()-t).map(({multiaddr:i,isCertified:s})=>({multiaddr:ie(i),isCertified:s??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function FT(r,e){return Bj(r.addresses,e.addresses)&&Mj(r.protocols,e.protocols)&&Uj(r.publicKey,e.publicKey)&&Fj(r.peerRecordEnvelope,e.peerRecordEnvelope)&&$j(r.metadata,e.metadata)&&jj(r.tags,e.tags)}function Bj(r,e){return jT(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!we(t.multiaddr,n.multiaddr)))}function Mj(r,e){return jT(r,e,(t,n)=>t===n)}function Uj(r,e){return $T(r,e)}function Fj(r,e){return $T(r,e)}function $j(r,e){return KT(r,e,(t,n)=>we(t,n))}function jj(r,e){return KT(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function $T(r,e){return r==null&&e==null?!0:r!=null&&e!=null?we(r,e):!1}function jT(r,e,t){if(r.length!==e.length)return!1;for(let n=0;n<r.length;n++)if(!t(r[n],e[n]))return!1;return!0}function KT(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let i=e.get(n);if(i==null||!t(o,i))return!1}return!0}var Ww="/peers/";function Nh(r){if(!Rr(r)||r.type==null)throw new P("Invalid PeerId");let e=r.toCID().toString();return new ht(`${Ww}${e}`)}async function VT(r,e,t,n,o){let i=new Map;for(let s of t){if(s==null)continue;if(s.multiaddr instanceof Uint8Array&&(s.multiaddr=ie(s.multiaddr)),!ni(s.multiaddr))throw new P("Multiaddr was invalid");if(!await e(r,s.multiaddr,o))continue;let a=s.isCertified??!1,c=s.multiaddr.toString(),l=i.get(c);l!=null?s.isCertified=l.isCertified||a:i.set(c,{multiaddr:s.multiaddr,isCertified:a})}return[...i.values()].sort((s,a)=>s.multiaddr.toString().localeCompare(a.multiaddr.toString())).map(({isCertified:s,multiaddr:a})=>{let c=a.getComponents().find(l=>l.code===421)?.value;return r.equals(c)&&(a=a.decapsulate(ie(`/p2p/${r}`))),{isCertified:s,multiaddr:a.bytes}})}async function tg(r,e,t,n){if(e==null)throw new P("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new P("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new P("peer id did not match existing peer id");let i=o?.addresses??[],s=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(i=[],e.multiaddrs!=null&&i.push(...e.multiaddrs.map(d=>({isCertified:!1,multiaddr:d}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let d=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=eg(d,{validate:HT})}if(e.tags!=null){let d=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=eg(d,{validate:qT,map:WT})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(d=>({isCertified:!1,multiaddr:d}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...e.protocols])),e.metadata!=null){let d=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,m]of d)m==null?a.delete(h):a.set(h,m);a=eg([...a.entries()],{validate:HT})}if(e.tags!=null){let d=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[m,w]of d)w==null?h.delete(m):h.set(m,w);c=eg([...h.entries()],{validate:qT,map:WT})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let f;o?.id.publicKey!=null?f=sr(o.id.publicKey):e.publicKey!=null?f=sr(e.publicKey):r.publicKey!=null&&(f=sr(r.publicKey));let u={addresses:await VT(r,n.addressFilter??(async()=>!0),i,n.existingPeer?.peerPB.addresses,n),protocols:[...s.values()].sort((d,h)=>d.localeCompare(h)),metadata:a,tags:c,publicKey:f,peerRecordEnvelope:l};return u.addresses.forEach(d=>{d.observed=n.existingPeer?.peerPB.addresses?.find(h=>we(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete u.publicKey,u}function eg(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([i],[s])=>i.localeCompare(s)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function HT(r,e){if(typeof r!="string")throw new P("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new P("Metadata value must be a Uint8Array")}function qT(r,e){if(typeof r!="string")throw new P("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new P("Tag value must be an integer");if(e.value<0||e.value>100)throw new P("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new P("Tag ttl must be an integer");if(e.ttl<0)throw new P("Tag ttl must be between greater than 0")}}function WT(r,e){let t;e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl)));let n={value:e.value??0};return t!=null&&(n.expiry=t),n}function zT(r){let e=r.toString().split("/")[2],t=ce.parse(e,ir);return Do(t)}function zw(r,e,t){let n=zT(r);return UT(n,e,t)}function Kj(r,e){return{prefix:Ww,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(zw(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(zw(n.key,n.value,e),zw(o.key,o.value,e)))}}var rg=class{peerId;datastore;locks;addressFilter;log;maxAddressAge;maxPeerAge;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.locks=Yi({name:"libp2p_peer_store_locks",metrics:e.metrics}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}getLock(e){let t=this.locks.get(e);return t==null&&(t={refs:0,lock:gh({name:e.toString(),singleProcess:!0})},this.locks.set(e,t)),t.refs++,t}maybeRemoveLock(e,t){t.refs--,t.refs===0&&(t.lock.finalize(),this.locks.delete(e))}async getReadLock(e,t){let n=this.getLock(e);try{let o=await n.lock.readLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async getWriteLock(e,t){let n=this.getLock(e);try{let o=await n.lock.writeLock(t);return()=>{o(),this.maybeRemoveLock(e,n)}}catch(o){throw this.maybeRemoveLock(e,n),o}}async has(e,t){try{return await this.load(e,t),!0}catch(n){if(n.name!=="NotFoundError")throw n}return!1}async delete(e,t){this.peerId.equals(e)||await this.datastore.delete(Nh(e),t)}async load(e,t){let n=Nh(e),o=await this.datastore.get(n,t),i=ts.decode(o);if(this.#r(e,i))throw await this.datastore.delete(n,t),new Xe;return Hu(e,i,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t,n){let o=await this.#e(e,n),i=await tg(e,t,"patch",{...n,addressFilter:this.addressFilter});return this.#t(e,i,o)}async patch(e,t,n){let o=await this.#e(e,n),i=await tg(e,t,"patch",{...n,addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,o)}async merge(e,t,n){let o=await this.#e(e,n),i=await tg(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,o)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(Kj(e??{},this.maxAddressAge),e)){let o=zT(t);if(o.equals(this.peerId))continue;let i=ts.decode(n);if(this.#r(o,i)){await this.datastore.delete(t,e);continue}yield Hu(o,i,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e,t){try{let n=Nh(e),o=await this.datastore.get(n,t),i=ts.decode(o);if(this.#r(e,i))throw await this.datastore.delete(n,t),new Xe;return{peerPB:i,peer:Hu(e,i,this.maxAddressAge)}}catch(n){n.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",n)}}async#t(e,t,n,o){t.updated=Date.now();let i=ts.encode(t);return await this.datastore.put(Nh(e),i,o),{peer:Hu(e,t,this.maxAddressAge),previous:n?.peer,updated:n==null||!FT(t,n.peerPB)}}#r(e,t){if(t.updated==null)return!0;if(this.peerId.equals(e))return!1;let n=t.updated<Date.now()-this.maxPeerAge,o=Date.now()-this.maxAddressAge,i=t.addresses.filter(s=>s.observed!=null&&s.observed>o);return n&&i.length===0}};var Gw=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new rg(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){for await(let n of this.store.all(t))e(n)}async all(e){return Ji(this.store.all(e))}async delete(e,t){let n=await this.store.getReadLock(e,t);try{await this.store.delete(e,t)}finally{n()}}async has(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.has(e,t)}finally{this.log.trace("has release read lock"),n?.()}}async get(e,t){let n=await this.store.getReadLock(e,t);try{return await this.store.load(e,t)}finally{n?.()}}async getInfo(e,t){let n=await this.get(e,t);return{id:n.id,multiaddrs:n.addresses.map(({multiaddr:o})=>o)}}async save(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.save(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async patch(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.patch(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async merge(e,t,n){let o=await this.store.getWriteLock(e,n);try{let i=await this.store.merge(e,t,n);return this.#e(e,i),i.peer}finally{o?.()}}async consumePeerRecord(e,t,n){let o=Rr(t)?t:Rr(t?.expectedPeer)?t.expectedPeer:void 0,i=Rr(t)||t===void 0?n:t,s=await Mn.openAndCertify(e,Jr.DOMAIN,i),a=Do(s.publicKey.toCID());if(o?.equals(a)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",o,a),!1;let c=Jr.createFromProtobuf(s.payload),l;try{l=await this.get(a,i)}catch(f){if(f.name!=="NotFoundError")throw f}if(l?.peerRecordEnvelope!=null){let f=Mn.createFromProtobuf(l.peerRecordEnvelope),u=Jr.createFromProtobuf(f.payload);if(u.seqNumber>=c.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,c.seqNumber),!1}return await this.patch(c.peerId,{peerRecordEnvelope:e,addresses:c.multiaddrs.map(f=>({isCertified:!0,multiaddr:f}))},i),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function GT(r,e={}){return new Gw(r,e)}var XT=864e13;var ng=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=zt({name:"libp2p_address_manager_dns_mappings",metrics:e.metrics})}has(e){let t=Ce(e),n=t.host;(t.type==="ip4"||t.type==="ip6")&&t.sni!=null&&(n=t.sni);for(let o of this.mappings.values())if(o.domain===n)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=pu(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?XT-Date.now():0,lastVerified:o?XT-Date.now():void 0})})}remove(e){let t=Ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,i]of this.mappings.entries())i.domain===t.sni&&(this.log("removing %s to %s DNS mapping %e",o,i.domain),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n].multiaddr;if(!mr(o))continue;let i=Ce(o);for(let[s,a]of this.mappings.entries()){if(i.host!==s)continue;let c=this.maybeAddSNIComponent(o,a.domain);c!=null&&(e.splice(n,1),n--,t.push({multiaddr:c,verified:a.verified,type:"dns-mapping",expires:a.expires,lastVerified:a.lastVerified}))}}return t}maybeAddSNIComponent(e,t){let n=e.getComponents();for(let o=0;o<n.length;o++)if(n[o].code===448&&n[o+1]?.code!==449)return n.splice(o+1,0,{name:"sni",code:449,value:t}),ie(n)}confirm(e,t){let n=Ce(e),o=n.host;(n.type==="ip4"||n.type==="ip6")&&n.sni!=null&&(o=n.sni);let i=!1;for(let[s,a]of this.mappings.entries())a.domain===o&&(this.log("marking %s to %s DNS mapping as verified",s,a.domain),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=Ce(e);if(n.type!=="ip4"&&n.type!=="ip6")return!1;let o=n.sni??n.host,i=!1;for(let[s,a]of this.mappings.entries())a.domain===o&&(this.log("removing verification of %s to %s DNS mapping",s,a.domain),i=i||a.verified,a.verified=!1,a.expires=Date.now()+t);return i}};var og=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=zt({name:"libp2p_address_manager_ip_mappings",metrics:e.metrics})}has(e){let t=Ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t.host)return!0;return!1}add(e,t,n,o=t,i="tcp"){let s=`${e}-${t}-${i}`,a=this.mappings.get(s)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:To(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=Ce(e);if(t.type!=="ip4"&&t.type!=="ip6")return!1;let n=!1;for(let[o,i]of this.mappings.entries()){for(let s=0;s<i.length;s++){let a=i[s];a.externalIp===t.host&&a.externalPort===t.port&&a.protocol===t.protocol&&(this.log("removing %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,t.host,t.port,t.protocol),n=n||a.verified,i.splice(s,1),s--)}i.length===0&&this.mappings.delete(o)}return n}getAll(e){let t=[];for(let{multiaddr:n}of e){if(!mr(n))continue;let o=Ce(n);if(o.type!=="ip4"&&o.type!=="ip6")continue;let i;if(o.protocol==="tcp"?i=`${o.host}-${o.port}-tcp`:o.protocol==="udp"&&(i=`${o.host}-${o.port}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)t.push({multiaddr:this.maybeOverrideIp(n,a.externalIp,a.externalFamily,a.protocol,a.externalPort),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}maybeOverrideIp(e,t,n,o,i){let s=e.getComponents(),a=s.findIndex(l=>l.code===4||l.code===41),c=s.findIndex(l=>l.name===o);return a>-1&&c>-1?(s[a].value=t,s[a].code=n===4?4:41,s[c].value=`${i}`,ie(s)):e}confirm(e,t){if(!mr(e))return!1;let n=Ce(e),o=!1;for(let i of this.mappings.values())for(let s of i)s.externalIp===n.host&&(this.log("marking %s to %s IP mapping as verified",s.internalIp,s.externalIp),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){if(!mr(e))return!1;let n=Ce(e),o=!1;for(let i of this.mappings.values())for(let s=0;s<i.length;s++){let a=i[s];a.externalIp===n.host&&a.externalPort===n.port&&a.protocol===n.protocol&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",a.externalIp,a.externalPort,n.host,n.port,n.protocol),o=o||a.verified,a.verified=!1,a.expires=Date.now()+t)}return o}};var Vj={maxObservedAddresses:10},ig=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=zt({name:"libp2p_address_manager_observed_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??Vj.maxObservedAddresses}has(e){return this.addresses.has(e.toString())}removePrefixed(e){for(let t of this.addresses.keys())t.toString().startsWith(e)&&this.addresses.delete(t)}add(e){this.addresses.size!==this.maxObservedAddresses&&(Mt(e)||DS(e)||(this.log("adding observed address %a",e),this.addresses.set(e.toString(),{verified:!1,expires:0})))}getAll(){return Array.from(this.addresses).map(([e,t])=>({multiaddr:ie(e),verified:t.verified,type:"observed",expires:t.expires,lastVerified:t.lastVerified}))}remove(e){let t=this.addresses.get(e.toString())?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(e.toString()),t}confirm(e,t){let n=e.toString(),o=this.addresses.get(n)??{verified:!1,expires:Date.now()+t,lastVerified:Date.now()},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.log("marking observed address %a as verified",n),this.addresses.set(n,o),i}};var Hj={maxObservedAddresses:10},sg=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=zt({name:"libp2p_address_manager_transport_addresses",metrics:e.metrics}),this.maxObservedAddresses=t.maxObservedAddresses??Hj.maxObservedAddresses}get(e,t){if(Mt(e))return{multiaddr:e,verified:!0,type:"transport",expires:Date.now()+t,lastVerified:Date.now()};let n=this.toKey(e),o=this.addresses.get(n);return o==null&&(o={verified:!mr(e),expires:0},this.addresses.set(n,o)),{multiaddr:e,verified:o.verified,type:"transport",expires:o.expires,lastVerified:o.lastVerified}}has(e){let t=this.toKey(e);return this.addresses.has(t)}remove(e){let t=this.toKey(e),n=this.addresses.get(t)?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(t),n}confirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0,lastVerified:0},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),i}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},i=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),i}toKey(e){if(!mr(e))return e.toString();let t=Ce(e);return`${t.host}-${t.port}-${t.protocol}`}};var YT=6e4,QT={maxObservedAddresses:10,addressVerificationTTL:YT*10,addressVerificationRetry:YT*5},qj=r=>r;function Xw(r,e){let t=r.getComponents().findLast(n=>n.code===421)?.value;return t!=null&&yt(t).equals(e)&&(r=r.decapsulate(ie(`/p2p/${e.toString()}`))),r}var ag=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:i=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.appendAnnounce=new Set(i.map(s=>s.toString())),this.observed=new ig(e,t),this.dnsMappings=new ng(e,t),this.ipMappings=new og(e,t),this.transportAddresses=new sg(e,t),this.announceFilter=t.announceFilter??qj,this.observedAddressFilter=$r(1024),this.addressVerificationTTL=t.addressVerificationTTL??QT.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??QT.addressVerificationRetry,this._updatePeerStoreAddresses=$i(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAddresses().map(t=>t.getComponents().findLast(n=>n.code===421)?.value===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses - %e",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>ie(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>ie(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>ie(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=Ce(e),n;switch(t.type){case"ip4":{n=`${t.host}:${t.port}`;break}case"ip6":{n=`[${t.host}]:${t.port}`;break}default:return}this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=Xw(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=Xw(e,this.components.peerId);let n=!0;(t?.type==="transport"||this.transportAddresses.has(e))&&!this.transportAddresses.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="dns-mapping"||this.dnsMappings.has(e))&&!this.dnsMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="ip-mapping"||this.ipMappings.has(e))&&!this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="observed"||this.observed.has(e))&&(this.maybeUpgradeToIPMapping(e)?(this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL),n=!1):!this.observed.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1)),n||this._updatePeerStoreAddresses()}removeObservedAddr(e,t){e=Xw(e,this.components.peerId);let n=!1;this.observed.has(e)&&!this.observed.remove(e)&&n&&(n=!1),this.transportAddresses.has(e)&&!this.transportAddresses.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.dnsMappings.has(e)&&!this.dnsMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.ipMappings.has(e)&&!this.ipMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),n&&this._updatePeerStoreAddresses()}getAddresses(){let e=new Set,t=this.getAddressesWithMetadata().filter(n=>{if(!n.verified)return!1;let o=n.multiaddr.toString();return e.has(o)?!1:(e.add(o),!0)}).map(n=>n.multiaddr);return this.announceFilter(t.map(n=>{let o=ie(n);return o.getComponents().pop()?.value===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(e)}),e.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];t=t.concat(this.components.transportManager.getAddrs().map(o=>this.transportAddresses.get(o,this.addressVerificationTTL)));let n=this.getAppendAnnounceAddrs();return n.length>0&&(this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(n)}),t=t.concat(n.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()})))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove(ie(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${To(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove(ie(`/ip${To(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e)||!mr(e))return!1;let t=Ce(e);if(t.type!=="ip4"||pu(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>Zi.exactMatch(i)||kc.exactMatch(i),i=>Pc.exactMatch(i),i=>sT.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(f=>Ce(f).type==="ip4"&&i(f)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>!zd(l)).pop();if(a==null)continue;let c=Ce(a);return c.port==null?!1:(this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.protocol),!0)}return!1}};var ZT;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(ZT||(ZT={}));var cg=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},lg=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},qu=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},Lh=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},ug=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},fg=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},dg=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},Bh=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},hg=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},pg=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},mg=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},gg=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},yg=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},ra=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Dc=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},wg=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}},bg=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}};var Yw=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=Rs())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>lm(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},Wj=["metrics","connectionProtector","dns"],zj=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function JT(r={}){let e=new Yw(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!zj.includes(o)){let s=e.components[o];if(s==null&&!Wj.includes(o))throw new cg(`${o} not set`);return s}return Reflect.get(n,o,i)},set(n,o,i){return typeof o=="string"?e.components[o]=i:Reflect.set(n,o,i),!0}})}function eI(r){let e={};for(let t of Object.values(r.components))for(let n of Gj(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of Xj(t))if(e[n]!==!0)throw new lg(`Service "${Yj(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function Gj(r){return Array.isArray(r?.[qe])?r[qe]:[]}function Xj(r){return Array.isArray(r?.[An])?r[An]:[]}function Yj(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}function tI(r={}){return r.denyDialMultiaddr==null&&(r.denyDialMultiaddr=e=>Zi.matches(e)?!0:Mt(e)),r}var Qw=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Zw=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},rI=r=>globalThis.DOMException===void 0?new Zw(r):new DOMException(r),nI=r=>{let e=r.reason===void 0?rI("This operation was aborted."):r.reason;return e instanceof Error?e:rI(e)};function Jw(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((f,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(nI(h)),a=()=>{u(nI(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(f,u);return}let d=new Qw;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?f():o instanceof Error?u(o):(d.message=o??`Promise timed out after ${t} milliseconds`,u(d))},t),(async()=>{try{f(await r)}catch(h){u(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}var Qj=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function Zj(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:f}=Qj(r),u=async(...h)=>{let m=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(m))return}catch(w){n(),s(w);return}c.push(m),t.count===c.length&&(n(),i(c))},d=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)f(h,u);for(let h of t.rejectionEvents)a.includes(h)||f(h,d)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,d);t.signal&&t.signal.addEventListener("abort",()=>{d(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Jw(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function Mh(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=Zj(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}function vg(r){if(Rr(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getComponents().findLast(o=>o.code===421)?.value;t=n==null?void 0:yt(n),e.forEach(o=>{if(!ni(o))throw new Xo("Invalid multiaddr");let i=o.getComponents().findLast(s=>s.code===421)?.value;if(i==null){if(t!=null)throw new P("Multiaddrs must all have the same peer id or have no peer id")}else{let s=yt(i);if(t?.equals(s)!==!0)throw new P("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!tT.exactMatch(n)),{peerId:t,multiaddrs:e}}var Jj=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function oI(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??Jj;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}function Uh(r){let e=Ce(r),t=e.cidr;if(e.type!=="ip4"&&e.type!=="ip6")throw new P(`Multiaddr ${r} was not an IPv4 or IPv6 address`);if(t==null)switch(e.type){case"ip4":{t=32;break}case"ip6":{t=128;break}default:throw new P(`Multiaddr ${r} was not an IPv4 or IPv6 address`)}return new gc(e.host,t)}function e7(r){return!fr.exactMatch(r)}function xg(r,e,t){if(r==null||e==null)return;let n=e.sort((i,s)=>i.direct?-1:s.direct?1:0).find(i=>i.limits==null);if(n==null||n.direct||t==null)return n;if(!t.some(i=>e7(i)))return n}var Eg=class{connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.allow=(t.allow??[]).map(n=>Uh(n)),this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),this.maybePruneConnections=this.maybePruneConnections.bind(this)}start(){this.events.addEventListener("connection:open",this.maybePruneConnections)}stop(){this.events.removeEventListener("connection:open",this.maybePruneConnections)}maybePruneConnections(){this._maybePruneConnections().catch(e=>{this.log.error("error while pruning connections - %e",e)})}async _maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length,n=this.connectionManager.getMaxConnections();if(this.log("checking max connections limit %d/%d",t,n),t<=n)return;let o=new jr;for(let c of e){let l=c.remotePeer;if(!o.has(l)){o.set(l,0);try{let f=await this.peerStore.get(l);o.set(l,[...f.tags.values()].reduce((u,d)=>u+d.value,0))}catch(f){f.name!=="NotFoundError"&&this.log.error("error loading peer tags - %e",f)}}}let i=this.sortConnections(e,o),s=Math.max(t-n,0),a=[];for(let c of i)if(this.log("too many connections open - closing a connection to %p",c.remotePeer),this.allow.some(f=>{if(mr(c.remoteAddr)){let u=Ce(c.remoteAddr);return f.contains(u.host)}return!0})||a.push(c),a.length===s)break;await Promise.all(a.map(async c=>{await oI(c,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:a})}sortConnections(e,t){return e.sort((n,o)=>{let i=n.timeline.open,s=o.timeline.open;return i<s?1:i>s?-1:0}).sort((n,o)=>n.direction==="outbound"&&o.direction==="inbound"?1:n.direction==="inbound"&&o.direction==="outbound"?-1:0).sort((n,o)=>n.streams.length>o.streams.length?1:n.streams.length<o.streams.length?-1:0).sort((n,o)=>{let i=t.get(n.remotePeer)??0,s=t.get(o.remotePeer)??0;return i>s?1:i<s?-1:0})}};var iI="last-dial-failure",sI="last-dial-success";var aI=100,Sg=50;function eK(r,e){let t=Pc.exactMatch(r.multiaddr),n=Pc.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=kc.exactMatch(r.multiaddr),i=kc.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=Zi.exactMatch(r.multiaddr),a=Zi.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=Th.exactMatch(r.multiaddr),l=Th.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let f=Ah.exactMatch(r.multiaddr),u=Ah.exactMatch(e.multiaddr);if(f&&!u)return-1;if(!f&&u)return 1;let d=Pw.exactMatch(r.multiaddr),h=Pw.exactMatch(e.multiaddr);return d&&!h?-1:!d&&h?1:0}function tK(r,e){let t=zd(r.multiaddr),n=zd(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function rK(r,e){let t=Mt(r.multiaddr),n=Mt(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function nK(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function oK(r,e){let t=fr.exactMatch(r.multiaddr),n=fr.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function cI(r){return r.sort(eK).sort(nK).sort(oK).sort(rK).sort(tK)}var t7=class{dns;canResolve(e){return e.getComponents().some(({name:t})=>t==="dnsaddr")}async resolve(e,t){let n=e.getComponents().find(c=>c.name==="dnsaddr")?.value;if(n==null)return[e];let i=await this.getDNS(t).query(`_dnsaddr.${n}`,{signal:t?.signal,types:[Tn.TXT]}),s=e.getComponents().find(c=>c.name==="p2p")?.value,a=[];for(let c of i.Answer){let l=c.data.replace(/["']/g,"").trim().split("=")[1];l!=null&&(s!=null&&!l.includes(s)||a.push(ie(l)))}return a}getDNS(e){return e.dns!=null?e.dns:(this.dns==null&&(this.dns=xm()),this.dns)}},Fh=new t7;async function r7(r,e,t){let n=t.depth??0;if(n>(t.maxRecursiveDepth??32))throw new bg("Max recursive depth reached");let o=!1,i=[];for(let s of Object.values(e))if(s.canResolve(r)){o=!0;let a=await s.resolve(r,t);for(let c of a)i.push(...await r7(c,e,{...t,depth:n+1}))}return o===!1&&i.push(r),i}var $h={maxParallelDials:Sg,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:Fh}},_g=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;resolvers;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??$h.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??$h.maxDialQueueLength,this.dialTimeout=t.dialTimeout??$h.dialTimeout,this.connections=t.connections??new jr,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.resolvers=t.resolvers??$h.resolvers,this.shutDownController=new AbortController,this.shutDownController.signal,this.queue=new O0({concurrency:t.maxParallelDials??$h.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("failure",n=>{n.detail?.error.name!==qr.name&&this.log.error("error in dial queue - %e",n.detail.error)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=vg(e);if(n!=null&&t.force!==!0){let s=xg(n,this.connections.get(n),o);if(s!=null)return this.log("already connected to %a",s.remoteAddr),t.onProgress?.(new oe("dial-queue:already-connected")),s}let i=this.queue.queue.find(s=>{if(n?.equals(s.options.peerId)===!0)return!0;let a=s.options.multiaddrs;if(a==null)return!1;for(let c of o)if(a.has(c.toString()))return!0;return!1});if(i!=null){this.log("joining existing dial target for %p",n);for(let s of o)i.options.multiaddrs.add(s.toString());return t.onProgress?.(new oe("dial-queue:already-in-dial-queue")),i.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Cs("Dial queue is full");return this.log("creating dial target for %p",n,o.map(s=>s.toString())),t.onProgress?.(new oe("dial-queue:add-to-dial-queue")),this.queue.add(async s=>{s.onProgress?.(new oe("dial-queue:start-dial"));let a=De([this.shutDownController.signal,s.signal]);try{return await this.dialPeer(s,a)}finally{a.clear()}},{peerId:n,priority:t.priority??s7,multiaddrs:new Set(o.map(s=>s.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,i=new Set,s=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);s||o.size>0;){c++,s=!1;let f=[],u=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...u]);let d=await this.calculateMultiaddrs(n,u,{...e,signal:t});for(let h of d){if(i.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}f.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,f.map(h=>h.multiaddr.toString())),e?.onProgress?.(new oe("dial-queue:calculated-addresses",f));for(let h of f){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new Cs("Peer had more than maxPeerAddrsToDial");a++;try{let m=await this.components.transportManager.dial(h.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",h.multiaddr);try{await this.components.peerStore.merge(m.remotePeer,{multiaddrs:[m.remoteAddr],metadata:{[sI]:B(Date.now().toString())}})}catch(w){this.log.error("could not update last dial failure key for %p - %e",n,w)}return m}catch(m){if(this.log.error("dial failed to %a - %e",h.multiaddr,m),i.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[iI]:B(Date.now().toString())}})}catch(w){this.log.error("could not update last dial failure key for %p - %e",n,w)}if(t.aborted)throw new Yo(m.message);l.push(m)}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:ie(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Cs("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new Bh("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:d})=>d.toString()))}catch(u){if(u.name!=="NotFoundError")throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:d})=>d.toString())),o.push(...u.multiaddrs.map(d=>({multiaddr:d,isCertified:!1})))}catch(u){u.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,u)}}}let i=(await Promise.all(o.map(async u=>{let d=await r7(u.multiaddr,this.resolvers,{dns:this.components.dns,log:this.log,...n});return d.length===1&&d[0].equals(u.multiaddr)?u:d.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;i=i.map(d=>d.multiaddr.getComponents().pop()?.name!=="p2p"?{multiaddr:d.multiaddr.encapsulate(u),isCertified:d.isCertified}:d)}let s=i.filter(u=>{if(this.components.transportManager.dialTransportForMultiaddr(u.multiaddr)==null)return!1;let d=u.multiaddr.getComponents().findLast(h=>h.code===421)?.value;return e!=null&&d!=null?e.equals(d):!0}),a=new Map;for(let u of s){let d=u.multiaddr.toString(),h=a.get(d);if(h!=null){h.isCertified=h.isCertified||u.isCertified||!1;continue}a.set(d,u)}let c=[...a.values()];if(c.length===0)throw new mg("The dial request has no valid addresses");let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let f=this.addressSorter==null?cI(l):l.sort(this.addressSorter);if(f.length===0)throw new Bh("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",i.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",f.map(({multiaddr:u})=>u.toString())),f}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnLimitedConnection===!1?n.find(o=>!fr.matches(o.multiaddr))!=null:!0}catch{}return!1}};var iK=Object.prototype.toString,sK=r=>iK.call(r)==="[object Error]",aK=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Network request failed","fetch failed","terminated"," A network error occurred.","Network connection lost"]);function a7(r){if(!(r&&sK(r)&&r.name==="TypeError"&&typeof r.message=="string"))return!1;let{message:t,stack:n}=r;return t==="Load failed"?n===void 0||"__sentry_captured__"in r:t.startsWith("error sending request for url")?!0:aK.has(t)}function cK(r){if(typeof r=="number"){if(r<0)throw new TypeError("Expected `retries` to be a non-negative number.");if(Number.isNaN(r))throw new TypeError("Expected `retries` to be a valid number or Infinity, got NaN.")}else if(r!==void 0)throw new TypeError("Expected `retries` to be a number or Infinity.")}function Ag(r,e,{min:t=0,allowInfinity:n=!1}={}){if(e!==void 0){if(typeof e!="number"||Number.isNaN(e))throw new TypeError(`Expected \`${r}\` to be a number${n?" or Infinity":""}.`);if(!n&&!Number.isFinite(e))throw new TypeError(`Expected \`${r}\` to be a finite number.`);if(e<t)throw new TypeError(`Expected \`${r}\` to be \u2265 ${t}.`)}}var c7=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}};function lK(r,e){let t=Math.max(1,r+1),n=e.randomize?Math.random()+1:1,o=Math.round(n*e.minTimeout*e.factor**(t-1));return o=Math.min(o,e.maxTimeout),o}function lI(r,e){return Number.isFinite(e)?e-(performance.now()-r):e}async function uK({error:r,attemptNumber:e,retriesConsumed:t,startTime:n,options:o}){let i=r instanceof Error?r:new TypeError(`Non-error was thrown: "${r}". You should only throw errors.`);if(i instanceof c7)throw i.originalError;let s=Number.isFinite(o.retries)?Math.max(0,o.retries-t):o.retries,a=o.maxRetryTime??Number.POSITIVE_INFINITY,c=Object.freeze({error:i,attemptNumber:e,retriesLeft:s,retriesConsumed:t});if(await o.onFailedAttempt(c),lI(n,a)<=0)throw i;let l=await o.shouldConsumeRetry(c),f=lI(n,a);if(f<=0||s<=0)throw i;if(i instanceof TypeError&&!a7(i)){if(l)throw i;return o.signal?.throwIfAborted(),!1}if(!await o.shouldRetry(c))throw i;if(!l)return o.signal?.throwIfAborted(),!1;let u=lK(t,o),d=Math.min(u,f);return o.signal?.throwIfAborted(),d>0&&await new Promise((h,m)=>{let w=()=>{clearTimeout(y),o.signal?.removeEventListener("abort",w),m(o.signal.reason)},y=setTimeout(()=>{o.signal?.removeEventListener("abort",w),h()},d);o.unref&&y.unref?.(),o.signal?.addEventListener("abort",w,{once:!0})}),o.signal?.throwIfAborted(),!0}async function l7(r,e={}){if(e={...e},cK(e.retries),Object.hasOwn(e,"forever"))throw new Error("The `forever` option is no longer supported. For many use-cases, you can set `retries: Infinity` instead.");e.retries??=10,e.factor??=2,e.minTimeout??=1e3,e.maxTimeout??=Number.POSITIVE_INFINITY,e.maxRetryTime??=Number.POSITIVE_INFINITY,e.randomize??=!1,e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.shouldConsumeRetry??=()=>!0,Ag("factor",e.factor,{min:0,allowInfinity:!1}),Ag("minTimeout",e.minTimeout,{min:0,allowInfinity:!1}),Ag("maxTimeout",e.maxTimeout,{min:0,allowInfinity:!0}),Ag("maxRetryTime",e.maxRetryTime,{min:0,allowInfinity:!0}),e.factor>0||(e.factor=1),e.signal?.throwIfAborted();let t=0,n=0,o=performance.now();for(;!Number.isFinite(e.retries)||n<=e.retries;){t++;try{e.signal?.throwIfAborted();let i=await r(t);return e.signal?.throwIfAborted(),i}catch(i){await uK({error:i,attemptNumber:t,retriesConsumed:n,startTime:o,options:e})&&n++}}throw new Error("Retry attempts exhausted without throwing an error.")}var Tg=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;events;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new vr({concurrency:t.maxParallelReconnects??5,metricName:"libp2p_reconnect_queue",metrics:e.metrics}),this.started=!1,this.retries=t.retries??5,this.backoffFactor=t.backoffFactor,this.retryInterval=t.retryInterval,this.events=e.events,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p - %e",n.detail,o)})})}async maybeReconnect(e){if(!this.started)return;let t=await this.peerStore.get(e);uI(t)&&(this.queue.has(e)||this.queue.add(async n=>{await l7(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(i){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,i),i}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(async n=>{this.log.error("failed to reconnect to %p - %e",e,n);let o={};[...t.tags.keys()].forEach(i=>{i.startsWith(Ha)&&(o[i]=void 0)}),await this.peerStore.merge(e,{tags:o}),this.events.safeDispatchEvent("peer:reconnect-failure",{detail:e})}).catch(async n=>{this.log.error("failed to remove keep-alive tag from %p - %e",e,n)}))}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>uI(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error("could not open connection to keepalive peer - %e",n)})}))}).catch(e=>{this.log.error("error reconnect to peers after start - %e",e)})}stop(){this.started=!1,this.queue.abort()}};function uI(r){for(let e of r.tags.keys())if(e.startsWith(Ha))return!0;return!1}var s7=50,u7={maxConnections:aI,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},Ig=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;outboundPendingConnections;maxConnections;dialQueue;reconnectQueue;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;peerId;constructor(e,t={}){if(this.maxConnections=t.maxConnections??u7.maxConnections,this.maxConnections<1)throw new P("Connection Manager maxConnections must be greater than 0");this.connections=new jr,this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.allow=(t.allow??[]).map(n=>Uh(ie(n))),this.deny=(t.deny??[]).map(n=>Uh(ie(n))),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??u7.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new Pu({points:t.inboundConnectionThreshold??u7.inboundConnectionThreshold,duration:1}),this.connectionPruner=new Eg({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{allow:t.allow?.map(n=>ie(n))}),this.dialQueue=new _g(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Sg,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:Fh},connections:this.connections}),this.reconnectQueue=new Tg({events:e.events,peerStore:e.peerStore,logger:e.logger,connectionManager:this},{retries:t.reconnectRetries,retryInterval:t.reconnectRetryInterval,backoffFactor:t.reconnectBackoffFactor,maxParallelReconnects:t.maxParallelReconnects})}[Symbol.toStringTag]="@libp2p/connection-manager";async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,"inbound pending":this.incomingPendingConnections,outbound:0,"outbound pending":this.outboundPendingConnections};for(let t of this.connections.values())for(let n of t)e[n.direction]++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let i=`${o.direction} ${o.protocol??"unnegotiated"}`;e[i]=(e[i]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let i={};for(let s of o.streams){let a=`${s.direction} ${s.protocol??"unnegotiated"}`;i[a]=(i[a]??0)+1}for(let[s,a]of Object.entries(i))e[s]=e[s]??[],e[s].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((s,a)=>s-a);let i=Math.floor(o.length*.9);t[n]=o[i]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await er(this.dialQueue,this.reconnectQueue,this.connectionPruner),this.started=!0,this.log("started")}async stop(){this.events.removeEventListener("connection:open",this.onConnect),this.events.removeEventListener("connection:close",this.onDisconnect),await or(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push(Promise.all([Mh(n,"close",{signal:AbortSignal.timeout(500)}),n.close({signal:AbortSignal.timeout(500)})]).catch(o=>{n.abort(o)}));this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}setMaxConnections(e){if(this.maxConnections<1)throw new P("Connection Manager maxConnections must be greater than 0");let t=!1;e<this.maxConnections&&(t=!0),this.maxConnections=e,t&&this.connectionPruner.maybePruneConnections()}onConnect(e){this._onConnect(e).catch(t=>{this.log.error("could not connect - %e",t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}if(t.status!=="open")return;let n=t.remotePeer,o=!this.connections.has(n),i=this.connections.get(n)??[];i.push(t),this.connections.set(n,i),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),o&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e,n=t.remotePeer,i=(this.connections.get(n)??[]).filter(s=>s.id!==t.id);this.connections.set(n,i),i.length===0&&(this.log.trace("peer %p disconnected, removing connection map entry",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:n}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.started)throw new _n("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n,multiaddrs:o}=vg(e);if(this.peerId.equals(n))throw new Ul("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let c=xg(n,this.getConnections(n),o);if(c!=null)return this.log("had an existing connection to %p as %a",n,c.remoteAddr),t.onProgress?.(new oe("dial-queue:already-connected")),c}let i=await this.dialQueue.dial(e,{...t,priority:t.priority??s7});if(i.status!=="open")throw new $a("Remote closed connection during opening");let s=this.connections.get(i.remotePeer);s==null&&(s=[],this.connections.set(i.remotePeer,s));let a=!1;for(let c of s)if(c.id===i.id&&(a=!0),t.force!==!0&&c.id!==i.id&&c.remoteAddr.equals(i.remoteAddr))return i.abort(new Xo("Duplicate multiaddr connection")),c;return a||s.push(i),i}finally{this.outboundPendingConnections--}}async openStream(e,t,n={}){return(await this.openConnection(e,n)).newStream(t,n)}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await Promise.all([Mh(o,"close",t),o.close(t)])}catch(i){o.abort(i)}}))}acceptIncomingConnection(e){if(this.deny.some(o=>{if(mr(e.remoteAddr)){let i=Ce(e.remoteAddr);return o.contains(i.host)}return!1}))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>{if(mr(e.remoteAddr)){let i=Ce(e.remoteAddr);return o.contains(i.host)}return!0}))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(mr(e.remoteAddr)){let o=Ce(e.remoteAddr);try{this.inboundConnectionRateLimiter.consume(o.host,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o.host),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>ie(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var hK=1e4,pK="1.0.0",mK="ping",gK="ipfs",fI=32,yK=!0,Cg=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??gK}/${mK}/${pK}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??hK,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??yK,this.timeout=new Io({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[qe]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,this.abortController.signal,this.heartbeatInterval=setInterval(()=>{this.components.connectionManager.getConnections().forEach(e=>{Promise.resolve().then(async()=>{let t=Date.now();try{let n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal}),o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),i=l0(o);t=Date.now(),await Promise.all([i.write(Yr(fI),{signal:n}),i.read({bytes:fI,signal:n})]),e.rtt=Date.now()-t,await o.close({signal:n})}catch(n){if(n.name!=="UnsupportedProtocolError")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat - %e",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var Pg=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e,this.findProviders=e.metrics?.traceFunction("libp2p.contentRouting.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()}),getAttributesFromYieldedValue:(n,o)=>({...o,providers:[...Array.isArray(o.providers)?o.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:j(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:j(n,"base36")})})??this.get}[Symbol.toStringTag]="@libp2p/content-routing";isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new qu("No content routers available");let n=this,o=new Bn;for await(let i of Qr(...n.routers.filter(s=>s.findProviders instanceof Function).map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new qu("No content routers available");await Promise.all(this.routers.filter(n=>n.provide instanceof Function).map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new qu("No content routers available");await Promise.all(this.routers.filter(n=>n.cancelReprovide instanceof Function).map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new _n;await Promise.all(this.routers.filter(o=>o.put instanceof Function).map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new _n;return Promise.any(this.routers.filter(n=>n.get instanceof Function).map(async n=>n.get(e,t)))}};var kg=globalThis.CustomEvent??Event;async function*rs(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=Ue(),a=Ue(),c=!1,l,f=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let m of r){if(i.length===t&&(s=Ue(),await s.promise),f)break;let w={done:!1};i.push(w),m().then(y=>{w.done=!0,w.ok=!0,w.value=y,o.dispatchEvent(new kg("task-complete"))},y=>{w.done=!0,w.err=y,o.dispatchEvent(new kg("task-complete"))})}c=!0,o.dispatchEvent(new kg("task-complete"))}catch(m){l=m,o.dispatchEvent(new kg("task-complete"))}});function u(){return n?i[0]?.done:!!i.find(m=>m.done)}function*d(){for(;i.length>0&&i[0].done;){let m=i[0];if(i.shift(),m.ok)yield m.value;else throw f=!0,s.resolve(),m.err;s.resolve()}}function*h(){for(;u();)for(let m=0;m<i.length;m++)if(i[m].done){let w=i[m];if(i.splice(m,1),m--,w.ok)yield w.value;else throw f=!0,s.resolve(),w.err;s.resolve()}}for(;;){if(u()||(a=Ue(),await a.promise),l!=null||(n?yield*d():yield*h(),l!=null))throw l;if(c&&i.length===0)break}}var Og=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[],this.findPeer=e.metrics?.traceFunction("libp2p.peerRouting.findPeer",this.findPeer.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,peer:n.toString()})})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.peerRouting.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,key:j(n,"base36")}),getAttributesFromYieldedValue:(n,o)=>({...o,peers:[...Array.isArray(o.peers)?o.peers:[],n.id.toString()]})})??this.getClosestPeers}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new Lh("No peer routers available");if(e.toString()===this.peerId.toString())throw new ug("Should not try to find self");let n=this,o=Qr(...this.routers.filter(i=>i.findPeer instanceof Function).map(i=>(async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error("router failed to find peer - %e",s)}})()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),i;throw new Xe}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Lh("No peer routers available");let n=this,o=$r(1024);for await(let i of rs((async function*(){let s=Qr(...n.routers.filter(a=>a.getClosestPeers instanceof Function).map(a=>a.getClosestPeers(e,t)));for await(let a of s)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs - %e",c);return}return a}})()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs},t),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var Rg=class extends _e{peerRouting;log;walking;walkers;shutdownController;walkController;needNext;constructor(e){super(),this.log=e.logger.forComponent("libp2p:random-walk"),this.peerRouting=e.peerRouting,this.walkers=0,this.walking=!1,this.shutdownController=new AbortController,this.shutdownController.signal}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,this.shutdownController.signal}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=De([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=Ue(),yield(await Mh(this,"walk:peer",{signal:t,rejectionEvents:["walk:error"]})).detail}catch(n){throw n.detail!=null?n.detail:n}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,this.walkController.signal;let e=De([this.walkController.signal,this.shutdownController.signal]);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=Yr(32),i=Date.now();for await(let s of this.peerRouting.getClosestPeers(o,{signal:e}))e.aborted&&this.log("aborting walk"),e.throwIfAborted(),this.log("found peer %p after %dms for %d walkers",s.id,Date.now()-i,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:s}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await ut(this.needNext.promise,e)),i=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("random walk errored - %e",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored - %e",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var f7=32,d7=64,Dg=class{log;topologies;handlers;components;middleware;constructor(e){this.components=e,this.log=e.logger.forComponent("libp2p:registrar"),this.middleware=new Map,this.topologies=new Map,e.metrics?.registerMetricGroup("libp2p_registrar_topologies",{calculate:()=>{let t={};for(let[n,o]of this.topologies)t[n]=o.size;return t}}),this.handlers=zt({name:"libp2p_registrar_protocol_handlers",metrics:e.metrics}),this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new fg(`No handler registered for protocol ${e}`);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e)&&n?.force!==!0)throw new dg(`Handler already registered for protocol ${e}`);this.handlers.set(e,{handler:t,options:{maxInboundStreams:f7,maxOutboundStreams:d7,...n}}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]},n)}async unhandle(e,t){(Array.isArray(e)?e:[e]).forEach(o=>{this.handlers.delete(o)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()},t)}async register(e,t){if(t==null)throw new P("invalid topology");let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}use(e,t){this.middleware.set(e,t)}unuse(e){this.middleware.delete(e)}getMiddleware(e){return this.middleware.get(e)??[]}async _onDisconnect(e){let t=e.detail,n={signal:AbortSignal.timeout(5e3)};try{let o=await this.components.peerStore.get(t,n);for(let i of o.protocols){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{a.filter?.has(t)!==!1&&(a.filter?.remove(t),await a.onDisconnect?.(t))}))}}catch(o){if(o.name==="NotFoundError")return;this.log.error("could not inform topologies of disconnecting peer %p - %e",t,o)}}async _onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));try{for(let i of o){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),await a.onDisconnect?.(t.id))}))}}catch(i){this.log.error("could not inform topologies of updated peer %p - %e",t.id,i)}}async _onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;try{for(let i of t){let s=this.topologies.get(i);s!=null&&await Promise.all([...s.values()].map(async a=>{n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),await a.onConnect?.(o,n))}))}}catch(i){this.log.error("could not inform topologies of updated peer after identify %p - %e",o,i)}}};var Ng=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=zt({name:"libp2p_transport_manager_transports",metrics:this.components.metrics}),this.listeners=zt({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??ld.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new P("Transport must have a valid tag");if(this.transports.has(t))throw new P(`There is already a transport with the tag ${t}`);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.dialTransportForMultiaddr(e);if(n==null)throw new wg(`No transport available for address ${String(e)}`);return t?.onProgress?.(new oe("transport-manager:selected-transport",n[Symbol.toStringTag])),n.dial(e,{...t,upgrader:this.components.upgrader})}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}dialTransportForMultiaddr(e){for(let t of this.transports.values())if(t.dialFilter([e]).length>0)return t}listenTransportForMultiaddr(e){for(let t of this.transports.values())if(t.listenFilter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new _n("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t={errors:new Map,ipv4:{success:0,attempts:0},ipv6:{success:0,attempts:0}};e.forEach(i=>{t.errors.set(i.toString(),new hg)});let n=[];for(let[i,s]of this.transports.entries()){let a=s.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",i,c);let l=s.createListener({upgrader:this.components.upgrader}),f=this.listeners.get(i)??[];f==null&&(f=[],this.listeners.set(i,f)),f.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let u=f.findIndex(d=>d===l);f.splice(u,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),Aw.matches(c)?t.ipv4.attempts++:Tw.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),Aw.matches(c)&&t.ipv4.success++,Tw.matches(c)&&t.ipv6.success++},u=>{throw this.log.error("transport %s could not listen on address %a - %e",i,c,u),t.errors.set(c.toString(),u),u}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(i=>i.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===ld.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new pg(`Some configured addresses failed to be listened on, you may need to remove one or more listen addresses from your configuration or set \`transportManager.faultTolerance\` to NO_FATAL:
33
33
  ${[...t.errors.entries()].map(([i,s])=>`
34
34
  ${i}: ${`${wK(s)}`.split(`
35
35
  `).join(`
@@ -43,17 +43,17 @@ ${[...t.errors.entries()].map(([i,s])=>`
43
43
  `),t),n.trace('responded with "%s" for "%s"',i,i),o.unwrap(),i;if(i==="ls"){let s=new de(...e.map(a=>zi.single(B(`${a}
44
44
  `))),B(`
45
45
  `));n.trace('respond with "%s" for %s',e,i),await o.write(s,t),n.trace('responded with "%s" for %s',e,i);continue}n.trace('respond with "na" for "%s"',i),await o.write(B(`na
46
- `),t),n('responded with "na" for "%s"',i)}}var p7=class extends _e{id;remoteAddr;remotePeer;direction;timeline;direct;multiplexer;encryption;limits;log;maConn;muxer;components;outboundStreamProtocolNegotiationTimeout;inboundStreamProtocolNegotiationTimeout;closeTimeout;constructor(e,t){super(),this.components=e,this.id=t.id,this.remoteAddr=t.maConn.remoteAddr,this.remotePeer=t.remotePeer,this.direction=t.direction??"outbound",this.timeline=t.maConn.timeline,this.encryption=t.cryptoProtocol,this.limits=t.limits,this.maConn=t.maConn,this.log=t.maConn.log,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.closeTimeout=t.closeTimeout??1e3,this.direct=e7(t.maConn.remoteAddr),this.onIncomingStream=this.onIncomingStream.bind(this),this.remoteAddr.getComponents().find(n=>n.code===421)==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),t.muxer!=null&&(this.multiplexer=t.muxer.protocol,this.muxer=t.muxer,this.muxer.addEventListener("stream",this.onIncomingStream)),this.maConn.addEventListener("close",n=>{this.dispatchEvent(new Ps(n.local,n.error))})}[Symbol.toStringTag]="Connection";[Yv]=!0;get streams(){return this.muxer?.streams??[]}get status(){return this.maConn.status}newStream=async(e,t={})=>{if(this.muxer==null)throw new ra("Connection is not multiplexed");if(this.muxer.status!=="open")throw new $a(`The connection muxer is "${this.muxer.status}" and not "open"`);if(this.maConn.status!=="open")throw new $a(`The connection is "${this.status}" and not "open"`);if(this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new cd("Cannot open protocol stream on limited connection");Array.isArray(e)||(e=[e]),this.log.trace("starting new stream for protocols %s",e);let n=await this.muxer.createStream({...t,protocol:e.length===1?e[0]:void 0});this.log.trace("started new stream %s for protocols %s",n.id,e);try{if(t.signal==null){n.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",e);let a=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);t={...t,signal:a}}n.protocol===""?(n.log.trace("selecting protocol from protocols %s",e),n.protocol=await Wu(n,e,t),n.log("negotiated protocol %s",n.protocol)):n.log("pre-negotiated protocol %s",n.protocol);let o=EK(n.protocol,this.components.registrar,t),i=fI(n.protocol,"outbound",this);if(i>o){let a=new $l(`Too many outbound protocol streams for protocol "${n.protocol}" - ${i}/${o}`);throw n.abort(a),a}await this.components.peerStore.merge(this.remotePeer,{protocols:[n.protocol]}),this.components.metrics?.trackProtocolStream(n);let s=this.components.registrar.getMiddleware(n.protocol);return await this.runMiddlewareChain(n,this,s)}catch(o){throw n.status==="open"?n.abort(o):this.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",this.direction==="inbound"?"from":"to",this.remoteAddr,e,o),o}};async onIncomingStream(e){let t=e.detail,n=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);t.log("start protocol negotiation, timing out after %dms",this.inboundStreamProtocolNegotiationTimeout);try{if(t.protocol===""){let l=this.components.registrar.getProtocols();t.log.trace("selecting protocol from protocols %s",l),t.protocol=await zu(t,l,{signal:n}),t.log("negotiated protocol %s",t.protocol)}else t.log("pre-negotiated protocol %s",t.protocol);let o=xK(t.protocol,this.components.registrar);if(fI(t.protocol,"inbound",this)>o)throw new om(`Too many inbound protocol streams for protocol "${t.protocol}" - limit ${o}`);await this.components.peerStore.merge(this.remotePeer,{protocols:[t.protocol]},{signal:n}),this.components.metrics?.trackProtocolStream(t);let{handler:s,options:a}=this.components.registrar.getHandler(t.protocol);if(this.limits!=null&&a.runOnLimitedConnection!==!0)throw new cd("Cannot open protocol stream on limited connection");let c=this.components.registrar.getMiddleware(t.protocol);c.push(async(l,f,u)=>{await s(l,f),u(l,f)}),await this.runMiddlewareChain(t,this,c)}catch(o){t.abort(o)}}async runMiddlewareChain(e,t,n){for(let o=0;o<n.length;o++){let i=n[o];e.log.trace("running middleware",o,i),await new Promise((s,a)=>{try{let c=i(e,t,(l,f)=>{e=l,t=f,s()});c instanceof Promise&&c.catch(a)}catch(c){a(c)}}),e.log.trace("ran middleware",o,i)}return e}async close(e={}){if(this.log("closing connection to %a",this.remoteAddr),e.signal==null){let t=AbortSignal.timeout(this.closeTimeout);e={...e,signal:t}}await this.muxer?.close(e),await this.maConn.close(e)}abort(e){this.muxer?.abort(e),this.maConn.abort(e)}};function dI(r,e){return new p7(r,e)}function xK(r,e){try{let{options:t}=e.getHandler(r);if(t.maxInboundStreams!=null)return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return f7}function EK(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.name!=="UnhandledProtocolError")throw n}return t.maxOutboundStreams??d7}function fI(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var Og=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;connectionCloseTimeout;constructor(e,t){this.components=e,this.connectionEncrypters=zt({name:"libp2p_upgrader_connection_encrypters",metrics:this.components.metrics}),t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=zt({name:"libp2p_upgrader_stream_multiplexers",metrics:this.components.metrics}),t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.connectionCloseTimeout=t.connectionCloseTimeout??1e3,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total"),inboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_inbound_errors_total"),outboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_outbound_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new dg(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=De([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,o=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=this.components.connectionManager.acceptIncomingConnection(e),!n)throw new hg("Connection denied");await ut(this.shouldBlockConnection("denyInboundConnection",e),o),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(i){throw this.metrics.errors?.increment({inbound:!0}),this.metrics.inboundErrors?.increment({[i.name??"Error"]:!0}),i}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getComponents().findLast(s=>s.code===421)?.value,o;n!=null&&(o=yt(n),await ut(this.shouldBlockConnection("denyOutboundConnection",o,e),t.signal));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),this.metrics.outboundErrors?.increment({[n.name??"Error"]:!0}),n}}async _performUpgrade(e,t,n){let o=e,i,s,a,c,l=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`;if(e.log=e.log.newScope(`${t}:${l}`),this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t),n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),o=await u.protect(o,n))}try{if(SK(n)){if(n.remotePeer==null)throw new Xo(`${t} connection that skipped encryption must have a peer id`);c="native",i=n.remotePeer}else{let u=e.remoteAddr.getComponents().findLast(h=>h.code===421)?.value,d;u!=null&&(d=yt(u)),n?.onProgress?.(new oe(`upgrader:encrypt-${t}-connection`)),{connection:o,remotePeer:i,protocol:c,streamMuxer:s}=await(t==="inbound"?this._encryptInbound(o,{...n,remotePeer:d}):this._encryptOutbound(o,{...n,remotePeer:d}))}if(i.equals(this.components.peerId)){let u=new Ul("Can not dial self");throw e.abort(u),u}await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,e),n?.muxerFactory!=null?s=n.muxerFactory:s==null&&this.streamMuxers.size>0&&(n?.onProgress?.(new oe(`upgrader:multiplex-${t}-connection`)),s=await(t==="inbound"?this._multiplexInbound(o,this.streamMuxers,n):this._multiplexOutbound(o,this.streamMuxers,n)))}catch(u){throw e.log.error("failed to upgrade %s connection %s %a - %e",t,t==="inbound"?"from":"to",e.remoteAddr,u),u}s!=null&&(e.log("create muxer %s",s.protocol),a=s.createStreamMuxer(o)),await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e);let f=this._createConnection({id:l,cryptoProtocol:c,direction:t,maConn:e,stream:o,muxer:a,remotePeer:i,limits:n?.limits,closeTimeout:this.connectionCloseTimeout});return f.log("successfully upgraded connection"),f}_createConnection(e){let t=dI(this.components,{...e,outboundStreamProtocolNegotiationTimeout:this.outboundStreamProtocolNegotiationTimeout,inboundStreamProtocolNegotiationTimeout:this.inboundStreamProtocolNegotiationTimeout});return t.addEventListener("close",()=>{this.events.safeDispatchEvent("connection:close",{detail:t})}),this.events.safeDispatchEvent("connection:open",{detail:t}),t}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let o=await zu(e,n,t),i=this.connectionEncrypters.get(o);if(i==null)throw new Rc(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using %s",o),{...await i.secureInbound(e,t),protocol:o}}catch(o){throw new Rc(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let o=await Wu(e,n,t),i=this.connectionEncrypters.get(o);if(i==null)throw new Rc(`no crypto module found for ${o}`);return e.log("encrypting outbound connection using %s",o),{...await i.secureOutbound(e,t),protocol:o}}catch(o){throw new Rc(o.message)}}async _multiplexOutbound(e,t,n){let o=Array.from(t.keys());e.log("outbound selecting muxer %s",o);try{e.log.trace("selecting stream muxer from %s",o);let i=await Wu(e,o,n),s=t.get(i);if(s==null)throw new ra(`No muxer configured for protocol "${i}"`);return e.log("selected %s as muxer protocol",i),s}catch(i){throw e.log.error("error multiplexing outbound connection - %e",i),new ra(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{e.log.trace("selecting stream muxer from %s",o);let i=await zu(e,o,n),s=t.get(i);if(s==null)throw new ra(`No muxer configured for protocol "${i}"`);return e.log("selected %s as muxer protocol",i),s}catch(i){throw e.log.error("error multiplexing inbound connection - %e",i),i}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};function SK(r){return r.skipEncryption===!0}var Rg="3.1.2",Dg="js-libp2p";function Ng(r,e){return`${r??Dg}/${e??Rg} browser/${globalThis.navigator.userAgent}`}var Kh=class extends _e{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new _e,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let f=n(l),u=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return f||u},this.peerId=e.peerId,this.logger=e.logger??Rs(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??Dg,i=e.nodeInfo?.version??Rg,s=this.components=YT({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??Ng(o,i)},logger:this.logger,events:t,datastore:e.datastore??new Oc,connectionGater:ZT(e.connectionGater),dns:e.dns});e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),this.peerStore=this.configureComponent("peerStore",qT(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),s.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let f={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(u=>u.multiaddr)};s.events.safeDispatchEvent("peer:discovery",{detail:f})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(s)),this.components.upgrader=new Og(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,f)=>this.configureComponent(`connection-encryption-${f}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,f)=>this.configureComponent(`stream-muxers-${f}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout,connectionCloseTimeout:e.connectionManager?.connectionCloseTimeout}),this.configureComponent("transportManager",new kg(this.components,e.transportManager)),this.configureComponent("connectionManager",new Sg(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new _g(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Pg(this.components)),this.configureComponent("addressManager",new ng(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,f)=>this.configureComponent(`peer-router-${f}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new Ig(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,f)=>this.configureComponent(`content-router-${f}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new Ag(this.components,{routers:c})),this.configureComponent("randomWalk",new Cg(this.components)),(e.peerDiscovery??[]).forEach((l,f)=>{this.configureComponent(`peer-discovery-${f}`,l(this.components)).addEventListener("peer",d=>{this.#e(d)})}),e.transports?.forEach((l,f)=>{this.components.transportManager.add(this.configureComponent(`transport-${f}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let f=e.services[l],u=f(this.components);if(u==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=u,this.configureComponent(l,u),u[Pi]!=null&&(this.log("registering service %s for content routing",l),c.push(u[Pi])),u[Oi]!=null&&(this.log("registering service %s for peer routing",l),a.push(u[Oi])),u[Va]!=null&&(this.log("registering service %s for peer discovery",l),u[Va].addEventListener?.("peer",d=>{this.#e(d)}))}QT(s)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started with peer id %p",this.peerId)}catch(e){throw this.log.error("an error occurred starting libp2p - %e",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new Bn;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new P("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new P("no protocols were provided to open a stream");return this.components.connectionManager.openStream(e,t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){ni(e)&&(e=yt(e.getComponents().findLast(n=>n.code===421)?.value??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e,t);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=gt([B("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=Vt(o);return await this.peerStore.patch(e,{publicKey:i},t),i}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e,t){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async n=>{await this.components.registrar.unhandle(n,t)}))}async register(e,t,n){return this.components.registrar.register(e,t,n)}unregister(e){this.components.registrar.unregister(e)}use(e,t){this.components.registrar.use(e,Array.isArray(t)?t:[t])}unuse(e){this.components.registrar.unuse(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error("could not update multiaddrs of discovered peer - %e",n)})}};async function pI(r={}){r.privateKey??=await fu("Ed25519");let e=new Kh({...await kT(r),peerId:HA(r.privateKey)});return r.start!==!1&&await e.start(),e}var _K=["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"];function mI(r){return r==null?!1:r instanceof Kh?!0:_K.every(e=>typeof r[e]=="function")}var hC=nr(_I(),1);var m7={keyLength:64,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"};var Gu={};Lt(Gu,{create:()=>MK,derivedEmptyPasswordKey:()=>Lg});var Lg={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function MK(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",i=r?.saltLength??16,s=r?.iterations??32767,a=Wt.get();t*=8;async function c(u,d){let h=a.getRandomValues(new Uint8Array(i)),m=a.getRandomValues(new Uint8Array(n)),w={name:e,iv:m};typeof d=="string"&&(d=B(d));let y;if(d.length===0){y=await a.subtle.importKey("jwk",Lg,{name:"AES-GCM"},!0,["encrypt"]);try{let N={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},O=await a.subtle.importKey("raw",d,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(N,O,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",Lg,{name:"AES-GCM"},!0,["encrypt"])}}else{let N={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},O=await a.subtle.importKey("raw",d,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(N,O,{name:e,length:t},!0,["encrypt"])}let b=await a.subtle.encrypt(w,y,u);return gt([h,w.iv,new Uint8Array(b)])}async function l(u,d){let h=u.subarray(0,i),m=u.subarray(i,i+n),w=u.subarray(i+n),y={name:e,iv:m};typeof d=="string"&&(d=B(d));let b;if(d.length===0)try{let O={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},V=await a.subtle.importKey("raw",d,{name:"PBKDF2"},!1,["deriveKey"]);b=await a.subtle.deriveKey(O,V,{name:e,length:t},!0,["decrypt"])}catch{b=await a.subtle.importKey("jwk",Lg,{name:"AES-GCM"},!0,["decrypt"])}else{let O={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},V=await a.subtle.importKey("raw",d,{name:"PBKDF2"},!1,["deriveKey"]);b=await a.subtle.deriveKey(O,V,{name:e,length:t},!0,["decrypt"])}let N=await a.subtle.decrypt(y,b,w);return new Uint8Array(N)}return{encrypt:c,decrypt:l}}var io={};Lt(io,{Any:()=>li,BaseBlock:()=>Xt,BaseStringBlock:()=>Wh,BitString:()=>Mo,BmpString:()=>Bc,Boolean:()=>Nc,CharacterString:()=>qc,Choice:()=>Qu,Constructed:()=>Yt,DATE:()=>Zh,DateTime:()=>ep,Duration:()=>tp,EndOfContent:()=>zh,Enumerated:()=>Lc,GeneralString:()=>Hc,GeneralizedTime:()=>Wc,GraphicString:()=>Vc,HexBlock:()=>fi,IA5String:()=>Kc,Integer:()=>Un,Null:()=>hn,NumericString:()=>Uc,ObjectIdentifier:()=>Fn,OctetString:()=>Vr,Primitive:()=>as,PrintableString:()=>Fc,RawData:()=>b7,RelativeObjectIdentifier:()=>Qh,Repeated:()=>zc,Sequence:()=>vt,Set:()=>en,TIME:()=>rp,TeletexString:()=>$c,TimeOfDay:()=>Jh,UTCTime:()=>ia,UniversalString:()=>Mc,Utf8String:()=>oo,ValueBlock:()=>xr,VideotexString:()=>jc,ViewWriter:()=>Yu,VisibleString:()=>oa,compareSchema:()=>is,fromBER:()=>$n,verifySchema:()=>oV});var Me=nr(os());function Dc(r,e){let t=0;if(r.length===1)return r[0];for(let n=r.length-1;n>=0;n--)t+=r[r.length-1-n]*Math.pow(2,e*n);return t}function na(r,e,t=-1){let n=t,o=r,i=0,s=Math.pow(2,e);for(let a=1;a<8;a++){if(r<s){let c;if(n<0)c=new ArrayBuffer(a),i=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),i=n}let l=new Uint8Array(c);for(let f=a-1;f>=0;f--){let u=Math.pow(2,f*e);l[i-f-1]=Math.floor(o/u),o-=l[i-f-1]*u}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function Ug(...r){let e=0,t=0;for(let i of r)e+=i.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let i of r)o.set(i,t),t+=i.length;return o}function y7(){let r=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=r[0]===255&&r[1]&128,c=r[0]===0&&(r[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=r[0]&128;let n=Dc(t,8),o=new ArrayBuffer(this.valueHex.byteLength),i=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)i[a]=r[a];return i[0]&=127,Dc(i,8)-n}function AI(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let s=t-e,a=na(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=na(e,8,n),i=new Uint8Array(o);if(i[0]&128){let s=o.slice(0),a=new Uint8Array(s);o=new ArrayBuffer(o.byteLength+1),i=new Uint8Array(o);for(let c=0;c<s.byteLength;c++)i[c+1]=a[c];i[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function TI(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<t.length;o++)if(t[o]!==n[o])return!1;return!0}function fn(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let s=0;s<n;s++)o[s]="0";return o.join("").concat(t)}var O0e=Math.log(2);function Fg(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function v7(r){let e=0,t=0;for(let o=0;o<r.length;o++){let i=r[o];e+=i.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let i=r[o];n.set(new Uint8Array(i),t),t+=i.byteLength}return n.buffer}function cs(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var Yu=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return v7(this.items)}},Vh=[new Uint8Array([1])],II="0123456789",w7="name",CI="valueHexView",WK="isHexOnly",zK="idBlock",GK="tagClass",XK="tagNumber",YK="isConstructed",QK="fromBER",ZK="toBER",JK="local",dn="",ui=new ArrayBuffer(0),ey=new Uint8Array(0),qh="EndOfContent",kI="OCTET STRING",OI="BIT STRING";function fi(r){var e;return e=class extends r{get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}constructor(...n){var o;super(...n);let i=n[0]||{};this.isHexOnly=(o=i.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=i.valueHex?Me.BufferSourceConverter.toUint8Array(i.valueHex):ey}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!cs(this,s,o,i))return-1;let a=o+i;return this.valueHexView=s.subarray(o,a),this.valueHexView.length?(this.blockLength=i,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",ui)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:Me.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var ss=class{static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}constructor({blockLength:e=0,error:t=dn,warnings:n=[],valueBeforeDecode:o=ey}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=Me.BufferSourceConverter.toUint8Array(o)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:Me.Convert.ToHex(this.valueBeforeDecodeView)}}};ss.NAME="baseBlock";var xr=class extends ss{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};xr.NAME="valueBlock";var $g=class extends fi(ss){constructor({idBlock:e={}}={}){var t,n,o,i;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?Me.BufferSourceConverter.toUint8Array(e.valueHex):ey,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(i=e.isConstructed)!==null&&i!==void 0?i:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",ui}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let i=this.tagNumber;i&=31,t|=i,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=na(this.tagNumber,7),i=new Uint8Array(o),s=o.byteLength,a=new Uint8Array(s+1);if(a[0]=t|31,!e){for(let c=0;c<s-1;c++)a[c+1]=i[c]|128;a[s]=i[s-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let i=0;i<o.length-1;i++)n[i+1]=o[i]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;switch(i[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(i[0]&32)===32,this.isHexOnly=!1;let a=i[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),f=255;for(;i[c]&128;){if(l[c-1]=i[c]&127,c++,c>=i.length)return this.error="End of input reached before message was fully decoded",-1;if(c===f){f+=255;let d=new Uint8Array(f);for(let h=0;h<l.length;h++)d[h]=l[h];l=this.valueHexView=new Uint8Array(f)}}this.blockLength=c+1,l[c-1]=i[c]&127;let u=new Uint8Array(c);for(let d=0;d<c;d++)u[d]=l[d];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=Dc(l,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};$g.NAME="identificationBlock";var jg=class extends ss{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;if(i[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=i[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(i[0]&128),this.longFormUsed===!1)return this.length=i[0],this.blockLength=1,t+this.blockLength;let s=i[0]&127;if(s>8)return this.error="Too big integer",-1;if(s+1>i.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+s);return c[s-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=Dc(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=s+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=na(this.length,8);if(o.byteLength>127)return this.error="Too big length",ui;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let i=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let s=0;s<o.byteLength;s++)n[s+1]=i[s];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};jg.NAME="lengthBlock";var ue={},Xt=class extends ss{constructor({name:e=dn,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new $g(o),this.lenBlock=new jg(o),this.valueBlock=i?new i(o):new xr(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new Yu;t||RI(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let i=this.valueBlock.toBER(e);this.lenBlock.length=i.byteLength;let s=this.lenBlock.toBER(e);n.write(s),n.write(i)}return t?ui:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():Me.Convert.ToHex(this.toBER())}onAsciiEncoding(){let e=this.constructor.NAME,t=Me.Convert.ToHex(this.valueBlock.valueBeforeDecodeView);return`${e} : ${t}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return TI(t,n)}};Xt.NAME="BaseBlock";function RI(r){var e;if(r instanceof ue.Constructed)for(let t of r.valueBlock.value)RI(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var Wh=class extends Xt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=dn,...t}={},n){super(t,n),e&&this.fromString(e)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};Wh.NAME="BaseStringBlock";var Kg=class extends fi(xr){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Kg.NAME="PrimitiveValueBlock";var DI,as=class extends Xt{constructor(e={}){super(e,Kg),this.idBlock.isConstructed=!1}};DI=as;ue.Primitive=DI;as.NAME="PRIMITIVE";function eV(r,e){if(r instanceof e)return r;let t=new e;return t.idBlock=r.idBlock,t.lenBlock=r.lenBlock,t.warnings=r.warnings,t.valueBeforeDecodeView=r.valueBeforeDecodeView,t}function Zu(r,e=0,t=r.length){let n=e,o=new Xt({},xr),i=new ss;if(!cs(i,r,e,t))return o.error=i.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=Xt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=ue.EndOfContent;break;case 1:c=ue.Boolean;break;case 2:c=ue.Integer;break;case 3:c=ue.BitString;break;case 4:c=ue.OctetString;break;case 5:c=ue.Null;break;case 6:c=ue.ObjectIdentifier;break;case 10:c=ue.Enumerated;break;case 12:c=ue.Utf8String;break;case 13:c=ue.RelativeObjectIdentifier;break;case 14:c=ue.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=ue.Sequence;break;case 17:c=ue.Set;break;case 18:c=ue.NumericString;break;case 19:c=ue.PrintableString;break;case 20:c=ue.TeletexString;break;case 21:c=ue.VideotexString;break;case 22:c=ue.IA5String;break;case 23:c=ue.UTCTime;break;case 24:c=ue.GeneralizedTime;break;case 25:c=ue.GraphicString;break;case 26:c=ue.VisibleString;break;case 27:c=ue.GeneralString;break;case 28:c=ue.UniversalString;break;case 29:c=ue.CharacterString;break;case 30:c=ue.BmpString;break;case 31:c=ue.DATE;break;case 32:c=ue.TimeOfDay;break;case 33:c=ue.DateTime;break;case 34:c=ue.Duration;break;default:{let l=o.idBlock.isConstructed?new ue.Constructed:new ue.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?ue.Constructed:ue.Primitive}return o=eV(o,c),a=o.fromBER(r,e,o.lenBlock.isIndefiniteForm?t:o.lenBlock.length),o.valueBeforeDecodeView=r.subarray(n,n+o.blockLength),{offset:a,result:o}}function $n(r){if(!r.byteLength){let e=new Xt({},xr);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Zu(Me.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function tV(r,e){return r?1:e}var ci=class extends xr{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let i=t;for(;tV(this.isIndefiniteForm,n)>0;){let s=Zu(o,i,n);if(s.offset===-1)return this.error=s.result.error,this.warnings.concat(s.result.warnings),-1;if(i=s.offset,this.blockLength+=s.result.blockLength,n-=s.result.blockLength,this.value.push(s.result),this.isIndefiniteForm&&s.result.constructor.NAME===qh)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===qh?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new Yu;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?ui:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};ci.NAME="ConstructedValueBlock";var NI,Yt=class extends Xt{constructor(e={}){super(e,ci),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
46
+ `),t),n('responded with "na" for "%s"',i)}}var p7=class extends _e{id;remoteAddr;remotePeer;direction;timeline;direct;multiplexer;encryption;limits;log;maConn;muxer;components;outboundStreamProtocolNegotiationTimeout;inboundStreamProtocolNegotiationTimeout;closeTimeout;constructor(e,t){super(),this.components=e,this.id=t.id,this.remoteAddr=t.maConn.remoteAddr,this.remotePeer=t.remotePeer,this.direction=t.direction??"outbound",this.timeline=t.maConn.timeline,this.encryption=t.cryptoProtocol,this.limits=t.limits,this.maConn=t.maConn,this.log=t.maConn.log,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.closeTimeout=t.closeTimeout??1e3,this.direct=e7(t.maConn.remoteAddr),this.onIncomingStream=this.onIncomingStream.bind(this),this.remoteAddr.getComponents().find(n=>n.code===421)==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),t.muxer!=null&&(this.multiplexer=t.muxer.protocol,this.muxer=t.muxer,this.muxer.addEventListener("stream",this.onIncomingStream)),this.maConn.addEventListener("close",n=>{this.dispatchEvent(new Ps(n.local,n.error))})}[Symbol.toStringTag]="Connection";[Yv]=!0;get streams(){return this.muxer?.streams??[]}get status(){return this.maConn.status}newStream=async(e,t={})=>{if(this.muxer==null)throw new ra("Connection is not multiplexed");if(this.muxer.status!=="open")throw new $a(`The connection muxer is "${this.muxer.status}" and not "open"`);if(this.maConn.status!=="open")throw new $a(`The connection is "${this.status}" and not "open"`);if(this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new cd("Cannot open protocol stream on limited connection");Array.isArray(e)||(e=[e]),this.log.trace("starting new stream for protocols %s",e);let n=await this.muxer.createStream({...t,protocol:e.length===1?e[0]:void 0});this.log.trace("started new stream %s for protocols %s",n.id,e);try{if(t.signal==null){n.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",e);let a=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);t={...t,signal:a}}n.protocol===""?(n.log.trace("selecting protocol from protocols %s",e),n.protocol=await Wu(n,e,t),n.log("negotiated protocol %s",n.protocol)):n.log("pre-negotiated protocol %s",n.protocol);let o=EK(n.protocol,this.components.registrar,t),i=pI(n.protocol,"outbound",this);if(i>o){let a=new $l(`Too many outbound protocol streams for protocol "${n.protocol}" - ${i}/${o}`);throw n.abort(a),a}await this.components.peerStore.merge(this.remotePeer,{protocols:[n.protocol]}),this.components.metrics?.trackProtocolStream(n);let s=this.components.registrar.getMiddleware(n.protocol);return await this.runMiddlewareChain(n,this,s)}catch(o){throw n.status==="open"?n.abort(o):this.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",this.direction==="inbound"?"from":"to",this.remoteAddr,e,o),o}};async onIncomingStream(e){let t=e.detail,n=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);t.log("start protocol negotiation, timing out after %dms",this.inboundStreamProtocolNegotiationTimeout);try{if(t.protocol===""){let l=this.components.registrar.getProtocols();t.log.trace("selecting protocol from protocols %s",l),t.protocol=await zu(t,l,{signal:n}),t.log("negotiated protocol %s",t.protocol)}else t.log("pre-negotiated protocol %s",t.protocol);let o=xK(t.protocol,this.components.registrar);if(pI(t.protocol,"inbound",this)>o)throw new om(`Too many inbound protocol streams for protocol "${t.protocol}" - limit ${o}`);await this.components.peerStore.merge(this.remotePeer,{protocols:[t.protocol]},{signal:n}),this.components.metrics?.trackProtocolStream(t);let{handler:s,options:a}=this.components.registrar.getHandler(t.protocol);if(this.limits!=null&&a.runOnLimitedConnection!==!0)throw new cd("Cannot open protocol stream on limited connection");let c=this.components.registrar.getMiddleware(t.protocol);c.push(async(l,f,u)=>{await s(l,f),u(l,f)}),await this.runMiddlewareChain(t,this,c)}catch(o){t.abort(o)}}async runMiddlewareChain(e,t,n){for(let o=0;o<n.length;o++){let i=n[o];e.log.trace("running middleware",o,i),await new Promise((s,a)=>{try{let c=i(e,t,(l,f)=>{e=l,t=f,s()});c instanceof Promise&&c.catch(a)}catch(c){a(c)}}),e.log.trace("ran middleware",o,i)}return e}async close(e={}){if(this.log("closing connection to %a",this.remoteAddr),e.signal==null){let t=AbortSignal.timeout(this.closeTimeout);e={...e,signal:t}}await this.muxer?.close(e),await this.maConn.close(e)}abort(e){this.muxer?.abort(e),this.maConn.abort(e)}};function mI(r,e){return new p7(r,e)}function xK(r,e){try{let{options:t}=e.getHandler(r);if(t.maxInboundStreams!=null)return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return f7}function EK(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.name!=="UnhandledProtocolError")throw n}return t.maxOutboundStreams??d7}function pI(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var Lg=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;connectionCloseTimeout;constructor(e,t){this.components=e,this.connectionEncrypters=zt({name:"libp2p_upgrader_connection_encrypters",metrics:this.components.metrics}),t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=zt({name:"libp2p_upgrader_stream_multiplexers",metrics:this.components.metrics}),t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.connectionCloseTimeout=t.connectionCloseTimeout??1e3,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total"),inboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_inbound_errors_total"),outboundErrors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_outbound_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new gg(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=De([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,o=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=this.components.connectionManager.acceptIncomingConnection(e),!n)throw new yg("Connection denied");await ut(this.shouldBlockConnection("denyInboundConnection",e),o),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(i){throw this.metrics.errors?.increment({inbound:!0}),this.metrics.inboundErrors?.increment({[i.name??"Error"]:!0}),i}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getComponents().findLast(s=>s.code===421)?.value,o;n!=null&&(o=yt(n),await ut(this.shouldBlockConnection("denyOutboundConnection",o,e),t.signal));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),this.metrics.outboundErrors?.increment({[n.name??"Error"]:!0}),n}}async _performUpgrade(e,t,n){let o=e,i,s,a,c,l=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`;if(e.log=e.log.newScope(`${t}:${l}`),this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t),n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),o=await u.protect(o,n))}try{if(SK(n)){if(n.remotePeer==null)throw new Xo(`${t} connection that skipped encryption must have a peer id`);c="native",i=n.remotePeer}else{let u=e.remoteAddr.getComponents().findLast(h=>h.code===421)?.value,d;u!=null&&(d=yt(u)),n?.onProgress?.(new oe(`upgrader:encrypt-${t}-connection`)),{connection:o,remotePeer:i,protocol:c,streamMuxer:s}=await(t==="inbound"?this._encryptInbound(o,{...n,remotePeer:d}):this._encryptOutbound(o,{...n,remotePeer:d}))}if(i.equals(this.components.peerId)){let u=new Ul("Can not dial self");throw e.abort(u),u}await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,e),n?.muxerFactory!=null?s=n.muxerFactory:s==null&&this.streamMuxers.size>0&&(n?.onProgress?.(new oe(`upgrader:multiplex-${t}-connection`)),s=await(t==="inbound"?this._multiplexInbound(o,this.streamMuxers,n):this._multiplexOutbound(o,this.streamMuxers,n)))}catch(u){throw e.log.error("failed to upgrade %s connection %s %a - %e",t,t==="inbound"?"from":"to",e.remoteAddr,u),u}s!=null&&(e.log("create muxer %s",s.protocol),a=s.createStreamMuxer(o)),await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e);let f=this._createConnection({id:l,cryptoProtocol:c,direction:t,maConn:e,stream:o,muxer:a,remotePeer:i,limits:n?.limits,closeTimeout:this.connectionCloseTimeout});return f.log("successfully upgraded connection"),f}_createConnection(e){let t=mI(this.components,{...e,outboundStreamProtocolNegotiationTimeout:this.outboundStreamProtocolNegotiationTimeout,inboundStreamProtocolNegotiationTimeout:this.inboundStreamProtocolNegotiationTimeout});return t.addEventListener("close",()=>{this.events.safeDispatchEvent("connection:close",{detail:t})}),this.events.safeDispatchEvent("connection:open",{detail:t}),t}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let o=await zu(e,n,t),i=this.connectionEncrypters.get(o);if(i==null)throw new Dc(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using %s",o),{...await i.secureInbound(e,t),protocol:o}}catch(o){throw new Dc(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let o=await Wu(e,n,t),i=this.connectionEncrypters.get(o);if(i==null)throw new Dc(`no crypto module found for ${o}`);return e.log("encrypting outbound connection using %s",o),{...await i.secureOutbound(e,t),protocol:o}}catch(o){throw new Dc(o.message)}}async _multiplexOutbound(e,t,n){let o=Array.from(t.keys());e.log("outbound selecting muxer %s",o);try{e.log.trace("selecting stream muxer from %s",o);let i=await Wu(e,o,n),s=t.get(i);if(s==null)throw new ra(`No muxer configured for protocol "${i}"`);return e.log("selected %s as muxer protocol",i),s}catch(i){throw e.log.error("error multiplexing outbound connection - %e",i),new ra(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{e.log.trace("selecting stream muxer from %s",o);let i=await zu(e,o,n),s=t.get(i);if(s==null)throw new ra(`No muxer configured for protocol "${i}"`);return e.log("selected %s as muxer protocol",i),s}catch(i){throw e.log.error("error multiplexing inbound connection - %e",i),i}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};function SK(r){return r.skipEncryption===!0}var Bg="3.1.2",Mg="js-libp2p";function Ug(r,e){return`${r??Mg}/${e??Bg} browser/${globalThis.navigator.userAgent}`}var Kh=class extends _e{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new _e,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let f=n(l),u=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return f||u},this.peerId=e.peerId,this.logger=e.logger??Rs(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??Mg,i=e.nodeInfo?.version??Bg,s=this.components=JT({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??Ug(o,i)},logger:this.logger,events:t,datastore:e.datastore??new Rc,connectionGater:tI(e.connectionGater),dns:e.dns});e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),this.peerStore=this.configureComponent("peerStore",GT(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),s.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let f={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(u=>u.multiaddr)};s.events.safeDispatchEvent("peer:discovery",{detail:f})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(s)),this.components.upgrader=new Lg(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,f)=>this.configureComponent(`connection-encryption-${f}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,f)=>this.configureComponent(`stream-muxers-${f}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout,connectionCloseTimeout:e.connectionManager?.connectionCloseTimeout}),this.configureComponent("transportManager",new Ng(this.components,e.transportManager)),this.configureComponent("connectionManager",new Ig(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new Cg(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Dg(this.components)),this.configureComponent("addressManager",new ag(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,f)=>this.configureComponent(`peer-router-${f}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new Og(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,f)=>this.configureComponent(`content-router-${f}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new Pg(this.components,{routers:c})),this.configureComponent("randomWalk",new Rg(this.components)),(e.peerDiscovery??[]).forEach((l,f)=>{this.configureComponent(`peer-discovery-${f}`,l(this.components)).addEventListener("peer",d=>{this.#e(d)})}),e.transports?.forEach((l,f)=>{this.components.transportManager.add(this.configureComponent(`transport-${f}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let f=e.services[l],u=f(this.components);if(u==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=u,this.configureComponent(l,u),u[Pi]!=null&&(this.log("registering service %s for content routing",l),c.push(u[Pi])),u[Oi]!=null&&(this.log("registering service %s for peer routing",l),a.push(u[Oi])),u[Va]!=null&&(this.log("registering service %s for peer discovery",l),u[Va].addEventListener?.("peer",d=>{this.#e(d)}))}eI(s)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started with peer id %p",this.peerId)}catch(e){throw this.log.error("an error occurred starting libp2p - %e",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new Bn;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new P("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new P("no protocols were provided to open a stream");return this.components.connectionManager.openStream(e,t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){ni(e)&&(e=yt(e.getComponents().findLast(n=>n.code===421)?.value??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e,t);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=gt([B("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=Vt(o);return await this.peerStore.patch(e,{publicKey:i},t),i}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e,t){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async n=>{await this.components.registrar.unhandle(n,t)}))}async register(e,t,n){return this.components.registrar.register(e,t,n)}unregister(e){this.components.registrar.unregister(e)}use(e,t){this.components.registrar.use(e,Array.isArray(t)?t:[t])}unuse(e){this.components.registrar.unuse(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error("could not update multiaddrs of discovered peer - %e",n)})}};async function yI(r={}){r.privateKey??=await fu("Ed25519");let e=new Kh({...await DT(r),peerId:HA(r.privateKey)});return r.start!==!1&&await e.start(),e}var _K=["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"];function wI(r){return r==null?!1:r instanceof Kh?!0:_K.every(e=>typeof r[e]=="function")}var gC=nr(II(),1);var m7={keyLength:64,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"};var Gu={};Lt(Gu,{create:()=>MK,derivedEmptyPasswordKey:()=>Fg});var Fg={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function MK(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",i=r?.saltLength??16,s=r?.iterations??32767,a=Wt.get();t*=8;async function c(u,d){let h=a.getRandomValues(new Uint8Array(i)),m=a.getRandomValues(new Uint8Array(n)),w={name:e,iv:m};typeof d=="string"&&(d=B(d));let y;if(d.length===0){y=await a.subtle.importKey("jwk",Fg,{name:"AES-GCM"},!0,["encrypt"]);try{let N={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},O=await a.subtle.importKey("raw",d,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(N,O,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",Fg,{name:"AES-GCM"},!0,["encrypt"])}}else{let N={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},O=await a.subtle.importKey("raw",d,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(N,O,{name:e,length:t},!0,["encrypt"])}let b=await a.subtle.encrypt(w,y,u);return gt([h,w.iv,new Uint8Array(b)])}async function l(u,d){let h=u.subarray(0,i),m=u.subarray(i,i+n),w=u.subarray(i+n),y={name:e,iv:m};typeof d=="string"&&(d=B(d));let b;if(d.length===0)try{let O={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},V=await a.subtle.importKey("raw",d,{name:"PBKDF2"},!1,["deriveKey"]);b=await a.subtle.deriveKey(O,V,{name:e,length:t},!0,["decrypt"])}catch{b=await a.subtle.importKey("jwk",Fg,{name:"AES-GCM"},!0,["decrypt"])}else{let O={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},V=await a.subtle.importKey("raw",d,{name:"PBKDF2"},!1,["deriveKey"]);b=await a.subtle.deriveKey(O,V,{name:e,length:t},!0,["decrypt"])}let N=await a.subtle.decrypt(y,b,w);return new Uint8Array(N)}return{encrypt:c,decrypt:l}}var so={};Lt(so,{Any:()=>li,BaseBlock:()=>Xt,BaseStringBlock:()=>Wh,BitString:()=>Mo,BmpString:()=>Mc,Boolean:()=>Lc,CharacterString:()=>Wc,Choice:()=>Qu,Constructed:()=>Yt,DATE:()=>Zh,DateTime:()=>ep,Duration:()=>tp,EndOfContent:()=>zh,Enumerated:()=>Bc,GeneralString:()=>qc,GeneralizedTime:()=>zc,GraphicString:()=>Hc,HexBlock:()=>fi,IA5String:()=>Vc,Integer:()=>Un,Null:()=>hn,NumericString:()=>Fc,ObjectIdentifier:()=>Fn,OctetString:()=>Vr,Primitive:()=>as,PrintableString:()=>$c,RawData:()=>b7,RelativeObjectIdentifier:()=>Qh,Repeated:()=>Gc,Sequence:()=>vt,Set:()=>en,TIME:()=>rp,TeletexString:()=>jc,TimeOfDay:()=>Jh,UTCTime:()=>ia,UniversalString:()=>Uc,Utf8String:()=>io,ValueBlock:()=>xr,VideotexString:()=>Kc,ViewWriter:()=>Yu,VisibleString:()=>oa,compareSchema:()=>is,fromBER:()=>$n,verifySchema:()=>oV});var Me=nr(os());function Nc(r,e){let t=0;if(r.length===1)return r[0];for(let n=r.length-1;n>=0;n--)t+=r[r.length-1-n]*Math.pow(2,e*n);return t}function na(r,e,t=-1){let n=t,o=r,i=0,s=Math.pow(2,e);for(let a=1;a<8;a++){if(r<s){let c;if(n<0)c=new ArrayBuffer(a),i=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),i=n}let l=new Uint8Array(c);for(let f=a-1;f>=0;f--){let u=Math.pow(2,f*e);l[i-f-1]=Math.floor(o/u),o-=l[i-f-1]*u}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function Kg(...r){let e=0,t=0;for(let i of r)e+=i.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let i of r)o.set(i,t),t+=i.length;return o}function y7(){let r=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=r[0]===255&&r[1]&128,c=r[0]===0&&(r[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=r[0]&128;let n=Nc(t,8),o=new ArrayBuffer(this.valueHex.byteLength),i=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)i[a]=r[a];return i[0]&=127,Nc(i,8)-n}function CI(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let s=t-e,a=na(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=na(e,8,n),i=new Uint8Array(o);if(i[0]&128){let s=o.slice(0),a=new Uint8Array(s);o=new ArrayBuffer(o.byteLength+1),i=new Uint8Array(o);for(let c=0;c<s.byteLength;c++)i[c+1]=a[c];i[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function PI(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<t.length;o++)if(t[o]!==n[o])return!1;return!0}function fn(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let s=0;s<n;s++)o[s]="0";return o.join("").concat(t)}var o2e=Math.log(2);function Vg(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function v7(r){let e=0,t=0;for(let o=0;o<r.length;o++){let i=r[o];e+=i.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let i=r[o];n.set(new Uint8Array(i),t),t+=i.byteLength}return n.buffer}function cs(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var Yu=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return v7(this.items)}},Vh=[new Uint8Array([1])],kI="0123456789",w7="name",OI="valueHexView",WK="isHexOnly",zK="idBlock",GK="tagClass",XK="tagNumber",YK="isConstructed",QK="fromBER",ZK="toBER",JK="local",dn="",ui=new ArrayBuffer(0),oy=new Uint8Array(0),qh="EndOfContent",DI="OCTET STRING",NI="BIT STRING";function fi(r){var e;return e=class extends r{get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}constructor(...n){var o;super(...n);let i=n[0]||{};this.isHexOnly=(o=i.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=i.valueHex?Me.BufferSourceConverter.toUint8Array(i.valueHex):oy}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!cs(this,s,o,i))return-1;let a=o+i;return this.valueHexView=s.subarray(o,a),this.valueHexView.length?(this.blockLength=i,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",ui)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:Me.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var ss=class{static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}constructor({blockLength:e=0,error:t=dn,warnings:n=[],valueBeforeDecode:o=oy}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=Me.BufferSourceConverter.toUint8Array(o)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:Me.Convert.ToHex(this.valueBeforeDecodeView)}}};ss.NAME="baseBlock";var xr=class extends ss{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};xr.NAME="valueBlock";var Hg=class extends fi(ss){constructor({idBlock:e={}}={}){var t,n,o,i;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?Me.BufferSourceConverter.toUint8Array(e.valueHex):oy,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(i=e.isConstructed)!==null&&i!==void 0?i:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",ui}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let i=this.tagNumber;i&=31,t|=i,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=na(this.tagNumber,7),i=new Uint8Array(o),s=o.byteLength,a=new Uint8Array(s+1);if(a[0]=t|31,!e){for(let c=0;c<s-1;c++)a[c+1]=i[c]|128;a[s]=i[s-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let i=0;i<o.length-1;i++)n[i+1]=o[i]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;switch(i[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(i[0]&32)===32,this.isHexOnly=!1;let a=i[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),f=255;for(;i[c]&128;){if(l[c-1]=i[c]&127,c++,c>=i.length)return this.error="End of input reached before message was fully decoded",-1;if(c===f){f+=255;let d=new Uint8Array(f);for(let h=0;h<l.length;h++)d[h]=l[h];l=this.valueHexView=new Uint8Array(f)}}this.blockLength=c+1,l[c-1]=i[c]&127;let u=new Uint8Array(c);for(let d=0;d<c;d++)u[d]=l[d];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=Nc(l,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};Hg.NAME="identificationBlock";var qg=class extends ss{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;if(i[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=i[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(i[0]&128),this.longFormUsed===!1)return this.length=i[0],this.blockLength=1,t+this.blockLength;let s=i[0]&127;if(s>8)return this.error="Too big integer",-1;if(s+1>i.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+s);return c[s-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=Nc(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=s+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=na(this.length,8);if(o.byteLength>127)return this.error="Too big length",ui;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let i=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let s=0;s<o.byteLength;s++)n[s+1]=i[s];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};qg.NAME="lengthBlock";var ue={},Xt=class extends ss{constructor({name:e=dn,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new Hg(o),this.lenBlock=new qg(o),this.valueBlock=i?new i(o):new xr(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new Yu;t||LI(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let i=this.valueBlock.toBER(e);this.lenBlock.length=i.byteLength;let s=this.lenBlock.toBER(e);n.write(s),n.write(i)}return t?ui:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():Me.Convert.ToHex(this.toBER())}onAsciiEncoding(){let e=this.constructor.NAME,t=Me.Convert.ToHex(this.valueBlock.valueBeforeDecodeView);return`${e} : ${t}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return PI(t,n)}};Xt.NAME="BaseBlock";function LI(r){var e;if(r instanceof ue.Constructed)for(let t of r.valueBlock.value)LI(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var Wh=class extends Xt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=dn,...t}={},n){super(t,n),e&&this.fromString(e)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};Wh.NAME="BaseStringBlock";var Wg=class extends fi(xr){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Wg.NAME="PrimitiveValueBlock";var BI,as=class extends Xt{constructor(e={}){super(e,Wg),this.idBlock.isConstructed=!1}};BI=as;ue.Primitive=BI;as.NAME="PRIMITIVE";function eV(r,e){if(r instanceof e)return r;let t=new e;return t.idBlock=r.idBlock,t.lenBlock=r.lenBlock,t.warnings=r.warnings,t.valueBeforeDecodeView=r.valueBeforeDecodeView,t}function Zu(r,e=0,t=r.length){let n=e,o=new Xt({},xr),i=new ss;if(!cs(i,r,e,t))return o.error=i.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=Xt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=ue.EndOfContent;break;case 1:c=ue.Boolean;break;case 2:c=ue.Integer;break;case 3:c=ue.BitString;break;case 4:c=ue.OctetString;break;case 5:c=ue.Null;break;case 6:c=ue.ObjectIdentifier;break;case 10:c=ue.Enumerated;break;case 12:c=ue.Utf8String;break;case 13:c=ue.RelativeObjectIdentifier;break;case 14:c=ue.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=ue.Sequence;break;case 17:c=ue.Set;break;case 18:c=ue.NumericString;break;case 19:c=ue.PrintableString;break;case 20:c=ue.TeletexString;break;case 21:c=ue.VideotexString;break;case 22:c=ue.IA5String;break;case 23:c=ue.UTCTime;break;case 24:c=ue.GeneralizedTime;break;case 25:c=ue.GraphicString;break;case 26:c=ue.VisibleString;break;case 27:c=ue.GeneralString;break;case 28:c=ue.UniversalString;break;case 29:c=ue.CharacterString;break;case 30:c=ue.BmpString;break;case 31:c=ue.DATE;break;case 32:c=ue.TimeOfDay;break;case 33:c=ue.DateTime;break;case 34:c=ue.Duration;break;default:{let l=o.idBlock.isConstructed?new ue.Constructed:new ue.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?ue.Constructed:ue.Primitive}return o=eV(o,c),a=o.fromBER(r,e,o.lenBlock.isIndefiniteForm?t:o.lenBlock.length),o.valueBeforeDecodeView=r.subarray(n,n+o.blockLength),{offset:a,result:o}}function $n(r){if(!r.byteLength){let e=new Xt({},xr);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Zu(Me.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function tV(r,e){return r?1:e}var ci=class extends xr{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let i=t;for(;tV(this.isIndefiniteForm,n)>0;){let s=Zu(o,i,n);if(s.offset===-1)return this.error=s.result.error,this.warnings.concat(s.result.warnings),-1;if(i=s.offset,this.blockLength+=s.result.blockLength,n-=s.result.blockLength,this.value.push(s.result),this.isIndefiniteForm&&s.result.constructor.NAME===qh)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===qh?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new Yu;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?ui:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};ci.NAME="ConstructedValueBlock";var MI,Yt=class extends Xt{constructor(e={}){super(e,ci),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
47
47
  `).map(o=>` ${o}`).join(`
48
48
  `));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
49
49
  ${e.join(`
50
- `)}`:`${t} :`}};NI=Yt;ue.Constructed=NI;Yt.NAME="CONSTRUCTED";var Vg=class extends xr{fromBER(e,t,n){return t}toBER(e){return ui}};Vg.override="EndOfContentValueBlock";var LI,zh=class extends Xt{constructor(e={}){super(e,Vg),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};LI=zh;ue.EndOfContent=LI;zh.NAME=qh;var BI,hn=class extends Xt{constructor(e={}){super(e,xr),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};BI=hn;ue.Null=BI;hn.NAME="NULL";var Hg=class extends fi(xr){get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=Me.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);return cs(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,y7.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};Hg.NAME="BooleanValueBlock";var MI,Nc=class extends Xt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,Hg),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};MI=Nc;ue.Boolean=MI;Nc.NAME="BOOLEAN";var qg=class extends fi(ci){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=ci.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let i=0;i<this.value.length;i++){let s=this.value[i].constructor.NAME;if(s===qh){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==kI)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,t,n),this.blockLength=n;return o}toBER(e,t){return this.isConstructed?ci.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};qg.NAME="OctetStringValueBlock";var x7,Vr=class extends Xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},qg),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let i=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(i.byteLength){let s=Zu(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Yt.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=Me.Convert.ToHex(this.valueBlock.valueHexView);return`${e} : ${t}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof x7&&e.push(t.valueBlock.valueHexView);return Me.BufferSourceConverter.concat(e)}};x7=Vr;ue.OctetString=x7;Vr.NAME=kI;var Wg=class extends fi(ci){constructor({unusedBits:e=0,isConstructed:t=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,n){if(!n)return t;let o=-1;if(this.isConstructed){if(o=ci.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===qh){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==OI)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let i=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,i,t,n))return-1;let s=i.subarray(t,t+n);if(this.unusedBits=s[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=s.subarray(1);try{if(a.byteLength){let c=Zu(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=s.subarray(1),this.blockLength=s.length,t+n}toBER(e,t){if(this.isConstructed)return ci.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength){let o=new Uint8Array(1);return o[0]=0,o.buffer}let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};Wg.NAME="BitStringValueBlock";var UI,Mo=class extends Xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},Wg),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Yt.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let s of t)e.push(s.toString(2).padStart(8,"0"));let n=e.join(""),o=this.constructor.NAME,i=n.substring(0,n.length-this.valueBlock.unusedBits);return`${o} : ${i}`}}};UI=Mo;ue.BitString=UI;Mo.NAME=OI;var FI;function rV(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l=0,f=c<s?s:c,u=0;for(let d=f;d>=0;d--,u++){switch(!0){case u<a.length:l=i[s-u]+a[c-u]+t[0];break;default:l=i[s-u]+t[0]}switch(t[0]=l/10,!0){case u>=i.length:i=Ug(new Uint8Array([l%10]),i);break;default:i[s-u]=l%10}}return t[0]>0&&(i=Ug(t,i)),i}function PI(r){if(r>=Vh.length)for(let e=Vh.length;e<=r;e++){let t=new Uint8Array([0]),n=Vh[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let i=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=i[0]/10,n[o]=i[0]%10}t[0]>0&&(n=Ug(t,n)),Vh.push(n)}return Vh[r]}function nV(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l,f=0;for(let u=c;u>=0;u--,f++)switch(l=i[s-f]-a[c-f]-t,!0){case l<0:t=1,i[s-f]=l+10;break;default:t=0,i[s-f]=l}if(t>0)for(let u=s-c+1;u>=0;u--,f++)if(l=i[s-f]-t,l<0)t=1,i[s-f]=l+10;else{t=0,i[s-f]=l;break}return i.slice()}var Gh=class extends fi(xr){setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=y7.call(this)))}constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(AI(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let i=this.fromBER(e,t,n);if(i===-1)return i;let s=this.valueHexView;return s[0]===0&&(s[1]&128)!==0?this.valueHexView=s.subarray(1):o!==0&&s.length<o&&(o-s.length>1&&(o=s.length+1),this.valueHexView=s.subarray(o-s.length)),i}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,i=this.valueHexView,s="",a=!1;for(let c=i.byteLength-1;c>=0;c--){o=i[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=nV(PI(n),t),s="-";break;default:t=rV(t,PI(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=II.charAt(t[c]));return a===!1&&(s+=II.charAt(0)),s}};FI=Gh;Gh.NAME="IntegerValueBlock";Object.defineProperty(FI.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var Hh,Un=class extends Xt{constructor(e={}){super(e,Gh),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Fg(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Fg();let t=BigInt(e),n=new Yu,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(Me.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${Me.Convert.ToHex(a)}`)+t,f=Me.BufferSourceConverter.toUint8Array(Me.Convert.FromHex(l.toString(16)));f[0]|=128,n.write(f)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new Hh({valueHex:n.final()})}convertToDER(){let e=new Hh({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new Hh({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};Hh=Un;ue.Integer=Hh;Un.NAME="INTEGER";var $I,Lc=class extends Un{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};$I=Lc;ue.Enumerated=$I;Lc.NAME="ENUMERATED";var Xh=class extends fi(xr){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=Dc(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){Fg();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=na(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",ui;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n}toString(){let e="";if(this.isHexOnly)e=Me.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};Xh.NAME="sidBlock";var zg=class extends xr{constructor({value:e=dn,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Xh;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.value.length===0&&(i.isFirstSid=!0),this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,ui;t.push(o)}return v7(t)}fromString(e){this.value=[];let t=0,n=0,o="",i=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,i){let s=this.value[0],a=0;switch(s.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;s.valueDec=c+a,i=!1}else{let s=new Xh;if(o>Number.MAX_SAFE_INTEGER){Fg();let a=BigInt(o);s.valueBigInt=a}else if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return;this.value.length||(s.isFirstSid=!0,i=!0),this.value.push(s)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};zg.NAME="ObjectIdentifierValueBlock";var jI,Fn=class extends Xt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,zg),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};jI=Fn;ue.ObjectIdentifier=jI;Fn.NAME="OBJECT IDENTIFIER";var Yh=class extends fi(ss){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=Dc(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=na(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",ui;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n.buffer}toString(){let e="";return this.isHexOnly?e=Me.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};Yh.NAME="relativeSidBlock";var Gg=class extends xr{constructor({value:e=dn,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Yh;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let i=this.value[o].toBER(e);if(i.byteLength===0)return this.error=this.value[o].error,ui;n.push(i)}return v7(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let i=new Yh;if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return!0;this.value.push(i)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};Gg.NAME="RelativeObjectIdentifierValueBlock";var KI,Qh=class extends Xt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Gg),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};KI=Qh;ue.RelativeObjectIdentifier=KI;Qh.NAME="RelativeObjectIdentifier";var VI,vt=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};VI=vt;ue.Sequence=VI;vt.NAME="SEQUENCE";var HI,en=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};HI=en;ue.Set=HI;en.NAME="SET";var Xg=class extends fi(xr){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=dn}toJSON(){return{...super.toJSON(),value:this.value}}};Xg.NAME="StringValueBlock";var Yg=class extends Xg{};Yg.NAME="SimpleStringValueBlock";var tn=class extends Wh{constructor({...e}={}){super(e,Yg)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,Me.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};tn.NAME="SIMPLE STRING";var Qg=class extends tn{fromBuffer(e){this.valueBlock.valueHexView=Me.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=Me.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=Me.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(Me.Convert.FromUtf8String(e)),this.valueBlock.value=e}};Qg.NAME="Utf8StringValueBlock";var qI,oo=class extends Qg{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};qI=oo;ue.Utf8String=qI;oo.NAME="UTF8String";var Zg=class extends tn{fromBuffer(e){this.valueBlock.value=Me.Convert.ToUtf16String(e),this.valueBlock.valueHexView=Me.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(Me.Convert.FromUtf16String(e))}};Zg.NAME="BmpStringValueBlock";var WI,Bc=class extends Zg{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};WI=Bc;ue.BmpString=WI;Bc.NAME="BMPString";var Jg=class extends tn{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let i=na(e.charCodeAt(o),8),s=new Uint8Array(i);if(s.length>4)continue;let a=4-s.length;for(let c=s.length-1;c>=0;c--)n[o*4+c+a]=s[c]}this.valueBlock.value=e}};Jg.NAME="UniversalStringValueBlock";var zI,Mc=class extends Jg{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};zI=Mc;ue.UniversalString=zI;Mc.NAME="UniversalString";var GI,Uc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};GI=Uc;ue.NumericString=GI;Uc.NAME="NumericString";var XI,Fc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};XI=Fc;ue.PrintableString=XI;Fc.NAME="PrintableString";var YI,$c=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};YI=$c;ue.TeletexString=YI;$c.NAME="TeletexString";var QI,jc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};QI=jc;ue.VideotexString=QI;jc.NAME="VideotexString";var ZI,Kc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};ZI=Kc;ue.IA5String=ZI;Kc.NAME="IA5String";var JI,Vc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};JI=Vc;ue.GraphicString=JI;Vc.NAME="GraphicString";var eC,oa=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};eC=oa;ue.VisibleString=eC;oa.NAME="VisibleString";var tC,Hc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};tC=Hc;ue.GeneralString=tC;Hc.NAME="GeneralString";var rC,qc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};rC=qc;ue.CharacterString=rC;qc.NAME="CharacterString";var nC,ia=class extends oa{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,Me.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=fn(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=fn(this.month,2),t[2]=fn(this.day,2),t[3]=fn(this.hour,2),t[4]=fn(this.minute,2),t[5]=fn(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};nC=ia;ue.UTCTime=nC;ia.NAME="UTCTime";var oC,Wc=class extends ia{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){let e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);return new Date(e)}fromString(e){let t=!1,n="",o="",i=0,s,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,d=n.indexOf("+"),h="";if(d===-1&&(d=n.indexOf("-"),u=-1),d!==-1){if(h=n.substring(d+1),n=n.substring(0,d),h.length!==2&&h.length!==4)throw new Error("Wrong input string for conversion");let m=parseInt(h.substring(0,2),10);if(isNaN(m.valueOf()))throw new Error("Wrong input string for conversion");if(a=u*m,h.length===4){if(m=parseInt(h.substring(2,4),10),isNaN(m.valueOf()))throw new Error("Wrong input string for conversion");c=u*m}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");i=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(s=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*i;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*i;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*i;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let f=s.exec(o);if(f===null)throw new Error("Wrong input string for conversion");for(let u=1;u<f.length;u++)switch(u){case 1:this.year=parseInt(f[u],10);break;case 2:this.month=parseInt(f[u],10);break;case 3:this.day=parseInt(f[u],10);break;case 4:this.hour=parseInt(f[u],10)+a;break;case 5:this.minute=parseInt(f[u],10)+c;break;case 6:this.second=parseInt(f[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(fn(this.year,4)),t.push(fn(this.month,2)),t.push(fn(this.day,2)),t.push(fn(this.hour,2)),t.push(fn(this.minute,2)),t.push(fn(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(fn(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};oC=Wc;ue.GeneralizedTime=oC;Wc.NAME="GeneralizedTime";var iC,Zh=class extends oo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};iC=Zh;ue.DATE=iC;Zh.NAME="DATE";var sC,Jh=class extends oo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};sC=Jh;ue.TimeOfDay=sC;Jh.NAME="TimeOfDay";var aC,ep=class extends oo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};aC=ep;ue.DateTime=aC;ep.NAME="DateTime";var cC,tp=class extends oo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};cC=tp;ue.Duration=cC;tp.NAME="Duration";var lC,rp=class extends oo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};lC=rp;ue.TIME=lC;rp.NAME="TIME";var li=class{constructor({name:e=dn,optional:t=!1}={}){this.name=e,this.optional=t}},Qu=class extends li{constructor({value:e=[],...t}={}){super(t),this.value=e}},zc=class extends li{constructor({value:e=new li,local:t=!1,...n}={}){super(n),this.value=e,this.local=t}},b7=class{get data(){return this.dataView.slice().buffer}set data(e){this.dataView=Me.BufferSourceConverter.toUint8Array(e)}constructor({data:e=ey}={}){this.dataView=Me.BufferSourceConverter.toUint8Array(e)}fromBER(e,t,n){let o=t+n;return this.dataView=Me.BufferSourceConverter.toUint8Array(e).subarray(t,o),o}toBER(e){return this.dataView.slice().buffer}};function is(r,e,t){if(t instanceof Qu){for(let i of t.value)if(is(r,e,i).verified)return{verified:!0,result:r};{let i={verified:!1,result:{error:"Wrong values for Choice type"}};return t.hasOwnProperty(w7)&&(i.name=t.name),i}}if(t instanceof li)return t.hasOwnProperty(w7)&&(r[t.name]=e),{verified:!0,result:r};if(!(r instanceof Object))return{verified:!1,result:{error:"Wrong root object"}};if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 data"}};if(!(t instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(zK in t))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(QK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(ZK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let n=t.idBlock.toBER(!1);if(n.byteLength===0)return{verified:!1,result:{error:"Error encoding idBlock for ASN.1 schema"}};if(t.idBlock.fromBER(n,0,n.byteLength)===-1)return{verified:!1,result:{error:"Error decoding idBlock for ASN.1 schema"}};if(t.idBlock.hasOwnProperty(GK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.tagClass!==e.idBlock.tagClass)return{verified:!1,result:r};if(t.idBlock.hasOwnProperty(XK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.tagNumber!==e.idBlock.tagNumber)return{verified:!1,result:r};if(t.idBlock.hasOwnProperty(YK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.isConstructed!==e.idBlock.isConstructed)return{verified:!1,result:r};if(!(WK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.isHexOnly!==e.idBlock.isHexOnly)return{verified:!1,result:r};if(t.idBlock.isHexOnly){if(!(CI in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let i=t.idBlock.valueHexView,s=e.idBlock.valueHexView;if(i.length!==s.length)return{verified:!1,result:r};for(let a=0;a<i.length;a++)if(i[a]!==s[1])return{verified:!1,result:r}}if(t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&(r[t.name]=e)),t instanceof ue.Constructed){let i=0,s={verified:!1,result:{error:"Unknown error"}},a=t.valueBlock.value.length;if(a>0&&t.valueBlock.value[0]instanceof zc&&(a=e.valueBlock.value.length),a===0)return{verified:!0,result:r};if(e.valueBlock.value.length===0&&t.valueBlock.value.length!==0){let c=!0;for(let l=0;l<t.valueBlock.value.length;l++)c=c&&(t.valueBlock.value[l].optional||!1);return c?{verified:!0,result:r}:(t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&delete r[t.name]),r.error="Inconsistent object length",{verified:!1,result:r})}for(let c=0;c<a;c++)if(c-i>=e.valueBlock.value.length){if(t.valueBlock.value[c].optional===!1){let l={verified:!1,result:r};return r.error="Inconsistent length between ASN.1 data and schema",t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&(delete r[t.name],l.name=t.name)),l}}else if(t.valueBlock.value[0]instanceof zc){if(s=is(r,e.valueBlock.value[c],t.valueBlock.value[0].value),s.verified===!1)if(t.valueBlock.value[0].optional)i++;else return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&delete r[t.name]),s;if(w7 in t.valueBlock.value[0]&&t.valueBlock.value[0].name.length>0){let l={};JK in t.valueBlock.value[0]&&t.valueBlock.value[0].local?l=e:l=r,typeof l[t.valueBlock.value[0].name]>"u"&&(l[t.valueBlock.value[0].name]=[]),l[t.valueBlock.value[0].name].push(e.valueBlock.value[c])}}else if(s=is(r,e.valueBlock.value[c-i],t.valueBlock.value[c]),s.verified===!1)if(t.valueBlock.value[c].optional)i++;else return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&delete r[t.name]),s;if(s.verified===!1){let c={verified:!1,result:r};return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&(delete r[t.name],c.name=t.name)),c}return{verified:!0,result:r}}if(t.primitiveSchema&&CI in e.valueBlock){let i=Zu(e.valueBlock.valueHexView);if(i.offset===-1){let s={verified:!1,result:i.result};return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&(delete r[t.name],s.name=t.name)),s}return is(r,i.result,t.primitiveSchema)}return{verified:!0,result:r}}function oV(r,e){if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema type"}};let t=Zu(Me.BufferSourceConverter.toUint8Array(r));return t.offset===-1?{verified:!1,result:t.result}:is(t.result,t.result,e)}async function ty(r,e){let n=await Gu.create().encrypt(r,e);return qt.encode(n)}async function E7(r,e,t){if(r.type==="RSA")return cV(r,e,t);if(r.type==="Ed25519")return iV(r,e,t);if(r.type==="secp256k1")return sV(r,e,t);if(r.type==="ECDSA")return aV(r,e,t);throw new bo}async function iV(r,e,t="libp2p-key"){if(t==="libp2p-key")return ty(fc(r),e);throw new P(`export format '${t}' is not supported`)}async function sV(r,e,t="libp2p-key"){if(t==="libp2p-key")return ty(fc(r),e);throw new P("Export format is not supported")}async function aV(r,e,t="libp2p-key"){if(t==="libp2p-key")return ty(fc(r),e);throw new P(`export format '${t}' is not supported`)}async function cV(r,e,t="pkcs-8"){if(t==="pkcs-8")return lV(r,e);if(t==="libp2p-key")return ty(fc(r),e);throw new P("Export format is not supported")}async function lV(r,e){let t=Wt.get(),o=new vt({value:[new Un({value:0}),new vt({value:[new Fn({value:"1.2.840.113549.1.1.1"}),new hn]}),new Vr({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=Yr(16),a=await jm(Bs,e,s,{c:1e4,dkLen:32}),c=Yr(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),f=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),u=new vt({value:[new Vr({valueHex:s}),new Un({value:1e4}),new Un({value:32}),new vt({value:[new Fn({value:"1.2.840.113549.2.11"}),new hn]})]}),d=new vt({value:[new Fn({value:"1.2.840.113549.1.5.13"}),new vt({value:[new vt({value:[new Fn({value:"1.2.840.113549.1.5.12"}),u]}),new vt({value:[new Fn({value:"2.16.840.1.101.3.4.1.42"}),new Vr({valueHex:c})]})]})]}),m=new vt({value:[d,new Vr({valueHex:f})]}).toBER(),w=new Uint8Array(m,0,m.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...j(w,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
51
- `)}async function S7(r,e){try{let t=await uV(r,e);return gS(t)}catch{}if(!r.includes("BEGIN"))throw new P("Encrypted key was not a libp2p-key or a PEM file");return fV(r,e)}async function uV(r,e){let t=qt.decode(r);return Gu.create().decrypt(t,e)}async function fV(r,e){let t=Wt.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=B(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=$n(i),{iv:a,salt:c,iterations:l,keySize:f,cipherText:u}=dV(s),d=await jm(Bs,e,c,{c:l,dkLen:f}),h=await t.subtle.importKey("raw",d,"AES-CBC",!1,["decrypt"]),m=np(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:w}=$n(m);n=dC(w)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=B(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=$n(i);n=dC(s)}else throw new P("Could not parse private key from PEM data");let o=yS(n);if(o.type!=="RSA")throw new P("Could not parse RSA private key from PEM data");return o}function dV(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new P("Only pkcs5PBES2 encrypted private keys are supported");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new P("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=np(i.valueBlock.value[0].getValue()),a=1e4,c=32;if(i.valueBlock.value.length===3)a=Number(i.valueBlock.value[1].toBigInt()),c=Number(i.valueBlock.value[2].toBigInt());else if(i.valueBlock.value.length===2)throw new P("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key");let l=e.valueBlock.value[1].valueBlock.value[1],f=l.valueBlock.value[0].toString();if(f!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(f!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(f!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(f!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(f!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new P("Only AES-CBC encryption schemes are supported")}}}}let u=np(l.valueBlock.value[1].getValue());return{cipherText:np(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:u}}function dC(r){return np(r.valueBlock.value[2].getValue())}function np(r){return new Uint8Array(r,0,r.byteLength)}var hV="/pkcs8/",_7="/info/",op=new WeakMap,Gc={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3};function Ju(r){return r==null||typeof r!="string"?!1:r===(0,hC.default)(r.trim())&&r.length>0}async function Er(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function Xc(r){return new ht(hV+r)}function ef(r){return new ht(_7+r)}async function pV(r){let e=fc(r),t=await St.digest(e);return ft.encode(t.bytes).substring(1)}var ry=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init={...t,dek:{...m7,...t.dek}},this.self=t.selfKey??"self",this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Gc.minKeyLength)throw new Error(`dek.keyLength must be least ${Gc.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Gc.minSaltLength)throw new Error(`dek.saltLength must be least ${Gc.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Gc.minIterationCount)throw new Error(`dek.iterationCount must be least ${Gc.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Vd(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";op.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[qe]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},this.options),t=Math.ceil(Gc.minSaltLength/3)*3;return e.dek!=null&&(e.dek.salt=j(Yr(t),"base64")),e}static get options(){return{dek:{...m7}}}async findKeyByName(e){if(!Ju(e))throw await Er(),new P(`Invalid key name '${e}'`);let t=ef(e);try{let n=await this.components.datastore.get(t);return JSON.parse(j(n))}catch(n){throw await Er(),this.log.error("could not read key from datastore - %e",n),new Xe(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:_7};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(j(n.value));if(o.id===e)return o}throw new P(`Key with id '${e}' does not exist.`)}catch(t){throw await Er(),t}}async importKey(e,t){if(!Ju(e))throw await Er(),new P(`Invalid key name '${e}'`);if(t==null)throw await Er(),new P("Key is required");let n=Xc(e);if(await this.components.datastore.has(n))throw await Er(),new P(`Key '${e}' already exists`);let i,s;try{i=await pV(t);let l=op.get(this);if(l==null)throw new P("dek missing");let f=l.dek;s=await E7(t,f,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await Er(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,B(s)),c.put(ef(e),B(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Ju(e))throw await Er(),new P(`Invalid key name '${e}'`);let t=Xc(e);try{let n=await this.components.datastore.get(t),o=j(n),i=op.get(this);if(i==null)throw new P("dek missing");let s=i.dek;return await S7(o,s)}catch(n){throw await Er(),n}}async removeKey(e){if(!Ju(e)||e===this.self)throw await Er(),new P(`Invalid key name '${e}'`);let t=Xc(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(ef(e)),await o.commit(),n}async listKeys(){let e={prefix:_7},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(j(n.value)));return t}async renameKey(e,t){if(!Ju(e)||e===this.self)throw await Er(),new P(`Invalid old key name '${e}'`);if(!Ju(t)||t===this.self)throw await Er(),new P(`Invalid new key name '${t}'`);let n=Xc(e),o=Xc(t),i=ef(e),s=ef(t);if(await this.components.datastore.has(o))throw await Er(),new P(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),f=JSON.parse(j(l));f.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(s,B(JSON.stringify(f))),u.delete(n),u.delete(i),await u.commit(),f}catch(c){throw await Er(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await Er(),new P(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await Er(),new P(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await Er(),new P(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=op.get(this);if(n==null)throw new P("dek missing");let o=n.dek;this.init.pass=t;let i=t!=null&&this.init.dek?.salt!=null?Vd(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";op.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(Xc(a.name)),l=j(c),f=await S7(l,o),u=i.toString(),d=await E7(f,u,f.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),m={name:a.name,id:a.id};h.put(Xc(a.name),B(d)),h.put(ef(a.name),B(JSON.stringify(m))),await h.commit()}this.log("keychain reconstructed")}};function ny(r={}){return e=>new ry(e,r)}async function A7(r,e={}){let t=e.selfKey??"self",n=ny(e)({datastore:r,logger:Rs()}),o;return await r.has(new ht(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await fu(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var tf=!!globalThis.process?.env?.DUMP_SESSION_KEYS,T7=16;function mV(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function oy(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function iy(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function dr(r,e,t=""){let n=mV(r),o=r?.length,i=e!==void 0;if(!n||i&&o!==e){let s=t&&`"${t}" `,a=i?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(s+"expected Uint8Array"+a+", got "+c)}return r}function I7(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function pC(r,e){dr(r,void 0,"output");let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function ls(r){return new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}function us(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function gV(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}var yV=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function mC(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function gC(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var C7=(r,e)=>{function t(n,...o){if(dr(n,void 0,"key"),!yV)throw new Error("Non little-endian hardware is not yet supported");if(r.nonceLength!==void 0){let f=o[0];dr(f,r.varSizeNonce?void 0:r.nonceLength,"nonce")}let i=r.tagLength;i&&o[1]!==void 0&&dr(o[1],void 0,"AAD");let s=e(n,...o),a=(f,u)=>{if(u!==void 0){if(f!==2)throw new Error("cipher output not supported");dr(u,void 0,"output")}},c=!1;return{encrypt(f,u){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,dr(f),a(s.encrypt.length,u),s.encrypt(f,u)},decrypt(f,u){if(dr(f),i&&f.length<i)throw new Error('"ciphertext" expected length bigger than tagLength='+i);return a(s.decrypt.length,u),s.decrypt(f,u)}}}return Object.assign(t,r),t};function P7(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error('"output" expected Uint8Array of length '+r+", got: "+e.length);if(t&&!wV(e))throw new Error("invalid output, must be aligned");return e}function yC(r,e,t){oy(t);let n=new Uint8Array(16),o=gV(n);return o.setBigUint64(0,BigInt(e),t),o.setBigUint64(8,BigInt(r),t),n}function wV(r){return r.byteOffset%4===0}function rf(r){return Uint8Array.from(r)}var bC=r=>Uint8Array.from(r.split(""),e=>e.charCodeAt(0)),bV=bC("expand 16-byte k"),vV=bC("expand 32-byte k"),xV=ls(bV),EV=ls(vV);function pe(r,e){return r<<e|r>>>32-e}function k7(r){return r.byteOffset%4===0}var sy=64,SV=16,vC=2**32-1,wC=Uint32Array.of();function _V(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(sy),f=ls(l),u=k7(o)&&k7(i),d=u?ls(o):wC,h=u?ls(i):wC;for(let m=0;m<c;s++){if(r(e,t,n,f,s,a),s>=vC)throw new Error("arx: counter overflow");let w=Math.min(sy,c-m);if(u&&w===sy){let y=m/4;if(m%4!==0)throw new Error("arx: invalid block position");for(let b=0,N;b<SV;b++)N=y+b,h[N]=d[N]^f[b];m+=sy;continue}for(let y=0,b;y<w;y++)b=m+y,i[b]=o[b]^l[y];m+=w}}function O7(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=mC({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return iy(o),iy(s),oy(i),oy(t),(a,c,l,f,u=0)=>{dr(a,void 0,"key"),dr(c,void 0,"nonce"),dr(l,void 0,"data");let d=l.length;if(f===void 0&&(f=new Uint8Array(d)),dr(f,void 0,"output"),iy(u),u<0||u>=vC)throw new Error("arx: counter overflow");if(f.length<d)throw new Error(`arx: output (${f.length}) is shorter than data (${d})`);let h=[],m=a.length,w,y;if(m===32)h.push(w=rf(a)),y=EV;else if(m===16&&t)w=new Uint8Array(32),w.set(a),w.set(a,16),y=xV,h.push(w);else throw dr(a,32,"arx key"),new Error("invalid key size");k7(c)||h.push(c=rf(c));let b=ls(w);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(y,b,ls(c.subarray(0,16)),b),c=c.subarray(16)}let N=16-o;if(N!==c.length)throw new Error(`arx: nonce must be ${N} or 16 bytes`);if(N!==12){let V=new Uint8Array(12);V.set(c,i?0:12-c.length),c=V,h.push(c)}let O=ls(c);return _V(r,y,b,O,l,f,u,s),us(...h),f}}function Sr(r,e){return r[e++]&255|(r[e++]&255)<<8}var R7=class{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;constructor(e){e=rf(dr(e,32,"key"));let t=Sr(e,0),n=Sr(e,2),o=Sr(e,4),i=Sr(e,6),s=Sr(e,8),a=Sr(e,10),c=Sr(e,12),l=Sr(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|i<<9)&8191,this.r[4]=(i>>>4|s<<12)&255,this.r[5]=s>>>1&8190,this.r[6]=(s>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let f=0;f<8;f++)this.pad[f]=Sr(e,16+2*f)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],f=s[3],u=s[4],d=s[5],h=s[6],m=s[7],w=s[8],y=s[9],b=Sr(e,t+0),N=Sr(e,t+2),O=Sr(e,t+4),V=Sr(e,t+6),Q=Sr(e,t+8),Z=Sr(e,t+10),se=Sr(e,t+12),C=Sr(e,t+14),T=i[0]+(b&8191),K=i[1]+((b>>>13|N<<3)&8191),z=i[2]+((N>>>10|O<<6)&8191),U=i[3]+((O>>>7|V<<9)&8191),I=i[4]+((V>>>4|Q<<12)&8191),S=i[5]+(Q>>>1&8191),x=i[6]+((Q>>>14|Z<<2)&8191),D=i[7]+((Z>>>11|se<<5)&8191),q=i[8]+((se>>>8|C<<8)&8191),H=i[9]+(C>>>5|o),M=0,G=M+T*a+K*(5*y)+z*(5*w)+U*(5*m)+I*(5*h);M=G>>>13,G&=8191,G+=S*(5*d)+x*(5*u)+D*(5*f)+q*(5*l)+H*(5*c),M+=G>>>13,G&=8191;let te=M+T*c+K*a+z*(5*y)+U*(5*w)+I*(5*m);M=te>>>13,te&=8191,te+=S*(5*h)+x*(5*d)+D*(5*u)+q*(5*f)+H*(5*l),M+=te>>>13,te&=8191;let F=M+T*l+K*c+z*a+U*(5*y)+I*(5*w);M=F>>>13,F&=8191,F+=S*(5*m)+x*(5*h)+D*(5*d)+q*(5*u)+H*(5*f),M+=F>>>13,F&=8191;let Le=M+T*f+K*l+z*c+U*a+I*(5*y);M=Le>>>13,Le&=8191,Le+=S*(5*w)+x*(5*m)+D*(5*h)+q*(5*d)+H*(5*u),M+=Le>>>13,Le&=8191;let $e=M+T*u+K*f+z*l+U*c+I*a;M=$e>>>13,$e&=8191,$e+=S*(5*y)+x*(5*w)+D*(5*m)+q*(5*h)+H*(5*d),M+=$e>>>13,$e&=8191;let me=M+T*d+K*u+z*f+U*l+I*c;M=me>>>13,me&=8191,me+=S*a+x*(5*y)+D*(5*w)+q*(5*m)+H*(5*h),M+=me>>>13,me&=8191;let He=M+T*h+K*d+z*u+U*f+I*l;M=He>>>13,He&=8191,He+=S*c+x*a+D*(5*y)+q*(5*w)+H*(5*m),M+=He>>>13,He&=8191;let ot=M+T*m+K*h+z*d+U*u+I*f;M=ot>>>13,ot&=8191,ot+=S*l+x*c+D*a+q*(5*y)+H*(5*w),M+=ot>>>13,ot&=8191;let Ct=M+T*w+K*m+z*h+U*d+I*u;M=Ct>>>13,Ct&=8191,Ct+=S*f+x*l+D*c+q*a+H*(5*y),M+=Ct>>>13,Ct&=8191;let ze=M+T*y+K*w+z*m+U*h+I*d;M=ze>>>13,ze&=8191,ze+=S*u+x*f+D*l+q*c+H*a,M+=ze>>>13,ze&=8191,M=(M<<2)+M|0,M=M+G|0,G=M&8191,M=M>>>13,te+=M,i[0]=G,i[1]=te,i[2]=F,i[3]=Le,i[4]=$e,i[5]=me,i[6]=He,i[7]=ot,i[8]=Ct,i[9]=ze}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let i=(o^1)-1;for(let a=0;a<10;a++)n[a]&=i;i=~i;for(let a=0;a<10;a++)e[a]=e[a]&i|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let s=e[0]+t[0];e[0]=s&65535;for(let a=1;a<8;a++)s=(e[a]+t[a]|0)+(s>>>16)|0,e[a]=s&65535;us(n)}update(e){I7(this),dr(e),e=rf(e);let{buffer:t,blockLen:n}=this,o=e.length;for(let i=0;i<o;){let s=Math.min(n-this.pos,o-i);if(s===n){for(;n<=o-i;i+=n)this.process(e,i);continue}t.set(e.subarray(i,i+s),this.pos),this.pos+=s,i+=s,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){us(this.h,this.r,this.buffer,this.pad)}digestInto(e){I7(this),pC(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let i=0;for(let s=0;s<8;s++)e[i++]=n[s]>>>0,e[i++]=n[s]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function AV(r){let e=(n,o)=>r(o).update(n).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var xC=AV(r=>new R7(r));function _C(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],f=e[0],u=e[1],d=e[2],h=e[3],m=e[4],w=e[5],y=e[6],b=e[7],N=o,O=t[0],V=t[1],Q=t[2],Z=s,se=a,C=c,T=l,K=f,z=u,U=d,I=h,S=m,x=w,D=y,q=b,H=N,M=O,G=V,te=Q;for(let Le=0;Le<i;Le+=2)Z=Z+K|0,H=pe(H^Z,16),S=S+H|0,K=pe(K^S,12),Z=Z+K|0,H=pe(H^Z,8),S=S+H|0,K=pe(K^S,7),se=se+z|0,M=pe(M^se,16),x=x+M|0,z=pe(z^x,12),se=se+z|0,M=pe(M^se,8),x=x+M|0,z=pe(z^x,7),C=C+U|0,G=pe(G^C,16),D=D+G|0,U=pe(U^D,12),C=C+U|0,G=pe(G^C,8),D=D+G|0,U=pe(U^D,7),T=T+I|0,te=pe(te^T,16),q=q+te|0,I=pe(I^q,12),T=T+I|0,te=pe(te^T,8),q=q+te|0,I=pe(I^q,7),Z=Z+z|0,te=pe(te^Z,16),D=D+te|0,z=pe(z^D,12),Z=Z+z|0,te=pe(te^Z,8),D=D+te|0,z=pe(z^D,7),se=se+U|0,H=pe(H^se,16),q=q+H|0,U=pe(U^q,12),se=se+U|0,H=pe(H^se,8),q=q+H|0,U=pe(U^q,7),C=C+I|0,M=pe(M^C,16),S=S+M|0,I=pe(I^S,12),C=C+I|0,M=pe(M^C,8),S=S+M|0,I=pe(I^S,7),T=T+K|0,G=pe(G^T,16),x=x+G|0,K=pe(K^x,12),T=T+K|0,G=pe(G^T,8),x=x+G|0,K=pe(K^x,7);let F=0;n[F++]=s+Z|0,n[F++]=a+se|0,n[F++]=c+C|0,n[F++]=l+T|0,n[F++]=f+K|0,n[F++]=u+z|0,n[F++]=d+U|0,n[F++]=h+I|0,n[F++]=m+S|0,n[F++]=w+x|0,n[F++]=y+D|0,n[F++]=b+q|0,n[F++]=N+H|0,n[F++]=O+M|0,n[F++]=V+G|0,n[F++]=Q+te|0}function TV(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],f=e[2],u=e[3],d=e[4],h=e[5],m=e[6],w=e[7],y=t[0],b=t[1],N=t[2],O=t[3];for(let Q=0;Q<20;Q+=2)o=o+c|0,y=pe(y^o,16),d=d+y|0,c=pe(c^d,12),o=o+c|0,y=pe(y^o,8),d=d+y|0,c=pe(c^d,7),i=i+l|0,b=pe(b^i,16),h=h+b|0,l=pe(l^h,12),i=i+l|0,b=pe(b^i,8),h=h+b|0,l=pe(l^h,7),s=s+f|0,N=pe(N^s,16),m=m+N|0,f=pe(f^m,12),s=s+f|0,N=pe(N^s,8),m=m+N|0,f=pe(f^m,7),a=a+u|0,O=pe(O^a,16),w=w+O|0,u=pe(u^w,12),a=a+u|0,O=pe(O^a,8),w=w+O|0,u=pe(u^w,7),o=o+l|0,O=pe(O^o,16),m=m+O|0,l=pe(l^m,12),o=o+l|0,O=pe(O^o,8),m=m+O|0,l=pe(l^m,7),i=i+f|0,y=pe(y^i,16),w=w+y|0,f=pe(f^w,12),i=i+f|0,y=pe(y^i,8),w=w+y|0,f=pe(f^w,7),s=s+u|0,b=pe(b^s,16),d=d+b|0,u=pe(u^d,12),s=s+u|0,b=pe(b^s,8),d=d+b|0,u=pe(u^d,7),a=a+c|0,N=pe(N^a,16),h=h+N|0,c=pe(c^h,12),a=a+c|0,N=pe(N^a,8),h=h+N|0,c=pe(c^h,7);let V=0;n[V++]=o,n[V++]=i,n[V++]=s,n[V++]=a,n[V++]=y,n[V++]=b,n[V++]=N,n[V++]=O}var IV=O7(_C,{counterRight:!1,counterLength:4,allowShortKeys:!1}),CV=O7(_C,{counterRight:!1,counterLength:8,extendNonceFn:TV,allowShortKeys:!1});var PV=new Uint8Array(16),EC=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(PV.subarray(t))},kV=new Uint8Array(32);function SC(r,e,t,n,o){o!==void 0&&dr(o,void 0,"AAD");let i=r(e,t,kV),s=yC(n.length,o?o.length:0,!0),a=xC.create(i);o&&EC(a,o),EC(a,n),a.update(s);let c=a.digest();return us(i,s),c}var AC=r=>(e,t,n)=>({encrypt(i,s){let a=i.length;s=P7(a+16,s,!1),s.set(i);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=SC(r,e,t,c,n);return s.set(l,a),us(l),s},decrypt(i,s){s=P7(i.length-16,s,!1);let a=i.subarray(0,-16),c=i.subarray(-16),l=SC(r,e,t,a,n);if(!gC(c,l))throw new Error("invalid tag");return s.set(i.subarray(0,-16)),r(e,t,s,s,1),us(l),s}}),D7=C7({blockSize:64,nonceLength:12,tagLength:16},AC(IV)),L2e=C7({blockSize:64,nonceLength:24,tagLength:16},AC(CV));function IC(r,e,t){return Di(r),t===void 0&&(t=new Uint8Array(r.outputLen)),$s(r,t,e)}var N7=Uint8Array.of(0),TC=Uint8Array.of();function CC(r,e,t,n=32){Di(r),Lr(n,"length");let o=r.outputLen;if(n>255*o)throw new Error("Length must be <= 255*HashLen");let i=Math.ceil(n/o);t===void 0?t=TC:Oe(t,void 0,"info");let s=new Uint8Array(i*o),a=$s.create(r,e),c=a._cloneInto(),l=new Uint8Array(a.outputLen);for(let f=0;f<i;f++)N7[0]=f+1,c.update(f===0?TC:l).update(t).update(N7).digestInto(l),s.set(l,o*f),a._cloneInto(c);return a.destroy(),c.destroy(),Br(l,N7),s.slice(0,n)}var L7={hashSHA256(r){return Yn(r.subarray())},getHKDF(r,e){let t=IC(Yn,e,r),o=CC(Yn,t,void 0,96),i=o.subarray(0,32),s=o.subarray(32,64),a=o.subarray(64,96);return[i,s,a]},generateX25519KeyPair(){let r=Rd.utils.randomSecretKey();return{publicKey:Rd.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Rd.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Rd.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return D7(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return D7(n,e,t).decrypt(r.subarray(),o)}};var PC=L7;function kC(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var nf=r=>{let e=Rt(2);return e[0]=r>>8,e[1]=r,e};nf.bytes=2;var of=r=>{if(r.length<2)throw RangeError("Could not decode int16BE");if(r instanceof Uint8Array){let e=0;return e+=r[0]<<8,e+=r[1],e}return r.getUint16(0)};of.bytes=2;function OC(r){return{xxHandshakeSuccesses:r.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:r.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:r.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:r.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:r.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function B7(r,e){!e.enabled||!tf||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${j(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${j(r.privateKey,"hex")}`)):e("Missing local static keys."))}function M7(r,e){!e.enabled||!tf||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${j(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${j(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function RC(r,e){!e.enabled||!tf||e(r?`REMOTE_STATIC_PUBLIC_KEY ${j(r.subarray(),"hex")}`:"Missing remote static public key.")}function U7(r,e){!e.enabled||!tf||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${j(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function F7(r,e,t){!t.enabled||!tf||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&j(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&j(e.k,"hex")}`))}function Uo(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Rt(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var sf=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var OV=0,RV=4294967295,DV="Cipherstate has reached maximum n, a new handshake must be performed",ay=class{n;bytes;view;constructor(e=OV){this.n=e,this.bytes=ke(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>RV)throw new Error(DV)}};var Yc=ke(0),af=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new ay(n)}hasKey(){return!!this.k}encryptWithAd(e,t){if(!this.hasKey())return t;this.n.assertValue();let n=this.crypto.encrypt(t,this.n.getBytes(),e,this.k);return this.n.increment(),n}decryptWithAd(e,t,n){if(!this.hasKey())return t;this.n.assertValue();let o=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),o}},$7=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=B(t,"utf-8");this.h=NV(e,n),this.ck=this.h,this.cs=new af(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new af(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new de(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,Yc);return[new af(this.crypto,e),new af(this.crypto,t)]}},j7=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:i,s,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new $7(t,n),this.ss.mixHash(o),this.initiator=i,this.s=s,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},ip=class extends j7{writeMessageA(e){return new de(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new de(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new de(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new sf(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new sf(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new sf(`handshake stage 2 validation fail: ${t.message}`)}}};function NV(r,e){if(e.length<=32){let t=ke(32);return t.set(e),t}else return r.hash(e)}var cy;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let i of t.webtransportCerthashes)n.uint32(10),n.bytes(i);if(t.streamMuxers!=null)for(let i of t.streamMuxers)n.uint32(18),n.string(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={webtransportCerthashes:[],streamMuxers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&i.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new dt('Decode error - map field "webtransportCerthashes" had too many elements');i.webtransportCerthashes.push(t.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&i.streamMuxers.length===o.limits.streamMuxers)throw new dt('Decode error - map field "streamMuxers" had too many elements');i.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(cy||(cy={}));var sp;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),cy.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={identityKey:ke(0),identitySig:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.identityKey=t.bytes();break}case 2:{i.identitySig=t.bytes();break}case 4:{i.extensions=cy.codec().decode(t,t.uint32(),{limits:o.limits?.extensions});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(sp||(sp={}));async function V7(r,e,t){let n=await r.sign(NC(e));return sp.encode({identityKey:sr(r.publicKey),identitySig:n,extensions:t})}async function H7(r,e,t){try{let n=sp.decode(r),o=Vt(n.identityKey);if(t?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let i=NC(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new tm(n.message)}}function NC(r){let e=B("noise-libp2p-static-key:");return r instanceof Uint8Array?gt([e,r],e.length+r.length):(r.prepend(e),r)}var K7=class extends Vs{stream;handshake;metrics;decoder;constructor(e,t,n){super({log:e.log,inactivityTimeout:e.inactivityTimeout,maxReadBufferLength:e.maxReadBufferLength,direction:e.direction}),this.stream=e,this.handshake=t,this.metrics=n,this.decoder=new u0({lengthDecoder:of,maxBufferSize:16*1024*1024,encodingLength:()=>2});let o=c=>{try{for(let l of this.decoder.decode(c.data))this.onData(this.decrypt(l))}catch(l){this.abort(l)}};this.stream.addEventListener("message",o);let i=c=>{c.error!=null?c.local===!0?this.abort(c.error):this.onRemoteReset():this.onTransportClosed()};this.stream.addEventListener("close",i);let s=()=>{this.safeDispatchEvent("drain")};this.stream.addEventListener("drain",s);let a=()=>{this.onRemoteCloseWrite()};this.stream.addEventListener("remoteCloseWrite",a)}encrypt(e){let t=new de;for(let n=0;n<e.byteLength;n+=65519){let o=n+65519;o>e.byteLength&&(o=e.byteLength);let i;e instanceof Uint8Array?i=this.handshake.encrypt(e.subarray(n,o)):i=this.handshake.encrypt(e.sublist(n,o)),this.metrics?.encryptedPackets.increment(),t.append(nf(i.byteLength)),t.append(i)}return t}decrypt(e){let t=new de;for(let n=0;n<e.byteLength;n+=65535){let o=n+65535;if(o>e.byteLength&&(o=e.byteLength),o-T7<n)throw new Error("Invalid chunk");let i;e instanceof Uint8Array?i=e.subarray(n,o):i=e.sublist(n,o);let s=e.subarray(n,o-T7);try{let a=this.handshake.decrypt(i,s);this.metrics?.decryptedPackets.increment(),t.append(a)}catch(a){throw this.metrics?.decryptErrors.increment(),a}}return t}close(e){return this.stream.close(e)}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}sendReset(e){this.stream.abort(e)}sendData(e){return{sentBytes:e.byteLength,canSendMore:this.stream.send(this.encrypt(e))}}};function q7(r,e,t){return new K7(r,e,t)}async function LC(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,f=await V7(i,a.publicKey,l),u=new ip({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});B7(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(Yc),e),t.trace("Stage 0 - Initiator finished sending first message."),M7(u.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let d=u.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),U7(u.re,t),RC(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await H7(d,u.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(u.writeMessageC(f),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[m,w]=u.ss.split();return F7(m,w,t),{payload:h,encrypt:y=>m.encryptWithAd(Yc,y),decrypt:(y,b)=>w.decryptWithAd(Yc,y,b)}}async function BC(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,f=await V7(i,a.publicKey,l),u=new ip({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});B7(u.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),u.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),U7(u.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(u.writeMessageB(f),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),M7(u.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let d=u.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await H7(d,u.rs,c),[m,w]=u.ss.split();return F7(m,w,t),{payload:h,encrypt:y=>w.encryptWithAd(Yc,y),decrypt:(y,b)=>m.decryptWithAd(Yc,y,b)}}var ly=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;log;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e,this.log=e.logger.forComponent("libp2p:noise");let c=i??PC;this.crypto=kC(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?OC(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??ke(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[qe]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Gs(e,{lengthEncoder:nf,lengthDecoder:of,maxDataLength:65535}),i=await this.performHandshakeInitiator(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),s=Vt(i.payload.identityKey);return{connection:q7(o.unwrap(),i,this.metrics),remoteExtensions:i.payload.extensions,remotePeer:ii(s),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null||e.length===0)return;let t=this.components.upgrader.getStreamMuxers();if(t!=null)for(let n of e){let o=t.get(n);if(o!=null)return o}if(e.length)throw new rm("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Gs(e,{lengthEncoder:nf,lengthDecoder:of,maxDataLength:65535}),i=await this.performHandshakeResponder(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),s=Vt(i.payload.identityKey);return{connection:q7(o.unwrap(),i,this.metrics),remoteExtensions:i.payload.extensions,remotePeer:ii(s),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o,i){let s,a=i?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{s=await LC({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return s}async performHandshakeResponder(e,t,n,o,i){let s,a=i?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{s=await BC({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return s}};function uy(r={}){return e=>new ly(e,r)}var Dt;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Dt||(Dt={}));var Ze;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(Ze||(Ze={}));var tye=Object.values(Ze).filter(r=>typeof r!="string"),MC=0,tr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(tr||(tr={}));var di=12;var fs=class extends Error{static name="ProtocolError";reason;constructor(e,t){super(e),this.name="ProtocolError",this.reason=t}};function UC(r){return r?.reason!==null}var jn=class extends fs{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e,tr.ProtocolError),this.name="InvalidFrameError"}},cf=class extends fs{static name="UnRequestedPingError";constructor(e="Un-requested ping error"){super(e,tr.ProtocolError),this.name="UnRequestedPingError"}},lf=class extends fs{static name="NotMatchingPingError";constructor(e="Not matching ping error"){super(e,tr.ProtocolError),this.name="NotMatchingPingError"}};var fy=class extends fs{static name="StreamAlreadyExistsError";constructor(e="Stream already exists"){super(e,tr.ProtocolError),this.name="StreamAlreadyExistsError"}},dy=class extends fs{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e,tr.ProtocolError),this.name="DecodeInvalidVersionError"}},hy=class extends fs{static name="BothClientsError";constructor(e="Both clients"){super(e,tr.ProtocolError),this.name="BothClientsError"}},uf=class extends fs{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e,tr.ProtocolError),this.name="ReceiveWindowExceededError"}};var sye=new Set([jn.name,cf.name,lf.name,fy.name,dy.name,hy.name,uf.name]),cp=256*1024,py=16*1024*1024;var lp={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,maxMessageSize:64*1024,maxEarlyStreams:10,streamOptions:{initialStreamWindowSize:cp,maxStreamWindowSize:py,inactivityTimeout:12e4,maxReadBufferLength:4194304,maxWriteBufferLength:1/0}};function FC(r){if(r.keepAliveInterval!=null&&r.keepAliveInterval<=0)throw new P("keep-alive interval must be positive");if(r.maxInboundStreams!=null&&r.maxInboundStreams<0)throw new P("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams!=null&&r.maxOutboundStreams<0)throw new P("max outbound streams must be larger or equal 0");if(r.maxMessageSize!=null&&r.maxMessageSize<1024)throw new P("MaxMessageSize must be greater than a kilobyte");if(r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize<cp)throw new P("InitialStreamWindowSize must be larger or equal 256 kB");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize<r.streamOptions?.initialStreamWindowSize)throw new P("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize>2**32-1)throw new P("MaxStreamWindowSize must be less than equal MAX_UINT32")}function jC(r){return r.header.type===Dt.Data&&r.data!==null}var $C=2**24;function LV(r){if(r[0]!==MC)throw new jn("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*$C+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*$C+(r[9]<<16)+(r[10]<<8)+r[11]}}var my=class{buffer;constructor(){this.buffer=new de}*emitFrames(e){for(this.buffer.append(e);;){let t=this.readFrame();if(t===void 0)break;yield t}}readFrame(){let e=di;if(this.buffer.byteLength<di)return;let t=LV(this.buffer.subarray(0,di));if(t.type===Dt.Data){if(e+=t.length,this.buffer.byteLength<e)return;let n=this.buffer.sublist(di,e);return this.buffer.consume(e),{header:t,data:n}}return this.buffer.consume(e),{header:t}}};function W7(r){let e=new Uint8Array(di);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}var rn;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished",r[r.Paused=5]="Paused"})(rn||(rn={}));var gy=class extends Ws{streamId;state;sendWindowCapacity;recvWindow;recvWindowCapacity;maxStreamWindowSize;epochStart;getRTT;sendFrame;constructor(e){let t=e.initialStreamWindowSize??cp;super({...e,maxMessageSize:t-di}),this.streamId=e.streamId,this.state=e.state,this.sendWindowCapacity=t,this.recvWindow=t,this.recvWindowCapacity=this.recvWindow,this.maxStreamWindowSize=e.maxStreamWindowSize??py,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame;let n=()=>{this.state=rn.Finished};this.addEventListener("close",n)}sendData(e){let t=e.byteLength,n=0,o=!0;for(this.log?.trace("send window capacity is %d bytes",this.sendWindowCapacity);e.byteLength>0;){if(this.sendWindowCapacity===0){o=!1,this.log?.trace("sent %d/%d bytes, exhausted send window, waiting for window update",n,t);break}let i=Math.min(this.sendWindowCapacity,e.byteLength),s=this.getSendFlags(),a=e.sublist(0,i);e.consume(i);let c=this.sendFrame({type:Dt.Data,flag:s,streamID:this.streamId,length:i},a);if(this.sendWindowCapacity-=i,n+=i,!c){o=c,this.log.trace("sent %d/%d bytes, wait for muxer to have more send capacity",n,t);break}}return{sentBytes:n,canSendMore:o}}sendReset(){this.sendFrame({type:Dt.WindowUpdate,flag:Ze.RST,streamID:this.streamId,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|Ze.FIN;this.sendFrame({type:Dt.WindowUpdate,flag:e,streamID:this.streamId,length:0})}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){this.state=rn.Paused}sendResume(){this.state=rn.Established,this.sendWindowUpdate()}handleWindowUpdate(e){this.processFlags(e.header.flag),this.sendWindowCapacity+=e.header.length,this.maxMessageSize=this.sendWindowCapacity-di,this.maxMessageSize<0&&(this.maxMessageSize=0),this.maxMessageSize!==0&&this.writeBuffer.byteLength>0&&(this.log?.trace("window update of %d bytes allows more data to be sent, have %d bytes queued, sending data %s",e.header.length,this.writeBuffer.byteLength,this.sendingData),this.safeDispatchEvent("drain"))}handleData(e){if(!jC(e))throw new jn("Frame was not data frame");if(this.processFlags(e.header.flag),this.recvWindowCapacity<e.header.length)throw new uf("Receive window exceeded");this.recvWindowCapacity-=e.header.length,this.onData(e.data),this.sendWindowUpdate()}processFlags(e){(e&Ze.ACK)===Ze.ACK&&this.state===rn.SYNSent&&(this.state=rn.Established),(e&Ze.FIN)===Ze.FIN&&this.onRemoteCloseWrite(),(e&Ze.RST)===Ze.RST&&this.onRemoteReset()}getSendFlags(){switch(this.state){case rn.Init:return this.state=rn.SYNSent,Ze.SYN;case rn.SYNReceived:return this.state=rn.Established,Ze.ACK;default:return 0}}sendWindowUpdate(){if(this.state===rn.Paused){this.epochStart=Date.now();return}let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<=n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Dt.WindowUpdate,flag:e,streamID:this.streamId,length:o})}};function KC(r){return{type:Dt[r.type],flags:[(r.flag&Ze.SYN)===Ze.SYN?"SYN":void 0,(r.flag&Ze.ACK)===Ze.ACK?"ACK":void 0,(r.flag&Ze.FIN)===Ze.FIN?"FIN":void 0,(r.flag&Ze.RST)===Ze.RST?"RST":void 0].filter(Boolean),streamID:r.streamID,length:r.length}}var VC="/yamux/1.0.0",yy=class{protocol=VC;_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[qe]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new z7(e,{...this._init})}},z7=class extends qs{nextStreamID;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;decoder;keepAlive;enableKeepAlive;keepAliveInterval;maxInboundStreams;maxOutboundStreams;constructor(e,t={}){super(e,{...t,protocol:VC,name:"yamux"}),this.client=e.direction==="outbound",FC(t),this.enableKeepAlive=t.enableKeepAlive??lp.enableKeepAlive,this.keepAliveInterval=t.keepAliveInterval??lp.keepAliveInterval,this.maxInboundStreams=t.maxInboundStreams??lp.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??lp.maxOutboundStreams,this.decoder=new my,this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log.trace("muxer created"),this.enableKeepAlive&&(this.log.trace("muxer keepalive enabled interval=%s",this.keepAliveInterval),this.keepAlive=ku(async n=>{try{await this.ping(n)}catch(o){this.log.error("ping error: %s",o)}},this.keepAliveInterval,{runImmediately:!0}),this.keepAlive.start())}onData(e){for(let t of this.decoder.emitFrames(e))this.handleFrame(t)}onCreateStream(){if(this.remoteGoAway!==void 0)throw new wo("Muxer closed remotely");if(this.localGoAway!==void 0)throw new wo("Muxer closed locally");let e=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.maxOutboundStreams)throw new $l("max outbound streams exceeded");this.log.trace("new outgoing stream id=%s",e);let t=this._newStream(e,rn.Init,"outbound");return this.numOutboundStreams++,queueMicrotask(()=>{t.sendWindowUpdate()}),t}async ping(e){if(this.remoteGoAway!==void 0)throw new wo("Muxer closed remotely");if(this.localGoAway!==void 0)throw new wo("Muxer closed locally");if(this.activePing!=null)return ut(this.activePing.promise,e?.signal);this.activePing=Object.assign(Promise.withResolvers(),{id:this.nextPingID++,start:Date.now()}),this.sendPing(this.activePing.id);try{this.rtt=await ut(this.activePing.promise,e?.signal)}finally{this.activePing=void 0}return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.status==="open")try{let t=e?.reason??tr.NormalTermination;this.log.trace("muxer close reason=%s",tr[t]),await super.close(e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}abort(e){if(this.status==="open")try{super.abort(e);let t=tr.InternalError;UC(e)&&(t=e.reason),this.log.error("muxer abort reason=%s error=%s",t,e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}onTransportClosed(){try{super.onTransportClosed()}finally{this.keepAlive?.stop()}}_newStream(e,t,n){if(this.streams.find(i=>i.streamId===e)!=null)throw new P("Stream already exists with that id");let o=new gy({...this.streamOptions,id:`${e}`,streamId:e,state:t,direction:n,sendFrame:this.sendFrame.bind(this),log:this.log.newScope(`${n}:${e}`),getRTT:this.getRTT.bind(this)});return o.addEventListener("close",()=>{this.closeStream(e)},{once:!0}),o}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--}handleFrame(e){let{streamID:t,type:n,length:o}=e.header;if(this.log.trace("received frame %o",KC(e.header)),t===0)switch(n){case Dt.Ping:{this.handlePing(e.header);return}case Dt.GoAway:{this.handleGoAway(o);return}default:throw new jn("Invalid frame type")}else switch(e.header.type){case Dt.Data:case Dt.WindowUpdate:{this.handleStreamMessage(e);return}default:throw new jn("Invalid frame type")}}handlePing(e){if(e.flag===Ze.SYN)this.log.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,Ze.ACK);else if(e.flag===Ze.ACK)this.log.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new jn("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new cf("ping not requested");if(this.activePing.id!==e)throw new lf("ping doesn't match our id");this.activePing.resolve(Date.now()-this.activePing.start)}handleGoAway(e){this.log.trace("received GoAway reason=%s",tr[e]??"unknown"),this.remoteGoAway=e,e===tr.NormalTermination?this.onTransportClosed():this.abort(new Error("Remote sent GoAway"))}handleStreamMessage(e){let{streamID:t,flag:n,type:o}=e.header;(n&Ze.SYN)===Ze.SYN&&this.incomingStream(t);let i=this.streams.find(s=>s.streamId===t);if(i===void 0){this.log.trace("frame for missing stream id=%s",t);return}switch(o){case Dt.WindowUpdate:{i.handleWindowUpdate(e);return}case Dt.Data:{i.handleData(e);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new P("Both endpoints are clients");if(this.streams.find(n=>n.streamId===e))return;if(this.log.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Dt.WindowUpdate,flag:Ze.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.maxInboundStreams){this.log("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Dt.WindowUpdate,flag:Ze.RST,streamID:e,length:0});return}let t=this._newStream(e,rn.SYNReceived,"inbound");this.numInboundStreams++,this.onRemoteStream(t)}sendFrame(e,t){let n;if(e.type===Dt.Data){if(t==null)throw new jn("Invalid frame");n=new de(W7(e),t)}else n=W7(e);return this.log.trace("sending frame %o",KC(e)),this.send(n)}sendPing(e,t=Ze.SYN){t===Ze.SYN?this.log.trace("sending ping request pingId=%s",e):this.log.trace("sending ping response pingId=%s",e),this.sendFrame({type:Dt.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=tr.NormalTermination){this.log("sending GoAway reason=%s",tr[e]),this.localGoAway=e,this.sendFrame({type:Dt.GoAway,flag:0,streamID:0,length:e})}};function HC(r={}){return()=>new yy(r)}var Qc=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},so=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};var qC=B("/ipns/");function WC(r){return we(r.subarray(0,qC.byteLength),qC)}var wy=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){try{yield*to(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[],routing:"delegated-http-routing-v1"}))}catch(n){if(n instanceof Xe)return;throw n}}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!WC(e))return;let o=Ku(e),i=ce.createV1(114,o),s=si(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!WC(e))throw new Xe("Not found");let n=Ku(e),o=ce.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return Ph(i)}catch(i){throw i.name==="BadResponseError"?new Xe("Not found"):i}}toString(){return`DelegatedRoutingV1HttpApiClientContentRouting(${this.client.url})`}},by=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await xT(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Xe("Not found")}async*getClosestPeers(e,t={}){let n;try{n=ce.decode(e)}catch{n=Ut(Pt.decode(e))}for await(let o of this.client.getClosestPeers(n,t))yield{id:o.ID,multiaddrs:o.Addrs??[]}}toString(){return`DelegatedRoutingV1HttpApiClientPeerRouting(${this.client.url})`}};var vy={concurrentRequests:4,timeout:3e4,cacheTTL:300*1e3,cacheName:"delegated-routing-v1-cache"},xy=class{url;started;httpQueue;shutDownController;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;log;constructor(e,t){this.log=e.logger.forComponent("delegated-routing-v1-http-api-client"),this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new za({concurrency:t.concurrentRequests??vy.concurrentRequests}),this.inFlightRequests=new Map,this.url=t.url instanceof URL?t.url:new URL(t.url),this.timeout=t.timeout??vy.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new wy(this),this.peerRouting=new by(this),this.cacheName=t.cacheName??vy.cacheName,this.cacheTTL=t.cacheTTL??vy.cacheTTL}get[Pi](){return this.contentRouting}get[Oi](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&this.log("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){this.log("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=De([this.shutDownController.signal,n,t.signal]);let i=Ue(),s=Ue(),a=0;this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let c=new URL(`${this.url}routing/v1/providers/${e}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{accept:"application/x-ndjson, application/json;q=0.8"},signal:o},f=await this.#r(c.toString(),l);if(!f.ok){if(f.status===404)return;throw f.status===422?new Qc("Request does not conform to schema or semantic constraints"):new so(`Unexpected status code: ${f.status}`)}let u=f.headers.get("Content-Type");if(u==null)throw new so("No Content-Type header received");if(f.body==null){if(u!=="application/x-ndjson")throw new so("Routing response had no body");return}if(u.startsWith("application/json")){let h=(await f.json()).Providers??[];for(let m of h){let w=this.#e(m);w!=null&&(a++,yield w)}}else if(u.includes("application/x-ndjson"))for await(let d of Vu(Ih(f.body))){let h=this.#e(d);h!=null&&(a++,yield h)}else throw new so(`Unsupported Content-Type: ${u}`)}finally{o.clear(),s.resolve(),this.log("getProviders finished found %d providers for %c",a,e)}}async*getPeers(e,t={}){this.log("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=De([this.shutDownController.signal,n,t.signal]);let i=Ue(),s=Ue();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.url}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)return;if(l.status===422)throw new Qc("Request does not conform to schema or semantic constraints");if(l.body==null)throw new so("Routing response had no body");if(l.headers.get("Content-Type")?.startsWith("application/json")){let d=(await l.json()).Peers??[];for(let h of d){let m=this.#e(h);m!=null&&(yield m)}}else for await(let u of Vu(Ih(l.body))){let d=this.#e(u);d!=null&&(yield d)}}catch(a){this.log.error("getPeers errored - %e",a)}finally{o.clear(),s.resolve(),this.log("getPeers finished: %c",e)}}async*getClosestPeers(e,t={}){let n;if(Rr(e))n=e.toCID().toString();else if(ce.asCID(e)===e||e instanceof ce)n=e.toV1().toString();else throw new P("Key must be CID or PeerId");this.log("getClosestPeers starts: %s",n);let o=AbortSignal.timeout(this.timeout),i=De([this.shutDownController.signal,o,t.signal]);let s=Ue(),a=Ue();this.httpQueue.add(async()=>(s.resolve(),a.promise));try{await s.promise;let c=new URL(`${this.url}routing/v1/dht/closest/peers/${n}`);this.#t(c,t.filterAddrs,t.filterProtocols);let l={headers:{Accept:"application/x-ndjson"},signal:i},f=await this.#r(c.toString(),l);if(f.status===404)return;if(f.status===422)throw new Qc("Request does not conform to schema or semantic constraints");if(f.body==null)throw new so("Routing response had no body");if(f.headers.get("Content-Type")?.startsWith("application/json")){let h=(await f.json()).Peers??[];for(let m of h){let w=this.#e(m);w!=null&&(yield w)}}else for await(let d of Vu(Ih(f.body))){let h=this.#e(d);h!=null&&(yield h)}}catch(c){this.log.error("getClosestPeers errored - %e",c)}finally{i.clear(),a.resolve(),this.log("getClosestPeers finished: %s",n)}}async getIPNS(e,t={}){this.log("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=De([this.shutDownController.signal,n,t.signal]);let i=Ue(),s=Ue();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.url}routing/v1/ipns/${e}`;try{await i.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(this.log("getIPNS GET %s %d",a,l.status),l.status===404)throw new Xe("No matching records found");if(l.status===422)throw new Qc("Request does not conform to schema or semantic constraints");if(!l.ok)throw new so(`Unexpected status code: ${l.status}`);let f=l.headers.get("Content-Type");if(f==null||!f.includes("application/vnd.ipfs.ipns-record"))throw new Xe("No matching records found");if(l.body==null)throw new so("GET ipns response had no body");let u=await l.arrayBuffer(),d=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await K2(kh(e.multihash),d),si(d)}catch(c){throw this.log.error("getIPNS GET %s error - %e",a,c),c}finally{o.clear(),s.resolve(),this.log("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){this.log("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=De([this.shutDownController.signal,o,n.signal]);let s=Ue(),a=Ue();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.url}routing/v1/ipns/${e}`;try{await s.promise;let l=Ph(t),f={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},u=await this.#r(c,f);if(this.log("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new so("PUT ipns response had status other than 200")}catch(l){throw this.log.error("putIPNS PUT %s error - %e",c,l.stack),l}finally{i.clear(),a.resolve(),this.log("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(ie)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:yt(e.ID),Addrs:n,Protocols:t}}catch(t){this.log.error("could not conform record to peer schema - %e",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return this.log("returning cached response for %s",o),this.logResponse(c),c;this.log("evicting cached response for %s",o),await this.cache?.delete(e)}else this.cache!=null&&this.log("cache miss for %s",o)}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return this.log("deduplicating outgoing request for %s",o),c.clone()}this.log("outgoing request:"),this.logRequest(e,t);let s=fetch(e,t).then(async c=>{if(this.log("incoming response:"),this.logResponse(c),this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,f=new Headers(c.headers);f.set("x-cache-expires",l.toString());let u=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:f});await this.cache.put(e,u)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,s),await s}toString(){return`DefaultDelegatedRoutingV1HttpApiClient(${this.url})`}logRequest(e,t){let n=new Headers(t.headers);this.log("%s %s HTTP/1.1",t.method??"GET",e);for(let[o,i]of n.entries())this.log("%s: %s",o,i)}logResponse(e){this.log("HTTP/1.1 %d %s",e.status,e.statusText);for(let[t,n]of e.headers.entries())this.log("%s: %s",t,n)}};function zC(r){return e=>new xy(e,r)}var GC="libp2p",XC="autonat",YC="1.0.0";var At;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),(function(l){l.codec=()=>Ot(t)})(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),(function(l){l.codec=()=>Ot(o)})(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let f;l.codec=()=>(f==null&&(f=Ie((u,d,h={})=>{if(h.lengthDelimited!==!1&&d.fork(),u.id!=null&&(d.uint32(10),d.bytes(u.id)),u.addrs!=null)for(let m of u.addrs)d.uint32(18),d.bytes(m);h.lengthDelimited!==!1&&d.ldelim()},(u,d,h={})=>{let m={addrs:[]},w=d==null?u.len:u.pos+d;for(;u.pos<w;){let y=u.uint32();switch(y>>>3){case 1:{m.id=u.bytes();break}case 2:{if(h.limits?.addrs!=null&&m.addrs.length===h.limits.addrs)throw new dt('Decode error - map field "addrs" had too many elements');m.addrs.push(u.bytes());break}default:{u.skipType(y&7);break}}}return m})),f),l.encode=u=>Te(u,l.codec()),l.decode=(u,d)=>Ae(u,l.codec(),d)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let f;l.codec=()=>(f==null&&(f=Ie((u,d,h={})=>{h.lengthDelimited!==!1&&d.fork(),u.peer!=null&&(d.uint32(10),r.PeerInfo.codec().encode(u.peer,d)),h.lengthDelimited!==!1&&d.ldelim()},(u,d,h={})=>{let m={},w=d==null?u.len:u.pos+d;for(;u.pos<w;){let y=u.uint32();switch(y>>>3){case 1:{m.peer=r.PeerInfo.codec().decode(u,u.uint32(),{limits:h.limits?.peer});break}default:{u.skipType(y&7);break}}}return m})),f),l.encode=u=>Te(u,l.codec()),l.decode=(u,d)=>Ae(u,l.codec(),d)})(s=r.Dial||(r.Dial={}));let a;(function(l){let f;l.codec=()=>(f==null&&(f=Ie((u,d,h={})=>{h.lengthDelimited!==!1&&d.fork(),u.status!=null&&(d.uint32(8),r.ResponseStatus.codec().encode(u.status,d)),u.statusText!=null&&(d.uint32(18),d.string(u.statusText)),u.addr!=null&&(d.uint32(26),d.bytes(u.addr)),h.lengthDelimited!==!1&&d.ldelim()},(u,d,h={})=>{let m={},w=d==null?u.len:u.pos+d;for(;u.pos<w;){let y=u.uint32();switch(y>>>3){case 1:{m.status=r.ResponseStatus.codec().decode(u);break}case 2:{m.statusText=u.string();break}case 3:{m.addr=u.bytes();break}default:{u.skipType(y&7);break}}}return m})),f),l.encode=u=>Te(u,l.codec()),l.decode=(u,d)=>Ae(u,l.codec(),d)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=Ie((l,f,u={})=>{u.lengthDelimited!==!1&&f.fork(),l.type!=null&&(f.uint32(8),r.MessageType.codec().encode(l.type,f)),l.dial!=null&&(f.uint32(18),r.Dial.codec().encode(l.dial,f)),l.dialResponse!=null&&(f.uint32(26),r.DialResponse.codec().encode(l.dialResponse,f)),u.lengthDelimited!==!1&&f.ldelim()},(l,f,u={})=>{let d={},h=f==null?l.len:l.pos+f;for(;l.pos<h;){let m=l.uint32();switch(m>>>3){case 1:{d.type=r.MessageType.codec().decode(l);break}case 2:{d.dial=r.Dial.codec().decode(l,l.uint32(),{limits:u.limits?.dial});break}case 3:{d.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:u.limits?.dialResponse});break}default:{l.skipType(m&7);break}}}return d})),c),r.encode=l=>Te(l,r.codec()),r.decode=(l,f)=>Ae(l,r.codec(),f)})(At||(At={}));var jV=4,KV=8,Ey=class{components;protocol;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;started;log;topologyId;dialResults;findPeers;addressFilter;connectionThreshold;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:auto-nat"),this.started=!1,this.protocol=`/${t.protocolPrefix??GC}/${XC}/${YC}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??20,this.connectionThreshold=t.connectionThreshold??80,this.maxMessageSize=t.maxMessageSize??8192,this.dialResults=zt({name:"libp2p_autonat_dial_results",metrics:e.metrics}),this.findPeers=ku(this.findRandomPeers.bind(this),6e4),this.addressFilter=$r(1024)}[Symbol.toStringTag]="@libp2p/autonat";[qe]=["@libp2p/autonat"];get[An](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,(e,t)=>{this.handleIncomingAutonatStream(e,t).catch(n=>{this.log.error("error handling incoming autonat stream - %e",n)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=De([AbortSignal.timeout(1e4),e?.signal]);try{this.log("starting random walk to find peers to run AutoNAT");for await(let n of this.components.randomWalk.walk({signal:t})){if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable %s",n.id,n.multiaddrs.map(o=>o.toString()).join(", "));continue}try{this.log.trace("dial random peer %p",n.id),await this.components.connectionManager.openConnection(n.multiaddrs,{signal:t})}catch{}if(this.allAddressesAreVerified()){this.log("stopping random walk, all addresses are verified");return}if(!this.hasConnectionCapacity()){this.log("stopping random walk, too close to max connections");return}}}catch{}}async handleIncomingAutonatStream(e,t){let n=AbortSignal.timeout(this.timeout);try{let o=bt(e,{maxDataLength:this.maxMessageSize}).pb(At),i=await o.read({signal:n}),s=await this.handleAutonatMessage(i,t,{signal:n});await o.write(s,{signal:n}),await e.close({signal:n})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(u=>Ce(u).host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let s,a=i.peer;if(a?.id==null)return this.log.error("peerId missing from message"),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let u=lt(a.id);s=Ut(u)}catch(u){return this.log.error("invalid PeerId - %e",u),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",s),!t.remotePeer.equals(s))return this.log("target peer %p did not equal sending peer %p",s,t.remotePeer),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>ie(u)).filter(u=>{try{let d=Ce(u);return Mt(u)?!1:d.host!==Ce(t.remoteAddr).host?(this.log.trace("not dialing %a - target host did not match remote host %a",u,t.remoteAddr),!1):o.includes(d.host)?!1:this.components.transportManager.dialTransportForMultiaddr(u)==null?(this.log.trace("not dialing %a - transport unsupported",u),!1):!0}catch{return!1}}).map(u=>(u.getComponents().find(d=>d.code===421)?.value==null&&(u=u.encapsulate(`/p2p/${s.toString()}`)),u));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",s),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(u=>u.toString()).join(", "),s);let l="",f=c[0];for(let u of c){let d;f=u;try{if(d=await this.components.connectionManager.openConnection(u,n),!d.remoteAddr.equals(u))throw this.log.error("tried to dial %a but dialed %a",u,d.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,u),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.OK,addr:d.remoteAddr.decapsulateCode(421).bytes}}}catch(h){this.log.error("could not dial %p - %e",s,h),l=h.message}finally{d!=null&&await d.close()}}return{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:f.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,i)=>o.type==="observed"&&i.type!=="observed"?1:i.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||Ce(o.multiaddr).type==="ip6"&&(!t||!Wm(o.multiaddr))||Mt(o.multiaddr)));for(let o of n){let i=o.multiaddr.toString(),s=this.dialResults.get(i);if(s!=null){if(s.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",s.multiaddr,e);continue}if(s.queue.size>10){this.log.trace("%a already has enough peers queued",s.multiaddr);continue}}if(s==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(i),this.addressFilter.has(i))continue;this.addressFilter.add(i),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",i),s={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:mw(),queue:new vr({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(i,s)}return s}}removeOutdatedMultiaddrResults(){let e=new Set(this.components.addressManager.getAddressesWithMetadata().filter(({expires:t})=>t<Date.now()).map(({multiaddr:t})=>t.toString()));for(let t of this.dialResults.keys())e.has(t)||(this.log.trace("remove results for %a",t),this.dialResults.delete(t))}async verifyExternalAddresses(e){if(!this.isStarted())return;this.removeOutdatedMultiaddrResults();let n=(await this.components.peerStore.get(e.remotePeer)).addresses.some(({multiaddr:s})=>Ce(s).type==="ip6"),o=this.getNetworkSegment(e.remoteAddr),i=this.getFirstUnverifiedMultiaddr(o,n);if(i==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){i.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",i.multiaddr),this.confirmAddress(i)):this.log("skipping verifying %a because we are too close to the connection limit",i.multiaddr);return}i.queue.add(async s=>{await this.askPeerToVerify(e,o,s)},{peerId:e.remotePeer,multiaddr:i.multiaddr}).catch(s=>{i?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,i?.multiaddr,s)})}async askPeerToVerify(e,t,n){let o=this.dialResults.get(n.multiaddr.toString());if(o==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let i=AbortSignal.timeout(this.timeout);this.log.trace("asking %a to verify multiaddr %s",e.remoteAddr,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=bt(s).pb(At),[,c]=await Promise.all([a.write({type:At.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==At.MessageType.DIAL_RESPONSE||c.dialResponse==null){this.log("invalid autonat response from %p - %j",e.remotePeer,c);return}let l=c.dialResponse.status;if(this.log.trace("autonat response from %p for %a is %s",e.remotePeer,n.multiaddr,l),l!==At.ResponseStatus.OK&&l!==At.ResponseStatus.E_DIAL_ERROR)return;if(o=this.dialResults.get(n.multiaddr.toString()),o==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(o.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(o.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(o.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(o.verifyingPeers.add(e.remotePeer),o.networkSegments.push(t),l===At.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===At.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===jV&&this.confirmAddress(o),o.failure===KV&&this.unconfirmAddress(o)}finally{try{await s.close({signal:i})}catch(a){s.abort(a)}}}hasConnectionCapacity(){let t=this.components.connectionManager.getConnections().length,n=this.components.connectionManager.getMaxConnections();return t/n*100<this.connectionThreshold}confirmAddress(e){this.log("%s address %a is externally dialable",e.type,e.multiaddr),this.components.addressManager.confirmObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!0,e.queue.abort()}unconfirmAddress(e){this.log("%s address %a is not externally dialable",e.type,e.multiaddr),this.components.addressManager.removeObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!1,e.queue.abort()}getNetworkSegment(e){let t=Ce(e);switch(t.type){case"ip4":return t.host.split(".")[0].padStart(3,"0");case"ip6":return t.host.split(":")[0].padStart(4,"0");default:throw new P(`Remote address ${e} was not an IPv4 or Ipv6 address`)}}};function QC(r={}){return e=>new Ey(e,r)}var VV="bootstrap",HV=50,qV=1e3,G7=class extends _e{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??qV,this.list=t.list.map(n=>ie(n)).filter(n=>Fu.matches(n)?n.getComponents().findLast(i=>i.code===421)?.value==null?(this.log.error("invalid bootstrap multiaddr without peer id"),!1):!0:(this.log.error("invalid multiaddr %a",n),!1)).map(n=>({id:yt(n.getComponents().findLast(o=>o.code===421)?.value??""),multiaddrs:[n]})),this._init=t}[Va]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[qe]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error("failed to discover bootstrap peers - %e",e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??VV]:{value:this._init.tagValue??HV,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p - %e",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function ZC(r){return e=>new G7(e,r)}var X7=1e3,JC=60*X7;var D3e=120*JC,eP=1,Sy=5e3,tP=100;var up=`${Ha}-circuit-relay`,N3e=2*JC,L3e=BigInt(1<<17),Zc="/libp2p/circuit/relay/0.2.0/hop",Y7="/libp2p/circuit/relay/0.2.0/stop",B3e=30*X7,M3e=30*X7,Q7=300,rP=4096,nP=.001;var sa;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),ff.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),_y.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),df.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),_r.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=ff.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=_y.codec().decode(o,o.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=df.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=_r.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(sa||(sa={}));var hi;(function(r){let e;(function(o){o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.CONNECT=0]="CONNECT",o[o.STATUS=1]="STATUS"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),ff.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),df.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),_r.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=ff.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=df.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=_r.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(hi||(hi={}));var ff;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ke(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new dt('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(ff||(ff={}));var _y;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),Ty.codec().encode(t.voucher,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new dt('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}case 3:{i.voucher=Ty.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(_y||(_y={}));var df;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.duration=t.uint32();break}case 2:{i.data=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(df||(df={}));var _r;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(_r||(_r={}));var Z7;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(Z7||(Z7={}));(function(r){r.codec=()=>Ot(Z7)})(_r||(_r={}));var Ay;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={relay:ke(0),peer:ke(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.relay=t.bytes();break}case 2:{i.peer=t.bytes();break}case 3:{i.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(Ay||(Ay={}));var Ty;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&(n.uint32(26),Ay.codec().encode(t.payload,n)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:ke(0),payloadType:ke(0),signature:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=Ay.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(Ty||(Ty={}));var fp=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},Iy=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},Cy=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function J7(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var dp=class{expires;bytes;constructor(e){e?.duration!=null&&e?.duration!==0&&(this.expires=Date.now()+e.duration*1e3),this.bytes=e?.data,this.bytes===0n&&(this.bytes=void 0),this.onData=this.onData.bind(this)}onData(e){this.bytes!=null&&(this.bytes-=BigInt(e.byteLength),this.bytes<0n&&(this.bytes=0n))}getLimits(){if(this.expires==null&&this.bytes==null)return;let e={};if(this.bytes!=null){let t=this;Object.defineProperty(e,"bytes",{get(){return t.bytes}})}if(this.expires!=null){let t=this;Object.defineProperty(e,"seconds",{get(){return Math.round(((t.expires??0)-Date.now())/1e3)}})}return e}},Py=ct(Qe(Fu.matchers[0],at(290))),ky=ct(at(290));var Oy=class extends _e{components;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.components=e,this.started=!1,this.running=!1,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal,this.dialPeer=this.dialPeer.bind(this),this.onPeer=this.onPeer.bind(this)}isStarted(){return this.started}async start(){this.topologyId=await this.components.registrar.register(Zc,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p queue (length: %d, active %d)",e,this.queue?.size,this.queue?.running),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.components.registrar.unregister(this.topologyId),this.running&&this.stopDiscovery(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,this.components.events.addEventListener("peer:discovery",this.onPeer),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.components.peerStore.all({filters:[n=>n.protocols.includes(Zc)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=oP(n),s=oP(o);return i>s?-1:s>i?1:0}]});for(let n of e)this.log.trace("found relay peer %p in peer store",n.id),this.safeDispatchEvent("relay:discover",{detail:n.id});this.log("found %d relay peers in peer store",e.length);let t=this.queue=new vr({concurrency:5});this.log("start random walk");for await(let n of this.components.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.components.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}t.queued>10&&(this.log.trace("wait for space in queue for %p",n.id),await t.onSizeLessThan(10,{signal:this.discoveryController.signal})),this.log("adding random peer %p to dial queue (length: %d, active %d)",n.id,t.size,t.running),t.add(this.dialPeer,{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p - %e",n.id,o)})}this.log("stop random walk"),await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network - %e",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort(),this.queue?.clear(),this.components.events.removeEventListener("peer:discovery",this.onPeer)}onPeer(e){this.log.trace("maybe dialing discovered peer %p",e.detail.id),this.maybeDialPeer(e).catch(t=>{this.log.trace("error dialing discovered peer %p - %e",e.detail.id,t)})}async maybeDialPeer(e){if(this.queue==null)return;let t=e.detail.id,n=e.detail.multiaddrs;if(this.queue.has(t)){this.log.trace("random peer %p was already in queue",t);return}if(this.components.connectionManager.getConnections(t)?.length>0){this.log.trace("random peer %p was already connected",t);return}if(!await this.components.connectionManager.isDialable(n)){this.log.trace("random peer %p was not dialable",t);return}this.queue?.add(this.dialPeer,{peerId:e.detail.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to discovered peer %p - %e",e.detail.id,o)})}async dialPeer({peerId:e,signal:t}){let n=De([AbortSignal.timeout(5e3),t]);try{await this.components.connectionManager.openConnection(e,{signal:n})}finally{n.clear()}}};function oP(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(j(e)).getTime()}var eb=class extends _e{connectionManager;addressManager;reservationStore;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.addressManager=e.addressManager,this.reservationStore=e.reservationStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??Sy,this.reservationStore.addEventListener("relay:removed",this._onRemoveRelayPeer),this.reservationStore.addEventListener("relay:created-reservation",this._onAddRelayPeer)}_onRemoveRelayPeer=e=>{this.log("relay removed %p our relay %p",e.detail.relay,this.relay,this.relay?.equals(e.detail.relay)),this.relay?.equals(e.detail.relay)===!0&&(this.log("relay peer removed %p",e.detail.relay),this.listeningAddrs.forEach(t=>{this.addressManager.removeObservedAddr(t)}),this.listeningAddrs=[],this.safeDispatchEvent("listening"))};_onAddRelayPeer=e=>{let{details:t}=e.detail;t.type!=="configured"&&t.id===this.reservationId&&this.addedRelay(e.detail)};async listen(e){if(ky.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(Py.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);let n=e.decapsulate("/p2p-circuit"),o=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(o.remotePeer)){this.log("making reservation on peer %p",o.remotePeer);let i=await this.reservationStore.addRelay(o.remotePeer,"configured");this.addedRelay(i)}}else throw new Ka(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}updateAnnounceAddrs(){}async close(){this.reservationStore.cancelReservations(),this.listeningAddrs=[],this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),queueMicrotask(()=>{this.safeDispatchEvent("close")})}addedRelay(e){this.log("relay peer added %p",e.relay),this.relay=e.relay,this.listeningAddrs=e.details.reservation.addrs.map(t=>ie(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function iP(r){return new eb(r)}var sP="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var aP=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=sP[t[r]&63];return e};var WV=60*1e3*10,zV=60*1e3*5,GV=30*1e3,Ry=class extends _e{peerId;connectionManager;peerStore;events;reserveQueue;reservations;pendingReservations;maxReservationQueueLength;reservationCompletionTimeout;started;log;relayFilter;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new jr,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??tP,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??Sy,this.started=!1,this.relayFilter=$r(100),this.reserveQueue=new vr({concurrency:t?.reservationConcurrency??eP,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(i=>i.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(i=>{this.log("could not remove relay %p - %e",n.detail,i)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(up)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[up]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#r()}).catch(e=>{this.log.error("failed to clean up and redial old relays during afterStart - %e",e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=aP();return this.pendingReservations.push(e),this.#r(),e}async addRelay(e,t){if(this.peerId.equals(e))throw this.log.trace("not trying to use self as relay"),new Ka("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new Cy("The reservation queue is full");let n=this.reserveQueue.find(e);if(n!=null)return this.log.trace("potential relay peer %p is already in the reservation queue",e),n.join();if(this.relayFilter.has(e.toMultihash().bytes))throw new Ka("The relay was previously invalid");return this.log.trace("try to reserve relay slot with %p",e),this.reserveQueue.add(async()=>{let o=Date.now();try{let i=this.reservations.get(e);if(i!=null){let m=this.connectionManager.getConnections(e),w=!1;if(m.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),m.map(y=>y.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),w=!0),w&&J7(i.reservation.expire)>WV)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:i};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new fp("Not making reservation on discovered relay because we do not need any more relays");let s=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:s});if(fr.matches(a.remoteAddr))throw new Iy("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=J7(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let f=Math.min(Math.max(l-zV,GV),Math.pow(2,31)-1),u=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async m=>{this.log.error("could not refresh reservation to relay %p - %e",e,m),await this.#t(e)}).catch(m=>{this.log.error("could not remove expired reservation to relay %p - %e",e,m)})},f),d;if(t==="discovered"){let m=this.pendingReservations.pop();if(m==null)throw new fp("Made reservation on relay but did not need any more discovered relays");d={timeout:u,reservation:c,type:t,connection:a.id,id:m}}else d={timeout:u,reservation:c,type:t,connection:a.id};this.reservations.set(e,d),await this.peerStore.merge(e,{tags:{[up]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:d};return this.safeDispatchEvent("relay:created-reservation",{detail:h}),h}catch(i){throw t==="discovered"&&i.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,i),(i.name==="DialError"||i.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(s=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,s)}),i}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(e){return e==null?this.reservations.size:[...this.reservations.values()].reduce((t,n)=>(n.type===e&&t++,t),0)}cancelReservations(){[...this.reservations.values()].forEach(e=>{clearTimeout(e.timeout)}),this.reservations.clear()}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(Zc,t),i=bt(n).pb(sa);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:sa.Type.RESERVE},t);let s;try{this.log.trace("reading response from %p",e.remotePeer),s=await i.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %s",s.status),s.status===_r.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let f=ie(l);f.getComponents().find(u=>u.code===421)==null&&(f=f.encapsulate(`/p2p/${e.remotePeer}`)),f=ie(f.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(f.toString())}return s.reservation.addrs=[...c].map(l=>ie(l).bytes),s.reservation}let a=`reservation failed with status ${s.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#t(e){let t=this.reservations.get(e);t!=null&&(this.log("removing relay reservation with %p from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),t.type==="discovered"&&this.pendingReservations.push(t.id),await this.peerStore.merge(e,{tags:{[up]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:{relay:e,details:t}}),this.#r())}#r(){if(this.pendingReservations.length===0){this.log.trace("have discovered enough relays"),this.reserveQueue.clear(),this.safeDispatchEvent("relay:found-enough-relays");return}this.relayFilter=$r(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var tb=class extends Hs{stream;init;constructor(e){super({...e,direction:e.stream.direction}),this.init=e,this.stream=e.stream,this.stream.addEventListener("close",t=>{this.onTransportClosed(t.error)}),this.stream.addEventListener("remoteCloseWrite",t=>{this.onRemoteCloseWrite(),this.close().catch(n=>{this.abort(n)})}),this.stream.addEventListener("message",t=>{e.onDataRead?.(t.data),this.onData(t.data)}),this.stream.addEventListener("drain",()=>{this.safeDispatchEvent("drain")})}sendData(e){return this.init.onDataWrite?.(e),{sentBytes:e.byteLength,canSendMore:this.stream.send(e)}}async sendClose(e){await this.stream.close(e)}sendReset(){this.stream.abort(new Error("An error occurred"))}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}};function rb(r){return new tb(r)}var XV=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(ie)}catch{return!1}return!0},cP={maxInboundStopStreams:Q7,maxOutboundStopStreams:Q7,stopTimeout:3e4},Dy=class{components;discovery;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.maxInboundStopStreams=t.maxInboundStopStreams??cP.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??cP.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new Oy(e,{filter:t.discoveryFilter??gw(rP,nP)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{o.name!=="HadEnoughRelaysError"&&o.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p - %e",n.detail,o)})}),this.reservationStore=new Ry(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:found-enough-relays",()=>{this.discovery?.stopDiscovery()}),this.started=!1,this.onStop=this.onStop.bind(this)}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[qe]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[An](){return this.discovery!=null?["@libp2p/identify"]:[]}[ks]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,this.shutdownController.signal,await this.components.registrar.handle(Y7,this.onStop,{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await er(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await or(this.discovery,this.reservationStore),await this.components.registrar.unhandle(Y7),this.started=!1}async dial(e,t){let n=e.toString().split("/p2p-circuit"),o=ie(n[0]),i=ie(n[n.length-1]),s=o.getComponents().find(h=>h.code===421)?.value,a=i.getComponents().find(h=>h.code===421)?.value;if(s==null||a==null){let h=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${h}`),new Cs(`C${h}`)}let c=yt(s),l=yt(a),u=this.components.connectionManager.getConnections(c)[0];u==null?(await this.components.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new oe("circuit-relay:open-connection")),u=await this.components.connectionManager.openConnection(c,t)):t.onProgress?.(new oe("circuit-relay:reuse-connection"));let d;try{t.onProgress?.(new oe("circuit-relay:open-hop-stream")),d=await u.newStream(Zc,t);let h=bt(d).pb(sa);t.onProgress?.(new oe("circuit-relay:write-connect-message")),await h.write({type:sa.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[ie(i).bytes]}},t),t.onProgress?.(new oe("circuit-relay:read-connect-response"));let m=await h.read(t);if(m.status!==_r.OK)throw new Be(`failed to connect via relay with status ${m?.status?.toString()??"undefined"}`);let w=new dp(m.limit),y=rb({stream:h.unwrap().unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.components.peerId.toString()}`),onDataRead:w.onData,onDataWrite:w.onData,log:d.log.newScope("circuit-relay:connection")}),b=await this.components.upgrader.upgradeOutbound(y,{...t,limits:w.getLimits()});return b.log("outbound relayed connection established to %p with limits %o, over connection %s",b.remotePeer,m.limit??"none",u.id),b}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed - %e",l,c,h),d?.abort(h),h}}createListener(e){return iP({peerId:this.components.peerId,connectionManager:this.components.connectionManager,addressManager:this.components.addressManager,reservationStore:this.reservationStore,logger:this.components.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Py.exactMatch(t)||ky.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>fr.exactMatch(t))}async onStop(e,t){let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);try{if(!this.reservationStore.hasReservation(t.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.components.transportManager.listen([t.remoteAddr.encapsulate("/p2p-circuit")])}catch(u){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on - %e",u)}let o=bt(e).pb(hi),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",t.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",t.remotePeer),await o.write({type:hi.Type.STATUS,status:_r.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(i.type!==hi.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:hi.Type.STATUS,status:_r.UNEXPECTED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(!XV(i)){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:hi.Type.STATUS,status:_r.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}let s=Ut(lt(i.peer.id));if(await this.components.connectionGater.denyInboundRelayedConnection?.(t.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",t.remotePeer),await o.write({type:hi.Type.STATUS,status:_r.PERMISSION_DENIED},{signal:n}),await e.close({signal:n});return}this.log.trace("sending success response to %p",t.remotePeer),await o.write({type:hi.Type.STATUS,status:_r.OK},{signal:n});let a=new dp(i.limit),c=t.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.components.addressManager.getAddresses()[0],f=rb({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,onDataRead:a.onData,onDataWrite:a.onData,log:e.log.newScope("circuit-relay:connection")});await this.components.upgrader.upgradeInbound(f,{limits:a.getLimits(),signal:n}),f.log("inbound relayed connection established to %p with limits %o, over connection %s",s,i.limit??"none",t.id)}finally{n?.clear()}}};function lP(r={}){return e=>new Dy(e,r)}var Fo;(function(r){let e;(function(o){o.UNUSED="UNUSED",o.CONNECT="CONNECT",o.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.UNUSED=0]="UNUSED",o[o.CONNECT=100]="CONNECT",o[o.SYNC=300]="SYNC"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.observedAddresses!=null)for(let a of o.observedAddresses)i.uint32(18),i.bytes(a);s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={observedAddresses:[]},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{if(s.limits?.observedAddresses!=null&&a.observedAddresses.length===s.limits.observedAddresses)throw new dt('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(o.bytes());break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(Fo||(Fo={}));function nb(r,e){return fr.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:P2.matches(r)?!0:iT.matches(r)?!Mt(r):!1}var uP=1024*4,fP=100,Ny={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Ly=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:dcutr"),this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??Ny.timeout,this.retries=t.retries??Ny.retries,this.maxInboundStreams=t.maxInboundStreams??Ny.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Ny.maxOutboundStreams,this.handleIncomingUpgrade=this.handleIncomingUpgrade.bind(this)}[Symbol.toStringTag]="@libp2p/dcutr";[An]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(hp,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{fr.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt - %e",n)})}}),await this.registrar.handle(hp,this.handleIncomingUpgrade,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(hp),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let o={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([hp],{signal:o.signal,runOnLimitedConnection:!0});let i=bt(t,{maxDataLength:uP}).pb(Fo);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:Fo.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==Fo.Type.CONNECT)throw this.log("A sent wrong message type"),new Be("DCUtR message type was incorrect");let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new Be("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:Fo.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await aA(l/2),this.log("B dialing",c);let f=await this.connectionManager.openConnection(c,{signal:o.signal,priority:fP,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,f.remoteAddr),await e.close(o);break}catch(i){if(this.log.error("error while attempting DCUtR on attempt %d of %d - %e",n+1,this.retries,i),t?.abort(i),n===this.retries)throw i}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let i=o.multiaddr;return i.getComponents().find(s=>s.code===421)?.value==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>nb(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let i=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(fr.exactMatch(i.remoteAddr))throw new Error("Could not open a new, non-limited, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,i.remoteAddr),await e.close({signal:o}),!0}catch(i){this.log.error("unilateral connection upgrade to %p on addresses %a failed - %e",e.remotePeer,n,i)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)},o=bt(e,{maxDataLength:uP}).pb(Fo);this.log("A receiving connect");let i=await o.read(n);if(i.type!==Fo.Type.CONNECT)throw this.log("B sent wrong message type"),new Be("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new Be("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs in %o",i.observedAddresses.map(l=>ie(l))),new Be("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:Fo.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==Fo.Type.SYNC)throw new Be("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:fP,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n),await e.close(n)}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=ie(n);if(!nb(o,this.transportManager))continue;t.push(o)}catch{}return t}};var hp="/libp2p/dcutr";function dP(r={}){return e=>new Ly(e,r)}function fe(r){if(r!==void 0&&r!==fe.REQUEST&&r!==fe.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");r===void 0||this.initialize(r),this.maxHeaderSize=fe.maxHeaderSize}fe.prototype.initialize=function(r,e){if(r!==fe.REQUEST&&r!==fe.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");this.type=r,this.state=r+"_LINE",this.info={headers:[],upgrade:!1},this.trailers=[],this.line="",this.isChunked=!1,this.connection="",this.headerSize=0,this.body_bytes=null,this.isUserCall=!1,this.hadError=!1};fe.encoding="ascii";fe.maxHeaderSize=80*1024;fe.REQUEST="REQUEST";fe.RESPONSE="RESPONSE";var hP=fe.kOnHeaders=1,ob=fe.kOnHeadersComplete=2,By=fe.kOnBody=3,ib=fe.kOnMessageComplete=4;fe.prototype[hP]=fe.prototype[ob]=fe.prototype[By]=fe.prototype[ib]=function(){};var pP=!0;Object.defineProperty(fe,"kOnExecute",{get:function(){return pP=!1,99}});var mP=fe.methods=["DELETE","GET","HEAD","POST","PUT","CONNECT","OPTIONS","TRACE","COPY","LOCK","MKCOL","MOVE","PROPFIND","PROPPATCH","SEARCH","UNLOCK","BIND","REBIND","UNBIND","ACL","REPORT","MKACTIVITY","CHECKOUT","MERGE","M-SEARCH","NOTIFY","SUBSCRIBE","UNSUBSCRIBE","PATCH","PURGE","MKCALENDAR","LINK","UNLINK","SOURCE"],gP=mP.indexOf("CONNECT");fe.prototype.reinitialize=fe;fe.prototype.close=fe.prototype.pause=fe.prototype.resume=fe.prototype.remove=fe.prototype.free=function(){};fe.prototype._compatMode0_11=!1;fe.prototype.getAsyncId=function(){return 0};var YV={REQUEST_LINE:!0,RESPONSE_LINE:!0,HEADER:!0};fe.prototype.execute=function(r,e,t){if(!(this instanceof fe))throw new TypeError("not a HTTPParser");e=e||0,t=typeof t=="number"?t:r.length,this.chunk=r,this.offset=e;var n=this.end=e+t;try{for(;this.offset<n&&!this[this.state](););}catch(o){if(this.isUserCall)throw o;return this.hadError=!0,o}return this.chunk=null,t=this.offset-e,YV[this.state]&&(this.headerSize+=t,this.headerSize>(this.maxHeaderSize||fe.maxHeaderSize))?new Error("max header size exceeded"):t};var QV={REQUEST_LINE:!0,RESPONSE_LINE:!0,BODY_RAW:!0};fe.prototype.finish=function(){if(!this.hadError){if(!QV[this.state])return new Error("invalid state for EOF");this.state==="BODY_RAW"&&this.userCall()(this[ib]())}};fe.prototype.consume=fe.prototype.unconsume=fe.prototype.getCurrentBuffer=function(){};fe.prototype.userCall=function(){this.isUserCall=!0;var r=this;return function(e){return r.isUserCall=!1,e}};fe.prototype.nextRequest=function(){this.userCall()(this[ib]()),this.reinitialize(this.type)};fe.prototype.consumeLine=function(){for(var r=this.end,e=this.chunk,t=this.offset;t<r;t++)if(e[t]===10){var n=this.line+j(e.subarray(this.offset,t),fe.encoding);return n.charAt(n.length-1)==="\r"&&(n=n.substr(0,n.length-1)),this.line="",this.offset=t+1,n}this.line+=j(e.subarray(this.offset,this.end),fe.encoding),this.offset=this.end};var ZV=/^([^: \t]+):[ \t]*((?:.*[^ \t])|)/,JV=/^[ \t]+(.*[^ \t])/;fe.prototype.parseHeader=function(r,e){if(r.indexOf("\r")!==-1)throw My("HPE_LF_EXPECTED");var t=ZV.exec(r),n=t&&t[1];if(n)e.push(n),e.push(t[2]);else{var o=JV.exec(r);o&&e.length&&(e[e.length-1]&&(e[e.length-1]+=" "),e[e.length-1]+=o[1])}};var eH=/^([A-Z-]+) ([^ ]+) HTTP\/(\d)\.(\d)$/;fe.prototype.REQUEST_LINE=function(){var r=this.consumeLine();if(r){var e=eH.exec(r);if(e===null)throw My("HPE_INVALID_CONSTANT");if(this.info.method=this._compatMode0_11?e[1]:mP.indexOf(e[1]),this.info.method===-1)throw new Error("invalid request method");this.info.url=e[2],this.info.versionMajor=+e[3],this.info.versionMinor=+e[4],this.body_bytes=0,this.state="HEADER"}};var tH=/^HTTP\/(\d)\.(\d) (\d{3}) ?(.*)$/;fe.prototype.RESPONSE_LINE=function(){var r=this.consumeLine();if(r){var e=tH.exec(r);if(e===null)throw My("HPE_INVALID_CONSTANT");this.info.versionMajor=+e[1],this.info.versionMinor=+e[2];var t=this.info.statusCode=+e[3];this.info.statusMessage=e[4],((t/100|0)===1||t===204||t===304)&&(this.body_bytes=0),this.state="HEADER"}};fe.prototype.shouldKeepAlive=function(){if(this.info.versionMajor>0&&this.info.versionMinor>0){if(this.connection.indexOf("close")!==-1)return!1}else if(this.connection.indexOf("keep-alive")===-1)return!1;return!!(this.body_bytes!==null||this.isChunked)};fe.prototype.HEADER=function(){var r=this.consumeLine();if(r!==void 0){var e=this.info;if(r)this.parseHeader(r,e.headers);else{for(var t=e.headers,n=!1,o,i=!1,s=0;s<t.length;s+=2)switch(t[s].toLowerCase()){case"transfer-encoding":this.isChunked=t[s+1].toLowerCase()==="chunked";break;case"content-length":if(o=+t[s+1],n){if(o!==this.body_bytes)throw My("HPE_UNEXPECTED_CONTENT_LENGTH")}else n=!0,this.body_bytes=o;break;case"connection":this.connection+=t[s+1].toLowerCase();break;case"upgrade":i=!0;break}this.isChunked&&n&&(n=!1,this.body_bytes=null),i&&this.connection.indexOf("upgrade")!=-1?e.upgrade=this.type===fe.REQUEST||e.statusCode===101:e.upgrade=e.method===gP,this.isChunked&&e.upgrade&&(this.isChunked=!1),e.shouldKeepAlive=this.shouldKeepAlive();var a;if(pP?a=this.userCall()(this[ob](e)):a=this.userCall()(this[ob](e.versionMajor,e.versionMinor,e.headers,e.method,e.url,e.statusCode,e.statusMessage,e.upgrade,e.shouldKeepAlive)),a===2)return this.nextRequest(),!0;if(this.isChunked&&!a)this.state="BODY_CHUNKHEAD";else{if(a||this.body_bytes===0)return this.nextRequest(),e.upgrade;this.body_bytes===null?this.state="BODY_RAW":this.state="BODY_SIZED"}}}};fe.prototype.BODY_CHUNKHEAD=function(){var r=this.consumeLine();r!==void 0&&(this.body_bytes=parseInt(r,16),this.body_bytes?this.state="BODY_CHUNK":this.state="BODY_CHUNKTRAILERS")};fe.prototype.BODY_CHUNK=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[By](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||(this.state="BODY_CHUNKEMPTYLINE")};fe.prototype.BODY_CHUNKEMPTYLINE=function(){var r=this.consumeLine();if(r!==void 0){if(r!=="")throw new Error("Expected empty line");this.state="BODY_CHUNKHEAD"}};fe.prototype.BODY_CHUNKTRAILERS=function(){var r=this.consumeLine();r!==void 0&&(r?this.parseHeader(r,this.trailers):(this.trailers.length&&this.userCall()(this[hP](this.trailers,"")),this.nextRequest()))};fe.prototype.BODY_RAW=function(){this.userCall()(this[By](this.chunk.slice(this.offset,this.end),0,this.end-this.offset)),this.offset=this.end};fe.prototype.BODY_SIZED=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[By](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||this.nextRequest()};["Headers","HeadersComplete","Body","MessageComplete"].forEach(function(r){var e=fe["kOn"+r];Object.defineProperty(fe.prototype,"on"+r,{get:function(){return this[e]},set:function(t){return this._compatMode0_11=!0,gP="CONNECT",this[e]=t}})});function My(r){var e=new Error("Parse Error");return e.code=r,e}function yP(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}function sb(r,e={}){let t=yP(r),n={_cancelled:!1,async start(){this._cancelled=!1},async pull(o){try{let{value:i,done:s}=await t.next();if(this._cancelled)return;if(s===!0){o.close();return}o.enqueue(i)}catch(i){o.error(i)}},cancel(){this._cancelled=!0}};return new globalThis.ReadableStream(n,e)}var rH=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),wP=md({name:"sha-1",code:17,encode:rH("SHA-1")});var Uy=class extends globalThis.Request{constructor(e,t={}){let n=t.method??"GET",o=pi(t),i=t.body;Fy(n,o)&&(t.method="UPGRADE"),super(e,t),Object.defineProperties(this,{body:{value:i,writable:!1},method:{value:n,writable:!1},headers:{value:o,writable:!1}})}};var bP={100:"Continue",101:"Switching Protocols",102:"Processing",103:"Early Hints",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a Teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Too Early",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"};var mi=class extends globalThis.Response{constructor(e,t={}){let n=pi(t),o=t.status??200;(o<200||o>599)&&(t.status=200),super(e,t),Object.defineProperties(this,{status:{value:o,writable:!1},statusText:{value:bP[o],writable:!1},headers:{value:n,writable:!1}})}};var nH=["dns","dns4","dns6","dnsaddr"];function mp(r,e){if(r instanceof URL)return r;let t=jy(r,e),{httpPath:n}=Ky(r);return new URL(`http://${t}${n}`)}function gp(r){return r instanceof Uint8Array?r:r instanceof DataView?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r,0,r.byteLength)}function xP(r,e){let t={method:r.method,headers:r.headers};if((t.method!=="GET"||r.upgrade)&&t.method!=="HEAD"){let n=e;r.upgrade||(n=iH(e,r.headers.get("content-length"))),t.body=sb(n),t.duplex="half"}return new Uy(ab(r).toString(),t)}async function EP(r,e){if(e.send(B([`HTTP/1.1 ${r.status} ${r.statusText}`,...$y(r.headers),"",""].join(`\r
50
+ `)}`:`${t} :`}};MI=Yt;ue.Constructed=MI;Yt.NAME="CONSTRUCTED";var zg=class extends xr{fromBER(e,t,n){return t}toBER(e){return ui}};zg.override="EndOfContentValueBlock";var UI,zh=class extends Xt{constructor(e={}){super(e,zg),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};UI=zh;ue.EndOfContent=UI;zh.NAME=qh;var FI,hn=class extends Xt{constructor(e={}){super(e,xr),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};FI=hn;ue.Null=FI;hn.NAME="NULL";var Gg=class extends fi(xr){get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=Me.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);return cs(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,y7.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};Gg.NAME="BooleanValueBlock";var $I,Lc=class extends Xt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,Gg),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};$I=Lc;ue.Boolean=$I;Lc.NAME="BOOLEAN";var Xg=class extends fi(ci){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=ci.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let i=0;i<this.value.length;i++){let s=this.value[i].constructor.NAME;if(s===qh){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==DI)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,t,n),this.blockLength=n;return o}toBER(e,t){return this.isConstructed?ci.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};Xg.NAME="OctetStringValueBlock";var x7,Vr=class extends Xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},Xg),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let i=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(i.byteLength){let s=Zu(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Yt.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=Me.Convert.ToHex(this.valueBlock.valueHexView);return`${e} : ${t}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof x7&&e.push(t.valueBlock.valueHexView);return Me.BufferSourceConverter.concat(e)}};x7=Vr;ue.OctetString=x7;Vr.NAME=DI;var Yg=class extends fi(ci){constructor({unusedBits:e=0,isConstructed:t=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,n){if(!n)return t;let o=-1;if(this.isConstructed){if(o=ci.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===qh){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==NI)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let i=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,i,t,n))return-1;let s=i.subarray(t,t+n);if(this.unusedBits=s[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=s.subarray(1);try{if(a.byteLength){let c=Zu(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=s.subarray(1),this.blockLength=s.length,t+n}toBER(e,t){if(this.isConstructed)return ci.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength){let o=new Uint8Array(1);return o[0]=0,o.buffer}let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};Yg.NAME="BitStringValueBlock";var jI,Mo=class extends Xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},Yg),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Yt.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let s of t)e.push(s.toString(2).padStart(8,"0"));let n=e.join(""),o=this.constructor.NAME,i=n.substring(0,n.length-this.valueBlock.unusedBits);return`${o} : ${i}`}}};jI=Mo;ue.BitString=jI;Mo.NAME=NI;var KI;function rV(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l=0,f=c<s?s:c,u=0;for(let d=f;d>=0;d--,u++){switch(!0){case u<a.length:l=i[s-u]+a[c-u]+t[0];break;default:l=i[s-u]+t[0]}switch(t[0]=l/10,!0){case u>=i.length:i=Kg(new Uint8Array([l%10]),i);break;default:i[s-u]=l%10}}return t[0]>0&&(i=Kg(t,i)),i}function RI(r){if(r>=Vh.length)for(let e=Vh.length;e<=r;e++){let t=new Uint8Array([0]),n=Vh[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let i=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=i[0]/10,n[o]=i[0]%10}t[0]>0&&(n=Kg(t,n)),Vh.push(n)}return Vh[r]}function nV(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l,f=0;for(let u=c;u>=0;u--,f++)switch(l=i[s-f]-a[c-f]-t,!0){case l<0:t=1,i[s-f]=l+10;break;default:t=0,i[s-f]=l}if(t>0)for(let u=s-c+1;u>=0;u--,f++)if(l=i[s-f]-t,l<0)t=1,i[s-f]=l+10;else{t=0,i[s-f]=l;break}return i.slice()}var Gh=class extends fi(xr){setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=y7.call(this)))}constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(CI(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let i=this.fromBER(e,t,n);if(i===-1)return i;let s=this.valueHexView;return s[0]===0&&(s[1]&128)!==0?this.valueHexView=s.subarray(1):o!==0&&s.length<o&&(o-s.length>1&&(o=s.length+1),this.valueHexView=s.subarray(o-s.length)),i}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,i=this.valueHexView,s="",a=!1;for(let c=i.byteLength-1;c>=0;c--){o=i[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=nV(RI(n),t),s="-";break;default:t=rV(t,RI(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=kI.charAt(t[c]));return a===!1&&(s+=kI.charAt(0)),s}};KI=Gh;Gh.NAME="IntegerValueBlock";Object.defineProperty(KI.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var Hh,Un=class extends Xt{constructor(e={}){super(e,Gh),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Vg(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Vg();let t=BigInt(e),n=new Yu,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(Me.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${Me.Convert.ToHex(a)}`)+t,f=Me.BufferSourceConverter.toUint8Array(Me.Convert.FromHex(l.toString(16)));f[0]|=128,n.write(f)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new Hh({valueHex:n.final()})}convertToDER(){let e=new Hh({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new Hh({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};Hh=Un;ue.Integer=Hh;Un.NAME="INTEGER";var VI,Bc=class extends Un{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};VI=Bc;ue.Enumerated=VI;Bc.NAME="ENUMERATED";var Xh=class extends fi(xr){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=Nc(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){Vg();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=na(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",ui;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n}toString(){let e="";if(this.isHexOnly)e=Me.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};Xh.NAME="sidBlock";var Qg=class extends xr{constructor({value:e=dn,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Xh;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.value.length===0&&(i.isFirstSid=!0),this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,ui;t.push(o)}return v7(t)}fromString(e){this.value=[];let t=0,n=0,o="",i=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,i){let s=this.value[0],a=0;switch(s.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;s.valueDec=c+a,i=!1}else{let s=new Xh;if(o>Number.MAX_SAFE_INTEGER){Vg();let a=BigInt(o);s.valueBigInt=a}else if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return;this.value.length||(s.isFirstSid=!0,i=!0),this.value.push(s)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};Qg.NAME="ObjectIdentifierValueBlock";var HI,Fn=class extends Xt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Qg),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};HI=Fn;ue.ObjectIdentifier=HI;Fn.NAME="OBJECT IDENTIFIER";var Yh=class extends fi(ss){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=Me.BufferSourceConverter.toUint8Array(e);if(!cs(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=Nc(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=na(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",ui;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n.buffer}toString(){let e="";return this.isHexOnly?e=Me.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};Yh.NAME="relativeSidBlock";var Zg=class extends xr{constructor({value:e=dn,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Yh;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let i=this.value[o].toBER(e);if(i.byteLength===0)return this.error=this.value[o].error,ui;n.push(i)}return v7(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let i=new Yh;if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return!0;this.value.push(i)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};Zg.NAME="RelativeObjectIdentifierValueBlock";var qI,Qh=class extends Xt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Zg),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};qI=Qh;ue.RelativeObjectIdentifier=qI;Qh.NAME="RelativeObjectIdentifier";var WI,vt=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};WI=vt;ue.Sequence=WI;vt.NAME="SEQUENCE";var zI,en=class extends Yt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};zI=en;ue.Set=zI;en.NAME="SET";var Jg=class extends fi(xr){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=dn}toJSON(){return{...super.toJSON(),value:this.value}}};Jg.NAME="StringValueBlock";var ey=class extends Jg{};ey.NAME="SimpleStringValueBlock";var tn=class extends Wh{constructor({...e}={}){super(e,ey)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,Me.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};tn.NAME="SIMPLE STRING";var ty=class extends tn{fromBuffer(e){this.valueBlock.valueHexView=Me.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=Me.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=Me.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(Me.Convert.FromUtf8String(e)),this.valueBlock.value=e}};ty.NAME="Utf8StringValueBlock";var GI,io=class extends ty{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};GI=io;ue.Utf8String=GI;io.NAME="UTF8String";var ry=class extends tn{fromBuffer(e){this.valueBlock.value=Me.Convert.ToUtf16String(e),this.valueBlock.valueHexView=Me.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(Me.Convert.FromUtf16String(e))}};ry.NAME="BmpStringValueBlock";var XI,Mc=class extends ry{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};XI=Mc;ue.BmpString=XI;Mc.NAME="BMPString";var ny=class extends tn{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let i=na(e.charCodeAt(o),8),s=new Uint8Array(i);if(s.length>4)continue;let a=4-s.length;for(let c=s.length-1;c>=0;c--)n[o*4+c+a]=s[c]}this.valueBlock.value=e}};ny.NAME="UniversalStringValueBlock";var YI,Uc=class extends ny{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};YI=Uc;ue.UniversalString=YI;Uc.NAME="UniversalString";var QI,Fc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};QI=Fc;ue.NumericString=QI;Fc.NAME="NumericString";var ZI,$c=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};ZI=$c;ue.PrintableString=ZI;$c.NAME="PrintableString";var JI,jc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};JI=jc;ue.TeletexString=JI;jc.NAME="TeletexString";var eC,Kc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};eC=Kc;ue.VideotexString=eC;Kc.NAME="VideotexString";var tC,Vc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};tC=Vc;ue.IA5String=tC;Vc.NAME="IA5String";var rC,Hc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};rC=Hc;ue.GraphicString=rC;Hc.NAME="GraphicString";var nC,oa=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};nC=oa;ue.VisibleString=nC;oa.NAME="VisibleString";var oC,qc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};oC=qc;ue.GeneralString=oC;qc.NAME="GeneralString";var iC,Wc=class extends tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};iC=Wc;ue.CharacterString=iC;Wc.NAME="CharacterString";var sC,ia=class extends oa{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,Me.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=fn(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=fn(this.month,2),t[2]=fn(this.day,2),t[3]=fn(this.hour,2),t[4]=fn(this.minute,2),t[5]=fn(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};sC=ia;ue.UTCTime=sC;ia.NAME="UTCTime";var aC,zc=class extends ia{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){let e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);return new Date(e)}fromString(e){let t=!1,n="",o="",i=0,s,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,d=n.indexOf("+"),h="";if(d===-1&&(d=n.indexOf("-"),u=-1),d!==-1){if(h=n.substring(d+1),n=n.substring(0,d),h.length!==2&&h.length!==4)throw new Error("Wrong input string for conversion");let m=parseInt(h.substring(0,2),10);if(isNaN(m.valueOf()))throw new Error("Wrong input string for conversion");if(a=u*m,h.length===4){if(m=parseInt(h.substring(2,4),10),isNaN(m.valueOf()))throw new Error("Wrong input string for conversion");c=u*m}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");i=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(s=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*i;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*i;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*i;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let f=s.exec(o);if(f===null)throw new Error("Wrong input string for conversion");for(let u=1;u<f.length;u++)switch(u){case 1:this.year=parseInt(f[u],10);break;case 2:this.month=parseInt(f[u],10);break;case 3:this.day=parseInt(f[u],10);break;case 4:this.hour=parseInt(f[u],10)+a;break;case 5:this.minute=parseInt(f[u],10)+c;break;case 6:this.second=parseInt(f[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(fn(this.year,4)),t.push(fn(this.month,2)),t.push(fn(this.day,2)),t.push(fn(this.hour,2)),t.push(fn(this.minute,2)),t.push(fn(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(fn(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};aC=zc;ue.GeneralizedTime=aC;zc.NAME="GeneralizedTime";var cC,Zh=class extends io{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};cC=Zh;ue.DATE=cC;Zh.NAME="DATE";var lC,Jh=class extends io{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};lC=Jh;ue.TimeOfDay=lC;Jh.NAME="TimeOfDay";var uC,ep=class extends io{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};uC=ep;ue.DateTime=uC;ep.NAME="DateTime";var fC,tp=class extends io{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};fC=tp;ue.Duration=fC;tp.NAME="Duration";var dC,rp=class extends io{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};dC=rp;ue.TIME=dC;rp.NAME="TIME";var li=class{constructor({name:e=dn,optional:t=!1}={}){this.name=e,this.optional=t}},Qu=class extends li{constructor({value:e=[],...t}={}){super(t),this.value=e}},Gc=class extends li{constructor({value:e=new li,local:t=!1,...n}={}){super(n),this.value=e,this.local=t}},b7=class{get data(){return this.dataView.slice().buffer}set data(e){this.dataView=Me.BufferSourceConverter.toUint8Array(e)}constructor({data:e=oy}={}){this.dataView=Me.BufferSourceConverter.toUint8Array(e)}fromBER(e,t,n){let o=t+n;return this.dataView=Me.BufferSourceConverter.toUint8Array(e).subarray(t,o),o}toBER(e){return this.dataView.slice().buffer}};function is(r,e,t){if(t instanceof Qu){for(let i of t.value)if(is(r,e,i).verified)return{verified:!0,result:r};{let i={verified:!1,result:{error:"Wrong values for Choice type"}};return t.hasOwnProperty(w7)&&(i.name=t.name),i}}if(t instanceof li)return t.hasOwnProperty(w7)&&(r[t.name]=e),{verified:!0,result:r};if(!(r instanceof Object))return{verified:!1,result:{error:"Wrong root object"}};if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 data"}};if(!(t instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(zK in t))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(QK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(ZK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let n=t.idBlock.toBER(!1);if(n.byteLength===0)return{verified:!1,result:{error:"Error encoding idBlock for ASN.1 schema"}};if(t.idBlock.fromBER(n,0,n.byteLength)===-1)return{verified:!1,result:{error:"Error decoding idBlock for ASN.1 schema"}};if(t.idBlock.hasOwnProperty(GK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.tagClass!==e.idBlock.tagClass)return{verified:!1,result:r};if(t.idBlock.hasOwnProperty(XK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.tagNumber!==e.idBlock.tagNumber)return{verified:!1,result:r};if(t.idBlock.hasOwnProperty(YK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.isConstructed!==e.idBlock.isConstructed)return{verified:!1,result:r};if(!(WK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.isHexOnly!==e.idBlock.isHexOnly)return{verified:!1,result:r};if(t.idBlock.isHexOnly){if(!(OI in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let i=t.idBlock.valueHexView,s=e.idBlock.valueHexView;if(i.length!==s.length)return{verified:!1,result:r};for(let a=0;a<i.length;a++)if(i[a]!==s[1])return{verified:!1,result:r}}if(t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&(r[t.name]=e)),t instanceof ue.Constructed){let i=0,s={verified:!1,result:{error:"Unknown error"}},a=t.valueBlock.value.length;if(a>0&&t.valueBlock.value[0]instanceof Gc&&(a=e.valueBlock.value.length),a===0)return{verified:!0,result:r};if(e.valueBlock.value.length===0&&t.valueBlock.value.length!==0){let c=!0;for(let l=0;l<t.valueBlock.value.length;l++)c=c&&(t.valueBlock.value[l].optional||!1);return c?{verified:!0,result:r}:(t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&delete r[t.name]),r.error="Inconsistent object length",{verified:!1,result:r})}for(let c=0;c<a;c++)if(c-i>=e.valueBlock.value.length){if(t.valueBlock.value[c].optional===!1){let l={verified:!1,result:r};return r.error="Inconsistent length between ASN.1 data and schema",t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&(delete r[t.name],l.name=t.name)),l}}else if(t.valueBlock.value[0]instanceof Gc){if(s=is(r,e.valueBlock.value[c],t.valueBlock.value[0].value),s.verified===!1)if(t.valueBlock.value[0].optional)i++;else return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&delete r[t.name]),s;if(w7 in t.valueBlock.value[0]&&t.valueBlock.value[0].name.length>0){let l={};JK in t.valueBlock.value[0]&&t.valueBlock.value[0].local?l=e:l=r,typeof l[t.valueBlock.value[0].name]>"u"&&(l[t.valueBlock.value[0].name]=[]),l[t.valueBlock.value[0].name].push(e.valueBlock.value[c])}}else if(s=is(r,e.valueBlock.value[c-i],t.valueBlock.value[c]),s.verified===!1)if(t.valueBlock.value[c].optional)i++;else return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&delete r[t.name]),s;if(s.verified===!1){let c={verified:!1,result:r};return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&(delete r[t.name],c.name=t.name)),c}return{verified:!0,result:r}}if(t.primitiveSchema&&OI in e.valueBlock){let i=Zu(e.valueBlock.valueHexView);if(i.offset===-1){let s={verified:!1,result:i.result};return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,dn),t.name&&(delete r[t.name],s.name=t.name)),s}return is(r,i.result,t.primitiveSchema)}return{verified:!0,result:r}}function oV(r,e){if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema type"}};let t=Zu(Me.BufferSourceConverter.toUint8Array(r));return t.offset===-1?{verified:!1,result:t.result}:is(t.result,t.result,e)}async function iy(r,e){let n=await Gu.create().encrypt(r,e);return qt.encode(n)}async function E7(r,e,t){if(r.type==="RSA")return cV(r,e,t);if(r.type==="Ed25519")return iV(r,e,t);if(r.type==="secp256k1")return sV(r,e,t);if(r.type==="ECDSA")return aV(r,e,t);throw new bo}async function iV(r,e,t="libp2p-key"){if(t==="libp2p-key")return iy(fc(r),e);throw new P(`export format '${t}' is not supported`)}async function sV(r,e,t="libp2p-key"){if(t==="libp2p-key")return iy(fc(r),e);throw new P("Export format is not supported")}async function aV(r,e,t="libp2p-key"){if(t==="libp2p-key")return iy(fc(r),e);throw new P(`export format '${t}' is not supported`)}async function cV(r,e,t="pkcs-8"){if(t==="pkcs-8")return lV(r,e);if(t==="libp2p-key")return iy(fc(r),e);throw new P("Export format is not supported")}async function lV(r,e){let t=Wt.get(),o=new vt({value:[new Un({value:0}),new vt({value:[new Fn({value:"1.2.840.113549.1.1.1"}),new hn]}),new Vr({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=Yr(16),a=await jm(Bs,e,s,{c:1e4,dkLen:32}),c=Yr(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),f=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),u=new vt({value:[new Vr({valueHex:s}),new Un({value:1e4}),new Un({value:32}),new vt({value:[new Fn({value:"1.2.840.113549.2.11"}),new hn]})]}),d=new vt({value:[new Fn({value:"1.2.840.113549.1.5.13"}),new vt({value:[new vt({value:[new Fn({value:"1.2.840.113549.1.5.12"}),u]}),new vt({value:[new Fn({value:"2.16.840.1.101.3.4.1.42"}),new Vr({valueHex:c})]})]})]}),m=new vt({value:[d,new Vr({valueHex:f})]}).toBER(),w=new Uint8Array(m,0,m.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...j(w,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
51
+ `)}async function S7(r,e){try{let t=await uV(r,e);return gS(t)}catch{}if(!r.includes("BEGIN"))throw new P("Encrypted key was not a libp2p-key or a PEM file");return fV(r,e)}async function uV(r,e){let t=qt.decode(r);return Gu.create().decrypt(t,e)}async function fV(r,e){let t=Wt.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=B(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=$n(i),{iv:a,salt:c,iterations:l,keySize:f,cipherText:u}=dV(s),d=await jm(Bs,e,c,{c:l,dkLen:f}),h=await t.subtle.importKey("raw",d,"AES-CBC",!1,["decrypt"]),m=np(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,u)),{result:w}=$n(m);n=mC(w)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=B(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=$n(i);n=mC(s)}else throw new P("Could not parse private key from PEM data");let o=yS(n);if(o.type!=="RSA")throw new P("Could not parse RSA private key from PEM data");return o}function dV(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new P("Only pkcs5PBES2 encrypted private keys are supported");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new P("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=np(i.valueBlock.value[0].getValue()),a=1e4,c=32;if(i.valueBlock.value.length===3)a=Number(i.valueBlock.value[1].toBigInt()),c=Number(i.valueBlock.value[2].toBigInt());else if(i.valueBlock.value.length===2)throw new P("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key");let l=e.valueBlock.value[1].valueBlock.value[1],f=l.valueBlock.value[0].toString();if(f!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(f!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(f!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(f!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(f!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new P("Only AES-CBC encryption schemes are supported")}}}}let u=np(l.valueBlock.value[1].getValue());return{cipherText:np(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:u}}function mC(r){return np(r.valueBlock.value[2].getValue())}function np(r){return new Uint8Array(r,0,r.byteLength)}var hV="/pkcs8/",_7="/info/",op=new WeakMap,Xc={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3};function Ju(r){return r==null||typeof r!="string"?!1:r===(0,gC.default)(r.trim())&&r.length>0}async function Er(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function Yc(r){return new ht(hV+r)}function ef(r){return new ht(_7+r)}async function pV(r){let e=fc(r),t=await St.digest(e);return ft.encode(t.bytes).substring(1)}var sy=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init={...t,dek:{...m7,...t.dek}},this.self=t.selfKey??"self",this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Xc.minKeyLength)throw new Error(`dek.keyLength must be least ${Xc.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Xc.minSaltLength)throw new Error(`dek.saltLength must be least ${Xc.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Xc.minIterationCount)throw new Error(`dek.iterationCount must be least ${Xc.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Vd(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";op.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[qe]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},this.options),t=Math.ceil(Xc.minSaltLength/3)*3;return e.dek!=null&&(e.dek.salt=j(Yr(t),"base64")),e}static get options(){return{dek:{...m7}}}async findKeyByName(e){if(!Ju(e))throw await Er(),new P(`Invalid key name '${e}'`);let t=ef(e);try{let n=await this.components.datastore.get(t);return JSON.parse(j(n))}catch(n){throw await Er(),this.log.error("could not read key from datastore - %e",n),new Xe(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:_7};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(j(n.value));if(o.id===e)return o}throw new P(`Key with id '${e}' does not exist.`)}catch(t){throw await Er(),t}}async importKey(e,t){if(!Ju(e))throw await Er(),new P(`Invalid key name '${e}'`);if(t==null)throw await Er(),new P("Key is required");let n=Yc(e);if(await this.components.datastore.has(n))throw await Er(),new P(`Key '${e}' already exists`);let i,s;try{i=await pV(t);let l=op.get(this);if(l==null)throw new P("dek missing");let f=l.dek;s=await E7(t,f,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await Er(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,B(s)),c.put(ef(e),B(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Ju(e))throw await Er(),new P(`Invalid key name '${e}'`);let t=Yc(e);try{let n=await this.components.datastore.get(t),o=j(n),i=op.get(this);if(i==null)throw new P("dek missing");let s=i.dek;return await S7(o,s)}catch(n){throw await Er(),n}}async removeKey(e){if(!Ju(e)||e===this.self)throw await Er(),new P(`Invalid key name '${e}'`);let t=Yc(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(ef(e)),await o.commit(),n}async listKeys(){let e={prefix:_7},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(j(n.value)));return t}async renameKey(e,t){if(!Ju(e)||e===this.self)throw await Er(),new P(`Invalid old key name '${e}'`);if(!Ju(t)||t===this.self)throw await Er(),new P(`Invalid new key name '${t}'`);let n=Yc(e),o=Yc(t),i=ef(e),s=ef(t);if(await this.components.datastore.has(o))throw await Er(),new P(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),f=JSON.parse(j(l));f.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(s,B(JSON.stringify(f))),u.delete(n),u.delete(i),await u.commit(),f}catch(c){throw await Er(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await Er(),new P(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await Er(),new P(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await Er(),new P(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=op.get(this);if(n==null)throw new P("dek missing");let o=n.dek;this.init.pass=t;let i=t!=null&&this.init.dek?.salt!=null?Vd(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";op.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(Yc(a.name)),l=j(c),f=await S7(l,o),u=i.toString(),d=await E7(f,u,f.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),m={name:a.name,id:a.id};h.put(Yc(a.name),B(d)),h.put(ef(a.name),B(JSON.stringify(m))),await h.commit()}this.log("keychain reconstructed")}};function ay(r={}){return e=>new sy(e,r)}async function A7(r,e={}){let t=e.selfKey??"self",n=ay(e)({datastore:r,logger:Rs()}),o;return await r.has(new ht(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await fu(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var tf=!!globalThis.process?.env?.DUMP_SESSION_KEYS,T7=16;function mV(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function cy(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function ly(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function dr(r,e,t=""){let n=mV(r),o=r?.length,i=e!==void 0;if(!n||i&&o!==e){let s=t&&`"${t}" `,a=i?` of length ${e}`:"",c=n?`length=${o}`:`type=${typeof r}`;throw new Error(s+"expected Uint8Array"+a+", got "+c)}return r}function I7(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function yC(r,e){dr(r,void 0,"output");let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function ls(r){return new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}function us(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function gV(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}var yV=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function wC(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function bC(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var C7=(r,e)=>{function t(n,...o){if(dr(n,void 0,"key"),!yV)throw new Error("Non little-endian hardware is not yet supported");if(r.nonceLength!==void 0){let f=o[0];dr(f,r.varSizeNonce?void 0:r.nonceLength,"nonce")}let i=r.tagLength;i&&o[1]!==void 0&&dr(o[1],void 0,"AAD");let s=e(n,...o),a=(f,u)=>{if(u!==void 0){if(f!==2)throw new Error("cipher output not supported");dr(u,void 0,"output")}},c=!1;return{encrypt(f,u){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,dr(f),a(s.encrypt.length,u),s.encrypt(f,u)},decrypt(f,u){if(dr(f),i&&f.length<i)throw new Error('"ciphertext" expected length bigger than tagLength='+i);return a(s.decrypt.length,u),s.decrypt(f,u)}}}return Object.assign(t,r),t};function P7(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error('"output" expected Uint8Array of length '+r+", got: "+e.length);if(t&&!wV(e))throw new Error("invalid output, must be aligned");return e}function vC(r,e,t){cy(t);let n=new Uint8Array(16),o=gV(n);return o.setBigUint64(0,BigInt(e),t),o.setBigUint64(8,BigInt(r),t),n}function wV(r){return r.byteOffset%4===0}function rf(r){return Uint8Array.from(r)}var EC=r=>Uint8Array.from(r.split(""),e=>e.charCodeAt(0)),bV=EC("expand 16-byte k"),vV=EC("expand 32-byte k"),xV=ls(bV),EV=ls(vV);function pe(r,e){return r<<e|r>>>32-e}function k7(r){return r.byteOffset%4===0}var uy=64,SV=16,SC=2**32-1,xC=Uint32Array.of();function _V(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(uy),f=ls(l),u=k7(o)&&k7(i),d=u?ls(o):xC,h=u?ls(i):xC;for(let m=0;m<c;s++){if(r(e,t,n,f,s,a),s>=SC)throw new Error("arx: counter overflow");let w=Math.min(uy,c-m);if(u&&w===uy){let y=m/4;if(m%4!==0)throw new Error("arx: invalid block position");for(let b=0,N;b<SV;b++)N=y+b,h[N]=d[N]^f[b];m+=uy;continue}for(let y=0,b;y<w;y++)b=m+y,i[b]=o[b]^l[y];m+=w}}function O7(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=wC({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return ly(o),ly(s),cy(i),cy(t),(a,c,l,f,u=0)=>{dr(a,void 0,"key"),dr(c,void 0,"nonce"),dr(l,void 0,"data");let d=l.length;if(f===void 0&&(f=new Uint8Array(d)),dr(f,void 0,"output"),ly(u),u<0||u>=SC)throw new Error("arx: counter overflow");if(f.length<d)throw new Error(`arx: output (${f.length}) is shorter than data (${d})`);let h=[],m=a.length,w,y;if(m===32)h.push(w=rf(a)),y=EV;else if(m===16&&t)w=new Uint8Array(32),w.set(a),w.set(a,16),y=xV,h.push(w);else throw dr(a,32,"arx key"),new Error("invalid key size");k7(c)||h.push(c=rf(c));let b=ls(w);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(y,b,ls(c.subarray(0,16)),b),c=c.subarray(16)}let N=16-o;if(N!==c.length)throw new Error(`arx: nonce must be ${N} or 16 bytes`);if(N!==12){let V=new Uint8Array(12);V.set(c,i?0:12-c.length),c=V,h.push(c)}let O=ls(c);return _V(r,y,b,O,l,f,u,s),us(...h),f}}function Sr(r,e){return r[e++]&255|(r[e++]&255)<<8}var R7=class{blockLen=16;outputLen=16;buffer=new Uint8Array(16);r=new Uint16Array(10);h=new Uint16Array(10);pad=new Uint16Array(8);pos=0;finished=!1;constructor(e){e=rf(dr(e,32,"key"));let t=Sr(e,0),n=Sr(e,2),o=Sr(e,4),i=Sr(e,6),s=Sr(e,8),a=Sr(e,10),c=Sr(e,12),l=Sr(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|i<<9)&8191,this.r[4]=(i>>>4|s<<12)&255,this.r[5]=s>>>1&8190,this.r[6]=(s>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let f=0;f<8;f++)this.pad[f]=Sr(e,16+2*f)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],f=s[3],u=s[4],d=s[5],h=s[6],m=s[7],w=s[8],y=s[9],b=Sr(e,t+0),N=Sr(e,t+2),O=Sr(e,t+4),V=Sr(e,t+6),Q=Sr(e,t+8),Z=Sr(e,t+10),se=Sr(e,t+12),C=Sr(e,t+14),T=i[0]+(b&8191),K=i[1]+((b>>>13|N<<3)&8191),z=i[2]+((N>>>10|O<<6)&8191),U=i[3]+((O>>>7|V<<9)&8191),I=i[4]+((V>>>4|Q<<12)&8191),S=i[5]+(Q>>>1&8191),x=i[6]+((Q>>>14|Z<<2)&8191),D=i[7]+((Z>>>11|se<<5)&8191),q=i[8]+((se>>>8|C<<8)&8191),H=i[9]+(C>>>5|o),M=0,G=M+T*a+K*(5*y)+z*(5*w)+U*(5*m)+I*(5*h);M=G>>>13,G&=8191,G+=S*(5*d)+x*(5*u)+D*(5*f)+q*(5*l)+H*(5*c),M+=G>>>13,G&=8191;let te=M+T*c+K*a+z*(5*y)+U*(5*w)+I*(5*m);M=te>>>13,te&=8191,te+=S*(5*h)+x*(5*d)+D*(5*u)+q*(5*f)+H*(5*l),M+=te>>>13,te&=8191;let F=M+T*l+K*c+z*a+U*(5*y)+I*(5*w);M=F>>>13,F&=8191,F+=S*(5*m)+x*(5*h)+D*(5*d)+q*(5*u)+H*(5*f),M+=F>>>13,F&=8191;let Le=M+T*f+K*l+z*c+U*a+I*(5*y);M=Le>>>13,Le&=8191,Le+=S*(5*w)+x*(5*m)+D*(5*h)+q*(5*d)+H*(5*u),M+=Le>>>13,Le&=8191;let $e=M+T*u+K*f+z*l+U*c+I*a;M=$e>>>13,$e&=8191,$e+=S*(5*y)+x*(5*w)+D*(5*m)+q*(5*h)+H*(5*d),M+=$e>>>13,$e&=8191;let me=M+T*d+K*u+z*f+U*l+I*c;M=me>>>13,me&=8191,me+=S*a+x*(5*y)+D*(5*w)+q*(5*m)+H*(5*h),M+=me>>>13,me&=8191;let He=M+T*h+K*d+z*u+U*f+I*l;M=He>>>13,He&=8191,He+=S*c+x*a+D*(5*y)+q*(5*w)+H*(5*m),M+=He>>>13,He&=8191;let ot=M+T*m+K*h+z*d+U*u+I*f;M=ot>>>13,ot&=8191,ot+=S*l+x*c+D*a+q*(5*y)+H*(5*w),M+=ot>>>13,ot&=8191;let Ct=M+T*w+K*m+z*h+U*d+I*u;M=Ct>>>13,Ct&=8191,Ct+=S*f+x*l+D*c+q*a+H*(5*y),M+=Ct>>>13,Ct&=8191;let ze=M+T*y+K*w+z*m+U*h+I*d;M=ze>>>13,ze&=8191,ze+=S*u+x*f+D*l+q*c+H*a,M+=ze>>>13,ze&=8191,M=(M<<2)+M|0,M=M+G|0,G=M&8191,M=M>>>13,te+=M,i[0]=G,i[1]=te,i[2]=F,i[3]=Le,i[4]=$e,i[5]=me,i[6]=He,i[7]=ot,i[8]=Ct,i[9]=ze}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let i=(o^1)-1;for(let a=0;a<10;a++)n[a]&=i;i=~i;for(let a=0;a<10;a++)e[a]=e[a]&i|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let s=e[0]+t[0];e[0]=s&65535;for(let a=1;a<8;a++)s=(e[a]+t[a]|0)+(s>>>16)|0,e[a]=s&65535;us(n)}update(e){I7(this),dr(e),e=rf(e);let{buffer:t,blockLen:n}=this,o=e.length;for(let i=0;i<o;){let s=Math.min(n-this.pos,o-i);if(s===n){for(;n<=o-i;i+=n)this.process(e,i);continue}t.set(e.subarray(i,i+s),this.pos),this.pos+=s,i+=s,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){us(this.h,this.r,this.buffer,this.pad)}digestInto(e){I7(this),yC(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let i=0;for(let s=0;s<8;s++)e[i++]=n[s]>>>0,e[i++]=n[s]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function AV(r){let e=(n,o)=>r(o).update(n).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var _C=AV(r=>new R7(r));function IC(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],f=e[0],u=e[1],d=e[2],h=e[3],m=e[4],w=e[5],y=e[6],b=e[7],N=o,O=t[0],V=t[1],Q=t[2],Z=s,se=a,C=c,T=l,K=f,z=u,U=d,I=h,S=m,x=w,D=y,q=b,H=N,M=O,G=V,te=Q;for(let Le=0;Le<i;Le+=2)Z=Z+K|0,H=pe(H^Z,16),S=S+H|0,K=pe(K^S,12),Z=Z+K|0,H=pe(H^Z,8),S=S+H|0,K=pe(K^S,7),se=se+z|0,M=pe(M^se,16),x=x+M|0,z=pe(z^x,12),se=se+z|0,M=pe(M^se,8),x=x+M|0,z=pe(z^x,7),C=C+U|0,G=pe(G^C,16),D=D+G|0,U=pe(U^D,12),C=C+U|0,G=pe(G^C,8),D=D+G|0,U=pe(U^D,7),T=T+I|0,te=pe(te^T,16),q=q+te|0,I=pe(I^q,12),T=T+I|0,te=pe(te^T,8),q=q+te|0,I=pe(I^q,7),Z=Z+z|0,te=pe(te^Z,16),D=D+te|0,z=pe(z^D,12),Z=Z+z|0,te=pe(te^Z,8),D=D+te|0,z=pe(z^D,7),se=se+U|0,H=pe(H^se,16),q=q+H|0,U=pe(U^q,12),se=se+U|0,H=pe(H^se,8),q=q+H|0,U=pe(U^q,7),C=C+I|0,M=pe(M^C,16),S=S+M|0,I=pe(I^S,12),C=C+I|0,M=pe(M^C,8),S=S+M|0,I=pe(I^S,7),T=T+K|0,G=pe(G^T,16),x=x+G|0,K=pe(K^x,12),T=T+K|0,G=pe(G^T,8),x=x+G|0,K=pe(K^x,7);let F=0;n[F++]=s+Z|0,n[F++]=a+se|0,n[F++]=c+C|0,n[F++]=l+T|0,n[F++]=f+K|0,n[F++]=u+z|0,n[F++]=d+U|0,n[F++]=h+I|0,n[F++]=m+S|0,n[F++]=w+x|0,n[F++]=y+D|0,n[F++]=b+q|0,n[F++]=N+H|0,n[F++]=O+M|0,n[F++]=V+G|0,n[F++]=Q+te|0}function TV(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],f=e[2],u=e[3],d=e[4],h=e[5],m=e[6],w=e[7],y=t[0],b=t[1],N=t[2],O=t[3];for(let Q=0;Q<20;Q+=2)o=o+c|0,y=pe(y^o,16),d=d+y|0,c=pe(c^d,12),o=o+c|0,y=pe(y^o,8),d=d+y|0,c=pe(c^d,7),i=i+l|0,b=pe(b^i,16),h=h+b|0,l=pe(l^h,12),i=i+l|0,b=pe(b^i,8),h=h+b|0,l=pe(l^h,7),s=s+f|0,N=pe(N^s,16),m=m+N|0,f=pe(f^m,12),s=s+f|0,N=pe(N^s,8),m=m+N|0,f=pe(f^m,7),a=a+u|0,O=pe(O^a,16),w=w+O|0,u=pe(u^w,12),a=a+u|0,O=pe(O^a,8),w=w+O|0,u=pe(u^w,7),o=o+l|0,O=pe(O^o,16),m=m+O|0,l=pe(l^m,12),o=o+l|0,O=pe(O^o,8),m=m+O|0,l=pe(l^m,7),i=i+f|0,y=pe(y^i,16),w=w+y|0,f=pe(f^w,12),i=i+f|0,y=pe(y^i,8),w=w+y|0,f=pe(f^w,7),s=s+u|0,b=pe(b^s,16),d=d+b|0,u=pe(u^d,12),s=s+u|0,b=pe(b^s,8),d=d+b|0,u=pe(u^d,7),a=a+c|0,N=pe(N^a,16),h=h+N|0,c=pe(c^h,12),a=a+c|0,N=pe(N^a,8),h=h+N|0,c=pe(c^h,7);let V=0;n[V++]=o,n[V++]=i,n[V++]=s,n[V++]=a,n[V++]=y,n[V++]=b,n[V++]=N,n[V++]=O}var IV=O7(IC,{counterRight:!1,counterLength:4,allowShortKeys:!1}),CV=O7(IC,{counterRight:!1,counterLength:8,extendNonceFn:TV,allowShortKeys:!1});var PV=new Uint8Array(16),AC=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(PV.subarray(t))},kV=new Uint8Array(32);function TC(r,e,t,n,o){o!==void 0&&dr(o,void 0,"AAD");let i=r(e,t,kV),s=vC(n.length,o?o.length:0,!0),a=_C.create(i);o&&AC(a,o),AC(a,n),a.update(s);let c=a.digest();return us(i,s),c}var CC=r=>(e,t,n)=>({encrypt(i,s){let a=i.length;s=P7(a+16,s,!1),s.set(i);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=TC(r,e,t,c,n);return s.set(l,a),us(l),s},decrypt(i,s){s=P7(i.length-16,s,!1);let a=i.subarray(0,-16),c=i.subarray(-16),l=TC(r,e,t,a,n);if(!bC(c,l))throw new Error("invalid tag");return s.set(i.subarray(0,-16)),r(e,t,s,s,1),us(l),s}}),D7=C7({blockSize:64,nonceLength:12,tagLength:16},CC(IV)),cge=C7({blockSize:64,nonceLength:24,tagLength:16},CC(CV));function kC(r,e,t){return Di(r),t===void 0&&(t=new Uint8Array(r.outputLen)),$s(r,t,e)}var N7=Uint8Array.of(0),PC=Uint8Array.of();function OC(r,e,t,n=32){Di(r),Lr(n,"length");let o=r.outputLen;if(n>255*o)throw new Error("Length must be <= 255*HashLen");let i=Math.ceil(n/o);t===void 0?t=PC:Oe(t,void 0,"info");let s=new Uint8Array(i*o),a=$s.create(r,e),c=a._cloneInto(),l=new Uint8Array(a.outputLen);for(let f=0;f<i;f++)N7[0]=f+1,c.update(f===0?PC:l).update(t).update(N7).digestInto(l),s.set(l,o*f),a._cloneInto(c);return a.destroy(),c.destroy(),Br(l,N7),s.slice(0,n)}var L7={hashSHA256(r){return Yn(r.subarray())},getHKDF(r,e){let t=kC(Yn,e,r),o=OC(Yn,t,void 0,96),i=o.subarray(0,32),s=o.subarray(32,64),a=o.subarray(64,96);return[i,s,a]},generateX25519KeyPair(){let r=Rd.utils.randomSecretKey();return{publicKey:Rd.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Rd.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Rd.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return D7(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return D7(n,e,t).decrypt(r.subarray(),o)}};var RC=L7;function DC(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var nf=r=>{let e=Rt(2);return e[0]=r>>8,e[1]=r,e};nf.bytes=2;var of=r=>{if(r.length<2)throw RangeError("Could not decode int16BE");if(r instanceof Uint8Array){let e=0;return e+=r[0]<<8,e+=r[1],e}return r.getUint16(0)};of.bytes=2;function NC(r){return{xxHandshakeSuccesses:r.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:r.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:r.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:r.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:r.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function B7(r,e){!e.enabled||!tf||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${j(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${j(r.privateKey,"hex")}`)):e("Missing local static keys."))}function M7(r,e){!e.enabled||!tf||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${j(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${j(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function LC(r,e){!e.enabled||!tf||e(r?`REMOTE_STATIC_PUBLIC_KEY ${j(r.subarray(),"hex")}`:"Missing remote static public key.")}function U7(r,e){!e.enabled||!tf||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${j(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function F7(r,e,t){!t.enabled||!tf||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&j(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&j(e.k,"hex")}`))}function Uo(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Rt(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var sf=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var OV=0,RV=4294967295,DV="Cipherstate has reached maximum n, a new handshake must be performed",fy=class{n;bytes;view;constructor(e=OV){this.n=e,this.bytes=ke(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>RV)throw new Error(DV)}};var Qc=ke(0),af=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new fy(n)}hasKey(){return!!this.k}encryptWithAd(e,t){if(!this.hasKey())return t;this.n.assertValue();let n=this.crypto.encrypt(t,this.n.getBytes(),e,this.k);return this.n.increment(),n}decryptWithAd(e,t,n){if(!this.hasKey())return t;this.n.assertValue();let o=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),o}},$7=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=B(t,"utf-8");this.h=NV(e,n),this.ck=this.h,this.cs=new af(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new af(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new de(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,Qc);return[new af(this.crypto,e),new af(this.crypto,t)]}},j7=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:i,s,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new $7(t,n),this.ss.mixHash(o),this.initiator=i,this.s=s,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},ip=class extends j7{writeMessageA(e){return new de(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new de(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new de(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new sf(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new sf(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new sf(`handshake stage 2 validation fail: ${t.message}`)}}};function NV(r,e){if(e.length<=32){let t=ke(32);return t.set(e),t}else return r.hash(e)}var dy;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let i of t.webtransportCerthashes)n.uint32(10),n.bytes(i);if(t.streamMuxers!=null)for(let i of t.streamMuxers)n.uint32(18),n.string(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={webtransportCerthashes:[],streamMuxers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&i.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new dt('Decode error - map field "webtransportCerthashes" had too many elements');i.webtransportCerthashes.push(t.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&i.streamMuxers.length===o.limits.streamMuxers)throw new dt('Decode error - map field "streamMuxers" had too many elements');i.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(dy||(dy={}));var sp;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),dy.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={identityKey:ke(0),identitySig:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.identityKey=t.bytes();break}case 2:{i.identitySig=t.bytes();break}case 4:{i.extensions=dy.codec().decode(t,t.uint32(),{limits:o.limits?.extensions});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(sp||(sp={}));async function V7(r,e,t){let n=await r.sign(MC(e));return sp.encode({identityKey:sr(r.publicKey),identitySig:n,extensions:t})}async function H7(r,e,t){try{let n=sp.decode(r),o=Vt(n.identityKey);if(t?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let i=MC(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new tm(n.message)}}function MC(r){let e=B("noise-libp2p-static-key:");return r instanceof Uint8Array?gt([e,r],e.length+r.length):(r.prepend(e),r)}var K7=class extends Vs{stream;handshake;metrics;decoder;constructor(e,t,n){super({log:e.log,inactivityTimeout:e.inactivityTimeout,maxReadBufferLength:e.maxReadBufferLength,direction:e.direction}),this.stream=e,this.handshake=t,this.metrics=n,this.decoder=new u0({lengthDecoder:of,maxBufferSize:16*1024*1024,encodingLength:()=>2});let o=c=>{try{for(let l of this.decoder.decode(c.data))this.onData(this.decrypt(l))}catch(l){this.abort(l)}};this.stream.addEventListener("message",o);let i=c=>{c.error!=null?c.local===!0?this.abort(c.error):this.onRemoteReset():this.onTransportClosed()};this.stream.addEventListener("close",i);let s=()=>{this.safeDispatchEvent("drain")};this.stream.addEventListener("drain",s);let a=()=>{this.onRemoteCloseWrite()};this.stream.addEventListener("remoteCloseWrite",a)}encrypt(e){let t=new de;for(let n=0;n<e.byteLength;n+=65519){let o=n+65519;o>e.byteLength&&(o=e.byteLength);let i;e instanceof Uint8Array?i=this.handshake.encrypt(e.subarray(n,o)):i=this.handshake.encrypt(e.sublist(n,o)),this.metrics?.encryptedPackets.increment(),t.append(nf(i.byteLength)),t.append(i)}return t}decrypt(e){let t=new de;for(let n=0;n<e.byteLength;n+=65535){let o=n+65535;if(o>e.byteLength&&(o=e.byteLength),o-T7<n)throw new Error("Invalid chunk");let i;e instanceof Uint8Array?i=e.subarray(n,o):i=e.sublist(n,o);let s=e.subarray(n,o-T7);try{let a=this.handshake.decrypt(i,s);this.metrics?.decryptedPackets.increment(),t.append(a)}catch(a){throw this.metrics?.decryptErrors.increment(),a}}return t}close(e){return this.stream.close(e)}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}sendReset(e){this.stream.abort(e)}sendData(e){return{sentBytes:e.byteLength,canSendMore:this.stream.send(this.encrypt(e))}}};function q7(r,e,t){return new K7(r,e,t)}async function UC(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,f=await V7(i,a.publicKey,l),u=new ip({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});B7(u.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(u.writeMessageA(Qc),e),t.trace("Stage 0 - Initiator finished sending first message."),M7(u.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let d=u.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),U7(u.re,t),LC(u.rs,t),t.trace("Initiator going to check remote's signature...");let h=await H7(d,u.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(u.writeMessageC(f),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[m,w]=u.ss.split();return F7(m,w,t),{payload:h,encrypt:y=>m.encryptWithAd(Qc,y),decrypt:(y,b)=>w.decryptWithAd(Qc,y,b)}}async function FC(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,f=await V7(i,a.publicKey,l),u=new ip({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});B7(u.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),u.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),U7(u.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(u.writeMessageB(f),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),M7(u.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let d=u.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await H7(d,u.rs,c),[m,w]=u.ss.split();return F7(m,w,t),{payload:h,encrypt:y=>w.encryptWithAd(Qc,y),decrypt:(y,b)=>m.decryptWithAd(Qc,y,b)}}var hy=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;log;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e,this.log=e.logger.forComponent("libp2p:noise");let c=i??RC;this.crypto=DC(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?NC(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??ke(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[qe]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Gs(e,{lengthEncoder:nf,lengthDecoder:of,maxDataLength:65535}),i=await this.performHandshakeInitiator(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),s=Vt(i.payload.identityKey);return{connection:q7(o.unwrap(),i,this.metrics),remoteExtensions:i.payload.extensions,remotePeer:ii(s),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null||e.length===0)return;let t=this.components.upgrader.getStreamMuxers();if(t!=null)for(let n of e){let o=t.get(n);if(o!=null)return o}if(e.length)throw new rm("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=e.log?.newScope("noise")??this.log,o=Gs(e,{lengthEncoder:nf,lengthDecoder:of,maxDataLength:65535}),i=await this.performHandshakeResponder(o,this.components.privateKey,n,t?.remotePeer?.publicKey,t),s=Vt(i.payload.identityKey);return{connection:q7(o.unwrap(),i,this.metrics),remoteExtensions:i.payload.extensions,remotePeer:ii(s),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o,i){let s,a=i?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{s=await UC({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return s}async performHandshakeResponder(e,t,n,o,i){let s,a=i?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{s=await FC({connection:e,privateKey:t,remoteIdentityKey:o,log:n.newScope("xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:a,webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(c){throw this.metrics?.xxHandshakeErrors.increment(),c}return s}};function py(r={}){return e=>new hy(e,r)}var Dt;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Dt||(Dt={}));var Ze;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(Ze||(Ze={}));var Cye=Object.values(Ze).filter(r=>typeof r!="string"),$C=0,tr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(tr||(tr={}));var di=12;var fs=class extends Error{static name="ProtocolError";reason;constructor(e,t){super(e),this.name="ProtocolError",this.reason=t}};function jC(r){return r?.reason!==null}var jn=class extends fs{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e,tr.ProtocolError),this.name="InvalidFrameError"}},cf=class extends fs{static name="UnRequestedPingError";constructor(e="Un-requested ping error"){super(e,tr.ProtocolError),this.name="UnRequestedPingError"}},lf=class extends fs{static name="NotMatchingPingError";constructor(e="Not matching ping error"){super(e,tr.ProtocolError),this.name="NotMatchingPingError"}};var my=class extends fs{static name="StreamAlreadyExistsError";constructor(e="Stream already exists"){super(e,tr.ProtocolError),this.name="StreamAlreadyExistsError"}},gy=class extends fs{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e,tr.ProtocolError),this.name="DecodeInvalidVersionError"}},yy=class extends fs{static name="BothClientsError";constructor(e="Both clients"){super(e,tr.ProtocolError),this.name="BothClientsError"}},uf=class extends fs{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e,tr.ProtocolError),this.name="ReceiveWindowExceededError"}};var Dye=new Set([jn.name,cf.name,lf.name,my.name,gy.name,yy.name,uf.name]),cp=256*1024,wy=16*1024*1024;var lp={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,maxMessageSize:64*1024,maxEarlyStreams:10,streamOptions:{initialStreamWindowSize:cp,maxStreamWindowSize:wy,inactivityTimeout:12e4,maxReadBufferLength:4194304,maxWriteBufferLength:1/0}};function KC(r){if(r.keepAliveInterval!=null&&r.keepAliveInterval<=0)throw new P("keep-alive interval must be positive");if(r.maxInboundStreams!=null&&r.maxInboundStreams<0)throw new P("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams!=null&&r.maxOutboundStreams<0)throw new P("max outbound streams must be larger or equal 0");if(r.maxMessageSize!=null&&r.maxMessageSize<1024)throw new P("MaxMessageSize must be greater than a kilobyte");if(r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize<cp)throw new P("InitialStreamWindowSize must be larger or equal 256 kB");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.initialStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize<r.streamOptions?.initialStreamWindowSize)throw new P("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.streamOptions?.maxStreamWindowSize!=null&&r.streamOptions?.maxStreamWindowSize>2**32-1)throw new P("MaxStreamWindowSize must be less than equal MAX_UINT32")}function HC(r){return r.header.type===Dt.Data&&r.data!==null}var VC=2**24;function LV(r){if(r[0]!==$C)throw new jn("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*VC+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*VC+(r[9]<<16)+(r[10]<<8)+r[11]}}var by=class{buffer;constructor(){this.buffer=new de}*emitFrames(e){for(this.buffer.append(e);;){let t=this.readFrame();if(t===void 0)break;yield t}}readFrame(){let e=di;if(this.buffer.byteLength<di)return;let t=LV(this.buffer.subarray(0,di));if(t.type===Dt.Data){if(e+=t.length,this.buffer.byteLength<e)return;let n=this.buffer.sublist(di,e);return this.buffer.consume(e),{header:t,data:n}}return this.buffer.consume(e),{header:t}}};function W7(r){let e=new Uint8Array(di);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}var rn;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished",r[r.Paused=5]="Paused"})(rn||(rn={}));var vy=class extends Ws{streamId;state;sendWindowCapacity;recvWindow;recvWindowCapacity;maxStreamWindowSize;epochStart;getRTT;sendFrame;constructor(e){let t=e.initialStreamWindowSize??cp;super({...e,maxMessageSize:t-di}),this.streamId=e.streamId,this.state=e.state,this.sendWindowCapacity=t,this.recvWindow=t,this.recvWindowCapacity=this.recvWindow,this.maxStreamWindowSize=e.maxStreamWindowSize??wy,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame;let n=()=>{this.state=rn.Finished};this.addEventListener("close",n)}sendData(e){let t=e.byteLength,n=0,o=!0;for(this.log?.trace("send window capacity is %d bytes",this.sendWindowCapacity);e.byteLength>0;){if(this.sendWindowCapacity===0){o=!1,this.log?.trace("sent %d/%d bytes, exhausted send window, waiting for window update",n,t);break}let i=Math.min(this.sendWindowCapacity,e.byteLength),s=this.getSendFlags(),a=e.sublist(0,i);e.consume(i);let c=this.sendFrame({type:Dt.Data,flag:s,streamID:this.streamId,length:i},a);if(this.sendWindowCapacity-=i,n+=i,!c){o=c,this.log.trace("sent %d/%d bytes, wait for muxer to have more send capacity",n,t);break}}return{sentBytes:n,canSendMore:o}}sendReset(){this.sendFrame({type:Dt.WindowUpdate,flag:Ze.RST,streamID:this.streamId,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|Ze.FIN;this.sendFrame({type:Dt.WindowUpdate,flag:e,streamID:this.streamId,length:0})}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){this.state=rn.Paused}sendResume(){this.state=rn.Established,this.sendWindowUpdate()}handleWindowUpdate(e){this.processFlags(e.header.flag),this.sendWindowCapacity+=e.header.length,this.maxMessageSize=this.sendWindowCapacity-di,this.maxMessageSize<0&&(this.maxMessageSize=0),this.maxMessageSize!==0&&this.writeBuffer.byteLength>0&&(this.log?.trace("window update of %d bytes allows more data to be sent, have %d bytes queued, sending data %s",e.header.length,this.writeBuffer.byteLength,this.sendingData),this.safeDispatchEvent("drain"))}handleData(e){if(!HC(e))throw new jn("Frame was not data frame");if(this.processFlags(e.header.flag),this.recvWindowCapacity<e.header.length)throw new uf("Receive window exceeded");this.recvWindowCapacity-=e.header.length,this.onData(e.data),this.sendWindowUpdate()}processFlags(e){(e&Ze.ACK)===Ze.ACK&&this.state===rn.SYNSent&&(this.state=rn.Established),(e&Ze.FIN)===Ze.FIN&&this.onRemoteCloseWrite(),(e&Ze.RST)===Ze.RST&&this.onRemoteReset()}getSendFlags(){switch(this.state){case rn.Init:return this.state=rn.SYNSent,Ze.SYN;case rn.SYNReceived:return this.state=rn.Established,Ze.ACK;default:return 0}}sendWindowUpdate(){if(this.state===rn.Paused){this.epochStart=Date.now();return}let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<=n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Dt.WindowUpdate,flag:e,streamID:this.streamId,length:o})}};function qC(r){return{type:Dt[r.type],flags:[(r.flag&Ze.SYN)===Ze.SYN?"SYN":void 0,(r.flag&Ze.ACK)===Ze.ACK?"ACK":void 0,(r.flag&Ze.FIN)===Ze.FIN?"FIN":void 0,(r.flag&Ze.RST)===Ze.RST?"RST":void 0].filter(Boolean),streamID:r.streamID,length:r.length}}var WC="/yamux/1.0.0",xy=class{protocol=WC;_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[qe]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new z7(e,{...this._init})}},z7=class extends qs{nextStreamID;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;decoder;keepAlive;enableKeepAlive;keepAliveInterval;maxInboundStreams;maxOutboundStreams;constructor(e,t={}){super(e,{...t,protocol:WC,name:"yamux"}),this.client=e.direction==="outbound",KC(t),this.enableKeepAlive=t.enableKeepAlive??lp.enableKeepAlive,this.keepAliveInterval=t.keepAliveInterval??lp.keepAliveInterval,this.maxInboundStreams=t.maxInboundStreams??lp.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??lp.maxOutboundStreams,this.decoder=new by,this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log.trace("muxer created"),this.enableKeepAlive&&(this.log.trace("muxer keepalive enabled interval=%s",this.keepAliveInterval),this.keepAlive=ku(async n=>{try{await this.ping(n)}catch(o){this.log.error("ping error: %s",o)}},this.keepAliveInterval,{runImmediately:!0}),this.keepAlive.start())}onData(e){for(let t of this.decoder.emitFrames(e))this.handleFrame(t)}onCreateStream(){if(this.remoteGoAway!==void 0)throw new wo("Muxer closed remotely");if(this.localGoAway!==void 0)throw new wo("Muxer closed locally");let e=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.maxOutboundStreams)throw new $l("max outbound streams exceeded");this.log.trace("new outgoing stream id=%s",e);let t=this._newStream(e,rn.Init,"outbound");return this.numOutboundStreams++,queueMicrotask(()=>{t.sendWindowUpdate()}),t}async ping(e){if(this.remoteGoAway!==void 0)throw new wo("Muxer closed remotely");if(this.localGoAway!==void 0)throw new wo("Muxer closed locally");if(this.activePing!=null)return ut(this.activePing.promise,e?.signal);this.activePing=Object.assign(Promise.withResolvers(),{id:this.nextPingID++,start:Date.now()}),this.sendPing(this.activePing.id);try{this.rtt=await ut(this.activePing.promise,e?.signal)}finally{this.activePing=void 0}return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.status==="open")try{let t=e?.reason??tr.NormalTermination;this.log.trace("muxer close reason=%s",tr[t]),await super.close(e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}abort(e){if(this.status==="open")try{super.abort(e);let t=tr.InternalError;jC(e)&&(t=e.reason),this.log.error("muxer abort reason=%s error=%s",t,e),this.sendGoAway(t)}finally{this.keepAlive?.stop()}}onTransportClosed(){try{super.onTransportClosed()}finally{this.keepAlive?.stop()}}_newStream(e,t,n){if(this.streams.find(i=>i.streamId===e)!=null)throw new P("Stream already exists with that id");let o=new vy({...this.streamOptions,id:`${e}`,streamId:e,state:t,direction:n,sendFrame:this.sendFrame.bind(this),log:this.log.newScope(`${n}:${e}`),getRTT:this.getRTT.bind(this)});return o.addEventListener("close",()=>{this.closeStream(e)},{once:!0}),o}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--}handleFrame(e){let{streamID:t,type:n,length:o}=e.header;if(this.log.trace("received frame %o",qC(e.header)),t===0)switch(n){case Dt.Ping:{this.handlePing(e.header);return}case Dt.GoAway:{this.handleGoAway(o);return}default:throw new jn("Invalid frame type")}else switch(e.header.type){case Dt.Data:case Dt.WindowUpdate:{this.handleStreamMessage(e);return}default:throw new jn("Invalid frame type")}}handlePing(e){if(e.flag===Ze.SYN)this.log.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,Ze.ACK);else if(e.flag===Ze.ACK)this.log.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new jn("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new cf("ping not requested");if(this.activePing.id!==e)throw new lf("ping doesn't match our id");this.activePing.resolve(Date.now()-this.activePing.start)}handleGoAway(e){this.log.trace("received GoAway reason=%s",tr[e]??"unknown"),this.remoteGoAway=e,e===tr.NormalTermination?this.onTransportClosed():this.abort(new Error("Remote sent GoAway"))}handleStreamMessage(e){let{streamID:t,flag:n,type:o}=e.header;(n&Ze.SYN)===Ze.SYN&&this.incomingStream(t);let i=this.streams.find(s=>s.streamId===t);if(i===void 0){this.log.trace("frame for missing stream id=%s",t);return}switch(o){case Dt.WindowUpdate:{i.handleWindowUpdate(e);return}case Dt.Data:{i.handleData(e);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new P("Both endpoints are clients");if(this.streams.find(n=>n.streamId===e))return;if(this.log.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Dt.WindowUpdate,flag:Ze.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.maxInboundStreams){this.log("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Dt.WindowUpdate,flag:Ze.RST,streamID:e,length:0});return}let t=this._newStream(e,rn.SYNReceived,"inbound");this.numInboundStreams++,this.onRemoteStream(t)}sendFrame(e,t){let n;if(e.type===Dt.Data){if(t==null)throw new jn("Invalid frame");n=new de(W7(e),t)}else n=W7(e);return this.log.trace("sending frame %o",qC(e)),this.send(n)}sendPing(e,t=Ze.SYN){t===Ze.SYN?this.log.trace("sending ping request pingId=%s",e):this.log.trace("sending ping response pingId=%s",e),this.sendFrame({type:Dt.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=tr.NormalTermination){this.log("sending GoAway reason=%s",tr[e]),this.localGoAway=e,this.sendFrame({type:Dt.GoAway,flag:0,streamID:0,length:e})}};function zC(r={}){return()=>new xy(r)}var GC="libp2p",XC="autonat",YC="1.0.0";var At;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),(function(l){l.codec=()=>Ot(t)})(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),(function(l){l.codec=()=>Ot(o)})(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let f;l.codec=()=>(f==null&&(f=Ie((u,d,h={})=>{if(h.lengthDelimited!==!1&&d.fork(),u.id!=null&&(d.uint32(10),d.bytes(u.id)),u.addrs!=null)for(let m of u.addrs)d.uint32(18),d.bytes(m);h.lengthDelimited!==!1&&d.ldelim()},(u,d,h={})=>{let m={addrs:[]},w=d==null?u.len:u.pos+d;for(;u.pos<w;){let y=u.uint32();switch(y>>>3){case 1:{m.id=u.bytes();break}case 2:{if(h.limits?.addrs!=null&&m.addrs.length===h.limits.addrs)throw new dt('Decode error - map field "addrs" had too many elements');m.addrs.push(u.bytes());break}default:{u.skipType(y&7);break}}}return m})),f),l.encode=u=>Te(u,l.codec()),l.decode=(u,d)=>Ae(u,l.codec(),d)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let f;l.codec=()=>(f==null&&(f=Ie((u,d,h={})=>{h.lengthDelimited!==!1&&d.fork(),u.peer!=null&&(d.uint32(10),r.PeerInfo.codec().encode(u.peer,d)),h.lengthDelimited!==!1&&d.ldelim()},(u,d,h={})=>{let m={},w=d==null?u.len:u.pos+d;for(;u.pos<w;){let y=u.uint32();switch(y>>>3){case 1:{m.peer=r.PeerInfo.codec().decode(u,u.uint32(),{limits:h.limits?.peer});break}default:{u.skipType(y&7);break}}}return m})),f),l.encode=u=>Te(u,l.codec()),l.decode=(u,d)=>Ae(u,l.codec(),d)})(s=r.Dial||(r.Dial={}));let a;(function(l){let f;l.codec=()=>(f==null&&(f=Ie((u,d,h={})=>{h.lengthDelimited!==!1&&d.fork(),u.status!=null&&(d.uint32(8),r.ResponseStatus.codec().encode(u.status,d)),u.statusText!=null&&(d.uint32(18),d.string(u.statusText)),u.addr!=null&&(d.uint32(26),d.bytes(u.addr)),h.lengthDelimited!==!1&&d.ldelim()},(u,d,h={})=>{let m={},w=d==null?u.len:u.pos+d;for(;u.pos<w;){let y=u.uint32();switch(y>>>3){case 1:{m.status=r.ResponseStatus.codec().decode(u);break}case 2:{m.statusText=u.string();break}case 3:{m.addr=u.bytes();break}default:{u.skipType(y&7);break}}}return m})),f),l.encode=u=>Te(u,l.codec()),l.decode=(u,d)=>Ae(u,l.codec(),d)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=Ie((l,f,u={})=>{u.lengthDelimited!==!1&&f.fork(),l.type!=null&&(f.uint32(8),r.MessageType.codec().encode(l.type,f)),l.dial!=null&&(f.uint32(18),r.Dial.codec().encode(l.dial,f)),l.dialResponse!=null&&(f.uint32(26),r.DialResponse.codec().encode(l.dialResponse,f)),u.lengthDelimited!==!1&&f.ldelim()},(l,f,u={})=>{let d={},h=f==null?l.len:l.pos+f;for(;l.pos<h;){let m=l.uint32();switch(m>>>3){case 1:{d.type=r.MessageType.codec().decode(l);break}case 2:{d.dial=r.Dial.codec().decode(l,l.uint32(),{limits:u.limits?.dial});break}case 3:{d.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:u.limits?.dialResponse});break}default:{l.skipType(m&7);break}}}return d})),c),r.encode=l=>Te(l,r.codec()),r.decode=(l,f)=>Ae(l,r.codec(),f)})(At||(At={}));var jV=4,KV=8,Ey=class{components;protocol;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;started;log;topologyId;dialResults;findPeers;addressFilter;connectionThreshold;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:auto-nat"),this.started=!1,this.protocol=`/${t.protocolPrefix??GC}/${XC}/${YC}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??20,this.connectionThreshold=t.connectionThreshold??80,this.maxMessageSize=t.maxMessageSize??8192,this.dialResults=zt({name:"libp2p_autonat_dial_results",metrics:e.metrics}),this.findPeers=ku(this.findRandomPeers.bind(this),6e4),this.addressFilter=$r(1024)}[Symbol.toStringTag]="@libp2p/autonat";[qe]=["@libp2p/autonat"];get[An](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,(e,t)=>{this.handleIncomingAutonatStream(e,t).catch(n=>{this.log.error("error handling incoming autonat stream - %e",n)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=De([AbortSignal.timeout(1e4),e?.signal]);try{this.log("starting random walk to find peers to run AutoNAT");for await(let n of this.components.randomWalk.walk({signal:t})){if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable %s",n.id,n.multiaddrs.map(o=>o.toString()).join(", "));continue}try{this.log.trace("dial random peer %p",n.id),await this.components.connectionManager.openConnection(n.multiaddrs,{signal:t})}catch{}if(this.allAddressesAreVerified()){this.log("stopping random walk, all addresses are verified");return}if(!this.hasConnectionCapacity()){this.log("stopping random walk, too close to max connections");return}}}catch{}}async handleIncomingAutonatStream(e,t){let n=AbortSignal.timeout(this.timeout);try{let o=bt(e,{maxDataLength:this.maxMessageSize}).pb(At),i=await o.read({signal:n}),s=await this.handleAutonatMessage(i,t,{signal:n});await o.write(s,{signal:n}),await e.close({signal:n})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(u=>Ce(u).host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let s,a=i.peer;if(a?.id==null)return this.log.error("peerId missing from message"),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let u=lt(a.id);s=Ut(u)}catch(u){return this.log.error("invalid PeerId - %e",u),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",s),!t.remotePeer.equals(s))return this.log("target peer %p did not equal sending peer %p",s,t.remotePeer),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(u=>ie(u)).filter(u=>{try{let d=Ce(u);return Mt(u)?!1:d.host!==Ce(t.remoteAddr).host?(this.log.trace("not dialing %a - target host did not match remote host %a",u,t.remoteAddr),!1):o.includes(d.host)?!1:this.components.transportManager.dialTransportForMultiaddr(u)==null?(this.log.trace("not dialing %a - transport unsupported",u),!1):!0}catch{return!1}}).map(u=>(u.getComponents().find(d=>d.code===421)?.value==null&&(u=u.encapsulate(`/p2p/${s.toString()}`)),u));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",s),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(u=>u.toString()).join(", "),s);let l="",f=c[0];for(let u of c){let d;f=u;try{if(d=await this.components.connectionManager.openConnection(u,n),!d.remoteAddr.equals(u))throw this.log.error("tried to dial %a but dialed %a",u,d.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,u),{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.OK,addr:d.remoteAddr.decapsulateCode(421).bytes}}}catch(h){this.log.error("could not dial %p - %e",s,h),l=h.message}finally{d!=null&&await d.close()}}return{type:At.MessageType.DIAL_RESPONSE,dialResponse:{status:At.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:f.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,i)=>o.type==="observed"&&i.type!=="observed"?1:i.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||Ce(o.multiaddr).type==="ip6"&&(!t||!Wm(o.multiaddr))||Mt(o.multiaddr)));for(let o of n){let i=o.multiaddr.toString(),s=this.dialResults.get(i);if(s!=null){if(s.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",s.multiaddr,e);continue}if(s.queue.size>10){this.log.trace("%a already has enough peers queued",s.multiaddr);continue}}if(s==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(i),this.addressFilter.has(i))continue;this.addressFilter.add(i),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",i),s={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:mw(),queue:new vr({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(i,s)}return s}}removeOutdatedMultiaddrResults(){let e=new Set(this.components.addressManager.getAddressesWithMetadata().filter(({expires:t})=>t<Date.now()).map(({multiaddr:t})=>t.toString()));for(let t of this.dialResults.keys())e.has(t)||(this.log.trace("remove results for %a",t),this.dialResults.delete(t))}async verifyExternalAddresses(e){if(!this.isStarted())return;this.removeOutdatedMultiaddrResults();let n=(await this.components.peerStore.get(e.remotePeer)).addresses.some(({multiaddr:s})=>Ce(s).type==="ip6"),o=this.getNetworkSegment(e.remoteAddr),i=this.getFirstUnverifiedMultiaddr(o,n);if(i==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){i.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",i.multiaddr),this.confirmAddress(i)):this.log("skipping verifying %a because we are too close to the connection limit",i.multiaddr);return}i.queue.add(async s=>{await this.askPeerToVerify(e,o,s)},{peerId:e.remotePeer,multiaddr:i.multiaddr}).catch(s=>{i?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,i?.multiaddr,s)})}async askPeerToVerify(e,t,n){let o=this.dialResults.get(n.multiaddr.toString());if(o==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let i=AbortSignal.timeout(this.timeout);this.log.trace("asking %a to verify multiaddr %s",e.remoteAddr,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=bt(s).pb(At),[,c]=await Promise.all([a.write({type:At.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==At.MessageType.DIAL_RESPONSE||c.dialResponse==null){this.log("invalid autonat response from %p - %j",e.remotePeer,c);return}let l=c.dialResponse.status;if(this.log.trace("autonat response from %p for %a is %s",e.remotePeer,n.multiaddr,l),l!==At.ResponseStatus.OK&&l!==At.ResponseStatus.E_DIAL_ERROR)return;if(o=this.dialResults.get(n.multiaddr.toString()),o==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(o.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(o.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(o.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(o.verifyingPeers.add(e.remotePeer),o.networkSegments.push(t),l===At.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===At.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===jV&&this.confirmAddress(o),o.failure===KV&&this.unconfirmAddress(o)}finally{try{await s.close({signal:i})}catch(a){s.abort(a)}}}hasConnectionCapacity(){let t=this.components.connectionManager.getConnections().length,n=this.components.connectionManager.getMaxConnections();return t/n*100<this.connectionThreshold}confirmAddress(e){this.log("%s address %a is externally dialable",e.type,e.multiaddr),this.components.addressManager.confirmObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!0,e.queue.abort()}unconfirmAddress(e){this.log("%s address %a is not externally dialable",e.type,e.multiaddr),this.components.addressManager.removeObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!1,e.queue.abort()}getNetworkSegment(e){let t=Ce(e);switch(t.type){case"ip4":return t.host.split(".")[0].padStart(3,"0");case"ip6":return t.host.split(":")[0].padStart(4,"0");default:throw new P(`Remote address ${e} was not an IPv4 or Ipv6 address`)}}};function QC(r={}){return e=>new Ey(e,r)}var VV="bootstrap",HV=50,qV=1e3,G7=class extends _e{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??qV,this.list=t.list.map(n=>ie(n)).filter(n=>Fu.matches(n)?n.getComponents().findLast(i=>i.code===421)?.value==null?(this.log.error("invalid bootstrap multiaddr without peer id"),!1):!0:(this.log.error("invalid multiaddr %a",n),!1)).map(n=>({id:yt(n.getComponents().findLast(o=>o.code===421)?.value??""),multiaddrs:[n]})),this._init=t}[Va]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[qe]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error("failed to discover bootstrap peers - %e",e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??VV]:{value:this._init.tagValue??HV,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p - %e",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function ZC(r){return e=>new G7(e,r)}var X7=1e3,JC=60*X7;var D3e=120*JC,eP=1,Sy=5e3,tP=100;var up=`${Ha}-circuit-relay`,N3e=2*JC,L3e=BigInt(1<<17),Zc="/libp2p/circuit/relay/0.2.0/hop",Y7="/libp2p/circuit/relay/0.2.0/stop",B3e=30*X7,M3e=30*X7,Q7=300,rP=4096,nP=.001;var sa;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),ff.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),_y.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),df.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),_r.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=ff.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=_y.codec().decode(o,o.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=df.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=_r.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(sa||(sa={}));var hi;(function(r){let e;(function(o){o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.CONNECT=0]="CONNECT",o[o.STATUS=1]="STATUS"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),ff.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),df.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),_r.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=ff.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=df.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=_r.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(hi||(hi={}));var ff;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ke(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new dt('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(ff||(ff={}));var _y;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),Ty.codec().encode(t.voucher,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new dt('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}case 3:{i.voucher=Ty.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(_y||(_y={}));var df;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.duration=t.uint32();break}case 2:{i.data=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(df||(df={}));var _r;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(_r||(_r={}));var Z7;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(Z7||(Z7={}));(function(r){r.codec=()=>Ot(Z7)})(_r||(_r={}));var Ay;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={relay:ke(0),peer:ke(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.relay=t.bytes();break}case 2:{i.peer=t.bytes();break}case 3:{i.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(Ay||(Ay={}));var Ty;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&(n.uint32(26),Ay.codec().encode(t.payload,n)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:ke(0),payloadType:ke(0),signature:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=Ay.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(Ty||(Ty={}));var fp=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},Iy=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},Cy=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function J7(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var dp=class{expires;bytes;constructor(e){e?.duration!=null&&e?.duration!==0&&(this.expires=Date.now()+e.duration*1e3),this.bytes=e?.data,this.bytes===0n&&(this.bytes=void 0),this.onData=this.onData.bind(this)}onData(e){this.bytes!=null&&(this.bytes-=BigInt(e.byteLength),this.bytes<0n&&(this.bytes=0n))}getLimits(){if(this.expires==null&&this.bytes==null)return;let e={};if(this.bytes!=null){let t=this;Object.defineProperty(e,"bytes",{get(){return t.bytes}})}if(this.expires!=null){let t=this;Object.defineProperty(e,"seconds",{get(){return Math.round(((t.expires??0)-Date.now())/1e3)}})}return e}},Py=ct(Qe(Fu.matchers[0],at(290))),ky=ct(at(290));var Oy=class extends _e{components;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.components=e,this.started=!1,this.running=!1,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal,this.dialPeer=this.dialPeer.bind(this),this.onPeer=this.onPeer.bind(this)}isStarted(){return this.started}async start(){this.topologyId=await this.components.registrar.register(Zc,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p queue (length: %d, active %d)",e,this.queue?.size,this.queue?.running),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.components.registrar.unregister(this.topologyId),this.running&&this.stopDiscovery(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,this.components.events.addEventListener("peer:discovery",this.onPeer),Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.components.peerStore.all({filters:[n=>n.protocols.includes(Zc)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=oP(n),s=oP(o);return i>s?-1:s>i?1:0}]});for(let n of e)this.log.trace("found relay peer %p in peer store",n.id),this.safeDispatchEvent("relay:discover",{detail:n.id});this.log("found %d relay peers in peer store",e.length);let t=this.queue=new vr({concurrency:5});this.log("start random walk");for await(let n of this.components.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.components.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}t.queued>10&&(this.log.trace("wait for space in queue for %p",n.id),await t.onSizeLessThan(10,{signal:this.discoveryController.signal})),this.log("adding random peer %p to dial queue (length: %d, active %d)",n.id,t.size,t.running),t.add(this.dialPeer,{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p - %e",n.id,o)})}this.log("stop random walk"),await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network - %e",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort(),this.queue?.clear(),this.components.events.removeEventListener("peer:discovery",this.onPeer)}onPeer(e){this.log.trace("maybe dialing discovered peer %p",e.detail.id),this.maybeDialPeer(e).catch(t=>{this.log.trace("error dialing discovered peer %p - %e",e.detail.id,t)})}async maybeDialPeer(e){if(this.queue==null)return;let t=e.detail.id,n=e.detail.multiaddrs;if(this.queue.has(t)){this.log.trace("random peer %p was already in queue",t);return}if(this.components.connectionManager.getConnections(t)?.length>0){this.log.trace("random peer %p was already connected",t);return}if(!await this.components.connectionManager.isDialable(n)){this.log.trace("random peer %p was not dialable",t);return}this.queue?.add(this.dialPeer,{peerId:e.detail.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to discovered peer %p - %e",e.detail.id,o)})}async dialPeer({peerId:e,signal:t}){let n=De([AbortSignal.timeout(5e3),t]);try{await this.components.connectionManager.openConnection(e,{signal:n})}finally{n.clear()}}};function oP(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(j(e)).getTime()}var eb=class extends _e{connectionManager;addressManager;reservationStore;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.addressManager=e.addressManager,this.reservationStore=e.reservationStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??Sy,this.reservationStore.addEventListener("relay:removed",this._onRemoveRelayPeer),this.reservationStore.addEventListener("relay:created-reservation",this._onAddRelayPeer)}_onRemoveRelayPeer=e=>{this.log("relay removed %p our relay %p",e.detail.relay,this.relay,this.relay?.equals(e.detail.relay)),this.relay?.equals(e.detail.relay)===!0&&(this.log("relay peer removed %p",e.detail.relay),this.listeningAddrs.forEach(t=>{this.addressManager.removeObservedAddr(t)}),this.listeningAddrs=[],this.safeDispatchEvent("listening"))};_onAddRelayPeer=e=>{let{details:t}=e.detail;t.type!=="configured"&&t.id===this.reservationId&&this.addedRelay(e.detail)};async listen(e){if(ky.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(Py.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);let n=e.decapsulate("/p2p-circuit"),o=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(o.remotePeer)){this.log("making reservation on peer %p",o.remotePeer);let i=await this.reservationStore.addRelay(o.remotePeer,"configured");this.addedRelay(i)}}else throw new Ka(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}updateAnnounceAddrs(){}async close(){this.reservationStore.cancelReservations(),this.listeningAddrs=[],this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),queueMicrotask(()=>{this.safeDispatchEvent("close")})}addedRelay(e){this.log("relay peer added %p",e.relay),this.relay=e.relay,this.listeningAddrs=e.details.reservation.addrs.map(t=>ie(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function iP(r){return new eb(r)}var sP="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var aP=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=sP[t[r]&63];return e};var WV=60*1e3*10,zV=60*1e3*5,GV=30*1e3,Ry=class extends _e{peerId;connectionManager;peerStore;events;reserveQueue;reservations;pendingReservations;maxReservationQueueLength;reservationCompletionTimeout;started;log;relayFilter;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new jr,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??tP,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??Sy,this.started=!1,this.relayFilter=$r(100),this.reserveQueue=new vr({concurrency:t?.reservationConcurrency??eP,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(i=>i.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(i=>{this.log("could not remove relay %p - %e",n.detail,i)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(up)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[up]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#r()}).catch(e=>{this.log.error("failed to clean up and redial old relays during afterStart - %e",e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=aP();return this.pendingReservations.push(e),this.#r(),e}async addRelay(e,t){if(this.peerId.equals(e))throw this.log.trace("not trying to use self as relay"),new Ka("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new Cy("The reservation queue is full");let n=this.reserveQueue.find(e);if(n!=null)return this.log.trace("potential relay peer %p is already in the reservation queue",e),n.join();if(this.relayFilter.has(e.toMultihash().bytes))throw new Ka("The relay was previously invalid");return this.log.trace("try to reserve relay slot with %p",e),this.reserveQueue.add(async()=>{let o=Date.now();try{let i=this.reservations.get(e);if(i!=null){let m=this.connectionManager.getConnections(e),w=!1;if(m.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),m.map(y=>y.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),w=!0),w&&J7(i.reservation.expire)>WV)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:i};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new fp("Not making reservation on discovered relay because we do not need any more relays");let s=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:s});if(fr.matches(a.remoteAddr))throw new Iy("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=J7(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let f=Math.min(Math.max(l-zV,GV),Math.pow(2,31)-1),u=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async m=>{this.log.error("could not refresh reservation to relay %p - %e",e,m),await this.#t(e)}).catch(m=>{this.log.error("could not remove expired reservation to relay %p - %e",e,m)})},f),d;if(t==="discovered"){let m=this.pendingReservations.pop();if(m==null)throw new fp("Made reservation on relay but did not need any more discovered relays");d={timeout:u,reservation:c,type:t,connection:a.id,id:m}}else d={timeout:u,reservation:c,type:t,connection:a.id};this.reservations.set(e,d),await this.peerStore.merge(e,{tags:{[up]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:d};return this.safeDispatchEvent("relay:created-reservation",{detail:h}),h}catch(i){throw t==="discovered"&&i.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,i),(i.name==="DialError"||i.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(s=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,s)}),i}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(e){return e==null?this.reservations.size:[...this.reservations.values()].reduce((t,n)=>(n.type===e&&t++,t),0)}cancelReservations(){[...this.reservations.values()].forEach(e=>{clearTimeout(e.timeout)}),this.reservations.clear()}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(Zc,t),i=bt(n).pb(sa);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:sa.Type.RESERVE},t);let s;try{this.log.trace("reading response from %p",e.remotePeer),s=await i.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %s",s.status),s.status===_r.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let f=ie(l);f.getComponents().find(u=>u.code===421)==null&&(f=f.encapsulate(`/p2p/${e.remotePeer}`)),f=ie(f.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(f.toString())}return s.reservation.addrs=[...c].map(l=>ie(l).bytes),s.reservation}let a=`reservation failed with status ${s.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#t(e){let t=this.reservations.get(e);t!=null&&(this.log("removing relay reservation with %p from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),t.type==="discovered"&&this.pendingReservations.push(t.id),await this.peerStore.merge(e,{tags:{[up]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:{relay:e,details:t}}),this.#r())}#r(){if(this.pendingReservations.length===0){this.log.trace("have discovered enough relays"),this.reserveQueue.clear(),this.safeDispatchEvent("relay:found-enough-relays");return}this.relayFilter=$r(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var tb=class extends Hs{stream;init;constructor(e){super({...e,direction:e.stream.direction}),this.init=e,this.stream=e.stream,this.stream.addEventListener("close",t=>{this.onTransportClosed(t.error)}),this.stream.addEventListener("remoteCloseWrite",t=>{this.onRemoteCloseWrite(),this.close().catch(n=>{this.abort(n)})}),this.stream.addEventListener("message",t=>{e.onDataRead?.(t.data),this.onData(t.data)}),this.stream.addEventListener("drain",()=>{this.safeDispatchEvent("drain")})}sendData(e){return this.init.onDataWrite?.(e),{sentBytes:e.byteLength,canSendMore:this.stream.send(e)}}async sendClose(e){await this.stream.close(e)}sendReset(){this.stream.abort(new Error("An error occurred"))}sendPause(){this.stream.pause()}sendResume(){this.stream.resume()}};function rb(r){return new tb(r)}var XV=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(ie)}catch{return!1}return!0},cP={maxInboundStopStreams:Q7,maxOutboundStopStreams:Q7,stopTimeout:3e4},Dy=class{components;discovery;reservationStore;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.maxInboundStopStreams=t.maxInboundStopStreams??cP.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??cP.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new Oy(e,{filter:t.discoveryFilter??gw(rP,nP)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{o.name!=="HadEnoughRelaysError"&&o.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p - %e",n.detail,o)})}),this.reservationStore=new Ry(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:found-enough-relays",()=>{this.discovery?.stopDiscovery()}),this.started=!1,this.onStop=this.onStop.bind(this)}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[qe]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[An](){return this.discovery!=null?["@libp2p/identify"]:[]}[ks]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,this.shutdownController.signal,await this.components.registrar.handle(Y7,this.onStop,{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await er(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await or(this.discovery,this.reservationStore),await this.components.registrar.unhandle(Y7),this.started=!1}async dial(e,t){let n=e.toString().split("/p2p-circuit"),o=ie(n[0]),i=ie(n[n.length-1]),s=o.getComponents().find(h=>h.code===421)?.value,a=i.getComponents().find(h=>h.code===421)?.value;if(s==null||a==null){let h=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${h}`),new Cs(`C${h}`)}let c=yt(s),l=yt(a),u=this.components.connectionManager.getConnections(c)[0];u==null?(await this.components.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new oe("circuit-relay:open-connection")),u=await this.components.connectionManager.openConnection(c,t)):t.onProgress?.(new oe("circuit-relay:reuse-connection"));let d;try{t.onProgress?.(new oe("circuit-relay:open-hop-stream")),d=await u.newStream(Zc,t);let h=bt(d).pb(sa);t.onProgress?.(new oe("circuit-relay:write-connect-message")),await h.write({type:sa.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[ie(i).bytes]}},t),t.onProgress?.(new oe("circuit-relay:read-connect-response"));let m=await h.read(t);if(m.status!==_r.OK)throw new Be(`failed to connect via relay with status ${m?.status?.toString()??"undefined"}`);let w=new dp(m.limit),y=rb({stream:h.unwrap().unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.components.peerId.toString()}`),onDataRead:w.onData,onDataWrite:w.onData,log:d.log.newScope("circuit-relay:connection")}),b=await this.components.upgrader.upgradeOutbound(y,{...t,limits:w.getLimits()});return b.log("outbound relayed connection established to %p with limits %o, over connection %s",b.remotePeer,m.limit??"none",u.id),b}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed - %e",l,c,h),d?.abort(h),h}}createListener(e){return iP({peerId:this.components.peerId,connectionManager:this.components.connectionManager,addressManager:this.components.addressManager,reservationStore:this.reservationStore,logger:this.components.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Py.exactMatch(t)||ky.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>fr.exactMatch(t))}async onStop(e,t){let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);try{if(!this.reservationStore.hasReservation(t.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.components.transportManager.listen([t.remoteAddr.encapsulate("/p2p-circuit")])}catch(u){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on - %e",u)}let o=bt(e).pb(hi),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",t.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",t.remotePeer),await o.write({type:hi.Type.STATUS,status:_r.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(i.type!==hi.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:hi.Type.STATUS,status:_r.UNEXPECTED_MESSAGE},{signal:n}),await e.close({signal:n});return}if(!XV(i)){this.log.error("invalid stop connect request via peer %p",t.remotePeer),await o.write({type:hi.Type.STATUS,status:_r.MALFORMED_MESSAGE},{signal:n}),await e.close({signal:n});return}let s=Ut(lt(i.peer.id));if(await this.components.connectionGater.denyInboundRelayedConnection?.(t.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",t.remotePeer),await o.write({type:hi.Type.STATUS,status:_r.PERMISSION_DENIED},{signal:n}),await e.close({signal:n});return}this.log.trace("sending success response to %p",t.remotePeer),await o.write({type:hi.Type.STATUS,status:_r.OK},{signal:n});let a=new dp(i.limit),c=t.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.components.addressManager.getAddresses()[0],f=rb({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,onDataRead:a.onData,onDataWrite:a.onData,log:e.log.newScope("circuit-relay:connection")});await this.components.upgrader.upgradeInbound(f,{limits:a.getLimits(),signal:n}),f.log("inbound relayed connection established to %p with limits %o, over connection %s",s,i.limit??"none",t.id)}finally{n?.clear()}}};function lP(r={}){return e=>new Dy(e,r)}var Fo;(function(r){let e;(function(o){o.UNUSED="UNUSED",o.CONNECT="CONNECT",o.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.UNUSED=0]="UNUSED",o[o.CONNECT=100]="CONNECT",o[o.SYNC=300]="SYNC"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.observedAddresses!=null)for(let a of o.observedAddresses)i.uint32(18),i.bytes(a);s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={observedAddresses:[]},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{if(s.limits?.observedAddresses!=null&&a.observedAddresses.length===s.limits.observedAddresses)throw new dt('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(o.bytes());break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(Fo||(Fo={}));function nb(r,e){return fr.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:P2.matches(r)?!0:iT.matches(r)?!Mt(r):!1}var uP=1024*4,fP=100,Ny={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},Ly=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:dcutr"),this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??Ny.timeout,this.retries=t.retries??Ny.retries,this.maxInboundStreams=t.maxInboundStreams??Ny.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Ny.maxOutboundStreams,this.handleIncomingUpgrade=this.handleIncomingUpgrade.bind(this)}[Symbol.toStringTag]="@libp2p/dcutr";[An]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(hp,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{fr.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt - %e",n)})}}),await this.registrar.handle(hp,this.handleIncomingUpgrade,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(hp),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let o={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([hp],{signal:o.signal,runOnLimitedConnection:!0});let i=bt(t,{maxDataLength:uP}).pb(Fo);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:Fo.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==Fo.Type.CONNECT)throw this.log("A sent wrong message type"),new Be("DCUtR message type was incorrect");let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new Be("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:Fo.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await aA(l/2),this.log("B dialing",c);let f=await this.connectionManager.openConnection(c,{signal:o.signal,priority:fP,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,f.remoteAddr),await e.close(o);break}catch(i){if(this.log.error("error while attempting DCUtR on attempt %d of %d - %e",n+1,this.retries,i),t?.abort(i),n===this.retries)throw i}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let i=o.multiaddr;return i.getComponents().find(s=>s.code===421)?.value==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>nb(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let i=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(fr.exactMatch(i.remoteAddr))throw new Error("Could not open a new, non-limited, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,i.remoteAddr),await e.close({signal:o}),!0}catch(i){this.log.error("unilateral connection upgrade to %p on addresses %a failed - %e",e.remotePeer,n,i)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)},o=bt(e,{maxDataLength:uP}).pb(Fo);this.log("A receiving connect");let i=await o.read(n);if(i.type!==Fo.Type.CONNECT)throw this.log("B sent wrong message type"),new Be("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new Be("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs in %o",i.observedAddresses.map(l=>ie(l))),new Be("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:Fo.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==Fo.Type.SYNC)throw new Be("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:fP,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n),await e.close(n)}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=ie(n);if(!nb(o,this.transportManager))continue;t.push(o)}catch{}return t}};var hp="/libp2p/dcutr";function dP(r={}){return e=>new Ly(e,r)}function fe(r){if(r!==void 0&&r!==fe.REQUEST&&r!==fe.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");r===void 0||this.initialize(r),this.maxHeaderSize=fe.maxHeaderSize}fe.prototype.initialize=function(r,e){if(r!==fe.REQUEST&&r!==fe.RESPONSE)throw new Error("type must be REQUEST or RESPONSE");this.type=r,this.state=r+"_LINE",this.info={headers:[],upgrade:!1},this.trailers=[],this.line="",this.isChunked=!1,this.connection="",this.headerSize=0,this.body_bytes=null,this.isUserCall=!1,this.hadError=!1};fe.encoding="ascii";fe.maxHeaderSize=80*1024;fe.REQUEST="REQUEST";fe.RESPONSE="RESPONSE";var hP=fe.kOnHeaders=1,ob=fe.kOnHeadersComplete=2,By=fe.kOnBody=3,ib=fe.kOnMessageComplete=4;fe.prototype[hP]=fe.prototype[ob]=fe.prototype[By]=fe.prototype[ib]=function(){};var pP=!0;Object.defineProperty(fe,"kOnExecute",{get:function(){return pP=!1,99}});var mP=fe.methods=["DELETE","GET","HEAD","POST","PUT","CONNECT","OPTIONS","TRACE","COPY","LOCK","MKCOL","MOVE","PROPFIND","PROPPATCH","SEARCH","UNLOCK","BIND","REBIND","UNBIND","ACL","REPORT","MKACTIVITY","CHECKOUT","MERGE","M-SEARCH","NOTIFY","SUBSCRIBE","UNSUBSCRIBE","PATCH","PURGE","MKCALENDAR","LINK","UNLINK","SOURCE"],gP=mP.indexOf("CONNECT");fe.prototype.reinitialize=fe;fe.prototype.close=fe.prototype.pause=fe.prototype.resume=fe.prototype.remove=fe.prototype.free=function(){};fe.prototype._compatMode0_11=!1;fe.prototype.getAsyncId=function(){return 0};var YV={REQUEST_LINE:!0,RESPONSE_LINE:!0,HEADER:!0};fe.prototype.execute=function(r,e,t){if(!(this instanceof fe))throw new TypeError("not a HTTPParser");e=e||0,t=typeof t=="number"?t:r.length,this.chunk=r,this.offset=e;var n=this.end=e+t;try{for(;this.offset<n&&!this[this.state](););}catch(o){if(this.isUserCall)throw o;return this.hadError=!0,o}return this.chunk=null,t=this.offset-e,YV[this.state]&&(this.headerSize+=t,this.headerSize>(this.maxHeaderSize||fe.maxHeaderSize))?new Error("max header size exceeded"):t};var QV={REQUEST_LINE:!0,RESPONSE_LINE:!0,BODY_RAW:!0};fe.prototype.finish=function(){if(!this.hadError){if(!QV[this.state])return new Error("invalid state for EOF");this.state==="BODY_RAW"&&this.userCall()(this[ib]())}};fe.prototype.consume=fe.prototype.unconsume=fe.prototype.getCurrentBuffer=function(){};fe.prototype.userCall=function(){this.isUserCall=!0;var r=this;return function(e){return r.isUserCall=!1,e}};fe.prototype.nextRequest=function(){this.userCall()(this[ib]()),this.reinitialize(this.type)};fe.prototype.consumeLine=function(){for(var r=this.end,e=this.chunk,t=this.offset;t<r;t++)if(e[t]===10){var n=this.line+j(e.subarray(this.offset,t),fe.encoding);return n.charAt(n.length-1)==="\r"&&(n=n.substr(0,n.length-1)),this.line="",this.offset=t+1,n}this.line+=j(e.subarray(this.offset,this.end),fe.encoding),this.offset=this.end};var ZV=/^([^: \t]+):[ \t]*((?:.*[^ \t])|)/,JV=/^[ \t]+(.*[^ \t])/;fe.prototype.parseHeader=function(r,e){if(r.indexOf("\r")!==-1)throw My("HPE_LF_EXPECTED");var t=ZV.exec(r),n=t&&t[1];if(n)e.push(n),e.push(t[2]);else{var o=JV.exec(r);o&&e.length&&(e[e.length-1]&&(e[e.length-1]+=" "),e[e.length-1]+=o[1])}};var eH=/^([A-Z-]+) ([^ ]+) HTTP\/(\d)\.(\d)$/;fe.prototype.REQUEST_LINE=function(){var r=this.consumeLine();if(r){var e=eH.exec(r);if(e===null)throw My("HPE_INVALID_CONSTANT");if(this.info.method=this._compatMode0_11?e[1]:mP.indexOf(e[1]),this.info.method===-1)throw new Error("invalid request method");this.info.url=e[2],this.info.versionMajor=+e[3],this.info.versionMinor=+e[4],this.body_bytes=0,this.state="HEADER"}};var tH=/^HTTP\/(\d)\.(\d) (\d{3}) ?(.*)$/;fe.prototype.RESPONSE_LINE=function(){var r=this.consumeLine();if(r){var e=tH.exec(r);if(e===null)throw My("HPE_INVALID_CONSTANT");this.info.versionMajor=+e[1],this.info.versionMinor=+e[2];var t=this.info.statusCode=+e[3];this.info.statusMessage=e[4],((t/100|0)===1||t===204||t===304)&&(this.body_bytes=0),this.state="HEADER"}};fe.prototype.shouldKeepAlive=function(){if(this.info.versionMajor>0&&this.info.versionMinor>0){if(this.connection.indexOf("close")!==-1)return!1}else if(this.connection.indexOf("keep-alive")===-1)return!1;return!!(this.body_bytes!==null||this.isChunked)};fe.prototype.HEADER=function(){var r=this.consumeLine();if(r!==void 0){var e=this.info;if(r)this.parseHeader(r,e.headers);else{for(var t=e.headers,n=!1,o,i=!1,s=0;s<t.length;s+=2)switch(t[s].toLowerCase()){case"transfer-encoding":this.isChunked=t[s+1].toLowerCase()==="chunked";break;case"content-length":if(o=+t[s+1],n){if(o!==this.body_bytes)throw My("HPE_UNEXPECTED_CONTENT_LENGTH")}else n=!0,this.body_bytes=o;break;case"connection":this.connection+=t[s+1].toLowerCase();break;case"upgrade":i=!0;break}this.isChunked&&n&&(n=!1,this.body_bytes=null),i&&this.connection.indexOf("upgrade")!=-1?e.upgrade=this.type===fe.REQUEST||e.statusCode===101:e.upgrade=e.method===gP,this.isChunked&&e.upgrade&&(this.isChunked=!1),e.shouldKeepAlive=this.shouldKeepAlive();var a;if(pP?a=this.userCall()(this[ob](e)):a=this.userCall()(this[ob](e.versionMajor,e.versionMinor,e.headers,e.method,e.url,e.statusCode,e.statusMessage,e.upgrade,e.shouldKeepAlive)),a===2)return this.nextRequest(),!0;if(this.isChunked&&!a)this.state="BODY_CHUNKHEAD";else{if(a||this.body_bytes===0)return this.nextRequest(),e.upgrade;this.body_bytes===null?this.state="BODY_RAW":this.state="BODY_SIZED"}}}};fe.prototype.BODY_CHUNKHEAD=function(){var r=this.consumeLine();r!==void 0&&(this.body_bytes=parseInt(r,16),this.body_bytes?this.state="BODY_CHUNK":this.state="BODY_CHUNKTRAILERS")};fe.prototype.BODY_CHUNK=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[By](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||(this.state="BODY_CHUNKEMPTYLINE")};fe.prototype.BODY_CHUNKEMPTYLINE=function(){var r=this.consumeLine();if(r!==void 0){if(r!=="")throw new Error("Expected empty line");this.state="BODY_CHUNKHEAD"}};fe.prototype.BODY_CHUNKTRAILERS=function(){var r=this.consumeLine();r!==void 0&&(r?this.parseHeader(r,this.trailers):(this.trailers.length&&this.userCall()(this[hP](this.trailers,"")),this.nextRequest()))};fe.prototype.BODY_RAW=function(){this.userCall()(this[By](this.chunk.slice(this.offset,this.end),0,this.end-this.offset)),this.offset=this.end};fe.prototype.BODY_SIZED=function(){var r=Math.min(this.end-this.offset,this.body_bytes);this.userCall()(this[By](this.chunk.slice(this.offset,this.offset+r),0,r)),this.offset+=r,this.body_bytes-=r,this.body_bytes||this.nextRequest()};["Headers","HeadersComplete","Body","MessageComplete"].forEach(function(r){var e=fe["kOn"+r];Object.defineProperty(fe.prototype,"on"+r,{get:function(){return this[e]},set:function(t){return this._compatMode0_11=!0,gP="CONNECT",this[e]=t}})});function My(r){var e=new Error("Parse Error");return e.code=r,e}function yP(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}function sb(r,e={}){let t=yP(r),n={_cancelled:!1,async start(){this._cancelled=!1},async pull(o){try{let{value:i,done:s}=await t.next();if(this._cancelled)return;if(s===!0){o.close();return}o.enqueue(i)}catch(i){o.error(i)}},cancel(){this._cancelled=!0}};return new globalThis.ReadableStream(n,e)}var rH=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),wP=md({name:"sha-1",code:17,encode:rH("SHA-1")});var Uy=class extends globalThis.Request{constructor(e,t={}){let n=t.method??"GET",o=pi(t),i=t.body;Fy(n,o)&&(t.method="UPGRADE"),super(e,t),Object.defineProperties(this,{body:{value:i,writable:!1},method:{value:n,writable:!1},headers:{value:o,writable:!1}})}};var bP={100:"Continue",101:"Switching Protocols",102:"Processing",103:"Early Hints",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a Teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Too Early",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"};var mi=class extends globalThis.Response{constructor(e,t={}){let n=pi(t),o=t.status??200;(o<200||o>599)&&(t.status=200),super(e,t),Object.defineProperties(this,{status:{value:o,writable:!1},statusText:{value:bP[o],writable:!1},headers:{value:n,writable:!1}})}};var nH=["dns","dns4","dns6","dnsaddr"];function mp(r,e){if(r instanceof URL)return r;let t=jy(r,e),{httpPath:n}=Ky(r);return new URL(`http://${t}${n}`)}function gp(r){return r instanceof Uint8Array?r:r instanceof DataView?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r,0,r.byteLength)}function xP(r,e){let t={method:r.method,headers:r.headers};if((t.method!=="GET"||r.upgrade)&&t.method!=="HEAD"){let n=e;r.upgrade||(n=iH(e,r.headers.get("content-length"))),t.body=sb(n),t.duplex="half"}return new Uy(ab(r).toString(),t)}async function EP(r,e){if(e.send(B([`HTTP/1.1 ${r.status} ${r.statusText}`,...$y(r.headers),"",""].join(`\r
52
52
  `))),r.body==null){await e.close().catch(n=>{e.abort(n)});return}let t=r.body.getReader();for(;;){let n=await t.read();if(n.value!=null&&(e.send(n.value)||await e.onDrain()),n.done)break}await e.close().catch(n=>{e.abort(n)})}var SP=B(["HTTP/1.1 404 Not Found","Connection: close","",""].join(`\r
53
53
  `)),oH=B(["HTTP/1.1 400 Bad Request","Connection: close","",""].join(`\r
54
54
  `)),N6e=B(["HTTP/1.1 500 Internal Server Error","Connection: close","",""].join(`\r
55
55
  `)),L6e=B(["HTTP/1.1 501 Not Implemented","Connection: close","",""].join(`\r
56
- `));function $y(r){let e=[];r.get("Connection")==null&&r.set("Connection","close");for(let[t,n]of r.entries())e.push(`${t}: ${n}`);return e}async function*iH(r,e){if(e=parseInt(`${e??""}`),e==null||isNaN(e))return r;let t=0;for await(let n of r){if(t+=n.byteLength,t>e){yield n.subarray(0,t-e);return}if(yield n.subarray(),t===e)return}}function hf(r,e){if(typeof r=="string"&&(r.startsWith("/")?r=ie(r):r=new URL(r)),Rr(r)&&(r=ie(`/p2p/${r}`)),r instanceof URL&&r.protocol==="multiaddr:"&&(r=q2(r.toString())),ni(r)&&(r=[r]),Array.isArray(r)){for(let t of r)if(t.getComponents().some(({name:o})=>o==="http")){let o=ea(t);return new URL(`${o}${e??""}`)}}return e==null?r:r instanceof URL?new URL(`${r}${e.substring(1)}`):r.map(t=>t.encapsulate(`/http-path/${encodeURIComponent(e.substring(1))}`))}function pi(r={}){return r.headers instanceof Headers||(r.headers=new Headers(r.headers)),r.headers}function pp(r){return r!=null&&r!==""}function jy(r,e){let t,n=80,o="http:";if(r instanceof URL&&(t=r.hostname,n=parseInt(r.port,10),o=r.protocol),pp(t)||(t=e.get("host")??void 0),!pp(t)&&Array.isArray(r))for(let i of r){let a=i.getComponents().filter(({name:c})=>nH.includes(c))?.[0]?.value;if(a!=null){t=a;break}}if(!pp(t)&&Array.isArray(r))for(let i of r){let s=i.getComponents().findLast(a=>a.code===421)?.value;try{let a=Ce(i);a.port!=null&&(n=a.port)}catch{}if(s!=null){t=yt(s).toCID().toString(Gn);break}}if(!pp(t)&&Array.isArray(r))for(let i of r)try{let s=Ce(i);s.host!=null&&(t=s.host);break}catch{}if(pp(t))return o==="http:"&&n!==80&&(t=`${t}:${n}`),o==="https:"&&n!==443&&(t=`${t}:${n}`),t;throw new P("Could not determine request host name - a request must have a host header, be made to a DNS or IP-based multiaddr or an http(s) URL")}function Ky(r){let e="/";return r=r.map(t=>ie(t.getComponents().filter(n=>n.name==="http-path"?(e=n.value??"/",!1):!0))),{httpPath:e,addresses:r}}function Vy(r,e=["GET"]){return r==null?e:(typeof r=="string"&&(r=[r]),r.map(t=>t.toUpperCase()))}function ab(r){let e=r.url??"/";if(e.startsWith("http"))return new URL(e);let t=sH(r);return new URL(`http://${t}${e}`)}function sH(r){let e=r.headers?.host;if(e==null&&(e=r.headers?.Host),e==null&&typeof r.headers.get=="function"&&(e=r.headers.get("host")),e==null)throw new P("Could not read host");return e}function Fy(r,e){return r==="GET"&&e.get("connection")?.toLowerCase()==="upgrade"&&e.get("upgrade")?.toLowerCase()==="websocket"}function vP(r,e){if(r instanceof Headers)return r.get(e)??void 0;let t=r[e];return Array.isArray(t)?t.join(","):t}async function cb(r){if(vP(r,"sec-websocket-version")!=="13")throw new ja("Invalid version");let e=vP(r,"sec-websocket-key");if(e==null)throw new ja("Missing sec-websocket-key");let t=`${e}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,n=await wP.digest(B(t)),o=ud.encode(n.digest).substring(1);return new Headers({Upgrade:"websocket",Connection:"upgrade","Sec-WebSocket-Accept":o})}async function _P(r,e){let t=new fe("REQUEST"),n=new de,o;t[fe.kOnHeadersComplete]=i=>{let s=new Headers;for(let a=0;a<i.headers.length;a+=2)s.set(i.headers[a].toLowerCase(),i.headers[a+1]);o={...i,headers:s,raw:n,method:fe.methods[i.method]}};try{for(;;){let{data:i}=await Zr(r,"message",e?.signal),s=i.subarray(),a=t.execute(s,0,s.byteLength);if(a instanceof Error)throw a;if(n.append(s.subarray(0,a)),a<s.byteLength&&r.push(s.subarray(a)),o!=null)return o}}catch(i){r.abort(i)}finally{t.finish()}throw new Error("Failed to read header info from request")}var Hy=class extends Error{static name="InvalidResponseError";name="InvalidResponseError"};var aH=[101,204,205,304];async function AP(r,e,t){let n=Promise.withResolvers(),o=new TransformStream,i=o.writable.getWriter(),s=!1,a=new fe("RESPONSE");a.maxHeaderSize=t.maxHeaderSize??fe.maxHeaderSize,a[fe.kOnHeadersComplete]=l=>{t.log("response headers complete"),s=!0;let f=new Headers;for(let h=0;h<l.headers.length;h+=2)f.append(l.headers[h],l.headers[h+1]);let u=o.readable;aH.includes(l.statusCode)&&(o.writable.close().catch(()=>{}),o.readable.cancel().catch(()=>{}),u=null);let d=new mi(u,{status:l.statusCode,statusText:l.statusMessage,headers:f});n.resolve(d)},a[fe.kOnBody]=l=>{t.log("response read body %d bytes",l.byteLength),i.write(l).catch(f=>{n.reject(f)})},a[fe.kOnMessageComplete]=()=>{t.log("response message complete"),i.close().catch(l=>{n.reject(l)})};let c=0;return r.addEventListener("message",({data:l})=>{t.log("response stream read %d bytes",l.byteLength),c+=l.byteLength;let f=a.execute(l.subarray(),0,l.byteLength);f instanceof Error&&(r.abort(f),a.finish())}),r.addEventListener("remoteCloseWrite",()=>{s||n.reject(new Hy(`Response ended before headers were received, read ${c} bytes`)),a.finish()}),n.promise}function TP(r,e){return e.set("Content-Length",`${r.size}`),e.set("Content-Type",r.type!=null&&r.type!==""?r.type:"application/octet-stream"),r.stream()}function IP(r,e){return e.set("Content-Length",`${r.byteLength}`),e.set("Content-Type","application/octet-stream"),new ReadableStream({start(t){t.enqueue(gp(r)),t.close()}})}function cH(r,e,t){let n=[`--${t}`],o=0,i=2;return typeof e=="string"?(n.push(`Content-Disposition: form-data; name="${r}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${e.length}`,""),o=e.length+i):(n.push(`Content-Disposition: form-data; name="${r}"; filename="${encodeURIComponent(e.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${e.size}`,""),o=e.size+i),B(n.join(`\r
56
+ `));function $y(r){let e=[];r.get("Connection")==null&&r.set("Connection","close");for(let[t,n]of r.entries())e.push(`${t}: ${n}`);return e}async function*iH(r,e){if(e=parseInt(`${e??""}`),e==null||isNaN(e))return r;let t=0;for await(let n of r){if(t+=n.byteLength,t>e){yield n.subarray(0,t-e);return}if(yield n.subarray(),t===e)return}}function hf(r,e){if(typeof r=="string"&&(r.startsWith("/")?r=ie(r):r=new URL(r)),Rr(r)&&(r=ie(`/p2p/${r}`)),r instanceof URL&&r.protocol==="multiaddr:"&&(r=X2(r.toString())),ni(r)&&(r=[r]),Array.isArray(r)){for(let t of r)if(t.getComponents().some(({name:o})=>o==="http")){let o=ea(t);return new URL(`${o}${e??""}`)}}return e==null?r:r instanceof URL?new URL(`${r}${e.substring(1)}`):r.map(t=>t.encapsulate(`/http-path/${encodeURIComponent(e.substring(1))}`))}function pi(r={}){return r.headers instanceof Headers||(r.headers=new Headers(r.headers)),r.headers}function pp(r){return r!=null&&r!==""}function jy(r,e){let t,n=80,o="http:";if(r instanceof URL&&(t=r.hostname,n=parseInt(r.port,10),o=r.protocol),pp(t)||(t=e.get("host")??void 0),!pp(t)&&Array.isArray(r))for(let i of r){let a=i.getComponents().filter(({name:c})=>nH.includes(c))?.[0]?.value;if(a!=null){t=a;break}}if(!pp(t)&&Array.isArray(r))for(let i of r){let s=i.getComponents().findLast(a=>a.code===421)?.value;try{let a=Ce(i);a.port!=null&&(n=a.port)}catch{}if(s!=null){t=yt(s).toCID().toString(Gn);break}}if(!pp(t)&&Array.isArray(r))for(let i of r)try{let s=Ce(i);s.host!=null&&(t=s.host);break}catch{}if(pp(t))return o==="http:"&&n!==80&&(t=`${t}:${n}`),o==="https:"&&n!==443&&(t=`${t}:${n}`),t;throw new P("Could not determine request host name - a request must have a host header, be made to a DNS or IP-based multiaddr or an http(s) URL")}function Ky(r){let e="/";return r=r.map(t=>ie(t.getComponents().filter(n=>n.name==="http-path"?(e=n.value??"/",!1):!0))),{httpPath:e,addresses:r}}function Vy(r,e=["GET"]){return r==null?e:(typeof r=="string"&&(r=[r]),r.map(t=>t.toUpperCase()))}function ab(r){let e=r.url??"/";if(e.startsWith("http"))return new URL(e);let t=sH(r);return new URL(`http://${t}${e}`)}function sH(r){let e=r.headers?.host;if(e==null&&(e=r.headers?.Host),e==null&&typeof r.headers.get=="function"&&(e=r.headers.get("host")),e==null)throw new P("Could not read host");return e}function Fy(r,e){return r==="GET"&&e.get("connection")?.toLowerCase()==="upgrade"&&e.get("upgrade")?.toLowerCase()==="websocket"}function vP(r,e){if(r instanceof Headers)return r.get(e)??void 0;let t=r[e];return Array.isArray(t)?t.join(","):t}async function cb(r){if(vP(r,"sec-websocket-version")!=="13")throw new ja("Invalid version");let e=vP(r,"sec-websocket-key");if(e==null)throw new ja("Missing sec-websocket-key");let t=`${e}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,n=await wP.digest(B(t)),o=ud.encode(n.digest).substring(1);return new Headers({Upgrade:"websocket",Connection:"upgrade","Sec-WebSocket-Accept":o})}async function _P(r,e){let t=new fe("REQUEST"),n=new de,o;t[fe.kOnHeadersComplete]=i=>{let s=new Headers;for(let a=0;a<i.headers.length;a+=2)s.set(i.headers[a].toLowerCase(),i.headers[a+1]);o={...i,headers:s,raw:n,method:fe.methods[i.method]}};try{for(;;){let{data:i}=await Zr(r,"message",e?.signal),s=i.subarray(),a=t.execute(s,0,s.byteLength);if(a instanceof Error)throw a;if(n.append(s.subarray(0,a)),a<s.byteLength&&r.push(s.subarray(a)),o!=null)return o}}catch(i){r.abort(i)}finally{t.finish()}throw new Error("Failed to read header info from request")}var Hy=class extends Error{static name="InvalidResponseError";name="InvalidResponseError"};var aH=[101,204,205,304];async function AP(r,e,t){let n=Promise.withResolvers(),o=new TransformStream,i=o.writable.getWriter(),s=!1,a=new fe("RESPONSE");a.maxHeaderSize=t.maxHeaderSize??fe.maxHeaderSize,a[fe.kOnHeadersComplete]=l=>{t.log("response headers complete"),s=!0;let f=new Headers;for(let h=0;h<l.headers.length;h+=2)f.append(l.headers[h],l.headers[h+1]);let u=o.readable;aH.includes(l.statusCode)&&(o.writable.close().catch(()=>{}),o.readable.cancel().catch(()=>{}),u=null);let d=new mi(u,{status:l.statusCode,statusText:l.statusMessage,headers:f});n.resolve(d)},a[fe.kOnBody]=l=>{t.log("response read body %d bytes",l.byteLength),i.write(l).catch(f=>{n.reject(f)})},a[fe.kOnMessageComplete]=()=>{t.log("response message complete"),i.close().catch(l=>{n.reject(l)})};let c=0;return r.addEventListener("message",({data:l})=>{t.log("response stream read %d bytes",l.byteLength),c+=l.byteLength;let f=a.execute(l.subarray(),0,l.byteLength);f instanceof Error&&(r.abort(f),a.finish())}),r.addEventListener("remoteCloseWrite",()=>{s||n.reject(new Hy(`Response ended before headers were received, read ${c} bytes`)),a.finish()}),n.promise}function TP(r,e){return e.set("Content-Length",`${r.size}`),e.set("Content-Type",r.type!=null&&r.type!==""?r.type:"application/octet-stream"),r.stream()}function IP(r,e){return e.set("Content-Length",`${r.byteLength}`),e.set("Content-Type","application/octet-stream"),new ReadableStream({start(t){t.enqueue(gp(r)),t.close()}})}function cH(r,e,t){let n=[`--${t}`],o=0,i=2;return typeof e=="string"?(n.push(`Content-Disposition: form-data; name="${r}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${e.length}`,""),o=e.length+i):(n.push(`Content-Disposition: form-data; name="${r}"; filename="${encodeURIComponent(e.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${e.size}`,""),o=e.size+i),B(n.join(`\r
57
57
  `)).byteLength+o}function CP(r,e){let t=`-----------------------------${crypto.randomUUID()}`;e.set("Content-Type",`multipart/form-data; boundary=${t}`);let n=0;for(let[c,l]of r.entries())n+=cH(c,l,t);e.set("Content-Length",`${n}`);let o=r.entries(),i;function s(c,l,f,u){let d=[`--${u}`];typeof f=="string"?d.push(`Content-Disposition: form-data; name="${l}"`,'Content-Type: text/plain; charset="UTF-8"',`Content-Length: ${f.length}`,"",f,""):(d.push(`Content-Disposition: form-data; name="${l}"; filename="${encodeURIComponent(f.name)}"`,"Content-Type: application/octet-stream",`Content-Length: ${f.size}`,""),i=f.stream().getReader()),c.enqueue(B(d.join(`\r
58
58
  `)))}async function a(c,l){if(i!=null){let d=await i.read();d.value!=null&&c.enqueue(d.value),d.done&&(c.enqueue(B(`\r
59
59
  `)),i=void 0);return}let{done:f,value:u}=o.next();if(u!=null){let[d,h]=u;s(c,d,h,l)}f===!0&&c.close()}return new ReadableStream({async pull(c){await a(c,t)}})}function PP(r,e){e.set("Content-Type","application/octet-stream"),e.set("Transfer-Encoding","chunked");let t=r.getReader();return new ReadableStream({async pull(n){let{done:o,value:i}=await t.read();i!=null&&(n.enqueue(B(`${i.byteLength}\r
@@ -62,7 +62,7 @@ ${e.join(`
62
62
  \r
63
63
  `)),n.close())}})}function lb(r,e){return e.set("Content-Length",`${r.length}`),e.set("Content-Type",'text/plain; charset="UTF-8"'),new ReadableStream({start(t){t.enqueue(B(r)),t.close()}})}function kP(r,e){if(r!=null){if(typeof r=="string")return lb(r,e);if(r instanceof Blob)return TP(r,e);if(lH(r))return IP(r,e);if(r instanceof URLSearchParams)return lb(r.toString(),e);if(r instanceof ReadableStream)return PP(r,e);if(r instanceof FormData)return CP(r,e);throw new Error("Unsupported body type")}}function lH(r){return r==null?!1:r.byteLength!=null}async function OP(r,e,t){let n=new Headers(t.headers),o=n.get("host")??e.hostname;n.set("host",o),n.get("user-agent")==null&&n.set("user-agent","libp2p/fetch");let i=kP(t.body,n),s=[`${t?.method?.toUpperCase()??"GET"} ${e.pathname??"/"} HTTP/1.1`,...$y(n),"",""];r.send(B(s.join(`\r
64
64
  `)))||await r.onDrain({signal:t.signal??void 0}),i!=null&&(t.log("request sending body"),await uH(r,i,t))}async function uH(r,e,t){let n=e.getReader();for(;;){let{done:o,value:i}=await n.read();if(i!=null&&(t.log("request send %d bytes",i.byteLength),r.send(i)||await r.onDrain({signal:t.signal??void 0})),o){t.log("request finished sending body");break}}}async function RP(r,e,t={}){let n=r.log.newScope("http-fetch");e=typeof e=="string"?new URL(e):e;let[o]=await Promise.all([AP(r,e,{...t,log:n}),OP(r,e,{...t,log:n})]);return await r.close({signal:t.signal??void 0}),o}var qy=class extends Event{message;error;filename="";lineno=0;colno=0;constructor(e){super("error"),this.error=e,this.message=e.message}},yp=class extends Event{code;reason;wasClean;constructor(e,t){super(e),this.code=t?.code??0,this.reason=t?.reason??"",this.wasClean=t?.wasClean??!0}};var fH={CONTINUATION:0,TEXT:1,BINARY:2,CONNECTION_CLOSE:8,PING:9,PONG:10},ub={0:"CONTINUATION",1:"TEXT",2:"BINARY",8:"CONNECTION_CLOSE",9:"PING",10:"PONG"};var wp={NORMAL_CLOSURE:1e3,GOING_AWAY:1001,PROTOCOL_ERROR:1002,UNSUPPORTED_DATA:1003,RESERVED:1004,NO_STATUS_RECEIVED:1005,ABNORMAL_CLOSURE:1006,INVALID_FRAME_PAYLOAD_DATA:1007,POLICY_VIOLATION:1008,MESSAGE_TOO_BIG:1009,MANDATORY_EXT:1010,INTERNAL_SERVER_ERROR:1011,TLS_HANDSHAKE:1015};function DP(r){let e=0;if(r.byteLength<e+1)return;let n=r.get(e)&15;if(e++,ub[n]==null)throw new Error(`Unknown opcode: ${n}`);if(r.byteLength<e+1)return;let o=r.get(e),i=(o&128)===128,s=o&127;if(e++,s===126){if(r.byteLength<e+2)return;s=r.getUint16(e),e+=2}else if(s===127){if(r.byteLength<e+8)return;s=r.getUint32(e),e+=8}if(s===0)return r.consume(e),{type:ub[n]};let a;if(i){if(r.byteLength<e+4)return;a=r.subarray(e,e+4),e+=4}if(r.byteLength<e+s)return;let c=r.subarray(e,e+s);return e+=s,a!=null&&(c=NP(c,a)),r.consume(e),{type:ub[n],data:c}}function NP(r,e){let t=0;for(let n=0;n<r.byteLength;n++)r[n]=r[n]^e[t],t++,t===e.byteLength&&(t=0);return r}function LP(r,e,t){let o=new de(Uint8Array.from([128|fH[r]])),i=e?.byteLength??0;if(i<126)o.append(Uint8Array.from([i|(t===!0?128:0)]));else if(i<65535){let s=new de(new Uint8Array(3));s.set(0,126|(t===!0?128:0)),s.setUint16(1,i),o.append(s)}else if(i<18446744073709552e3){let s=new de(new Uint8Array(9));s.set(0,127|(t===!0?128:0)),s.setUint32(1,i),o.append(s)}else throw new Error("Payload too large");if(t===!0&&e!=null){let s=Uint8Array.from([0,0,0,0]);o.append(s),e=NP(e,s)}return e!=null&&o.append(e),o}function BP(r){if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof DataView)return gp(r);if(typeof r=="string")return B(r);if(r instanceof Blob)return r.arrayBuffer().then(e=>gp(e));throw new P("Unsupported data type")}async function MP(r,e){return new Promise((t,n)=>{let o=!1,i=new fe("RESPONSE");i[fe.kOnHeadersComplete]=s=>{o=!0;let a=[];for(let c=0;c<s.headers.length;c+=2)a.push([s.headers[c],s.headers[c+1]]);t(new mi(null,{status:s.statusCode,statusText:s.statusMessage,headers:new Headers(a)}))},Promise.resolve().then(async()=>{for(;;){let{data:s}=await Zr(r,"message",e.signal),a=s.subarray(),c=i.execute(a,0,a.byteLength);if(c instanceof Error)throw c;if(c<a.byteLength&&r.push(a.subarray(c)),o)break}}).catch(s=>{n(s)})})}async function*UP(r,e=[],t){let n=ud.encode(crypto.getRandomValues(new Uint8Array(16))).substring(1);t.set("host",r.hostname),t.set("connection","upgrade"),t.set("upgrade","websocket"),t.set("pragma","no-cache"),t.set("cache-control","no-cache"),t.set("sec-websocket-version","13"),t.set("sec-websocket-key",n),e.length>0&&t.set("sec-websocket-protocol",e.join(", ")),yield B([`GET ${r.pathname??"/"} HTTP/1.1`,...[...t.entries()].map(([o,i])=>`${o}: ${i}`),"",""].join(`\r
65
- `))}var dH=["BINARY","TEXT","CONTINUATION"],hH=10485760;var pH="/http/1.1",Wy=class extends _e{binaryType="arraybuffer";bufferedAmount=0;extensions="";protocol="";readyState;url;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;_onclose;_onerror;_onmessage;_onopen;sentClose;isClient;buffer;maxMessageSize;_url;closeController;constructor(e,t={}){super(),this.readyState=this.CONNECTING,this.url=e.pathname,this.sentClose=!1,this.isClient=t.isClient??!0,this.buffer=new de,this.closeController=new AbortController,this.maxMessageSize=t.maxMessageSize??hH}send(e){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");let t=BP(e);t0(t)?t.then(n=>{this._send("BINARY",n)}).catch(n=>{this._errored(n)}):this._send("BINARY",t)}_send(e,t){if(this.readyState!==this.OPEN)return;let n=LP(e,t,this.isClient),o=n.byteLength;this.bufferedAmount+=o,this._write(n,i=>{this.bufferedAmount-=o,i!=null&&this._errored(i)})}close(e,t){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");this.readyState=this.CLOSING,this.sentClose=!0,this._send("CONNECTION_CLOSE")}_errored(e){this.readyState=this.CLOSED,this.dispatchEvent(new qy(e))}set onclose(e){this._onclose=e,this.addEventListener("close",e)}get onclose(){return this._onclose??null}set onerror(e){this._onerror=e,this.addEventListener("error",e)}get onerror(){return this._onerror??null}set onmessage(e){this._onmessage=e,this.addEventListener("message",e)}get onmessage(){return this._onmessage??null}set onopen(e){this._onopen=e,this.addEventListener("open",e)}get onopen(){return this._onopen??null}_push(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxMessageSize){this.close(wp.MESSAGE_TOO_BIG,"Max message size exceeded");return}for(;;){let t=DP(this.buffer);if(t==null)break;if(dH.includes(t.type)&&t.data!=null){let n;this.binaryType==="blob"?n=new Blob([t.data]):t.data.byteOffset===0&&t.data.byteLength===t.data.buffer.byteLength?n=t.data.buffer:(n=new ArrayBuffer(t.data.byteLength),new Uint8Array(n,0,n.byteLength).set(t.data)),this.dispatchEvent(new MessageEvent("message",{data:n,origin:this._url?.hostname}))}t.type==="PING"&&this._send("PONG",t.data),t.type==="CONNECTION_CLOSE"&&(this.sentClose||this.close(),this.closeController.abort(),this._close(void 0,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new yp("close"))}))}}_remoteClosed(e){this.readyState=this.CLOSING,this._close(e,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new yp("close"))})}};var bp=class extends Wy{writer;writable;constructor(e,t,n={}){if(super(new URL(e.url),{...n,isClient:!1}),e.body==null)throw new P("Request body cannot be null");this.readyState=this.OPEN,this.writable=t,this.writer=t.getWriter();let o=e.body.getReader();Promise.resolve().then(async()=>{for(this.dispatchEvent(new Event("open"));;){let{value:i,done:s}=await o.read();if(i!=null&&this._push(i),s){this._remoteClosed();break}}}).catch(i=>{this._errored(i)})}_write(e,t){this.writer?.write(e).then(()=>{t()},n=>{t(n)})}_close(e,t){e!=null?this.writable.abort(e).then(()=>{t()},()=>{t()}):this.writable.close().then(()=>{t()},()=>{t()})}},vp=class extends Wy{stream;handshakeTimeout;drainTimeout;constructor(e,t,n,o){super(t,{...o,isClient:!0}),this.handshakeTimeout=o.handshakeTimeout??1e4,this.drainTimeout=o.drainTimeout??1e4,Promise.resolve().then(async()=>{let i=AbortSignal.timeout(this.handshakeTimeout);this.stream=await n.openStream(e,pH,{...o,signal:i});for await(let a of UP(t,o.protocols,pi(o)))this.stream.send(a)||await this.stream.onDrain({signal:i});let s=await MP(this.stream,{signal:i});if(s.status!==101)throw new Error("Invalid WebSocket handshake - response status "+s.status);await o.onHandshakeResponse?.(s,{signal:i}),this.protocol=s.headers.get("Sec-WebSocket-Protocol")??"",this.readyState=this.OPEN,this.dispatchEvent(new Event("open"));for await(let a of this.stream)this._push(a)}).catch(i=>{this._errored(i)})}_write(e,t){if(this.stream==null){t(new Error("WebSocket was not open"));return}this.stream.send(e)?t():this.stream.onDrain({signal:AbortSignal.timeout(this.drainTimeout)}).then(()=>{t()},n=>{t(n)})}_close(e,t){if(this.stream==null){t();return}if(e!=null){this.stream.abort(e),t();return}this.stream.close().catch(n=>{this.stream?.abort(n)}).finally(()=>{t()})}};var xp="/http/1.1";var zy=Symbol.for("@libp2p/http/websocket-handler");var qP=nr(VP(),1),Xy=class{log;cookies;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:http:cookies"),this.cookies=new Map}async prepareRequest(e,t){if((t.credentials??"same-origin")==="omit")return;let o=t.headers.get("origin");if(o==null||o==="null")return;let i=mp(e,t.headers),s=(this.cookies.get(i.hostname)??[]).filter(a=>!(a.expires!=null&&a.expires<Date.now()||a.path!=null&&!i.pathname.startsWith(a.path))).map(a=>`${a.name}=${a.value}`).join("; ");s.length>0&&t.headers.set("cookie",s)}async processResponse(e,t,n){if((t.credentials??"same-origin")==="omit"){HP(n);return}let i=t.headers.get("origin");if(i==null||i==="null")return;let s=mp(e,t.headers);for(let a of n.headers.getSetCookie()){let c=[...this.cookies.get(s.hostname)??[],...SH(qP.default.parse(a))];this.cookies.set(s.hostname,c)}HP(n)}};function HP(r){return r.headers.has("set-cookie")&&r.headers.delete("set-cookie"),r}function SH(r){let e={},t=[];return Object.entries(r).forEach(([n,o])=>{n.toLowerCase()==="domain"&&o!=null&&(e.domain=o),n.toLowerCase()==="max-age"&&o!=null&&(e.expires=Date.now()+parseInt(o,10)*1e3),!_H.includes(n.toLowerCase())&&o!=null&&t.push({name:n,value:o})}),t.map(n=>({...n,...e}))}var _H=["domain","expires","httponly","max-age","partitioned","path","samesite","secure"];var Yy=class{async prepareRequest(e,t){if(t.headers.get("origin")!=null||t.mode==="no-cors")return;let n=mp(e,t.headers);t.headers.set("origin",`${n.protocol}//${n.host}`)}};function AH(r){return typeof r.init=="function"}function Qy(r,e){if(AH(r)){let t=r;return t.handler=r.init(e),delete t.init,t}return r}function WP(r){let e=Vy(r.method,["GET"]);if(r.fallback==null&&e.filter(n=>n!=="GET").length>0)throw new P("WebSocket handlers only support the GET HTTP method");let t={...r,init:n=>{let o=Qy(r,n);return t[zy]=o.handler,async i=>{if(!Fy(i.method,i.headers))return r?.fallback!=null?r.fallback(i):new mi(null,{status:400});let s=new TransformStream;try{let a=new mi(s.readable,{status:101,headers:await cb(i.headers)}),c=new bp(i,s.writable,r);return o.handler(c),a}catch{return new mi(null,{status:500})}}}};return t}var Zy="/.well-known/libp2p/protocols";function zP(r){return WP({path:Zy,method:["GET"],cors:!0,handler:e=>{let t=JSON.stringify(r.getProtocolMap());e.send(t),e.close()},fallback:async e=>{let t=JSON.stringify(r.getProtocolMap());return new Response(t,{headers:{"Content-Type":"application/json","Content-Length":`${t.length}`}})}})}var Jy=class{log;components;protocols;endpoint;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http:registrar"),this.protocols=[],this.onStream=this.onStream.bind(this),this.endpoint=t.server,this.handle("",zP(this))}async start(){await this.components.registrar.handle(xp,this.onStream.bind(this))}async stop(){await this.components.registrar.unhandle(xp)}async onStream(e,t){let n=await _P(e);if(this.canHandle(n)){this.log("handling incoming request %s %s",n.method,n.url);let o=await this.onRequest(xP(n,e));await EP(o,e),await e.close();return}if(this.endpoint==null){this.log("cannot handle incoming request %s %s and no endpoint configured",n.method,n.url),e.send(SP),await e.close();return}this.log("passing incoming request %s %s to endpoint",n.method,n.url),this.endpoint.inject(n,e,t).catch(o=>{this.log.error("error injecting request to endpoint - %e",o),e.abort(o)})}canHandle(e){let t=ab(e).pathname;return this.protocols.find(n=>n.route.path===t)!=null?(this.log.trace("can handle %s",t),!0):(this.log.trace("cannot handle %s",t),!1)}async onRequest(e){this.log("incoming request %s %s",e.method,e.url);let t=this.findHandler(e.url);if(t==null)return new Response(null,{status:404});let n;return t.route.method.includes(e.method)?n=await t.route.handler(e):e.method==="OPTIONS"?n=new Response(null,{status:204}):n=new Response(null,{status:405}),TH(n,e,t),this.log("%s %s %d %s",e.method,e.url,n.status,n.statusText),n}onWebSocket(e){let t=this.findHandler(e.url);if(t!=null){let n=t.route[zy];if(n!=null){n(e);return}}e.close(wp.NORMAL_CLOSURE)}findHandler(e){let t=e.startsWith("/")?e:new URL(e).pathname;this.log("search for handler on path %s",t);let n=this.protocols.find(o=>o.route.path===t);return n!=null&&this.log("found handler for HTTP protocol %s on path %s",n.protocol,e),n}handle(e,t){if(t.path=t.path??e,this.protocols.find(n=>n.protocol===e)!=null)throw new P(`HTTP protocol handler for ${e} already registered`);(t.path===""||!t.path.startsWith("/"))&&(t.path=`/${t.path}`),t.cors=t.cors??!0,t.method=Vy(t.method),t=Qy(t,this.components),this.protocols.push({protocol:e,route:t}),this.protocols.sort(({route:{path:n}},{route:{path:o}})=>o.length-n.length)}unhandle(e){this.protocols=this.protocols.filter(t=>t.protocol===e)}getProtocolMap(){let e={};for(let t of this.protocols)t.protocol!==""&&(e[t.protocol]={path:t.route.path});return e}};function TH(r,e,t){let n=[...new Set(["OPTIONS",...t.route.method])].join(", ");t.route.cors&&(e.headers.get("Access-Control-Request-Method")!=null&&r.headers.set("access-control-allow-methods",n),e.headers.get("Access-Control-Request-Headers")!=null&&r.headers.set("access-control-allow-headers",e.headers.get("Access-Control-Request-Headers")??""),e.headers.get("Origin")!=null&&(r.headers.set("access-control-allow-origin",e.headers.get("Origin")??""),r.headers.set("vary","Origin"))),e.method==="OPTIONS"&&r.headers.set("allow",n)}async function GP(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function XP(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function YP(r,e,t){for(let n of e.middleware)await n.processResponse?.(r,e,t);return t}var e3=class{log;components;httpRegistrar;origin;cookies;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http"),this.httpRegistrar=new Jy(e,t),this.origin=new Yy,this.cookies=new Xy(e,t)}[Symbol.toStringTag]="@libp2p/http";[qe]=["@libp2p/http"];async start(){await er(this.httpRegistrar)}async stop(){await or(this.httpRegistrar)}agent(...e){throw new sd("This method is not supported in browsers")}dispatcher(...e){throw new sd("This method is not supported in browsers")}async connect(e,t={}){let n=hf(e),o=pi(t),i={...t,headers:o,method:"GET",middleware:t.middleware?.map(s=>s(this.components))??[]};return o.set("connection","upgrade"),o.set("upgrade","websocket"),XP(n,i,async()=>{if(n instanceof URL){let c=new globalThis.WebSocket(n,t.protocols);return c.binaryType="arraybuffer",c}let{addresses:s,httpPath:a}=Ky(n);return new vp(s,new URL(`http://${jy(n,i.headers)}${decodeURIComponent(a)}`),this.components.connectionManager,i)})}async fetch(e,t={}){let n=hf(e),o={...t,headers:pi(t),method:"GET",middleware:[this.origin,this.cookies,...t.middleware?.map(s=>s(this.components))??[]]},i=await GP(n,o,async()=>this.sendRequest(n,t));return YP(n,o,i)}async connectProtocol(e,t,n){let o=await this.getProtocolPath(e,t,n),i=hf(e,o);return this.connect(i,n)}async fetchProtocol(e,t,n={}){let o=await this.getProtocolPath(e,t,n),i=hf(e,o);return this.fetch(i,n)}async getSupportedProtocols(e,t={}){let n=hf(e,Zy),o=await this.fetch(n,{method:"GET",headers:{Accept:"application/json"},signal:t.signal});if(o.status!==200)throw new Error(`Unexpected status code: ${o.status}`);return o.json()}async getProtocolPath(e,t,n={}){let o=await this.getSupportedProtocols(e,n);if(o[t]==null)throw new Error(`Peer does not serve protocol: ${t}`);return o[t].path}canHandle(e){return this.httpRegistrar.canHandle(e)}async onRequest(e){return this.httpRegistrar.onRequest(e)}onWebSocket(e){this.httpRegistrar.onWebSocket(e)}handle(e,t){this.httpRegistrar.handle(e,t)}unhandle(e){this.httpRegistrar.unhandle(e)}getProtocolMap(){return this.httpRegistrar.getProtocolMap()}async sendRequest(e,t){if(e instanceof URL)return this.log("making request to %s with global fetch"),globalThis.fetch(e,t);this.log("making request to %s with libp2p fetch",e);let n=jy(e,pi(t)),{addresses:o,httpPath:i}=Ky(e),a=await(await this.components.connectionManager.openConnection(o,{signal:t.signal??void 0})).newStream(xp,{signal:t.signal??void 0});return RP(a,new URL(`http://${n}${decodeURIComponent(i)}`),t)}};function QP(r={}){return e=>new e3(e,r)}var ZP="0.1.0";var JP="id/push",ek="1.0.0",tk="1.0.0";var ca;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 5:{i.protocolVersion=t.string();break}case 6:{i.agentVersion=t.string();break}case 1:{i.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&i.listenAddrs.length===o.limits.listenAddrs)throw new dt('Decode error - map field "listenAddrs" had too many elements');i.listenAddrs.push(t.bytes());break}case 4:{i.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&i.protocols.length===o.limits.protocols)throw new dt('Decode error - map field "protocols" had too many elements');i.protocols.push(t.string());break}case 8:{i.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(ca||(ca={}));var pn={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function rk(r){if(r!=null&&r.length>0)try{return ie(r)}catch{}}async function t3(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new Be("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:ie(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=Vt(o.publicKey);if(!ii(c).equals(n.remotePeer))throw new Be("public key did not match remote PeerId");i.publicKey=c}let s;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await Mn.openAndCertify(c,Jr.DOMAIN),f=Jr.createFromProtobuf(l.payload),u=Do(l.publicKey.toCID());if(!f.peerId.equals(u))throw new Be("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(f.peerId))throw new Be("signing key does not match remote PeerId");let d;try{d=await r.get(f.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(d!=null&&(i.metadata=d.metadata,d.peerRecordEnvelope!=null)){let h=Mn.createFromProtobuf(d.peerRecordEnvelope),m=Jr.createFromProtobuf(h.payload);m.seqNumber>=f.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",m.seqNumber,f.seqNumber),f=m,c=d.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=f.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),s={seq:f.seqNumber,addresses:f.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,i),await r.patch(n.remotePeer,i),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=B(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=B(o.protocolVersion)),t.trace("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:o.protocolVersion,agentVersion:o.agentVersion,publicKey:o.publicKey,listenAddrs:o.listenAddrs.map(c=>ie(c)),observedAddr:o.observedAddr==null?void 0:ie(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var pf=class{host;components;protocol;started;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.components=e,this.log=t.log,this.timeout=t.timeout??pn.timeout,this.maxInboundStreams=t.maxInboundStreams??pn.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??pn.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??pn.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??pn.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??pn.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??pn.protocolPrefix}/${ZP}`,agentVersion:e.nodeInfo.userAgent},this.handleProtocol=this.handleProtocol.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.peerStore.merge(this.components.peerId,{metadata:{AgentVersion:B(this.host.agentVersion),ProtocolVersion:B(this.host.protocolVersion)}}),await this.components.registrar.handle(this.protocol,this.handleProtocol,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}};var r3=class extends pf{connectionManager;concurrency;_push;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??pn.protocolPrefix}/${JP}/${tk}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??pn.concurrency,this._push=$i(this.sendPushMessage.bind(this),t.debounce??1e3),(t.runOnSelfUpdate??pn.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error("error pushing updates to peers - %e",o)})})}[qe]=["@libp2p/identify-push"];async push(){this._push()}async sendPushMessage(){if(this.isStarted())try{let e=this.components.addressManager.getAddresses().map(f=>f.decapsulateCode(421)),t=new Jr({peerId:this.components.peerId,multiaddrs:e}),n=await Mn.seal(t,this.components.privateKey),o=this.components.registrar.getProtocols(),i=await this.components.peerStore.get(this.components.peerId),s=j(i.metadata.get("AgentVersion")??B(this.host.agentVersion)),a=j(i.metadata.get("ProtocolVersion")??B(this.host.protocolVersion)),c=this;async function*l(){for(let f of c.connectionManager.getConnections())(await c.components.peerStore.get(f.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let d,h=AbortSignal.timeout(c.timeout);try{d=await f.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await bt(d,{maxDataLength:c.maxMessageSize}).pb(ca).write({listenAddrs:e.map(w=>w.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:h}),await d.close({signal:h})}catch(m){d?.log.newScope("identify-push")?.error("could not push identify update to peer",m),d?.abort(m)}})}await an(rs(l(),{concurrency:this.concurrency}))}catch(e){this.log.error("error pushing updates to peers - %e",e)}}async handleProtocol(e,t){let n=e.log.newScope("identify-push");if(this.components.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await bt(e,{maxDataLength:this.maxMessageSize}).pb(ca).read(o);await e.close(o),await t3(this.components.peerStore,this.components.events,n,t,s),n.trace("handled push from %p",t.remotePeer)}};var n3=class extends pf{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??pn.protocolPrefix}/${"id"}/${ek}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??pn.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(()=>{})})}[qe]=["@libp2p/identify"];async _identify(e,t={}){let n,o;if(t.signal==null){let i=AbortSignal.timeout(this.timeout);t={...t,signal:i}}this.log("run identify on new connection %a",e.remoteAddr);try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection}),o=n.log.newScope("identify");let i=bt(n,{maxDataLength:this.maxMessageSize}).pb(ca),s=await i.read(t);return await i.unwrap().unwrap().close(t),s}catch(i){throw o?.error("identify failed - %e",i),n?.abort(i),i}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new Be("Public key was missing from identify message");let a=Vt(o),c=Do(a.toCID());if(!e.remotePeer.equals(c))throw new Be("Identified peer does not match the expected peer");if(this.components.peerId.equals(c))throw new Be("Identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("completed for peer %p and protocols %o",c,i),t3(this.components.peerStore,this.components.events,this.log,e,n)}maybeAddObservedAddress(e){let t=rk(e);if(t==null||(this.log.trace("our observed address was %a",t),Mt(t)))return;let n=t.getComponents();if((n[0].code===41||n[0].code===42&&n[1].code===41)&&!Wm(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Pc.exactMatch(t)||(this.log.trace("storing the observed address"),this.components.addressManager.addObservedAddr(t))}async handleProtocol(e,t){let n=e.log.newScope("identify");n("responding to identify");let o=AbortSignal.timeout(this.timeout);let i=await this.components.peerStore.get(this.components.peerId,{signal:o}),s=this.components.addressManager.getAddresses().map(f=>f.decapsulateCode(421)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let f=new Jr({peerId:this.components.peerId,multiaddrs:s});a=(await Mn.seal(f,this.components.privateKey,{signal:o})).marshal().subarray()}let c=t.remoteAddr.bytes;oT.matches(t.remoteAddr)||(c=void 0);let l=bt(e).pb(ca);n("send response"),await l.write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:sr(this.components.privateKey.publicKey),listenAddrs:s.map(f=>f.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),n("close write"),await l.unwrap().unwrap().close({signal:o})}};function nk(r={}){return e=>new n3(e,r)}function ok(r={}){return e=>new r3(e,r)}var Jc=1e3,hb=60*Jc,o3=60*hb,ik="/ipfs/kad/1.0.0",i3=48*o3;var sk=24*o3,ak=10,ck=16384,lk=o3,pb=o3,awe=10*Jc,uk=10*Jc;var s3=20,la=10,fk=5*hb,dk=Jc,hk=5*Jc,pk=5*hb,mk=30*Jc,gk=180*Jc,mb=`${Ha}-kad-dht`;var Ep;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={key:ke(0),value:ke(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(Ep||(Ep={}));function yk(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),i=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${i}:${s}.${c}Z`}function wk(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,i=parseInt(t[3],10),s=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,i,s,a,c,l))}var Ar=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return Ep.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:yk(this.timeReceived)}}static deserialize(e){let t=Ep.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=wk(e.timeReceived);if(e.key==null)throw new Error("key missing from deserialized object");if(e.value==null)throw new Error("value missing from deserialized object");return new r(e.key,e.value,t)}};var ua=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},a3=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},c3=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var bk;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 3:{i.author=t.bytes();break}case 4:{i.signature=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(bk||(bk={}));var tt;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(tt||(tt={}));var l3;(function(r){r[r.PUT_VALUE=0]="PUT_VALUE",r[r.GET_VALUE=1]="GET_VALUE",r[r.ADD_PROVIDER=2]="ADD_PROVIDER",r[r.GET_PROVIDERS=3]="GET_PROVIDERS",r[r.FIND_NODE=4]="FIND_NODE",r[r.PING=5]="PING"})(l3||(l3={}));(function(r){r.codec=()=>Ot(l3)})(tt||(tt={}));var gf;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(gf||(gf={}));var gb;(function(r){r[r.NOT_CONNECTED=0]="NOT_CONNECTED",r[r.CONNECTED=1]="CONNECTED",r[r.CAN_CONNECT=2]="CAN_CONNECT",r[r.CANNOT_CONNECT=3]="CANNOT_CONNECT"})(gb||(gb={}));(function(r){r.codec=()=>Ot(gb)})(gf||(gf={}));var mf;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let i of t.multiaddrs)n.uint32(18),n.bytes(i);t.connection!=null&&(n.uint32(24),gf.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ke(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&i.multiaddrs.length===o.limits.multiaddrs)throw new dt('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=gf.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(mf||(mf={}));var fa;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&l3[t.type]!==0&&(n.uint32(8),tt.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let i of t.closer)n.uint32(66),mf.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),mf.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:tt.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.type=tt.codec().decode(t);break}case 10:{i.clusterLevel=t.int32();break}case 2:{i.key=t.bytes();break}case 3:{i.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&i.closer.length===o.limits.closer)throw new dt('Decode error - map field "closer" had too many elements');i.closer.push(mf.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&i.providers.length===o.limits.providers)throw new dt('Decode error - map field "providers" had too many elements');i.providers.push(mf.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(fa||(fa={}));function yb(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new CustomEvent("kad-dht:query:send-query",{detail:t})),t}function Sp(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer??[],providers:r.providers??[]};return e.onProgress?.(new CustomEvent("kad-dht:query:peer-response",{detail:t})),t}function u3(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function $o(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function wb(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function _p(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function bb(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function vk(r,e={}){let t={...r,name:"PATH_ENDED",type:8};return e.onProgress?.(new CustomEvent("kad-dht:query:path-ended",{detail:t})),t}function xk(r,e,t){if(t.length===0)throw new P("No records given");let o=j(e).split("/");if(o.length<3)throw new P("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new c3(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function RH(r,e){return 0}var Ek={pk:RH};async function yf(r,e,t){let n=e.key,i=j(n).split("/");if(i.length<3)return;let s=r[i[1].toString()];if(s==null)throw new P(`No validator available for key type "${i[1]}"`);await s(n,e.value,t)}var DH=async(r,e,t)=>{if(!(r instanceof Uint8Array))throw new P('"key" must be a Uint8Array');if(r.byteLength<5)throw new P("Invalid public key record");if(j(r.subarray(0,4))!=="/pk/")throw new P("key was not prefixed with /pk/");let o=Vt(e),i=r.slice(4);if(!we(i,o.toMultihash().bytes))throw new P("public key does not match passed in key")},Sk={pk:DH};var NH=B("/pk/");function _k(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>!Mt(e))}}async function da(r,e){let t=await St.digest(r);return e?.signal?.throwIfAborted(),t.digest}async function mn(r,e){return da(r.toMultihash().bytes,e)}function ha(r,e){return new ht(`${r}/${j(e,"base32")}`,!1)}function Ak(r){return gt([NH,r.toMultihash().bytes])}function Tk(r){return j(r.subarray(0,4))==="/pk/"}function Ik(r){let e=lt(r.subarray(4));return Ut(e)}function vb(r,e){let t=new Date;return new Ar(r,e,t).serialize()}function f3(r){let e=r.toString().split("/"),t=e.pop(),n=e.pop();if(t==null||n==null)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:ce.createV1(Ga,lt(B(n,"base32"))),peerId:yt(t)}}function d3(r,e,t){let n=typeof e=="string"?e:j(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new ht(o.join("/"))}function h3(r){return new Date(Cn(r))}function el(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),i=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}function p3(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),i=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}var m3=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:i,queryManager:s,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e,t){this.log("getLocal %b",e);let n=ha(this.datastorePrefix,e);this.log("fetching record for key %k",n);let o=await this.components.datastore.get(n,t);this.log("found %k in local datastore",n);let i=Ar.deserialize(o);return await yf(this.validators,i,t),i}async*sendCorrectionRecord(e,t,n,o){this.log("sendCorrection for %b",e);let i=vb(e,n);for(let{value:s,from:a}of t){if(we(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let f=ha(this.datastorePrefix,e);this.log(`Storing corrected record for key ${f.toString()}`),await this.components.datastore.put(f,i.subarray(),o)}catch(f){this.log.error("failed error correcting self - %e",f)}continue}let c=!1,l={type:tt.PUT_VALUE,key:e,record:i};for await(let f of this.network.sendRequest(a,l,o))f.name==="PEER_RESPONSE"&&f.record!=null&&we(f.record.value,Ar.deserialize(i).value)&&(c=!0),yield f;if(!c)throw new ua("Could not send correction");this.log.error("failed error correcting entry")}}async*put(e,t,n){this.log("put key %b value %b",e,t);let o=vb(e,t),i=ha(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray(),n),yield*xu(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>to(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:tt.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let f of this.network.sendRequest(a.peer.id,l,{...n,path:a.path}))c.push(f),f.name==="PEER_RESPONSE"&&(f.record!=null&&we(f.record.value,Ar.deserialize(o).value)||c.push($o({from:a.peer.id,error:new ua("Value not put correctly"),path:f.path},n)));return c}),s=>rs(s,{ordered:!1,concurrency:la}),async function*(s){for await(let a of s)yield*a})}async*get(e,t){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t)){if(a.name==="VALUE"){n.push(a);continue}yield a}if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=xk(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=o[i];if(this.log("GetValue %b %b",e,s),s==null)throw new Xe("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,{...t,path:{index:-1,queued:0,running:0,total:0}}),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e,t);yield _p({value:i.value,from:this.components.peerId,path:{index:-1,running:0,queued:0,total:0}},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s,path:a}){for await(let c of n.peerRouting.getValueOrPeers(i.id,e,{...t,signal:s,path:a}))yield c,c.name==="PEER_RESPONSE"&&c.record!=null&&(yield _p({from:i.id,value:c.record.value,path:a},t))};yield*this.queryManager.run(e,o,t)}};function Ck(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Ap(r){if(r.id==null)throw new Error("Invalid peer in message");let e=lt(r.id);return{id:Ut(e),multiaddrs:(r.multiaddrs??[]).map(t=>ie(t))}}var g3=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:i,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=i,this.routingTable=s,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,f)=>(l.name==="PROVIDER"&&(f.providers??=[],f.providers.push(...l.providers.map(u=>u.id.toString()))),f)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,f)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(f.providers??=[],f.providers.push(l.from.toString())),f)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId,n);let i={type:tt.ADD_PROVIDER,key:o,providers:[Ck({id:this.components.peerId,multiaddrs:t})]},s=0,a=this;async function*c(u){try{a.log("sending provider record for %s to %p",e,u.peer.id);for await(let d of a.network.sendMessage(u.peer.id,i,{...n,path:u.path}))d.name==="PEER_RESPONSE"&&(a.log("sent provider record for %s to %p",e,u.peer.id),s++),yield d}catch(d){a.log.error("error sending provide record to peer %p - %e",u.peer.id,d),yield $o({from:u.peer.id,error:d,path:u.path},n)}}let l=gr({objectMode:!0}),f=new yr({concurrency:la});f.addEventListener("idle",()=>{l.end()}),f.addEventListener("failure",u=>{this.log.error("error publishing provider record to peer - %e",u.detail.error)}),f.add(async()=>{let u=[];for await(let d of this.peerRouting.getClosestPeers(o,n))l.push(d),d.name==="FINAL_PEER"&&u.push(d);u.forEach(d=>{f.add(async()=>{for await(let h of c(d))l.push(h)}).catch(h=>{this.log.error("error publishing provider record to peer - %e",h)})})}).catch(u=>{l.end(u)}),yield*l,this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,i=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e,t);if(a.length>0){let f=[];for(let u of a.slice(0,n))try{let d=await this.components.peerStore.get(u,t);f.push({id:u,multiaddrs:d.addresses.map(({multiaddr:h})=>h)})}catch(d){if(d.name!=="NotFoundError")throw d;this.log("no peer store entry for %p",u)}if(yield Sp({from:this.components.peerId,messageType:tt.GET_PROVIDERS,providers:f,path:{index:-1,queued:0,running:0,total:0}},t),yield wb({from:this.components.peerId,providers:f,path:{index:-1,queued:0,running:0,total:0}},t),o+=f.length,o>=n)return}let c=async function*({peer:f,signal:u,path:d}){let h={type:tt.GET_PROVIDERS,key:i};yield*s.network.sendRequest(f.id,h,{...t,signal:u,path:d})},l=new Bn(a);for await(let f of this.queryManager.run(i,c,t))if(yield f,f.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",f.providers.length,e,f.closer.length);let u=[];for(let d of f.providers)l.has(d.id)||(l.add(d.id),u.push(d));if(u.length>0&&(yield wb({from:f.from,providers:u,path:f.path},t),o+=u.length,o>=n))return}}};var y3=class extends _e{log;protocol;running;components;timeout;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=t.protocol,this.timeout=new Io({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_errors_total`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendMessage}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new P("Message type was missing");let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield bb({peer:e,path:n.path},n),i=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield yb({to:e,type:o,path:n.path},n);let a=await this._writeReadMessage(i,t,n);i.close(n).catch(c=>{this.log.error("error closing stream to %p - %e",e,c),i?.abort(c)}),yield Sp({from:e,messageType:a.type,closer:a.closer.map(Ap),providers:a.providers.map(Ap),record:a.record==null?void 0:Ar.deserialize(a.record),path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield $o({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new P("Message type was missing");let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield bb({peer:e,path:n.path},n),i=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield yb({to:e,type:o,path:n.path},n),await this._writeMessage(i,t,n),i.close(n).catch(a=>{this.log.error("error closing stream to %p - %e",e,a),i?.abort(a)}),yield Sp({from:e,messageType:o,path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield $o({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await bt(e).write(t,fa,n)}async _writeReadMessage(e,t,n){let o=bt(e);await o.write(t,fa,n);let i=await o.read(fa,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:Ap(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:Ap(s)})}),i}};function tl(r,e){if(r.byteLength!==e.byteLength)throw new Error("Inputs should have the same length");for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}var pa=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return[...this.peerDistances]}async add(e,t={index:-1,queued:0,running:0,total:0},n){let o=await mn(e.id,n);this.addWithKadId(e,o,t)}addWithKadId(e,t,n={index:-1,queued:0,running:0,total:0}){if(this.peerDistances.find(s=>s.peer.id.equals(e.id))!=null)return;let o={peer:e,distance:Uo(this.originDhtKey,t),path:n};if(this.peerDistances.length===this.capacity){let s=this.peerDistances[this.peerDistances.length-1];if(s!=null&&tl(o.distance,s.distance)!==-1)return}let i=!1;for(let s=0;s<this.peerDistances.length;s++){let a=tl(this.peerDistances[s].distance,o.distance);if(a===0||a===1){i=!0,this.peerDistances.splice(s,0,o);break}}i||this.peerDistances.push(o),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e,t){if(this.length===0)return!0;let n=await mn(e,t),o=Uo(n,this.originDhtKey),i=this.peerDistances[this.peerDistances.length-1].distance;return tl(o,i)===-1}async anyCloser(e,t){return e.length===0?!1:Promise.any(e.map(async n=>this.isCloser(n,t)))}};var w3=class{log;routingTable;network;validators;queryManager;components;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async findPeerLocal(e,t){let n,o=await this.routingTable.find(e,t);if(o!=null){this.log("findPeerLocal found %p in routing table",e);try{n=await this.components.peerStore.get(o,t)}catch(i){if(i.name!=="NotFoundError")throw i}}if(n==null)try{n=await this.components.peerStore.get(e,t)}catch(i){if(i.name!=="NotFoundError")throw i}if(n!=null)return this.log("findPeerLocal found %p in peer store",e),{id:n.id,multiaddrs:n.addresses.map(i=>i.multiaddr)}}async*_getValueSingle(e,t,n){let o={type:tt.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=Ak(e),o={index:-1,queued:0,running:0,total:0};for await(let i of this._getValueSingle(e,n,{...t,path:o}))if(yield i,i.name==="PEER_RESPONSE"&&i.record!=null){let s=Vt(i.record.value),a=ii(s);if(!a.equals(e))throw new ki("public key does not match id");if(a.publicKey==null)throw new ki("public key missing");yield _p({from:e,value:i.record.value,path:o},t)}throw new ua(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e,t);if(o!=null){this.log("found local"),yield u3({from:this.components.peerId,peer:o,path:{index:-1,queued:0,running:0,total:0}},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a,path:c}){let l={type:tt.FIND_NODE,key:e.toMultihash().bytes};for await(let f of o.network.sendRequest(s.id,l,{...t,signal:a,path:c}))if(yield f,f.name==="PEER_RESPONSE"){let u=f.closer.find(d=>d.id.equals(e));u!=null&&(yield u3({from:f.from,peer:u,path:f.path},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}if(!n)throw new Xe("Not found")}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await da(e,t),o=new pa(n,this.routingTable.kBucketSize),i=this,s=async function*({peer:a,path:c,peerKadId:l,signal:f}){i.log("getClosestPeers asking %p",a.id);let u={type:tt.FIND_NODE,key:e};yield*i.network.sendRequest(a.id,u,{...t,signal:f,path:c}),o.addWithKadId(a,l,c)};yield*this.queryManager.run(e,s,t),this.log("found %d peers close to %b",o.length,e);for(let{peer:a,path:c}of o.peers)try{if(a.multiaddrs.length===0&&(a=await i.components.peerStore.getInfo(a.id,t)),a.multiaddrs.length===0)continue;yield u3({from:this.components.peerId,peer:await i.components.peerStore.getInfo(a.id,t),path:{index:c.index,queued:0,running:0,total:0}},t)}catch{continue}}async*getValueOrPeers(e,t,n){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record,n)}catch{let s="invalid record received, discarded";this.log(s),yield $o({from:o.from,error:new ua(s),path:n.path},n);continue}yield o}}async _verifyRecordOnline(e,t){if(e.timeReceived==null)throw new a3("invalid record received");await yf(this.validators,new Ar(e.key,e.value,e.timeReceived),t)}async getClosestPeersOffline(e,t){let n=[];try{let s=lt(e),a=Ut(s),c=await this.components.peerStore.get(a,t);n.push({id:c.id,multiaddrs:c.addresses.map(({multiaddr:l})=>l)})}catch{}let o=await da(e,t),i=this.routingTable.closestPeers(o,t);for(let s of i)try{n.push(await this.components.peerStore.getInfo(s,t))}catch(a){if(a.name!=="NotFoundError")throw a}return n.length>0?this.log("getClosestPeersOffline returning the %d closest peer(s) we know to %b",n.length,e):this.log("getClosestPeersOffline could not any peers close to %b with %d peers in the routing table",e,this.routingTable.size),n}};var b3=class{log;datastore;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore}async addProvider(e,t,n){this.log.trace("%p provides %s",t,e),await this.writeProviderEntry(e,t,n)}async removeProvider(e,t,n){let o=d3(this.datastorePrefix,e,t);this.log.trace("%p no longer provides %s",t,e),await this.datastore.delete(o,n)}async getProviders(e,t){this.log.trace("get providers for %c",e);let n=await this.loadProviders(e,t);return this.log.trace("got %d providers for %c",n.size,e),[...n.keys()]}async writeProviderEntry(e,t,n){let o=d3(this.datastorePrefix,e,t),i=Ur(n?.time?.getTime()??Date.now());await this.datastore.put(o,i,n)}async loadProviders(e,t){let n=new jr,o=d3(this.datastorePrefix,e);for await(let i of this.datastore.query({prefix:o.toString()},t)){let{peerId:s}=f3(i.key);n.set(s,h3(i.value))}return n}};var xb=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Eb=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},Pk=r=>globalThis.DOMException===void 0?new Eb(r):new DOMException(r),kk=r=>{let e=r.reason===void 0?Pk("This operation was aborted."):r.reason;return e instanceof Error?e:Pk(e)};function Sb(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((f,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(kk(h)),a=()=>{u(kk(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(f,u);return}let d=new xb;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?f():o instanceof Error?u(o):(d.message=o??`Promise timed out after ${t} milliseconds`,u(d))},t),(async()=>{try{f(await r)}catch(h){u(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}var BH=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function MH(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:f}=BH(r),u=async(...h)=>{let m=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(m))return}catch(w){n(),s(w);return}c.push(m),t.count===c.length&&(n(),i(c))},d=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)f(h,u);for(let h of t.rejectionEvents)a.includes(h)||f(h,d)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,d);t.signal&&t.signal.addEventListener("abort",()=>{d(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Sb(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function Ok(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=MH(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}async function*Rk(r){let{key:e,startingPeers:t,ourPeerId:n,query:o,alpha:i,path:s,numPaths:a,log:c,peersSeen:l,connectionManager:f,signal:u}=r,d=gr({objectMode:!0}),h=new yr({concurrency:i,sort:(w,y)=>tl(w.options.distance,y.options.distance)});h.addEventListener("idle",()=>{d.push(vk({path:{index:s,queued:h.queued,running:h.running,total:h.size}},r)),d.end()}),h.addEventListener("failure",w=>{c.error("error during query - %e",w.detail.error)});let m=()=>{h.abort(),d.end(new qr)};u.addEventListener("abort",m);try{let y=function(b,N){if(b==null)return;l.add(b.id.toMultihash().bytes);let O=Uo(N,w);h.add(async()=>{try{for await(let V of o({...r,key:e,peer:b,path:{index:s,queued:h.queued,running:h.running,total:h.size},numPaths:a,peerKadId:N,signal:u})){if(V.name==="PEER_RESPONSE")for(let Q of V.closer){if(l.has(Q.id.toMultihash().bytes)){c("already seen %p in query",Q.id);continue}if(n.equals(Q.id)){c("not querying ourselves");continue}if(!await f.isDialable(Q.multiaddrs)){c("not querying undialable peer");continue}let Z=await mn(Q.id,{signal:u}),se=Uo(Z,w);if(tl(se,O)!==-1){c("skipping %p as they are not closer to %b than %p",Q.id,e,b.id);continue}c("querying closer peer %p",Q.id),y(Q,Z)}d.push({...V,path:{index:s,queued:h.queued,running:h.running,total:h.size}})}}catch(V){d.push($o({from:b.id,error:V,path:{index:s,queued:h.queued,running:h.running-1,total:h.size-1}},r))}},{distance:O}).catch(V=>{c.error("error during query - %e",V)})},w=await da(e,{signal:u});await Promise.all(t.map(async b=>{y({id:b,multiaddrs:[]},await mn(b,{signal:u}))})),yield*d}finally{u.removeEventListener("abort",m)}}var v3=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??s3,this.alpha=t.alpha??la,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.allowQueryWithZeroPeers=t.allowQueryWithZeroPeers??!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");if(n.signal==null){let c=AbortSignal.timeout(gk);n={...n,signal:c}}let o=new AbortController,i=De([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+j(e,"base58btc")),a=!1;try{this.routingTable.size===0&&!this.allowQueryWithZeroPeers&&(s("routing table was empty, waiting for some peers before running%s query",n.isSelfQuery===!0?" self":""),await Ok(this.routingTable,"peer:add",{signal:i,filter:h=>!this.peerId.equals(h.detail)}),s("routing table has peers, continuing with%s query",n.isSelfQuery===!0?" self":"")),n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial self query before continuing"),await ut(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await da(e,{signal:i}),l=this.routingTable.closestPeers(c,{count:this.routingTable.kBucketSize}),f=l.sort(()=>Math.random()>.5?1:-1).reduce((h,m,w)=>(h[w%this.disjointPaths].push(m),h),new Array(this.disjointPaths).fill(0).map(()=>[])).filter(h=>h.length>0);if(l.length===0){s.error("running query with no peers");return}let u=$r(1024),d=f.map((h,m)=>Rk({...n,key:e,startingPeers:h,ourPeerId:this.peerId,signal:i,query:t,path:m,numPaths:f.length,alpha:this.alpha,log:s,peersSeen:u,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of Qr(...d)){if(h.name==="QUERY_ERROR"&&s.error("query error - %e",h.error),h.name==="PEER_RESPONSE")for(let m of[...h.closer,...h.providers])await this.connectionManager.isDialable(m.multiaddrs,{signal:i})&&await this.routingTable.add(m.id,{signal:i});i.throwIfAborted(),yield h}a=!0}catch(c){if(this.running)throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query finished")}}};function UH(r){return r[Symbol.asyncIterator]!=null}function FH(r){if(UH(r))return(async()=>{let e=0;for await(let t of r)e++;return e})();{let e=0;for(let t of r)e++;return e}}var x3=FH;var E3=class{log;peerId;peerRouting;events;count;interval;initialInterval;queryTimeout;running;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:query-self`),this.events=e.events,this.running=!1,this.peerRouting=t.peerRouting,this.count=t.count??s3,this.interval=t.interval??fk,this.initialInterval=t.initialInterval??dk,this.queryTimeout=t.queryTimeout??hk,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=p3(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=Ue(),this.running){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);e.push(n)}let t=De(e);this.controller.signal;try{this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await xu(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),s=>Js(s,this.count),async s=>x3(s));t?.throwIfAborted();let i=Date.now()-n;this.log("self-query found %d peers in %dms",o,i),this.events.dispatchEvent(new CustomEvent("kad-dht:query:self",{detail:{peers:o,duration:i}}))}catch(n){this.log.error("self-query error - %e",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.interval))}};var S3=class extends _e{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new yr({concurrency:t.concurrency??ak,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Io({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_timeout_milliseconds`}),this.datastore=e.datastore,this.addressManager=e.addressManager,this.datastorePrefix=`${t.datastorePrefix}/provider`,this.reprovideThreshold=t.threshold??sk,this.maxQueueSize=t.maxQueueSize??ck,this.validity=t.validity??i3,this.interval=t.interval??lk,this.contentRouting=t.contentRouting,this.running=!1,this.reprovide=p3(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(pb)}).catch(e=>{this.log.error("error running process to reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async processRecords(e){try{this.safeDispatchEvent("reprovide:start"),this.log("starting reprovide/cleanup");for await(let t of this.datastore.query({prefix:this.datastorePrefix},e))try{let{cid:n,peerId:o}=f3(t.key),s=h3(t.value).getTime()+this.validity,a=Date.now(),c=a>s,l=this.peerId.equals(o);this.log.trace("comparing: %d (now) < %d (expires) = %s %s",a,s,c,c?"(expired)":"(valid)"),c&&!l&&await this.datastore.delete(t.key,e),this.shouldReprovide(l,s)&&(this.log("reproviding %c as it is within the reprovide threshold (%d)",n,this.reprovideThreshold),this.queueReprovide(n).catch(f=>{this.log.error("could not reprovide %c - %e",n,f)}))}catch(n){this.log.error("error processing datastore key %s - %s",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{this.safeDispatchEvent("reprovide:end"),this.running&&(this.log("queuing next re-provide/cleanup run in %d ms",this.interval),this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(pb)}).catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}shouldReprovide(e,t){if(!e)return!1;let n=Date.now();return t<n?!0:t-n<this.reprovideThreshold}async queueReprovide(e,t){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize,t);let n=this.reprovideQueue.queue.find(o=>o.options.cid.equals(e));if(n!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),n.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async o=>{if(o.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let i=this.reprovideTimeout.getTimeoutSignal(o);try{await this.reprovide(o.cid,o)}finally{this.reprovideTimeout.cleanUp(i)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(o=>{this.log.error("could not re-provide key %c - %e",e,o)})}async reprovide(e,t){await an(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var $H=20,jH=5e3,KH="kad-close",VH=50,_3=class{routingTable;components;closestPeers;newPeers;refreshInterval;peerSetSize;timeout;closeTagName;closeTagValue;log;running;constructor(e,t){this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.routingTable=t.routingTable,this.refreshInterval=t.refreshInterval??jH,this.peerSetSize=t.peerSetSize??$H,this.closeTagName=t.closeTagName??KH,this.closeTagValue=t.closeTagValue??VH,this.closestPeers=new Bn,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await mn(this.components.peerId);this.newPeers=new pa(e,this.peerSetSize),this.routingTable.addEventListener("peer:ping",this.onPeerPing),this.timeout=setInterval(()=>{this.updatePeerTags().catch(t=>{this.log.error("error updating peer tags - %e",t)})},this.refreshInterval)}stop(){this.running=!1,this.routingTable.removeEventListener("peer:ping",this.onPeerPing),clearTimeout(this.timeout)}onPeerPing(e){this.newPeers?.add({id:e.detail,multiaddrs:[]}).catch(t=>{this.log.error("error adding peer to distance list - %e",t)})}async updatePeerTags(){let e=new Bn(this.newPeers?.peers.map(({peer:o})=>o.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:{value:this.closeTagValue},[mb]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[mb]:void 0}})})])}};function Tp(r){return Array.isArray(r?.peers)}var A3=class{peerId;root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e,t){this.peerId=e.peerId,this.prefixLength=t.prefixLength??Dk,this.kBucketSize=t.kBucketSize??Ip,this.splitThreshold=t.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=t.numberOfOldContactsToPing??Nk,this.lastPingThreshold=t.lastPingThreshold??Lk,this.ping=t.ping,this.verify=t.verify,this.onAdd=t.onAdd,this.onRemove=t.onRemove,this.addingPeerMap=Yi({name:`${t.metricsPrefix}_adding_peer_map`,metrics:e.metrics}),this.root={prefix:"",depth:0,peers:[]}}async start(){await this.addSelfPeer(this.peerId)}stop(){this.addingPeerMap.clear(),this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e,t){this.localPeer={peerId:e,kadId:await mn(e,t),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await mn(e,t),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let i=this._add(n,t);this.addingPeerMap.set(e,i),await i}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n,t),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!qH(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n,t);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(s=>!(s.peerId.equals(this.localPeer?.peerId)||s.lastPing>Date.now()-this.lastPingThreshold)).sort((s,a)=>s.lastPing<a.lastPing?-1:s.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),i=!1;for await(let s of this.ping(o,t))i=!0,await this.remove(s.kadId,t);i&&await this._add(e,t)}*closest(e,t){let n=new pa(e,t?.count??this.kBucketSize);for(let o of this.toIterable())t?.exclude?.some(i=>i.equals(o.peerId))!==!0&&n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*to(n.peers,({peer:o})=>o.id)}count(){function e(t){if(Tp(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e,t){let n=this._determineBucket(e),o=this._indexOf(n,e);if(o>-1){let i=n.peers.splice(o,1)[0];await this.onRemove?.(i,n,t)}}*toIterable(){function*e(t){if(Tp(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+j(Uo(e,t),"base16"))}_determineBucket(e){let t=j(e,"base2");function n(o,i=0){return Tp(o)?o:t[i]==="0"?n(o.left,i+1):n(o.right,i+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>we(n.kadId,t))}async _split(e,t){let n={prefix:"0",depth:e.depth+1,peers:[]},o={prefix:"1",depth:e.depth+1,peers:[]};for(let i of e.peers)j(i.kadId,"base2")[e.depth]==="0"?(n.peers.push(i),await this.onMove?.(i,e,n,t)):(o.peers.push(i),await this.onMove?.(i,e,o,t));HH(e,n,o)}};function HH(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function qH(r,e){return r.lastPing<Date.now()-e}var Ip=20,Dk=6;var WH=20,zH=100,Nk=3;var GH=20,XH=100,Bk="kad-peer",YH=1,Lk=6e5,QH=!0,ZH=1e3,T3=class extends _e{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;shutdownController;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??Ip,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??Bk,this.peerTagValue=t.peerTagValue??YH,this.pingOldContacts=this.pingOldContacts.bind(this),this.verifyNewContact=this.verifyNewContact.bind(this),this.peerAdded=this.peerAdded.bind(this),this.peerRemoved=this.peerRemoved.bind(this),this.populateFromDatastoreOnStart=t.populateFromDatastoreOnStart??QH,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??ZH,this.shutdownController=new AbortController,this.shutdownController.signal,this.pingOldContactQueue=new vr({concurrency:t.pingOldContactConcurrency??GH,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??XH}),this.pingOldContactTimeout=new Io({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new vr({concurrency:t.pingNewContactConcurrency??WH,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??zH}),this.pingNewContactTimeout=new Io({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new A3(e,{kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved,metricsPrefix:t.metricsPrefix}),this.closestPeerTagger=new _3(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,await er(this.closestPeerTagger,this.kb))}async afterStart(){let e=0;Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let t=De([this.shutdownController.signal,AbortSignal.timeout(2e4)]);try{for(let n of await this.components.peerStore.all({filters:[o=>o.protocols.includes(this.protocol)&&o.tags.has(Bk)],limit:this.populateFromDatastoreLimit,signal:t})){if(!this.running)return;try{await this.add(n.id,{signal:t}),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(n.id,{tags:{[this.peerTagName]:void 0}})}}}finally{t.clear()}this.log("added %d peer store peers to the routing table",e)}).catch(t=>{this.log.error("error adding %d, peer store peers to the routing table - %e",e,t)})}async stop(){this.running=!1,await or(this.closestPeerTagger,this.kb),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort(),this.shutdownController.abort()}async peerAdded(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let i=this.pingOldContactQueue.find(o.peerId);if(i!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await i.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=De([c,this.shutdownController.signal,a?.signal]);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of rs(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=De([n,this.shutdownController.signal,t?.signal]);try{let i=this.pingNewContactQueue.find(e.peerId);return i!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await i.join({signal:o})):await this.pingNewContactQueue.add(async s=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,s)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{return this.log("pinging contact %p",e.peerId),await this.components.ping.ping(e.peerId,t),this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0}catch(o){return this.log("error pinging old contact %p - %e",e.peerId,o),n?.abort(o),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e,t){let n=await mn(e,t);return this.kb.get(n)?.peerId}closestPeer(e){let t=this.closestPeers(e,{count:1});if(t.length>0)return t[0]}closestPeers(e,t){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");let n=await mn(e,t);await this.kb.remove(n,t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,i=0;function s(a){if(Tp(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>i&&(i=a.peers.length);return}s(a.left),s(a.right)}s(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMinOccupancy.update(o),this.metrics.routingTableKadBucketMaxOccupancy.update(i),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var Mk=[77591,22417,43971,28421,740,29829,71467,228973,196661,78537,27689,36431,44415,14362,19456,106025,96308,2882,49509,21149,87173,131409,75844,23676,121838,30291,17492,2953,7564,110620,129477,127283,53113,72417,165166,109690,21200,102125,24049,71504,90342,25307,72039,26812,26715,32264,133800,71161,88956,171987,51779,24425,16671,30251,186294,247761,14202,2121,8465,35024,4876,85917,169730,3638,256836,96184,943,18678,6583,52907,35807,112254,214097,18796,11595,9243,23554,887,268203,382004,24590,111335,11625,16619,29039,102425,69006,97976,92362,32552,63717,41433,128974,137630,59943,10019,13986,35430,33665,108037,43799,43280,38195,29078,58629,18265,14425,46832,235538,40830,77881,110717,58937,3463,325358,51300,47623,117252,19007,10170,20540,91237,294813,4951,79841,56232,36270,128547,69209,66275,100156,32063,73531,34439,80937,28892,44466,88595,216307,32583,49620,16605,82127,45807,21630,78726,20235,40163,111007,96926,5567,72083,21665,58844,39419,179767,48328,42662,51550,5251,37811,49608,81056,50854,55513,20922,18891,197409,164656,32593,71449,220474,58919,85682,67854,13758,35066,3565,61905,214793,119572,141419,21504,10302,27354,67003,46131,32668,15165,64871,34450,17821,2757,11452,34189,5160,12257,85523,560,53385,65887,119549,135620,312353,115979,122356,10867,193231,124537,54783,90675,120791,4715,142253,50943,17271,43358,25331,4917,120566,34580,12878,33786,160528,32523,4869,301307,104817,81491,23276,8832,97911,31265,52065,7998,49622,9715,43998,34091,84587,20664,69041,29419,53205,10838,58288,116145,6185,5154,141795,35924,21307,144738,43730,12085,8279,10002,119,133779,199668,72938,31768,39176,67875,38453,9700,44144,4121,116048,41733,12868,82669,92308,128,34262,11332,7712,90764,36141,13553,71312,77470,117314,96549,49135,23602,54468,28605,6327,62308,17171,67531,21319,14105,894,107722,46157,8503,51069,100472,45138,15246,14577,35609,191464,1757,13364,161349,32067,91705,81144,52339,5408,91066,21983,14157,100545,4372,26630,129112,1423,29676,213626,4397,88436,99190,6877,49958,26122,114348,60661,29818,293118,50042,179738,16400,163423,89627,31040,43973,36638,45952,5153,1894,109322,1898,134021,12402,112077,68309,190269,69866,31938,107383,11522,105232,11248,14868,39852,71707,186525,16530,38162,106212,11700,5130,16608,26998,59586,108399,230033,43683,48135,82179,2073,5015,196684,189293,16378,23452,8301,35640,11632,214551,29240,57644,33137,91949,55157,52384,117313,5090,17717,89668,49363,82238,241035,66216,29066,184088,97206,62820,26595,4241,135635,173672,8202,459,71355,146294,29587,3008,135385,141203,14803,6634,45094,69362,50925,546,51884,62011,83296,234584,44515,56050,89476,87751,19373,12691,149923,19794,13833,35846,87557,58339,2884,19145,25647,12224,11024,77338,64608,122297,53025,7205,36189,36294,170779,21750,7739,173883,75192,35664,224240,113121,30181,26267,27036,117827,92015,106516,55628,203549,67949,60462,60844,35911,20457,1820,920,19773,8738,73173,181993,38521,98254,76257,46008,92796,5384,26868,151566,22124,2411,15919,186872,180021,28099,152961,78811,80237,62352,102653,74259,184890,16792,123702,224945,29940,19512,75283,14059,112691,92811,233329,20411,138569,53341,109802,50600,134528,66747,5529,166531,31578,64732,67189,1596,126357,967,167999,206598,109752,119431,207825,78791,91938,10301,27311,24233,252343,28831,32812,66002,112267,90895,8786,8095,16824,22866,21813,60507,174833,19549,130985,117051,52110,6938,81923,123864,38061,919,18680,53534,46739,112893,161529,85429,26761,11900,81121,91968,15390,217947,56524,1713,6654,37089,85630,138866,61850,16491,75577,16884,98296,73523,6140,44645,6062,36366,29844,57946,37932,42472,5266,20834,19309,33753,127182,134259,35810,41805,45878,312001,14881,47757,49251,120050,44252,3708,25856,107864,120347,1228,36550,41682,34496,47025,8393,173365,246526,12894,161607,35670,90785,126572,2095,124731,157033,58694,554,12786,9642,4817,16136,47864,174698,66992,4639,69284,10625,40710,27763,51738,30404,264105,137904,109882,52487,42824,57514,2740,10479,146799,107390,16586,88038,174951,9410,16185,44158,5568,40658,46108,12763,97385,26175,108859,664,230732,67470,46663,14395,50750,141320,93140,15361,47997,55784,6791,307840,118569,107326,18056,58281,260415,54691,8790,73332,45633,7511,45674,143373,14031,11799,94491,35646,96544,14560,26049,32983,25791,83814,42094,231370,63955,139212,2359,169908,3108,183486,105867,28197,32941,124968,26402,88267,149768,23053,3078,19091,52924,25383,19209,111548,97361,3959,24880,235061,9099,24921,161254,151405,20508,7159,34381,20133,11434,74036,19974,34769,36585,1076,22454,17354,38727,235160,111547,96454,117448,156940,91330,37299,7310,26915,117060,51369,22620,61861,322264,106850,111694,15091,2624,40345,300446,177064,1707,27389,54792,327783,132669,183543,59003,17744,20603,151134,106923,53084,71803,279424,319816,11579,21946,16728,38274,72711,5085,83391,88646,40159,25027,34680,10752,12988,54126,30365,18338,100445,230674,44874,84974,143877,123253,139372,28082,91477,144002,13096,219729,46016,50029,42377,14601,6660,58244,58978,23918,88206,113611,64452,17541,41032,10942,12021,49189,10978,40175,37156,10947,71709,106894,112538,57007,137486,150608,152719,40615,7746,279716,13101,19524,28708,40578,72320,1096,182051,94527,51275,22833,45164,81917,77519,48508,5421,140302,37845,149830,5587,27579,5357,428725,248187,6326,206760,39814,32585,89923,44341,288753,284443,96368,31201,94189,119504,20359,52073,103216,179,27934,32801,96035,34111,34309,101326,18198,20704,210266,37643,27880,141873,106e3,19414,56614,167714,66483,107885,86602,4379,20796,75467,4987,5017,118857,26003,34308,114428,29198,6686,29697,73632,3739,69795,16798,41504,7207,30722,21436,36735,28067,28545,3239,11221,36031,41889,100010,19247,317673,29495,174554,6424,129725,53845,94986,7955,59676,2604,191497,19735,102214,62954,23844,11872,179525,261436,34492,428,78404,142035,16747,17246,27578,37021,33672,57944,26056,135760,2369,61674,122066,31327,19374,157065,40553,130982,69619,71290,38855,72100,92903,95940,51422,165999,65713,57873,50726,7288,20272,2081,42326,22624,81120,57914,79352,19447,1684,72302,11774,302559,161481,96396,13692,414988,3721,79066,56627,46883,21150,11747,12184,5856,113458,176117,84416,52079,27933,3354,59765,141359,2212,216309,2555,23458,196722,142463,45701,44548,28798,19418,215,29916,9396,10574,114226,84475,13520,18694,34056,4524,90302,62930,13539,19407,77209,7728,38088,9535,2263,23875,183945,17750,26274,67172,10585,28042,22199,7478,51331,66030,26774,192929,31434,25850,50197,52926,178158,4679,181256,70184,229600,9959,105594,72158,73974,2726,35085,78087,23284,35568,51713,155676,5401,27254,11966,17569,223253,71993,103357,111477,55722,30504,26034,46774,35392,36285,214814,41143,163465,1051,16094,81044,6636,76489,179102,20712,39178,35683,125177,54219,30617,52994,25324,50123,2543,87529,58995,10688,125199,12388,60158,125481,131646,7642,133350,65874,3438,97277,101450,10075,56344,116821,50778,60547,98016,106135,13859,14255,16300,77373,173521,8285,45932,37426,4054,114295,55947,7703,39114,52,51119,128135,19714,60715,9554,50492,88180,2823,118271,52993,122625,97919,23859,37895,25040,33614,32102,20431,3577,9275,15686,43031,157741,110358,1884,40291,125391,13736,5008,64881,87336,77381,70711,43032,49155,118587,70494,4318,10168,30126,12580,10524,280104,104001,145413,2862,84140,6603,106005,13566,12780,11251,42830,571,179910,82443,13146,469,42714,32591,265217,424024,92553,54721,134100,6007,15242,114681,59030,16718,85465,200214,85982,55174,165013,23493,56964,82529,109150,32706,27568,82442,5350,14976,13165,44890,60021,21343,33978,17264,4655,22328,27819,75730,16567,55483,14510,17926,45827,150609,3704,7385,272531,161543,76904,122163,52405,2039,19165,41623,14423,228354,3369,176360,85491,7122,35789,303724,4465,13628,2233,55311,118771,20713,10006,221519,45115,71021,35650,29775,7337,10864,20665,21142,1746,15080,1624,32449,10905,105743,229797,7701,3940,22997,178467,57208,389057,39683,59403,63344,63125,54847,69691,18336,56448,3362,37202,18282,29648,138224,35867,10495,5911,28814,26653,31514,176702,26550,45621,11734,4525,40543,73944,121080,27858,155561,14887,44670,30742,8796,107455,113472,56369,75581,183777,240095,133699,153299,8768,160464,26058,49078,103971,21875,71486,44888,17156,9678,89541,123019,102337,3972,83930,21245,87852,109660,287918,183019,686,10100,39177,283941,11274,24736,26793,26214,25995,77011,141580,4070,23742,46285,46632,30700,26669,19056,35951,115575,174034,56097,35463,87425,24575,44245,38701,82317,85922,281616,100333,147697,61503,7730,84330,8530,59917,61597,17173,9092,32658,90288,193136,39023,20381,56654,31132,7779,1919,1375,117128,30819,11169,40938,23935,115201,101155,151034,4835,11231,74550,89388,59951,91704,107312,167882,115062,12732,72738,88703,464019,158267,57995,60496,737,14371,123867,4174,243339,159946,7568,16025,134556,110916,38103,191,80226,88794,29688,27230,10454,76308,57647,77409,113483,66864,14745,19808,12023,46583,84805,16015,17102,2231,20611,3547,95740,250131,34559,108894,8498,15853,159169,148920,20942,2813,93160,45188,210613,45531,52587,149062,39782,28194,57849,60965,84954,89766,84453,100927,16501,27658,165311,103841,54192,207341,19558,20084,319622,5672,205467,98462,61849,36279,13609,147177,24726,165015,209489,59591,31157,6551,117580,75060,141146,277310,21072,22023,106474,63041,137443,122965,68371,5383,42146,98961,113467,30863,23794,4843,99630,30392,82679,13699,241612,33601,93146,24319,18643,32155,95669,40440,15333,34089,67799,142144,58245,38633,114531,117400,77861,188726,5507,2568,8853,10987,107222,2663,2421,11530,13345,30075,41785,118661,104786,17459,12490,16281,71936,193555,17431,5944,71758,26485,77317,20803,367167,158,7362,93430,11735,172445,46002,11532,54482,930,62911,2235,23004,179236,4764,101859,208113,22477,55163,95579,14098,67320,162556,90709,156949,3826,57492,4025,34092,87442,104565,6718,186015,28214,14209,10039,107186,233912,58877,81637,55265,39828,6194,145813,50831,105849,4974,88319,122296,10272,197216,95714,51540,72418,23324,91555,8743,140452,250249,51666,34124,7229,38592,129641,78169,174242,22464,149964,51450,14034,10026,95376,26190,120062,14401,8700,265,31386,143573,7203,229889,61567,4227,140981,2466,72052,10787,10062,30958,6099,38471,30103,23202,208101,70847,467,58934,32271,32984,36637,24107,30771,17109,73353,13650,2098,157040,67366,66904,106018,265380,107238,18535,44025,32681,144983,62505,91295,56120,3082,77508,10322,63023,36700,81885,224127,16721,45023,239261,111272,13852,7866,149243,204199,32309,22084,42029,38316,126644,104973,14406,43454,67322,61310,15789,40285,24026,181047,6301,70927,23319,115823,27248,66693,115875,278566,63007,146844,56841,59007,87368,180001,22370,42114,80605,12022,10374,308,25079,14689,12618,63368,7936,264973,212291,136713,95999,105801,18965,32075,48700,52230,35119,96912,32992,8586,16606,101333,101812,14969,39930,759,193090,27387,42914,12937,5058,62646,64528,38624,25743,37502,3716,4435,30352,178687,26461,132611,42002,138442,35833,59582,16345,8048,60319,49349,309,47800,49739,90482,26405,34470,63786,32479,85028,39866,47846,11649,23934,29466,2816,42864,31828,7410,74885,49632,47629,111801,90749,19536,18767,105764,59606,21223,10746,76298,22220,39408,7190,79654,64856,11602,82156,272765,17079,70089,245473,51813,184407,384678,1576,122249,5064,27481,6188,25790,74361,27541,318284,45430,31488,620,93579,45723,192118,22670,51913,4162,70244,35966,26397,16199,50899,209613,121702,287507,2993,36101,132229,67345,33062,76295,118628,78705,52316,34375,107083,107454,44863,127561,33964,3073,154010,190914,55967,39074,6272,31047,5550,41123,26154,98638,47110,19998,148091,50229,31329,59900,195442,19106,61347,73497,70015,682,45850,25776,38022,148951,6288,37411,232526,109277,27286,32342,9262,5220,16651,23175,46740,129438,78614,121925,66914,88710,127952,5563,21500,34521,10739,14863,191006,62956,17359,16749,67027,56284,69134,43301,35039,58883,54466,60823,404451,75743,59856,86979,7923,34273,83785,32142,7693,268986,197428,282681,17049,22346,22990,92245,107180,3357,37104,96724,49153,7683,31197,43267,82231,164276,23696,20848,188364,22309,24821,158707,1018,22514,70922,27792,45589,59709,10765,736,35218,63479,51987,24275,63588,55361,92929,81964,4658,20122,12330,44058,13065,311456,72224,8337,211229,38979,22590,138478,52757,32595,133600,8838,31549,94412,43391,90056,1585,94802,127271,6223,31889,137038,132910,2165,57616,230152,6080,10748,36737,74579,134062,50525,180532,119270,34556,76155,82394,52595,29258,31435,87820,67996,26943,183878,38007,2410,13526,180297,69856,3503,187396,167700,7838,16701,9199,56267,3661,37407,65994,23767,5708,62508,221700,67088,86978,46776,84434,32088,5612,9149,88244,21685,95151,46750,189612,2979,506311,2594,3628,40074,105039,78243,28523,6651,38058,71999,30992,12764,68261,108991,6165,26450,61961,13400,22426,7490,60890,109623,2070,12958,50355,67979,257096,7213,42578,52121,35716,65461,7516,124758,39268,302,64712,14977,1467,219452,2840,34229,11121,21602,19270,63574,8024,1532,17331,79839,78885,52029,180767,57957,6069,91265,61380,55767,8927,32881,287603,22149,35029,68876,6428,199567,46926,13412,104132,21434,366616,45060,110046,81924,128910,45886,52821,130416,29416,77342,21762,67329,121432,79924,11724,38625,81006,102033,28338,13326,3250,82056,82526,38212,21112,12382,111495,3263,7414,86274,93490,40844,30224,45212,24019,48411,71367,24941,76729,57776,3769,38114,202019,197745,31953,237533,33270,201580,255648,100798,44741,32241,98468,106931,10085,15090,170358,33154,66787,18819,69760,25061,234005,82660,6295,131975,16874,9076,4094,25005,17740,40908,19533,220019,44330,99792,50040,19619,13950,55228,24423,31253,95308,103177,184795,28590,82285,5059,3210,75525,49894,70007,56178,10580,36051,139681,21617,98736,3555,106306,164189,37352,63915,47824,24883,145530,61904,28444,11483,19837,145446,30420,112972,85939,11835,191233,2262,20705,58630,1753,148334,1197,144714,6887,11223,107667,60879,77914,4151,57417,81594,96681,169430,1784,20444,95138,254041,27038,596,7117,72808,13759,3353,126776,21074,55322,27081,36942,39547,139830,179275,4453,713,8722,71399,19204,25785,22794,23923,104114,11291,25458,102309,88396,75288,230440,206396,104551,58447,130857,37247,94734,31548,176529,226077,65159,20104,10096,66881,94191,237909,27109,37404,1520,27421,25220,113003,23423,24884,50585,6286,231877,150800,11789,3226,90004,60642,5053,202400,61442,132531,175329,57138,30116,103847,9973,75367,16452,32360,59119,21246,10191,164804,23305,61051,37348,154530,13214,5468,50403,66754,130976,50559,80515,14436,155492,84017,5472,43107,41240,2890,90431,70188,382,76234,48040,50211,281038,237007,32115,142178,1536,22761,96429,1811,31243,1679,49143,55209,17402,235054,61494,7462,77030,34925,87609,78002,9499,9027,73289,201078,101379,63544,27666,5469,10642,30029,49816,132979,95620,58086,351930,116300,2110,2043,30845,6154,11279,16727,4122,2277,27281,4971,3650,39060,61970,65951,39674,75686,38151,11370,130809,177895,32665,63725,122267,7857,39618,118483,44792,157755,178624,136994,24260,41308,22471,12404,21707,12486,30473,52781,50246,20247,39065,909,56825,103158,128603,31542,1089,41935,32744,12428,37963,84420,33134,72921,208449,42622,168151,127335,147107,46699,38216,12591,94342,85814,31423,24944,2605,87542,67473,192551,4496,56321,91819,17630,6300,256183,114569,202090,33209,35289,34897,24967,40520,43470,5344,10199,34810,14283,10381,10017,62923,49924,23233,64539,13051,35686,19698,11570,135555,120868,44924,87065,52318,52335,47586,140906,245885,109834,78668,9065,46990,25258,72022,61243,40838,4545,146387,10537,11557,17470,36930,68104,46711,24264,79401,81043,18225,120488,24746,84338,81652,28266,13776,21878,46973,1047,230465,73357,95777,24973,210160,62210,58404,110633,169651,6937,41870,9909,26822,191062,76553,27519,96256,239070,2478,205678,67955,58532,20601,50120,19148,78501,195724,110740,8249,109665,27446,30568,57631,31425,49752,32820,65504,50079,3663,102256,219898,23849,211315,14645,4359,91767,9528,12449,49366,7941,49763,107848,8930,27086,50686,9744,10447,81935,39513,46514,1670,29229,6172,22312,137280,97759,9806,14445,22976,56458,73391,34983,93760,174219,52573,33149,59747,2429,136277,75123,165263,91040,7446,57632,48633,97140,246081,84766,151684,79918,93268,120346,54059,54875,77858,32996,103590,45276,11968,19600,25849,17159,132907,42828,16817,4913,99462,103303,27395,5737,74184,20749,21160,14377,77062,131403,158735,10999,27799,77785,9320,34366,51593,61070,33746,47048,29268,36675,30262,53297,9832,82e3,20188,122292,39917,7331,18160,68301,185935,134830,15031,4935,10004,165845,185534,46923,30109,44134,122631,18874,22903,112790,26561,18549,348902,82871,140345,255565,135390,63556,103747,145055,179600,145662,296111,61661,211987,23952,52342,126343,48450,32919,44277,82185,9591,62139,205363,376969,394874,108461,18040,120885,14798,39863,16571,16794,58271,81025,55206,14640,118656,6361,44092,85970,6262,153863,108244,180200,72264,79947,38044,10050,5735,61221,80712,5471,115689,11391,11661,184257,20010,60116,30320,19327,134598,45455,27542,18004,125092,452272,1549,91523,46567,180063,156026,2608,11174,58848,37788,65907,80194,30490,5786,40775,119519,106241,11323,156297,8425,61495,2617,29675,2425,59886,112582,49142,59618,4863,50597,86710,50650,168632,27693,85641,83643,18993,25768,84284,28090,93592,36627,312804,43381,9887,9402,100931,97165,3311,173330,66805,28935,4963,184460,3201,78102,19126,21607,37496,24938,22615,16153,32862,134792,153318,61120,6067,2812,12826,12792,23825,37559,64662,202250,102694,155488,85881,149193,46233,65383,15521,106982,11358,176786,25752,39717,34208,24510,32464,77742,39371,72028,138229,60688,71386,102834,132477,2208,11548,63670,271279,28351,30338,38620,32491,99845,143885,152266,13252,2825,178663,108097,1775,78201,14897,113573,163346,62292,171129,22183,96598,38733,64971,166776,117445,9968,146393,44677,74867,20908,97328,12761,25656,26785,9148,112344,26115,99176,110121,22437,49547,6180,79320,5835,31392,43328,33377,75870,119860,69497,80273,7325,155219,43167,111173,28347,20222,3763,71752,55041,47252,14618,28088,15012,97805,194698,54636,2036,41349,6173,96604,61530,51859,43782,13361,24334,22668,24792,7070,23441,16789,3209,36211,208475,26242,32880,122181,182407,21444,31060,88459,29929,77907,12716,10934,97005,20599,31690,8403,58445,30303,22700,10336,86731,103115,337709,72556,46788,112566,47684,67089,53548,36874,56487,41387,125985,26893,40071,106683,73712,18787,40105,72992,67246,137276,50802,36790,70328,138827,22466,39263,183295,29858,50975,9322,57397,10654,24364,30383,55799,41600,23584,127295,296610,129078,143558,244131,86397,36049,1085,80677,3820,108139,5476,34767,24683,7758,13060,7239,131671,250593,59556,103392,29810,4188,252323,39404,116877,7651,43600,40338,13554,157253,39196,25978,144387,61211,234,50104,6129,10449,93777,9240,356378,274148,4439,72970,3724,147770,78680,62570,115877,40027,40547,36817,224392,64609,34795,165027,67440,2477,37206,23431,50754,164797,46018,94995,170982,27051,7957,22767,3674,27900,56419,18930,60701,41302,2692,84749,339721,61996,111094,80221,50129,1045,8153,62945,19202,8250,37208,37418,32560,79477,41106,88569,33963,36693,5892,30570,1581,66471,49647,11922,160717,29442,5643,114865,82962,95982,132098,22633,22838,94726,54556,28566,205039,162340,33216,16849,35847,221339,94851,26533,71469,1805,3804,12935,45483,71020,36310,65381,192960,34240,35165,59773,1248,46954,155332,96864,4246,388800,16129,57133,74592,44807,442014,38203,42574,80818,91592,26377,36424,65760,977,77387,22628,147610,28018,30561,98454,6969,119628,63648,18170,36854,26601,64018,22027,37279,51395,152934,21153,9430,58760,194742,5330,55115,34158,28917,174111,13171,122326,1526,43896,66094,25325,4234,148354,11450,275,18999,112191,44365,22723,68409,8733,57746,96565,75007,14196,108844,29475,88599,177563,100792,106156,86323,93726,14248,135341,194131,40126,47099,14779,8272,39597,95983,171398,65882,28052,10393,47213,40689,22120,72212,106829,34964,109146,753,648,21660,30047,17527,181025,5619,145357,4085,216883,9359,186951,24779,53931,24545,36197,223296,62628,168101,4243,107313,30321,26642,13049,51059,31027,107912,807,73550,26551,84369,122422,165872,49754,74213,234264,33151,52014,33100,87183,22365,52500,40013,23302,5652,72723,21404,26107,48434,587,94049,168493,96418,32871,70860,31709,25128,443,71597,166253,15670,70994,26341,133675,28280,75491,54756,47955,56028,26182,11952,113272,472197,64640,110753,17919,337,50642,22576,142,87371,53391,93210,126694,15285,19642,85667,14148,1506,42092,52962,33243,11970,20734,135843,57044,58880,13002,219134,22876,64754,232519,4257,43120,321573,24799,64526,124728,52579,81472,70831,276848,17403,74359,23021,182101,74597,23744,148267,12055,7976,5349,11772,67540,167347,65318,18720,127832,108238,22828,90233,9987,259080,118185,73209,79270,13775,90100,137742,90799,70569,15699,19961,9087,67475,57872,39731,8810,134897,131868,146849,19898,3334,2281,167061,91073,60356,467742,74712,188,53179,137679,92769,29241,9537,132595,80119,1041,88962,5976,40171,44911,102859,139059,104558,98987,47761,19272,71472,113864,175377,73338,10857,23402,23758,1591,139864,5644,4076,118760,16427,134198,18853,20291,100849,37423,22038,36677,19071,195521,57445,11069,31869,55718,66882,148490,44,41296,75242,49704,166810,9906,20943,122258,49112,105667,15969,10344,6408,187694,21399,72742,58970,14867,14376,81889,41856,23225,15042,56993,16074,131389,74276,72407,53875,383108,53597,37363,68993,44854,122548,430927,198279,38430,80409,12245,2981,628,2818,17760,37437,238229,7968,46892,2200,3730,34190,65983,37959,112291,87850,70827,6522,20750,73913,111621,41652,19587,2780,58668,25916,85259,18200,168962,95781,42445,102050,7776,57662,103313,47742,96358,41964,66174,100396,29069,204735,19679,27978,7479,40264,22534,61183,36081,107436,58223,14680,23002,101311,24716,124108,12908,5646,31750,40380,14215,232799,102772,14122,96775,61398,50917,12096,149880,67833,598749,124194,155871,49216,790,14677,65319,56917,7440,145744,95701,12206,49405,129269,76199,45732,9767,11058,9047,210885,11051,7392,26307,2130,8132,147526,20802,232698,115660,50060,59789,57344,107623,80343,112676,23291,9866,160971,34032,118291,15719,59730,164911,28975,2659,58046,78480,21854,66209,53863,109085,116045,29021,46481,107552,22130,18764,70254,31272,11300,52460,43933,84738,20721,53869,190840,79673,105300,7561,321817,66924,13940,33281,101046,183181,32176,71878,5678,62924,79535,56646,40303,19559,27703,93042,73368,42187,3670,37376,46440,7023,36816,109628,20680,5940,276440,275233,170848,112093,136996,14984,20226,111441,77693,112960,48577,39370,55707,50314,123404,26570,54281,61372,123391,4857,35928,246740,132507,106646,44241,7196,92258,9825,37688,51197,303141,5590,15476,132986,10955,85782,34486,26696,7991,28813,18858,39546,11703,11365,38185,5716,93555,11925,40121,60002,6985,10976,171384,3887,43394,13337,56346,6381,252336,39573,75042,53711,1028,31781,44295,95925,131713,7214,68125,43571,70954,213234,1628,8760,13391,65485,17320,56038,1710,25248,60803,57399,19839,3870,326,281556,50945,72400,21460,316244,75619,56246,98775,481,13513,55765,50427,7388,123519,32929,57908,27124,61316,101097,57467,30228,48792,10788,20402,37318,50526,155730,34456,158065,145305,17832,43733,64052,4506,35072,205355,177028,184004,187081,68616,35938,83703,10367,36892,93186,260137,51934,89970,4985,23445,26755,21558,7948,78741,23376,124405,85594,68596,57536,49351,12619,56593,132668,99924,109728,71844,71935,196018,65464,17617,14987,89701,143773,33997,8687,22701,33258,2914,4436,72108,85610,9671,49067,2327,82988,1361,1672,44033,35777,30269,24057,10605,82236,616,15793,13919,47249,112086,116698,9484,80207,90574,33304,68624,93127,56101,42210,160929,4827,38995,38095,4701,125119,5027,33680,9236,231236,14135,87837,23318,70261,78893,30151,81482,14332,1084,74256,27532,46644,79185,3148,62615,6981,55672,31668,36825,1849,14536,37446,14738,23779,43058,162749,72199,1168,21346,5592,85932,85302,9668,18351,57135,150360,2080,228015,77953,34670,119302,151751,31009,106725,84265,45214,59289,74178,113071,263206,111009,4021,44449,188119,192629,123592,392506,292847,114487,12831,205858,9852,20780,79648,75767,357014,97721,18166,21005,67950,33226,204009,16536,2987,11335,66717,144910,47950,17262,55060,15063,2934,51038,26775,178497,66008,3427,49433,128592,20036,157553,63861,3089,23015,51210,28696,35933,49942,71135,231518,99620,17248,21835,176536,20676,16944,38700,165831,233253,295625,36723,13023,52745,10907,19423,67972,125868,95473,82875,1183,108455,52685,33417,64095,21433,52438,33191,127809,44505,211823,7810,2752,95548,162031,7185,91196,47563,61721,33359,17897,23682,42806,178101,22874,49707,199897,75419,82456,8618,11171,79712,116847,18783,44190,46564,5346,59046,95032,7893,14916,3214,26800,24172,121453,34362,10250,17408,18888,4840,68696,22831,13162,36005,32512,14800,62357,41723,45046,27247,37486,5372,2564,34261,298500,66509,133920,89138,31305,117697,19097,108304,81386,84106,23802,46411,63304,946,51417,41777,41041,19501,115864,60743,294354,37955,94165,18116,1156,17937,20645,57114,90804,58042,48643,92288,9861,2557,88546,61333,101008,12853,5148,87856,4152,144503,73841,18718,9789,147565,10846,42085,12789,30223,8993,56352,67203,2448,28215,6052,23540,126319,75933,36689,80235,23231,23561,21383,38800,77548,102798,21234,31468,158608,46188,63960,191679,8051,67014,11185,170078,42186,28827,34777,41930,212079,12421,34750,24111,110344,73918,45171,70826,141949,40063,23979,24254,37309,26724,27179,24718,83648,54938,14591,17425,29525,102675,48975,48654,12316,8929,60640,41709,50168,63264,89812,50716,48632,38755,138583,160123,55579,71829,24230,233277,46322,39650,166388,34718,24108,98252,7031,106695,62498,18258,35062,217827,78731,34824,33354,19520,60852,2432,60224,8587,2836,62955,702,20227,42285,40560,95592,62486,11094,53035,143291,18842,46177,77994,1770,9657,107422,172915,32655,128716,25886,25164,156740,119928,165875,85817,11007,89110,33956,12652,65156,180266,8494,36889,19958,20955,96,1264,118288,135769,44754,86671,5632,19026,168220,289120,33569,93821,66144,70635,7687,5642,2714,55445,56636,71545,184182,93133,7332,37389,12643,52315,22729,11014,158742,17050,152889,50178,34601,41945,52136,9948,26914,63548,95721,115951,40759,8960,158258,38938,49232,48325,42234,81523,253019,66128,40978,20048,238048,38760,62928,122560,118532,43687,137472,163689,26680,9878,17448,51035,16211,60834,36749,29178,14241,59868,150086,2305,26477,42422,34342,165341,83279,33894,14257,29928,12743,13957,125571,89134,66712,10952,16507,147839,30146,7249,16565,45399,39874,114565,215780,31990,230881,171477,102,196546,44538,10880,84948,281705,86651,10617,31395,2342,453658,43569,60561,132901,21845,17727,58556,258242,22262,58728,4008,77997,11806,37431,30599,81375,109137,185787,114085,217292,97453,169085,30593,60212,11544,102056,65580,2384,91655,4855,95725,7295,157994,16228,20669,53276,141590,105246,17334,25440,76067,17967,39321,38911,11362,28559,63807,21627,26468,85816,40120,1025,15234,58319,69516,66512,124548,75845,78873,22137,46681,51242,85683,32909,76747,35555,43396,101465,1765,73094,1077,2962,39028,66777,57831,42048,15828,13962,36041,63657,52412,5242,58846,2141,5506,219012,134451,3936,182230,17558,17153,152237,22621,49377,170216,35257,68233,65374,6510,11126,212151,7184,2480,22517,3437,33073,30156,16557,3768,55067,86829,91e3,12350,148650,66017,79424,70885,49066,28250,21369,51213,34533,11510,3258,18176,18465,84413,6315,36411,163765,4346,356,107618,598,13727,285026,162695,8749,14583,7132,63521,184253,32378,25991,5604,30961,53675,4874,84693,5086,34811,26978,56564,7904,33519,51221,113942,69253,6664,125563,22055,220680,102008,742,51930,19494,176108,44424,35123,13025,75685,11759,74335,22250,181453,131147,16984,132115,154311,11991,76452,52609,85351,196,30969,9198,74919,2529,56838,71779,29187,116304,3504,62330,41190,86153,28393,254926,104228,105189,13264,84359,3574,12415,8534,57147,10175,188174,59504,60932,66318,16407,107921,17638,99103,49278,28403,39786,145865,8462,3558,43406,142271,29139,21989,36552,93955,72365,7176,13556,106185,37957,321774,17782,129017,51154,27938,24952,1935,39366,2791,33489,41582,56078,24558,9311,5449,218786,27808,190429,68013,36020,86003,29735,3404,87348,119357,115714,2324,86796,81973,40992,43376,93621,28784,16808,36367,2517,2909,191926,24978,55303,53308,205724,60068,3098,21375,64784,23949,26579,63121,12319,80145,39967,97861,6757,70143,67642,37082,34698,69140,122883,46151,62187,80934,429,19437,135071,137885,222647,13331,154065,327,61778,74257,40116,37493,14855,85079,237641,42342,102164,199965,71204,4662,29368,5042,113914,122214,8955,13149,102503,43173,5659,163787,69003,307084,63392,171080,21390,81918,86666,36622,24126,28887,5736,28054,207170,163428,79891,346467,95363,38980,111806,80828,9200,19288,294896,114468,87405,111715,141705,7015,72754,68463,48738,243147,33397,101210,37051,98801,82847,20397,4940,185559,18716,54718,83491,11725,40803,1128,12128,23060,5174,7745,67007,46701,1571,27807,180186,256996,18975,16837,7877,212758,250379,15440,87954,57755,24719,124057,83461,258,50864,8874,29038,71289,31627,15429,9005,4061,113851,107716,82819,13651,79656,117851,17539,111446,12938,39724,190787,4352,15402,21070,62708,8539,23777,73853,13552,38810,86117,16285,56400,1718,75342,142863,29033,378,110113,180321,32586,23606,26393,160984,207987,23783,8406,16904,24596,47274,11693,46539,60524,78595,48423,31718,20170,9009,146268,15183,191060,172765,1349,138436,37365,10970,40509,225817,20021,70394,152138,21541,66559,66544,89352,2725,17258,91345,7313,3815,115868,8660,40362,4071,103524,39388,118275,21950,6549,38226,32754,209574,29201,43495,18028,20296,40597,18370,47520,202450,24134,2219,8195,69545,38041,136934,46374,19041,159811,84865,58620,846,98749,13569,30714,97246,32186,4479,27355,92973,35214,151491,75963,37631,1561,27200,238083,23182,60756,12291,25766,39355,102333,87362,65741,59906,19538,201575,48772,102938,24438,292580,39964,66366,9004,61379,50548,37622,38732,28379,68180,76622,17488,69849,5963,7219,48143,43413,55358,540,58691,29506,19245,52193,48621,5518,13048,118625,44755,191081,42061,89197,2259,60665,66994,71210,51232,3585,142096,55024,7892,8345,58653,463307,65658,64319,137941,136323,53499,12746,43492,6978,95163,29925,60175,5128,7352,41463,184756,121146,20473,18426,4598,5309,54580,14277,121151,10691,56711,43880,63409,76682,11830,172218,264898,32632,66536,81062,31649,25788,92774,60222,11100,63159,9432,224657,25240,53613,152,138620,163829,2397,85345,12501,37507,64932,38575,43522,65789,80198,78796,35226,3851,108891,73311,3060,28391,93671,39663,46142,30982,66041,37281,68157,26553,71872,81142,211527,39747,118119,22695,2859,11066,20232,168911,7933,197005,17066,111071,44434,133994,120798,12766,227798,45756,132852,29917,36076,55352,65281,129800,41958,18944,84678,18580,168093,132621,39997,54092,27740,32354,3770,114118,103242,43918,15899,18574,145944,3190,123469,219903,24169,100571,62403,16776,92779,14535,17168,16475,14304,37231,1712,28218,242754,61688,28980,1318,51359,222657,99200,67989,31772,23932,35351,201251,49041,27306,19128,40135,3986,77333,19649,120683,151927,21081,7076,78375,77501,101599,8011,89585,96715,58179,5378,102138,106793,26051,217276,4197,16297,27014,46721,13322,22806,5278,29629,70632,9647,71519,58818,40603,128530,8903,36770,56900,31483,26935,43845,34265,34920,87658,6114,84767,64250,47318,50720,19264,162514,33357,13117,6705,46696,75032,71054,87004,42035,69138,11903,99854,102328,19611,34525,69312,6431,49842,101600,133178,108751,41829,89939,225664,48916,99556,9195,130387,5960,36857,116724,53518,94002,39077,53996,6945,22261,64291,8314,152785,57588,16522,9091,5048,87671,35441,39509,1945,12423,158923,178413,37549,14095,1475,73188,62878,4819,24012,68534,42606,4010,120809,57497,59564,101758,103718,32701,80116,12345,95834,46918,21468,53213,15665,31200,3867,5140,96013,250744,21016,10069,13968,35449,180829,27683,39704,59956,22893,3115,26293,32785,75934,62445,141162,62720,2018,83638,19949,114012,95006,3330,99829,130935,309272,9565,55874,121727,37017,23586,319858,40970,27602,8625,112329,61060,100088,118525,25922,16232,1907,60671,51583,44553,80993,5262,94679,8676,940,20736,11823,3020,16476,12340,152600,97416,3703,25744,66826,16245,16876,46446,84798,74227,176020,45192,61955,75496,23946,23626,40372,26036,6149,11822,30582,16541,41914,82385,232823,40921,80773,14930,3631,7517,39619,4348,36180,126106,138939,62611,1477,113512,47321,25052,14546,118881,29060,23589,128322,36795,18401,137921,104699,267929,36194,172791,18113,4766,188215,30083,332586,94089,5805,77909,22194,68234,154976,43220,40660,70001,184893,138095,11128,103010,22663,5108,212615,8485,5565,49222,54614,26530,42639,16319,55062,152662,105595,21114,22216,10294,68158,10436,86950,7206,62115,3977,3657,59874,456,118617,18156,106663,112229,80992,17442,8217,55551,5133,34344,251927,51153,39364,201321,7816,66803,23057,156724,145664,14276,95705,979,2796,6875,13429,212525,50602,26276,28284,3424,19465,52397,46963,31420,51399,206476,92317,48851,637,100820,83349,10317,60227,21972,6908,282439,32857,224767,95629,83882,42106,87338,69757,29840,68709,37665,45244,114577,49188,175943,54009,186746,106158,70168,3358,234002,50555,9221,129338,9562,20118,32923,78479,118280,65752,4977,10474,102174,60947,129006,10570,83451,8598,8078,159367,123785,80438,16742,5905,5281,181513,42402,6977,163136,93179,42191,14968,50421,112401,105440,33456,57347,121611,4221,94954,36517,24046,27796,6255,33394,72990,135408,116627,1233,57874,25654,95419,68156,401399,313338,55208,45573,93124,119251,47200,38196,11909,130667,45391,73904,64964,167846,4137,115606,52036,62214,7969,160925,7187,1132,134835,40309,73195,64494,80472,444841,61111,26500,45323,40743,53625,52797,22659,15631,29739,36706,28841,39147,102836,26794,10536,14845,87305,45874,12241,127587,83833,57183,79722,30844,41304,84655,20825,92500,3722,25655,27811,10157,81634,31362,34088,92487,70123,22190,185100,72658,139035,192523,88241,2078,230490,44528,85638,100198,22088,29982,291233,241062,13865,4445,137791,37835,107218,31726,19718,38234,72528,23046,19177,66695,5109,17251,28077,5617,21554,47839,72425,133825,1486,73065,181275,141508,21768,62971,63082,2512,34200,9904,120309,6392,91243,68416,268253,41199,116757,138551,185526,41246,28986,4093,19057,17295,4148,245766,122360,35356,112075,20301,75441,10998,7977,19769,62922,937,63547,100196,26427,157820,20983,236696,22935,8140,90315,156004,47204,140973,7726,45097,52725,22636,23436,257282,105247,522,88389,216031,202204,46812,211666,19693,68828,81691,45925,11256,30292,372,5236,167826,88328,232776,151611,5360,82104,18841,80393,25465,18285,20320,72377,31730,33160,45803,38715,27705,37379,24163,18360,103586,4015,32305,269494,91252,20080,36567,54650,7797,57073,12650,31164,42209,6375,261663,105528,81661,106002,2800,5375,17247,43151,4442,15727,194619,100855,144898,62320,78465,39929,16454,1967,28311,61363,17219,9395,8745,121445,76939,80385,162380,22009,54191,44248,16299,122830,48151,74429,78291,64755,14238,44966,2511,17712,67954,93583,829,105899,49935,84750,11591,33185,85447,42717,27409,208542,28965,62052,52525,5597,25694,65594,16343,63224,276188,12475,9331,127507,38522,57287,24128,133161,79723,105548,133695,48917,27558,43278,46520,13778,141954,110785,83366,17715,46317,105763,66298,147013,41086,94180,16478,220447,44611,730,19722,78975,117889,125643,26254,16574,18480,65006,15806,38549,246418,46052,36056,8440,34984,30170,3163,59800,4458,115442,4283,41970,33507,104078,1653,22,121158,276486,3655,6338,24048,133421,23641,2161,24422,36006,8086,10675,181474,12307,29514,59143,14729,52509,87128,122470,19446,80852,33314,24573,119864,14237,9652,57779,6612,51851,15284,98871,90581,124466,156831,21190,22015,71380,161906,87247,69201,18392,17908,108470,72962,40719,14338,17911,95260,43339,20610,78916,20710,72451,11315,31448,17263,58853,178878,48111,116002,45497,80506,82605,85880,36300,121755,25215,36118,301929,88728,405223,276136,553,34704,212438,49970,78329,922,20711,25036,257130,38295,145369,18128,15385,30829,55656,48345,8012,3561,28004,122041,192900,58338,112508,41085,29976,87040,47117,23905,4336,92061,138880,97407,42083,172121,6256,25192,172671,5,93568,1420,12677,31605,56743,40620,6015,78415,231077,31298,80026,13902,19048,24924,170586,32955,176119,87859,36731,6773,27711,24658,26475,115216,133207,93250,95820,88522,8317,5714,124047,55219,86860,19677,23961,22928,162209,8904,225992,359835,56084,96201,29392,96558,86071,93643,55114,13347,8183,95129,82012,2017,123336,34219,115554,157159,47747,101684,41008,18735,193781,104151,226906,7552,179874,124113,31159,21162,44010,14771,51268,166128,31382,73124,77438,92830,205709,12113,1292,38937,13114,1334,2118,15597,69581,14449,21934,76618,48728,67038,14967,51495,24243,87736,147249,26720,11119,46063,43749,5843,44147,152629,133428,65703,14269,45604,57982,28672,55616,45957,8438,95433,37698,220862,132034,39456,61870,4161,26501,73560,56418,9845,4654,20916,10456,88920,119358,9015,65931,96507,48029,38534,21676,109081,43078,34943,25089,6131,28766,23665,5477,10255,16695,67,45778,42443,42770,29534,23733,100513,62617,42630,48746,14191,43753,50295,26007,8792,57243,43119,54725,164253,58250,112304,131796,25165,4651,3188,24831,47748,3705,19540,13211,102095,5593,18699,23666,32005,117571,33541,60584,74573,86311,99443,25172,27222,168938,7143,11853,53560,18834,19960,86522,28217,53266,117700,72989,34323,18721,66450,34346,74056,47217,202002,46269,9429,68582,75458,37823,82843,96652,32549,145144,27958,19820,158086,31955,201406,135379,31207,192545,12950,51704,9094,248263,76147,64028,110009,79407,89345,99284,223492,47966,26848,15359,201137,2861,110507,71231,72297,31851,118777,71039,151051,240855,16333,50766,14727,7939,4149,80908,418780,88378,59276,1327,7284,38576,79814,65820,42199,84860,49574,62596,12396,70598,40117,8648,7994,16836,7630,14047,359699,106878,525,29037,28064,13380,11675,50669,74216,103539,180314,27449,56299,172344,19274,7301,246099,32043,19422,36506,129317,6806,30140,4614,46639,66926,932,86600,6322,27847,233103,10541,39025,34887,3517,12972,26220,2031,66561,115015,48658,47596,12714,33845,3893,16165,35237,89983,14769,11962,147224,47018,29977,27979,5552,82338,86023,131368,1218,24853,237840,132193,15455,40873,3668,65351,53388,15229,59889,272245,47934,11858,34347,18038,90853,86981,300602,19343,114181,29362,84921,6095,106059,79472,38015,1206,48741,6208,8e4,21916,17423,6002,108083,24479,34931,56661,9511,26995,100694,163853,35997,81254,58321,18919,171890,86877,91341,74503,70477,53412,7027,59281,39892,131302,5864,15947,61301,67466,162369,47956,27874,35624,282324,21270,111847,102548,41482,30955,116737,28264,8592,55458,22301,75090,29821,30697,51709,3041,19208,8038,24634,30467,87509,126428,19389,18814,152686,20701,83474,45832,80891,105808,11378,153223,120770,98186,150633,49838,9141,12755,30962,5260,74490,21256,31678,65062,33326,289838,187831,20595,89768,2805,58535,10844,70085,12090,2451,138068,98544,24461,4511,6754,41684,28203,3383,65355,82833,30161,83924,234361,128424,28921,222594,33975,125491,34069,11508,67464,144226,41850,98703,34371,7901,21254,38398,65651,23549,53883,213340,123269,12028,71764,177701,28758,2623,68395,11549,15232,68603,9660,63116,36079,57093,31198,20475,48467,89984,35619,186847,107469,31389,43631,73867,41949,68841,114250,1605,30564,63403,17588,27680,99533,12641,70325,50428,73426,78379,11855,91651,72081,91720,60198,15743,12065,83398,140046,6761,46598,45900,5068,886,62448,148968,37347,19405,9680,15819,43496,63370,75667,163700,37639,3633,22774,34341,183131,134335,37200,23915,7054,14194,12970,26438,13350,285521,25594,8219,104410,91039,168804,138480,149734,15907,33818,61132,60082,4622,110187,56736,13551,73571,3945,73463,65498,17758,263266,17593,2710,27585,54469,38200,45367,63754,28881,3473,12791,98287,31895,65787,4463,94536,24951,36332,59901,28803,52130,86403,7668,181822,74831,18977,9850,177206,145485,109798,7292,31421,26280,77211,58511,12507,127004,11113,147,8729,56208,43066,79926,129937,31345,83947,39915,46146,98763,42566,1337,13192,18323,105163,80570,117753,16555,72883,11077,159438,40764,70933,83329,26066,12276,72059,21655,173836,126713,69454,153482,91585,70644,102558,110483,6764,127864,190133,3961,101798,20945,71138,82402,90884,69669,44753,923,16939,59700,164258,25969,27082,31399,43846,6306,246093,51342,6153,151581,202801,182731,56475,162188,89426,141356,14355,121815,27536,28023,65257,77523,106668,127314,24947,12790,38796,169698,23555,10725,44573,183083,42088,62716,43265,105958,32050,44067,50118,1668,3874,6243,318411,16599,1691,94999,52378,28671,216728,123258,2059,34969,69225,5913,136280,171443,141515,91662,22175,135282,80020,92270,1663,4808,4482,3495,34691,5226,109830,108512,17342,107488,11606,123190,100247,29666,146527,113014,15794,30894,13224,39585,243192,22351,9903,7836,47699,11078,25468,122291,48821,26780,122679,75521,81450,630,4895,92900,55074,74293,17441,3563,111657,103102,51613,12318,52370,36191,68245,34269,40445,41354,122901,168604,182500,62012,42557,11259,24428,115113,86345,12362,3909,78430,86852,134602,20459,47853,93879,22577,7659,3688,38555,13349,17381,56715,91639,12493,10895,92438,3142,37057,28928,2004,36427,32268,34222,209974,10432,67436,41989,173518,107930,27079,62729,30908,55558,5828,45031,14902,53546,8204,144263,60255,14520,88212,86582,109589,69356,8064,47449,8505,66558,16886,4844,52817,111260,215129,12941,91118,650,20770,6273,73089,40618,62790,2873,35002,14023,97208,19386,102646,36993,143736,135457,35385,113601,17893,32627,84439,100619,56016,6581,57264,172160,45452,111710,203627,70131,24100,322787,1996,35665,70078,22358,90922,83658,4097,63200,58499,14542,99153,52159,6615,12414,63415,31986,16823,1579,65405,137809,8841,16898,48082,259,33014,42375,12260,179850,73667,91389,98882,29532,17311,326251,41092,5928,20742,44964,48019,43505,9317,49265,6643,192712,48424,163487,19861,20113,70848,31928,105333,23685,78563,14638,54755,7158,24142,44018,20774,125255,20331,24280,10163,1285,2336,39851,4299,117269,46714,63816,87779,159624,11731,9971,990,137317,108831,50994,74554,162680,23640,131597,146962,170620,34829,91205,21184,1913,63616,18427,93136,156592,17519,67565,115882,138220,78622,88535,18115,2711,33554,109492,54298,971,24914,25863,36363,45715,27099,194995,14299,178181,111488,72395,322385,157719,130787,11897,81843,83999,11369,49280,118604,40922,61332,110343,53407,75639,40582,300440,54722,25637,13694,48248,48278,194521,56203,52779,48783,72627,10953,376,16733,280238,26351,230789,15132,25168,137270,3588,63704,73376,94031,74284,19443,159557,9697,39901,13351,119050,15406,146455,3460,29556,75195,37673,102524,92329,47289,98413,15311,100684,56345,7116,95480,11590,7200,167,23610,58426,17730,136656,27944,53151,2701,8824,103124,3017,90744,113588,53216,79736,65940,26931,498,29568,80540,143543,21292,1740,59268,16561,180816,42323,50174,40890,52866,10703,57169,4700,17191,4424,93511,49698,166650,26972,48631,165169,82879,69326,202970,4007,2376,231325,139592,22119,62851,37504,68816,58345,67398,186643,43331,277416,53749,15746,23102,17432,4793,151138,48822,54265,48203,198688,14305,54287,2291,18018,113378,123260,7180,97549,87027,120085,2920,76080,8190,102005,5641,64580,14955,59802,54028,58884,19367,81779,412567,85957,97053,103637,78871,29364,27637,141728,4767,30686,112738,130146,42745,12730,105040,14844,232,210944,36581,152317,135543,29744,3129,55647,58149,46319,27265,17499,28005,59948,7170,34138,5702,293047,110892,408,91760,218674,18469,46095,81403,14389,4610,35672,73060,11006,74848,104820,118143,190357,20043,105358,141735,5115,27093,45924,123073,52599,29433,9616,238350,78610,24851,58858,26769,31969,24613,18294,4982,32735,39639,143563,112073,202205,12567,4873,88601,44897,81503,101648,81362,34662,85277,17574,48173,21435,221188,40215,39576,80786,26544,64668,81841,10731,37733,247986,149188,127703,495,18382,54388,72446,43071,30974,198723,89608,41360,190,33045,8386,31658,19992,237838,119015,137622,50890,100913,6460,116233,267230,26621,104129,65114,14190,41542,14888,85962,23342,23041,26453,43725,71809,45186,4770,46452,53894,56616,221286,18973,9038,109299,55365,19366,26863,18808,60909,69353,41738,83463,12100,68561,72860,3980,13796,49340,12332,31311,27418,4255,53430,18976,45523,510,14224,30477,26581,4530,3651,101663,139840,22709,150861,31996,63923,120623,262522,3076,10528,2929,14672,130238,18087,9816,121894,100308,25085,55111,14565,18952,53293,2042,369988,23674,61789,133529,28783,108293,35477,47119,36448,71049,40015,33055,78598,198442,1833,159937,40654,77444,189245,113153,8621,18599,38553,35223,166072,2375,11659,21786,89523,6032,12116,63046,159398,18454,3678,32521,47626,11411,103527,38896,42946,15696,26370,10185,8413,37080,165583,4331,63555,14907,72220,50056,6623,62236,36565,49783,10049,17503,100581,55951,146244,24724,9626,17969,25524,109300,173965,99994,101056,46459,43647,53737,277968,8347,123521,74858,33829,44762,77574,877,81377,222525,123532,30602,43881,53145,2973,16284,81940,61281,127044,63620,9875,14756,114829,19032,9202,52759,119141,23928,120551,19607,3599,33401,76821,73233,117430,39968,36539,7071,5446,121735,194059,15206,45283,6706,15603,65615,1207,165723,92275,34773,104447,8396,32353,205240,164323,13600,60555,79205,25532,22907,33410,57480,107111,69630,32137,47832,70913,33161,20321,2371,117348,10714,86246,1625,11763,17900,268,78457,99175,97940,101092,86660,32221,14041,128504,125080,53744,124263,31017,13897,403,31859,21964,5633,111630,5547,77329,17961,18241,84995,25984,12983,67491,62168,47262,5241,297,51191,7351,8967,147212,82060,16821,782,11033,82431,62957,5026,43459,77963,203477,53528,6247,191852,87774,74164,215654,13467,1522,219964,28589,244104,16242,117821,67725,72570,156792,17186,15979,26990,44128,193014,35276,57125,16212,166451,68017,6905,77608,16364,53777,75921,76426,37975,26203,269296,64099,84122,12077,38533,830,4407,20139,963,43028,38902,42911,37503,83343,85045,16979,1165,60835,137387,58380,86990,110066,134540,56331,193845,81238,17922,163093,38744,110641,12502,56404,34862,26865,125964,12965,111648,25547,7771,27196,136980,9555,29551,107158,57885,18831,37705,35505,101742,13970,102109,62548,124657,23328,11124,89592,146376,248050,6241,22033,18337,80685,29898,11908,216623,67721,106162,146610,21377,15085,91552,42041,62560,122532,125336,102365,121537,142559,29693,223919,11515,110495,18776,22494,5895,185059,103592,229351,51220,100102,37027,257855,29359,54123,36066,106493,12244,79258,32002,432,56205,94836,90182,6726,14762,29391,48938,26864,38083,60364,3310,60192,14766,205567,57504,110760,22649,24666,46333,21517,3430,13135,28873,27052,158809,11597,20529,6695,23138,22960,37137,45574,6545,305877,43423,26153,24769,59844,14501,10430,134352,56169,13213,103432,49523,35181,13435,12408,129475,64620,230854,77390,51990,15653,83248,33466,44571,117828,51481,2187,10559,68019,18021,54895,48247,18354,33737,4554,108595,37288,39767,116707,9175,3726,108877,21616,83684,49862,1938,8543,276466,20134,108498,48770,102254,31914,131520,185291,100559,51890,209,19526,76471,50544,71814,99351,8172,198526,28816,20419,9109,98389,136777,76479,75596,30635,165417,48216,120220,25955,211071,39314,24308,32164,2559,146280,43403,9233,17947,90585,1786,86920,125662,2457,64741,32152,32918,122882,78538,44001,31723,56426,23375,103172,88177,145697,52506,49319,68016,31664,41488,18486,110400,7030,28241,986,109199,19900,42147,56864,65287,49183,7858,24e3,30453,840,16673,25907,68916,89927,6309,158335,36407,199737,130464,13137,59603,201778,195292,21015,42466,179062,172561,89492,11075,180407,31868,72493,20998,60217,9865,19530,39274,130266,54539,21623,12535,13505,40641,73375,4087,85633,2153,3117,70680,55788,92096,47509,98493,37490,271936,151475,3032,16171,96642,34106,78425,125761,19591,3366,19316,54508,24183,50786,194248,91528,33253,34622,108355,41741,705,3814,3883,108929,13203,67831,10142,59754,68208,29128,84820,56880,38794,24972,48571,40821,40476,18137,164254,24064,236309,79181,11282,395,39169,2013,51587,28551,9645,701,109513,115899,113566,12762,62045,58322,103726,41343,40866,244102,143816,2490,70346,40973,52618,15412,30720,104315,38917,42027,93676,17513,107418,20706,123890,13399,97727,24044,87962,65606,44250,98044,65276,74790,101473,19350,91570,1326,87790,172042,7577,100813,86896,85891,41512,108130,27794,14875,71431,12835,156250,58135,3759,22476,42176,115873,34686,56523,73643,108505,51491,20838,12721,32863,45700,29496,13700,34294,55360,29206,155942,123812,7706,163234,203,132720,49358,144431,8130,175788,35818,3270,76832,25710,54095,97274,28779,94621,74396,19092,128242,58067,20885,14670,93255,15107,63291,23654,126900,129421,59294,262659,9798,3251,67344,28600,44629,50672,29072,26999,31526,23183,49175,165843,175455,17282,175411,32022,45989,30298,90690,78118,83156,23749,35636,31317,7069,80381,94561,133756,14960,97404,6138,41065,78041,32843,16601,34123,9559,146529,123377,96395,54441,42012,84257,123541,10745,22139,106459,11720,150883,172651,154996,110538,4728,53447,25704,2009,71152,119354,21166,66604,1429,216162,8637,122250,63520,27180,29172,36124,276428,107787,77184,4680,14952,104903,24418,14793,51561,52931,8371,26342,48526,7118,92066,67280,40653,8847,34597,105438,14198,50163,61188,146286,50315,41205,170829,161496,585,197359,95056,1687,365794,91349,48507,5804,49263,5146,104902,96365,117343,132222,46084,96919,16875,8073,262381,79982,52663,13928,16056,153908,15145,109256,132308,18763,24904,167644,13618,40750,18686,147124,114709,150038,52849,2938,12568,48617,8778,5459,44202,44591,74914,17183,248689,13878,7822,80060,23116,194037,18487,2067,7798,43077,33678,244028,31320,74273,2794,19466,8218,36280,183997,48124,19416,29656,19280,98734,7715,18311,30701,133602,150307,126956,7378,2933,79903,13178,12593,86571,26604,92446,13574,44205,65699,427599,21118,8245,14407,27877,47936,33542,7916,26460,117762,21596,37818,2249,127359,209394,60044,47677,308089,36791,154971,31417,6998,150042,174360,12255,43009,29335,48739,3912,101398,53340,2580,146939,151295,45360,125275,15273,45383,27456,48761,23314,8750,60801,85823,104759,27894,123685,66968,39480,26917,55290,83305,2696,98390,57569,145853,340733,4919,20024,52268,30884,7413,203685,70989,112855,4129,50536,349518,68205,332641,159581,135361,236026,37563,176404,64899,6578,122033,63871,1850,85234,82089,66124,74145,121098,107351,12687,36881,117334,13136,14698,85933,93866,18047,32620,310,15094,46e3,88451,23632,36645,27940,87618,80520,58892,20976,27702,140090,96075,67841,103292,238964,87778,107338,17019,83427,67522,7302,8261,47570,116787,8730,80484,61772,174422,56005,131193,52875,14588,28471,59817,9586,15720,158155,51307,109734,15196,11025,59331,3884,52626,102602,84797,25158,27314,4437,20488,76214,189248,35023,114952,157376,2827,62439,102878,129749,36405,10329,109339,108633,36662,1254,13267,5470,87105,58004,15397,10434,159667,21864,52022,179464,3013,32147,31496,116832,18494,105502,129227,107267,50033,13481,9954,24267,22141,16257,116154,36185,950,115685,11305,176708,2048,178671,112573,287867,162328,497663,95170,50979,193861,50987,30368,136257,31830,46549,15119,169876,23788,17462,249887,57377,1949,35448,14791,43769,210091,3783,34612,282103,88380,245190,5457,20491,98908,11402,86899,117916,16028,162584,60644,320177,156096,31065,55876,22e3,77655,9992,23397,13757,317623,63978,215255,2443,17648,93231,27388,104529,93807,55505,140477,12046,112040,70887,40152,94365,112353,25063,114679,266061,71248,119555,15589,2244,617,14129,211431,70110,100652,7777,4383,85911,89221,21010,120615,58357,86405,37554,41647,18,15143,69662,60491,14714,186134,148344,42347,5410,168175,44535,42449,343894,129417,99682,20659,27272,140483,63455,222159,17536,13722,42637,62324,11976,114691,148109,2283,32057,182393,4295,147364,33705,2075,44303,30274,28331,63740,69740,29148,10346,44862,33716,73937,153333,12930,38784,247159,2515,41053,20256,83368,256189,54639,115240,5096,24661,175419,153552,26516,141,138176,63885,34115,47222,55709,2765,28479,38875,236608,12229,22921,77291,54426,45388,2860,57787,114579,295139,105782,17826,71066,19119,54364,69385,16568,12323,28057,33346,34919,124763,155533,101386,31644,8627,49001,303600,29868,63213,9103,77280,71333,9696,138789,37059,24823,5057,21352,32368,114208,56803,19424,10445,58514,8661,209508,26187,171838,10460,63454,14016,122504,41328,21329,46618,32493,38225,7855,31763,7945,29876,8734,6438,24205,97490,139977,130740,47323,33195,85390,57194,13813,60600,21313,96251,7699,27584,170521,139271,1363,4402,336738,129223,84983,69150,13147,3590,163929,207225,155260,55916,20288,4503,8398,98490,11773,27512,37113,84976,86558,28365,11756,116005,182148,13733,115313,47644,67208,85069,9347,14995,226141,14704,101835,41159,35314,13113,63526,214039,29978,50446,83339,17440,129441,72522,118641,97816,24907,73844,15717,118884,167255,96509,162793,30847,36849,51297,78974,77793,10427,1873,2972,9999,35074,28190,64297,146836,46298,60038,163007,108919,61219,2403,75022,127339,4233,110389,69022,9833,128097,88016,79390,222936,22570,94657,28462,56956,38803,81536,30474,152794,19566,16481,147408,74574,81895,20731,1918,1366,76367,187321,54494,24366,21690,61696,33283,107477,77499,31112,414383,74362,18463,218441,120929,59848,258629,201924,69269,454,19989,13054,59894,3623,58908,20681,35723,78523,102680,38988,184112,108087,50944,132704,52966,21699,18860,96349,201411,82697,85395,95658,5093,6427,177894,44191,32755,26961,155739,6249,31310,81030,26574,84311,120155,86730,113535,7424,48888,13516,45747,98098,20077,183995,81945,43210,26704,40420,75831,45648,11180,6855,57927,65528,124096,34851,2598,156633,107572,127352,38169,123845,60142,62722,105584,232364,23211,68120,1601,22169,89299,747,258039,80572,7258,152249,11862,101204,8834,121434,33761,19175,133142,46343,40178,48723,3589,41977,30210,38868,62257,10087,82658,87827,90646,16415,47552,351723,28298,72225,91146,272760,1701,11295,1652,109651,300747,51863,198800,29446,11794,32345,37538,22356,33102,37590,113544,37970,11478,179743,25454,103417,59905,221970,105196,145604,7817,164809,102360,16974,75840,255333,56902,6659,1954,645,59400,67769,7689,18675,5215,13793,20536,27852,3387,29523,259718,16860,94625,43143,29245,15848,233581,22685,63631,78557,22836,133302,84513,1348,51826,47129,98836,58284,1830,1749,94642,10933,6145,12506,10975,13879,103781,144434,10268,28409,32346,52968,121567,107374,77268,23686,35097,10501,155275,15303,47136,21102,168741,55332,90385,15996,84817,681,137803,25054,142275,6163,38175,8056,124296,240642,65621,4934,178205,16101,62803,60964,18230,100622,76465,44689,14545,9543,47514,16852,93380,28048,12047,107106,37575,101485,77047,57326,34819,96137,76916,6469,46264,115983,75768,87668,69942,13027,165,8373,114231,26434,52844,42799,182044,23580,146254,38081,43236,33883,146220,382894,14606,46035,36481,166621,35417,95382,2957,59384,60428,36358,66343,75378,22267,22950,83528,17577,56474,25285,4619,179691,75355,95836,53295,34588,171410,4487,14679,84208,44015,18562,109133,54101,11531,86052,174479,303157,28095,9953,35642,14564,39802,16145,77606,117406,53038,121117,53624,22062,1212,7632,127157,237292,189087,10478,127345,102515,181997,86752,87623,10966,121602,68783,68681,83042,114380,138349,191305,67176,50085,39016,1427,42384,1412,67118,122616,72389,25260,2237,13576,137346,19938,20304,2191,68759,5373,61364,238507,75814,23931,69565,38993,131741,38364,12528,87762,5679,129853,5310,186831,32653,90338,260176,389531,108118,26843,43985,50175,30563,25106,56965,18130,140428,4542,165503,117991,24219,229605,1819,129663,1240,3797,76093,18398,71339,51919,93043,27175,47060,216257,6483,35051,1217,16512,80798,129064,13225,69339,8548,237079,72298,2575,34280,51379,117910,55671,53345,247552,29486,39328,140821,34681,57045,60177,5004,90269,78522,2479,322607,48474,61296,13057,31558,4678,59271,6699,27044,31988,35944,12503,83480,4389,136508,3781,114121,70279,4488,155829,42214,2898,68191,75695,305850,45041,74344,106509,30087,17429,93292,12477,290,23080,114802,35714,18751,26554,105424,17775,2144,2412,100610,65192,113975,52975,180272,135050,129815,76238,106483,21440,63186,4260,46189,9711,28249,4169,23429,23390,8324,141585,63809,67668,38457,38063,39226,59972,1189,203916,62368,14403,16949,61767,85801,1739,40147,35049,76757,33124,62102,15780,103593,103009,53484,22952,67973,114645,6566,5245,50462,7601,8288,3513,194571,80276,1908,54592,5124,58571,2513,6800,273997,193904,1119,17991,117245,2508,129156,82366,26278,71465,63341,56943,39662,106116,94966,156875,9736,2204,122308,94418,27134,1280,24539,49022,45314,3764,50904,46424,30699,28087,293839,9400,33646,40165,822,147499,50263,116179,29085,11863,31314,5578,17797,5104,12454,1604,15342,219206,10232,67800,94261,25872,13565,90339,78971,75377,26649,41184,47695,11514,35369,20767,14227,41953,309396,148270,147938,33074,14453,27499,109019,39018,25738,240196,158931,52820,8612,95853,21524,137010,84901,70869,70021,116794,48404,38771,6732,1070,70990,187297,49140,5238,576,3564,253975,16027,16483,2811,37775,19034,25259,4053,2e3,70083,95774,19713,33431,92703,91314,42381,288770,48194,95985,3991,77418,13406,241328,245086,56533,35275,62725,9246,51924,70181,95331,16163,31410,79016,39312,120878,119371,275987,80124,27712,9186,220,23598,146167,85209,68238,282190,57048,31273,30555,80913,17594,75779,59160,135002,101219,189377,29225,96735,60126,62522,104e3,27620,86814,17240,147533,11001,5425,43682,410,49460,87270,69480,46315,59448,1816,76201,9431,11788,87960,29063,65539,47347,11678,33846,7008,196704,9895,6753,8633,120892,59970,572824,115934,6646,202559,892,48351,37611,251282,57823,67263,57750,26527,34485,90747,7685,88370,6144,64182,1709,41969,21458,62327,181657,49247,225330,122600,114574,107124,85361,111833,63243,71420,15655,191178,72430,18063,51425,54002,12364,53225,86557,18193,97580,41232,138398,67821,128724,8944,233212,101353,52099,42127,14006,120107,32789,32132,3498,18123,33758,56058,5779,128760,59888,98869,18445,84702,51911,13234,218379,20093,39031,8074,70195,20708,23462,24355,131384,60189,26390,10403,41060,7140,10781,49410,42261,87202,82566,41663,43105,60276,2768,5733,74176,28329,2297,145430,131632,83615,122915,105441,655,224102,5284,136426,67763,16294,188511,32538,61049,27893,3394,13951,159099,28542,17930,145360,9492,190122,32285,78855,26440,13570,58648,73908,4239,124561,2444,74172,53131,11468,10794,73566,11623,35343,64710,30481,4163,10328,38309,29901,10538,154377,76132,92405,24839,11679,3465,13449,11637,7824,2337,57754,1260,14458,41118,19878,38661,13416,159180,37074,163164,54137,28627,52134,184900,8520,40385,29546,30502,22386,66527,107458,6850,24022,47983,30603,35083,8934,304066,39500,9,28261,33026,77251,9374,44833,116312,34990,29236,63563,125639,135405,165398,159055,55690,88141,69643,236964,31983,25572,20436,36746,60896,31850,16179,11828,5888,3043,66368,9750,31167,7915,53111,36430,1333,64344,93659,20061,60596,180191,51630,6792,30244,43509,101058,22409,420,44210,109783,43223,27030,72477,72831,32679,29235,7675,47556,12258,39907,149412,84926,118247,24692,71717,105038,86009,45941,41189,89453,29856,52543,30627,226798,67303,59230,67415,34408,1367,99685,16867,128419,52147,4111,125381,117881,16173,44093,102224,31575,23234,24870,83790,127407,239098,3200,994,1255,100903,242275,117266,55116,38205,16140,29662,11307,40414,208793,123355,56470,4862,75600,30119,58218,70828,24075,26974,7802,192353,4851,5475,78720,66596,3409,28573,64396,30381,30690,59859,88256,5406,99945,103064,34463,37727,24238,86643,60088,4057,23741,5967,162904,38240,28356,93858,25510,122879,6897,3278,7057,11971,4400,35461,211413,21395,59615,39471,87233,55795,128426,3051,22470,41950,14705,3974,180108,80476,78442,204996,91987,15634,67610,139015,142373,35611,51134,10387,4353,153456,57749,181039,14183,68447,151532,21107,36452,20551,3186,46247,46383,129666,88736,140662,146243,2066,8360,7978,64818,106963,17896,47801,10723,114821,223295,74192,3293,3393,16987,74064,11277,91622,4270,29828,27951,387869,103235,1374,61988,120083,477,145892,128378,11779,211263,61354,18221,17869,46530,83061,108538,157981,90608,67199,95080,49064,195814,12302,66307,10348,231346,160732,112859,63633,146558,21271,31037,198802,47622,12862,95710,3910,77850,73961,85585,34752,61e3,4082,24595,103679,71107,8208,79568,150019,16615,24961,139857,32664,197366,4559,54735,32696,4126,162019,75698,13916,70108,159638,19834,9349,24675,175560,49643,18206,52459,27992,10809,88865,401975,133172,29e3,34558,30915,3658,25834,42430,36562,125265,18182,10155,40149,97082,208980,19575,60853,90529,66545,9600,789,46420,2317,88593,55595,98980,115302,5742,169155,1073,177901,3472,11189,63711,78643,65472,50459,127979,93,42202,67053,21720,157650,11145,141378,42033,22824,85705,79114,35584,15974,1510,54172,28562,12451,104226,19190,97151,73024,20948,5151,81741,21499,29006,84183,198074,54003,45120,170125,26240,35177,28389,64863,79974,60778,176915,232183,45342,2038,80253,41564,40703,32689,5430,100689,5366,23007,134279,14266,26712,73993,24934,64242,52113,102887,61801,46415,201049,54251,62133,122757,164883,30815,139966,2319,30842,766,13362,10287,134518,86111,81665,82440,28333,43019,18963,8804,161944,23439,102144,101145,80029,39052,248708,30350,117340,11878,128467,974,138625,63961,5237,74778,61834,67040,43814,13690,65947,33809,232476,115258,181745,28824,94013,9510,10246,93722,81976,7217,114383,3493,16014,69045,72692,12145,80981,9507,6692,1620,60820,330444,35474,33962,4797,7053,295463,46445,27026,12491,77988,49524,35675,90947,29114,166705,101385,133782,32704,6186,84595,176031,185623,45966,151302,63069,1699,107491,947,15458,74452,196212,6046,10498,12163,10239,35191,243951,9277,9090,29539,54460,22820,26514,112549,60372,51753,48756,21812,70861,260326,41,44222,10441,16961,48148,138771,216194,5914,52153,53400,212036,56519,26245,10117,45888,15294,138019,90913,26368,43842,42111,23348,6082,194845,161089,156206,51546,11647,30759,302912,262094,8635,78876,26535,35283,54183,31183,85484,147873,12989,5197,6356,72894,65347,20150,27370,73787,1493,45918,12366,190217,20724,13858,10981,67449,81213,7553,14115,72242,271517,11842,48310,88743,143726,22177,3290,243231,58452,62937,12592,1654,40066,33477,13751,9921,128442,15868,7106,75236,83773,10775,36938,10482,170465,17368,17469,161508,32752,98340,800,19824,264456,3901,87319,2867,26782,9630,113102,185815,24197,44584,86366,40224,3636,140916,31731,267731,9567,53678,72984,29389,27963,17106,50282,284911,60170,8322,12608,23374,89652,5268,39044,229766,8869,151350,31436,177342,12269,183212,120418,116270,2843,78888,69192,7865,184099,1086,129897,18383,70508,20242,18508,229924,124569,35749,50589,55626,9884,83115,40971,30671,18135,14452,38861,17844,201826,5549,26413,17189,13561,38539,10679,143331,3314,36785,171194,49685,187713,67506,4618,104039,17060,195080,50648,33159,19238,67559,134840,28599,157523,17130,38064,117398,94355,31918,13575,34538,40326,13997,3494,348283,62481,26862,3603,104426,244363,153709,112487,304612,199674,41239,35545,54869,293005,28223,26277,26899,4533,18518,15492,38587,80488,70485,160395,263,60162,11382,222152,4696,250751,51921,182609,10707,48463,46243,1227,49111,111564,46502,33342,56846,68541,63559,858,139927,16654,229375,76759,26478,33205,95828,23399,92945,2637,35630,28470,143992,50214,14174,21456,166191,65665,1711,21594,78019,97599,111701,36,147151,110246,189022,43021,30397,40757,131935,42065,73335,48039,26596,28984,15102,2361,7421,202167,69744,43766,52826,3642,83304,33873,75140,63169,192389,36551,92748,13039,123959,233220,21738,84447,77230,20228,187852,19095,25799,92136,108774,29237,53947,2299,118106,2687,8830,42331,202924,33667,2023,73763,30704,19363,19779,16737,35629,48081,24068,101013,162338,291912,13749,24745,328289,167679,70086,48299,23306,16732,17801,43322,54589,3586,63653,43624,53474,925,109177,251316,43805,13082,19511,86565,142182,92461,17117,101033,103319,64589,4022,4351,235897,5352,82705,107142,46391,156084,5860,61365,10558,13045,7717,18357,33922,12590,33065,6928,46993,783,46937,67846,8952,26295,6107,119656,18799,17458,50747,4229,179559,112727,118080,20683,41464,125468,51560,49749,44231,7359,35339,62988,136487,67015,5208,29150,24956,105186,48858,6143,18097,6972,16404,73489,58742,97196,36357,164616,5834,32267,13746,147733,15113,132091,34127,106298,39729,106426,22294,9780,15602,36213,71502,42808,66802,599,60755,5851,39120,67363,108623,126368,72770,91263,32486,30596,151717,7951,52002,43103,11768,68942,40901,39344,24037,127500,116890,48403,16926,86750,17745,48648,159545,34460,58419,5634,114317,67865,31462,23352,24010,98185,125708,69686,68337,13610,26271,70691,2980,4768,27225,102402,75453,28106,8104,6931,1176,6274,6475,112635,22498,6176,238686,26832,28893,90319,14441,15682,15087,39517,45270,109134,104440,45965,47645,81772,7876,52683,87720,12898,4505,185665,2769,113401,15664,57592,105229,137381,97059,119268,6876,43309,33886,128363,35476,144249,67013,143587,83367,25703,91436,59347,53236,2289,16519,19844,46309,58558,99834,23313,218816,231303,36388,51333,183535,109792,139277,54306,90139,18235,8275,32710,37677,82464,86025,92204,88842,117723,37570,128723,234242,76350,73795,34896,148247,58424,11105,11744,45746,63372,17118,49772,199520,81902,38004,22911,33752,3125,1995,53792,4689,26909,108150,146062,69674,41811,161444,84855,8999,28561,16731,93937,3189,21967,24890,22943,1356,145300,51569,28802,517,118679,31703,40607,48098,108854,25003,10233,73969,177495,5248,24516,215347,146192,48712,60626,69188,40735,5866,586,101541,6509,47590,52129,5969,222045,110933,25733,24223,65339,62812,2414,155418,35819,16022,78423,43138,20995,128255,240673,46745,236093,72176,57085,97841,61248,107,36068,193177,105427,55726,215229,20446,47228,100420,87091,14429,121708,23605,21157,187721,21880,2997,203976,99166,95068,25877,7724,98925,83401,4829,13182,18229,13718,239662,38653,116505,153497,30589,89029,38962,181302,43853,78872,180301,4786,248240,7401,106136,112590,77745,19731,60880,77789,125748,135487,5975,48627,34084,12419,215770,47557,254582,10364,106495,21856,67539,88981,38805,21428,48732,42316,12149,16078,52808,25327,51322,33850,51147,12253,122354,46077,56483,254553,115417,81834,150991,94662,86668,7381,12841,100650,18218,15741,22372,68294,50705,15535,84660,61887,22553,72299,31361,24824,17743,46820,64288,31582,77006,111674,116384,30760,80920,86149,77192,51979,79691,60342,122805,103800,240873,160744,233114,78962,54920,8608,3484,316104,72548,24337,5088,230040,21926,10172,36838,26,86221,83458,102176,12062,17571,41929,41170,28428,68239,41750,103930,2634,18313,53019,34825,97837,63115,24606,73157,152474,14715,91439,37033,109806,140259,30668,174760,380,135597,95673,136073,65073,134249,13829,17279,122305,4420,46444,10237,64848,203623,70728,10349,182885,65075,24519,25783,40318,34139,22222,63394,55266,102764,41422,20126,65100,90408,53640,35128,48932,11192,38935,96839,34782,39492,19396,41332,6250,5511,19492,51304,25936,104466,54099,73771,86115,5080,7669,30891,111700,13931,25276,72289,135447,14820,258641,25265,31005,281179,75286,393,95359,14623,13584,6680,101227,80173,44933,76666,54542,13244,39348,458,25379,109451,134348,81143,6959,65554,12027,51311,8716,57589,140731,28467,23316,17272,30458,25980,55229,77197,83798,28302,114784,7428,34548,26241,14712,39336,103304,18928,54080,12870,334,87722,15208,16895,142098,114262,39820,83913,57817,28682,7721,14900,108672,11250,62246,42849,415188,1724,26555,24549,25505,26443,107450,145899,61035,43528,6901,60726,65906,267741,21338,147590,42079,18924,73017,135236,15393,5206,4026,84185,1531,5988,113890,82647,303391,7386,69844,71611,189865,76523,31877,13315,19314,198575,32821,1928,67641,25913,104475,103489,3297,70391,18406,15446,113347,19295,93790,27856,1792,167471,116449,8541,4408,41757,63233,25765,86680,64501,27034,24816,34975,6079,4486,49693,36229,16917,21581,62426,27862,11612,54284,35702,194034,355,24277,48262,87411,70504,310164,118018,12516,47559,43502,57433,107139,9290,66533,80863,14634,34312,91725,28606,21342,67241,72355,43244,375789,37402,174015,105070,8342,44167,67494,1890,16365,11723,271002,1865,47918,8350,45564,27742,25110,125803,8553,49504,81925,62211,4534,15491,19011,80373,206920,667,102405,128623,245524,5553,113309,192739,65766,19567,22832,261958,29679,21293,71134,20962,105123,24721,860,21752,33448,18372,157167,94822,35770,173224,232737,75729,28937,46828,28062,25453,5207,140366,36665,30652,6169,67920,150458,92040,23186,184604,92330,20891,176492,49427,27828,38305,42495,143982,49560,25503,90043,29747,65328,47830,12932,11068,77721,9003,25213,94205,140426,46090,89945,138173,192691,33329,112232,129905,35709,27514,1841,19957,31411,127476,53572,17497,173549,55063,175135,19841,69314,5192,237921,117660,150697,4060,273045,50414,98940,65348,153665,164423,58804,156695,48994,213928,86036,28608,8355,39574,34540,16927,135680,18374,151587,10830,53805,16878,16623,4282,48030,8537,14986,46102,13062,72897,72,33050,108227,39451,45935,651,113320,40535,95176,57450,48843,5003,19019,10407,211163,3848,1068,4988,32091,30095,41692,15099,43602,107434,50744,7627,171349,16313,150832,352665,207750,33937,38256,51091,156e3,87889,90663,84175,24908,114900,50365,31494,83829,5398,169342,47521,54818,18935,8356,43094,41212,174536,10082,92550,6678,60614,23355,69721,14796,34149,128830,58187,3179,208,40325,28399,225029,401412,51150,31580,207268,6657,10993,69818,64282,289845,23308,12961,38447,6681,52944,31855,2572,47646,120728,179148,37240,45196,218274,4816,3695,21961,50084,35209,18073,51452,27004,6100,33941,1377,84831,171214,85,141510,9078,99227,32610,6417,11718,49868,65579,87902,73018,49062,46280,61742,21512,40862,107733,15941,29168,157765,144919,14487,5767,158014,140070,7241,573,71584,16921,223566,40331,179473,35081,47926,140885,41508,52104,59180,42310,32811,29048,123517,102413,80208,10104,14746,12649,153641,126022,37965,113017,4171,83,142592,2809,6362,50416,71323,116894,260776,16204,1524,5760,30351,12658,20703,54403,36083,45408,74772,4946,14485,50759,111222,10890,2195,167147,92962,130534,16283,177256,35016,15472,210156,151187,73922,117691,43250,52051,37392,24811,24358,30830,5775,818,21969,1476,127322,151783,58392,31021,106913,65215,89407,90802,28531,11690,20234,95249,44602,37256,18707,11928,5161,4410,26571,51903,49768,22008,25252,65780,209499,68769,203726,13249,137363,48845,86823,6658,5674,31881,1083,1823,108676,34518,166752,13791,14287,91576,91429,8665,11529,26401,16191,91972,30964,5254,28486,54697,79613,66520,18447,22870,45203,194466,22822,51703,12278,76716,44595,73455,33546,12235,144843,36154,51247,11116,33040,3180,225753,60864,1972,28469,12891,28879,10338,144157,56294,353058,38302,41447,87532,110616,27065,168438,6557,1213,50804,144643,24817,2390,136531,38174,247513,16190,4059,122791,131994,137430,39506,57650,16305,5188,54309,106128,20628,88071,67394,395446,250285,66176,91254,1399,114196,43915,60230,44853,27206,106353,43013,18733,345105,226453,51202,16607,57106,117175,35492,10476,89598,127439,15187,39624,13688,61570,10615,31111,59370,6238,175252,32143,224492,41388,95408,34384,148238,78307,38959,9340,160091,61443,15737,11216,41244,170,38299,102443,113097,26382,14027,33707,3957,76300,66160,19431,18900,6952,1717,108656,82206,188021,257335,27295,43999,41210,31777,46956,57457,12657,11489,15697,48060,204748,53583,82422,284790,30503,137341,8120,19615,220311,15991,10217,63424,9808,67431,70976,98221,4491,15177,28535,144789,751,13230,2394,1504,33977,132104,30316,22230,931,97193,185240,24826,22687,174322,15307,22988,1390,188745,180325,29580,59068,74903,18994,29195,79,15436,7622,38462,11566,138710,44828,45774,37768,99236,68137,84083,19282,22698,17134,74807,126662,173497,46248,16938,119735,3212,28292,213652,49013,9975,32180,45660,86250,4801,68788,95490,77482,113751,11994,44624,94452,46839,128497,100316,5798,58588,73184,202987,65417,37790,88524,1606,43156,97964,105717,34947,11203,100060,37742,130074,93653,107799,94311,196106,41347,8035,10780,16390,27883,118236,167395,1979,25006,19375,31628,18916,144723,78502,114047,103107,86492,107686,5844,20934,206963,23556,22591,16562,146333,20167,10471,117434,33085,2863,9740,36669,41849,37271,22790,18209,28979,8231,12952,54408,21731,25130,45208,55748,138120,75826,414,29593,9925,292865,25999,683,123149,7036,92159,86055,61827,103680,23176,54918,58466,57578,13305,5709,86479,16697,31064,17660,200919,10770,49793,33423,32370,52047,16488,62555,6459,8426,83493,7763,59725,82812,18628,67760,79405,68557,9612,7673,28102,56517,69620,171797,32458,29541,15870,81109,32080,207644,71495,21202,11039,91036,61230,2810,130800,32260,4613,60590,37112,75214,33979,126402,155062,30642,63875,12810,194463,82799,47664,16725,36685,43367,61099,449,172150,102867,21691,301838,36745,7130,18671,57316,34852,38034,54182,35578,65900,99486,19771,3456,2658,16914,99866,28390,28109,8262,21147,34353,20006,4228,137085,1675,203023,283196,198286,214375,163329,290603,152574,40471,83506,30068,14730,23177,131539,34759,27668,32178,71896,104799,116305,85430,119262,42860,25160,8911,23428,49437,105322,6519,16203,6349,74711,1230,38045,8540,75165,44736,25909,51026,317034,4984,32281,91312,27060,44431,17817,45363,155937,239085,35697,59784,91993,29531,126740,213757,76560,167776,285273,24262,8237,65030,41160,74437,48804,118916,13159,37842,1031,75349,1478,11655,108777,23435,277425,101734,67469,70231,124711,43532,28514,65526,54956,1e3,21882,17728,25302,40952,52214,149632,1999,2111,3259,63362,89961,220561,39777,26335,9063,10572,12416,34551,34623,38604,24723,5947,15588,69927,66252,119177,69173,46629,28714,70715,212408,20521,406913,74380,11716,50659,50862,37009,88460,130101,7210,53853,538,65120,151950,55806,163748,52837,13153,21100,16674,64536,6091,138201,44837,58547,3723,163,2177,32288,85454,34033,8497,14282,25742,10535,10741,79559,117493,243787,49337,100718,79495,40139,42956,7551,55433,15421,31509,23034,45081,547,61176,53434,328001,8470,36263,30145,4519,74173,53935,11845,73774,60211,78025,3,4102,73782,109293,315332,48412,26683,13714,6865,20128,18490,104141,325,39470,171970,115860,15707,7268,73301,74336,31370,2368,111827,107757,136231,142844,97138,96638,84053,38691,23801,1588,10573,122098,77039,240,186135,146101,11996,18143,112963,46171,155836,348769,47795,121213,116266,132515,3344,144804,31286,99187,255838,129694,35894,48779,55235,148582,71967,65282,15174,13920,47080,6147,108242,157593,125025,7136,1286,28957,127956,28402,98813,20805,7532,109417,40610,5041,32958,15142,18408,108596,33543,50517,27748,80114,233434,91447,487,37094,100048,30541,43477,10639,89862,155868,37667,8726,60684,237903,73408,99589,12190,38739,97348,3914,13594,2680,149016,13907,30171,28343,23530,115225,61104,35821,147679,14337,4297,244282,24085,326976,56428,7851,21303,131620,71446,83253,68692,111870,5224,15813,38197,49026,45057,13660,3306,76345,40671,27905,91072,996,68527,62085,91351,122634,55109,168209,2024,27560,112707,17352,8306,167115,169921,166958,5031,46020,11844,67284,19130,76185,6920,32849,5450,14610,22451,21002,17392,31872,66682,84796,13709,40210,59898,12029,8719,53564,21462,91884,21647,88379,194428,12754,37797,132826,160016,22567,54383,53186,77611,31107,8339,4694,19185,90355,23597,17222,140675,28442,23668,55977,9128,61555,28774,155229,17658,9390,24379,69357,15752,127381,239631,62460,93181,55913,45133,140155,18676,25249,33164,29581,82837,67223,22362,29975,7317,52813,1943,29613,20012,207130,49617,49651,5636,15334,36313,29226,28084,95247,72072,19e3,224932,15811,114,32127,38097,37508,88507,37225,27359,91626,12193,69279,20608,11055,88156,92808,2152,57259,55275,72789,24475,104414,1708,9882,3818,48661,66897,1631,34806,227930,85815,87753,18321,250664,72733,25107,206797,50891,8082,196411,92596,96764,152823,65514,22819,387277,62176,51225,40329,15563,189,3659,73670,64357,51793,275136,33482,86653,74615,67058,11318,125720,15388,22388,8267,1730,102663,170910,40784,7144,85373,13040,7088,94309,583,44224,140424,77439,18496,164026,36578,4722,9151,5824,63365,26510,35199,40500,79277,32495,44614,35233,9566,203293,152144,7097,2330,183480,98629,13423,330887,44130,68600,30939,97829,31012,345465,56747,94879,4939,160027,149761,99423,46099,32251,15332,8761,96094,128555,5763,235318,222223,55729,30241,55420,201746,3987,81382,8259,49325,23287,7719,24633,251100,92311,18591,110533,64759,170260,393860,7175,21144,132887,3593,75346,101277,91109,16387,259187,11627,57459,173829,44694,55780,49797,89192,120443,62622,3904,14814,23887,1027,112258,64955,99800,11132,66353,36202,48624,18158,88481,96882,43059,11040,2455,7077,21651,181159,99126,100434,61388,68186,19161,110468,120052,8819,55324,41494,7014,37689,3618,87729,92615,207943,9823,128657,12587,15857,6379,67628,51216,71775,157617,63244,1503,3864,218754,110864,5769,21492,7243,1192,87921,85529,31512,18537,42698,35350,73510,84474,34301,8991,21013,35034,566,38832,19838,35586,37216,39413,55006,12178,59742,856,84563,6900,25632,17437,49786,30723,13847,70845,4044,7843,23944,235976,55530,48942,6518,20939,73769,192653,52936,95207,23895,132542,142982,22632,87452,48042,54018,178468,10728,26230,23559,363,81269,142012,5718,346258,31456,84333,246476,51018,66692,101804,120570,39962,30373,70593,2864,60541,19425,54209,104092,7201,31545,48018,25865,15442,46257,40443,8328,6451,111782,47527,97754,33046,470,245116,31095,39,91934,87208,73470,36708,36521,12801,70624,36272,8892,79768,12427,55454,103756,5908,52390,62962,22720,141138,94634,41689,128402,126390,6628,106394,35527,134394,82727,254651,194502,148064,89549,3202,28359,957,21954,27906,49840,142747,8307,24206,48978,1186,71728,133038,71474,91306,6333,110959,74600,70387,18983,62609,56057,22970,1147,135850,1321,28834,3578,59715,102227,32827,81415,99952,55636,257598,390,22702,35701,85872,402916,39216,189795,14929,19467,10112,144422,61514,5279,63421,134686,41436,8424,51925,10598,132295,124416,4604,194739,210929,57866,31829,51626,50007,9976,91878,61906,56168,81906,60918,61859,40017,23059,16887,40927,62064,12785,32893,32913,21782,93965,20169,44387,79084,38463,11457,93950,27127,157050,2697,337088,5116,54128,48255,33279,8821,27352,25515,124022,65710,28906,38557,33390,1722,104435,72215,38551,12094,30978,25113,6671,37355,175109,42862,98024,65406,221276,59624,118012,64637,78760,86697,21426,1639,40350,12584,67193,84144,31396,7863,143011,69629,63112,9454,28666,65798,46372,134721,6314,51402,30837,151922,2847,38676,38008,92823,136245,17540,5504,109295,205242,37606,5211,214892,1586,20670,208711,137743,19328,40652,16995,20023,14657,154919,34422,12996,13918,38221,47690,16398,2959,37680,89122,6721,198469,91876,172043,83898,101992,26084,94570,3635,76958,22853,76497,38266,176590,168403,44464,142840,79180,184594,1984,41806,83147,11985,6546,366068,59732,24533,271505,8736,39084,222992,93429,28962,58985,86665,8432,30028,14548,32439,54424,165029,55175,27458,69046,121277,46168,33732,20661,24581,135574,123110,37556,79260,72611,16957,12939,46162,58238,44907,72936,253758,41324,32518,96480,11949,124438,65280,43256,34107,53533,43531,37037,28366,45970,32741,173438,6121,194202,62969,26355,30314,58370,28455,1848,50519,82830,90393,21761,295490,10936,256940,133568,44050,20269,4089,27457,21610,219460,36743,14821,101388,52005,13124,30979,140816,167362,26054,18458,60789,34917,40447,26606,33422,9066,3452,83614,5761,20263,137238,25038,91310,101,52322,74548,42572,38084,214054,186568,31802,17665,30620,141936,37730,14420,4265,187218,49640,188208,51441,55388,96452,66659,40869,42039,60967,221027,19234,178581,29105,96050,9165,196118,157335,3738,40354,117436,2965,34136,59659,15570,50843,230035,31444,71260,43886,18316,5387,38500,168508,17406,32174,8828,103373,143806,90367,3560,18719,122310,16508,26719,2541,105429,6645,37998,73190,10591,235916,49737,87112,233941,53188,32193,79154,4544,52905,126477,7580,63501,57314,3216,31337,6541,103083,60846,49,9756,15481,1355,43840,14319,13743,27486,10222,73114,230718,418644,16706,6674,279748,23058,45273,295831,86306,2743,5535,88773,21829,35253,120938,31153,3169,16839,42847,8751,80974,33942,36867,35514,16485,26474,77775,56877,5391,48346,3882,108713,31403,27804,55248,26235,43821,136104,40118,175507,28034,203908,18732,1788,34030,106427,36958,54359,7251,44936,15356,69139,455,157915,22173,140291,50348,43275,82066,49621,54952,15216,36226,96695,66855,6936,1987,8227,196087,4631,68827,99004,47541,110265,17953,147605,110242,58520,31312,38724,329975,642,3155,34497,75937,6207,73843,6120,17249,51429,117746,3218,910,68961,319671,14938,29555,34700,1649,66673,72268,9655,76800,153087,6941,210168,27130,35398,1780,73242,3135,56689,19556,165307,8765,35967,121458,13333,70453,17350,117253,22265,13340,44265,39869,441,3742,135025,23581,33309,16543,17731,13291,157637,283005,21408,101360,63887,52312,83873,5338,233779,23759,186949,34531,177320,38069,156465,91004,19353,59852,68160,14891,1338,1072,29823,1950,28901,81407,313445,73038,84807,162348,240257,37162,138934,16111,58013,41253,102951,16457,96056,19541,56402,67217,41638,94381,89674,29481,37456,80815,151579,13937,13683,132537,19699,134545,67020,29816,222341,141235,427578,48868,129557,233342,23077,87871,16213,18728,16184,9469,37913,19680,2798,171356,178328,13216,50049,72690,71904,124644,55455,7504,29052,41036,266546,19899,30391,188755,8659,59469,16,104298,112943,53865,76203,138226,68857,139953,14125,107625,119795,173133,4398,50273,48808,54390,16466,122086,31835,67035,50971,48859,7508,46427,66477,73021,84615,39985,83076,46779,201569,53336,36443,60865,168164,143810,51393,25548,169307,32896,24485,38424,21837,29087,275813,51674,6714,64883,46169,187369,55186,76192,12852,12018,62134,31067,118303,16542,12125,10579,4928,26291,43854,7091,10946,253716,109062,39283,17261,113012,258512,47764,125126,32646,55892,80279,201623,149872,3192,385,1208,48750,5376,58738,22335,5427,82416,47811,32435,143086,38930,94128,59975,156037,37977,38224,62485,7698,50405,71027,16462,21559,136153,34131,107506,162069,63703,3101,215029,40407,4178,3774,9187,80019,17880,97926,67579,2600,18405,8351,47924,86638,70820,92206,86453,29610,42241,119200,3198,15466,67813,57863,35454,4779,99518,4649,104641,144269,33730,38073,65864,6838,109456,193298,154007,5623,45741,30846,182578,25573,157224,1543,58575,138703,146140,44971,49356,18275,59064,20300,13122,11848,24453,11973,9797,86843,2919,25530,49210,1130,161220,76788,75373,85604,34926,36014,17777,17255,51533,11676,92226,51845,119859,21525,5936,18507,28050,1140,31418,14857,34207,47859,10750,36382,32079,106909,59426,87757,38393,110042,15965,97104,33757,35344,97993,53979,33651,45407,41884,82515,173089,7177,58371,35365,47543,51927,35587,10670,23544,29306,84233,39976,76076,62097,9007,8668,28119,78281,120790,19835,143020,54968,18670,64959,20649,34469,42570,33001,136570,87796,120044,1106,58700,63951,127623,12805,83057,40212,31773,49850,7361,54336,347524,101314,23751,19569,48791,29174,49369,20467,7465,75842,38281,623,112457,60210,28849,51003,94720,6426,90047,85560,43761,3579,85105,34607,90410,118528,7224,42907,111163,18168,6960,161135,191298,5247,100584,127552,171568,20121,91173,12636,54615,20199,63730,98105,2396,40387,14438,125012,4765,33235,12865,45299,37728,82098,77872,114037,59253,19675,24838,398016,102561,11446,17069,57508,178277,65836,99941,26114,2585,271882,136866,50126,11027,155648,118367,14585,8910,123015,335383,40434,41016,53021,14439,87098,176860,201543,121888,2358,9286,5739,22666,54270,37884,169381,33984,93859,16124,89364,72207,51639,76366,99029,65812,2198,12147,174891,194289,6986,30252,88822,21284,11445,288337,160821,33034,100869,43852,25761,52882,1144,103809,1924,84458,86079,43411,13542,139276,18141,34978,41298,7276,26481,173800,33210,17951,142652,33616,33677,2210,19941,98568,2486,192414,80136,12058,235883,50963,249638,29572,27221,47034,6124,72107,63346,97620,158513,299699,40388,23235,37176,224244,198386,121323,67992,23827,63170,17838,106622,158590,26807,5345,23489,91891,55474,74834,37981,13058,5977,72552,34706,26828,145172,19904,21367,34043,960,77092,91381,4733,47446,7680,41697,5170,16960,14741,46101,13656,473,51842,37433,11103,11551,121951,13191,97536,165932,50397,51628,129028,9069,44885,6590,59195,47045,32940,225472,90345,21833,13303,29407,96615,141951,5198,6028,18395,7181,3861,14966,156358,167182,36529,55253,25942,173153,30959,27261,50691,150176,162201,38467,48462,80602,42163,118482,168,108756,26011,17166,54149,456538,22512,91374,13816,90358,131615,18132,226707,1824,28139,26860,42253,93877,77351,65575,8980,80574,22020,27948,40422,91324,76376,13528,39281,91685,82215,122541,144066,1983,193851,17283,26320,2739,194978,4790,26845,42627,61300,65815,174612,55133,4200,191130,79771,158321,52280,166796,221620,62461,11278,4067,88152,83409,31717,121367,13522,47325,37945,10406,174348,249321,154101,64912,29938,51775,17220,15776,166138,78890,84425,54121,42861,16368,24572,291647,10197,32073,22651,11677,97509,26952,35787,18424,41910,71614,94977,72318,41594,70024,275419,37702,60199,7335,39107,61315,18271,18394,33768,87884,104277,123724,7277,56288,71981,189803,49320,3352,6798,14240,8954,69220,94433,57372,28620,68863,193727,85575,42309,41667,67689,42081,22543,44824,12719,28540,114236,101553,27638,27296,4300,5353,4663,19379,94098,3758,95888,95144,80344,87320,28447,259518,12718,71391,152731,37063,24132,31911,104896,15672,103782,1521,4945,72541,23717,122632,15619,87175,206120,29428,189780,61416,28350,44457,972,1175,47233,198738,95789,41907,21953,97034,59341,22864,53713,16873,32971,20693,20954,31336,21477,16169,38370,16412,9019,3841,24599,21938,17085,6484,81198,76413,5849,72514,12320,65247,276175,37234,59796,52642,16312,57349,198507,94148,46134,18958,125552,1747,18725,151873,14901,5490,68287,29470,3689,64794,40814,26018,25692,54450,2703,88278,124886,173087,174e3,24159,179477,24276,46004,201876,209202,445,52876,31948,30206,157610,39180,18439,44124,50469,5774,96278,222758,200216,50290,45486,20435,46986,46276,140133,142326,15569,13363,47522,92583,2182,7135,16853,22998,30272,4952,63263,35623,39096,53789,44864,20053,110392,124213,4630,16087,28221,127787,25839,77481,44693,13464,113146,6983,27069,55717,50102,4760,7107,26186,66507,59145,36032,104182,71328,29425,64317,50781,47465,94298,69706,74899,22754,120756,25108,93077,56834,73286,39928,16218,41699,176763,7555,70819,50083,26895,23315,26014,16773,123079,41712,5719,31516,90427,158540,85051,183128,40864,27505,55392,9058,45224,96857,30901,136622,96557,56304,120061,11501,151448,5773,89743,7769,86069,2935,18471,41628,10114,33660,110170,49479,26745,92846,33221,26731,18795,87076,8550,2100,29972,120289,3077,72490,33784,2630,208722,50861,63483,79029,6419,39467,14302,45286,64207,9686,67513,44170,1050,77246,59266,17055,53801,7150,11111,42432,4278,94579,362117,36175,42902,41933,39002,98489,22913,74161,84773,57036,17556,162288,74485,178760,93867,73635,128860,50362,261,67455,80001,46080,35662,4368,25247,19230,74393,22588,1822,27682,235324,13798,85998,13194,235067,23514,71669,147632,23191,134748,214683,105101,1518,25489,247114,7380,54842,26922,3971,26361,20844,68642,170517,77339,123255,8963,77818,150998,48466,36806,2732,23261,11741,236162,18243,126216,28690,50546,16385,92760,197383,246558,201295,88255,67588,71687,176076,172653,169058,33906,63747,24835,157621,43338,30050,46152,132741,2770,51371,94835,6614,15112,11749,56936,1250,19027,399017,58036,100215,23388,55815,308768,124152,94803,9521,64186,8971,28,30427,62163,7616,103838,35079,29203,131235,7743,17389,10882,37420,61460,228512,85363,41581,131077,62822,119647,10130,54445,26925,19968,29016,24446,74028,24176,61448,67185,9254,8563,119129,9771,99184,37716,39514,10532,221512,258753,218630,55980,23394,32141,61924,66749,32411,3741,36475,26678,77010,44946,91203,128749,116953,20476,49625,53116,13735,102335,29376,51946,83407,67892,59212,34685,21083,1546,112982,32972,74397,1078,190545,16082,86140,58591,89611,101531,10061,105104,76319,20035,17551,52611,169061,190842,100780,23907,90413,115619,9675,34710,193435,49443,129734,11183,258877,16318,136182,126808,44635,27304,192375,2599,125648,47051,12091,23814,721,58800,40137,66726,97930,60877,74487,7942,54326,9841,41428,13762,8211,85383,6950,99177,79806,201786,296464,124087,13144,29741,41721,47634,55088,254286,106408,17041,99064,12942,64086,45233,14005,2612,55827,255,7984,13980,38574,12776,46654,73499,249951,2101,26676,25996,132326,116415,119062,50449,31033,23038,11589,179252,20007,14860,129270,21143,17796,144715,60106,70758,69842,34674,282133,44014,16774,57268,38528,24053,46373,201667,28327,471023,51889,102667,21193,114909,84132,69317,96723,67969,16134,68145,15058,28765,32035,2524,101089,98664,25045,76571,14957,86040,118506,262428,154764,81573,39681,283900,73287,127825,544,80448,52347,38512,175971,15180,45467,33086,46552,48894,81107,43213,36672,54025,76703,8053,7608,13299,56619,20752,238099,54164,105133,1444,32942,953,37564,8e3,66316,119463,106817,404,13667,149108,128597,31267,10269,49836,106150,1484,52330,76965,160486,171648,38456,31263,22424,37738,66245,67467,143369,60471,75610,20895,115528,86070,60854,40796,49347,18989,15030,11371,37578,15779,79867,10187,86462,46402,155626,93200,40229,7090,57547,108053,99598,11088,47505,41218,206017,2173,20988,30219,22919,80563,57566,42369,93141,41675,2407,182519,120495,27154,16702,29456,14349,7958,16688,117177,140375,42467,261919,74916,153569,10836,34742,49526,7621,105997,12212,2270,392377,7755,17959,25086,232152,138791,33847,13860,35316,5811,1344,71259,50452,207539,92635,50359,5821,33674,30255,2086,2587,96264,17543,42,6029,9580,43007,139248,82831,12917,29607,25786,51467,42137,85161,100698,31561,88989,121990,278500,3602,109344,37982,15279,116442,28936,30880,87894,58079,128661,126731,67392,28051,146885,4861,16216,97344,42827,147561,153948,22684,21335,47685,1853,43349,15185,59642,10229,25520,187921,108972,5579,98037,24945,6697,19193,63734,137934,75056,89740,19767,224268,56138,63643,151661,39313,70618,84031,89723,84074,13703,85626,35460,8867,64845,3439,57906,99776,63968,49270,81130,34356,16210,23547,36446,34090,140028,72439,2221,22163,57058,363492,113754,18913,95451,48663,54464,54037,176097,68425,3023,34906,29482,117389,341780,80431,58330,16753,92616,60907,94846,147486,4498,48646,7773,46801,7778,18946,464978,47558,33223,177444,7328,15626,63337,94700,11743,9351,255024,39098,16447,42647,96230,39769,58840,10068,63439,35800,65843,58823,413844,9156,51258,7434,61791,85018,6872,3692,28096,7121,33024,6009,75532,31997,192535,9661,3304,9547,14753,31987,25314,55689,15896,20430,39472,31340,99744,25398,115569,54883,28719,205423,23071,57855,64638,149867,25671,82403,37616,20668,39989,77996,74948,140555,175248,64810,36515,46595,4958,248773,24045,28728,136673,168704,20804,114833,100325,27135,21205,96151,153134,45992,7093,13992,76047,1980,19432,145001,75159,87462,17710,1013,45556,34297,144882,20648,26061,11319,129567,108555,18872,464580,33386,22717,65948,167189,5603,135042,79542,8801,202632,18114,91882,5973,5239,67315,4431,60916,47819,71693,32597,32606,18183,45072,80329,76385,24749,51305,40314,156514,14693,130345,13168,66214,18029,12858,34801,27628,14544,10823,40522,40185,33739,148694,23548,9923,61012,28859,17933,19442,34364,99849,164107,141167,30629,21054,6744,36491,8096,42474,41706,155060,30650,10600,163442,1143,96655,61390,52359,7559,51568,64256,203854,4467,22453,14504,436398,7878,6980,8293,63610,293747,16167,35763,19627,147603,15419,18032,110744,51346,33681,54571,40472,48615,39073,21604,13754,173027,92560,11083,47299,63062,11813,52007,29883,9734,139722,15953,1550,20651,13616,49306,16113,90089,92326,7584,30712,72424,164858,6831,152871,55746,197721,34167,196442,6022,112107,55215,7538,123381,4920,43539,77165,8939,50392,34192,20225,79762,22505,58667,40770,29788,97180,82835,4568,8579,13273,363569,35898,49983,436,36598,3237,131691,62418,35591,8101,4073,379438,65218,76072,33887,2968,27573,212619,288680,68278,72851,150504,217896,6913,121339,22017,35340,51072,43616,75043,31437,10833,81487,4364,22968,41454,106687,85446,19863,109625,149241,524,141850,214404,54376,657,237023,9401,108137,53800,32474,49712,53334,126876,27337,45552,177696,8269,15036,12097,42240,2328,125374,119295,99715,2500,19624,39441,27220,102691,60957,94543,39101,18566,67362,13975,78230,25017,34017,239007,90027,39351,41681,35354,43822,1043,916,58587,141983,94818,38799,75459,41114,67432,16195,36606,59568,22272,126769,31424,68659,12287,134302,257977,5756,207285,95637,47248,117689,19583,77451,22373,12200,54993,117118,34244,29386,34562,53819,71267,64172,77665,49368,7716,59301,25749,45426,194789,17297,2650,1766,32501,45198,20403,20984,6600,14171,94604,19037,5402,29896,9938,59935,109708,88081,145182,44844,39167,352626,164173,35374,45982,6122,154,73419,220487,53834,53601,17992,8609,229321,5610,68098,66815,71012,95069,140968,27396,8957,134489,24656,86659,56598,134852,17316,123838,255436,6613,41610,138033,81452,32023,32396,123687,63398,8693,29712,30407,19296,121188,3551,36099,20032,111948,56624,16547,27453,35916,15378,52039,56849,13489,22214,73177,53097,277349,2157,14029,187886,10260,141743,246460,91880,50869,3788,49486,133566,54950,33120,129337,53768,18333,9525,26902,312251,10297,9020,70759,16647,112432,59260,84609,9818,82766,73569,468,46001,75780,55028,52106,11498,43645,108069,17150,17753,29417,16705,31799,9606,289,122254,115975,8620,6133,255357,56908,14456,133464,43554,79224,11247,29630,160,12756,25464,65960,350428,62521,321796,100359,67358,35169,46172,113128,48988,88868,31094,33266,6847,60887,98188,49659,69117,92977,220228,13947,80181,35103,62170,97351,13475,2440,199768,19498,36597,46971,25234,67806,62881,84717,73648,181966,10488,94149,21550,26655,63436,48375,14405,165650,9621,24439,28043,42735,4490,29963,56674,45373,1934,262446,50855,67098,26898,5261,52696,40644,33900,9440,180286,87162,22940,19704,26936,69769,10254,101759,27406,12243,48e3,73926,113215,54935,5726,192787,4312,106216,9366,11550,52949,23457,212271,277152,133895,108374,6191,96477,29980,218916,58024,54696,40853,91124,65894,91170,65908,252552,6793,29212,15389,44516,122515,52617,35058,9017,103536,39510,49136,19242,130652,662077,74699,47024,31422,8517,73351,24399,13867,128360,4810,4434,61779,111983,61036,17798,110240,59722,102960,39688,10001,23803,23039,176498,56659,44814,134295,17188,77577,74466,226175,102472,154333,63900,111747,18062,41171,79669,32773,408933,42562,28931,30907,107388,43487,2946,240310,23938,24354,319,184983,7927,6488,1422,10790,68809,68209,64775,4361,202,17123,59634,51200,44391,18188,17843,2619,74278,3230,9540,47187,21702,36274,56894,43907,16310,34790,16866,6150,5561,13587,107545,108873,126867,86986,28640,33427,19017,5762,80637,17430,46903,2047,131055,25958,13558,5444,47152,13900,44563,122857,45348,70863,39593,54332,38068,33637,318,40310,143467,18502,24520,11377,62013,28942,27246,28269,83545,17999,59015,90707,30065,15161,34720,1263,37008,2012,6060,98575,92933,5721,299,199555,24578,29223,2985,743,115825,109523,136657,47454,26378,53586,3733,174945,93340,244456,5693,37386,28782,89767,27545,23573,18798,136425,34320,84778,20041,48453,38215,7477,71958,40621,8773,5874,187927,105965,51100,43533,18083,8443,10180,43597,2003,183999,69689,12216,129696,146188,62389,34044,68410,12765,43273,26949,266807,3345,34477,79197,5688,47539,213110,21634,22257,50092,32222,42346,39530,63668,98,134978,74022,5152,59088,174145,37220,9934,9545,118937,5724,87240,19875,15784,40143,23263,87513,181654,285152,37881,263241,4966,43934,10433,186657,6470,74416,225854,25908,142677,246262,32280,6192,75890,45546,143264,135305,29742,47013,77787,11732,126658,8763,37950,21806,57557,113464,89465,108995,164574,23894,22996,23169,15369,23117,17642,130607,40503,36239,280990,44666,9981,40427,147487,26869,168452,32886,32991,46798,240839,15111,70502,65697,88548,44145,28701,48767,31139,206777,35659,181164,166262,14554,171445,31786,66523,76607,17956,6507,31279,90476,116611,167918,6560,1243,115324,80128,41867,55897,187323,37069,32596,189444,145931,13390,105530,65709,26805,6999,55714,41300,22915,68951,22138,21120,22264,10058,19945,33635,56123,99085,10032,5818,6016,46649,57476,35264,94413,112522,262288,93686,83038,14341,23204,28807,66084,77987,6101,126673,7133,38126,5923,122091,170240,97772,46874,215746,43948,41622,3272,55596,8332,146411,251315,13533,8561,81521,115449,48616,175175,2063,186556,3036,134537,75772,29728,82360,22973,186559,86348,89100,38388,82297,45610,2613,87082,9986,177812,57884,23591,47485,42543,33582,44713,74439,257444,252451,31825,35631,38540,33066,5147,13973,4343,51830,70378,22827,26448,95560,36896,241741,48067,203953,298860,61620,20450,3220,67272,6586,107662,100160,108684,6929,57226,4762,7457,1320,40404,77204,99309,62750,208653,59977,44e3,74315,34332,5819,172217,64904,114077,18147,84012,1791,98456,90930,21446,116669,103938,7422,85140,59713,5768,326211,16239,75411,13229,29398,10758,236107,1539,112472,95979,152154,151294,306,21196,38146,10700,6891,84282,109646,56492,40539,6589,119491,51354,30685,140209,136906,29622,73617,49553,70525,51671,166869,139616,74395,37439,49595,45678,11959,33211,86560,52434,9282,62690,112155,130810,5243,108261,99970,265613,72551,80049,6391,33365,90721,66737,69872,87011,1860,9032,112544,60905,37371,89015,140351,19076,850,373531,2802,36725,218795,72062,28990,16550,24614,7815,6187,26336,33373,32162,42791,73555,32062,23386,10244,56392,49442,27076,136262,12412,14883,1134,33675,97153,199281,15608,100152,74072,47942,254301,36451,16026,10687,65067,56708,254030,30290,50490,13864,57941,259331,35588,23485,43486,24869,21620,92971,22072,88645,1048,182050,13343,32452,14825,19509,3325,216938,45740,99716,189082,53740,78245,25609,24311,176777,47340,308354,40669,66085,14102,125339,9225,128709,97207,1271,200933,78439,113451,88975,18324,46521,11819,18570,141756,72512,170020,52754,63550,118515,103073,93330,32736,50499,14722,31600,68452,398867,29316,172786,18417,104924,2606,5670,84818,16288,67106,59580,82929,607401,291,85829,359,15897,35830,50696,65630,52672,22115,356968,29895,40837,231192,34024,38957,26722,406,23335,124952,72068,68804,13268,147101,164740,276569,162596,66943,11569,26654,66358,4777,23229,102127,5848,978,2921,59666,5371,28212,90108,42938,39320,2499,4271,108792,33510,125072,71653,65239,38250,66357,38577,13964,86251,35708,50755,36010,29448,12209,3844,38222,206337,100876,67827,137088,14167,252225,84163,195270,1306,5703,54198,779,46802,22028,51124,86759,70560,113164,35685,162145,45471,34561,422,2611,6464,47486,19223,38246,9191,18331,89942,243642,212364,15893,17518,22617,6409,30046,126182,59716,36560,104428,18846,26592,19458,50793,147333,30826,1388,27647,10922,14495,33545,19269,135828,39727,41601,46931,233379,49169,131130,182112,16276,82381,118209,142445,128310,19672,28740,82907,33436,3118,102206,28723,24819,41937,38854,5157,3881,111491,1142,9776,421673,152241,29309,14961,87854,6054,15424,3796,82656,54996,2108,55367,239450,154525,9643,118103,106041,64601,68549,48707,30266,25772,18740,9462,229669,91798,112152,191327,14493,72828,8175,66636,236474,25817,87351,129027,76653,20422,22983,71240,27846,44661,12399,46158,77704,53101,35032,11072,17300,109294,33638,24408,1895,11241,760,17584,82479,125877,63150,141075,34259,23274,81698,15732,43577,48340,91584,14688,16379,24481,150280,96420,262050,48635,43727,61819,56268,72003,88178,17281,79912,13218,122519,125295,166396,11811,2171,118930,67746,17636,178278,174656,95661,173039,83845,79689,17473,98555,127696,203415,54730,22925,232239,9309,12136,175026,20740,180188,10747,39816,314017,266131,10040,175732,112550,220651,31974,37393,888,23008,86799,4303,64905,148467,75337,251,3284,370102,50264,9835,5438,23655,4481,29851,329,12855,7162,64931,78141,12804,42372,296771,83547,18624,34874,86271,3360,48665,77735,88767,11463,63527,28889,22258,29140,194315,113924,25499,6406,31334,1845,4802,49184,43455,35469,127594,92970,61038,115005,38840,87761,106838,8811,20572,55637,11162,96721,132425,108925,2948,125457,36356,3502,75270,27622,127192,2561,123095,49394,61155,16897,110064,9699,89448,53356,19628,220310,21622,83036,9885,112214,6087,26713,17901,161912,91492,3440,68594,9266,92238,8087,6866,150194,72175,80701,13459,31836,43243,239700,95846,44749,50647,21945,230538,120612,132371,244604,5193,105637,34661,41341,68775,85393,1874,8771,33718,49672,77403,595452,99507,6490,58895,128742,7704,39239,73217,43816,62824,37804,199976,22361,80005,87514,94832,14089,4574,139975,59142,75523,100268,43906,53442,15152,2547,186002,17011,19513,204282,3343,60568,128318,119250,4298,51871,41336,71759,21921,45074,98169,145889,99427,11350,1237,5520,28799,7803,53702,21026,136352,38293,128690,12158,90132,44600,10184,26957,39459,126025,78904,82999,59373,39301,150198,120529,153042,20177,50089,14764,271571,30530,123161,38975,101562,22941,5648,124654,109243,69817,71675,49162,106884,21241,107795,30258,16572,188262,141456,7688,60718,8271,11044,32440,104608,103419,236109,93156,43293,128929,42107,67180,25201,115254,185488,130954,72813,167547,20537,39969,38432,22582,184022,1139,27199,5655,17767,97412,122606,209377,27070,35871,326617,188954,42680,73512,80911,22629,3011,95021,315242,157737,383,41821,41808,19335,27950,15674,25677,110950,35375,76835,59108,57370,35262,16569,160415,37706,78086,32041,49691,137143,9782,172080,50148,77917,6323,10110,69172,17711,21795,59511,76184,135114,31046,132319,59105,157578,20549,80778,57649,158421,65143,4575,72235,21899,10797,92745,34035,106079,80159,4508,78304,25350,75457,46458,32937,25623,47,8531,104751,84953,8138,36508,187199,66310,115274,13253,32461,38536,1916,42007,187160,35055,26325,84394,35963,94216,45590,97782];var I3=15,C3=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:i,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=i??pk,this.refreshQueryTimeout=s??mk,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1,t){this.log("refreshing routing table");let n=this._maxCommonPrefix(),o=this._getTrackedCommonPrefixLengthsForRefresh(n);this.log(`max common prefix length ${n}`),this.log(`tracked CPLs [ ${o.map(i=>i.toISOString()).join(", ")} ]`),Promise.all(o.map(async(i,s)=>{try{if(await this._refreshCommonPrefixLength(s,i,e,t),this._numPeersForCpl(n)===0){let a=Math.min(2*(s+1),o.length-1);for(let c=s+1;c<a+1;c++)try{await this._refreshCommonPrefixLength(c,i,e,t)}catch(l){this.log.error("failed to refresh entries with common prefix length %d - %e",c,l)}}}catch(a){this.log.error("failed to refresh entries with common prefix length - %e",a)}})).catch(i=>{this.log.error("failed to refresh table - %e",i)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(i=>{this.log.error("failed to set refresh timeout - %e",i)})}async _refreshCommonPrefixLength(e,t,n,o){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let i=this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,i,this.routingTable.size);let s=De([o?.signal,AbortSignal.timeout(this.refreshQueryTimeout)]);try{let a=await x3(this.peerRouting.getClosestPeers(i.toMultihash().bytes,{signal:s}));this.log(`found ${a} peers that were close to imaginary peer %p`,i),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,i,this.routingTable.size)}finally{s.clear()}}_getTrackedCommonPrefixLengthsForRefresh(e){e>I3&&(e=I3);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}_generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=Yr(2),n=(t[1]<<8)+t[0],o=this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=lt(o);return Ut(i)}_makePeerId(e,t,n){if(n>I3)throw new Error(`Cannot generate peer ID for common prefix length greater than ${I3}`);let s=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=s&a|t&~a,l=Mk[c],f=new ArrayBuffer(34),u=new DataView(f,0,f.byteLength);return u.setUint8(0,St.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb?.localPeer!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=Uo(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var P3=class{peerId;providers;peerStore;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.peerId=e.peerId,this.providers=t.providers,this.peerStore=e.peerStore}async handle(e,t){if(t.key==null||t.key.length===0)throw new Be("Missing key");let n;try{n=ce.decode(t.key)}catch{throw new Be("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let i=lt(o.id),s=Ut(i),a=o.multiaddrs.map(c=>ie(c));if(!e.equals(s)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log.trace("received provider %p for %s (addrs %s)",e,n,a),await this.providers.addProvider(n,s),await this.peerStore.merge(s,{multiaddrs:a})}))}};var k3=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){this.log("incoming request from %p for peers close to %b",e,t.key);try{if(t.key==null)throw new Be("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getClosestPeersOffline(t.key,{exclude:[e,this.peerId]});we(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(421))});let o={type:tt.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:i})=>i.length).map(i=>({id:i.id.toMultihash().bytes,multiaddrs:i.multiaddrs.map(s=>s.bytes)})),providers:[]};return o.closer.length===0?this.log("could not find any peers closer to %b for %p",t.key,e):this.log("found %d peers close to %b for %p",o.closer.length,t.key,e),o}catch(n){throw this.log("error during finding peers closer to %b for %p - %e",t.key,e,n),n}}};var O3=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new Be("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=ce.decode(t.key)}catch{throw new Be("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([Ji(to(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:f})=>f)}})),this.peerRouting.getClosestPeersOffline(t.key)]),s={type:tt.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:i.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var R3=class{peerStore;datastore;peerRouting;log;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new Be("Invalid key");let o={type:tt.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(Tk(n)){this.log("is public key");let a=Ik(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Xe("No public key found in key book");c=sr(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new Ar(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getClosestPeersOffline(n)]);return i!=null&&(this.log("had record for %b in local datastore",n),o.record=i.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),o.closer=s.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=ha(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=Ar.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>i3){await this.datastore.delete(t);return}return o}};var D3=class{log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:ping`)}async handle(e,t){return this.log("ping from %p",e),t}};var N3=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null)throw this.log.error("empty record from %p",e),new Be(`Empty record from: ${e}`);try{let o=Ar.deserialize(t.record);await yf(this.validators,o),o.timeReceived=new Date;let i=ha(this.datastorePrefix,o.key);await this.components.datastore.put(i,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,i)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var L3=class{handlers;log;metrics;incomingMessageTimeout;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`),rpcTime:e.metrics?.registerMetricGroup(`${t.metricsPrefix}_inbound_rpc_time_seconds`,{label:"operation"})},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.incomingMessageTimeout=t.incomingMessageTimeout??1e4,this.handlers={[tt.GET_VALUE.toString()]:new R3(e,t),[tt.PUT_VALUE.toString()]:new N3(e,t),[tt.FIND_NODE.toString()]:new k3(e,t),[tt.ADD_PROVIDER.toString()]:new P3(e,t),[tt.GET_PROVIDERS.toString()]:new O3(e,t),[tt.PING.toString()]:new D3(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}async onIncomingStream(e,t){let n=()=>{e.abort(new Yo)},o=AbortSignal.timeout(this.incomingMessageTimeout);o.addEventListener("abort",n);let i=bt(e).pb(fa);for(;;){if(e.readStatus!=="readable"){await e.close({signal:o});break}let s=await i.read({signal:o}),a=this.metrics?.rpcTime?.timer(s.type.toString()),c=this.metrics?.rpcTime?.timer(s.type.toString()),l=!1;try{this.log("incoming %s from %p",s.type,t.remotePeer);let f=await this.handleMessage(t.remotePeer,s);f!=null&&await i.write(f,{signal:o})}catch(f){throw l=!0,c?.(),f}finally{l||a?.()}o.removeEventListener("abort",n),o=AbortSignal.timeout(this.incomingMessageTimeout),o.addEventListener("abort",n)}}};var B3=class extends _e{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new CustomEvent("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var _b=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await an(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers.map(o=>({...o,routing:"kad-dht"})))}async put(e,t,n){await an(this.dht.put(e,t,n))}async get(e,t){for await(let n of this.dht.get(e,t))if(n.name==="VALUE")return n.value;throw new Xe("Could not find value for key")}},Ab=class{dht;constructor(e){this.dht=e}async findPeer(e,t={}){for await(let n of this.dht.findPeer(e,t))if(n.name==="FINAL_PEER")return n.peer;throw new Xe("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},JH=32,eq=64,M3=class extends _e{k;a;d;protocol;routingTable;providers;network;peerRouting;components;log;running;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;onPeerConnectTimeout;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",i=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${i}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${i}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${i}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${i}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.k=t.kBucketSize??Ip,this.a=t.alpha??la,this.d=t.disjointPaths??this.a,this.protocol=t.protocol??ik,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??JH,this.maxOutboundStreams=t.maxOutboundStreams??eq,this.peerInfoMapper=t.peerInfoMapper??_k,this.onPeerConnectTimeout=t.onPeerConnectTimeout??uk,this.providers=new b3(e,{...t.providers,logPrefix:n,datastorePrefix:o}),this.validators={...Sk,...t.validators},this.selectors={...Ek,...t.selectors},this.network=new y3(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new T3(e,{kBucketSize:this.k,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:i,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let a=Ue();t.allowQueryWithZeroPeers===!0&&a.resolve(),this.queryManager=new v3(e,{disjointPaths:this.d,alpha:this.a,logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:a,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new w3(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new m3(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new g3(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new C3(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new L3(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new B3(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new E3(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:a,operationMetrics:s}),this.reprovider=new S3(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,operationMetrics:s}),this.network.addEventListener("peer",c=>{let l=c.detail;this.onPeerConnect(l).catch(f=>{this.log.error("could not add %p to routing table - %e",l.id,f)}),this.dispatchEvent(new CustomEvent("peer",{detail:l}))}),this.topologyListener.addEventListener("peer",c=>{let l=c.detail;Promise.resolve().then(async()=>{let f=await this.components.peerStore.get(l),u={id:l,multiaddrs:f.addresses.map(({multiaddr:d})=>d),protocols:f.protocols};await this.onPeerConnect(u)}).catch(f=>{this.log.error("could not add %p to routing table - %e",l,f)})}),this.dhtPeerRouting=new Ab(this),this.dhtContentRouting=new _b(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",c=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let l=c.detail.peer.addresses.some(({multiaddr:u})=>!Mt(u)&&!fr.exactMatch(u)),f=this.getMode();l&&f==="client"?await this.setMode("server"):f==="server"&&!l&&await this.setMode("client")}).catch(l=>{this.log.error("error setting dht server mode - %e",l)})}),this.get=el(this.get.bind(this),s,"GET_VALUE"),this.findProviders=el(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=el(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=el(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=el(this.provide.bind(this),s,"PROVIDE"),this.put=el(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[qe]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery","@libp2p/kad-dht"];[An]=["@libp2p/identify","@libp2p/ping"];get[Pi](){return this.dhtContentRouting}get[Oi](){return this.dhtPeerRouting}get[Va](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id,e.multiaddrs),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(n=>n.toString()));return}let t=AbortSignal.timeout(this.onPeerConnectTimeout);try{await this.routingTable.add(e.id,{signal:t})}catch(n){this.log.error("could not add %p to routing table - %e",e.id,n)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t){if(e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol,t),e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{signal:t?.signal,maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",{force:!0}),await er(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await er(this.querySelf))}async stop(){this.running=!1,await or(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async cancelReprovide(e,t){await this.providers.removeProvider(e,this.components.peerId,t)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(e){this.routingTableRefresh.refreshTable(!0,e)}};var Uk;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER",r[r.PATH_ENDED=8]="PATH_ENDED"})(Uk||(Uk={}));function Fk(r={}){return e=>new M3(e,r)}var rt;(function(r){r[r.NEW_STREAM=0]="NEW_STREAM",r[r.MESSAGE_RECEIVER=1]="MESSAGE_RECEIVER",r[r.MESSAGE_INITIATOR=2]="MESSAGE_INITIATOR",r[r.CLOSE_RECEIVER=3]="CLOSE_RECEIVER",r[r.CLOSE_INITIATOR=4]="CLOSE_INITIATOR",r[r.RESET_RECEIVER=5]="RESET_RECEIVER",r[r.RESET_INITIATOR=6]="RESET_INITIATOR"})(rt||(rt={}));var Cp=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),Tb=Object.freeze({NEW_STREAM:rt.NEW_STREAM,MESSAGE:rt.MESSAGE_INITIATOR,CLOSE:rt.CLOSE_INITIATOR,RESET:rt.RESET_INITIATOR}),$k=Object.freeze({MESSAGE:rt.MESSAGE_RECEIVER,CLOSE:rt.CLOSE_RECEIVER,RESET:rt.RESET_RECEIVER});var Pp=1<<20,Ib=4<<20,U3=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=Pp,t=Ib){this._buffer=new de,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw new Be("Unprocessed message queue size too large!");let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.name==="InvalidMessageError")throw l;break}let{id:n,type:o,length:i,offset:s}=this._headerInfo;if(this._buffer.length-s<i)break;let c={id:n,type:o};(o===rt.NEW_STREAM||o===rt.MESSAGE_INITIATOR||o===rt.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(s,s+i)),t.push(c),this._buffer.consume(s+i),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=Kk(e),{value:o,offset:i}=Kk(e,n),s=t&7;if(Cp[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new Be("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},tq=128,jk=127;function Kk(r,e=0){let t=0,n=0,o=e,i,s=r.length;do{if(o>=s||n>49)throw e=0,new RangeError("Could not decode varint");i=r.get(o++),t+=n<28?(i&jk)<<n:(i&jk)*Math.pow(2,n),n+=7}while(i>=tq);return e=o-e,{value:t,offset:e}}var Cb=10*1024,Pb=class{_pool;_poolOffset;constructor(){this._pool=Rt(Cb),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ur(e.id<<3|e.type,n,o),o+=Ke(e.id<<3|e.type),(e.type===rt.NEW_STREAM||e.type===rt.MESSAGE_INITIATOR||e.type===rt.MESSAGE_RECEIVER)&&e.data!=null?(Ur(e.data.length,n,o),o+=Ke(e.data.length)):(Ur(0,n,o),o+=Ke(0));let i=n.subarray(this._poolOffset,o);Cb-o<100?(this._pool=Rt(Cb),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===rt.NEW_STREAM||e.type===rt.MESSAGE_INITIATOR||e.type===rt.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},rq=new Pb;function kp(r){let e=new de;return rq.write(r,e),e}var kb=class extends Ws{streamId;types;maxDataSize;muxer;constructor(e){super(e),this.types=e.direction==="outbound"?Tb:$k,this.maxDataSize=e.maxDataSize,this.muxer=e.muxer,this.streamId=parseInt(this.id.substring(1)),e.direction==="outbound"&&queueMicrotask(()=>{this.muxer.send(kp({id:this.streamId,type:Tb.NEW_STREAM,data:new de(B(this.id))}))})}sendData(e){let t=new de,n=e.byteLength;for(;e.byteLength>0;){let o=Math.min(e.byteLength,this.maxDataSize),i=e.sublist(0,o);e=e.sublist(o),t.append(kp({id:this.streamId,type:this.types.MESSAGE,data:i}))}return{sentBytes:n,canSendMore:this.muxer.send(t)}}sendReset(){return this.muxer.send(kp({id:this.streamId,type:this.types.RESET}))}async sendCloseWrite(e){this.muxer.send(kp({id:this.streamId,type:this.types.CLOSE})),e?.signal?.throwIfAborted()}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}};function Vk(r){let{id:e,muxer:t,direction:n,maxMsgSize:o=Pp}=r;return new kb({...r,id:n==="outbound"?`i${e}`:`r${e}`,direction:n,maxDataSize:o,muxer:t,log:r.log.newScope(`${n}:${e}`),protocol:""})}var nq=5;function oq(r){let e={...r,type:`${Cp[r.type]} (${r.type})`};return r.type===rt.NEW_STREAM&&(e.data=j(r.data.subarray())),(r.type===rt.MESSAGE_INITIATOR||r.type===rt.MESSAGE_RECEIVER)&&(e.data=j(r.data.subarray(),"base16")),e}var F3=class extends qs{_streamId;rateLimiter;maxMessageSize;maxUnprocessedMessageQueueSize;decoder;constructor(e,t){super(e,{...t,protocol:"/mplex/6.7.0",name:"mplex"}),this._streamId=0,this.maxMessageSize=t.maxMessageSize??Pp,this.maxUnprocessedMessageQueueSize=t.maxUnprocessedMessageQueueSize??Ib,this.decoder=new U3(this.maxMessageSize,this.maxUnprocessedMessageQueueSize),this.rateLimiter=new Pu({points:t.disconnectThreshold??nq,duration:1})}onData(e){for(let t of this.decoder.write(e))this.handleMessage(t)}onCreateStream(e){if(this.status!=="open")throw new wo("Muxer already closed");let t=this._streamId++;return this._newStream(t,"outbound",e)}_newStream(e,t,n){return this.log("new %s stream %s",t,e),Vk({...n,id:e,direction:t,maxMsgSize:this.maxMessageSize,log:this.log,muxer:this})}handleMessage(e){if(this.log.enabled&&this.log.trace("incoming message",oq(e)),e.type===rt.NEW_STREAM){try{this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}let o=this._newStream(e.id,"inbound",this.streamOptions);this.onRemoteStream(o);return}let t=`${(e.type&1)===1?"i":"r"}${e.id}`,n=this.streams.find(o=>o.id===t);if(n==null){this.log("missing stream %s for message type %s",t,Cp[e.type]);try{this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}try{switch(e.type){case rt.MESSAGE_INITIATOR:case rt.MESSAGE_RECEIVER:n.onData(e.data);break;case rt.CLOSE_INITIATOR:case rt.CLOSE_RECEIVER:n.onRemoteCloseWrite();break;case rt.RESET_INITIATOR:case rt.RESET_RECEIVER:n.onRemoteReset();break;default:this.log("unknown message type")}}catch(o){this.log.error("error while processing message - %e",o),n.abort(o)}}};var Ob=class{protocol="/mplex/6.7.0";_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@libp2p/mplex";[qe]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new F3(e,{...this._init})}};function Hk(r={}){return()=>new Ob(r)}var Rb=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Db=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},qk=r=>globalThis.DOMException===void 0?new Db(r):new DOMException(r),Wk=r=>{let e=r.reason===void 0?qk("This operation was aborted."):r.reason;return e instanceof Error?e:qk(e)};function Nb(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((f,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(Wk(h)),a=()=>{u(Wk(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(f,u);return}let d=new Rb;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?f():o instanceof Error?u(o):(d.message=o??`Promise timed out after ${t} milliseconds`,u(d))},t),(async()=>{try{f(await r)}catch(h){u(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}var iq=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function sq(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:f}=iq(r),u=async(...h)=>{let m=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(m))return}catch(w){n(),s(w);return}c.push(m),t.count===c.length&&(n(),i(c))},d=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)f(h,u);for(let h of t.rejectionEvents)a.includes(h)||f(h,d)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,d);t.signal&&t.signal.addEventListener("abort",()=>{d(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Nb(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function zk(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=sq(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var Gk="1.0.0",Xk="ping",Yk="ipfs";var $3=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;constructor(e,t={}){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??Yk}/${Xk}/${Gk}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handlePing=this.handlePing.bind(this)}[Symbol.toStringTag]="@libp2p/ping";[qe]=["@libp2p/ping"];async start(){await this.components.registrar.handle(this.protocol,this.handlePing,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}async handlePing(e,t){let n=e.log.newScope("ping");n.trace("ping from %p",t.remotePeer);let o=AbortSignal.timeout(this.timeout);o.addEventListener("abort",()=>{e.abort(new Yo("Ping timed out"))});let i=Date.now();for await(let s of e){if(e.status!=="open"){n("stream status changed to %s",e.status);break}e.send(s)||(n("waiting for stream to drain"),await zk(e,"drain",{rejectionEvents:["close"],signal:o}),n("stream drained"))}n("ping from %p complete in %dms",t.remotePeer,Date.now()-i),await e.close({signal:o})}async ping(e,t={}){let n=Yr(32),o=await this.components.connectionManager.openStream(e,this.protocol,{runOnLimitedConnection:this.runOnLimitedConnection,...t}),i=o.log.newScope("ping");try{let s=Date.now(),a=Promise.withResolvers(),c=new de,l=f=>{if(c.append(f.data),c.byteLength===32){o.removeEventListener("message",l);let u=Date.now()-s;Promise.all([o.closeRead(t)]).then(()=>{if(we(n,c.subarray()))a.resolve(u);else throw new ja(`Received wrong ping ack after ${u}ms`)}).catch(d=>{o.abort(d),a.reject(d)})}};return o.addEventListener("message",l),o.send(n),await o.close(t),await ut(a.promise,t.signal)}catch(s){throw i.error("error while pinging %o - %e",e,s),o?.abort(s),s}finally{o?.close()}}};function Zk(r={}){return e=>new $3(e,r)}var Hr;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.flag!=null&&(i.uint32(8),r.Flag.codec().encode(o.flag,i)),o.message!=null&&(i.uint32(18),i.bytes(o.message)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.flag=r.Flag.codec().decode(o);break}case 2:{a.message=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(Hr||(Hr={}));var Jk=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],Lb=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),eO="libp2p+webrtc+v1/",tO=2*1024*1024,wf=16*1024;function uq(r=wf){let e=Ke(r-Ke(r)),t=1+Ke(Object.keys(Hr.Flag).length-1),n=1,o=r-e-t-n,i=Ke(o);return e+t+n+i}var rO=uq();var nO=1e4,Bb="/webrtc",Op="/webrtc-signaling/0.0.1",oO="/libp2p/webrtc-direct/certificate",iO="webrtc-direct-certificate-private-key";var sO=12096e5,Mb=864e5;var Ub=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Fb=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},aO=r=>globalThis.DOMException===void 0?new Fb(r):new DOMException(r),cO=r=>{let e=r.reason===void 0?aO("This operation was aborted."):r.reason;return e instanceof Error?e:aO(e)};function $b(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((f,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(cO(h)),a=()=>{u(cO(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(f,u);return}let d=new Ub;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?f():o instanceof Error?u(o):(d.message=o??`Promise timed out after ${t} milliseconds`,u(d))},t),(async()=>{try{f(await r)}catch(h){u(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}var fq=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function dq(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:f}=fq(r),u=async(...h)=>{let m=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(m))return}catch(w){n(),s(w);return}c.push(m),t.count===c.length&&(n(),i(c))},d=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)f(h,u);for(let h of t.rejectionEvents)a.includes(h)||f(h,d)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,d);t.signal&&t.signal.addEventListener("abort",()=>{d(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=$b(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function ds(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=dq(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var lO=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},hq=(function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r})();var pq=(function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r})();var mq=(function(){function r(e,t,n,o){this.name=e,this.version=t,this.os=n,this.bot=o,this.type="bot-device"}return r})();var gq=(function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r})();var yq=(function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r})();var wq=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,bq=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,uO=3,vq=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["pie",/^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],["pie",/^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],["netfront",/^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FB[AS]V\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["curl",/^curl\/([0-9\.]+)$/],["searchbot",wq]],fO=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Windows CE",/Windows CE|WinCE|Microsoft Pocket Internet Explorer/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function hO(r){return r?dO(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new yq:typeof navigator<"u"?dO(navigator.userAgent):Sq()}function xq(r){return r!==""&&vq.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var i=o.exec(r);return!!i&&[n,i]},!1)}function dO(r){var e=xq(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new gq;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<uO&&(o=lO(lO([],o,!0),_q(uO-o.length),!0)):o=[];var i=o.join("."),s=Eq(r),a=bq.exec(r);return a&&a[1]?new mq(t,i,s,a[1]):new hq(t,i,s)}function Eq(r){for(var e=0,t=fO.length;e<t;e++){var n=fO[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function Sq(){var r=typeof process<"u"&&process.version;return r?new pq(process.version.slice(1)):null}function _q(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var pO=hO(),j3=pO!=null&&pO.name==="firefox";async function jb(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Jk.map(e=>({urls:[e]})),r}var mO=(r=32)=>eO+[...Array(r)].map(()=>Lb.at(Math.floor(Math.random()*Lb.length))).join("");var Kb=class extends Ws{channel;incomingData;maxBufferedAmount;receivedFinAck;finAckTimeout;constructor(e){super({...e,maxMessageSize:(e.maxMessageSize??wf)-rO}),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=gr(),this.maxBufferedAmount=e.maxBufferedAmount??tO,this.finAckTimeout=e.finAckTimeout??nO,this.channel.onclose=()=>{this.log.trace("received datachannel close event"),this.onRemoteCloseWrite(),this.onTransportClosed()},this.channel.onerror=n=>{let o=n.error;this.log.trace("received datachannel error event - %e",o),this.abort(o)},this.channel.onmessage=async n=>{this.log("incoming message %d bytes",n.data.byteLength);let{data:o}=n;o===null||o.byteLength===0||this.incomingData.push(new Uint8Array(o,0,o.byteLength))},this.channel.bufferedAmountLowThreshold=0,this.channel.onbufferedamountlow=()=>{this.writableNeedsDrain&&this.safeDispatchEvent("drain")},Promise.resolve().then(async()=>{for await(let n of Ec(this.incomingData))this.processIncomingProtobuf(n)}).catch(n=>{this.log.error("error processing incoming data channel messages - %e",n)});let t=()=>{this.channel.readyState==="open"&&(this.log.trace("stream closed, closing underlying datachannel"),this.channel.close())};this.addEventListener("close",t),this.channel.readyState!=="open"&&(this.log('channel ready state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),ds(this.channel,"open",{rejectionEvents:["close","error"]}).then(()=>{this.log('channel ready state is now "%s", dispatching drain',this.channel.readyState),this.safeDispatchEvent("drain")}).catch(n=>{this.abort(n.error??n)}))}sendNewStream(){}_sendMessage(e){if(this.channel.readyState!=="open")throw new Go(`Invalid datachannel state - ${this.channel.readyState}`);if(this.log.trace('sending message, channel state "%s"',this.channel.readyState),j3){this.channel.send(e.subarray());return}for(let t of e)this.channel.send(t)}sendData(e){return this.channel.readyState!=="open"?{sentBytes:0,canSendMore:!1}:(this._sendMessage(zi.single(Hr.encode({message:e.subarray()}))),{sentBytes:e.byteLength,canSendMore:this.channel.bufferedAmount<this.maxBufferedAmount})}sendReset(e){try{this.log.error("sending reset - %e",e),this._sendFlag(Hr.Flag.RESET),this.receivedFinAck?.reject(e)}catch(t){this.log.error("failed to send reset - %e",t)}}async sendCloseWrite(e){this._sendFlag(Hr.Flag.FIN),e?.signal?.throwIfAborted(),this.receivedFinAck=Promise.withResolvers();let t=e?.signal??AbortSignal.timeout(this.finAckTimeout),n=[ds(this.channel,"close",{signal:t}),ds(this.channel,"error",{signal:t})];await Promise.any([ut(this.receivedFinAck.promise,t),...n]).finally(()=>{n.forEach(o=>o.cancel())})}async sendCloseRead(e){this._sendFlag(Hr.Flag.STOP_SENDING),e?.signal?.throwIfAborted()}processIncomingProtobuf(e){let t=Hr.decode(e);t.message!=null&&(this.readStatus==="readable"||this.readStatus==="paused")&&this.onData(new de(t.message)),t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Hr.Flag.FIN&&(this._sendFlag(Hr.Flag.FIN_ACK),this.onRemoteCloseWrite()),t.flag===Hr.Flag.RESET&&(this.receivedFinAck?.reject(new Ml("The stream was reset")),this.onRemoteReset()),t.flag===Hr.Flag.STOP_SENDING&&this.onRemoteCloseRead(),t.flag===Hr.Flag.FIN_ACK&&this.receivedFinAck?.resolve())}_sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',e.toString(),this.channel.readyState),!1;this.log.trace("sending flag %s",e.toString());let t=Hr.encode({flag:e}),n=zi.single(t);try{return this._sendMessage(n),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}sendPause(){}sendResume(){}};function Rp(r){let{channel:e,direction:t,isHandshake:n}=r;return new Kb({...r,id:`${e.id}`,log:r.log.newScope(`${n===!0?"handshake":t}:${e.id}`),protocol:""})}var ma=class{protocol;peerConnection;metrics;dataChannelOptions;earlyDataChannels;constructor(e){this.onEarlyDataChannel=this.onEarlyDataChannel.bind(this),this.peerConnection=e.peerConnection,this.metrics=e.metrics,this.protocol=e.protocol??Bb,this.dataChannelOptions=e.dataChannelOptions??{},this.peerConnection.addEventListener("datachannel",this.onEarlyDataChannel),this.earlyDataChannels=[]}onEarlyDataChannel(e){this.earlyDataChannels.push(e.channel)}createStreamMuxer(e){return this.peerConnection.removeEventListener("datachannel",this.onEarlyDataChannel),new Vb(e,{peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,protocol:this.protocol,earlyDataChannels:this.earlyDataChannels})}},Vb=class extends qs{peerConnection;dataChannelOptions;constructor(e,t){super(e,{...t,name:"muxer"}),this.peerConnection=t.peerConnection,this.protocol=t.protocol??Bb,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{this.onDataChannel(n)},queueMicrotask(()=>{if(this.status!=="open"){t.earlyDataChannels.forEach(n=>{n.close()});return}t.earlyDataChannels.forEach(n=>{this.onDataChannel(n)})})}onDataChannel(e){if(this.log("incoming datachannel with channel id %d, protocol %s and status %s",e.id,e.protocol,e.readyState),e.label==="init"){this.log.trace("closing init channel %d",e.id),e.close();return}let t=Rp({...this.streamOptions,...this.dataChannelOptions,channel:e,direction:"inbound",log:this.log});this.onRemoteStream(t)}async onCreateStream(e){let t=this.peerConnection.createDataChannel("",{});return this.log("open channel %d for protocol %s",t.id,e?.protocol),Rp({...e,...this.dataChannelOptions,channel:t,direction:"outbound",log:this.log})}onData(){}};var Hb=class extends Hs{peerConnection;constructor(e){super(e),this.peerConnection=e.peerConnection;let t=e.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change %s initial state %s",this.peerConnection.connectionState,t),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.onTransportClosed(),this.peerConnection.close())}}sendData(e){return{sentBytes:e.byteLength,canSendMore:!0}}async sendClose(e){this.peerConnection.close(),e?.signal?.throwIfAborted()}sendReset(){this.peerConnection.close()}sendPause(){}sendResume(){}},Dp=r=>new Hb(r);var K3=globalThis.RTCPeerConnection,V3=globalThis.RTCSessionDescription,gO=globalThis.RTCIceCandidate;var ga=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},ao=class extends ga{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var H3=class extends ga{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var q3=class extends ga{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},W3=class extends ga{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `),this.name="WebRTC/UnsupportedHashAlgorithmError"}};var gn;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.data!=null&&(i.uint32(18),i.string(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.data=o.string();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(gn||(gn={}));var z3=async(r,e,t)=>{try{let n=Promise.withResolvers();for(Aq(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==gn.Type.ICE_CANDIDATE)throw new Be("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new oe("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new gO(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new oe("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received %o - %e",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate - %e",t.direction,n),t.signal?.aborted===!0&&r.connectionState!=="connected")throw n}};function Aq(r,e){if(r.connectionState==="connected"){e.resolve();return}r.onconnectionstatechange=t=>{switch(r.connectionState){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new Bl(`RTCPeerConnection connection state became "${r.connectionState}"`));break;default:break}}}function G3(r){let e;for(let t of r.getComponents())t.name==="p2p"&&(e=yt(t.value??""));if(e==null)throw new Xo("Remote peerId must be present in multiaddr");return e}async function yO({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{circuitAddress:f,targetPeer:u}=wO(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing circuit address: %a",f);let d=i.getConnections(u),h;d.length===0?(l?.(new oe("webrtc:dial-relay")),h=await s.dial(f,{signal:t,onProgress:l})):(l?.(new oe("webrtc:reuse-relay-connection")),h=d[0]),l?.(new oe("webrtc:open-signaling-stream"));let m=await h.newStream(Op,{signal:t,runOnLimitedConnection:!0}),w=bt(m).pb(gn),y=new K3(r);y.addEventListener("connectionstatechange",()=>{switch(y.connectionState){case"closed":y.close();break;default:break}});let b=new ma({peerConnection:y,dataChannelOptions:e});try{let N=y.createDataChannel("init");y.onicecandidate=({candidate:Z})=>{if(y.connectionState==="connected"){a.trace("ignore new ice candidate as peer connection is already connected");return}if(Z==null||Z?.candidate===""){a.trace("initiator detected end of ICE candidates");return}let se=JSON.stringify(Z?.toJSON()??null);a.trace("initiator sending ICE candidate %o",Z),w.write({type:gn.Type.ICE_CANDIDATE,data:se},{signal:t}).catch(C=>{a.error("error sending ICE candidate - %e",C)})},y.onicecandidateerror=Z=>{a.error("initiator ICE candidate error",Z)};let O=await y.createOffer().catch(Z=>{throw a.error("could not execute createOffer - %e",Z),new ao("Failed to set createOffer")});a.trace("initiator send SDP offer %s",O.sdp),l?.(new oe("webrtc:send-sdp-offer")),await w.write({type:gn.Type.SDP_OFFER,data:O.sdp},{signal:t}),await y.setLocalDescription(O).catch(Z=>{throw a.error("could not execute setLocalDescription - %e",Z),new ao("Failed to set localDescription")}),l?.(new oe("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let V=await w.read({signal:t});if(V.type!==gn.Type.SDP_ANSWER)throw new ao("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",V.data);let Q=new V3({type:"answer",sdp:V.data});return await y.setRemoteDescription(Q).catch(Z=>{throw a.error("could not execute setRemoteDescription - %e",Z),new ao("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new oe("webrtc:read-ice-candidates")),await z3(y,w,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected"),N.readyState!=="open"&&(a.trace("wait for init channel to open"),await ds(N,"open",{signal:t})),a.trace("closing init channel"),N.close(),a.trace("waiting for init channel to close"),await ds(N,"close",{signal:t}),l?.(new oe("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await m.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:y,muxerFactory:b}}catch(N){throw a.error("outgoing signaling error - %e",N),y.close(),m.abort(N),N}finally{y.onicecandidate=null,y.onicecandidateerror=null}}var bO=ct(Fu.matchers[0],at(290)),X3=class r extends _e{transportManager;shutdownController;events;constructor(e,t){super(),this.transportManager=e.transportManager,this.events=e.events,this.shutdownController=t.shutdownController,this.onTransportListening=this.onTransportListening.bind(this)}async listen(){this.events.addEventListener("transport:listening",this.onTransportListening)}onTransportListening(e){e.detail.getAddrs().filter(n=>bO.exactMatch(n)).map(n=>n.encapsulate("/webrtc")).length>0&&this.safeDispatchEvent("listening")}getAddrs(){return this.transportManager.getListeners().filter(e=>!(e instanceof r)).map(e=>e.getAddrs().filter(t=>bO.exactMatch(t)).map(t=>t.encapsulate("/webrtc"))).flat()}updateAnnounceAddrs(){}async close(){this.events.removeEventListener("transport:listening",this.onTransportListening),this.shutdownController.abort(),queueMicrotask(()=>{this.safeDispatchEvent("close")})}};async function vO(r,e,{peerConnection:t,signal:n,log:o}){o.trace("new inbound signaling stream");let i=bt(r).pb(gn);try{t.onicecandidate=({candidate:u})=>{if(t.connectionState==="connected"){o.trace("ignore new ice candidate as peer connection is already connected");return}if(u==null||u?.candidate===""){o.trace("recipient detected end of ICE candidates");return}let d=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",d),i.write({type:gn.Type.ICE_CANDIDATE,data:d},{signal:n}).catch(h=>{o.error("error sending ICE candidate - %e",h)})},o.trace("recipient read SDP offer");let c=await i.read({signal:n});if(c.type!==gn.Type.SDP_OFFER)throw new ao(`expected message type SDP_OFFER, received: ${c.type??"undefined"} `);o.trace("recipient received SDP offer %s",c.data);let l=new V3({type:"offer",sdp:c.data});await t.setRemoteDescription(l).catch(u=>{throw o.error("could not execute setRemoteDescription - %e",u),new ao("Failed to set remoteDescription")});let f=await t.createAnswer().catch(u=>{throw o.error("could not execute createAnswer - %e",u),new ao("Failed to create answer")});o.trace("recipient send SDP answer %s",f.sdp),await i.write({type:gn.Type.SDP_ANSWER,data:f.sdp},{signal:n}),await t.setLocalDescription(f).catch(u=>{throw o.error("could not execute setLocalDescription - %e",u),new ao("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await z3(t,i,{direction:"recipient",signal:n,log:o})}catch(c){if(t.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a - %e",e.remoteAddr,c),t.close(),c;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",e.remoteAddr,c)}let s=G3(e.remoteAddr),a=ie(`/webrtc/p2p/${s}`);return o.trace("recipient connected to remote address %s",a),{remoteAddress:a,remotePeer:s}}var Y3=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,this.shutdownController.signal,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}[ks]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[qe]=["@libp2p/transport"];[An]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(Op,(e,t)=>{let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t,n).catch(o=>{this.log.error("failed to handle incoming connect from %p - %e",t.remotePeer,o)}).finally(()=>{n.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(Op),this._started=!1}createListener(e){return new X3(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(Th.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:i}=await yO({rtcConfiguration:await jb(this.init.rtcConfiguration),dataChannel:this.init.dataChannel,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log,logger:this.components.logger,onProgress:t.onProgress}),s=Dp({peerConnection:o,remoteAddr:n,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,remotePeer:G3(e),muxerFactory:i,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,s),a}async _onProtocol(e,t,n){let o=new K3(await jb(this.init.rtcConfiguration));o.addEventListener("connectionstatechange",()=>{switch(o.connectionState){case"closed":o.close();break;default:break}});let i=new ma({peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s,remotePeer:a}=await vO(e,t,{peerConnection:o,signal:n,log:this.log});await e.close({signal:n});let c=Dp({peerConnection:o,remoteAddr:s,metrics:this.metrics?.listenerEvents,direction:"inbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")});await this.components.upgrader.upgradeInbound(c,{skipEncryption:!0,skipProtection:!0,remotePeer:a,muxerFactory:i,signal:n}),this._closeOnShutdown(o,c)}catch(s){throw this.log.error("incoming signaling error - %e",s),o.close(),e.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection - %e",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function wO(r){let e=r.getComponents().filter(({name:n})=>n==="p2p").map(({value:n})=>n).pop();if(e==null)throw new P("Destination peer id was missing");return{circuitAddress:ie(r.getComponents().filter(({name:n})=>n!=="webrtc")),targetPeer:yt(e)}}var S$e=nr(EO());var A;(function(r){r[r.Sequence=0]="Sequence",r[r.Set=1]="Set",r[r.Choice=2]="Choice"})(A||(A={}));var g;(function(r){r[r.Any=1]="Any",r[r.Boolean=2]="Boolean",r[r.OctetString=3]="OctetString",r[r.BitString=4]="BitString",r[r.Integer=5]="Integer",r[r.Enumerated=6]="Enumerated",r[r.ObjectIdentifier=7]="ObjectIdentifier",r[r.Utf8String=8]="Utf8String",r[r.BmpString=9]="BmpString",r[r.UniversalString=10]="UniversalString",r[r.NumericString=11]="NumericString",r[r.PrintableString=12]="PrintableString",r[r.TeletexString=13]="TeletexString",r[r.VideotexString=14]="VideotexString",r[r.IA5String=15]="IA5String",r[r.GraphicString=16]="GraphicString",r[r.VisibleString=17]="VisibleString",r[r.GeneralString=18]="GeneralString",r[r.CharacterString=19]="CharacterString",r[r.UTCTime=20]="UTCTime",r[r.GeneralizedTime=21]="GeneralizedTime",r[r.DATE=22]="DATE",r[r.TimeOfDay=23]="TimeOfDay",r[r.DateTime=24]="DateTime",r[r.Duration=25]="Duration",r[r.TIME=26]="TIME",r[r.Null=27]="Null"})(g||(g={}));var qb=nr(os()),yi=class{constructor(e,t=0){if(this.unusedBits=0,this.value=new ArrayBuffer(0),e)if(typeof e=="number")this.fromNumber(e);else if(qb.BufferSourceConverter.isBufferSource(e))this.unusedBits=t,this.value=qb.BufferSourceConverter.toArrayBuffer(e);else throw TypeError("Unsupported type of 'params' argument for BitString")}fromASN(e){if(!(e instanceof Mo))throw new TypeError("Argument 'asn' is not instance of ASN.1 BitString");return this.unusedBits=e.valueBlock.unusedBits,this.value=e.valueBlock.valueHex,this}toASN(){return new Mo({unusedBits:this.unusedBits,valueHex:this.value})}toSchema(e){return new Mo({name:e})}toNumber(){let e="",t=new Uint8Array(this.value);for(let n of t)e+=n.toString(2).padStart(8,"0");return e=e.split("").reverse().join(""),this.unusedBits&&(e=e.slice(this.unusedBits).padStart(this.unusedBits,"0")),parseInt(e,2)}fromNumber(e){let t=e.toString(2),n=t.length+7>>3;this.unusedBits=(n<<3)-t.length;let o=new Uint8Array(n);t=t.padStart(n<<3,"0").split("").reverse().join("");let i=0;for(;i<n;)o[i]=parseInt(t.slice(i<<3,(i<<3)+8),2),i++;this.value=o.buffer}};var Wb=nr(os()),xe=class{get byteLength(){return this.buffer.byteLength}get byteOffset(){return 0}constructor(e){typeof e=="number"?this.buffer=new ArrayBuffer(e):Wb.BufferSourceConverter.isBufferSource(e)?this.buffer=Wb.BufferSourceConverter.toArrayBuffer(e):Array.isArray(e)?this.buffer=new Uint8Array(e):this.buffer=new ArrayBuffer(0)}fromASN(e){if(!(e instanceof Vr))throw new TypeError("Argument 'asn' is not instance of ASN.1 OctetString");return this.buffer=e.valueBlock.valueHex,this}toASN(){return new Vr({valueHex:this.buffer})}toSchema(e){return new Vr({name:e})}};var Tq={fromASN:r=>r instanceof hn?null:r.valueBeforeDecodeView,toASN:r=>{if(r===null)return new hn;let e=$n(r);if(e.result.error)throw new Error(e.result.error);return e.result}},Iq={fromASN:r=>r.valueBlock.valueHexView.byteLength>=4?r.valueBlock.toString():r.valueBlock.valueDec,toASN:r=>new Un({value:+r})},Cq={fromASN:r=>r.valueBlock.valueDec,toASN:r=>new Lc({value:r})},Fe={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Un({valueHex:r})};var Pq={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Mo({valueHex:r})},kq={fromASN:r=>r.valueBlock.toString(),toASN:r=>new Fn({value:r})},Oq={fromASN:r=>r.valueBlock.value,toASN:r=>new Nc({value:r})},bf={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Vr({valueHex:r})},SO={fromASN:r=>new xe(r.getValue()),toASN:r=>r.toASN()};function co(r){return{fromASN:e=>e.valueBlock.value,toASN:e=>new r({value:e})}}var zb=co(oo),Rq=co(Bc),Dq=co(Mc),Nq=co(Uc),Lq=co(Fc),Bq=co($c),Mq=co(jc),Uq=co(Kc),Fq=co(Vc),$q=co(oa),jq=co(Hc),Kq=co(qc),Vq={fromASN:r=>r.toDate(),toASN:r=>new ia({valueDate:r})},Hq={fromASN:r=>r.toDate(),toASN:r=>new Wc({valueDate:r})},qq={fromASN:()=>null,toASN:()=>new hn};function ya(r){switch(r){case g.Any:return Tq;case g.BitString:return Pq;case g.BmpString:return Rq;case g.Boolean:return Oq;case g.CharacterString:return Kq;case g.Enumerated:return Cq;case g.GeneralString:return jq;case g.GeneralizedTime:return Hq;case g.GraphicString:return Fq;case g.IA5String:return Uq;case g.Integer:return Iq;case g.Null:return qq;case g.NumericString:return Nq;case g.ObjectIdentifier:return kq;case g.OctetString:return bf;case g.PrintableString:return Lq;case g.TeletexString:return Bq;case g.UTCTime:return Vq;case g.UniversalString:return Dq;case g.Utf8String:return zb;case g.VideotexString:return Mq;case g.VisibleString:return $q;default:return null}}function lo(r){return typeof r=="function"&&r.prototype?r.prototype.toASN&&r.prototype.fromASN?!0:lo(r.prototype):!!(r&&typeof r=="object"&&"toASN"in r&&"fromASN"in r)}function Xb(r){var e;if(r){let t=Object.getPrototypeOf(r);return((e=t?.prototype)===null||e===void 0?void 0:e.constructor)===Array?!0:Xb(t)}return!1}function _O(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}var Q3=class{constructor(){this.items=new WeakMap}has(e){return this.items.has(e)}get(e,t=!1){let n=this.items.get(e);if(!n)throw new Error(`Cannot get schema for '${e.prototype.constructor.name}' target`);if(t&&!n.schema)throw new Error(`Schema '${e.prototype.constructor.name}' doesn't contain ASN.1 schema. Call 'AsnSchemaStorage.cache'.`);return n}cache(e){let t=this.get(e);t.schema||(t.schema=this.create(e,!0))}createDefault(e){let t={type:A.Sequence,items:{}},n=this.findParentSchema(e);return n&&(Object.assign(t,n),t.items=Object.assign({},t.items,n.items)),t}create(e,t){let n=this.items.get(e)||this.createDefault(e),o=[];for(let i in n.items){let s=n.items[i],a=t?i:"",c;if(typeof s.type=="number"){let f=g[s.type],u=io[f];if(!u)throw new Error(`Cannot get ASN1 class by name '${f}'`);c=new u({name:a})}else lo(s.type)?c=new s.type().toSchema(a):s.optional?this.get(s.type).type===A.Choice?c=new li({name:a}):(c=this.create(s.type,!1),c.name=a):c=new li({name:a});let l=!!s.optional||s.defaultValue!==void 0;if(s.repeated){c.name="";let f=s.repeated==="set"?en:vt;c=new f({name:"",value:[new zc({name:a,value:c})]})}if(s.context!==null&&s.context!==void 0)if(s.implicit)if(typeof s.type=="number"||lo(s.type)){let f=s.repeated?Yt:as;o.push(new f({name:a,optional:l,idBlock:{tagClass:3,tagNumber:s.context}}))}else{this.cache(s.type);let f=!!s.repeated,u=f?c:this.get(s.type,!0).schema;u="valueBlock"in u?u.valueBlock.value:u.value,o.push(new Yt({name:f?"":a,optional:l,idBlock:{tagClass:3,tagNumber:s.context},value:u}))}else o.push(new Yt({optional:l,idBlock:{tagClass:3,tagNumber:s.context},value:[c]}));else c.optional=l,o.push(c)}switch(n.type){case A.Sequence:return new vt({value:o,name:""});case A.Set:return new en({value:o,name:""});case A.Choice:return new Qu({value:o,name:""});default:throw new Error("Unsupported ASN1 type in use")}}set(e,t){return this.items.set(e,t),this}findParentSchema(e){let t=Object.getPrototypeOf(e);return t?this.items.get(t)||this.findParentSchema(t):null}};var Qt=new Q3;var k=r=>e=>{let t;Qt.has(e)?t=Qt.get(e):(t=Qt.createDefault(e),Qt.set(e,t)),Object.assign(t,r)};var p=r=>(e,t)=>{let n;Qt.has(e.constructor)?n=Qt.get(e.constructor):(n=Qt.createDefault(e.constructor),Qt.set(e.constructor,n));let o=Object.assign({},r);if(typeof o.type=="number"&&!o.converter){let i=ya(r.type);if(!i)throw new Error(`Cannot get default converter for property '${t}' of ${e.constructor.name}`);o.converter=i}o.raw=r.raw,n.items[t]=o};var wa=class extends Error{constructor(){super(...arguments),this.schemas=[]}};var Np=class{static parse(e,t){let n=$n(e);if(n.result.error)throw new Error(n.result.error);return this.fromASN(n.result,t)}static fromASN(e,t){try{if(lo(t))return new t().fromASN(e);let n=Qt.get(t);Qt.cache(t);let o=n.schema,i=this.handleChoiceTypes(e,n,t,o);if(i?.result)return i.result;i?.targetSchema&&(o=i.targetSchema);let s=this.handleSequenceTypes(e,n,t,o),a=new t;return Xb(t)?this.handleArrayTypes(e,n,t):(this.processSchemaItems(n,s,a),a)}catch(n){throw n instanceof wa&&n.schemas.push(t.name),n}}static handleChoiceTypes(e,t,n,o){if(e.constructor===Yt&&t.type===A.Choice&&e.idBlock.tagClass===3)for(let i in t.items){let s=t.items[i];if(s.context===e.idBlock.tagNumber&&s.implicit&&typeof s.type=="function"&&Qt.has(s.type)){let a=Qt.get(s.type);if(a&&a.type===A.Sequence){let c=new vt;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in c.valueBlock){c.valueBlock.value=e.valueBlock.value;let l=this.fromASN(c,s.type),f=new n;return f[i]=l,{result:f}}}}}else if(e.constructor===Yt&&t.type!==A.Choice){let i=new Yt({idBlock:{tagClass:3,tagNumber:e.idBlock.tagNumber},value:t.schema.valueBlock.value});for(let s in t.items)delete e[s];return{targetSchema:i}}return null}static handleSequenceTypes(e,t,n,o){if(t.type===A.Sequence){let i=is({},e,o);if(!i.verified)throw new wa(`Data does not match to ${n.name} ASN1 schema.${i.result.error?` ${i.result.error}`:""}`);return i}else{let i=is({},e,o);if(!i.verified)throw new wa(`Data does not match to ${n.name} ASN1 schema.${i.result.error?` ${i.result.error}`:""}`);return i}}static processRepeatedField(e,t,n){let o=e.slice(t);if(o.length===1&&o[0].constructor.name==="Sequence"){let i=o[0];i.valueBlock&&i.valueBlock.value&&Array.isArray(i.valueBlock.value)&&(o=i.valueBlock.value)}if(typeof n.type=="number"){let i=ya(n.type);if(!i)throw new Error(`No converter for ASN.1 type ${n.type}`);return o.filter(s=>s&&s.valueBlock).map(s=>{try{return i.fromASN(s)}catch{return}}).filter(s=>s!==void 0)}else return o.filter(i=>i&&i.valueBlock).map(i=>{try{return this.fromASN(i,n.type)}catch{return}}).filter(i=>i!==void 0)}static processPrimitiveField(e,t){let n=ya(t.type);if(!n)throw new Error(`No converter for ASN.1 type ${t.type}`);return n.fromASN(e)}static isOptionalChoiceField(e){return e.optional&&typeof e.type=="function"&&Qt.has(e.type)&&Qt.get(e.type).type===A.Choice}static processOptionalChoiceField(e,t){try{return{processed:!0,value:this.fromASN(e,t.type)}}catch(n){if(n instanceof wa&&/Wrong values for Choice type/.test(n.message))return{processed:!1};throw n}}static handleArrayTypes(e,t,n){if(!("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let o=t.itemType;if(typeof o=="number"){let i=ya(o);if(!i)throw new Error(`Cannot get default converter for array item of ${n.name} ASN1 schema`);return n.from(e.valueBlock.value,s=>i.fromASN(s))}else return n.from(e.valueBlock.value,i=>this.fromASN(i,o))}static processSchemaItems(e,t,n){for(let o in e.items){let i=t.result[o];if(!i)continue;let s=e.items[o],a=s.type,c;typeof a=="number"||lo(a)?c=this.processPrimitiveSchemaItem(i,s,a):c=this.processComplexSchemaItem(i,s,a),c&&typeof c=="object"&&"value"in c&&"raw"in c?(n[o]=c.value,n[`${o}Raw`]=c.raw):n[o]=c}}static processPrimitiveSchemaItem(e,t,n){var o;let i=(o=t.converter)!==null&&o!==void 0?o:lo(n)?new n:null;if(!i)throw new Error("Converter is empty");return t.repeated?this.processRepeatedPrimitiveItem(e,t,i):this.processSinglePrimitiveItem(e,t,n,i)}static processRepeatedPrimitiveItem(e,t,n){if(t.implicit){let o=t.repeated==="sequence"?vt:en,i=new o;i.valueBlock=e.valueBlock;let s=$n(i.toBER(!1));if(s.offset===-1)throw new Error(`Cannot parse the child item. ${s.result.error}`);if(!("value"in s.result.valueBlock&&Array.isArray(s.result.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let a=s.result.valueBlock.value;return Array.from(a,c=>n.fromASN(c))}else return Array.from(e,o=>n.fromASN(o))}static processSinglePrimitiveItem(e,t,n,o){let i=e;if(t.implicit){let s;if(lo(n))s=new n().toSchema("");else{let a=g[n],c=io[a];if(!c)throw new Error(`Cannot get '${a}' class from asn1js module`);s=new c}s.valueBlock=i.valueBlock,i=$n(s.toBER(!1)).result}return o.fromASN(i)}static processComplexSchemaItem(e,t,n){if(t.repeated){if(!Array.isArray(e))throw new Error("Cannot get list of items from the ASN.1 parsed value. ASN.1 value should be iterable.");return Array.from(e,o=>this.fromASN(o,n))}else{let o=this.handleImplicitTagging(e,t,n);if(this.isOptionalChoiceField(t))try{return this.fromASN(o,n)}catch(i){if(i instanceof wa&&/Wrong values for Choice type/.test(i.message))return;throw i}else{let i=this.fromASN(o,n);return t.raw?{value:i,raw:e.valueBeforeDecodeView}:i}}}static handleImplicitTagging(e,t,n){if(t.implicit&&typeof t.context=="number"){let o=Qt.get(n);if(o.type===A.Sequence){let i=new vt;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in i.valueBlock)return i.valueBlock.value=e.valueBlock.value,i}else if(o.type===A.Set){let i=new en;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in i.valueBlock)return i.valueBlock.value=e.valueBlock.value,i}}return e}};var Lp=class r{static serialize(e){return e instanceof Xt?e.toBER(!1):this.toASN(e).toBER(!1)}static toASN(e){if(e&&typeof e=="object"&&lo(e))return e.toASN();if(!(e&&typeof e=="object"))throw new TypeError("Parameter 1 should be type of Object.");let t=e.constructor,n=Qt.get(t);Qt.cache(t);let o=[];if(n.itemType){if(!Array.isArray(e))throw new TypeError("Parameter 1 should be type of Array.");if(typeof n.itemType=="number"){let s=ya(n.itemType);if(!s)throw new Error(`Cannot get default converter for array item of ${t.name} ASN1 schema`);o=e.map(a=>s.toASN(a))}else o=e.map(s=>this.toAsnItem({type:n.itemType},"[]",t,s))}else for(let s in n.items){let a=n.items[s],c=e[s];if(c===void 0||a.defaultValue===c||typeof a.defaultValue=="object"&&typeof c=="object"&&_O(this.serialize(a.defaultValue),this.serialize(c)))continue;let l=r.toAsnItem(a,s,t,c);if(typeof a.context=="number")if(a.implicit)if(!a.repeated&&(typeof a.type=="number"||lo(a.type))){let f={};f.valueHex=l instanceof hn?l.valueBeforeDecodeView:l.valueBlock.toBER(),o.push(new as({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},...f}))}else o.push(new Yt({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:l.valueBlock.value}));else o.push(new Yt({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:[l]}));else a.repeated?o=o.concat(l):o.push(l)}let i;switch(n.type){case A.Sequence:i=new vt({value:o});break;case A.Set:i=new en({value:o});break;case A.Choice:if(!o[0])throw new Error(`Schema '${t.name}' has wrong data. Choice cannot be empty.`);i=o[0];break}return i}static toAsnItem(e,t,n,o){let i;if(typeof e.type=="number"){let s=e.converter;if(!s)throw new Error(`Property '${t}' doesn't have converter for type ${g[e.type]} in schema '${n.name}'`);if(e.repeated){if(!Array.isArray(o))throw new TypeError("Parameter 'objProp' should be type of Array.");let a=Array.from(o,l=>s.toASN(l)),c=e.repeated==="sequence"?vt:en;i=new c({value:a})}else i=s.toASN(o)}else if(e.repeated){if(!Array.isArray(o))throw new TypeError("Parameter 'objProp' should be type of Array.");let s=Array.from(o,c=>this.toASN(c)),a=e.repeated==="sequence"?vt:en;i=new a({value:s})}else i=this.toASN(o);return i}};var ve=class extends Array{constructor(e=[]){if(typeof e=="number")super(e);else{super();for(let t of e)this.push(t)}}};var Yb=nr(os());var ee=class r{static serialize(e){return Lp.serialize(e)}static parse(e,t){return Np.parse(e,t)}static toString(e){let t=Yb.BufferSourceConverter.isBufferSource(e)?Yb.BufferSourceConverter.toArrayBuffer(e):r.serialize(e),n=$n(t);if(n.offset===-1)throw new Error(`Cannot decode ASN.1 data. ${n.result.error}`);return n.result.toString()}};function E(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var AO=nr(os()),Bp=class{static isIPv4(e){return/^(\d{1,3}\.){3}\d{1,3}$/.test(e)}static parseIPv4(e){let t=e.split(".");if(t.length!==4)throw new Error("Invalid IPv4 address");return t.map(n=>{let o=parseInt(n,10);if(isNaN(o)||o<0||o>255)throw new Error("Invalid IPv4 address part");return o})}static parseIPv6(e){let n=this.expandIPv6(e).split(":");if(n.length!==8)throw new Error("Invalid IPv6 address");return n.reduce((o,i)=>{let s=parseInt(i,16);if(isNaN(s)||s<0||s>65535)throw new Error("Invalid IPv6 address part");return o.push(s>>8&255),o.push(s&255),o},[])}static expandIPv6(e){if(!e.includes("::"))return e;let t=e.split("::");if(t.length>2)throw new Error("Invalid IPv6 address");let n=t[0]?t[0].split(":"):[],o=t[1]?t[1].split(":"):[],i=8-(n.length+o.length);if(i<0)throw new Error("Invalid IPv6 address");return[...n,...Array(i).fill("0"),...o].join(":")}static formatIPv6(e){let t=[];for(let n=0;n<16;n+=2)t.push((e[n]<<8|e[n+1]).toString(16));return this.compressIPv6(t.join(":"))}static compressIPv6(e){let t=e.split(":"),n=-1,o=0,i=-1,s=0;for(let a=0;a<t.length;a++)t[a]==="0"?(i===-1&&(i=a),s++):(s>o&&(n=i,o=s),i=-1,s=0);if(s>o&&(n=i,o=s),o>1){let a=t.slice(0,n).join(":"),c=t.slice(n+o).join(":");return`${a}::${c}`}return e}static parseCIDR(e){let[t,n]=e.split("/"),o=parseInt(n,10);if(this.isIPv4(t)){if(o<0||o>32)throw new Error("Invalid IPv4 prefix length");return[this.parseIPv4(t),o]}else{if(o<0||o>128)throw new Error("Invalid IPv6 prefix length");return[this.parseIPv6(t),o]}}static decodeIP(e){if(e.length===64&&parseInt(e,16)===0)return"::/0";if(e.length!==16)return e;let t=parseInt(e.slice(8),16).toString(2).split("").reduce((o,i)=>o+ +i,0),n=e.slice(0,8).replace(/(.{2})/g,o=>`${parseInt(o,16)}.`);return n=n.slice(0,-1),`${n}/${t}`}static toString(e){let t=new Uint8Array(e);if(t.length===4)return Array.from(t).join(".");if(t.length===16)return this.formatIPv6(t);if(t.length===8||t.length===32){let n=t.length/2,o=t.slice(0,n),i=t.slice(n);if(t.every(c=>c===0))return t.length===8?"0.0.0.0/0":"::/0";let a=i.reduce((c,l)=>c+(l.toString(2).match(/1/g)||[]).length,0);return t.length===8?`${Array.from(o).join(".")}/${a}`:`${this.formatIPv6(o)}/${a}`}return this.decodeIP(AO.Convert.ToHex(e))}static fromString(e){if(e.includes("/")){let[n,o]=this.parseCIDR(e),i=new Uint8Array(n.length),s=o;for(let c=0;c<i.length;c++)s>=8?(i[c]=255,s-=8):s>0&&(i[c]=255<<8-s,s=0);let a=new Uint8Array(n.length*2);return a.set(n,0),a.set(i,n.length),a.buffer}let t=this.isIPv4(e)?this.parseIPv4(e):this.parseIPv6(e);return new Uint8Array(t).buffer}};var TO=nr(os()),Qb,Zb,Jb,Zt=class{constructor(e={}){Object.assign(this,e)}toString(){return this.bmpString||this.printableString||this.teletexString||this.universalString||this.utf8String||""}};E([p({type:g.TeletexString})],Zt.prototype,"teletexString",void 0);E([p({type:g.PrintableString})],Zt.prototype,"printableString",void 0);E([p({type:g.UniversalString})],Zt.prototype,"universalString",void 0);E([p({type:g.Utf8String})],Zt.prototype,"utf8String",void 0);E([p({type:g.BmpString})],Zt.prototype,"bmpString",void 0);Zt=E([k({type:A.Choice})],Zt);var vf=class extends Zt{constructor(e={}){super(e),Object.assign(this,e)}toString(){return this.ia5String||(this.anyValue?TO.Convert.ToHex(this.anyValue):super.toString())}};E([p({type:g.IA5String})],vf.prototype,"ia5String",void 0);E([p({type:g.Any})],vf.prototype,"anyValue",void 0);vf=E([k({type:A.Choice})],vf);var rl=class{constructor(e={}){this.type="",this.value=new vf,Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],rl.prototype,"type",void 0);E([p({type:vf})],rl.prototype,"value",void 0);var ba=Qb=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,Qb.prototype)}};ba=Qb=E([k({type:A.Set,itemType:rl})],ba);var e9=Zb=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,Zb.prototype)}};e9=Zb=E([k({type:A.Sequence,itemType:ba})],e9);var pt=Jb=class extends e9{constructor(e){super(e),Object.setPrototypeOf(this,Jb.prototype)}};pt=Jb=E([k({type:A.Sequence})],pt);var Wq={fromASN:r=>Bp.toString(bf.fromASN(r)),toASN:r=>bf.toASN(Bp.fromString(r))},va=class{constructor(e={}){this.typeId="",this.value=new ArrayBuffer(0),Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],va.prototype,"typeId",void 0);E([p({type:g.Any,context:0})],va.prototype,"value",void 0);var Mp=class{constructor(e={}){this.partyName=new Zt,Object.assign(this,e)}};E([p({type:Zt,optional:!0,context:0,implicit:!0})],Mp.prototype,"nameAssigner",void 0);E([p({type:Zt,context:1,implicit:!0})],Mp.prototype,"partyName",void 0);var Se=class{constructor(e={}){Object.assign(this,e)}};E([p({type:va,context:0,implicit:!0})],Se.prototype,"otherName",void 0);E([p({type:g.IA5String,context:1,implicit:!0})],Se.prototype,"rfc822Name",void 0);E([p({type:g.IA5String,context:2,implicit:!0})],Se.prototype,"dNSName",void 0);E([p({type:g.Any,context:3,implicit:!0})],Se.prototype,"x400Address",void 0);E([p({type:pt,context:4,implicit:!1})],Se.prototype,"directoryName",void 0);E([p({type:Mp,context:5})],Se.prototype,"ediPartyName",void 0);E([p({type:g.IA5String,context:6,implicit:!0})],Se.prototype,"uniformResourceIdentifier",void 0);E([p({type:g.OctetString,context:7,implicit:!0,converter:Wq})],Se.prototype,"iPAddress",void 0);E([p({type:g.ObjectIdentifier,context:8,implicit:!0})],Se.prototype,"registeredID",void 0);Se=E([k({type:A.Choice})],Se);var xa="1.3.6.1.5.5.7",Ea=`${xa}.1`,IO=`${xa}.2`,nl=`${xa}.3`,Z3=`${xa}.48`,ISe=`${IO}.1`,CSe=`${IO}.2`,t9=`${Z3}.1`,r9=`${Z3}.2`,n9=`${Z3}.3`,o9=`${Z3}.5`,Re="2.5.29";var i9,J3=`${Ea}.1`,hs=class{constructor(e={}){this.accessMethod="",this.accessLocation=new Se,Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],hs.prototype,"accessMethod",void 0);E([p({type:Se})],hs.prototype,"accessLocation",void 0);var ol=i9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,i9.prototype)}};ol=i9=E([k({type:A.Sequence,itemType:hs})],ol);var e4=`${Re}.35`,il=class extends xe{},wi=class{constructor(e={}){e&&Object.assign(this,e)}};E([p({type:il,context:0,optional:!0,implicit:!0})],wi.prototype,"keyIdentifier",void 0);E([p({type:Se,context:1,optional:!0,implicit:!0,repeated:"sequence"})],wi.prototype,"authorityCertIssuer",void 0);E([p({type:g.Integer,context:2,optional:!0,implicit:!0,converter:Fe})],wi.prototype,"authorityCertSerialNumber",void 0);var t4=`${Re}.19`,sl=class{constructor(e={}){this.cA=!1,Object.assign(this,e)}};E([p({type:g.Boolean,defaultValue:!1})],sl.prototype,"cA",void 0);E([p({type:g.Integer,optional:!0})],sl.prototype,"pathLenConstraint",void 0);var s9,Tt=s9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,s9.prototype)}};Tt=s9=E([k({type:A.Sequence,itemType:Se})],Tt);var a9,zq=`${Re}.29`,CO=a9=class extends Tt{constructor(e){super(e),Object.setPrototypeOf(this,a9.prototype)}};CO=a9=E([k({type:A.Sequence})],CO);var c9,n4=`${Re}.32`,s_e=`${n4}.0`,ps=class{constructor(e={}){Object.assign(this,e)}toString(){return this.ia5String||this.visibleString||this.bmpString||this.utf8String||""}};E([p({type:g.IA5String})],ps.prototype,"ia5String",void 0);E([p({type:g.VisibleString})],ps.prototype,"visibleString",void 0);E([p({type:g.BmpString})],ps.prototype,"bmpString",void 0);E([p({type:g.Utf8String})],ps.prototype,"utf8String",void 0);ps=E([k({type:A.Choice})],ps);var Up=class{constructor(e={}){this.organization=new ps,this.noticeNumbers=[],Object.assign(this,e)}};E([p({type:ps})],Up.prototype,"organization",void 0);E([p({type:g.Integer,repeated:"sequence"})],Up.prototype,"noticeNumbers",void 0);var Fp=class{constructor(e={}){Object.assign(this,e)}};E([p({type:Up,optional:!0})],Fp.prototype,"noticeRef",void 0);E([p({type:ps,optional:!0})],Fp.prototype,"explicitText",void 0);var r4=class{constructor(e={}){Object.assign(this,e)}};E([p({type:g.IA5String})],r4.prototype,"cPSuri",void 0);E([p({type:Fp})],r4.prototype,"userNotice",void 0);r4=E([k({type:A.Choice})],r4);var $p=class{constructor(e={}){this.policyQualifierId="",this.qualifier=new ArrayBuffer(0),Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],$p.prototype,"policyQualifierId",void 0);E([p({type:g.Any})],$p.prototype,"qualifier",void 0);var al=class{constructor(e={}){this.policyIdentifier="",Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],al.prototype,"policyIdentifier",void 0);E([p({type:$p,repeated:"sequence",optional:!0})],al.prototype,"policyQualifiers",void 0);var jp=c9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,c9.prototype)}};jp=c9=E([k({type:A.Sequence,itemType:al})],jp);var p_e=`${Re}.20`,Kp=class{constructor(e=0){this.value=e}};E([p({type:g.Integer})],Kp.prototype,"value",void 0);Kp=E([k({type:A.Choice})],Kp);var x_e=`${Re}.27`,PO=class extends Kp{};PO=E([k({type:A.Choice})],PO);var l9,o4=`${Re}.31`,jo;(function(r){r[r.unused=1]="unused",r[r.keyCompromise=2]="keyCompromise",r[r.cACompromise=4]="cACompromise",r[r.affiliationChanged=8]="affiliationChanged",r[r.superseded=16]="superseded",r[r.cessationOfOperation=32]="cessationOfOperation",r[r.certificateHold=64]="certificateHold",r[r.privilegeWithdrawn=128]="privilegeWithdrawn",r[r.aACompromise=256]="aACompromise"})(jo||(jo={}));var Vp=class extends yi{toJSON(){let e=[],t=this.toNumber();return t&jo.aACompromise&&e.push("aACompromise"),t&jo.affiliationChanged&&e.push("affiliationChanged"),t&jo.cACompromise&&e.push("cACompromise"),t&jo.certificateHold&&e.push("certificateHold"),t&jo.cessationOfOperation&&e.push("cessationOfOperation"),t&jo.keyCompromise&&e.push("keyCompromise"),t&jo.privilegeWithdrawn&&e.push("privilegeWithdrawn"),t&jo.superseded&&e.push("superseded"),t&jo.unused&&e.push("unused"),e}toString(){return`[${this.toJSON().join(", ")}]`}},ms=class{constructor(e={}){Object.assign(this,e)}};E([p({type:Se,context:0,repeated:"sequence",implicit:!0})],ms.prototype,"fullName",void 0);E([p({type:ba,context:1,implicit:!0})],ms.prototype,"nameRelativeToCRLIssuer",void 0);ms=E([k({type:A.Choice})],ms);var bi=class{constructor(e={}){Object.assign(this,e)}};E([p({type:ms,context:0,optional:!0})],bi.prototype,"distributionPoint",void 0);E([p({type:Vp,context:1,optional:!0,implicit:!0})],bi.prototype,"reasons",void 0);E([p({type:Se,context:2,optional:!0,repeated:"sequence",implicit:!0})],bi.prototype,"cRLIssuer",void 0);var Sa=l9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,l9.prototype)}};Sa=l9=E([k({type:A.Sequence,itemType:bi})],Sa);var u9,B_e=`${Re}.46`,kO=u9=class extends Sa{constructor(e){super(e),Object.setPrototypeOf(this,u9.prototype)}};kO=u9=E([k({type:A.Sequence,itemType:bi})],kO);var H_e=`${Re}.28`,Kn=class r{constructor(e={}){this.onlyContainsUserCerts=r.ONLY,this.onlyContainsCACerts=r.ONLY,this.indirectCRL=r.ONLY,this.onlyContainsAttributeCerts=r.ONLY,Object.assign(this,e)}};Kn.ONLY=!1;E([p({type:ms,context:0,optional:!0})],Kn.prototype,"distributionPoint",void 0);E([p({type:g.Boolean,context:1,defaultValue:Kn.ONLY,implicit:!0})],Kn.prototype,"onlyContainsUserCerts",void 0);E([p({type:g.Boolean,context:2,defaultValue:Kn.ONLY,implicit:!0})],Kn.prototype,"onlyContainsCACerts",void 0);E([p({type:Vp,context:3,optional:!0,implicit:!0})],Kn.prototype,"onlySomeReasons",void 0);E([p({type:g.Boolean,context:4,defaultValue:Kn.ONLY,implicit:!0})],Kn.prototype,"indirectCRL",void 0);E([p({type:g.Boolean,context:5,defaultValue:Kn.ONLY,implicit:!0})],Kn.prototype,"onlyContainsAttributeCerts",void 0);var OO=`${Re}.21`,Hp;(function(r){r[r.unspecified=0]="unspecified",r[r.keyCompromise=1]="keyCompromise",r[r.cACompromise=2]="cACompromise",r[r.affiliationChanged=3]="affiliationChanged",r[r.superseded=4]="superseded",r[r.cessationOfOperation=5]="cessationOfOperation",r[r.certificateHold=6]="certificateHold",r[r.removeFromCRL=8]="removeFromCRL",r[r.privilegeWithdrawn=9]="privilegeWithdrawn",r[r.aACompromise=10]="aACompromise"})(Hp||(Hp={}));var qp=class{constructor(e=Hp.unspecified){this.reason=Hp.unspecified,this.reason=e}toJSON(){return Hp[this.reason]}toString(){return this.toJSON()}};E([p({type:g.Enumerated})],qp.prototype,"reason",void 0);qp=E([k({type:A.Choice})],qp);var f9,i4=`${Re}.37`,Wp=f9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,f9.prototype)}};Wp=f9=E([k({type:A.Sequence,itemType:g.ObjectIdentifier})],Wp);var tAe=`${i4}.0`,RO=`${nl}.1`,DO=`${nl}.2`,NO=`${nl}.3`,LO=`${nl}.4`,BO=`${nl}.8`,MO=`${nl}.9`;var sAe=`${Re}.54`,d9=class{constructor(e=new ArrayBuffer(0)){this.value=e}};E([p({type:g.Integer,converter:Fe})],d9.prototype,"value",void 0);d9=E([k({type:A.Choice})],d9);var UO=`${Re}.24`,zp=class{constructor(e){this.value=new Date,e&&(this.value=e)}};E([p({type:g.GeneralizedTime})],zp.prototype,"value",void 0);zp=E([k({type:A.Choice})],zp);var h9,p9=`${Re}.18`,FO=h9=class extends Tt{constructor(e){super(e),Object.setPrototypeOf(this,h9.prototype)}};FO=h9=E([k({type:A.Sequence})],FO);var s4=`${Re}.15`,Ko;(function(r){r[r.digitalSignature=1]="digitalSignature",r[r.nonRepudiation=2]="nonRepudiation",r[r.keyEncipherment=4]="keyEncipherment",r[r.dataEncipherment=8]="dataEncipherment",r[r.keyAgreement=16]="keyAgreement",r[r.keyCertSign=32]="keyCertSign",r[r.cRLSign=64]="cRLSign",r[r.encipherOnly=128]="encipherOnly",r[r.decipherOnly=256]="decipherOnly"})(Ko||(Ko={}));var xf=class extends yi{toJSON(){let e=this.toNumber(),t=[];return e&Ko.cRLSign&&t.push("crlSign"),e&Ko.dataEncipherment&&t.push("dataEncipherment"),e&Ko.decipherOnly&&t.push("decipherOnly"),e&Ko.digitalSignature&&t.push("digitalSignature"),e&Ko.encipherOnly&&t.push("encipherOnly"),e&Ko.keyAgreement&&t.push("keyAgreement"),e&Ko.keyCertSign&&t.push("keyCertSign"),e&Ko.keyEncipherment&&t.push("keyEncipherment"),e&Ko.nonRepudiation&&t.push("nonRepudiation"),t}toString(){return`[${this.toJSON().join(", ")}]`}};var m9,IAe=`${Re}.30`,Ef=class{constructor(e={}){this.base=new Se,this.minimum=0,Object.assign(this,e)}};E([p({type:Se})],Ef.prototype,"base",void 0);E([p({type:g.Integer,context:0,defaultValue:0,implicit:!0})],Ef.prototype,"minimum",void 0);E([p({type:g.Integer,context:1,optional:!0,implicit:!0})],Ef.prototype,"maximum",void 0);var a4=m9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,m9.prototype)}};a4=m9=E([k({type:A.Sequence,itemType:Ef})],a4);var c4=class{constructor(e={}){Object.assign(this,e)}};E([p({type:a4,context:0,optional:!0,implicit:!0})],c4.prototype,"permittedSubtrees",void 0);E([p({type:a4,context:1,optional:!0,implicit:!0})],c4.prototype,"excludedSubtrees",void 0);var DAe=`${Re}.36`,l4=class{constructor(e={}){Object.assign(this,e)}};E([p({type:g.Integer,context:0,implicit:!0,optional:!0,converter:Fe})],l4.prototype,"requireExplicitPolicy",void 0);E([p({type:g.Integer,context:1,implicit:!0,optional:!0,converter:Fe})],l4.prototype,"inhibitPolicyMapping",void 0);var g9,UAe=`${Re}.33`,Gp=class{constructor(e={}){this.issuerDomainPolicy="",this.subjectDomainPolicy="",Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],Gp.prototype,"issuerDomainPolicy",void 0);E([p({type:g.ObjectIdentifier})],Gp.prototype,"subjectDomainPolicy",void 0);var $O=g9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,g9.prototype)}};$O=g9=E([k({type:A.Sequence,itemType:Gp})],$O);var y9,w9=`${Re}.17`,u4=y9=class extends Tt{constructor(e){super(e),Object.setPrototypeOf(this,y9.prototype)}};u4=y9=E([k({type:A.Sequence})],u4);var Tr=class{constructor(e={}){this.type="",this.values=[],Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],Tr.prototype,"type",void 0);E([p({type:g.Any,repeated:"set"})],Tr.prototype,"values",void 0);var b9,eTe=`${Re}.9`,jO=b9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,b9.prototype)}};jO=b9=E([k({type:A.Sequence,itemType:Tr})],jO);var v9=`${Re}.14`,yn=class extends il{};var lTe=`${Re}.16`,f4=class{constructor(e={}){Object.assign(this,e)}};E([p({type:g.GeneralizedTime,context:0,implicit:!0,optional:!0})],f4.prototype,"notBefore",void 0);E([p({type:g.GeneralizedTime,context:1,implicit:!0,optional:!0})],f4.prototype,"notAfter",void 0);var Xp;(function(r){r[r.keyUpdateAllowed=1]="keyUpdateAllowed",r[r.newExtensions=2]="newExtensions",r[r.pKIXCertificate=4]="pKIXCertificate"})(Xp||(Xp={}));var d4=class extends yi{toJSON(){let e=[],t=this.toNumber();return t&Xp.pKIXCertificate&&e.push("pKIXCertificate"),t&Xp.newExtensions&&e.push("newExtensions"),t&Xp.keyUpdateAllowed&&e.push("keyUpdateAllowed"),e}toString(){return`[${this.toJSON().join(", ")}]`}},h4=class{constructor(e={}){this.entrustVers="",this.entrustInfoFlags=new d4,Object.assign(this,e)}};E([p({type:g.GeneralString})],h4.prototype,"entrustVers",void 0);E([p({type:d4})],h4.prototype,"entrustInfoFlags",void 0);var x9,wTe=`${Ea}.11`,KO=x9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,x9.prototype)}};KO=x9=E([k({type:A.Sequence,itemType:hs})],KO);var VO=nr(os()),X=class r{constructor(e={}){this.algorithm="",Object.assign(this,e)}isEqual(e){return e instanceof r&&e.algorithm==this.algorithm&&(e.parameters&&this.parameters&&VO.isEqual(e.parameters,this.parameters)||e.parameters===this.parameters)}};E([p({type:g.ObjectIdentifier})],X.prototype,"algorithm",void 0);E([p({type:g.Any,optional:!0})],X.prototype,"parameters",void 0);var Ir=class{constructor(e={}){this.algorithm=new X,this.subjectPublicKey=new ArrayBuffer(0),Object.assign(this,e)}};E([p({type:X})],Ir.prototype,"algorithm",void 0);E([p({type:g.BitString})],Ir.prototype,"subjectPublicKey",void 0);var Ft=class{constructor(e){if(e)if(typeof e=="string"||typeof e=="number"||e instanceof Date){let t=new Date(e);t.getUTCFullYear()>2049?this.generalTime=t:this.utcTime=t}else Object.assign(this,e)}getTime(){let e=this.utcTime||this.generalTime;if(!e)throw new Error("Cannot get time from CHOICE object");return e}};E([p({type:g.UTCTime})],Ft.prototype,"utcTime",void 0);E([p({type:g.GeneralizedTime})],Ft.prototype,"generalTime",void 0);Ft=E([k({type:A.Choice})],Ft);var gs=class{constructor(e){this.notBefore=new Ft(new Date),this.notAfter=new Ft(new Date),e&&(this.notBefore=new Ft(e.notBefore),this.notAfter=new Ft(e.notAfter))}};E([p({type:Ft})],gs.prototype,"notBefore",void 0);E([p({type:Ft})],gs.prototype,"notAfter",void 0);var E9,Cr=class r{constructor(e={}){this.extnID="",this.critical=r.CRITICAL,this.extnValue=new xe,Object.assign(this,e)}};Cr.CRITICAL=!1;E([p({type:g.ObjectIdentifier})],Cr.prototype,"extnID",void 0);E([p({type:g.Boolean,defaultValue:Cr.CRITICAL})],Cr.prototype,"critical",void 0);E([p({type:xe})],Cr.prototype,"extnValue",void 0);var Vn=E9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,E9.prototype)}};Vn=E9=E([k({type:A.Sequence,itemType:Cr})],Vn);var vi;(function(r){r[r.v1=0]="v1",r[r.v2=1]="v2",r[r.v3=2]="v3"})(vi||(vi={}));var Pr=class{constructor(e={}){this.version=vi.v1,this.serialNumber=new ArrayBuffer(0),this.signature=new X,this.issuer=new pt,this.validity=new gs,this.subject=new pt,this.subjectPublicKeyInfo=new Ir,Object.assign(this,e)}};E([p({type:g.Integer,context:0,defaultValue:vi.v1})],Pr.prototype,"version",void 0);E([p({type:g.Integer,converter:Fe})],Pr.prototype,"serialNumber",void 0);E([p({type:X})],Pr.prototype,"signature",void 0);E([p({type:pt})],Pr.prototype,"issuer",void 0);E([p({type:gs})],Pr.prototype,"validity",void 0);E([p({type:pt})],Pr.prototype,"subject",void 0);E([p({type:Ir})],Pr.prototype,"subjectPublicKeyInfo",void 0);E([p({type:g.BitString,context:1,implicit:!0,optional:!0})],Pr.prototype,"issuerUniqueID",void 0);E([p({type:g.BitString,context:2,implicit:!0,optional:!0})],Pr.prototype,"subjectUniqueID",void 0);E([p({type:Vn,context:3,optional:!0})],Pr.prototype,"extensions",void 0);var uo=class{constructor(e={}){this.tbsCertificate=new Pr,this.signatureAlgorithm=new X,this.signatureValue=new ArrayBuffer(0),Object.assign(this,e)}};E([p({type:Pr,raw:!0})],uo.prototype,"tbsCertificate",void 0);E([p({type:X})],uo.prototype,"signatureAlgorithm",void 0);E([p({type:g.BitString})],uo.prototype,"signatureValue",void 0);var cl=class{constructor(e={}){this.userCertificate=new ArrayBuffer(0),this.revocationDate=new Ft,Object.assign(this,e)}};E([p({type:g.Integer,converter:Fe})],cl.prototype,"userCertificate",void 0);E([p({type:Ft})],cl.prototype,"revocationDate",void 0);E([p({type:Cr,optional:!0,repeated:"sequence"})],cl.prototype,"crlEntryExtensions",void 0);var Hn=class{constructor(e={}){this.signature=new X,this.issuer=new pt,this.thisUpdate=new Ft,Object.assign(this,e)}};E([p({type:g.Integer,optional:!0})],Hn.prototype,"version",void 0);E([p({type:X})],Hn.prototype,"signature",void 0);E([p({type:pt})],Hn.prototype,"issuer",void 0);E([p({type:Ft})],Hn.prototype,"thisUpdate",void 0);E([p({type:Ft,optional:!0})],Hn.prototype,"nextUpdate",void 0);E([p({type:cl,repeated:"sequence",optional:!0})],Hn.prototype,"revokedCertificates",void 0);E([p({type:Cr,optional:!0,context:0,repeated:"sequence"})],Hn.prototype,"crlExtensions",void 0);var ll=class{constructor(e={}){this.tbsCertList=new Hn,this.signatureAlgorithm=new X,this.signature=new ArrayBuffer(0),Object.assign(this,e)}};E([p({type:Hn,raw:!0})],ll.prototype,"tbsCertList",void 0);E([p({type:X})],ll.prototype,"signatureAlgorithm",void 0);E([p({type:g.BitString})],ll.prototype,"signature",void 0);var Y=nr(os());function Yp(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}function Ne(r,e,t,n){if(t==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?r!==e||!n:!e.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?n:t==="a"?n.call(r):n?n.value:e.get(r)}function It(r,e,t,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?r!==e||!o:!e.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(r,t):o?o.value=t:e.set(r,t),t}function L(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var Vo=class{constructor(e={}){this.issuer=new pt,this.serialNumber=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:pt})],Vo.prototype,"issuer",void 0);L([p({type:g.Integer,converter:Fe})],Vo.prototype,"serialNumber",void 0);var ul=class{constructor(e={}){Object.assign(this,e)}};L([p({type:yn,context:0,implicit:!0})],ul.prototype,"subjectKeyIdentifier",void 0);L([p({type:Vo})],ul.prototype,"issuerAndSerialNumber",void 0);ul=L([k({type:A.Choice})],ul);var kr;(function(r){r[r.v0=0]="v0",r[r.v1=1]="v1",r[r.v2=2]="v2",r[r.v3=3]="v3",r[r.v4=4]="v4",r[r.v5=5]="v5"})(kr||(kr={}));var fl=class extends X{};fl=L([k({type:A.Sequence})],fl);var Qp=class extends X{};Qp=L([k({type:A.Sequence})],Qp);var wn=class extends X{};wn=L([k({type:A.Sequence})],wn);var Zp=class extends X{};Zp=L([k({type:A.Sequence})],Zp);var qO=class extends X{};qO=L([k({type:A.Sequence})],qO);var p4=class extends X{};p4=L([k({type:A.Sequence})],p4);var Ho=class{constructor(e={}){this.attrType="",this.attrValues=[],Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],Ho.prototype,"attrType",void 0);L([p({type:g.Any,repeated:"set"})],Ho.prototype,"attrValues",void 0);var S9,bn=class{constructor(e={}){this.version=kr.v0,this.sid=new ul,this.digestAlgorithm=new fl,this.signatureAlgorithm=new Qp,this.signature=new xe,Object.assign(this,e)}};L([p({type:g.Integer})],bn.prototype,"version",void 0);L([p({type:ul})],bn.prototype,"sid",void 0);L([p({type:fl})],bn.prototype,"digestAlgorithm",void 0);L([p({type:Ho,repeated:"set",context:0,implicit:!0,optional:!0,raw:!0})],bn.prototype,"signedAttrs",void 0);L([p({type:Qp})],bn.prototype,"signatureAlgorithm",void 0);L([p({type:xe})],bn.prototype,"signature",void 0);L([p({type:Ho,repeated:"set",context:1,implicit:!0,optional:!0})],bn.prototype,"unsignedAttrs",void 0);var Jp=S9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,S9.prototype)}};Jp=S9=L([k({type:A.Set,itemType:bn})],Jp);var WO=class extends bn{};WO=L([k({type:A.Sequence})],WO);var zO=class extends Ft{};zO=L([k({type:A.Choice})],zO);function re(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var e1=class{constructor(e={}){this.acIssuer=new Se,this.acSerial=0,this.attrs=[],Object.assign(this,e)}};re([p({type:Se})],e1.prototype,"acIssuer",void 0);re([p({type:g.Integer})],e1.prototype,"acSerial",void 0);re([p({type:Tr,repeated:"sequence"})],e1.prototype,"attrs",void 0);var _9,t1=_9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,_9.prototype)}};t1=_9=re([k({type:A.Sequence,itemType:g.ObjectIdentifier})],t1);var Sf=class{constructor(e={}){this.permitUnSpecified=!0,Object.assign(this,e)}};re([p({type:g.Integer,optional:!0})],Sf.prototype,"pathLenConstraint",void 0);re([p({type:t1,implicit:!0,context:0,optional:!0})],Sf.prototype,"permittedAttrs",void 0);re([p({type:t1,implicit:!0,context:1,optional:!0})],Sf.prototype,"excludedAttrs",void 0);re([p({type:g.Boolean,defaultValue:!0})],Sf.prototype,"permitUnSpecified",void 0);var fo=class{constructor(e={}){this.issuer=new Tt,this.serial=new ArrayBuffer(0),this.issuerUID=new ArrayBuffer(0),Object.assign(this,e)}};re([p({type:Tt})],fo.prototype,"issuer",void 0);re([p({type:g.Integer,converter:Fe})],fo.prototype,"serial",void 0);re([p({type:g.BitString,optional:!0})],fo.prototype,"issuerUID",void 0);var A9;(function(r){r[r.publicKey=0]="publicKey",r[r.publicKeyCert=1]="publicKeyCert",r[r.otherObjectTypes=2]="otherObjectTypes"})(A9||(A9={}));var ho=class{constructor(e={}){this.digestedObjectType=A9.publicKey,this.digestAlgorithm=new X,this.objectDigest=new ArrayBuffer(0),Object.assign(this,e)}};re([p({type:g.Enumerated})],ho.prototype,"digestedObjectType",void 0);re([p({type:g.ObjectIdentifier,optional:!0})],ho.prototype,"otherObjectTypeID",void 0);re([p({type:X})],ho.prototype,"digestAlgorithm",void 0);re([p({type:g.BitString})],ho.prototype,"objectDigest",void 0);var dl=class{constructor(e={}){Object.assign(this,e)}};re([p({type:Tt,optional:!0})],dl.prototype,"issuerName",void 0);re([p({type:fo,context:0,implicit:!0,optional:!0})],dl.prototype,"baseCertificateID",void 0);re([p({type:ho,context:1,implicit:!0,optional:!0})],dl.prototype,"objectDigestInfo",void 0);var hl=class{constructor(e={}){Object.assign(this,e)}};re([p({type:Se,repeated:"sequence"})],hl.prototype,"v1Form",void 0);re([p({type:dl,context:0,implicit:!0})],hl.prototype,"v2Form",void 0);hl=re([k({type:A.Choice})],hl);var pl=class{constructor(e={}){this.notBeforeTime=new Date,this.notAfterTime=new Date,Object.assign(this,e)}};re([p({type:g.GeneralizedTime})],pl.prototype,"notBeforeTime",void 0);re([p({type:g.GeneralizedTime})],pl.prototype,"notAfterTime",void 0);var _a=class{constructor(e={}){Object.assign(this,e)}};re([p({type:fo,implicit:!0,context:0,optional:!0})],_a.prototype,"baseCertificateID",void 0);re([p({type:Tt,implicit:!0,context:1,optional:!0})],_a.prototype,"entityName",void 0);re([p({type:ho,implicit:!0,context:2,optional:!0})],_a.prototype,"objectDigestInfo",void 0);var T9;(function(r){r[r.v2=1]="v2"})(T9||(T9={}));var vn=class{constructor(e={}){this.version=T9.v2,this.holder=new _a,this.issuer=new hl,this.signature=new X,this.serialNumber=new ArrayBuffer(0),this.attrCertValidityPeriod=new pl,this.attributes=[],Object.assign(this,e)}};re([p({type:g.Integer})],vn.prototype,"version",void 0);re([p({type:_a})],vn.prototype,"holder",void 0);re([p({type:hl})],vn.prototype,"issuer",void 0);re([p({type:X})],vn.prototype,"signature",void 0);re([p({type:g.Integer,converter:Fe})],vn.prototype,"serialNumber",void 0);re([p({type:pl})],vn.prototype,"attrCertValidityPeriod",void 0);re([p({type:Tr,repeated:"sequence"})],vn.prototype,"attributes",void 0);re([p({type:g.BitString,optional:!0})],vn.prototype,"issuerUniqueID",void 0);re([p({type:Vn,optional:!0})],vn.prototype,"extensions",void 0);var ml=class{constructor(e={}){this.acinfo=new vn,this.signatureAlgorithm=new X,this.signatureValue=new ArrayBuffer(0),Object.assign(this,e)}};re([p({type:vn})],ml.prototype,"acinfo",void 0);re([p({type:X})],ml.prototype,"signatureAlgorithm",void 0);re([p({type:g.BitString})],ml.prototype,"signatureValue",void 0);var r1;(function(r){r[r.unmarked=1]="unmarked",r[r.unclassified=2]="unclassified",r[r.restricted=4]="restricted",r[r.confidential=8]="confidential",r[r.secret=16]="secret",r[r.topSecret=32]="topSecret"})(r1||(r1={}));var _f=class extends yi{};var Af=class{constructor(e={}){this.type="",this.value=new ArrayBuffer(0),Object.assign(this,e)}};re([p({type:g.ObjectIdentifier,implicit:!0,context:0})],Af.prototype,"type",void 0);re([p({type:g.Any,implicit:!0,context:1})],Af.prototype,"value",void 0);var n1=class{constructor(e={}){this.policyId="",this.classList=new _f(r1.unclassified),Object.assign(this,e)}};re([p({type:g.ObjectIdentifier})],n1.prototype,"policyId",void 0);re([p({type:_f,defaultValue:new _f(r1.unclassified)})],n1.prototype,"classList",void 0);re([p({type:Af,repeated:"set"})],n1.prototype,"securityCategories",void 0);var Tf=class{constructor(e={}){Object.assign(this,e)}};re([p({type:xe})],Tf.prototype,"cotets",void 0);re([p({type:g.ObjectIdentifier})],Tf.prototype,"oid",void 0);re([p({type:g.Utf8String})],Tf.prototype,"string",void 0);var m4=class{constructor(e={}){this.values=[],Object.assign(this,e)}};re([p({type:Tt,implicit:!0,context:0,optional:!0})],m4.prototype,"policyAuthority",void 0);re([p({type:Tf,repeated:"sequence"})],m4.prototype,"values",void 0);var uke=`${Ea}.4`,fke=`${Ea}.6`,dke=`${Ea}.10`,hke=`${Re}.55`,o1=`${xa}.10`,pke=`${o1}.1`,mke=`${o1}.2`,gke=`${o1}.3`,yke=`${o1}.4`,wke=`${o1}.6`,I9="2.5.4",bke=`${I9}.72`;var C9,If=class{constructor(e={}){this.targetCertificate=new fo,Object.assign(this,e)}};re([p({type:fo})],If.prototype,"targetCertificate",void 0);re([p({type:Se,optional:!0})],If.prototype,"targetName",void 0);re([p({type:ho,optional:!0})],If.prototype,"certDigestInfo",void 0);var Cf=class{constructor(e={}){Object.assign(this,e)}};re([p({type:Se,context:0,implicit:!0})],Cf.prototype,"targetName",void 0);re([p({type:Se,context:1,implicit:!0})],Cf.prototype,"targetGroup",void 0);re([p({type:If,context:2,implicit:!0})],Cf.prototype,"targetCert",void 0);Cf=re([k({type:A.Choice})],Cf);var g4=C9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,C9.prototype)}};g4=C9=re([k({type:A.Sequence,itemType:Cf})],g4);var P9,GO=P9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,P9.prototype)}};GO=P9=re([k({type:A.Sequence,itemType:g4})],GO);var y4=class{constructor(e={}){Object.assign(this,e)}};re([p({type:Tt,implicit:!0,context:0,optional:!0})],y4.prototype,"roleAuthority",void 0);re([p({type:Se,implicit:!0,context:1})],y4.prototype,"roleName",void 0);var i1=class{constructor(e={}){this.service=new Se,this.ident=new Se,Object.assign(this,e)}};re([p({type:Se})],i1.prototype,"service",void 0);re([p({type:Se})],i1.prototype,"ident",void 0);re([p({type:xe,optional:!0})],i1.prototype,"authInfo",void 0);var k9,s1=class{constructor(e={}){this.otherCertFormat="",this.otherCert=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],s1.prototype,"otherCertFormat",void 0);L([p({type:g.Any})],s1.prototype,"otherCert",void 0);var gl=class{constructor(e={}){Object.assign(this,e)}};L([p({type:uo})],gl.prototype,"certificate",void 0);L([p({type:ml,context:2,implicit:!0})],gl.prototype,"v2AttrCert",void 0);L([p({type:s1,context:3,implicit:!0})],gl.prototype,"other",void 0);gl=L([k({type:A.Choice})],gl);var yl=k9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,k9.prototype)}};yl=k9=L([k({type:A.Set,itemType:gl})],yl);var po=class{constructor(e={}){this.contentType="",this.content=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],po.prototype,"contentType",void 0);L([p({type:g.Any,context:0})],po.prototype,"content",void 0);var Pf=class{constructor(e={}){Object.assign(this,e)}};L([p({type:xe})],Pf.prototype,"single",void 0);L([p({type:g.Any})],Pf.prototype,"any",void 0);Pf=L([k({type:A.Choice})],Pf);var wl=class{constructor(e={}){this.eContentType="",Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],wl.prototype,"eContentType",void 0);L([p({type:Pf,context:0,optional:!0})],wl.prototype,"eContent",void 0);var a1=class{constructor(e={}){Object.assign(this,e)}};L([p({type:xe,context:0,implicit:!0,optional:!0})],a1.prototype,"value",void 0);L([p({type:xe,converter:SO,context:0,implicit:!0,optional:!0,repeated:"sequence"})],a1.prototype,"constructedValue",void 0);a1=L([k({type:A.Choice})],a1);var Aa=class{constructor(e={}){this.contentType="",this.contentEncryptionAlgorithm=new Zp,Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],Aa.prototype,"contentType",void 0);L([p({type:Zp})],Aa.prototype,"contentEncryptionAlgorithm",void 0);L([p({type:a1,optional:!0})],Aa.prototype,"encryptedContent",void 0);var Ta=class{constructor(e={}){this.keyAttrId="",Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],Ta.prototype,"keyAttrId",void 0);L([p({type:g.Any,optional:!0})],Ta.prototype,"keyAttr",void 0);var O9,kf=class{constructor(e={}){this.subjectKeyIdentifier=new yn,Object.assign(this,e)}};L([p({type:yn})],kf.prototype,"subjectKeyIdentifier",void 0);L([p({type:g.GeneralizedTime,optional:!0})],kf.prototype,"date",void 0);L([p({type:Ta,optional:!0})],kf.prototype,"other",void 0);var Of=class{constructor(e={}){Object.assign(this,e)}};L([p({type:kf,context:0,implicit:!0,optional:!0})],Of.prototype,"rKeyId",void 0);L([p({type:Vo,optional:!0})],Of.prototype,"issuerAndSerialNumber",void 0);Of=L([k({type:A.Choice})],Of);var c1=class{constructor(e={}){this.rid=new Of,this.encryptedKey=new xe,Object.assign(this,e)}};L([p({type:Of})],c1.prototype,"rid",void 0);L([p({type:xe})],c1.prototype,"encryptedKey",void 0);var w4=O9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,O9.prototype)}};w4=O9=L([k({type:A.Sequence,itemType:c1})],w4);var l1=class{constructor(e={}){this.algorithm=new X,this.publicKey=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:X})],l1.prototype,"algorithm",void 0);L([p({type:g.BitString})],l1.prototype,"publicKey",void 0);var bl=class{constructor(e={}){Object.assign(this,e)}};L([p({type:yn,context:0,implicit:!0,optional:!0})],bl.prototype,"subjectKeyIdentifier",void 0);L([p({type:l1,context:1,implicit:!0,optional:!0})],bl.prototype,"originatorKey",void 0);L([p({type:Vo,optional:!0})],bl.prototype,"issuerAndSerialNumber",void 0);bl=L([k({type:A.Choice})],bl);var ys=class{constructor(e={}){this.version=kr.v3,this.originator=new bl,this.keyEncryptionAlgorithm=new wn,this.recipientEncryptedKeys=new w4,Object.assign(this,e)}};L([p({type:g.Integer})],ys.prototype,"version",void 0);L([p({type:bl,context:0})],ys.prototype,"originator",void 0);L([p({type:xe,context:1,optional:!0})],ys.prototype,"ukm",void 0);L([p({type:wn})],ys.prototype,"keyEncryptionAlgorithm",void 0);L([p({type:w4})],ys.prototype,"recipientEncryptedKeys",void 0);var Rf=class{constructor(e={}){Object.assign(this,e)}};L([p({type:yn,context:0,implicit:!0})],Rf.prototype,"subjectKeyIdentifier",void 0);L([p({type:Vo})],Rf.prototype,"issuerAndSerialNumber",void 0);Rf=L([k({type:A.Choice})],Rf);var Ia=class{constructor(e={}){this.version=kr.v0,this.rid=new Rf,this.keyEncryptionAlgorithm=new wn,this.encryptedKey=new xe,Object.assign(this,e)}};L([p({type:g.Integer})],Ia.prototype,"version",void 0);L([p({type:Rf})],Ia.prototype,"rid",void 0);L([p({type:wn})],Ia.prototype,"keyEncryptionAlgorithm",void 0);L([p({type:xe})],Ia.prototype,"encryptedKey",void 0);var vl=class{constructor(e={}){this.keyIdentifier=new xe,Object.assign(this,e)}};L([p({type:xe})],vl.prototype,"keyIdentifier",void 0);L([p({type:g.GeneralizedTime,optional:!0})],vl.prototype,"date",void 0);L([p({type:Ta,optional:!0})],vl.prototype,"other",void 0);var Ca=class{constructor(e={}){this.version=kr.v4,this.kekid=new vl,this.keyEncryptionAlgorithm=new wn,this.encryptedKey=new xe,Object.assign(this,e)}};L([p({type:g.Integer})],Ca.prototype,"version",void 0);L([p({type:vl})],Ca.prototype,"kekid",void 0);L([p({type:wn})],Ca.prototype,"keyEncryptionAlgorithm",void 0);L([p({type:xe})],Ca.prototype,"encryptedKey",void 0);var Pa=class{constructor(e={}){this.version=kr.v0,this.keyEncryptionAlgorithm=new wn,this.encryptedKey=new xe,Object.assign(this,e)}};L([p({type:g.Integer})],Pa.prototype,"version",void 0);L([p({type:p4,context:0,optional:!0})],Pa.prototype,"keyDerivationAlgorithm",void 0);L([p({type:wn})],Pa.prototype,"keyEncryptionAlgorithm",void 0);L([p({type:xe})],Pa.prototype,"encryptedKey",void 0);var u1=class{constructor(e={}){this.oriType="",this.oriValue=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],u1.prototype,"oriType",void 0);L([p({type:g.Any})],u1.prototype,"oriValue",void 0);var ws=class{constructor(e={}){Object.assign(this,e)}};L([p({type:Ia,optional:!0})],ws.prototype,"ktri",void 0);L([p({type:ys,context:1,implicit:!0,optional:!0})],ws.prototype,"kari",void 0);L([p({type:Ca,context:2,implicit:!0,optional:!0})],ws.prototype,"kekri",void 0);L([p({type:Pa,context:3,implicit:!0,optional:!0})],ws.prototype,"pwri",void 0);L([p({type:u1,context:4,implicit:!0,optional:!0})],ws.prototype,"ori",void 0);ws=L([k({type:A.Choice})],ws);var R9,f1=R9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,R9.prototype)}};f1=R9=L([k({type:A.Set,itemType:ws})],f1);var D9,XO=`${xa}.16`,wRe=`${XO}.2`,bRe=`${XO}.4`,Df=class{constructor(e={}){this.otherRevInfoFormat="",this.otherRevInfo=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],Df.prototype,"otherRevInfoFormat",void 0);L([p({type:g.Any})],Df.prototype,"otherRevInfo",void 0);var b4=class{constructor(e={}){this.other=new Df,Object.assign(this,e)}};L([p({type:Df,context:1,implicit:!0})],b4.prototype,"other",void 0);b4=L([k({type:A.Choice})],b4);var Nf=D9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,D9.prototype)}};Nf=D9=L([k({type:A.Set,itemType:b4})],Nf);var Lf=class{constructor(e={}){Object.assign(this,e)}};L([p({type:yl,context:0,implicit:!0,optional:!0})],Lf.prototype,"certs",void 0);L([p({type:Nf,context:1,implicit:!0,optional:!0})],Lf.prototype,"crls",void 0);var N9,L9=N9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,N9.prototype)}};L9=N9=L([k({type:A.Set,itemType:Ho})],L9);var xl=class{constructor(e={}){this.version=kr.v0,this.recipientInfos=new f1,this.encryptedContentInfo=new Aa,Object.assign(this,e)}};L([p({type:g.Integer})],xl.prototype,"version",void 0);L([p({type:Lf,context:0,implicit:!0,optional:!0})],xl.prototype,"originatorInfo",void 0);L([p({type:f1})],xl.prototype,"recipientInfos",void 0);L([p({type:Aa})],xl.prototype,"encryptedContentInfo",void 0);L([p({type:L9,context:1,implicit:!0,optional:!0})],xl.prototype,"unprotectedAttrs",void 0);var YO="1.2.840.113549.1.7.2";var B9,v4=B9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,B9.prototype)}};v4=B9=L([k({type:A.Set,itemType:fl})],v4);var bs=class{constructor(e={}){this.version=kr.v0,this.digestAlgorithms=new v4,this.encapContentInfo=new wl,this.signerInfos=new Jp,Object.assign(this,e)}};L([p({type:g.Integer})],bs.prototype,"version",void 0);L([p({type:v4})],bs.prototype,"digestAlgorithms",void 0);L([p({type:wl})],bs.prototype,"encapContentInfo",void 0);L([p({type:yl,context:0,implicit:!0,optional:!0})],bs.prototype,"certificates",void 0);L([p({type:Nf,context:1,implicit:!0,optional:!0})],bs.prototype,"crls",void 0);L([p({type:Jp})],bs.prototype,"signerInfos",void 0);var El="1.2.840.10045.2.1";var d1="1.2.840.10045.4.1",x4="1.2.840.10045.4.3.1",h1="1.2.840.10045.4.3.2",p1="1.2.840.10045.4.3.3",m1="1.2.840.10045.4.3.4";var M9="1.2.840.10045.3.1.7";var U9="1.3.132.0.34";var F9="1.3.132.0.35";function g1(r){return new X({algorithm:r})}var ZO=g1(d1),mDe=g1(x4),JO=g1(h1),eR=g1(p1),tR=g1(m1);function mt(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var y1=class{constructor(e={}){Object.assign(this,e)}};mt([p({type:g.ObjectIdentifier})],y1.prototype,"fieldType",void 0);mt([p({type:g.Any})],y1.prototype,"parameters",void 0);y1=mt([k({type:A.Sequence})],y1);var $9=class extends xe{};var Bf=class{constructor(e={}){Object.assign(this,e)}};mt([p({type:g.OctetString})],Bf.prototype,"a",void 0);mt([p({type:g.OctetString})],Bf.prototype,"b",void 0);mt([p({type:g.BitString,optional:!0})],Bf.prototype,"seed",void 0);Bf=mt([k({type:A.Sequence})],Bf);var j9;(function(r){r[r.ecpVer1=1]="ecpVer1"})(j9||(j9={}));var xi=class{constructor(e={}){this.version=j9.ecpVer1,Object.assign(this,e)}};mt([p({type:g.Integer})],xi.prototype,"version",void 0);mt([p({type:y1})],xi.prototype,"fieldID",void 0);mt([p({type:Bf})],xi.prototype,"curve",void 0);mt([p({type:$9})],xi.prototype,"base",void 0);mt([p({type:g.Integer,converter:Fe})],xi.prototype,"order",void 0);mt([p({type:g.Integer,optional:!0})],xi.prototype,"cofactor",void 0);xi=mt([k({type:A.Sequence})],xi);var Ei=class{constructor(e={}){Object.assign(this,e)}};mt([p({type:g.ObjectIdentifier})],Ei.prototype,"namedCurve",void 0);mt([p({type:g.Null})],Ei.prototype,"implicitCurve",void 0);mt([p({type:xi})],Ei.prototype,"specifiedCurve",void 0);Ei=mt([k({type:A.Choice})],Ei);var Mf=class{constructor(e={}){this.version=1,this.privateKey=new xe,Object.assign(this,e)}};mt([p({type:g.Integer})],Mf.prototype,"version",void 0);mt([p({type:xe})],Mf.prototype,"privateKey",void 0);mt([p({type:Ei,context:0,optional:!0})],Mf.prototype,"parameters",void 0);mt([p({type:g.BitString,context:1,optional:!0})],Mf.prototype,"publicKey",void 0);var Sl=class{constructor(e={}){this.r=new ArrayBuffer(0),this.s=new ArrayBuffer(0),Object.assign(this,e)}};mt([p({type:g.Integer,converter:Fe})],Sl.prototype,"r",void 0);mt([p({type:g.Integer,converter:Fe})],Sl.prototype,"s",void 0);function nt(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var xn="1.2.840.113549.1.1",Si=`${xn}.1`,rR=`${xn}.7`,nR=`${xn}.9`,ka=`${xn}.10`,oR=`${xn}.2`,iR=`${xn}.4`,Uf=`${xn}.5`,sR=`${xn}.14`;var E4=`${xn}.11`,Ff=`${xn}.12`,$f=`${xn}.13`,K9=`${xn}.15`,V9=`${xn}.16`,_l="1.3.14.3.2.26",S4="2.16.840.1.101.3.4.2.4",Al="2.16.840.1.101.3.4.2.1",Tl="2.16.840.1.101.3.4.2.2",Il="2.16.840.1.101.3.4.2.3",aR="2.16.840.1.101.3.4.2.5",cR="2.16.840.1.101.3.4.2.6",lR="1.2.840.113549.2.2",uR="1.2.840.113549.2.5",Oa=`${xn}.8`;function rr(r){return new X({algorithm:r,parameters:null})}var qDe=rr(lR),WDe=rr(uR),vs=rr(_l),zDe=rr(S4),GDe=rr(Al),XDe=rr(Tl),YDe=rr(Il),QDe=rr(aR),ZDe=rr(cR),_4=new X({algorithm:Oa,parameters:ee.serialize(vs)}),H9=new X({algorithm:nR,parameters:ee.serialize(bf.toASN(new Uint8Array([218,57,163,238,94,107,75,13,50,85,191,239,149,96,24,144,175,216,7,9]).buffer))}),JDe=rr(Si),eNe=rr(oR),tNe=rr(iR),rNe=rr(Uf),nNe=rr(K9),oNe=rr(V9),iNe=rr(Ff),sNe=rr($f),aNe=rr(K9),cNe=rr(V9);var jf=class{constructor(e={}){this.hashAlgorithm=new X(vs),this.maskGenAlgorithm=new X({algorithm:Oa,parameters:ee.serialize(vs)}),this.pSourceAlgorithm=new X(H9),Object.assign(this,e)}};nt([p({type:X,context:0,defaultValue:vs})],jf.prototype,"hashAlgorithm",void 0);nt([p({type:X,context:1,defaultValue:_4})],jf.prototype,"maskGenAlgorithm",void 0);nt([p({type:X,context:2,defaultValue:H9})],jf.prototype,"pSourceAlgorithm",void 0);var mNe=new X({algorithm:rR,parameters:ee.serialize(new jf)});var _i=class{constructor(e={}){this.hashAlgorithm=new X(vs),this.maskGenAlgorithm=new X({algorithm:Oa,parameters:ee.serialize(vs)}),this.saltLength=20,this.trailerField=1,Object.assign(this,e)}};nt([p({type:X,context:0,defaultValue:vs})],_i.prototype,"hashAlgorithm",void 0);nt([p({type:X,context:1,defaultValue:_4})],_i.prototype,"maskGenAlgorithm",void 0);nt([p({type:g.Integer,context:2,defaultValue:20})],_i.prototype,"saltLength",void 0);nt([p({type:g.Integer,context:3,defaultValue:1})],_i.prototype,"trailerField",void 0);var ENe=new X({algorithm:ka,parameters:ee.serialize(new _i)});var Cl=class{constructor(e={}){this.digestAlgorithm=new X,this.digest=new xe,Object.assign(this,e)}};nt([p({type:X})],Cl.prototype,"digestAlgorithm",void 0);nt([p({type:xe})],Cl.prototype,"digest",void 0);var q9,Kf=class{constructor(e={}){this.prime=new ArrayBuffer(0),this.exponent=new ArrayBuffer(0),this.coefficient=new ArrayBuffer(0),Object.assign(this,e)}};nt([p({type:g.Integer,converter:Fe})],Kf.prototype,"prime",void 0);nt([p({type:g.Integer,converter:Fe})],Kf.prototype,"exponent",void 0);nt([p({type:g.Integer,converter:Fe})],Kf.prototype,"coefficient",void 0);var A4=q9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,q9.prototype)}};A4=q9=nt([k({type:A.Sequence,itemType:Kf})],A4);var mo=class{constructor(e={}){this.version=0,this.modulus=new ArrayBuffer(0),this.publicExponent=new ArrayBuffer(0),this.privateExponent=new ArrayBuffer(0),this.prime1=new ArrayBuffer(0),this.prime2=new ArrayBuffer(0),this.exponent1=new ArrayBuffer(0),this.exponent2=new ArrayBuffer(0),this.coefficient=new ArrayBuffer(0),Object.assign(this,e)}};nt([p({type:g.Integer})],mo.prototype,"version",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"modulus",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"publicExponent",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"privateExponent",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"prime1",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"prime2",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"exponent1",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"exponent2",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"coefficient",void 0);nt([p({type:A4,optional:!0})],mo.prototype,"otherPrimeInfos",void 0);var Vf=class{constructor(e={}){this.modulus=new ArrayBuffer(0),this.publicExponent=new ArrayBuffer(0),Object.assign(this,e)}};nt([p({type:g.Integer,converter:Fe})],Vf.prototype,"modulus",void 0);nt([p({type:g.Integer,converter:Fe})],Vf.prototype,"publicExponent",void 0);var W9;(function(r){r[r.Transient=0]="Transient",r[r.Singleton=1]="Singleton",r[r.ResolutionScoped=2]="ResolutionScoped",r[r.ContainerScoped=3]="ContainerScoped"})(W9||(W9={}));var Or=W9;var RR=nr(OR(),1),{__extends:qf,__assign:JNe,__rest:Jq,__decorate:eLe,__param:tLe,__metadata:rLe,__awaiter:DR,__generator:NR,__exportStar:nLe,__createBinding:oLe,__values:w1,__read:b1,__spread:qo,__spreadArrays:iLe,__await:sLe,__asyncGenerator:aLe,__asyncDelegator:cLe,__asyncValues:lLe,__makeTemplateObject:uLe,__importStar:fLe,__importDefault:dLe,__classPrivateFieldGet:hLe,__classPrivateFieldSet:pLe}=RR.default;var eW="injectionTokens";function G9(r){var e=Reflect.getMetadata("design:paramtypes",r)||[],t=Reflect.getOwnMetadata(eW,r)||{};return Object.keys(t).forEach(function(n){e[+n]=t[n]}),e}function v1(r){return!!r.useClass}function Wf(r){return!!r.useFactory}var C4=(function(){function r(e){this.wrap=e,this.reflectMethods=["get","getPrototypeOf","setPrototypeOf","getOwnPropertyDescriptor","defineProperty","has","set","deleteProperty","apply","construct","ownKeys"]}return r.prototype.createProxy=function(e){var t=this,n={},o=!1,i,s=function(){return o||(i=e(t.wrap()),o=!0),i};return new Proxy(n,this.createHandler(s))},r.prototype.createHandler=function(e){var t={},n=function(o){t[o]=function(){for(var i=[],s=0;s<arguments.length;s++)i[s]=arguments[s];i[0]=e();var a=Reflect[o];return a.apply(void 0,qo(i))}};return this.reflectMethods.forEach(n),t},r})();function Ra(r){return typeof r=="string"||typeof r=="symbol"}function X9(r){return typeof r=="object"&&"token"in r&&"multiple"in r}function P4(r){return typeof r=="object"&&"token"in r&&"transform"in r}function LR(r){return typeof r=="function"||r instanceof C4}function Pl(r){return!!r.useToken}function kl(r){return r.useValue!=null}function BR(r){return v1(r)||kl(r)||Pl(r)||Wf(r)}var tW=(function(){function r(){this._registryMap=new Map}return r.prototype.entries=function(){return this._registryMap.entries()},r.prototype.getAll=function(e){return this.ensure(e),this._registryMap.get(e)},r.prototype.get=function(e){this.ensure(e);var t=this._registryMap.get(e);return t[t.length-1]||null},r.prototype.set=function(e,t){this.ensure(e),this._registryMap.get(e).push(t)},r.prototype.setAll=function(e,t){this._registryMap.set(e,t)},r.prototype.has=function(e){return this.ensure(e),this._registryMap.get(e).length>0},r.prototype.clear=function(){this._registryMap.clear()},r.prototype.ensure=function(e){this._registryMap.has(e)||this._registryMap.set(e,[])},r})(),x1=tW;var rW=(function(r){qf(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e})(x1),MR=rW;var nW=(function(){function r(){this.scopedResolutions=new Map}return r})(),E1=nW;function oW(r,e){if(r===null)return"at position #"+e;var t=r.split(",")[e].trim();return'"'+t+'" at position #'+e}function iW(r,e,t){return t===void 0&&(t=" "),qo([r],e.message.split(`
65
+ `))}var dH=["BINARY","TEXT","CONTINUATION"],hH=10485760;var pH="/http/1.1",Wy=class extends _e{binaryType="arraybuffer";bufferedAmount=0;extensions="";protocol="";readyState;url;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;_onclose;_onerror;_onmessage;_onopen;sentClose;isClient;buffer;maxMessageSize;_url;closeController;constructor(e,t={}){super(),this.readyState=this.CONNECTING,this.url=e.pathname,this.sentClose=!1,this.isClient=t.isClient??!0,this.buffer=new de,this.closeController=new AbortController,this.maxMessageSize=t.maxMessageSize??hH}send(e){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");let t=BP(e);t0(t)?t.then(n=>{this._send("BINARY",n)}).catch(n=>{this._errored(n)}):this._send("BINARY",t)}_send(e,t){if(this.readyState!==this.OPEN)return;let n=LP(e,t,this.isClient),o=n.byteLength;this.bufferedAmount+=o,this._write(n,i=>{this.bufferedAmount-=o,i!=null&&this._errored(i)})}close(e,t){if(this.readyState!==this.OPEN)throw new Error("WebSocket was not open");this.readyState=this.CLOSING,this.sentClose=!0,this._send("CONNECTION_CLOSE")}_errored(e){this.readyState=this.CLOSED,this.dispatchEvent(new qy(e))}set onclose(e){this._onclose=e,this.addEventListener("close",e)}get onclose(){return this._onclose??null}set onerror(e){this._onerror=e,this.addEventListener("error",e)}get onerror(){return this._onerror??null}set onmessage(e){this._onmessage=e,this.addEventListener("message",e)}get onmessage(){return this._onmessage??null}set onopen(e){this._onopen=e,this.addEventListener("open",e)}get onopen(){return this._onopen??null}_push(e){if(this.buffer.append(e),this.buffer.byteLength>this.maxMessageSize){this.close(wp.MESSAGE_TOO_BIG,"Max message size exceeded");return}for(;;){let t=DP(this.buffer);if(t==null)break;if(dH.includes(t.type)&&t.data!=null){let n;this.binaryType==="blob"?n=new Blob([t.data]):t.data.byteOffset===0&&t.data.byteLength===t.data.buffer.byteLength?n=t.data.buffer:(n=new ArrayBuffer(t.data.byteLength),new Uint8Array(n,0,n.byteLength).set(t.data)),this.dispatchEvent(new MessageEvent("message",{data:n,origin:this._url?.hostname}))}t.type==="PING"&&this._send("PONG",t.data),t.type==="CONNECTION_CLOSE"&&(this.sentClose||this.close(),this.closeController.abort(),this._close(void 0,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new yp("close"))}))}}_remoteClosed(e){this.readyState=this.CLOSING,this._close(e,()=>{this.readyState=this.CLOSED,this.dispatchEvent(new yp("close"))})}};var bp=class extends Wy{writer;writable;constructor(e,t,n={}){if(super(new URL(e.url),{...n,isClient:!1}),e.body==null)throw new P("Request body cannot be null");this.readyState=this.OPEN,this.writable=t,this.writer=t.getWriter();let o=e.body.getReader();Promise.resolve().then(async()=>{for(this.dispatchEvent(new Event("open"));;){let{value:i,done:s}=await o.read();if(i!=null&&this._push(i),s){this._remoteClosed();break}}}).catch(i=>{this._errored(i)})}_write(e,t){this.writer?.write(e).then(()=>{t()},n=>{t(n)})}_close(e,t){e!=null?this.writable.abort(e).then(()=>{t()},()=>{t()}):this.writable.close().then(()=>{t()},()=>{t()})}},vp=class extends Wy{stream;handshakeTimeout;drainTimeout;constructor(e,t,n,o){super(t,{...o,isClient:!0}),this.handshakeTimeout=o.handshakeTimeout??1e4,this.drainTimeout=o.drainTimeout??1e4,Promise.resolve().then(async()=>{let i=AbortSignal.timeout(this.handshakeTimeout);this.stream=await n.openStream(e,pH,{...o,signal:i});for await(let a of UP(t,o.protocols,pi(o)))this.stream.send(a)||await this.stream.onDrain({signal:i});let s=await MP(this.stream,{signal:i});if(s.status!==101)throw new Error("Invalid WebSocket handshake - response status "+s.status);await o.onHandshakeResponse?.(s,{signal:i}),this.protocol=s.headers.get("Sec-WebSocket-Protocol")??"",this.readyState=this.OPEN,this.dispatchEvent(new Event("open"));for await(let a of this.stream)this._push(a)}).catch(i=>{this._errored(i)})}_write(e,t){if(this.stream==null){t(new Error("WebSocket was not open"));return}this.stream.send(e)?t():this.stream.onDrain({signal:AbortSignal.timeout(this.drainTimeout)}).then(()=>{t()},n=>{t(n)})}_close(e,t){if(this.stream==null){t();return}if(e!=null){this.stream.abort(e),t();return}this.stream.close().catch(n=>{this.stream?.abort(n)}).finally(()=>{t()})}};var xp="/http/1.1";var zy=Symbol.for("@libp2p/http/websocket-handler");var qP=nr(VP(),1),Xy=class{log;cookies;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:http:cookies"),this.cookies=new Map}async prepareRequest(e,t){if((t.credentials??"same-origin")==="omit")return;let o=t.headers.get("origin");if(o==null||o==="null")return;let i=mp(e,t.headers),s=(this.cookies.get(i.hostname)??[]).filter(a=>!(a.expires!=null&&a.expires<Date.now()||a.path!=null&&!i.pathname.startsWith(a.path))).map(a=>`${a.name}=${a.value}`).join("; ");s.length>0&&t.headers.set("cookie",s)}async processResponse(e,t,n){if((t.credentials??"same-origin")==="omit"){HP(n);return}let i=t.headers.get("origin");if(i==null||i==="null")return;let s=mp(e,t.headers);for(let a of n.headers.getSetCookie()){let c=[...this.cookies.get(s.hostname)??[],...SH(qP.default.parse(a))];this.cookies.set(s.hostname,c)}HP(n)}};function HP(r){return r.headers.has("set-cookie")&&r.headers.delete("set-cookie"),r}function SH(r){let e={},t=[];return Object.entries(r).forEach(([n,o])=>{n.toLowerCase()==="domain"&&o!=null&&(e.domain=o),n.toLowerCase()==="max-age"&&o!=null&&(e.expires=Date.now()+parseInt(o,10)*1e3),!_H.includes(n.toLowerCase())&&o!=null&&t.push({name:n,value:o})}),t.map(n=>({...n,...e}))}var _H=["domain","expires","httponly","max-age","partitioned","path","samesite","secure"];var Yy=class{async prepareRequest(e,t){if(t.headers.get("origin")!=null||t.mode==="no-cors")return;let n=mp(e,t.headers);t.headers.set("origin",`${n.protocol}//${n.host}`)}};function AH(r){return typeof r.init=="function"}function Qy(r,e){if(AH(r)){let t=r;return t.handler=r.init(e),delete t.init,t}return r}function WP(r){let e=Vy(r.method,["GET"]);if(r.fallback==null&&e.filter(n=>n!=="GET").length>0)throw new P("WebSocket handlers only support the GET HTTP method");let t={...r,init:n=>{let o=Qy(r,n);return t[zy]=o.handler,async i=>{if(!Fy(i.method,i.headers))return r?.fallback!=null?r.fallback(i):new mi(null,{status:400});let s=new TransformStream;try{let a=new mi(s.readable,{status:101,headers:await cb(i.headers)}),c=new bp(i,s.writable,r);return o.handler(c),a}catch{return new mi(null,{status:500})}}}};return t}var Zy="/.well-known/libp2p/protocols";function zP(r){return WP({path:Zy,method:["GET"],cors:!0,handler:e=>{let t=JSON.stringify(r.getProtocolMap());e.send(t),e.close()},fallback:async e=>{let t=JSON.stringify(r.getProtocolMap());return new Response(t,{headers:{"Content-Type":"application/json","Content-Length":`${t.length}`}})}})}var Jy=class{log;components;protocols;endpoint;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http:registrar"),this.protocols=[],this.onStream=this.onStream.bind(this),this.endpoint=t.server,this.handle("",zP(this))}async start(){await this.components.registrar.handle(xp,this.onStream.bind(this))}async stop(){await this.components.registrar.unhandle(xp)}async onStream(e,t){let n=await _P(e);if(this.canHandle(n)){this.log("handling incoming request %s %s",n.method,n.url);let o=await this.onRequest(xP(n,e));await EP(o,e),await e.close();return}if(this.endpoint==null){this.log("cannot handle incoming request %s %s and no endpoint configured",n.method,n.url),e.send(SP),await e.close();return}this.log("passing incoming request %s %s to endpoint",n.method,n.url),this.endpoint.inject(n,e,t).catch(o=>{this.log.error("error injecting request to endpoint - %e",o),e.abort(o)})}canHandle(e){let t=ab(e).pathname;return this.protocols.find(n=>n.route.path===t)!=null?(this.log.trace("can handle %s",t),!0):(this.log.trace("cannot handle %s",t),!1)}async onRequest(e){this.log("incoming request %s %s",e.method,e.url);let t=this.findHandler(e.url);if(t==null)return new Response(null,{status:404});let n;return t.route.method.includes(e.method)?n=await t.route.handler(e):e.method==="OPTIONS"?n=new Response(null,{status:204}):n=new Response(null,{status:405}),TH(n,e,t),this.log("%s %s %d %s",e.method,e.url,n.status,n.statusText),n}onWebSocket(e){let t=this.findHandler(e.url);if(t!=null){let n=t.route[zy];if(n!=null){n(e);return}}e.close(wp.NORMAL_CLOSURE)}findHandler(e){let t=e.startsWith("/")?e:new URL(e).pathname;this.log("search for handler on path %s",t);let n=this.protocols.find(o=>o.route.path===t);return n!=null&&this.log("found handler for HTTP protocol %s on path %s",n.protocol,e),n}handle(e,t){if(t.path=t.path??e,this.protocols.find(n=>n.protocol===e)!=null)throw new P(`HTTP protocol handler for ${e} already registered`);(t.path===""||!t.path.startsWith("/"))&&(t.path=`/${t.path}`),t.cors=t.cors??!0,t.method=Vy(t.method),t=Qy(t,this.components),this.protocols.push({protocol:e,route:t}),this.protocols.sort(({route:{path:n}},{route:{path:o}})=>o.length-n.length)}unhandle(e){this.protocols=this.protocols.filter(t=>t.protocol===e)}getProtocolMap(){let e={};for(let t of this.protocols)t.protocol!==""&&(e[t.protocol]={path:t.route.path});return e}};function TH(r,e,t){let n=[...new Set(["OPTIONS",...t.route.method])].join(", ");t.route.cors&&(e.headers.get("Access-Control-Request-Method")!=null&&r.headers.set("access-control-allow-methods",n),e.headers.get("Access-Control-Request-Headers")!=null&&r.headers.set("access-control-allow-headers",e.headers.get("Access-Control-Request-Headers")??""),e.headers.get("Origin")!=null&&(r.headers.set("access-control-allow-origin",e.headers.get("Origin")??""),r.headers.set("vary","Origin"))),e.method==="OPTIONS"&&r.headers.set("allow",n)}async function GP(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function XP(r,e,t){for(let n of e.middleware)await n.prepareRequest?.(r,e);return t()}async function YP(r,e,t){for(let n of e.middleware)await n.processResponse?.(r,e,t);return t}var e3=class{log;components;httpRegistrar;origin;cookies;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:http"),this.httpRegistrar=new Jy(e,t),this.origin=new Yy,this.cookies=new Xy(e,t)}[Symbol.toStringTag]="@libp2p/http";[qe]=["@libp2p/http"];async start(){await er(this.httpRegistrar)}async stop(){await or(this.httpRegistrar)}agent(...e){throw new sd("This method is not supported in browsers")}dispatcher(...e){throw new sd("This method is not supported in browsers")}async connect(e,t={}){let n=hf(e),o=pi(t),i={...t,headers:o,method:"GET",middleware:t.middleware?.map(s=>s(this.components))??[]};return o.set("connection","upgrade"),o.set("upgrade","websocket"),XP(n,i,async()=>{if(n instanceof URL){let c=new globalThis.WebSocket(n,t.protocols);return c.binaryType="arraybuffer",c}let{addresses:s,httpPath:a}=Ky(n);return new vp(s,new URL(`http://${jy(n,i.headers)}${decodeURIComponent(a)}`),this.components.connectionManager,i)})}async fetch(e,t={}){let n=hf(e),o={...t,headers:pi(t),method:"GET",middleware:[this.origin,this.cookies,...t.middleware?.map(s=>s(this.components))??[]]},i=await GP(n,o,async()=>this.sendRequest(n,t));return YP(n,o,i)}async connectProtocol(e,t,n){let o=await this.getProtocolPath(e,t,n),i=hf(e,o);return this.connect(i,n)}async fetchProtocol(e,t,n={}){let o=await this.getProtocolPath(e,t,n),i=hf(e,o);return this.fetch(i,n)}async getSupportedProtocols(e,t={}){let n=hf(e,Zy),o=await this.fetch(n,{method:"GET",headers:{Accept:"application/json"},signal:t.signal});if(o.status!==200)throw new Error(`Unexpected status code: ${o.status}`);return o.json()}async getProtocolPath(e,t,n={}){let o=await this.getSupportedProtocols(e,n);if(o[t]==null)throw new Error(`Peer does not serve protocol: ${t}`);return o[t].path}canHandle(e){return this.httpRegistrar.canHandle(e)}async onRequest(e){return this.httpRegistrar.onRequest(e)}onWebSocket(e){this.httpRegistrar.onWebSocket(e)}handle(e,t){this.httpRegistrar.handle(e,t)}unhandle(e){this.httpRegistrar.unhandle(e)}getProtocolMap(){return this.httpRegistrar.getProtocolMap()}async sendRequest(e,t){if(e instanceof URL)return this.log("making request to %s with global fetch"),globalThis.fetch(e,t);this.log("making request to %s with libp2p fetch",e);let n=jy(e,pi(t)),{addresses:o,httpPath:i}=Ky(e),a=await(await this.components.connectionManager.openConnection(o,{signal:t.signal??void 0})).newStream(xp,{signal:t.signal??void 0});return RP(a,new URL(`http://${n}${decodeURIComponent(i)}`),t)}};function QP(r={}){return e=>new e3(e,r)}var ZP="0.1.0";var JP="id/push",ek="1.0.0",tk="1.0.0";var ca;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 5:{i.protocolVersion=t.string();break}case 6:{i.agentVersion=t.string();break}case 1:{i.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&i.listenAddrs.length===o.limits.listenAddrs)throw new dt('Decode error - map field "listenAddrs" had too many elements');i.listenAddrs.push(t.bytes());break}case 4:{i.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&i.protocols.length===o.limits.protocols)throw new dt('Decode error - map field "protocols" had too many elements');i.protocols.push(t.string());break}case 8:{i.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(ca||(ca={}));var pn={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function rk(r){if(r!=null&&r.length>0)try{return ie(r)}catch{}}async function t3(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new Be("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:ie(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=Vt(o.publicKey);if(!ii(c).equals(n.remotePeer))throw new Be("public key did not match remote PeerId");i.publicKey=c}let s;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await Mn.openAndCertify(c,Jr.DOMAIN),f=Jr.createFromProtobuf(l.payload),u=Do(l.publicKey.toCID());if(!f.peerId.equals(u))throw new Be("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(f.peerId))throw new Be("signing key does not match remote PeerId");let d;try{d=await r.get(f.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(d!=null&&(i.metadata=d.metadata,d.peerRecordEnvelope!=null)){let h=Mn.createFromProtobuf(d.peerRecordEnvelope),m=Jr.createFromProtobuf(h.payload);m.seqNumber>=f.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",m.seqNumber,f.seqNumber),f=m,c=d.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=f.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),s={seq:f.seqNumber,addresses:f.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,i),await r.patch(n.remotePeer,i),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=B(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=B(o.protocolVersion)),t.trace("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:o.protocolVersion,agentVersion:o.agentVersion,publicKey:o.publicKey,listenAddrs:o.listenAddrs.map(c=>ie(c)),observedAddr:o.observedAddr==null?void 0:ie(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var pf=class{host;components;protocol;started;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.components=e,this.log=t.log,this.timeout=t.timeout??pn.timeout,this.maxInboundStreams=t.maxInboundStreams??pn.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??pn.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??pn.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??pn.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??pn.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??pn.protocolPrefix}/${ZP}`,agentVersion:e.nodeInfo.userAgent},this.handleProtocol=this.handleProtocol.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.peerStore.merge(this.components.peerId,{metadata:{AgentVersion:B(this.host.agentVersion),ProtocolVersion:B(this.host.protocolVersion)}}),await this.components.registrar.handle(this.protocol,this.handleProtocol,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}};var r3=class extends pf{connectionManager;concurrency;_push;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??pn.protocolPrefix}/${JP}/${tk}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??pn.concurrency,this._push=$i(this.sendPushMessage.bind(this),t.debounce??1e3),(t.runOnSelfUpdate??pn.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error("error pushing updates to peers - %e",o)})})}[qe]=["@libp2p/identify-push"];async push(){this._push()}async sendPushMessage(){if(this.isStarted())try{let e=this.components.addressManager.getAddresses().map(f=>f.decapsulateCode(421)),t=new Jr({peerId:this.components.peerId,multiaddrs:e}),n=await Mn.seal(t,this.components.privateKey),o=this.components.registrar.getProtocols(),i=await this.components.peerStore.get(this.components.peerId),s=j(i.metadata.get("AgentVersion")??B(this.host.agentVersion)),a=j(i.metadata.get("ProtocolVersion")??B(this.host.protocolVersion)),c=this;async function*l(){for(let f of c.connectionManager.getConnections())(await c.components.peerStore.get(f.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let d,h=AbortSignal.timeout(c.timeout);try{d=await f.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await bt(d,{maxDataLength:c.maxMessageSize}).pb(ca).write({listenAddrs:e.map(w=>w.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:h}),await d.close({signal:h})}catch(m){d?.log.newScope("identify-push")?.error("could not push identify update to peer",m),d?.abort(m)}})}await an(rs(l(),{concurrency:this.concurrency}))}catch(e){this.log.error("error pushing updates to peers - %e",e)}}async handleProtocol(e,t){let n=e.log.newScope("identify-push");if(this.components.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await bt(e,{maxDataLength:this.maxMessageSize}).pb(ca).read(o);await e.close(o),await t3(this.components.peerStore,this.components.events,n,t,s),n.trace("handled push from %p",t.remotePeer)}};var n3=class extends pf{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??pn.protocolPrefix}/${"id"}/${ek}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??pn.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(()=>{})})}[qe]=["@libp2p/identify"];async _identify(e,t={}){let n,o;if(t.signal==null){let i=AbortSignal.timeout(this.timeout);t={...t,signal:i}}this.log("run identify on new connection %a",e.remoteAddr);try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection}),o=n.log.newScope("identify");let i=bt(n,{maxDataLength:this.maxMessageSize}).pb(ca),s=await i.read(t);return await i.unwrap().unwrap().close(t),s}catch(i){throw o?.error("identify failed - %e",i),n?.abort(i),i}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new Be("Public key was missing from identify message");let a=Vt(o),c=Do(a.toCID());if(!e.remotePeer.equals(c))throw new Be("Identified peer does not match the expected peer");if(this.components.peerId.equals(c))throw new Be("Identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("completed for peer %p and protocols %o",c,i),t3(this.components.peerStore,this.components.events,this.log,e,n)}maybeAddObservedAddress(e){let t=rk(e);if(t==null||(this.log.trace("our observed address was %a",t),Mt(t)))return;let n=t.getComponents();if((n[0].code===41||n[0].code===42&&n[1].code===41)&&!Wm(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Pc.exactMatch(t)||(this.log.trace("storing the observed address"),this.components.addressManager.addObservedAddr(t))}async handleProtocol(e,t){let n=e.log.newScope("identify");n("responding to identify");let o=AbortSignal.timeout(this.timeout);let i=await this.components.peerStore.get(this.components.peerId,{signal:o}),s=this.components.addressManager.getAddresses().map(f=>f.decapsulateCode(421)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let f=new Jr({peerId:this.components.peerId,multiaddrs:s});a=(await Mn.seal(f,this.components.privateKey,{signal:o})).marshal().subarray()}let c=t.remoteAddr.bytes;oT.matches(t.remoteAddr)||(c=void 0);let l=bt(e).pb(ca);n("send response"),await l.write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:sr(this.components.privateKey.publicKey),listenAddrs:s.map(f=>f.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),n("close write"),await l.unwrap().unwrap().close({signal:o})}};function nk(r={}){return e=>new n3(e,r)}function ok(r={}){return e=>new r3(e,r)}var Jc=1e3,hb=60*Jc,o3=60*hb,ik="/ipfs/kad/1.0.0",i3=48*o3;var sk=24*o3,ak=10,ck=16384,lk=o3,pb=o3,awe=10*Jc,uk=10*Jc;var s3=20,la=10,fk=5*hb,dk=Jc,hk=5*Jc,pk=5*hb,mk=30*Jc,gk=180*Jc,mb=`${Ha}-kad-dht`;var Ep;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={key:ke(0),value:ke(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(Ep||(Ep={}));function yk(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),i=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${i}:${s}.${c}Z`}function wk(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,i=parseInt(t[3],10),s=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,i,s,a,c,l))}var Ar=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return Ep.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:yk(this.timeReceived)}}static deserialize(e){let t=Ep.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=wk(e.timeReceived);if(e.key==null)throw new Error("key missing from deserialized object");if(e.value==null)throw new Error("value missing from deserialized object");return new r(e.key,e.value,t)}};var ua=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},a3=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},c3=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var bk;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 3:{i.author=t.bytes();break}case 4:{i.signature=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(bk||(bk={}));var tt;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(tt||(tt={}));var l3;(function(r){r[r.PUT_VALUE=0]="PUT_VALUE",r[r.GET_VALUE=1]="GET_VALUE",r[r.ADD_PROVIDER=2]="ADD_PROVIDER",r[r.GET_PROVIDERS=3]="GET_PROVIDERS",r[r.FIND_NODE=4]="FIND_NODE",r[r.PING=5]="PING"})(l3||(l3={}));(function(r){r.codec=()=>Ot(l3)})(tt||(tt={}));var gf;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(gf||(gf={}));var gb;(function(r){r[r.NOT_CONNECTED=0]="NOT_CONNECTED",r[r.CONNECTED=1]="CONNECTED",r[r.CAN_CONNECT=2]="CAN_CONNECT",r[r.CANNOT_CONNECT=3]="CANNOT_CONNECT"})(gb||(gb={}));(function(r){r.codec=()=>Ot(gb)})(gf||(gf={}));var mf;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let i of t.multiaddrs)n.uint32(18),n.bytes(i);t.connection!=null&&(n.uint32(24),gf.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ke(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&i.multiaddrs.length===o.limits.multiaddrs)throw new dt('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=gf.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(mf||(mf={}));var fa;(function(r){let e;r.codec=()=>(e==null&&(e=Ie((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&l3[t.type]!==0&&(n.uint32(8),tt.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let i of t.closer)n.uint32(66),mf.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),mf.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:tt.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.type=tt.codec().decode(t);break}case 10:{i.clusterLevel=t.int32();break}case 2:{i.key=t.bytes();break}case 3:{i.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&i.closer.length===o.limits.closer)throw new dt('Decode error - map field "closer" had too many elements');i.closer.push(mf.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&i.providers.length===o.limits.providers)throw new dt('Decode error - map field "providers" had too many elements');i.providers.push(mf.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Te(t,r.codec()),r.decode=(t,n)=>Ae(t,r.codec(),n)})(fa||(fa={}));function yb(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new CustomEvent("kad-dht:query:send-query",{detail:t})),t}function Sp(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer??[],providers:r.providers??[]};return e.onProgress?.(new CustomEvent("kad-dht:query:peer-response",{detail:t})),t}function u3(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function $o(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function wb(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function _p(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function bb(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function vk(r,e={}){let t={...r,name:"PATH_ENDED",type:8};return e.onProgress?.(new CustomEvent("kad-dht:query:path-ended",{detail:t})),t}function xk(r,e,t){if(t.length===0)throw new P("No records given");let o=j(e).split("/");if(o.length<3)throw new P("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new c3(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function RH(r,e){return 0}var Ek={pk:RH};async function yf(r,e,t){let n=e.key,i=j(n).split("/");if(i.length<3)return;let s=r[i[1].toString()];if(s==null)throw new P(`No validator available for key type "${i[1]}"`);await s(n,e.value,t)}var DH=async(r,e,t)=>{if(!(r instanceof Uint8Array))throw new P('"key" must be a Uint8Array');if(r.byteLength<5)throw new P("Invalid public key record");if(j(r.subarray(0,4))!=="/pk/")throw new P("key was not prefixed with /pk/");let o=Vt(e),i=r.slice(4);if(!we(i,o.toMultihash().bytes))throw new P("public key does not match passed in key")},Sk={pk:DH};var NH=B("/pk/");function _k(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>!Mt(e))}}async function da(r,e){let t=await St.digest(r);return e?.signal?.throwIfAborted(),t.digest}async function mn(r,e){return da(r.toMultihash().bytes,e)}function ha(r,e){return new ht(`${r}/${j(e,"base32")}`,!1)}function Ak(r){return gt([NH,r.toMultihash().bytes])}function Tk(r){return j(r.subarray(0,4))==="/pk/"}function Ik(r){let e=lt(r.subarray(4));return Ut(e)}function vb(r,e){let t=new Date;return new Ar(r,e,t).serialize()}function f3(r){let e=r.toString().split("/"),t=e.pop(),n=e.pop();if(t==null||n==null)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:ce.createV1(Ga,lt(B(n,"base32"))),peerId:yt(t)}}function d3(r,e,t){let n=typeof e=="string"?e:j(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new ht(o.join("/"))}function h3(r){return new Date(Cn(r))}function el(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),i=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}function p3(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),i=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}var m3=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:i,queryManager:s,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e,t){this.log("getLocal %b",e);let n=ha(this.datastorePrefix,e);this.log("fetching record for key %k",n);let o=await this.components.datastore.get(n,t);this.log("found %k in local datastore",n);let i=Ar.deserialize(o);return await yf(this.validators,i,t),i}async*sendCorrectionRecord(e,t,n,o){this.log("sendCorrection for %b",e);let i=vb(e,n);for(let{value:s,from:a}of t){if(we(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let f=ha(this.datastorePrefix,e);this.log(`Storing corrected record for key ${f.toString()}`),await this.components.datastore.put(f,i.subarray(),o)}catch(f){this.log.error("failed error correcting self - %e",f)}continue}let c=!1,l={type:tt.PUT_VALUE,key:e,record:i};for await(let f of this.network.sendRequest(a,l,o))f.name==="PEER_RESPONSE"&&f.record!=null&&we(f.record.value,Ar.deserialize(i).value)&&(c=!0),yield f;if(!c)throw new ua("Could not send correction");this.log.error("failed error correcting entry")}}async*put(e,t,n){this.log("put key %b value %b",e,t);let o=vb(e,t),i=ha(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray(),n),yield*xu(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>to(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:tt.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let f of this.network.sendRequest(a.peer.id,l,{...n,path:a.path}))c.push(f),f.name==="PEER_RESPONSE"&&(f.record!=null&&we(f.record.value,Ar.deserialize(o).value)||c.push($o({from:a.peer.id,error:new ua("Value not put correctly"),path:f.path},n)));return c}),s=>rs(s,{ordered:!1,concurrency:la}),async function*(s){for await(let a of s)yield*a})}async*get(e,t){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t)){if(a.name==="VALUE"){n.push(a);continue}yield a}if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=xk(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=o[i];if(this.log("GetValue %b %b",e,s),s==null)throw new Xe("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,{...t,path:{index:-1,queued:0,running:0,total:0}}),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e,t);yield _p({value:i.value,from:this.components.peerId,path:{index:-1,running:0,queued:0,total:0}},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s,path:a}){for await(let c of n.peerRouting.getValueOrPeers(i.id,e,{...t,signal:s,path:a}))yield c,c.name==="PEER_RESPONSE"&&c.record!=null&&(yield _p({from:i.id,value:c.record.value,path:a},t))};yield*this.queryManager.run(e,o,t)}};function Ck(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Ap(r){if(r.id==null)throw new Error("Invalid peer in message");let e=lt(r.id);return{id:Ut(e),multiaddrs:(r.multiaddrs??[]).map(t=>ie(t))}}var g3=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:i,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=i,this.routingTable=s,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,f)=>(l.name==="PROVIDER"&&(f.providers??=[],f.providers.push(...l.providers.map(u=>u.id.toString()))),f)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,f)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(f.providers??=[],f.providers.push(l.from.toString())),f)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId,n);let i={type:tt.ADD_PROVIDER,key:o,providers:[Ck({id:this.components.peerId,multiaddrs:t})]},s=0,a=this;async function*c(u){try{a.log("sending provider record for %s to %p",e,u.peer.id);for await(let d of a.network.sendMessage(u.peer.id,i,{...n,path:u.path}))d.name==="PEER_RESPONSE"&&(a.log("sent provider record for %s to %p",e,u.peer.id),s++),yield d}catch(d){a.log.error("error sending provide record to peer %p - %e",u.peer.id,d),yield $o({from:u.peer.id,error:d,path:u.path},n)}}let l=gr({objectMode:!0}),f=new yr({concurrency:la});f.addEventListener("idle",()=>{l.end()}),f.addEventListener("failure",u=>{this.log.error("error publishing provider record to peer - %e",u.detail.error)}),f.add(async()=>{let u=[];for await(let d of this.peerRouting.getClosestPeers(o,n))l.push(d),d.name==="FINAL_PEER"&&u.push(d);u.forEach(d=>{f.add(async()=>{for await(let h of c(d))l.push(h)}).catch(h=>{this.log.error("error publishing provider record to peer - %e",h)})})}).catch(u=>{l.end(u)}),yield*l,this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,i=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e,t);if(a.length>0){let f=[];for(let u of a.slice(0,n))try{let d=await this.components.peerStore.get(u,t);f.push({id:u,multiaddrs:d.addresses.map(({multiaddr:h})=>h)})}catch(d){if(d.name!=="NotFoundError")throw d;this.log("no peer store entry for %p",u)}if(yield Sp({from:this.components.peerId,messageType:tt.GET_PROVIDERS,providers:f,path:{index:-1,queued:0,running:0,total:0}},t),yield wb({from:this.components.peerId,providers:f,path:{index:-1,queued:0,running:0,total:0}},t),o+=f.length,o>=n)return}let c=async function*({peer:f,signal:u,path:d}){let h={type:tt.GET_PROVIDERS,key:i};yield*s.network.sendRequest(f.id,h,{...t,signal:u,path:d})},l=new Bn(a);for await(let f of this.queryManager.run(i,c,t))if(yield f,f.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",f.providers.length,e,f.closer.length);let u=[];for(let d of f.providers)l.has(d.id)||(l.add(d.id),u.push(d));if(u.length>0&&(yield wb({from:f.from,providers:u,path:f.path},t),o+=u.length,o>=n))return}}};var y3=class extends _e{log;protocol;running;components;timeout;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=t.protocol,this.timeout=new Io({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_errors_total`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendMessage}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new P("Message type was missing");let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield bb({peer:e,path:n.path},n),i=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield yb({to:e,type:o,path:n.path},n);let a=await this._writeReadMessage(i,t,n);i.close(n).catch(c=>{this.log.error("error closing stream to %p - %e",e,c),i?.abort(c)}),yield Sp({from:e,messageType:a.type,closer:a.closer.map(Ap),providers:a.providers.map(Ap),record:a.record==null?void 0:Ar.deserialize(a.record),path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield $o({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n){if(!this.running)return;let o=t.type;if(o==null)throw new P("Message type was missing");let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),this.log("dialling %p",e),yield bb({peer:e,path:n.path},n),i=await this.components.connectionManager.openStream(e,this.protocol,n),this.log("sending %s to %p",t.type,e),yield yb({to:e,type:o,path:n.path},n),await this._writeMessage(i,t,n),i.close(n).catch(a=>{this.log.error("error closing stream to %p - %e",e,a),i?.abort(a)}),yield Sp({from:e,messageType:o,path:n.path},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield $o({from:e,error:a,path:n.path},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await bt(e).write(t,fa,n)}async _writeReadMessage(e,t,n){let o=bt(e);await o.write(t,fa,n);let i=await o.read(fa,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:Ap(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:Ap(s)})}),i}};function tl(r,e){if(r.byteLength!==e.byteLength)throw new Error("Inputs should have the same length");for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}var pa=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return[...this.peerDistances]}async add(e,t={index:-1,queued:0,running:0,total:0},n){let o=await mn(e.id,n);this.addWithKadId(e,o,t)}addWithKadId(e,t,n={index:-1,queued:0,running:0,total:0}){if(this.peerDistances.find(s=>s.peer.id.equals(e.id))!=null)return;let o={peer:e,distance:Uo(this.originDhtKey,t),path:n};if(this.peerDistances.length===this.capacity){let s=this.peerDistances[this.peerDistances.length-1];if(s!=null&&tl(o.distance,s.distance)!==-1)return}let i=!1;for(let s=0;s<this.peerDistances.length;s++){let a=tl(this.peerDistances[s].distance,o.distance);if(a===0||a===1){i=!0,this.peerDistances.splice(s,0,o);break}}i||this.peerDistances.push(o),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e,t){if(this.length===0)return!0;let n=await mn(e,t),o=Uo(n,this.originDhtKey),i=this.peerDistances[this.peerDistances.length-1].distance;return tl(o,i)===-1}async anyCloser(e,t){return e.length===0?!1:Promise.any(e.map(async n=>this.isCloser(n,t)))}};var w3=class{log;routingTable;network;validators;queryManager;components;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async findPeerLocal(e,t){let n,o=await this.routingTable.find(e,t);if(o!=null){this.log("findPeerLocal found %p in routing table",e);try{n=await this.components.peerStore.get(o,t)}catch(i){if(i.name!=="NotFoundError")throw i}}if(n==null)try{n=await this.components.peerStore.get(e,t)}catch(i){if(i.name!=="NotFoundError")throw i}if(n!=null)return this.log("findPeerLocal found %p in peer store",e),{id:n.id,multiaddrs:n.addresses.map(i=>i.multiaddr)}}async*_getValueSingle(e,t,n){let o={type:tt.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=Ak(e),o={index:-1,queued:0,running:0,total:0};for await(let i of this._getValueSingle(e,n,{...t,path:o}))if(yield i,i.name==="PEER_RESPONSE"&&i.record!=null){let s=Vt(i.record.value),a=ii(s);if(!a.equals(e))throw new ki("public key does not match id");if(a.publicKey==null)throw new ki("public key missing");yield _p({from:e,value:i.record.value,path:o},t)}throw new ua(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e,t);if(o!=null){this.log("found local"),yield u3({from:this.components.peerId,peer:o,path:{index:-1,queued:0,running:0,total:0}},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a,path:c}){let l={type:tt.FIND_NODE,key:e.toMultihash().bytes};for await(let f of o.network.sendRequest(s.id,l,{...t,signal:a,path:c}))if(yield f,f.name==="PEER_RESPONSE"){let u=f.closer.find(d=>d.id.equals(e));u!=null&&(yield u3({from:f.from,peer:u,path:f.path},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}if(!n)throw new Xe("Not found")}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await da(e,t),o=new pa(n,this.routingTable.kBucketSize),i=this,s=async function*({peer:a,path:c,peerKadId:l,signal:f}){i.log("getClosestPeers asking %p",a.id);let u={type:tt.FIND_NODE,key:e};yield*i.network.sendRequest(a.id,u,{...t,signal:f,path:c}),o.addWithKadId(a,l,c)};yield*this.queryManager.run(e,s,t),this.log("found %d peers close to %b",o.length,e);for(let{peer:a,path:c}of o.peers)try{if(a.multiaddrs.length===0&&(a=await i.components.peerStore.getInfo(a.id,t)),a.multiaddrs.length===0)continue;yield u3({from:this.components.peerId,peer:await i.components.peerStore.getInfo(a.id,t),path:{index:c.index,queued:0,running:0,total:0}},t)}catch{continue}}async*getValueOrPeers(e,t,n){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record,n)}catch{let s="invalid record received, discarded";this.log(s),yield $o({from:o.from,error:new ua(s),path:n.path},n);continue}yield o}}async _verifyRecordOnline(e,t){if(e.timeReceived==null)throw new a3("invalid record received");await yf(this.validators,new Ar(e.key,e.value,e.timeReceived),t)}async getClosestPeersOffline(e,t){let n=[];try{let s=lt(e),a=Ut(s),c=await this.components.peerStore.get(a,t);n.push({id:c.id,multiaddrs:c.addresses.map(({multiaddr:l})=>l)})}catch{}let o=await da(e,t),i=this.routingTable.closestPeers(o,t);for(let s of i)try{n.push(await this.components.peerStore.getInfo(s,t))}catch(a){if(a.name!=="NotFoundError")throw a}return n.length>0?this.log("getClosestPeersOffline returning the %d closest peer(s) we know to %b",n.length,e):this.log("getClosestPeersOffline could not any peers close to %b with %d peers in the routing table",e,this.routingTable.size),n}};var b3=class{log;datastore;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore}async addProvider(e,t,n){this.log.trace("%p provides %s",t,e),await this.writeProviderEntry(e,t,n)}async removeProvider(e,t,n){let o=d3(this.datastorePrefix,e,t);this.log.trace("%p no longer provides %s",t,e),await this.datastore.delete(o,n)}async getProviders(e,t){this.log.trace("get providers for %c",e);let n=await this.loadProviders(e,t);return this.log.trace("got %d providers for %c",n.size,e),[...n.keys()]}async writeProviderEntry(e,t,n){let o=d3(this.datastorePrefix,e,t),i=Ur(n?.time?.getTime()??Date.now());await this.datastore.put(o,i,n)}async loadProviders(e,t){let n=new jr,o=d3(this.datastorePrefix,e);for await(let i of this.datastore.query({prefix:o.toString()},t)){let{peerId:s}=f3(i.key);n.set(s,h3(i.value))}return n}};var xb=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Eb=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},Pk=r=>globalThis.DOMException===void 0?new Eb(r):new DOMException(r),kk=r=>{let e=r.reason===void 0?Pk("This operation was aborted."):r.reason;return e instanceof Error?e:Pk(e)};function Sb(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((f,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(kk(h)),a=()=>{u(kk(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(f,u);return}let d=new xb;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?f():o instanceof Error?u(o):(d.message=o??`Promise timed out after ${t} milliseconds`,u(d))},t),(async()=>{try{f(await r)}catch(h){u(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}var BH=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function MH(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:f}=BH(r),u=async(...h)=>{let m=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(m))return}catch(w){n(),s(w);return}c.push(m),t.count===c.length&&(n(),i(c))},d=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)f(h,u);for(let h of t.rejectionEvents)a.includes(h)||f(h,d)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,d);t.signal&&t.signal.addEventListener("abort",()=>{d(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Sb(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function Ok(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=MH(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}async function*Rk(r){let{key:e,startingPeers:t,ourPeerId:n,query:o,alpha:i,path:s,numPaths:a,log:c,peersSeen:l,connectionManager:f,signal:u}=r,d=gr({objectMode:!0}),h=new yr({concurrency:i,sort:(w,y)=>tl(w.options.distance,y.options.distance)});h.addEventListener("idle",()=>{d.push(vk({path:{index:s,queued:h.queued,running:h.running,total:h.size}},r)),d.end()}),h.addEventListener("failure",w=>{c.error("error during query - %e",w.detail.error)});let m=()=>{h.abort(),d.end(new qr)};u.addEventListener("abort",m);try{let y=function(b,N){if(b==null)return;l.add(b.id.toMultihash().bytes);let O=Uo(N,w);h.add(async()=>{try{for await(let V of o({...r,key:e,peer:b,path:{index:s,queued:h.queued,running:h.running,total:h.size},numPaths:a,peerKadId:N,signal:u})){if(V.name==="PEER_RESPONSE")for(let Q of V.closer){if(l.has(Q.id.toMultihash().bytes)){c("already seen %p in query",Q.id);continue}if(n.equals(Q.id)){c("not querying ourselves");continue}if(!await f.isDialable(Q.multiaddrs)){c("not querying undialable peer");continue}let Z=await mn(Q.id,{signal:u}),se=Uo(Z,w);if(tl(se,O)!==-1){c("skipping %p as they are not closer to %b than %p",Q.id,e,b.id);continue}c("querying closer peer %p",Q.id),y(Q,Z)}d.push({...V,path:{index:s,queued:h.queued,running:h.running,total:h.size}})}}catch(V){d.push($o({from:b.id,error:V,path:{index:s,queued:h.queued,running:h.running-1,total:h.size-1}},r))}},{distance:O}).catch(V=>{c.error("error during query - %e",V)})},w=await da(e,{signal:u});await Promise.all(t.map(async b=>{y({id:b,multiaddrs:[]},await mn(b,{signal:u}))})),yield*d}finally{u.removeEventListener("abort",m)}}var v3=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;allowQueryWithZeroPeers;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??s3,this.alpha=t.alpha??la,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.allowQueryWithZeroPeers=t.allowQueryWithZeroPeers??!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");if(n.signal==null){let c=AbortSignal.timeout(gk);n={...n,signal:c}}let o=new AbortController,i=De([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+j(e,"base58btc")),a=!1;try{this.routingTable.size===0&&!this.allowQueryWithZeroPeers&&(s("routing table was empty, waiting for some peers before running%s query",n.isSelfQuery===!0?" self":""),await Ok(this.routingTable,"peer:add",{signal:i,filter:h=>!this.peerId.equals(h.detail)}),s("routing table has peers, continuing with%s query",n.isSelfQuery===!0?" self":"")),n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial self query before continuing"),await ut(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await da(e,{signal:i}),l=this.routingTable.closestPeers(c,{count:this.routingTable.kBucketSize}),f=l.sort(()=>Math.random()>.5?1:-1).reduce((h,m,w)=>(h[w%this.disjointPaths].push(m),h),new Array(this.disjointPaths).fill(0).map(()=>[])).filter(h=>h.length>0);if(l.length===0){s.error("running query with no peers");return}let u=$r(1024),d=f.map((h,m)=>Rk({...n,key:e,startingPeers:h,ourPeerId:this.peerId,signal:i,query:t,path:m,numPaths:f.length,alpha:this.alpha,log:s,peersSeen:u,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of Qr(...d)){if(h.name==="QUERY_ERROR"&&s.error("query error - %e",h.error),h.name==="PEER_RESPONSE")for(let m of[...h.closer,...h.providers])await this.connectionManager.isDialable(m.multiaddrs,{signal:i})&&await this.routingTable.add(m.id,{signal:i});i.throwIfAborted(),yield h}a=!0}catch(c){if(this.running)throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query finished")}}};function UH(r){return r[Symbol.asyncIterator]!=null}function FH(r){if(UH(r))return(async()=>{let e=0;for await(let t of r)e++;return e})();{let e=0;for(let t of r)e++;return e}}var x3=FH;var E3=class{log;peerId;peerRouting;events;count;interval;initialInterval;queryTimeout;running;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:query-self`),this.events=e.events,this.running=!1,this.peerRouting=t.peerRouting,this.count=t.count??s3,this.interval=t.interval??fk,this.initialInterval=t.initialInterval??dk,this.queryTimeout=t.queryTimeout??hk,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=p3(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=Ue(),this.running){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);e.push(n)}let t=De(e);this.controller.signal;try{this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await xu(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),s=>Js(s,this.count),async s=>x3(s));t?.throwIfAborted();let i=Date.now()-n;this.log("self-query found %d peers in %dms",o,i),this.events.dispatchEvent(new CustomEvent("kad-dht:query:self",{detail:{peers:o,duration:i}}))}catch(n){this.log.error("self-query error - %e",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query - %e",e)})},this.interval))}};var S3=class extends _e{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new yr({concurrency:t.concurrency??ak,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Io({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_timeout_milliseconds`}),this.datastore=e.datastore,this.addressManager=e.addressManager,this.datastorePrefix=`${t.datastorePrefix}/provider`,this.reprovideThreshold=t.threshold??sk,this.maxQueueSize=t.maxQueueSize??ck,this.validity=t.validity??i3,this.interval=t.interval??lk,this.contentRouting=t.contentRouting,this.running=!1,this.reprovide=p3(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(pb)}).catch(e=>{this.log.error("error running process to reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async processRecords(e){try{this.safeDispatchEvent("reprovide:start"),this.log("starting reprovide/cleanup");for await(let t of this.datastore.query({prefix:this.datastorePrefix},e))try{let{cid:n,peerId:o}=f3(t.key),s=h3(t.value).getTime()+this.validity,a=Date.now(),c=a>s,l=this.peerId.equals(o);this.log.trace("comparing: %d (now) < %d (expires) = %s %s",a,s,c,c?"(expired)":"(valid)"),c&&!l&&await this.datastore.delete(t.key,e),this.shouldReprovide(l,s)&&(this.log("reproviding %c as it is within the reprovide threshold (%d)",n,this.reprovideThreshold),this.queueReprovide(n).catch(f=>{this.log.error("could not reprovide %c - %e",n,f)}))}catch(n){this.log.error("error processing datastore key %s - %s",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{this.safeDispatchEvent("reprovide:end"),this.running&&(this.log("queuing next re-provide/cleanup run in %d ms",this.interval),this.timeout=setTimeout(()=>{this.processRecords({signal:AbortSignal.timeout(pb)}).catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}shouldReprovide(e,t){if(!e)return!1;let n=Date.now();return t<n?!0:t-n<this.reprovideThreshold}async queueReprovide(e,t){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize,t);let n=this.reprovideQueue.queue.find(o=>o.options.cid.equals(e));if(n!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),n.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async o=>{if(o.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let i=this.reprovideTimeout.getTimeoutSignal(o);try{await this.reprovide(o.cid,o)}finally{this.reprovideTimeout.cleanUp(i)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(o=>{this.log.error("could not re-provide key %c - %e",e,o)})}async reprovide(e,t){await an(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var $H=20,jH=5e3,KH="kad-close",VH=50,_3=class{routingTable;components;closestPeers;newPeers;refreshInterval;peerSetSize;timeout;closeTagName;closeTagValue;log;running;constructor(e,t){this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.routingTable=t.routingTable,this.refreshInterval=t.refreshInterval??jH,this.peerSetSize=t.peerSetSize??$H,this.closeTagName=t.closeTagName??KH,this.closeTagValue=t.closeTagValue??VH,this.closestPeers=new Bn,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await mn(this.components.peerId);this.newPeers=new pa(e,this.peerSetSize),this.routingTable.addEventListener("peer:ping",this.onPeerPing),this.timeout=setInterval(()=>{this.updatePeerTags().catch(t=>{this.log.error("error updating peer tags - %e",t)})},this.refreshInterval)}stop(){this.running=!1,this.routingTable.removeEventListener("peer:ping",this.onPeerPing),clearTimeout(this.timeout)}onPeerPing(e){this.newPeers?.add({id:e.detail,multiaddrs:[]}).catch(t=>{this.log.error("error adding peer to distance list - %e",t)})}async updatePeerTags(){let e=new Bn(this.newPeers?.peers.map(({peer:o})=>o.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:{value:this.closeTagValue},[mb]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[mb]:void 0}})})])}};function Tp(r){return Array.isArray(r?.peers)}var A3=class{peerId;root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e,t){this.peerId=e.peerId,this.prefixLength=t.prefixLength??Dk,this.kBucketSize=t.kBucketSize??Ip,this.splitThreshold=t.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=t.numberOfOldContactsToPing??Nk,this.lastPingThreshold=t.lastPingThreshold??Lk,this.ping=t.ping,this.verify=t.verify,this.onAdd=t.onAdd,this.onRemove=t.onRemove,this.addingPeerMap=Yi({name:`${t.metricsPrefix}_adding_peer_map`,metrics:e.metrics}),this.root={prefix:"",depth:0,peers:[]}}async start(){await this.addSelfPeer(this.peerId)}stop(){this.addingPeerMap.clear(),this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e,t){this.localPeer={peerId:e,kadId:await mn(e,t),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await mn(e,t),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let i=this._add(n,t);this.addingPeerMap.set(e,i),await i}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n,t),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!qH(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n,t);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(s=>!(s.peerId.equals(this.localPeer?.peerId)||s.lastPing>Date.now()-this.lastPingThreshold)).sort((s,a)=>s.lastPing<a.lastPing?-1:s.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),i=!1;for await(let s of this.ping(o,t))i=!0,await this.remove(s.kadId,t);i&&await this._add(e,t)}*closest(e,t){let n=new pa(e,t?.count??this.kBucketSize);for(let o of this.toIterable())t?.exclude?.some(i=>i.equals(o.peerId))!==!0&&n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*to(n.peers,({peer:o})=>o.id)}count(){function e(t){if(Tp(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e,t){let n=this._determineBucket(e),o=this._indexOf(n,e);if(o>-1){let i=n.peers.splice(o,1)[0];await this.onRemove?.(i,n,t)}}*toIterable(){function*e(t){if(Tp(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+j(Uo(e,t),"base16"))}_determineBucket(e){let t=j(e,"base2");function n(o,i=0){return Tp(o)?o:t[i]==="0"?n(o.left,i+1):n(o.right,i+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>we(n.kadId,t))}async _split(e,t){let n={prefix:"0",depth:e.depth+1,peers:[]},o={prefix:"1",depth:e.depth+1,peers:[]};for(let i of e.peers)j(i.kadId,"base2")[e.depth]==="0"?(n.peers.push(i),await this.onMove?.(i,e,n,t)):(o.peers.push(i),await this.onMove?.(i,e,o,t));HH(e,n,o)}};function HH(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function qH(r,e){return r.lastPing<Date.now()-e}var Ip=20,Dk=6;var WH=20,zH=100,Nk=3;var GH=20,XH=100,Bk="kad-peer",YH=1,Lk=6e5,QH=!0,ZH=1e3,T3=class extends _e{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;shutdownController;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??Ip,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??Bk,this.peerTagValue=t.peerTagValue??YH,this.pingOldContacts=this.pingOldContacts.bind(this),this.verifyNewContact=this.verifyNewContact.bind(this),this.peerAdded=this.peerAdded.bind(this),this.peerRemoved=this.peerRemoved.bind(this),this.populateFromDatastoreOnStart=t.populateFromDatastoreOnStart??QH,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??ZH,this.shutdownController=new AbortController,this.shutdownController.signal,this.pingOldContactQueue=new vr({concurrency:t.pingOldContactConcurrency??GH,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??XH}),this.pingOldContactTimeout=new Io({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new vr({concurrency:t.pingNewContactConcurrency??WH,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??zH}),this.pingNewContactTimeout=new Io({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new A3(e,{kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved,metricsPrefix:t.metricsPrefix}),this.closestPeerTagger=new _3(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,await er(this.closestPeerTagger,this.kb))}async afterStart(){let e=0;Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let t=De([this.shutdownController.signal,AbortSignal.timeout(2e4)]);try{for(let n of await this.components.peerStore.all({filters:[o=>o.protocols.includes(this.protocol)&&o.tags.has(Bk)],limit:this.populateFromDatastoreLimit,signal:t})){if(!this.running)return;try{await this.add(n.id,{signal:t}),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(n.id,{tags:{[this.peerTagName]:void 0}})}}}finally{t.clear()}this.log("added %d peer store peers to the routing table",e)}).catch(t=>{this.log.error("error adding %d, peer store peers to the routing table - %e",e,t)})}async stop(){this.running=!1,await or(this.closestPeerTagger,this.kb),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort(),this.shutdownController.abort()}async peerAdded(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t,n){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}},n),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let i=this.pingOldContactQueue.find(o.peerId);if(i!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await i.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=De([c,this.shutdownController.signal,a?.signal]);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of rs(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=De([n,this.shutdownController.signal,t?.signal]);try{let i=this.pingNewContactQueue.find(e.peerId);return i!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await i.join({signal:o})):await this.pingNewContactQueue.add(async s=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,s)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{return this.log("pinging contact %p",e.peerId),await this.components.ping.ping(e.peerId,t),this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0}catch(o){return this.log("error pinging old contact %p - %e",e.peerId,o),n?.abort(o),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e,t){let n=await mn(e,t);return this.kb.get(n)?.peerId}closestPeer(e){let t=this.closestPeers(e,{count:1});if(t.length>0)return t[0]}closestPeers(e,t){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");let n=await mn(e,t);await this.kb.remove(n,t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,i=0;function s(a){if(Tp(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>i&&(i=a.peers.length);return}s(a.left),s(a.right)}s(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMinOccupancy.update(o),this.metrics.routingTableKadBucketMaxOccupancy.update(i),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var Mk=[77591,22417,43971,28421,740,29829,71467,228973,196661,78537,27689,36431,44415,14362,19456,106025,96308,2882,49509,21149,87173,131409,75844,23676,121838,30291,17492,2953,7564,110620,129477,127283,53113,72417,165166,109690,21200,102125,24049,71504,90342,25307,72039,26812,26715,32264,133800,71161,88956,171987,51779,24425,16671,30251,186294,247761,14202,2121,8465,35024,4876,85917,169730,3638,256836,96184,943,18678,6583,52907,35807,112254,214097,18796,11595,9243,23554,887,268203,382004,24590,111335,11625,16619,29039,102425,69006,97976,92362,32552,63717,41433,128974,137630,59943,10019,13986,35430,33665,108037,43799,43280,38195,29078,58629,18265,14425,46832,235538,40830,77881,110717,58937,3463,325358,51300,47623,117252,19007,10170,20540,91237,294813,4951,79841,56232,36270,128547,69209,66275,100156,32063,73531,34439,80937,28892,44466,88595,216307,32583,49620,16605,82127,45807,21630,78726,20235,40163,111007,96926,5567,72083,21665,58844,39419,179767,48328,42662,51550,5251,37811,49608,81056,50854,55513,20922,18891,197409,164656,32593,71449,220474,58919,85682,67854,13758,35066,3565,61905,214793,119572,141419,21504,10302,27354,67003,46131,32668,15165,64871,34450,17821,2757,11452,34189,5160,12257,85523,560,53385,65887,119549,135620,312353,115979,122356,10867,193231,124537,54783,90675,120791,4715,142253,50943,17271,43358,25331,4917,120566,34580,12878,33786,160528,32523,4869,301307,104817,81491,23276,8832,97911,31265,52065,7998,49622,9715,43998,34091,84587,20664,69041,29419,53205,10838,58288,116145,6185,5154,141795,35924,21307,144738,43730,12085,8279,10002,119,133779,199668,72938,31768,39176,67875,38453,9700,44144,4121,116048,41733,12868,82669,92308,128,34262,11332,7712,90764,36141,13553,71312,77470,117314,96549,49135,23602,54468,28605,6327,62308,17171,67531,21319,14105,894,107722,46157,8503,51069,100472,45138,15246,14577,35609,191464,1757,13364,161349,32067,91705,81144,52339,5408,91066,21983,14157,100545,4372,26630,129112,1423,29676,213626,4397,88436,99190,6877,49958,26122,114348,60661,29818,293118,50042,179738,16400,163423,89627,31040,43973,36638,45952,5153,1894,109322,1898,134021,12402,112077,68309,190269,69866,31938,107383,11522,105232,11248,14868,39852,71707,186525,16530,38162,106212,11700,5130,16608,26998,59586,108399,230033,43683,48135,82179,2073,5015,196684,189293,16378,23452,8301,35640,11632,214551,29240,57644,33137,91949,55157,52384,117313,5090,17717,89668,49363,82238,241035,66216,29066,184088,97206,62820,26595,4241,135635,173672,8202,459,71355,146294,29587,3008,135385,141203,14803,6634,45094,69362,50925,546,51884,62011,83296,234584,44515,56050,89476,87751,19373,12691,149923,19794,13833,35846,87557,58339,2884,19145,25647,12224,11024,77338,64608,122297,53025,7205,36189,36294,170779,21750,7739,173883,75192,35664,224240,113121,30181,26267,27036,117827,92015,106516,55628,203549,67949,60462,60844,35911,20457,1820,920,19773,8738,73173,181993,38521,98254,76257,46008,92796,5384,26868,151566,22124,2411,15919,186872,180021,28099,152961,78811,80237,62352,102653,74259,184890,16792,123702,224945,29940,19512,75283,14059,112691,92811,233329,20411,138569,53341,109802,50600,134528,66747,5529,166531,31578,64732,67189,1596,126357,967,167999,206598,109752,119431,207825,78791,91938,10301,27311,24233,252343,28831,32812,66002,112267,90895,8786,8095,16824,22866,21813,60507,174833,19549,130985,117051,52110,6938,81923,123864,38061,919,18680,53534,46739,112893,161529,85429,26761,11900,81121,91968,15390,217947,56524,1713,6654,37089,85630,138866,61850,16491,75577,16884,98296,73523,6140,44645,6062,36366,29844,57946,37932,42472,5266,20834,19309,33753,127182,134259,35810,41805,45878,312001,14881,47757,49251,120050,44252,3708,25856,107864,120347,1228,36550,41682,34496,47025,8393,173365,246526,12894,161607,35670,90785,126572,2095,124731,157033,58694,554,12786,9642,4817,16136,47864,174698,66992,4639,69284,10625,40710,27763,51738,30404,264105,137904,109882,52487,42824,57514,2740,10479,146799,107390,16586,88038,174951,9410,16185,44158,5568,40658,46108,12763,97385,26175,108859,664,230732,67470,46663,14395,50750,141320,93140,15361,47997,55784,6791,307840,118569,107326,18056,58281,260415,54691,8790,73332,45633,7511,45674,143373,14031,11799,94491,35646,96544,14560,26049,32983,25791,83814,42094,231370,63955,139212,2359,169908,3108,183486,105867,28197,32941,124968,26402,88267,149768,23053,3078,19091,52924,25383,19209,111548,97361,3959,24880,235061,9099,24921,161254,151405,20508,7159,34381,20133,11434,74036,19974,34769,36585,1076,22454,17354,38727,235160,111547,96454,117448,156940,91330,37299,7310,26915,117060,51369,22620,61861,322264,106850,111694,15091,2624,40345,300446,177064,1707,27389,54792,327783,132669,183543,59003,17744,20603,151134,106923,53084,71803,279424,319816,11579,21946,16728,38274,72711,5085,83391,88646,40159,25027,34680,10752,12988,54126,30365,18338,100445,230674,44874,84974,143877,123253,139372,28082,91477,144002,13096,219729,46016,50029,42377,14601,6660,58244,58978,23918,88206,113611,64452,17541,41032,10942,12021,49189,10978,40175,37156,10947,71709,106894,112538,57007,137486,150608,152719,40615,7746,279716,13101,19524,28708,40578,72320,1096,182051,94527,51275,22833,45164,81917,77519,48508,5421,140302,37845,149830,5587,27579,5357,428725,248187,6326,206760,39814,32585,89923,44341,288753,284443,96368,31201,94189,119504,20359,52073,103216,179,27934,32801,96035,34111,34309,101326,18198,20704,210266,37643,27880,141873,106e3,19414,56614,167714,66483,107885,86602,4379,20796,75467,4987,5017,118857,26003,34308,114428,29198,6686,29697,73632,3739,69795,16798,41504,7207,30722,21436,36735,28067,28545,3239,11221,36031,41889,100010,19247,317673,29495,174554,6424,129725,53845,94986,7955,59676,2604,191497,19735,102214,62954,23844,11872,179525,261436,34492,428,78404,142035,16747,17246,27578,37021,33672,57944,26056,135760,2369,61674,122066,31327,19374,157065,40553,130982,69619,71290,38855,72100,92903,95940,51422,165999,65713,57873,50726,7288,20272,2081,42326,22624,81120,57914,79352,19447,1684,72302,11774,302559,161481,96396,13692,414988,3721,79066,56627,46883,21150,11747,12184,5856,113458,176117,84416,52079,27933,3354,59765,141359,2212,216309,2555,23458,196722,142463,45701,44548,28798,19418,215,29916,9396,10574,114226,84475,13520,18694,34056,4524,90302,62930,13539,19407,77209,7728,38088,9535,2263,23875,183945,17750,26274,67172,10585,28042,22199,7478,51331,66030,26774,192929,31434,25850,50197,52926,178158,4679,181256,70184,229600,9959,105594,72158,73974,2726,35085,78087,23284,35568,51713,155676,5401,27254,11966,17569,223253,71993,103357,111477,55722,30504,26034,46774,35392,36285,214814,41143,163465,1051,16094,81044,6636,76489,179102,20712,39178,35683,125177,54219,30617,52994,25324,50123,2543,87529,58995,10688,125199,12388,60158,125481,131646,7642,133350,65874,3438,97277,101450,10075,56344,116821,50778,60547,98016,106135,13859,14255,16300,77373,173521,8285,45932,37426,4054,114295,55947,7703,39114,52,51119,128135,19714,60715,9554,50492,88180,2823,118271,52993,122625,97919,23859,37895,25040,33614,32102,20431,3577,9275,15686,43031,157741,110358,1884,40291,125391,13736,5008,64881,87336,77381,70711,43032,49155,118587,70494,4318,10168,30126,12580,10524,280104,104001,145413,2862,84140,6603,106005,13566,12780,11251,42830,571,179910,82443,13146,469,42714,32591,265217,424024,92553,54721,134100,6007,15242,114681,59030,16718,85465,200214,85982,55174,165013,23493,56964,82529,109150,32706,27568,82442,5350,14976,13165,44890,60021,21343,33978,17264,4655,22328,27819,75730,16567,55483,14510,17926,45827,150609,3704,7385,272531,161543,76904,122163,52405,2039,19165,41623,14423,228354,3369,176360,85491,7122,35789,303724,4465,13628,2233,55311,118771,20713,10006,221519,45115,71021,35650,29775,7337,10864,20665,21142,1746,15080,1624,32449,10905,105743,229797,7701,3940,22997,178467,57208,389057,39683,59403,63344,63125,54847,69691,18336,56448,3362,37202,18282,29648,138224,35867,10495,5911,28814,26653,31514,176702,26550,45621,11734,4525,40543,73944,121080,27858,155561,14887,44670,30742,8796,107455,113472,56369,75581,183777,240095,133699,153299,8768,160464,26058,49078,103971,21875,71486,44888,17156,9678,89541,123019,102337,3972,83930,21245,87852,109660,287918,183019,686,10100,39177,283941,11274,24736,26793,26214,25995,77011,141580,4070,23742,46285,46632,30700,26669,19056,35951,115575,174034,56097,35463,87425,24575,44245,38701,82317,85922,281616,100333,147697,61503,7730,84330,8530,59917,61597,17173,9092,32658,90288,193136,39023,20381,56654,31132,7779,1919,1375,117128,30819,11169,40938,23935,115201,101155,151034,4835,11231,74550,89388,59951,91704,107312,167882,115062,12732,72738,88703,464019,158267,57995,60496,737,14371,123867,4174,243339,159946,7568,16025,134556,110916,38103,191,80226,88794,29688,27230,10454,76308,57647,77409,113483,66864,14745,19808,12023,46583,84805,16015,17102,2231,20611,3547,95740,250131,34559,108894,8498,15853,159169,148920,20942,2813,93160,45188,210613,45531,52587,149062,39782,28194,57849,60965,84954,89766,84453,100927,16501,27658,165311,103841,54192,207341,19558,20084,319622,5672,205467,98462,61849,36279,13609,147177,24726,165015,209489,59591,31157,6551,117580,75060,141146,277310,21072,22023,106474,63041,137443,122965,68371,5383,42146,98961,113467,30863,23794,4843,99630,30392,82679,13699,241612,33601,93146,24319,18643,32155,95669,40440,15333,34089,67799,142144,58245,38633,114531,117400,77861,188726,5507,2568,8853,10987,107222,2663,2421,11530,13345,30075,41785,118661,104786,17459,12490,16281,71936,193555,17431,5944,71758,26485,77317,20803,367167,158,7362,93430,11735,172445,46002,11532,54482,930,62911,2235,23004,179236,4764,101859,208113,22477,55163,95579,14098,67320,162556,90709,156949,3826,57492,4025,34092,87442,104565,6718,186015,28214,14209,10039,107186,233912,58877,81637,55265,39828,6194,145813,50831,105849,4974,88319,122296,10272,197216,95714,51540,72418,23324,91555,8743,140452,250249,51666,34124,7229,38592,129641,78169,174242,22464,149964,51450,14034,10026,95376,26190,120062,14401,8700,265,31386,143573,7203,229889,61567,4227,140981,2466,72052,10787,10062,30958,6099,38471,30103,23202,208101,70847,467,58934,32271,32984,36637,24107,30771,17109,73353,13650,2098,157040,67366,66904,106018,265380,107238,18535,44025,32681,144983,62505,91295,56120,3082,77508,10322,63023,36700,81885,224127,16721,45023,239261,111272,13852,7866,149243,204199,32309,22084,42029,38316,126644,104973,14406,43454,67322,61310,15789,40285,24026,181047,6301,70927,23319,115823,27248,66693,115875,278566,63007,146844,56841,59007,87368,180001,22370,42114,80605,12022,10374,308,25079,14689,12618,63368,7936,264973,212291,136713,95999,105801,18965,32075,48700,52230,35119,96912,32992,8586,16606,101333,101812,14969,39930,759,193090,27387,42914,12937,5058,62646,64528,38624,25743,37502,3716,4435,30352,178687,26461,132611,42002,138442,35833,59582,16345,8048,60319,49349,309,47800,49739,90482,26405,34470,63786,32479,85028,39866,47846,11649,23934,29466,2816,42864,31828,7410,74885,49632,47629,111801,90749,19536,18767,105764,59606,21223,10746,76298,22220,39408,7190,79654,64856,11602,82156,272765,17079,70089,245473,51813,184407,384678,1576,122249,5064,27481,6188,25790,74361,27541,318284,45430,31488,620,93579,45723,192118,22670,51913,4162,70244,35966,26397,16199,50899,209613,121702,287507,2993,36101,132229,67345,33062,76295,118628,78705,52316,34375,107083,107454,44863,127561,33964,3073,154010,190914,55967,39074,6272,31047,5550,41123,26154,98638,47110,19998,148091,50229,31329,59900,195442,19106,61347,73497,70015,682,45850,25776,38022,148951,6288,37411,232526,109277,27286,32342,9262,5220,16651,23175,46740,129438,78614,121925,66914,88710,127952,5563,21500,34521,10739,14863,191006,62956,17359,16749,67027,56284,69134,43301,35039,58883,54466,60823,404451,75743,59856,86979,7923,34273,83785,32142,7693,268986,197428,282681,17049,22346,22990,92245,107180,3357,37104,96724,49153,7683,31197,43267,82231,164276,23696,20848,188364,22309,24821,158707,1018,22514,70922,27792,45589,59709,10765,736,35218,63479,51987,24275,63588,55361,92929,81964,4658,20122,12330,44058,13065,311456,72224,8337,211229,38979,22590,138478,52757,32595,133600,8838,31549,94412,43391,90056,1585,94802,127271,6223,31889,137038,132910,2165,57616,230152,6080,10748,36737,74579,134062,50525,180532,119270,34556,76155,82394,52595,29258,31435,87820,67996,26943,183878,38007,2410,13526,180297,69856,3503,187396,167700,7838,16701,9199,56267,3661,37407,65994,23767,5708,62508,221700,67088,86978,46776,84434,32088,5612,9149,88244,21685,95151,46750,189612,2979,506311,2594,3628,40074,105039,78243,28523,6651,38058,71999,30992,12764,68261,108991,6165,26450,61961,13400,22426,7490,60890,109623,2070,12958,50355,67979,257096,7213,42578,52121,35716,65461,7516,124758,39268,302,64712,14977,1467,219452,2840,34229,11121,21602,19270,63574,8024,1532,17331,79839,78885,52029,180767,57957,6069,91265,61380,55767,8927,32881,287603,22149,35029,68876,6428,199567,46926,13412,104132,21434,366616,45060,110046,81924,128910,45886,52821,130416,29416,77342,21762,67329,121432,79924,11724,38625,81006,102033,28338,13326,3250,82056,82526,38212,21112,12382,111495,3263,7414,86274,93490,40844,30224,45212,24019,48411,71367,24941,76729,57776,3769,38114,202019,197745,31953,237533,33270,201580,255648,100798,44741,32241,98468,106931,10085,15090,170358,33154,66787,18819,69760,25061,234005,82660,6295,131975,16874,9076,4094,25005,17740,40908,19533,220019,44330,99792,50040,19619,13950,55228,24423,31253,95308,103177,184795,28590,82285,5059,3210,75525,49894,70007,56178,10580,36051,139681,21617,98736,3555,106306,164189,37352,63915,47824,24883,145530,61904,28444,11483,19837,145446,30420,112972,85939,11835,191233,2262,20705,58630,1753,148334,1197,144714,6887,11223,107667,60879,77914,4151,57417,81594,96681,169430,1784,20444,95138,254041,27038,596,7117,72808,13759,3353,126776,21074,55322,27081,36942,39547,139830,179275,4453,713,8722,71399,19204,25785,22794,23923,104114,11291,25458,102309,88396,75288,230440,206396,104551,58447,130857,37247,94734,31548,176529,226077,65159,20104,10096,66881,94191,237909,27109,37404,1520,27421,25220,113003,23423,24884,50585,6286,231877,150800,11789,3226,90004,60642,5053,202400,61442,132531,175329,57138,30116,103847,9973,75367,16452,32360,59119,21246,10191,164804,23305,61051,37348,154530,13214,5468,50403,66754,130976,50559,80515,14436,155492,84017,5472,43107,41240,2890,90431,70188,382,76234,48040,50211,281038,237007,32115,142178,1536,22761,96429,1811,31243,1679,49143,55209,17402,235054,61494,7462,77030,34925,87609,78002,9499,9027,73289,201078,101379,63544,27666,5469,10642,30029,49816,132979,95620,58086,351930,116300,2110,2043,30845,6154,11279,16727,4122,2277,27281,4971,3650,39060,61970,65951,39674,75686,38151,11370,130809,177895,32665,63725,122267,7857,39618,118483,44792,157755,178624,136994,24260,41308,22471,12404,21707,12486,30473,52781,50246,20247,39065,909,56825,103158,128603,31542,1089,41935,32744,12428,37963,84420,33134,72921,208449,42622,168151,127335,147107,46699,38216,12591,94342,85814,31423,24944,2605,87542,67473,192551,4496,56321,91819,17630,6300,256183,114569,202090,33209,35289,34897,24967,40520,43470,5344,10199,34810,14283,10381,10017,62923,49924,23233,64539,13051,35686,19698,11570,135555,120868,44924,87065,52318,52335,47586,140906,245885,109834,78668,9065,46990,25258,72022,61243,40838,4545,146387,10537,11557,17470,36930,68104,46711,24264,79401,81043,18225,120488,24746,84338,81652,28266,13776,21878,46973,1047,230465,73357,95777,24973,210160,62210,58404,110633,169651,6937,41870,9909,26822,191062,76553,27519,96256,239070,2478,205678,67955,58532,20601,50120,19148,78501,195724,110740,8249,109665,27446,30568,57631,31425,49752,32820,65504,50079,3663,102256,219898,23849,211315,14645,4359,91767,9528,12449,49366,7941,49763,107848,8930,27086,50686,9744,10447,81935,39513,46514,1670,29229,6172,22312,137280,97759,9806,14445,22976,56458,73391,34983,93760,174219,52573,33149,59747,2429,136277,75123,165263,91040,7446,57632,48633,97140,246081,84766,151684,79918,93268,120346,54059,54875,77858,32996,103590,45276,11968,19600,25849,17159,132907,42828,16817,4913,99462,103303,27395,5737,74184,20749,21160,14377,77062,131403,158735,10999,27799,77785,9320,34366,51593,61070,33746,47048,29268,36675,30262,53297,9832,82e3,20188,122292,39917,7331,18160,68301,185935,134830,15031,4935,10004,165845,185534,46923,30109,44134,122631,18874,22903,112790,26561,18549,348902,82871,140345,255565,135390,63556,103747,145055,179600,145662,296111,61661,211987,23952,52342,126343,48450,32919,44277,82185,9591,62139,205363,376969,394874,108461,18040,120885,14798,39863,16571,16794,58271,81025,55206,14640,118656,6361,44092,85970,6262,153863,108244,180200,72264,79947,38044,10050,5735,61221,80712,5471,115689,11391,11661,184257,20010,60116,30320,19327,134598,45455,27542,18004,125092,452272,1549,91523,46567,180063,156026,2608,11174,58848,37788,65907,80194,30490,5786,40775,119519,106241,11323,156297,8425,61495,2617,29675,2425,59886,112582,49142,59618,4863,50597,86710,50650,168632,27693,85641,83643,18993,25768,84284,28090,93592,36627,312804,43381,9887,9402,100931,97165,3311,173330,66805,28935,4963,184460,3201,78102,19126,21607,37496,24938,22615,16153,32862,134792,153318,61120,6067,2812,12826,12792,23825,37559,64662,202250,102694,155488,85881,149193,46233,65383,15521,106982,11358,176786,25752,39717,34208,24510,32464,77742,39371,72028,138229,60688,71386,102834,132477,2208,11548,63670,271279,28351,30338,38620,32491,99845,143885,152266,13252,2825,178663,108097,1775,78201,14897,113573,163346,62292,171129,22183,96598,38733,64971,166776,117445,9968,146393,44677,74867,20908,97328,12761,25656,26785,9148,112344,26115,99176,110121,22437,49547,6180,79320,5835,31392,43328,33377,75870,119860,69497,80273,7325,155219,43167,111173,28347,20222,3763,71752,55041,47252,14618,28088,15012,97805,194698,54636,2036,41349,6173,96604,61530,51859,43782,13361,24334,22668,24792,7070,23441,16789,3209,36211,208475,26242,32880,122181,182407,21444,31060,88459,29929,77907,12716,10934,97005,20599,31690,8403,58445,30303,22700,10336,86731,103115,337709,72556,46788,112566,47684,67089,53548,36874,56487,41387,125985,26893,40071,106683,73712,18787,40105,72992,67246,137276,50802,36790,70328,138827,22466,39263,183295,29858,50975,9322,57397,10654,24364,30383,55799,41600,23584,127295,296610,129078,143558,244131,86397,36049,1085,80677,3820,108139,5476,34767,24683,7758,13060,7239,131671,250593,59556,103392,29810,4188,252323,39404,116877,7651,43600,40338,13554,157253,39196,25978,144387,61211,234,50104,6129,10449,93777,9240,356378,274148,4439,72970,3724,147770,78680,62570,115877,40027,40547,36817,224392,64609,34795,165027,67440,2477,37206,23431,50754,164797,46018,94995,170982,27051,7957,22767,3674,27900,56419,18930,60701,41302,2692,84749,339721,61996,111094,80221,50129,1045,8153,62945,19202,8250,37208,37418,32560,79477,41106,88569,33963,36693,5892,30570,1581,66471,49647,11922,160717,29442,5643,114865,82962,95982,132098,22633,22838,94726,54556,28566,205039,162340,33216,16849,35847,221339,94851,26533,71469,1805,3804,12935,45483,71020,36310,65381,192960,34240,35165,59773,1248,46954,155332,96864,4246,388800,16129,57133,74592,44807,442014,38203,42574,80818,91592,26377,36424,65760,977,77387,22628,147610,28018,30561,98454,6969,119628,63648,18170,36854,26601,64018,22027,37279,51395,152934,21153,9430,58760,194742,5330,55115,34158,28917,174111,13171,122326,1526,43896,66094,25325,4234,148354,11450,275,18999,112191,44365,22723,68409,8733,57746,96565,75007,14196,108844,29475,88599,177563,100792,106156,86323,93726,14248,135341,194131,40126,47099,14779,8272,39597,95983,171398,65882,28052,10393,47213,40689,22120,72212,106829,34964,109146,753,648,21660,30047,17527,181025,5619,145357,4085,216883,9359,186951,24779,53931,24545,36197,223296,62628,168101,4243,107313,30321,26642,13049,51059,31027,107912,807,73550,26551,84369,122422,165872,49754,74213,234264,33151,52014,33100,87183,22365,52500,40013,23302,5652,72723,21404,26107,48434,587,94049,168493,96418,32871,70860,31709,25128,443,71597,166253,15670,70994,26341,133675,28280,75491,54756,47955,56028,26182,11952,113272,472197,64640,110753,17919,337,50642,22576,142,87371,53391,93210,126694,15285,19642,85667,14148,1506,42092,52962,33243,11970,20734,135843,57044,58880,13002,219134,22876,64754,232519,4257,43120,321573,24799,64526,124728,52579,81472,70831,276848,17403,74359,23021,182101,74597,23744,148267,12055,7976,5349,11772,67540,167347,65318,18720,127832,108238,22828,90233,9987,259080,118185,73209,79270,13775,90100,137742,90799,70569,15699,19961,9087,67475,57872,39731,8810,134897,131868,146849,19898,3334,2281,167061,91073,60356,467742,74712,188,53179,137679,92769,29241,9537,132595,80119,1041,88962,5976,40171,44911,102859,139059,104558,98987,47761,19272,71472,113864,175377,73338,10857,23402,23758,1591,139864,5644,4076,118760,16427,134198,18853,20291,100849,37423,22038,36677,19071,195521,57445,11069,31869,55718,66882,148490,44,41296,75242,49704,166810,9906,20943,122258,49112,105667,15969,10344,6408,187694,21399,72742,58970,14867,14376,81889,41856,23225,15042,56993,16074,131389,74276,72407,53875,383108,53597,37363,68993,44854,122548,430927,198279,38430,80409,12245,2981,628,2818,17760,37437,238229,7968,46892,2200,3730,34190,65983,37959,112291,87850,70827,6522,20750,73913,111621,41652,19587,2780,58668,25916,85259,18200,168962,95781,42445,102050,7776,57662,103313,47742,96358,41964,66174,100396,29069,204735,19679,27978,7479,40264,22534,61183,36081,107436,58223,14680,23002,101311,24716,124108,12908,5646,31750,40380,14215,232799,102772,14122,96775,61398,50917,12096,149880,67833,598749,124194,155871,49216,790,14677,65319,56917,7440,145744,95701,12206,49405,129269,76199,45732,9767,11058,9047,210885,11051,7392,26307,2130,8132,147526,20802,232698,115660,50060,59789,57344,107623,80343,112676,23291,9866,160971,34032,118291,15719,59730,164911,28975,2659,58046,78480,21854,66209,53863,109085,116045,29021,46481,107552,22130,18764,70254,31272,11300,52460,43933,84738,20721,53869,190840,79673,105300,7561,321817,66924,13940,33281,101046,183181,32176,71878,5678,62924,79535,56646,40303,19559,27703,93042,73368,42187,3670,37376,46440,7023,36816,109628,20680,5940,276440,275233,170848,112093,136996,14984,20226,111441,77693,112960,48577,39370,55707,50314,123404,26570,54281,61372,123391,4857,35928,246740,132507,106646,44241,7196,92258,9825,37688,51197,303141,5590,15476,132986,10955,85782,34486,26696,7991,28813,18858,39546,11703,11365,38185,5716,93555,11925,40121,60002,6985,10976,171384,3887,43394,13337,56346,6381,252336,39573,75042,53711,1028,31781,44295,95925,131713,7214,68125,43571,70954,213234,1628,8760,13391,65485,17320,56038,1710,25248,60803,57399,19839,3870,326,281556,50945,72400,21460,316244,75619,56246,98775,481,13513,55765,50427,7388,123519,32929,57908,27124,61316,101097,57467,30228,48792,10788,20402,37318,50526,155730,34456,158065,145305,17832,43733,64052,4506,35072,205355,177028,184004,187081,68616,35938,83703,10367,36892,93186,260137,51934,89970,4985,23445,26755,21558,7948,78741,23376,124405,85594,68596,57536,49351,12619,56593,132668,99924,109728,71844,71935,196018,65464,17617,14987,89701,143773,33997,8687,22701,33258,2914,4436,72108,85610,9671,49067,2327,82988,1361,1672,44033,35777,30269,24057,10605,82236,616,15793,13919,47249,112086,116698,9484,80207,90574,33304,68624,93127,56101,42210,160929,4827,38995,38095,4701,125119,5027,33680,9236,231236,14135,87837,23318,70261,78893,30151,81482,14332,1084,74256,27532,46644,79185,3148,62615,6981,55672,31668,36825,1849,14536,37446,14738,23779,43058,162749,72199,1168,21346,5592,85932,85302,9668,18351,57135,150360,2080,228015,77953,34670,119302,151751,31009,106725,84265,45214,59289,74178,113071,263206,111009,4021,44449,188119,192629,123592,392506,292847,114487,12831,205858,9852,20780,79648,75767,357014,97721,18166,21005,67950,33226,204009,16536,2987,11335,66717,144910,47950,17262,55060,15063,2934,51038,26775,178497,66008,3427,49433,128592,20036,157553,63861,3089,23015,51210,28696,35933,49942,71135,231518,99620,17248,21835,176536,20676,16944,38700,165831,233253,295625,36723,13023,52745,10907,19423,67972,125868,95473,82875,1183,108455,52685,33417,64095,21433,52438,33191,127809,44505,211823,7810,2752,95548,162031,7185,91196,47563,61721,33359,17897,23682,42806,178101,22874,49707,199897,75419,82456,8618,11171,79712,116847,18783,44190,46564,5346,59046,95032,7893,14916,3214,26800,24172,121453,34362,10250,17408,18888,4840,68696,22831,13162,36005,32512,14800,62357,41723,45046,27247,37486,5372,2564,34261,298500,66509,133920,89138,31305,117697,19097,108304,81386,84106,23802,46411,63304,946,51417,41777,41041,19501,115864,60743,294354,37955,94165,18116,1156,17937,20645,57114,90804,58042,48643,92288,9861,2557,88546,61333,101008,12853,5148,87856,4152,144503,73841,18718,9789,147565,10846,42085,12789,30223,8993,56352,67203,2448,28215,6052,23540,126319,75933,36689,80235,23231,23561,21383,38800,77548,102798,21234,31468,158608,46188,63960,191679,8051,67014,11185,170078,42186,28827,34777,41930,212079,12421,34750,24111,110344,73918,45171,70826,141949,40063,23979,24254,37309,26724,27179,24718,83648,54938,14591,17425,29525,102675,48975,48654,12316,8929,60640,41709,50168,63264,89812,50716,48632,38755,138583,160123,55579,71829,24230,233277,46322,39650,166388,34718,24108,98252,7031,106695,62498,18258,35062,217827,78731,34824,33354,19520,60852,2432,60224,8587,2836,62955,702,20227,42285,40560,95592,62486,11094,53035,143291,18842,46177,77994,1770,9657,107422,172915,32655,128716,25886,25164,156740,119928,165875,85817,11007,89110,33956,12652,65156,180266,8494,36889,19958,20955,96,1264,118288,135769,44754,86671,5632,19026,168220,289120,33569,93821,66144,70635,7687,5642,2714,55445,56636,71545,184182,93133,7332,37389,12643,52315,22729,11014,158742,17050,152889,50178,34601,41945,52136,9948,26914,63548,95721,115951,40759,8960,158258,38938,49232,48325,42234,81523,253019,66128,40978,20048,238048,38760,62928,122560,118532,43687,137472,163689,26680,9878,17448,51035,16211,60834,36749,29178,14241,59868,150086,2305,26477,42422,34342,165341,83279,33894,14257,29928,12743,13957,125571,89134,66712,10952,16507,147839,30146,7249,16565,45399,39874,114565,215780,31990,230881,171477,102,196546,44538,10880,84948,281705,86651,10617,31395,2342,453658,43569,60561,132901,21845,17727,58556,258242,22262,58728,4008,77997,11806,37431,30599,81375,109137,185787,114085,217292,97453,169085,30593,60212,11544,102056,65580,2384,91655,4855,95725,7295,157994,16228,20669,53276,141590,105246,17334,25440,76067,17967,39321,38911,11362,28559,63807,21627,26468,85816,40120,1025,15234,58319,69516,66512,124548,75845,78873,22137,46681,51242,85683,32909,76747,35555,43396,101465,1765,73094,1077,2962,39028,66777,57831,42048,15828,13962,36041,63657,52412,5242,58846,2141,5506,219012,134451,3936,182230,17558,17153,152237,22621,49377,170216,35257,68233,65374,6510,11126,212151,7184,2480,22517,3437,33073,30156,16557,3768,55067,86829,91e3,12350,148650,66017,79424,70885,49066,28250,21369,51213,34533,11510,3258,18176,18465,84413,6315,36411,163765,4346,356,107618,598,13727,285026,162695,8749,14583,7132,63521,184253,32378,25991,5604,30961,53675,4874,84693,5086,34811,26978,56564,7904,33519,51221,113942,69253,6664,125563,22055,220680,102008,742,51930,19494,176108,44424,35123,13025,75685,11759,74335,22250,181453,131147,16984,132115,154311,11991,76452,52609,85351,196,30969,9198,74919,2529,56838,71779,29187,116304,3504,62330,41190,86153,28393,254926,104228,105189,13264,84359,3574,12415,8534,57147,10175,188174,59504,60932,66318,16407,107921,17638,99103,49278,28403,39786,145865,8462,3558,43406,142271,29139,21989,36552,93955,72365,7176,13556,106185,37957,321774,17782,129017,51154,27938,24952,1935,39366,2791,33489,41582,56078,24558,9311,5449,218786,27808,190429,68013,36020,86003,29735,3404,87348,119357,115714,2324,86796,81973,40992,43376,93621,28784,16808,36367,2517,2909,191926,24978,55303,53308,205724,60068,3098,21375,64784,23949,26579,63121,12319,80145,39967,97861,6757,70143,67642,37082,34698,69140,122883,46151,62187,80934,429,19437,135071,137885,222647,13331,154065,327,61778,74257,40116,37493,14855,85079,237641,42342,102164,199965,71204,4662,29368,5042,113914,122214,8955,13149,102503,43173,5659,163787,69003,307084,63392,171080,21390,81918,86666,36622,24126,28887,5736,28054,207170,163428,79891,346467,95363,38980,111806,80828,9200,19288,294896,114468,87405,111715,141705,7015,72754,68463,48738,243147,33397,101210,37051,98801,82847,20397,4940,185559,18716,54718,83491,11725,40803,1128,12128,23060,5174,7745,67007,46701,1571,27807,180186,256996,18975,16837,7877,212758,250379,15440,87954,57755,24719,124057,83461,258,50864,8874,29038,71289,31627,15429,9005,4061,113851,107716,82819,13651,79656,117851,17539,111446,12938,39724,190787,4352,15402,21070,62708,8539,23777,73853,13552,38810,86117,16285,56400,1718,75342,142863,29033,378,110113,180321,32586,23606,26393,160984,207987,23783,8406,16904,24596,47274,11693,46539,60524,78595,48423,31718,20170,9009,146268,15183,191060,172765,1349,138436,37365,10970,40509,225817,20021,70394,152138,21541,66559,66544,89352,2725,17258,91345,7313,3815,115868,8660,40362,4071,103524,39388,118275,21950,6549,38226,32754,209574,29201,43495,18028,20296,40597,18370,47520,202450,24134,2219,8195,69545,38041,136934,46374,19041,159811,84865,58620,846,98749,13569,30714,97246,32186,4479,27355,92973,35214,151491,75963,37631,1561,27200,238083,23182,60756,12291,25766,39355,102333,87362,65741,59906,19538,201575,48772,102938,24438,292580,39964,66366,9004,61379,50548,37622,38732,28379,68180,76622,17488,69849,5963,7219,48143,43413,55358,540,58691,29506,19245,52193,48621,5518,13048,118625,44755,191081,42061,89197,2259,60665,66994,71210,51232,3585,142096,55024,7892,8345,58653,463307,65658,64319,137941,136323,53499,12746,43492,6978,95163,29925,60175,5128,7352,41463,184756,121146,20473,18426,4598,5309,54580,14277,121151,10691,56711,43880,63409,76682,11830,172218,264898,32632,66536,81062,31649,25788,92774,60222,11100,63159,9432,224657,25240,53613,152,138620,163829,2397,85345,12501,37507,64932,38575,43522,65789,80198,78796,35226,3851,108891,73311,3060,28391,93671,39663,46142,30982,66041,37281,68157,26553,71872,81142,211527,39747,118119,22695,2859,11066,20232,168911,7933,197005,17066,111071,44434,133994,120798,12766,227798,45756,132852,29917,36076,55352,65281,129800,41958,18944,84678,18580,168093,132621,39997,54092,27740,32354,3770,114118,103242,43918,15899,18574,145944,3190,123469,219903,24169,100571,62403,16776,92779,14535,17168,16475,14304,37231,1712,28218,242754,61688,28980,1318,51359,222657,99200,67989,31772,23932,35351,201251,49041,27306,19128,40135,3986,77333,19649,120683,151927,21081,7076,78375,77501,101599,8011,89585,96715,58179,5378,102138,106793,26051,217276,4197,16297,27014,46721,13322,22806,5278,29629,70632,9647,71519,58818,40603,128530,8903,36770,56900,31483,26935,43845,34265,34920,87658,6114,84767,64250,47318,50720,19264,162514,33357,13117,6705,46696,75032,71054,87004,42035,69138,11903,99854,102328,19611,34525,69312,6431,49842,101600,133178,108751,41829,89939,225664,48916,99556,9195,130387,5960,36857,116724,53518,94002,39077,53996,6945,22261,64291,8314,152785,57588,16522,9091,5048,87671,35441,39509,1945,12423,158923,178413,37549,14095,1475,73188,62878,4819,24012,68534,42606,4010,120809,57497,59564,101758,103718,32701,80116,12345,95834,46918,21468,53213,15665,31200,3867,5140,96013,250744,21016,10069,13968,35449,180829,27683,39704,59956,22893,3115,26293,32785,75934,62445,141162,62720,2018,83638,19949,114012,95006,3330,99829,130935,309272,9565,55874,121727,37017,23586,319858,40970,27602,8625,112329,61060,100088,118525,25922,16232,1907,60671,51583,44553,80993,5262,94679,8676,940,20736,11823,3020,16476,12340,152600,97416,3703,25744,66826,16245,16876,46446,84798,74227,176020,45192,61955,75496,23946,23626,40372,26036,6149,11822,30582,16541,41914,82385,232823,40921,80773,14930,3631,7517,39619,4348,36180,126106,138939,62611,1477,113512,47321,25052,14546,118881,29060,23589,128322,36795,18401,137921,104699,267929,36194,172791,18113,4766,188215,30083,332586,94089,5805,77909,22194,68234,154976,43220,40660,70001,184893,138095,11128,103010,22663,5108,212615,8485,5565,49222,54614,26530,42639,16319,55062,152662,105595,21114,22216,10294,68158,10436,86950,7206,62115,3977,3657,59874,456,118617,18156,106663,112229,80992,17442,8217,55551,5133,34344,251927,51153,39364,201321,7816,66803,23057,156724,145664,14276,95705,979,2796,6875,13429,212525,50602,26276,28284,3424,19465,52397,46963,31420,51399,206476,92317,48851,637,100820,83349,10317,60227,21972,6908,282439,32857,224767,95629,83882,42106,87338,69757,29840,68709,37665,45244,114577,49188,175943,54009,186746,106158,70168,3358,234002,50555,9221,129338,9562,20118,32923,78479,118280,65752,4977,10474,102174,60947,129006,10570,83451,8598,8078,159367,123785,80438,16742,5905,5281,181513,42402,6977,163136,93179,42191,14968,50421,112401,105440,33456,57347,121611,4221,94954,36517,24046,27796,6255,33394,72990,135408,116627,1233,57874,25654,95419,68156,401399,313338,55208,45573,93124,119251,47200,38196,11909,130667,45391,73904,64964,167846,4137,115606,52036,62214,7969,160925,7187,1132,134835,40309,73195,64494,80472,444841,61111,26500,45323,40743,53625,52797,22659,15631,29739,36706,28841,39147,102836,26794,10536,14845,87305,45874,12241,127587,83833,57183,79722,30844,41304,84655,20825,92500,3722,25655,27811,10157,81634,31362,34088,92487,70123,22190,185100,72658,139035,192523,88241,2078,230490,44528,85638,100198,22088,29982,291233,241062,13865,4445,137791,37835,107218,31726,19718,38234,72528,23046,19177,66695,5109,17251,28077,5617,21554,47839,72425,133825,1486,73065,181275,141508,21768,62971,63082,2512,34200,9904,120309,6392,91243,68416,268253,41199,116757,138551,185526,41246,28986,4093,19057,17295,4148,245766,122360,35356,112075,20301,75441,10998,7977,19769,62922,937,63547,100196,26427,157820,20983,236696,22935,8140,90315,156004,47204,140973,7726,45097,52725,22636,23436,257282,105247,522,88389,216031,202204,46812,211666,19693,68828,81691,45925,11256,30292,372,5236,167826,88328,232776,151611,5360,82104,18841,80393,25465,18285,20320,72377,31730,33160,45803,38715,27705,37379,24163,18360,103586,4015,32305,269494,91252,20080,36567,54650,7797,57073,12650,31164,42209,6375,261663,105528,81661,106002,2800,5375,17247,43151,4442,15727,194619,100855,144898,62320,78465,39929,16454,1967,28311,61363,17219,9395,8745,121445,76939,80385,162380,22009,54191,44248,16299,122830,48151,74429,78291,64755,14238,44966,2511,17712,67954,93583,829,105899,49935,84750,11591,33185,85447,42717,27409,208542,28965,62052,52525,5597,25694,65594,16343,63224,276188,12475,9331,127507,38522,57287,24128,133161,79723,105548,133695,48917,27558,43278,46520,13778,141954,110785,83366,17715,46317,105763,66298,147013,41086,94180,16478,220447,44611,730,19722,78975,117889,125643,26254,16574,18480,65006,15806,38549,246418,46052,36056,8440,34984,30170,3163,59800,4458,115442,4283,41970,33507,104078,1653,22,121158,276486,3655,6338,24048,133421,23641,2161,24422,36006,8086,10675,181474,12307,29514,59143,14729,52509,87128,122470,19446,80852,33314,24573,119864,14237,9652,57779,6612,51851,15284,98871,90581,124466,156831,21190,22015,71380,161906,87247,69201,18392,17908,108470,72962,40719,14338,17911,95260,43339,20610,78916,20710,72451,11315,31448,17263,58853,178878,48111,116002,45497,80506,82605,85880,36300,121755,25215,36118,301929,88728,405223,276136,553,34704,212438,49970,78329,922,20711,25036,257130,38295,145369,18128,15385,30829,55656,48345,8012,3561,28004,122041,192900,58338,112508,41085,29976,87040,47117,23905,4336,92061,138880,97407,42083,172121,6256,25192,172671,5,93568,1420,12677,31605,56743,40620,6015,78415,231077,31298,80026,13902,19048,24924,170586,32955,176119,87859,36731,6773,27711,24658,26475,115216,133207,93250,95820,88522,8317,5714,124047,55219,86860,19677,23961,22928,162209,8904,225992,359835,56084,96201,29392,96558,86071,93643,55114,13347,8183,95129,82012,2017,123336,34219,115554,157159,47747,101684,41008,18735,193781,104151,226906,7552,179874,124113,31159,21162,44010,14771,51268,166128,31382,73124,77438,92830,205709,12113,1292,38937,13114,1334,2118,15597,69581,14449,21934,76618,48728,67038,14967,51495,24243,87736,147249,26720,11119,46063,43749,5843,44147,152629,133428,65703,14269,45604,57982,28672,55616,45957,8438,95433,37698,220862,132034,39456,61870,4161,26501,73560,56418,9845,4654,20916,10456,88920,119358,9015,65931,96507,48029,38534,21676,109081,43078,34943,25089,6131,28766,23665,5477,10255,16695,67,45778,42443,42770,29534,23733,100513,62617,42630,48746,14191,43753,50295,26007,8792,57243,43119,54725,164253,58250,112304,131796,25165,4651,3188,24831,47748,3705,19540,13211,102095,5593,18699,23666,32005,117571,33541,60584,74573,86311,99443,25172,27222,168938,7143,11853,53560,18834,19960,86522,28217,53266,117700,72989,34323,18721,66450,34346,74056,47217,202002,46269,9429,68582,75458,37823,82843,96652,32549,145144,27958,19820,158086,31955,201406,135379,31207,192545,12950,51704,9094,248263,76147,64028,110009,79407,89345,99284,223492,47966,26848,15359,201137,2861,110507,71231,72297,31851,118777,71039,151051,240855,16333,50766,14727,7939,4149,80908,418780,88378,59276,1327,7284,38576,79814,65820,42199,84860,49574,62596,12396,70598,40117,8648,7994,16836,7630,14047,359699,106878,525,29037,28064,13380,11675,50669,74216,103539,180314,27449,56299,172344,19274,7301,246099,32043,19422,36506,129317,6806,30140,4614,46639,66926,932,86600,6322,27847,233103,10541,39025,34887,3517,12972,26220,2031,66561,115015,48658,47596,12714,33845,3893,16165,35237,89983,14769,11962,147224,47018,29977,27979,5552,82338,86023,131368,1218,24853,237840,132193,15455,40873,3668,65351,53388,15229,59889,272245,47934,11858,34347,18038,90853,86981,300602,19343,114181,29362,84921,6095,106059,79472,38015,1206,48741,6208,8e4,21916,17423,6002,108083,24479,34931,56661,9511,26995,100694,163853,35997,81254,58321,18919,171890,86877,91341,74503,70477,53412,7027,59281,39892,131302,5864,15947,61301,67466,162369,47956,27874,35624,282324,21270,111847,102548,41482,30955,116737,28264,8592,55458,22301,75090,29821,30697,51709,3041,19208,8038,24634,30467,87509,126428,19389,18814,152686,20701,83474,45832,80891,105808,11378,153223,120770,98186,150633,49838,9141,12755,30962,5260,74490,21256,31678,65062,33326,289838,187831,20595,89768,2805,58535,10844,70085,12090,2451,138068,98544,24461,4511,6754,41684,28203,3383,65355,82833,30161,83924,234361,128424,28921,222594,33975,125491,34069,11508,67464,144226,41850,98703,34371,7901,21254,38398,65651,23549,53883,213340,123269,12028,71764,177701,28758,2623,68395,11549,15232,68603,9660,63116,36079,57093,31198,20475,48467,89984,35619,186847,107469,31389,43631,73867,41949,68841,114250,1605,30564,63403,17588,27680,99533,12641,70325,50428,73426,78379,11855,91651,72081,91720,60198,15743,12065,83398,140046,6761,46598,45900,5068,886,62448,148968,37347,19405,9680,15819,43496,63370,75667,163700,37639,3633,22774,34341,183131,134335,37200,23915,7054,14194,12970,26438,13350,285521,25594,8219,104410,91039,168804,138480,149734,15907,33818,61132,60082,4622,110187,56736,13551,73571,3945,73463,65498,17758,263266,17593,2710,27585,54469,38200,45367,63754,28881,3473,12791,98287,31895,65787,4463,94536,24951,36332,59901,28803,52130,86403,7668,181822,74831,18977,9850,177206,145485,109798,7292,31421,26280,77211,58511,12507,127004,11113,147,8729,56208,43066,79926,129937,31345,83947,39915,46146,98763,42566,1337,13192,18323,105163,80570,117753,16555,72883,11077,159438,40764,70933,83329,26066,12276,72059,21655,173836,126713,69454,153482,91585,70644,102558,110483,6764,127864,190133,3961,101798,20945,71138,82402,90884,69669,44753,923,16939,59700,164258,25969,27082,31399,43846,6306,246093,51342,6153,151581,202801,182731,56475,162188,89426,141356,14355,121815,27536,28023,65257,77523,106668,127314,24947,12790,38796,169698,23555,10725,44573,183083,42088,62716,43265,105958,32050,44067,50118,1668,3874,6243,318411,16599,1691,94999,52378,28671,216728,123258,2059,34969,69225,5913,136280,171443,141515,91662,22175,135282,80020,92270,1663,4808,4482,3495,34691,5226,109830,108512,17342,107488,11606,123190,100247,29666,146527,113014,15794,30894,13224,39585,243192,22351,9903,7836,47699,11078,25468,122291,48821,26780,122679,75521,81450,630,4895,92900,55074,74293,17441,3563,111657,103102,51613,12318,52370,36191,68245,34269,40445,41354,122901,168604,182500,62012,42557,11259,24428,115113,86345,12362,3909,78430,86852,134602,20459,47853,93879,22577,7659,3688,38555,13349,17381,56715,91639,12493,10895,92438,3142,37057,28928,2004,36427,32268,34222,209974,10432,67436,41989,173518,107930,27079,62729,30908,55558,5828,45031,14902,53546,8204,144263,60255,14520,88212,86582,109589,69356,8064,47449,8505,66558,16886,4844,52817,111260,215129,12941,91118,650,20770,6273,73089,40618,62790,2873,35002,14023,97208,19386,102646,36993,143736,135457,35385,113601,17893,32627,84439,100619,56016,6581,57264,172160,45452,111710,203627,70131,24100,322787,1996,35665,70078,22358,90922,83658,4097,63200,58499,14542,99153,52159,6615,12414,63415,31986,16823,1579,65405,137809,8841,16898,48082,259,33014,42375,12260,179850,73667,91389,98882,29532,17311,326251,41092,5928,20742,44964,48019,43505,9317,49265,6643,192712,48424,163487,19861,20113,70848,31928,105333,23685,78563,14638,54755,7158,24142,44018,20774,125255,20331,24280,10163,1285,2336,39851,4299,117269,46714,63816,87779,159624,11731,9971,990,137317,108831,50994,74554,162680,23640,131597,146962,170620,34829,91205,21184,1913,63616,18427,93136,156592,17519,67565,115882,138220,78622,88535,18115,2711,33554,109492,54298,971,24914,25863,36363,45715,27099,194995,14299,178181,111488,72395,322385,157719,130787,11897,81843,83999,11369,49280,118604,40922,61332,110343,53407,75639,40582,300440,54722,25637,13694,48248,48278,194521,56203,52779,48783,72627,10953,376,16733,280238,26351,230789,15132,25168,137270,3588,63704,73376,94031,74284,19443,159557,9697,39901,13351,119050,15406,146455,3460,29556,75195,37673,102524,92329,47289,98413,15311,100684,56345,7116,95480,11590,7200,167,23610,58426,17730,136656,27944,53151,2701,8824,103124,3017,90744,113588,53216,79736,65940,26931,498,29568,80540,143543,21292,1740,59268,16561,180816,42323,50174,40890,52866,10703,57169,4700,17191,4424,93511,49698,166650,26972,48631,165169,82879,69326,202970,4007,2376,231325,139592,22119,62851,37504,68816,58345,67398,186643,43331,277416,53749,15746,23102,17432,4793,151138,48822,54265,48203,198688,14305,54287,2291,18018,113378,123260,7180,97549,87027,120085,2920,76080,8190,102005,5641,64580,14955,59802,54028,58884,19367,81779,412567,85957,97053,103637,78871,29364,27637,141728,4767,30686,112738,130146,42745,12730,105040,14844,232,210944,36581,152317,135543,29744,3129,55647,58149,46319,27265,17499,28005,59948,7170,34138,5702,293047,110892,408,91760,218674,18469,46095,81403,14389,4610,35672,73060,11006,74848,104820,118143,190357,20043,105358,141735,5115,27093,45924,123073,52599,29433,9616,238350,78610,24851,58858,26769,31969,24613,18294,4982,32735,39639,143563,112073,202205,12567,4873,88601,44897,81503,101648,81362,34662,85277,17574,48173,21435,221188,40215,39576,80786,26544,64668,81841,10731,37733,247986,149188,127703,495,18382,54388,72446,43071,30974,198723,89608,41360,190,33045,8386,31658,19992,237838,119015,137622,50890,100913,6460,116233,267230,26621,104129,65114,14190,41542,14888,85962,23342,23041,26453,43725,71809,45186,4770,46452,53894,56616,221286,18973,9038,109299,55365,19366,26863,18808,60909,69353,41738,83463,12100,68561,72860,3980,13796,49340,12332,31311,27418,4255,53430,18976,45523,510,14224,30477,26581,4530,3651,101663,139840,22709,150861,31996,63923,120623,262522,3076,10528,2929,14672,130238,18087,9816,121894,100308,25085,55111,14565,18952,53293,2042,369988,23674,61789,133529,28783,108293,35477,47119,36448,71049,40015,33055,78598,198442,1833,159937,40654,77444,189245,113153,8621,18599,38553,35223,166072,2375,11659,21786,89523,6032,12116,63046,159398,18454,3678,32521,47626,11411,103527,38896,42946,15696,26370,10185,8413,37080,165583,4331,63555,14907,72220,50056,6623,62236,36565,49783,10049,17503,100581,55951,146244,24724,9626,17969,25524,109300,173965,99994,101056,46459,43647,53737,277968,8347,123521,74858,33829,44762,77574,877,81377,222525,123532,30602,43881,53145,2973,16284,81940,61281,127044,63620,9875,14756,114829,19032,9202,52759,119141,23928,120551,19607,3599,33401,76821,73233,117430,39968,36539,7071,5446,121735,194059,15206,45283,6706,15603,65615,1207,165723,92275,34773,104447,8396,32353,205240,164323,13600,60555,79205,25532,22907,33410,57480,107111,69630,32137,47832,70913,33161,20321,2371,117348,10714,86246,1625,11763,17900,268,78457,99175,97940,101092,86660,32221,14041,128504,125080,53744,124263,31017,13897,403,31859,21964,5633,111630,5547,77329,17961,18241,84995,25984,12983,67491,62168,47262,5241,297,51191,7351,8967,147212,82060,16821,782,11033,82431,62957,5026,43459,77963,203477,53528,6247,191852,87774,74164,215654,13467,1522,219964,28589,244104,16242,117821,67725,72570,156792,17186,15979,26990,44128,193014,35276,57125,16212,166451,68017,6905,77608,16364,53777,75921,76426,37975,26203,269296,64099,84122,12077,38533,830,4407,20139,963,43028,38902,42911,37503,83343,85045,16979,1165,60835,137387,58380,86990,110066,134540,56331,193845,81238,17922,163093,38744,110641,12502,56404,34862,26865,125964,12965,111648,25547,7771,27196,136980,9555,29551,107158,57885,18831,37705,35505,101742,13970,102109,62548,124657,23328,11124,89592,146376,248050,6241,22033,18337,80685,29898,11908,216623,67721,106162,146610,21377,15085,91552,42041,62560,122532,125336,102365,121537,142559,29693,223919,11515,110495,18776,22494,5895,185059,103592,229351,51220,100102,37027,257855,29359,54123,36066,106493,12244,79258,32002,432,56205,94836,90182,6726,14762,29391,48938,26864,38083,60364,3310,60192,14766,205567,57504,110760,22649,24666,46333,21517,3430,13135,28873,27052,158809,11597,20529,6695,23138,22960,37137,45574,6545,305877,43423,26153,24769,59844,14501,10430,134352,56169,13213,103432,49523,35181,13435,12408,129475,64620,230854,77390,51990,15653,83248,33466,44571,117828,51481,2187,10559,68019,18021,54895,48247,18354,33737,4554,108595,37288,39767,116707,9175,3726,108877,21616,83684,49862,1938,8543,276466,20134,108498,48770,102254,31914,131520,185291,100559,51890,209,19526,76471,50544,71814,99351,8172,198526,28816,20419,9109,98389,136777,76479,75596,30635,165417,48216,120220,25955,211071,39314,24308,32164,2559,146280,43403,9233,17947,90585,1786,86920,125662,2457,64741,32152,32918,122882,78538,44001,31723,56426,23375,103172,88177,145697,52506,49319,68016,31664,41488,18486,110400,7030,28241,986,109199,19900,42147,56864,65287,49183,7858,24e3,30453,840,16673,25907,68916,89927,6309,158335,36407,199737,130464,13137,59603,201778,195292,21015,42466,179062,172561,89492,11075,180407,31868,72493,20998,60217,9865,19530,39274,130266,54539,21623,12535,13505,40641,73375,4087,85633,2153,3117,70680,55788,92096,47509,98493,37490,271936,151475,3032,16171,96642,34106,78425,125761,19591,3366,19316,54508,24183,50786,194248,91528,33253,34622,108355,41741,705,3814,3883,108929,13203,67831,10142,59754,68208,29128,84820,56880,38794,24972,48571,40821,40476,18137,164254,24064,236309,79181,11282,395,39169,2013,51587,28551,9645,701,109513,115899,113566,12762,62045,58322,103726,41343,40866,244102,143816,2490,70346,40973,52618,15412,30720,104315,38917,42027,93676,17513,107418,20706,123890,13399,97727,24044,87962,65606,44250,98044,65276,74790,101473,19350,91570,1326,87790,172042,7577,100813,86896,85891,41512,108130,27794,14875,71431,12835,156250,58135,3759,22476,42176,115873,34686,56523,73643,108505,51491,20838,12721,32863,45700,29496,13700,34294,55360,29206,155942,123812,7706,163234,203,132720,49358,144431,8130,175788,35818,3270,76832,25710,54095,97274,28779,94621,74396,19092,128242,58067,20885,14670,93255,15107,63291,23654,126900,129421,59294,262659,9798,3251,67344,28600,44629,50672,29072,26999,31526,23183,49175,165843,175455,17282,175411,32022,45989,30298,90690,78118,83156,23749,35636,31317,7069,80381,94561,133756,14960,97404,6138,41065,78041,32843,16601,34123,9559,146529,123377,96395,54441,42012,84257,123541,10745,22139,106459,11720,150883,172651,154996,110538,4728,53447,25704,2009,71152,119354,21166,66604,1429,216162,8637,122250,63520,27180,29172,36124,276428,107787,77184,4680,14952,104903,24418,14793,51561,52931,8371,26342,48526,7118,92066,67280,40653,8847,34597,105438,14198,50163,61188,146286,50315,41205,170829,161496,585,197359,95056,1687,365794,91349,48507,5804,49263,5146,104902,96365,117343,132222,46084,96919,16875,8073,262381,79982,52663,13928,16056,153908,15145,109256,132308,18763,24904,167644,13618,40750,18686,147124,114709,150038,52849,2938,12568,48617,8778,5459,44202,44591,74914,17183,248689,13878,7822,80060,23116,194037,18487,2067,7798,43077,33678,244028,31320,74273,2794,19466,8218,36280,183997,48124,19416,29656,19280,98734,7715,18311,30701,133602,150307,126956,7378,2933,79903,13178,12593,86571,26604,92446,13574,44205,65699,427599,21118,8245,14407,27877,47936,33542,7916,26460,117762,21596,37818,2249,127359,209394,60044,47677,308089,36791,154971,31417,6998,150042,174360,12255,43009,29335,48739,3912,101398,53340,2580,146939,151295,45360,125275,15273,45383,27456,48761,23314,8750,60801,85823,104759,27894,123685,66968,39480,26917,55290,83305,2696,98390,57569,145853,340733,4919,20024,52268,30884,7413,203685,70989,112855,4129,50536,349518,68205,332641,159581,135361,236026,37563,176404,64899,6578,122033,63871,1850,85234,82089,66124,74145,121098,107351,12687,36881,117334,13136,14698,85933,93866,18047,32620,310,15094,46e3,88451,23632,36645,27940,87618,80520,58892,20976,27702,140090,96075,67841,103292,238964,87778,107338,17019,83427,67522,7302,8261,47570,116787,8730,80484,61772,174422,56005,131193,52875,14588,28471,59817,9586,15720,158155,51307,109734,15196,11025,59331,3884,52626,102602,84797,25158,27314,4437,20488,76214,189248,35023,114952,157376,2827,62439,102878,129749,36405,10329,109339,108633,36662,1254,13267,5470,87105,58004,15397,10434,159667,21864,52022,179464,3013,32147,31496,116832,18494,105502,129227,107267,50033,13481,9954,24267,22141,16257,116154,36185,950,115685,11305,176708,2048,178671,112573,287867,162328,497663,95170,50979,193861,50987,30368,136257,31830,46549,15119,169876,23788,17462,249887,57377,1949,35448,14791,43769,210091,3783,34612,282103,88380,245190,5457,20491,98908,11402,86899,117916,16028,162584,60644,320177,156096,31065,55876,22e3,77655,9992,23397,13757,317623,63978,215255,2443,17648,93231,27388,104529,93807,55505,140477,12046,112040,70887,40152,94365,112353,25063,114679,266061,71248,119555,15589,2244,617,14129,211431,70110,100652,7777,4383,85911,89221,21010,120615,58357,86405,37554,41647,18,15143,69662,60491,14714,186134,148344,42347,5410,168175,44535,42449,343894,129417,99682,20659,27272,140483,63455,222159,17536,13722,42637,62324,11976,114691,148109,2283,32057,182393,4295,147364,33705,2075,44303,30274,28331,63740,69740,29148,10346,44862,33716,73937,153333,12930,38784,247159,2515,41053,20256,83368,256189,54639,115240,5096,24661,175419,153552,26516,141,138176,63885,34115,47222,55709,2765,28479,38875,236608,12229,22921,77291,54426,45388,2860,57787,114579,295139,105782,17826,71066,19119,54364,69385,16568,12323,28057,33346,34919,124763,155533,101386,31644,8627,49001,303600,29868,63213,9103,77280,71333,9696,138789,37059,24823,5057,21352,32368,114208,56803,19424,10445,58514,8661,209508,26187,171838,10460,63454,14016,122504,41328,21329,46618,32493,38225,7855,31763,7945,29876,8734,6438,24205,97490,139977,130740,47323,33195,85390,57194,13813,60600,21313,96251,7699,27584,170521,139271,1363,4402,336738,129223,84983,69150,13147,3590,163929,207225,155260,55916,20288,4503,8398,98490,11773,27512,37113,84976,86558,28365,11756,116005,182148,13733,115313,47644,67208,85069,9347,14995,226141,14704,101835,41159,35314,13113,63526,214039,29978,50446,83339,17440,129441,72522,118641,97816,24907,73844,15717,118884,167255,96509,162793,30847,36849,51297,78974,77793,10427,1873,2972,9999,35074,28190,64297,146836,46298,60038,163007,108919,61219,2403,75022,127339,4233,110389,69022,9833,128097,88016,79390,222936,22570,94657,28462,56956,38803,81536,30474,152794,19566,16481,147408,74574,81895,20731,1918,1366,76367,187321,54494,24366,21690,61696,33283,107477,77499,31112,414383,74362,18463,218441,120929,59848,258629,201924,69269,454,19989,13054,59894,3623,58908,20681,35723,78523,102680,38988,184112,108087,50944,132704,52966,21699,18860,96349,201411,82697,85395,95658,5093,6427,177894,44191,32755,26961,155739,6249,31310,81030,26574,84311,120155,86730,113535,7424,48888,13516,45747,98098,20077,183995,81945,43210,26704,40420,75831,45648,11180,6855,57927,65528,124096,34851,2598,156633,107572,127352,38169,123845,60142,62722,105584,232364,23211,68120,1601,22169,89299,747,258039,80572,7258,152249,11862,101204,8834,121434,33761,19175,133142,46343,40178,48723,3589,41977,30210,38868,62257,10087,82658,87827,90646,16415,47552,351723,28298,72225,91146,272760,1701,11295,1652,109651,300747,51863,198800,29446,11794,32345,37538,22356,33102,37590,113544,37970,11478,179743,25454,103417,59905,221970,105196,145604,7817,164809,102360,16974,75840,255333,56902,6659,1954,645,59400,67769,7689,18675,5215,13793,20536,27852,3387,29523,259718,16860,94625,43143,29245,15848,233581,22685,63631,78557,22836,133302,84513,1348,51826,47129,98836,58284,1830,1749,94642,10933,6145,12506,10975,13879,103781,144434,10268,28409,32346,52968,121567,107374,77268,23686,35097,10501,155275,15303,47136,21102,168741,55332,90385,15996,84817,681,137803,25054,142275,6163,38175,8056,124296,240642,65621,4934,178205,16101,62803,60964,18230,100622,76465,44689,14545,9543,47514,16852,93380,28048,12047,107106,37575,101485,77047,57326,34819,96137,76916,6469,46264,115983,75768,87668,69942,13027,165,8373,114231,26434,52844,42799,182044,23580,146254,38081,43236,33883,146220,382894,14606,46035,36481,166621,35417,95382,2957,59384,60428,36358,66343,75378,22267,22950,83528,17577,56474,25285,4619,179691,75355,95836,53295,34588,171410,4487,14679,84208,44015,18562,109133,54101,11531,86052,174479,303157,28095,9953,35642,14564,39802,16145,77606,117406,53038,121117,53624,22062,1212,7632,127157,237292,189087,10478,127345,102515,181997,86752,87623,10966,121602,68783,68681,83042,114380,138349,191305,67176,50085,39016,1427,42384,1412,67118,122616,72389,25260,2237,13576,137346,19938,20304,2191,68759,5373,61364,238507,75814,23931,69565,38993,131741,38364,12528,87762,5679,129853,5310,186831,32653,90338,260176,389531,108118,26843,43985,50175,30563,25106,56965,18130,140428,4542,165503,117991,24219,229605,1819,129663,1240,3797,76093,18398,71339,51919,93043,27175,47060,216257,6483,35051,1217,16512,80798,129064,13225,69339,8548,237079,72298,2575,34280,51379,117910,55671,53345,247552,29486,39328,140821,34681,57045,60177,5004,90269,78522,2479,322607,48474,61296,13057,31558,4678,59271,6699,27044,31988,35944,12503,83480,4389,136508,3781,114121,70279,4488,155829,42214,2898,68191,75695,305850,45041,74344,106509,30087,17429,93292,12477,290,23080,114802,35714,18751,26554,105424,17775,2144,2412,100610,65192,113975,52975,180272,135050,129815,76238,106483,21440,63186,4260,46189,9711,28249,4169,23429,23390,8324,141585,63809,67668,38457,38063,39226,59972,1189,203916,62368,14403,16949,61767,85801,1739,40147,35049,76757,33124,62102,15780,103593,103009,53484,22952,67973,114645,6566,5245,50462,7601,8288,3513,194571,80276,1908,54592,5124,58571,2513,6800,273997,193904,1119,17991,117245,2508,129156,82366,26278,71465,63341,56943,39662,106116,94966,156875,9736,2204,122308,94418,27134,1280,24539,49022,45314,3764,50904,46424,30699,28087,293839,9400,33646,40165,822,147499,50263,116179,29085,11863,31314,5578,17797,5104,12454,1604,15342,219206,10232,67800,94261,25872,13565,90339,78971,75377,26649,41184,47695,11514,35369,20767,14227,41953,309396,148270,147938,33074,14453,27499,109019,39018,25738,240196,158931,52820,8612,95853,21524,137010,84901,70869,70021,116794,48404,38771,6732,1070,70990,187297,49140,5238,576,3564,253975,16027,16483,2811,37775,19034,25259,4053,2e3,70083,95774,19713,33431,92703,91314,42381,288770,48194,95985,3991,77418,13406,241328,245086,56533,35275,62725,9246,51924,70181,95331,16163,31410,79016,39312,120878,119371,275987,80124,27712,9186,220,23598,146167,85209,68238,282190,57048,31273,30555,80913,17594,75779,59160,135002,101219,189377,29225,96735,60126,62522,104e3,27620,86814,17240,147533,11001,5425,43682,410,49460,87270,69480,46315,59448,1816,76201,9431,11788,87960,29063,65539,47347,11678,33846,7008,196704,9895,6753,8633,120892,59970,572824,115934,6646,202559,892,48351,37611,251282,57823,67263,57750,26527,34485,90747,7685,88370,6144,64182,1709,41969,21458,62327,181657,49247,225330,122600,114574,107124,85361,111833,63243,71420,15655,191178,72430,18063,51425,54002,12364,53225,86557,18193,97580,41232,138398,67821,128724,8944,233212,101353,52099,42127,14006,120107,32789,32132,3498,18123,33758,56058,5779,128760,59888,98869,18445,84702,51911,13234,218379,20093,39031,8074,70195,20708,23462,24355,131384,60189,26390,10403,41060,7140,10781,49410,42261,87202,82566,41663,43105,60276,2768,5733,74176,28329,2297,145430,131632,83615,122915,105441,655,224102,5284,136426,67763,16294,188511,32538,61049,27893,3394,13951,159099,28542,17930,145360,9492,190122,32285,78855,26440,13570,58648,73908,4239,124561,2444,74172,53131,11468,10794,73566,11623,35343,64710,30481,4163,10328,38309,29901,10538,154377,76132,92405,24839,11679,3465,13449,11637,7824,2337,57754,1260,14458,41118,19878,38661,13416,159180,37074,163164,54137,28627,52134,184900,8520,40385,29546,30502,22386,66527,107458,6850,24022,47983,30603,35083,8934,304066,39500,9,28261,33026,77251,9374,44833,116312,34990,29236,63563,125639,135405,165398,159055,55690,88141,69643,236964,31983,25572,20436,36746,60896,31850,16179,11828,5888,3043,66368,9750,31167,7915,53111,36430,1333,64344,93659,20061,60596,180191,51630,6792,30244,43509,101058,22409,420,44210,109783,43223,27030,72477,72831,32679,29235,7675,47556,12258,39907,149412,84926,118247,24692,71717,105038,86009,45941,41189,89453,29856,52543,30627,226798,67303,59230,67415,34408,1367,99685,16867,128419,52147,4111,125381,117881,16173,44093,102224,31575,23234,24870,83790,127407,239098,3200,994,1255,100903,242275,117266,55116,38205,16140,29662,11307,40414,208793,123355,56470,4862,75600,30119,58218,70828,24075,26974,7802,192353,4851,5475,78720,66596,3409,28573,64396,30381,30690,59859,88256,5406,99945,103064,34463,37727,24238,86643,60088,4057,23741,5967,162904,38240,28356,93858,25510,122879,6897,3278,7057,11971,4400,35461,211413,21395,59615,39471,87233,55795,128426,3051,22470,41950,14705,3974,180108,80476,78442,204996,91987,15634,67610,139015,142373,35611,51134,10387,4353,153456,57749,181039,14183,68447,151532,21107,36452,20551,3186,46247,46383,129666,88736,140662,146243,2066,8360,7978,64818,106963,17896,47801,10723,114821,223295,74192,3293,3393,16987,74064,11277,91622,4270,29828,27951,387869,103235,1374,61988,120083,477,145892,128378,11779,211263,61354,18221,17869,46530,83061,108538,157981,90608,67199,95080,49064,195814,12302,66307,10348,231346,160732,112859,63633,146558,21271,31037,198802,47622,12862,95710,3910,77850,73961,85585,34752,61e3,4082,24595,103679,71107,8208,79568,150019,16615,24961,139857,32664,197366,4559,54735,32696,4126,162019,75698,13916,70108,159638,19834,9349,24675,175560,49643,18206,52459,27992,10809,88865,401975,133172,29e3,34558,30915,3658,25834,42430,36562,125265,18182,10155,40149,97082,208980,19575,60853,90529,66545,9600,789,46420,2317,88593,55595,98980,115302,5742,169155,1073,177901,3472,11189,63711,78643,65472,50459,127979,93,42202,67053,21720,157650,11145,141378,42033,22824,85705,79114,35584,15974,1510,54172,28562,12451,104226,19190,97151,73024,20948,5151,81741,21499,29006,84183,198074,54003,45120,170125,26240,35177,28389,64863,79974,60778,176915,232183,45342,2038,80253,41564,40703,32689,5430,100689,5366,23007,134279,14266,26712,73993,24934,64242,52113,102887,61801,46415,201049,54251,62133,122757,164883,30815,139966,2319,30842,766,13362,10287,134518,86111,81665,82440,28333,43019,18963,8804,161944,23439,102144,101145,80029,39052,248708,30350,117340,11878,128467,974,138625,63961,5237,74778,61834,67040,43814,13690,65947,33809,232476,115258,181745,28824,94013,9510,10246,93722,81976,7217,114383,3493,16014,69045,72692,12145,80981,9507,6692,1620,60820,330444,35474,33962,4797,7053,295463,46445,27026,12491,77988,49524,35675,90947,29114,166705,101385,133782,32704,6186,84595,176031,185623,45966,151302,63069,1699,107491,947,15458,74452,196212,6046,10498,12163,10239,35191,243951,9277,9090,29539,54460,22820,26514,112549,60372,51753,48756,21812,70861,260326,41,44222,10441,16961,48148,138771,216194,5914,52153,53400,212036,56519,26245,10117,45888,15294,138019,90913,26368,43842,42111,23348,6082,194845,161089,156206,51546,11647,30759,302912,262094,8635,78876,26535,35283,54183,31183,85484,147873,12989,5197,6356,72894,65347,20150,27370,73787,1493,45918,12366,190217,20724,13858,10981,67449,81213,7553,14115,72242,271517,11842,48310,88743,143726,22177,3290,243231,58452,62937,12592,1654,40066,33477,13751,9921,128442,15868,7106,75236,83773,10775,36938,10482,170465,17368,17469,161508,32752,98340,800,19824,264456,3901,87319,2867,26782,9630,113102,185815,24197,44584,86366,40224,3636,140916,31731,267731,9567,53678,72984,29389,27963,17106,50282,284911,60170,8322,12608,23374,89652,5268,39044,229766,8869,151350,31436,177342,12269,183212,120418,116270,2843,78888,69192,7865,184099,1086,129897,18383,70508,20242,18508,229924,124569,35749,50589,55626,9884,83115,40971,30671,18135,14452,38861,17844,201826,5549,26413,17189,13561,38539,10679,143331,3314,36785,171194,49685,187713,67506,4618,104039,17060,195080,50648,33159,19238,67559,134840,28599,157523,17130,38064,117398,94355,31918,13575,34538,40326,13997,3494,348283,62481,26862,3603,104426,244363,153709,112487,304612,199674,41239,35545,54869,293005,28223,26277,26899,4533,18518,15492,38587,80488,70485,160395,263,60162,11382,222152,4696,250751,51921,182609,10707,48463,46243,1227,49111,111564,46502,33342,56846,68541,63559,858,139927,16654,229375,76759,26478,33205,95828,23399,92945,2637,35630,28470,143992,50214,14174,21456,166191,65665,1711,21594,78019,97599,111701,36,147151,110246,189022,43021,30397,40757,131935,42065,73335,48039,26596,28984,15102,2361,7421,202167,69744,43766,52826,3642,83304,33873,75140,63169,192389,36551,92748,13039,123959,233220,21738,84447,77230,20228,187852,19095,25799,92136,108774,29237,53947,2299,118106,2687,8830,42331,202924,33667,2023,73763,30704,19363,19779,16737,35629,48081,24068,101013,162338,291912,13749,24745,328289,167679,70086,48299,23306,16732,17801,43322,54589,3586,63653,43624,53474,925,109177,251316,43805,13082,19511,86565,142182,92461,17117,101033,103319,64589,4022,4351,235897,5352,82705,107142,46391,156084,5860,61365,10558,13045,7717,18357,33922,12590,33065,6928,46993,783,46937,67846,8952,26295,6107,119656,18799,17458,50747,4229,179559,112727,118080,20683,41464,125468,51560,49749,44231,7359,35339,62988,136487,67015,5208,29150,24956,105186,48858,6143,18097,6972,16404,73489,58742,97196,36357,164616,5834,32267,13746,147733,15113,132091,34127,106298,39729,106426,22294,9780,15602,36213,71502,42808,66802,599,60755,5851,39120,67363,108623,126368,72770,91263,32486,30596,151717,7951,52002,43103,11768,68942,40901,39344,24037,127500,116890,48403,16926,86750,17745,48648,159545,34460,58419,5634,114317,67865,31462,23352,24010,98185,125708,69686,68337,13610,26271,70691,2980,4768,27225,102402,75453,28106,8104,6931,1176,6274,6475,112635,22498,6176,238686,26832,28893,90319,14441,15682,15087,39517,45270,109134,104440,45965,47645,81772,7876,52683,87720,12898,4505,185665,2769,113401,15664,57592,105229,137381,97059,119268,6876,43309,33886,128363,35476,144249,67013,143587,83367,25703,91436,59347,53236,2289,16519,19844,46309,58558,99834,23313,218816,231303,36388,51333,183535,109792,139277,54306,90139,18235,8275,32710,37677,82464,86025,92204,88842,117723,37570,128723,234242,76350,73795,34896,148247,58424,11105,11744,45746,63372,17118,49772,199520,81902,38004,22911,33752,3125,1995,53792,4689,26909,108150,146062,69674,41811,161444,84855,8999,28561,16731,93937,3189,21967,24890,22943,1356,145300,51569,28802,517,118679,31703,40607,48098,108854,25003,10233,73969,177495,5248,24516,215347,146192,48712,60626,69188,40735,5866,586,101541,6509,47590,52129,5969,222045,110933,25733,24223,65339,62812,2414,155418,35819,16022,78423,43138,20995,128255,240673,46745,236093,72176,57085,97841,61248,107,36068,193177,105427,55726,215229,20446,47228,100420,87091,14429,121708,23605,21157,187721,21880,2997,203976,99166,95068,25877,7724,98925,83401,4829,13182,18229,13718,239662,38653,116505,153497,30589,89029,38962,181302,43853,78872,180301,4786,248240,7401,106136,112590,77745,19731,60880,77789,125748,135487,5975,48627,34084,12419,215770,47557,254582,10364,106495,21856,67539,88981,38805,21428,48732,42316,12149,16078,52808,25327,51322,33850,51147,12253,122354,46077,56483,254553,115417,81834,150991,94662,86668,7381,12841,100650,18218,15741,22372,68294,50705,15535,84660,61887,22553,72299,31361,24824,17743,46820,64288,31582,77006,111674,116384,30760,80920,86149,77192,51979,79691,60342,122805,103800,240873,160744,233114,78962,54920,8608,3484,316104,72548,24337,5088,230040,21926,10172,36838,26,86221,83458,102176,12062,17571,41929,41170,28428,68239,41750,103930,2634,18313,53019,34825,97837,63115,24606,73157,152474,14715,91439,37033,109806,140259,30668,174760,380,135597,95673,136073,65073,134249,13829,17279,122305,4420,46444,10237,64848,203623,70728,10349,182885,65075,24519,25783,40318,34139,22222,63394,55266,102764,41422,20126,65100,90408,53640,35128,48932,11192,38935,96839,34782,39492,19396,41332,6250,5511,19492,51304,25936,104466,54099,73771,86115,5080,7669,30891,111700,13931,25276,72289,135447,14820,258641,25265,31005,281179,75286,393,95359,14623,13584,6680,101227,80173,44933,76666,54542,13244,39348,458,25379,109451,134348,81143,6959,65554,12027,51311,8716,57589,140731,28467,23316,17272,30458,25980,55229,77197,83798,28302,114784,7428,34548,26241,14712,39336,103304,18928,54080,12870,334,87722,15208,16895,142098,114262,39820,83913,57817,28682,7721,14900,108672,11250,62246,42849,415188,1724,26555,24549,25505,26443,107450,145899,61035,43528,6901,60726,65906,267741,21338,147590,42079,18924,73017,135236,15393,5206,4026,84185,1531,5988,113890,82647,303391,7386,69844,71611,189865,76523,31877,13315,19314,198575,32821,1928,67641,25913,104475,103489,3297,70391,18406,15446,113347,19295,93790,27856,1792,167471,116449,8541,4408,41757,63233,25765,86680,64501,27034,24816,34975,6079,4486,49693,36229,16917,21581,62426,27862,11612,54284,35702,194034,355,24277,48262,87411,70504,310164,118018,12516,47559,43502,57433,107139,9290,66533,80863,14634,34312,91725,28606,21342,67241,72355,43244,375789,37402,174015,105070,8342,44167,67494,1890,16365,11723,271002,1865,47918,8350,45564,27742,25110,125803,8553,49504,81925,62211,4534,15491,19011,80373,206920,667,102405,128623,245524,5553,113309,192739,65766,19567,22832,261958,29679,21293,71134,20962,105123,24721,860,21752,33448,18372,157167,94822,35770,173224,232737,75729,28937,46828,28062,25453,5207,140366,36665,30652,6169,67920,150458,92040,23186,184604,92330,20891,176492,49427,27828,38305,42495,143982,49560,25503,90043,29747,65328,47830,12932,11068,77721,9003,25213,94205,140426,46090,89945,138173,192691,33329,112232,129905,35709,27514,1841,19957,31411,127476,53572,17497,173549,55063,175135,19841,69314,5192,237921,117660,150697,4060,273045,50414,98940,65348,153665,164423,58804,156695,48994,213928,86036,28608,8355,39574,34540,16927,135680,18374,151587,10830,53805,16878,16623,4282,48030,8537,14986,46102,13062,72897,72,33050,108227,39451,45935,651,113320,40535,95176,57450,48843,5003,19019,10407,211163,3848,1068,4988,32091,30095,41692,15099,43602,107434,50744,7627,171349,16313,150832,352665,207750,33937,38256,51091,156e3,87889,90663,84175,24908,114900,50365,31494,83829,5398,169342,47521,54818,18935,8356,43094,41212,174536,10082,92550,6678,60614,23355,69721,14796,34149,128830,58187,3179,208,40325,28399,225029,401412,51150,31580,207268,6657,10993,69818,64282,289845,23308,12961,38447,6681,52944,31855,2572,47646,120728,179148,37240,45196,218274,4816,3695,21961,50084,35209,18073,51452,27004,6100,33941,1377,84831,171214,85,141510,9078,99227,32610,6417,11718,49868,65579,87902,73018,49062,46280,61742,21512,40862,107733,15941,29168,157765,144919,14487,5767,158014,140070,7241,573,71584,16921,223566,40331,179473,35081,47926,140885,41508,52104,59180,42310,32811,29048,123517,102413,80208,10104,14746,12649,153641,126022,37965,113017,4171,83,142592,2809,6362,50416,71323,116894,260776,16204,1524,5760,30351,12658,20703,54403,36083,45408,74772,4946,14485,50759,111222,10890,2195,167147,92962,130534,16283,177256,35016,15472,210156,151187,73922,117691,43250,52051,37392,24811,24358,30830,5775,818,21969,1476,127322,151783,58392,31021,106913,65215,89407,90802,28531,11690,20234,95249,44602,37256,18707,11928,5161,4410,26571,51903,49768,22008,25252,65780,209499,68769,203726,13249,137363,48845,86823,6658,5674,31881,1083,1823,108676,34518,166752,13791,14287,91576,91429,8665,11529,26401,16191,91972,30964,5254,28486,54697,79613,66520,18447,22870,45203,194466,22822,51703,12278,76716,44595,73455,33546,12235,144843,36154,51247,11116,33040,3180,225753,60864,1972,28469,12891,28879,10338,144157,56294,353058,38302,41447,87532,110616,27065,168438,6557,1213,50804,144643,24817,2390,136531,38174,247513,16190,4059,122791,131994,137430,39506,57650,16305,5188,54309,106128,20628,88071,67394,395446,250285,66176,91254,1399,114196,43915,60230,44853,27206,106353,43013,18733,345105,226453,51202,16607,57106,117175,35492,10476,89598,127439,15187,39624,13688,61570,10615,31111,59370,6238,175252,32143,224492,41388,95408,34384,148238,78307,38959,9340,160091,61443,15737,11216,41244,170,38299,102443,113097,26382,14027,33707,3957,76300,66160,19431,18900,6952,1717,108656,82206,188021,257335,27295,43999,41210,31777,46956,57457,12657,11489,15697,48060,204748,53583,82422,284790,30503,137341,8120,19615,220311,15991,10217,63424,9808,67431,70976,98221,4491,15177,28535,144789,751,13230,2394,1504,33977,132104,30316,22230,931,97193,185240,24826,22687,174322,15307,22988,1390,188745,180325,29580,59068,74903,18994,29195,79,15436,7622,38462,11566,138710,44828,45774,37768,99236,68137,84083,19282,22698,17134,74807,126662,173497,46248,16938,119735,3212,28292,213652,49013,9975,32180,45660,86250,4801,68788,95490,77482,113751,11994,44624,94452,46839,128497,100316,5798,58588,73184,202987,65417,37790,88524,1606,43156,97964,105717,34947,11203,100060,37742,130074,93653,107799,94311,196106,41347,8035,10780,16390,27883,118236,167395,1979,25006,19375,31628,18916,144723,78502,114047,103107,86492,107686,5844,20934,206963,23556,22591,16562,146333,20167,10471,117434,33085,2863,9740,36669,41849,37271,22790,18209,28979,8231,12952,54408,21731,25130,45208,55748,138120,75826,414,29593,9925,292865,25999,683,123149,7036,92159,86055,61827,103680,23176,54918,58466,57578,13305,5709,86479,16697,31064,17660,200919,10770,49793,33423,32370,52047,16488,62555,6459,8426,83493,7763,59725,82812,18628,67760,79405,68557,9612,7673,28102,56517,69620,171797,32458,29541,15870,81109,32080,207644,71495,21202,11039,91036,61230,2810,130800,32260,4613,60590,37112,75214,33979,126402,155062,30642,63875,12810,194463,82799,47664,16725,36685,43367,61099,449,172150,102867,21691,301838,36745,7130,18671,57316,34852,38034,54182,35578,65900,99486,19771,3456,2658,16914,99866,28390,28109,8262,21147,34353,20006,4228,137085,1675,203023,283196,198286,214375,163329,290603,152574,40471,83506,30068,14730,23177,131539,34759,27668,32178,71896,104799,116305,85430,119262,42860,25160,8911,23428,49437,105322,6519,16203,6349,74711,1230,38045,8540,75165,44736,25909,51026,317034,4984,32281,91312,27060,44431,17817,45363,155937,239085,35697,59784,91993,29531,126740,213757,76560,167776,285273,24262,8237,65030,41160,74437,48804,118916,13159,37842,1031,75349,1478,11655,108777,23435,277425,101734,67469,70231,124711,43532,28514,65526,54956,1e3,21882,17728,25302,40952,52214,149632,1999,2111,3259,63362,89961,220561,39777,26335,9063,10572,12416,34551,34623,38604,24723,5947,15588,69927,66252,119177,69173,46629,28714,70715,212408,20521,406913,74380,11716,50659,50862,37009,88460,130101,7210,53853,538,65120,151950,55806,163748,52837,13153,21100,16674,64536,6091,138201,44837,58547,3723,163,2177,32288,85454,34033,8497,14282,25742,10535,10741,79559,117493,243787,49337,100718,79495,40139,42956,7551,55433,15421,31509,23034,45081,547,61176,53434,328001,8470,36263,30145,4519,74173,53935,11845,73774,60211,78025,3,4102,73782,109293,315332,48412,26683,13714,6865,20128,18490,104141,325,39470,171970,115860,15707,7268,73301,74336,31370,2368,111827,107757,136231,142844,97138,96638,84053,38691,23801,1588,10573,122098,77039,240,186135,146101,11996,18143,112963,46171,155836,348769,47795,121213,116266,132515,3344,144804,31286,99187,255838,129694,35894,48779,55235,148582,71967,65282,15174,13920,47080,6147,108242,157593,125025,7136,1286,28957,127956,28402,98813,20805,7532,109417,40610,5041,32958,15142,18408,108596,33543,50517,27748,80114,233434,91447,487,37094,100048,30541,43477,10639,89862,155868,37667,8726,60684,237903,73408,99589,12190,38739,97348,3914,13594,2680,149016,13907,30171,28343,23530,115225,61104,35821,147679,14337,4297,244282,24085,326976,56428,7851,21303,131620,71446,83253,68692,111870,5224,15813,38197,49026,45057,13660,3306,76345,40671,27905,91072,996,68527,62085,91351,122634,55109,168209,2024,27560,112707,17352,8306,167115,169921,166958,5031,46020,11844,67284,19130,76185,6920,32849,5450,14610,22451,21002,17392,31872,66682,84796,13709,40210,59898,12029,8719,53564,21462,91884,21647,88379,194428,12754,37797,132826,160016,22567,54383,53186,77611,31107,8339,4694,19185,90355,23597,17222,140675,28442,23668,55977,9128,61555,28774,155229,17658,9390,24379,69357,15752,127381,239631,62460,93181,55913,45133,140155,18676,25249,33164,29581,82837,67223,22362,29975,7317,52813,1943,29613,20012,207130,49617,49651,5636,15334,36313,29226,28084,95247,72072,19e3,224932,15811,114,32127,38097,37508,88507,37225,27359,91626,12193,69279,20608,11055,88156,92808,2152,57259,55275,72789,24475,104414,1708,9882,3818,48661,66897,1631,34806,227930,85815,87753,18321,250664,72733,25107,206797,50891,8082,196411,92596,96764,152823,65514,22819,387277,62176,51225,40329,15563,189,3659,73670,64357,51793,275136,33482,86653,74615,67058,11318,125720,15388,22388,8267,1730,102663,170910,40784,7144,85373,13040,7088,94309,583,44224,140424,77439,18496,164026,36578,4722,9151,5824,63365,26510,35199,40500,79277,32495,44614,35233,9566,203293,152144,7097,2330,183480,98629,13423,330887,44130,68600,30939,97829,31012,345465,56747,94879,4939,160027,149761,99423,46099,32251,15332,8761,96094,128555,5763,235318,222223,55729,30241,55420,201746,3987,81382,8259,49325,23287,7719,24633,251100,92311,18591,110533,64759,170260,393860,7175,21144,132887,3593,75346,101277,91109,16387,259187,11627,57459,173829,44694,55780,49797,89192,120443,62622,3904,14814,23887,1027,112258,64955,99800,11132,66353,36202,48624,18158,88481,96882,43059,11040,2455,7077,21651,181159,99126,100434,61388,68186,19161,110468,120052,8819,55324,41494,7014,37689,3618,87729,92615,207943,9823,128657,12587,15857,6379,67628,51216,71775,157617,63244,1503,3864,218754,110864,5769,21492,7243,1192,87921,85529,31512,18537,42698,35350,73510,84474,34301,8991,21013,35034,566,38832,19838,35586,37216,39413,55006,12178,59742,856,84563,6900,25632,17437,49786,30723,13847,70845,4044,7843,23944,235976,55530,48942,6518,20939,73769,192653,52936,95207,23895,132542,142982,22632,87452,48042,54018,178468,10728,26230,23559,363,81269,142012,5718,346258,31456,84333,246476,51018,66692,101804,120570,39962,30373,70593,2864,60541,19425,54209,104092,7201,31545,48018,25865,15442,46257,40443,8328,6451,111782,47527,97754,33046,470,245116,31095,39,91934,87208,73470,36708,36521,12801,70624,36272,8892,79768,12427,55454,103756,5908,52390,62962,22720,141138,94634,41689,128402,126390,6628,106394,35527,134394,82727,254651,194502,148064,89549,3202,28359,957,21954,27906,49840,142747,8307,24206,48978,1186,71728,133038,71474,91306,6333,110959,74600,70387,18983,62609,56057,22970,1147,135850,1321,28834,3578,59715,102227,32827,81415,99952,55636,257598,390,22702,35701,85872,402916,39216,189795,14929,19467,10112,144422,61514,5279,63421,134686,41436,8424,51925,10598,132295,124416,4604,194739,210929,57866,31829,51626,50007,9976,91878,61906,56168,81906,60918,61859,40017,23059,16887,40927,62064,12785,32893,32913,21782,93965,20169,44387,79084,38463,11457,93950,27127,157050,2697,337088,5116,54128,48255,33279,8821,27352,25515,124022,65710,28906,38557,33390,1722,104435,72215,38551,12094,30978,25113,6671,37355,175109,42862,98024,65406,221276,59624,118012,64637,78760,86697,21426,1639,40350,12584,67193,84144,31396,7863,143011,69629,63112,9454,28666,65798,46372,134721,6314,51402,30837,151922,2847,38676,38008,92823,136245,17540,5504,109295,205242,37606,5211,214892,1586,20670,208711,137743,19328,40652,16995,20023,14657,154919,34422,12996,13918,38221,47690,16398,2959,37680,89122,6721,198469,91876,172043,83898,101992,26084,94570,3635,76958,22853,76497,38266,176590,168403,44464,142840,79180,184594,1984,41806,83147,11985,6546,366068,59732,24533,271505,8736,39084,222992,93429,28962,58985,86665,8432,30028,14548,32439,54424,165029,55175,27458,69046,121277,46168,33732,20661,24581,135574,123110,37556,79260,72611,16957,12939,46162,58238,44907,72936,253758,41324,32518,96480,11949,124438,65280,43256,34107,53533,43531,37037,28366,45970,32741,173438,6121,194202,62969,26355,30314,58370,28455,1848,50519,82830,90393,21761,295490,10936,256940,133568,44050,20269,4089,27457,21610,219460,36743,14821,101388,52005,13124,30979,140816,167362,26054,18458,60789,34917,40447,26606,33422,9066,3452,83614,5761,20263,137238,25038,91310,101,52322,74548,42572,38084,214054,186568,31802,17665,30620,141936,37730,14420,4265,187218,49640,188208,51441,55388,96452,66659,40869,42039,60967,221027,19234,178581,29105,96050,9165,196118,157335,3738,40354,117436,2965,34136,59659,15570,50843,230035,31444,71260,43886,18316,5387,38500,168508,17406,32174,8828,103373,143806,90367,3560,18719,122310,16508,26719,2541,105429,6645,37998,73190,10591,235916,49737,87112,233941,53188,32193,79154,4544,52905,126477,7580,63501,57314,3216,31337,6541,103083,60846,49,9756,15481,1355,43840,14319,13743,27486,10222,73114,230718,418644,16706,6674,279748,23058,45273,295831,86306,2743,5535,88773,21829,35253,120938,31153,3169,16839,42847,8751,80974,33942,36867,35514,16485,26474,77775,56877,5391,48346,3882,108713,31403,27804,55248,26235,43821,136104,40118,175507,28034,203908,18732,1788,34030,106427,36958,54359,7251,44936,15356,69139,455,157915,22173,140291,50348,43275,82066,49621,54952,15216,36226,96695,66855,6936,1987,8227,196087,4631,68827,99004,47541,110265,17953,147605,110242,58520,31312,38724,329975,642,3155,34497,75937,6207,73843,6120,17249,51429,117746,3218,910,68961,319671,14938,29555,34700,1649,66673,72268,9655,76800,153087,6941,210168,27130,35398,1780,73242,3135,56689,19556,165307,8765,35967,121458,13333,70453,17350,117253,22265,13340,44265,39869,441,3742,135025,23581,33309,16543,17731,13291,157637,283005,21408,101360,63887,52312,83873,5338,233779,23759,186949,34531,177320,38069,156465,91004,19353,59852,68160,14891,1338,1072,29823,1950,28901,81407,313445,73038,84807,162348,240257,37162,138934,16111,58013,41253,102951,16457,96056,19541,56402,67217,41638,94381,89674,29481,37456,80815,151579,13937,13683,132537,19699,134545,67020,29816,222341,141235,427578,48868,129557,233342,23077,87871,16213,18728,16184,9469,37913,19680,2798,171356,178328,13216,50049,72690,71904,124644,55455,7504,29052,41036,266546,19899,30391,188755,8659,59469,16,104298,112943,53865,76203,138226,68857,139953,14125,107625,119795,173133,4398,50273,48808,54390,16466,122086,31835,67035,50971,48859,7508,46427,66477,73021,84615,39985,83076,46779,201569,53336,36443,60865,168164,143810,51393,25548,169307,32896,24485,38424,21837,29087,275813,51674,6714,64883,46169,187369,55186,76192,12852,12018,62134,31067,118303,16542,12125,10579,4928,26291,43854,7091,10946,253716,109062,39283,17261,113012,258512,47764,125126,32646,55892,80279,201623,149872,3192,385,1208,48750,5376,58738,22335,5427,82416,47811,32435,143086,38930,94128,59975,156037,37977,38224,62485,7698,50405,71027,16462,21559,136153,34131,107506,162069,63703,3101,215029,40407,4178,3774,9187,80019,17880,97926,67579,2600,18405,8351,47924,86638,70820,92206,86453,29610,42241,119200,3198,15466,67813,57863,35454,4779,99518,4649,104641,144269,33730,38073,65864,6838,109456,193298,154007,5623,45741,30846,182578,25573,157224,1543,58575,138703,146140,44971,49356,18275,59064,20300,13122,11848,24453,11973,9797,86843,2919,25530,49210,1130,161220,76788,75373,85604,34926,36014,17777,17255,51533,11676,92226,51845,119859,21525,5936,18507,28050,1140,31418,14857,34207,47859,10750,36382,32079,106909,59426,87757,38393,110042,15965,97104,33757,35344,97993,53979,33651,45407,41884,82515,173089,7177,58371,35365,47543,51927,35587,10670,23544,29306,84233,39976,76076,62097,9007,8668,28119,78281,120790,19835,143020,54968,18670,64959,20649,34469,42570,33001,136570,87796,120044,1106,58700,63951,127623,12805,83057,40212,31773,49850,7361,54336,347524,101314,23751,19569,48791,29174,49369,20467,7465,75842,38281,623,112457,60210,28849,51003,94720,6426,90047,85560,43761,3579,85105,34607,90410,118528,7224,42907,111163,18168,6960,161135,191298,5247,100584,127552,171568,20121,91173,12636,54615,20199,63730,98105,2396,40387,14438,125012,4765,33235,12865,45299,37728,82098,77872,114037,59253,19675,24838,398016,102561,11446,17069,57508,178277,65836,99941,26114,2585,271882,136866,50126,11027,155648,118367,14585,8910,123015,335383,40434,41016,53021,14439,87098,176860,201543,121888,2358,9286,5739,22666,54270,37884,169381,33984,93859,16124,89364,72207,51639,76366,99029,65812,2198,12147,174891,194289,6986,30252,88822,21284,11445,288337,160821,33034,100869,43852,25761,52882,1144,103809,1924,84458,86079,43411,13542,139276,18141,34978,41298,7276,26481,173800,33210,17951,142652,33616,33677,2210,19941,98568,2486,192414,80136,12058,235883,50963,249638,29572,27221,47034,6124,72107,63346,97620,158513,299699,40388,23235,37176,224244,198386,121323,67992,23827,63170,17838,106622,158590,26807,5345,23489,91891,55474,74834,37981,13058,5977,72552,34706,26828,145172,19904,21367,34043,960,77092,91381,4733,47446,7680,41697,5170,16960,14741,46101,13656,473,51842,37433,11103,11551,121951,13191,97536,165932,50397,51628,129028,9069,44885,6590,59195,47045,32940,225472,90345,21833,13303,29407,96615,141951,5198,6028,18395,7181,3861,14966,156358,167182,36529,55253,25942,173153,30959,27261,50691,150176,162201,38467,48462,80602,42163,118482,168,108756,26011,17166,54149,456538,22512,91374,13816,90358,131615,18132,226707,1824,28139,26860,42253,93877,77351,65575,8980,80574,22020,27948,40422,91324,76376,13528,39281,91685,82215,122541,144066,1983,193851,17283,26320,2739,194978,4790,26845,42627,61300,65815,174612,55133,4200,191130,79771,158321,52280,166796,221620,62461,11278,4067,88152,83409,31717,121367,13522,47325,37945,10406,174348,249321,154101,64912,29938,51775,17220,15776,166138,78890,84425,54121,42861,16368,24572,291647,10197,32073,22651,11677,97509,26952,35787,18424,41910,71614,94977,72318,41594,70024,275419,37702,60199,7335,39107,61315,18271,18394,33768,87884,104277,123724,7277,56288,71981,189803,49320,3352,6798,14240,8954,69220,94433,57372,28620,68863,193727,85575,42309,41667,67689,42081,22543,44824,12719,28540,114236,101553,27638,27296,4300,5353,4663,19379,94098,3758,95888,95144,80344,87320,28447,259518,12718,71391,152731,37063,24132,31911,104896,15672,103782,1521,4945,72541,23717,122632,15619,87175,206120,29428,189780,61416,28350,44457,972,1175,47233,198738,95789,41907,21953,97034,59341,22864,53713,16873,32971,20693,20954,31336,21477,16169,38370,16412,9019,3841,24599,21938,17085,6484,81198,76413,5849,72514,12320,65247,276175,37234,59796,52642,16312,57349,198507,94148,46134,18958,125552,1747,18725,151873,14901,5490,68287,29470,3689,64794,40814,26018,25692,54450,2703,88278,124886,173087,174e3,24159,179477,24276,46004,201876,209202,445,52876,31948,30206,157610,39180,18439,44124,50469,5774,96278,222758,200216,50290,45486,20435,46986,46276,140133,142326,15569,13363,47522,92583,2182,7135,16853,22998,30272,4952,63263,35623,39096,53789,44864,20053,110392,124213,4630,16087,28221,127787,25839,77481,44693,13464,113146,6983,27069,55717,50102,4760,7107,26186,66507,59145,36032,104182,71328,29425,64317,50781,47465,94298,69706,74899,22754,120756,25108,93077,56834,73286,39928,16218,41699,176763,7555,70819,50083,26895,23315,26014,16773,123079,41712,5719,31516,90427,158540,85051,183128,40864,27505,55392,9058,45224,96857,30901,136622,96557,56304,120061,11501,151448,5773,89743,7769,86069,2935,18471,41628,10114,33660,110170,49479,26745,92846,33221,26731,18795,87076,8550,2100,29972,120289,3077,72490,33784,2630,208722,50861,63483,79029,6419,39467,14302,45286,64207,9686,67513,44170,1050,77246,59266,17055,53801,7150,11111,42432,4278,94579,362117,36175,42902,41933,39002,98489,22913,74161,84773,57036,17556,162288,74485,178760,93867,73635,128860,50362,261,67455,80001,46080,35662,4368,25247,19230,74393,22588,1822,27682,235324,13798,85998,13194,235067,23514,71669,147632,23191,134748,214683,105101,1518,25489,247114,7380,54842,26922,3971,26361,20844,68642,170517,77339,123255,8963,77818,150998,48466,36806,2732,23261,11741,236162,18243,126216,28690,50546,16385,92760,197383,246558,201295,88255,67588,71687,176076,172653,169058,33906,63747,24835,157621,43338,30050,46152,132741,2770,51371,94835,6614,15112,11749,56936,1250,19027,399017,58036,100215,23388,55815,308768,124152,94803,9521,64186,8971,28,30427,62163,7616,103838,35079,29203,131235,7743,17389,10882,37420,61460,228512,85363,41581,131077,62822,119647,10130,54445,26925,19968,29016,24446,74028,24176,61448,67185,9254,8563,119129,9771,99184,37716,39514,10532,221512,258753,218630,55980,23394,32141,61924,66749,32411,3741,36475,26678,77010,44946,91203,128749,116953,20476,49625,53116,13735,102335,29376,51946,83407,67892,59212,34685,21083,1546,112982,32972,74397,1078,190545,16082,86140,58591,89611,101531,10061,105104,76319,20035,17551,52611,169061,190842,100780,23907,90413,115619,9675,34710,193435,49443,129734,11183,258877,16318,136182,126808,44635,27304,192375,2599,125648,47051,12091,23814,721,58800,40137,66726,97930,60877,74487,7942,54326,9841,41428,13762,8211,85383,6950,99177,79806,201786,296464,124087,13144,29741,41721,47634,55088,254286,106408,17041,99064,12942,64086,45233,14005,2612,55827,255,7984,13980,38574,12776,46654,73499,249951,2101,26676,25996,132326,116415,119062,50449,31033,23038,11589,179252,20007,14860,129270,21143,17796,144715,60106,70758,69842,34674,282133,44014,16774,57268,38528,24053,46373,201667,28327,471023,51889,102667,21193,114909,84132,69317,96723,67969,16134,68145,15058,28765,32035,2524,101089,98664,25045,76571,14957,86040,118506,262428,154764,81573,39681,283900,73287,127825,544,80448,52347,38512,175971,15180,45467,33086,46552,48894,81107,43213,36672,54025,76703,8053,7608,13299,56619,20752,238099,54164,105133,1444,32942,953,37564,8e3,66316,119463,106817,404,13667,149108,128597,31267,10269,49836,106150,1484,52330,76965,160486,171648,38456,31263,22424,37738,66245,67467,143369,60471,75610,20895,115528,86070,60854,40796,49347,18989,15030,11371,37578,15779,79867,10187,86462,46402,155626,93200,40229,7090,57547,108053,99598,11088,47505,41218,206017,2173,20988,30219,22919,80563,57566,42369,93141,41675,2407,182519,120495,27154,16702,29456,14349,7958,16688,117177,140375,42467,261919,74916,153569,10836,34742,49526,7621,105997,12212,2270,392377,7755,17959,25086,232152,138791,33847,13860,35316,5811,1344,71259,50452,207539,92635,50359,5821,33674,30255,2086,2587,96264,17543,42,6029,9580,43007,139248,82831,12917,29607,25786,51467,42137,85161,100698,31561,88989,121990,278500,3602,109344,37982,15279,116442,28936,30880,87894,58079,128661,126731,67392,28051,146885,4861,16216,97344,42827,147561,153948,22684,21335,47685,1853,43349,15185,59642,10229,25520,187921,108972,5579,98037,24945,6697,19193,63734,137934,75056,89740,19767,224268,56138,63643,151661,39313,70618,84031,89723,84074,13703,85626,35460,8867,64845,3439,57906,99776,63968,49270,81130,34356,16210,23547,36446,34090,140028,72439,2221,22163,57058,363492,113754,18913,95451,48663,54464,54037,176097,68425,3023,34906,29482,117389,341780,80431,58330,16753,92616,60907,94846,147486,4498,48646,7773,46801,7778,18946,464978,47558,33223,177444,7328,15626,63337,94700,11743,9351,255024,39098,16447,42647,96230,39769,58840,10068,63439,35800,65843,58823,413844,9156,51258,7434,61791,85018,6872,3692,28096,7121,33024,6009,75532,31997,192535,9661,3304,9547,14753,31987,25314,55689,15896,20430,39472,31340,99744,25398,115569,54883,28719,205423,23071,57855,64638,149867,25671,82403,37616,20668,39989,77996,74948,140555,175248,64810,36515,46595,4958,248773,24045,28728,136673,168704,20804,114833,100325,27135,21205,96151,153134,45992,7093,13992,76047,1980,19432,145001,75159,87462,17710,1013,45556,34297,144882,20648,26061,11319,129567,108555,18872,464580,33386,22717,65948,167189,5603,135042,79542,8801,202632,18114,91882,5973,5239,67315,4431,60916,47819,71693,32597,32606,18183,45072,80329,76385,24749,51305,40314,156514,14693,130345,13168,66214,18029,12858,34801,27628,14544,10823,40522,40185,33739,148694,23548,9923,61012,28859,17933,19442,34364,99849,164107,141167,30629,21054,6744,36491,8096,42474,41706,155060,30650,10600,163442,1143,96655,61390,52359,7559,51568,64256,203854,4467,22453,14504,436398,7878,6980,8293,63610,293747,16167,35763,19627,147603,15419,18032,110744,51346,33681,54571,40472,48615,39073,21604,13754,173027,92560,11083,47299,63062,11813,52007,29883,9734,139722,15953,1550,20651,13616,49306,16113,90089,92326,7584,30712,72424,164858,6831,152871,55746,197721,34167,196442,6022,112107,55215,7538,123381,4920,43539,77165,8939,50392,34192,20225,79762,22505,58667,40770,29788,97180,82835,4568,8579,13273,363569,35898,49983,436,36598,3237,131691,62418,35591,8101,4073,379438,65218,76072,33887,2968,27573,212619,288680,68278,72851,150504,217896,6913,121339,22017,35340,51072,43616,75043,31437,10833,81487,4364,22968,41454,106687,85446,19863,109625,149241,524,141850,214404,54376,657,237023,9401,108137,53800,32474,49712,53334,126876,27337,45552,177696,8269,15036,12097,42240,2328,125374,119295,99715,2500,19624,39441,27220,102691,60957,94543,39101,18566,67362,13975,78230,25017,34017,239007,90027,39351,41681,35354,43822,1043,916,58587,141983,94818,38799,75459,41114,67432,16195,36606,59568,22272,126769,31424,68659,12287,134302,257977,5756,207285,95637,47248,117689,19583,77451,22373,12200,54993,117118,34244,29386,34562,53819,71267,64172,77665,49368,7716,59301,25749,45426,194789,17297,2650,1766,32501,45198,20403,20984,6600,14171,94604,19037,5402,29896,9938,59935,109708,88081,145182,44844,39167,352626,164173,35374,45982,6122,154,73419,220487,53834,53601,17992,8609,229321,5610,68098,66815,71012,95069,140968,27396,8957,134489,24656,86659,56598,134852,17316,123838,255436,6613,41610,138033,81452,32023,32396,123687,63398,8693,29712,30407,19296,121188,3551,36099,20032,111948,56624,16547,27453,35916,15378,52039,56849,13489,22214,73177,53097,277349,2157,14029,187886,10260,141743,246460,91880,50869,3788,49486,133566,54950,33120,129337,53768,18333,9525,26902,312251,10297,9020,70759,16647,112432,59260,84609,9818,82766,73569,468,46001,75780,55028,52106,11498,43645,108069,17150,17753,29417,16705,31799,9606,289,122254,115975,8620,6133,255357,56908,14456,133464,43554,79224,11247,29630,160,12756,25464,65960,350428,62521,321796,100359,67358,35169,46172,113128,48988,88868,31094,33266,6847,60887,98188,49659,69117,92977,220228,13947,80181,35103,62170,97351,13475,2440,199768,19498,36597,46971,25234,67806,62881,84717,73648,181966,10488,94149,21550,26655,63436,48375,14405,165650,9621,24439,28043,42735,4490,29963,56674,45373,1934,262446,50855,67098,26898,5261,52696,40644,33900,9440,180286,87162,22940,19704,26936,69769,10254,101759,27406,12243,48e3,73926,113215,54935,5726,192787,4312,106216,9366,11550,52949,23457,212271,277152,133895,108374,6191,96477,29980,218916,58024,54696,40853,91124,65894,91170,65908,252552,6793,29212,15389,44516,122515,52617,35058,9017,103536,39510,49136,19242,130652,662077,74699,47024,31422,8517,73351,24399,13867,128360,4810,4434,61779,111983,61036,17798,110240,59722,102960,39688,10001,23803,23039,176498,56659,44814,134295,17188,77577,74466,226175,102472,154333,63900,111747,18062,41171,79669,32773,408933,42562,28931,30907,107388,43487,2946,240310,23938,24354,319,184983,7927,6488,1422,10790,68809,68209,64775,4361,202,17123,59634,51200,44391,18188,17843,2619,74278,3230,9540,47187,21702,36274,56894,43907,16310,34790,16866,6150,5561,13587,107545,108873,126867,86986,28640,33427,19017,5762,80637,17430,46903,2047,131055,25958,13558,5444,47152,13900,44563,122857,45348,70863,39593,54332,38068,33637,318,40310,143467,18502,24520,11377,62013,28942,27246,28269,83545,17999,59015,90707,30065,15161,34720,1263,37008,2012,6060,98575,92933,5721,299,199555,24578,29223,2985,743,115825,109523,136657,47454,26378,53586,3733,174945,93340,244456,5693,37386,28782,89767,27545,23573,18798,136425,34320,84778,20041,48453,38215,7477,71958,40621,8773,5874,187927,105965,51100,43533,18083,8443,10180,43597,2003,183999,69689,12216,129696,146188,62389,34044,68410,12765,43273,26949,266807,3345,34477,79197,5688,47539,213110,21634,22257,50092,32222,42346,39530,63668,98,134978,74022,5152,59088,174145,37220,9934,9545,118937,5724,87240,19875,15784,40143,23263,87513,181654,285152,37881,263241,4966,43934,10433,186657,6470,74416,225854,25908,142677,246262,32280,6192,75890,45546,143264,135305,29742,47013,77787,11732,126658,8763,37950,21806,57557,113464,89465,108995,164574,23894,22996,23169,15369,23117,17642,130607,40503,36239,280990,44666,9981,40427,147487,26869,168452,32886,32991,46798,240839,15111,70502,65697,88548,44145,28701,48767,31139,206777,35659,181164,166262,14554,171445,31786,66523,76607,17956,6507,31279,90476,116611,167918,6560,1243,115324,80128,41867,55897,187323,37069,32596,189444,145931,13390,105530,65709,26805,6999,55714,41300,22915,68951,22138,21120,22264,10058,19945,33635,56123,99085,10032,5818,6016,46649,57476,35264,94413,112522,262288,93686,83038,14341,23204,28807,66084,77987,6101,126673,7133,38126,5923,122091,170240,97772,46874,215746,43948,41622,3272,55596,8332,146411,251315,13533,8561,81521,115449,48616,175175,2063,186556,3036,134537,75772,29728,82360,22973,186559,86348,89100,38388,82297,45610,2613,87082,9986,177812,57884,23591,47485,42543,33582,44713,74439,257444,252451,31825,35631,38540,33066,5147,13973,4343,51830,70378,22827,26448,95560,36896,241741,48067,203953,298860,61620,20450,3220,67272,6586,107662,100160,108684,6929,57226,4762,7457,1320,40404,77204,99309,62750,208653,59977,44e3,74315,34332,5819,172217,64904,114077,18147,84012,1791,98456,90930,21446,116669,103938,7422,85140,59713,5768,326211,16239,75411,13229,29398,10758,236107,1539,112472,95979,152154,151294,306,21196,38146,10700,6891,84282,109646,56492,40539,6589,119491,51354,30685,140209,136906,29622,73617,49553,70525,51671,166869,139616,74395,37439,49595,45678,11959,33211,86560,52434,9282,62690,112155,130810,5243,108261,99970,265613,72551,80049,6391,33365,90721,66737,69872,87011,1860,9032,112544,60905,37371,89015,140351,19076,850,373531,2802,36725,218795,72062,28990,16550,24614,7815,6187,26336,33373,32162,42791,73555,32062,23386,10244,56392,49442,27076,136262,12412,14883,1134,33675,97153,199281,15608,100152,74072,47942,254301,36451,16026,10687,65067,56708,254030,30290,50490,13864,57941,259331,35588,23485,43486,24869,21620,92971,22072,88645,1048,182050,13343,32452,14825,19509,3325,216938,45740,99716,189082,53740,78245,25609,24311,176777,47340,308354,40669,66085,14102,125339,9225,128709,97207,1271,200933,78439,113451,88975,18324,46521,11819,18570,141756,72512,170020,52754,63550,118515,103073,93330,32736,50499,14722,31600,68452,398867,29316,172786,18417,104924,2606,5670,84818,16288,67106,59580,82929,607401,291,85829,359,15897,35830,50696,65630,52672,22115,356968,29895,40837,231192,34024,38957,26722,406,23335,124952,72068,68804,13268,147101,164740,276569,162596,66943,11569,26654,66358,4777,23229,102127,5848,978,2921,59666,5371,28212,90108,42938,39320,2499,4271,108792,33510,125072,71653,65239,38250,66357,38577,13964,86251,35708,50755,36010,29448,12209,3844,38222,206337,100876,67827,137088,14167,252225,84163,195270,1306,5703,54198,779,46802,22028,51124,86759,70560,113164,35685,162145,45471,34561,422,2611,6464,47486,19223,38246,9191,18331,89942,243642,212364,15893,17518,22617,6409,30046,126182,59716,36560,104428,18846,26592,19458,50793,147333,30826,1388,27647,10922,14495,33545,19269,135828,39727,41601,46931,233379,49169,131130,182112,16276,82381,118209,142445,128310,19672,28740,82907,33436,3118,102206,28723,24819,41937,38854,5157,3881,111491,1142,9776,421673,152241,29309,14961,87854,6054,15424,3796,82656,54996,2108,55367,239450,154525,9643,118103,106041,64601,68549,48707,30266,25772,18740,9462,229669,91798,112152,191327,14493,72828,8175,66636,236474,25817,87351,129027,76653,20422,22983,71240,27846,44661,12399,46158,77704,53101,35032,11072,17300,109294,33638,24408,1895,11241,760,17584,82479,125877,63150,141075,34259,23274,81698,15732,43577,48340,91584,14688,16379,24481,150280,96420,262050,48635,43727,61819,56268,72003,88178,17281,79912,13218,122519,125295,166396,11811,2171,118930,67746,17636,178278,174656,95661,173039,83845,79689,17473,98555,127696,203415,54730,22925,232239,9309,12136,175026,20740,180188,10747,39816,314017,266131,10040,175732,112550,220651,31974,37393,888,23008,86799,4303,64905,148467,75337,251,3284,370102,50264,9835,5438,23655,4481,29851,329,12855,7162,64931,78141,12804,42372,296771,83547,18624,34874,86271,3360,48665,77735,88767,11463,63527,28889,22258,29140,194315,113924,25499,6406,31334,1845,4802,49184,43455,35469,127594,92970,61038,115005,38840,87761,106838,8811,20572,55637,11162,96721,132425,108925,2948,125457,36356,3502,75270,27622,127192,2561,123095,49394,61155,16897,110064,9699,89448,53356,19628,220310,21622,83036,9885,112214,6087,26713,17901,161912,91492,3440,68594,9266,92238,8087,6866,150194,72175,80701,13459,31836,43243,239700,95846,44749,50647,21945,230538,120612,132371,244604,5193,105637,34661,41341,68775,85393,1874,8771,33718,49672,77403,595452,99507,6490,58895,128742,7704,39239,73217,43816,62824,37804,199976,22361,80005,87514,94832,14089,4574,139975,59142,75523,100268,43906,53442,15152,2547,186002,17011,19513,204282,3343,60568,128318,119250,4298,51871,41336,71759,21921,45074,98169,145889,99427,11350,1237,5520,28799,7803,53702,21026,136352,38293,128690,12158,90132,44600,10184,26957,39459,126025,78904,82999,59373,39301,150198,120529,153042,20177,50089,14764,271571,30530,123161,38975,101562,22941,5648,124654,109243,69817,71675,49162,106884,21241,107795,30258,16572,188262,141456,7688,60718,8271,11044,32440,104608,103419,236109,93156,43293,128929,42107,67180,25201,115254,185488,130954,72813,167547,20537,39969,38432,22582,184022,1139,27199,5655,17767,97412,122606,209377,27070,35871,326617,188954,42680,73512,80911,22629,3011,95021,315242,157737,383,41821,41808,19335,27950,15674,25677,110950,35375,76835,59108,57370,35262,16569,160415,37706,78086,32041,49691,137143,9782,172080,50148,77917,6323,10110,69172,17711,21795,59511,76184,135114,31046,132319,59105,157578,20549,80778,57649,158421,65143,4575,72235,21899,10797,92745,34035,106079,80159,4508,78304,25350,75457,46458,32937,25623,47,8531,104751,84953,8138,36508,187199,66310,115274,13253,32461,38536,1916,42007,187160,35055,26325,84394,35963,94216,45590,97782];var I3=15,C3=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:i,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=i??pk,this.refreshQueryTimeout=s??mk,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1,t){this.log("refreshing routing table");let n=this._maxCommonPrefix(),o=this._getTrackedCommonPrefixLengthsForRefresh(n);this.log(`max common prefix length ${n}`),this.log(`tracked CPLs [ ${o.map(i=>i.toISOString()).join(", ")} ]`),Promise.all(o.map(async(i,s)=>{try{if(await this._refreshCommonPrefixLength(s,i,e,t),this._numPeersForCpl(n)===0){let a=Math.min(2*(s+1),o.length-1);for(let c=s+1;c<a+1;c++)try{await this._refreshCommonPrefixLength(c,i,e,t)}catch(l){this.log.error("failed to refresh entries with common prefix length %d - %e",c,l)}}}catch(a){this.log.error("failed to refresh entries with common prefix length - %e",a)}})).catch(i=>{this.log.error("failed to refresh table - %e",i)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(i=>{this.log.error("failed to set refresh timeout - %e",i)})}async _refreshCommonPrefixLength(e,t,n,o){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let i=this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,i,this.routingTable.size);let s=De([o?.signal,AbortSignal.timeout(this.refreshQueryTimeout)]);try{let a=await x3(this.peerRouting.getClosestPeers(i.toMultihash().bytes,{signal:s}));this.log(`found ${a} peers that were close to imaginary peer %p`,i),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,i,this.routingTable.size)}finally{s.clear()}}_getTrackedCommonPrefixLengthsForRefresh(e){e>I3&&(e=I3);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}_generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=Yr(2),n=(t[1]<<8)+t[0],o=this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=lt(o);return Ut(i)}_makePeerId(e,t,n){if(n>I3)throw new Error(`Cannot generate peer ID for common prefix length greater than ${I3}`);let s=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=s&a|t&~a,l=Mk[c],f=new ArrayBuffer(34),u=new DataView(f,0,f.byteLength);return u.setUint8(0,St.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb?.localPeer!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=Uo(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var P3=class{peerId;providers;peerStore;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.peerId=e.peerId,this.providers=t.providers,this.peerStore=e.peerStore}async handle(e,t){if(t.key==null||t.key.length===0)throw new Be("Missing key");let n;try{n=ce.decode(t.key)}catch{throw new Be("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let i=lt(o.id),s=Ut(i),a=o.multiaddrs.map(c=>ie(c));if(!e.equals(s)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log.trace("received provider %p for %s (addrs %s)",e,n,a),await this.providers.addProvider(n,s),await this.peerStore.merge(s,{multiaddrs:a})}))}};var k3=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){this.log("incoming request from %p for peers close to %b",e,t.key);try{if(t.key==null)throw new Be("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getClosestPeersOffline(t.key,{exclude:[e,this.peerId]});we(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(421))});let o={type:tt.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:i})=>i.length).map(i=>({id:i.id.toMultihash().bytes,multiaddrs:i.multiaddrs.map(s=>s.bytes)})),providers:[]};return o.closer.length===0?this.log("could not find any peers closer to %b for %p",t.key,e):this.log("found %d peers close to %b for %p",o.closer.length,t.key,e),o}catch(n){throw this.log("error during finding peers closer to %b for %p - %e",t.key,e,n),n}}};var O3=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new Be("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=ce.decode(t.key)}catch{throw new Be("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([Ji(to(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:f})=>f)}})),this.peerRouting.getClosestPeersOffline(t.key)]),s={type:tt.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:i.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var R3=class{peerStore;datastore;peerRouting;log;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new Be("Invalid key");let o={type:tt.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(Tk(n)){this.log("is public key");let a=Ik(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Xe("No public key found in key book");c=sr(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new Ar(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getClosestPeersOffline(n)]);return i!=null&&(this.log("had record for %b in local datastore",n),o.record=i.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),o.closer=s.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=ha(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=Ar.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>i3){await this.datastore.delete(t);return}return o}};var D3=class{log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:ping`)}async handle(e,t){return this.log("ping from %p",e),t}};var N3=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null)throw this.log.error("empty record from %p",e),new Be(`Empty record from: ${e}`);try{let o=Ar.deserialize(t.record);await yf(this.validators,o),o.timeReceived=new Date;let i=ha(this.datastorePrefix,o.key);await this.components.datastore.put(i,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,i)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var L3=class{handlers;log;metrics;incomingMessageTimeout;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`),rpcTime:e.metrics?.registerMetricGroup(`${t.metricsPrefix}_inbound_rpc_time_seconds`,{label:"operation"})},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.incomingMessageTimeout=t.incomingMessageTimeout??1e4,this.handlers={[tt.GET_VALUE.toString()]:new R3(e,t),[tt.PUT_VALUE.toString()]:new N3(e,t),[tt.FIND_NODE.toString()]:new k3(e,t),[tt.ADD_PROVIDER.toString()]:new P3(e,t),[tt.GET_PROVIDERS.toString()]:new O3(e,t),[tt.PING.toString()]:new D3(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}async onIncomingStream(e,t){let n=()=>{e.abort(new Yo)},o=AbortSignal.timeout(this.incomingMessageTimeout);o.addEventListener("abort",n);let i=bt(e).pb(fa);for(;;){if(e.readStatus!=="readable"){await e.close({signal:o});break}let s=await i.read({signal:o}),a=this.metrics?.rpcTime?.timer(s.type.toString()),c=this.metrics?.rpcTime?.timer(s.type.toString()),l=!1;try{this.log("incoming %s from %p",s.type,t.remotePeer);let f=await this.handleMessage(t.remotePeer,s);f!=null&&await i.write(f,{signal:o})}catch(f){throw l=!0,c?.(),f}finally{l||a?.()}o.removeEventListener("abort",n),o=AbortSignal.timeout(this.incomingMessageTimeout),o.addEventListener("abort",n)}}};var B3=class extends _e{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new CustomEvent("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var _b=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await an(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers.map(o=>({...o,routing:"kad-dht"})))}async put(e,t,n){await an(this.dht.put(e,t,n))}async get(e,t){for await(let n of this.dht.get(e,t))if(n.name==="VALUE")return n.value;throw new Xe("Could not find value for key")}},Ab=class{dht;constructor(e){this.dht=e}async findPeer(e,t={}){for await(let n of this.dht.findPeer(e,t))if(n.name==="FINAL_PEER")return n.peer;throw new Xe("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},JH=32,eq=64,M3=class extends _e{k;a;d;protocol;routingTable;providers;network;peerRouting;components;log;running;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;onPeerConnectTimeout;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",i=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${i}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${i}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${i}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${i}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.k=t.kBucketSize??Ip,this.a=t.alpha??la,this.d=t.disjointPaths??this.a,this.protocol=t.protocol??ik,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??JH,this.maxOutboundStreams=t.maxOutboundStreams??eq,this.peerInfoMapper=t.peerInfoMapper??_k,this.onPeerConnectTimeout=t.onPeerConnectTimeout??uk,this.providers=new b3(e,{...t.providers,logPrefix:n,datastorePrefix:o}),this.validators={...Sk,...t.validators},this.selectors={...Ek,...t.selectors},this.network=new y3(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new T3(e,{kBucketSize:this.k,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:i,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let a=Ue();t.allowQueryWithZeroPeers===!0&&a.resolve(),this.queryManager=new v3(e,{disjointPaths:this.d,alpha:this.a,logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:a,routingTable:this.routingTable,allowQueryWithZeroPeers:t.allowQueryWithZeroPeers}),this.peerRouting=new w3(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new m3(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new g3(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new C3(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new L3(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new B3(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new E3(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:a,operationMetrics:s}),this.reprovider=new S3(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,operationMetrics:s}),this.network.addEventListener("peer",c=>{let l=c.detail;this.onPeerConnect(l).catch(f=>{this.log.error("could not add %p to routing table - %e",l.id,f)}),this.dispatchEvent(new CustomEvent("peer",{detail:l}))}),this.topologyListener.addEventListener("peer",c=>{let l=c.detail;Promise.resolve().then(async()=>{let f=await this.components.peerStore.get(l),u={id:l,multiaddrs:f.addresses.map(({multiaddr:d})=>d),protocols:f.protocols};await this.onPeerConnect(u)}).catch(f=>{this.log.error("could not add %p to routing table - %e",l,f)})}),this.dhtPeerRouting=new Ab(this),this.dhtContentRouting=new _b(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",c=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let l=c.detail.peer.addresses.some(({multiaddr:u})=>!Mt(u)&&!fr.exactMatch(u)),f=this.getMode();l&&f==="client"?await this.setMode("server"):f==="server"&&!l&&await this.setMode("client")}).catch(l=>{this.log.error("error setting dht server mode - %e",l)})}),this.get=el(this.get.bind(this),s,"GET_VALUE"),this.findProviders=el(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=el(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=el(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=el(this.provide.bind(this),s,"PROVIDE"),this.put=el(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[qe]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery","@libp2p/kad-dht"];[An]=["@libp2p/identify","@libp2p/ping"];get[Pi](){return this.dhtContentRouting}get[Oi](){return this.dhtPeerRouting}get[Va](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id,e.multiaddrs),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(n=>n.toString()));return}let t=AbortSignal.timeout(this.onPeerConnectTimeout);try{await this.routingTable.add(e.id,{signal:t})}catch(n){this.log.error("could not add %p to routing table - %e",e.id,n)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t){if(e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol,t),e===this.getMode()&&t?.force!==!0){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{signal:t?.signal,maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",{force:!0}),await er(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await er(this.querySelf))}async stop(){this.running=!1,await or(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async cancelReprovide(e,t){await this.providers.removeProvider(e,this.components.peerId,t)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(e){this.routingTableRefresh.refreshTable(!0,e)}};var Uk;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER",r[r.PATH_ENDED=8]="PATH_ENDED"})(Uk||(Uk={}));function Fk(r={}){return e=>new M3(e,r)}var rt;(function(r){r[r.NEW_STREAM=0]="NEW_STREAM",r[r.MESSAGE_RECEIVER=1]="MESSAGE_RECEIVER",r[r.MESSAGE_INITIATOR=2]="MESSAGE_INITIATOR",r[r.CLOSE_RECEIVER=3]="CLOSE_RECEIVER",r[r.CLOSE_INITIATOR=4]="CLOSE_INITIATOR",r[r.RESET_RECEIVER=5]="RESET_RECEIVER",r[r.RESET_INITIATOR=6]="RESET_INITIATOR"})(rt||(rt={}));var Cp=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),Tb=Object.freeze({NEW_STREAM:rt.NEW_STREAM,MESSAGE:rt.MESSAGE_INITIATOR,CLOSE:rt.CLOSE_INITIATOR,RESET:rt.RESET_INITIATOR}),$k=Object.freeze({MESSAGE:rt.MESSAGE_RECEIVER,CLOSE:rt.CLOSE_RECEIVER,RESET:rt.RESET_RECEIVER});var Pp=1<<20,Ib=4<<20,U3=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=Pp,t=Ib){this._buffer=new de,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw new Be("Unprocessed message queue size too large!");let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.name==="InvalidMessageError")throw l;break}let{id:n,type:o,length:i,offset:s}=this._headerInfo;if(this._buffer.length-s<i)break;let c={id:n,type:o};(o===rt.NEW_STREAM||o===rt.MESSAGE_INITIATOR||o===rt.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(s,s+i)),t.push(c),this._buffer.consume(s+i),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=Kk(e),{value:o,offset:i}=Kk(e,n),s=t&7;if(Cp[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new Be("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},tq=128,jk=127;function Kk(r,e=0){let t=0,n=0,o=e,i,s=r.length;do{if(o>=s||n>49)throw e=0,new RangeError("Could not decode varint");i=r.get(o++),t+=n<28?(i&jk)<<n:(i&jk)*Math.pow(2,n),n+=7}while(i>=tq);return e=o-e,{value:t,offset:e}}var Cb=10*1024,Pb=class{_pool;_poolOffset;constructor(){this._pool=Rt(Cb),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ur(e.id<<3|e.type,n,o),o+=Ke(e.id<<3|e.type),(e.type===rt.NEW_STREAM||e.type===rt.MESSAGE_INITIATOR||e.type===rt.MESSAGE_RECEIVER)&&e.data!=null?(Ur(e.data.length,n,o),o+=Ke(e.data.length)):(Ur(0,n,o),o+=Ke(0));let i=n.subarray(this._poolOffset,o);Cb-o<100?(this._pool=Rt(Cb),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===rt.NEW_STREAM||e.type===rt.MESSAGE_INITIATOR||e.type===rt.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},rq=new Pb;function kp(r){let e=new de;return rq.write(r,e),e}var kb=class extends Ws{streamId;types;maxDataSize;muxer;constructor(e){super(e),this.types=e.direction==="outbound"?Tb:$k,this.maxDataSize=e.maxDataSize,this.muxer=e.muxer,this.streamId=parseInt(this.id.substring(1)),e.direction==="outbound"&&queueMicrotask(()=>{this.muxer.send(kp({id:this.streamId,type:Tb.NEW_STREAM,data:new de(B(this.id))}))})}sendData(e){let t=new de,n=e.byteLength;for(;e.byteLength>0;){let o=Math.min(e.byteLength,this.maxDataSize),i=e.sublist(0,o);e=e.sublist(o),t.append(kp({id:this.streamId,type:this.types.MESSAGE,data:i}))}return{sentBytes:n,canSendMore:this.muxer.send(t)}}sendReset(){return this.muxer.send(kp({id:this.streamId,type:this.types.RESET}))}async sendCloseWrite(e){this.muxer.send(kp({id:this.streamId,type:this.types.CLOSE})),e?.signal?.throwIfAborted()}async sendCloseRead(e){e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}};function Vk(r){let{id:e,muxer:t,direction:n,maxMsgSize:o=Pp}=r;return new kb({...r,id:n==="outbound"?`i${e}`:`r${e}`,direction:n,maxDataSize:o,muxer:t,log:r.log.newScope(`${n}:${e}`),protocol:""})}var nq=5;function oq(r){let e={...r,type:`${Cp[r.type]} (${r.type})`};return r.type===rt.NEW_STREAM&&(e.data=j(r.data.subarray())),(r.type===rt.MESSAGE_INITIATOR||r.type===rt.MESSAGE_RECEIVER)&&(e.data=j(r.data.subarray(),"base16")),e}var F3=class extends qs{_streamId;rateLimiter;maxMessageSize;maxUnprocessedMessageQueueSize;decoder;constructor(e,t){super(e,{...t,protocol:"/mplex/6.7.0",name:"mplex"}),this._streamId=0,this.maxMessageSize=t.maxMessageSize??Pp,this.maxUnprocessedMessageQueueSize=t.maxUnprocessedMessageQueueSize??Ib,this.decoder=new U3(this.maxMessageSize,this.maxUnprocessedMessageQueueSize),this.rateLimiter=new Pu({points:t.disconnectThreshold??nq,duration:1})}onData(e){for(let t of this.decoder.write(e))this.handleMessage(t)}onCreateStream(e){if(this.status!=="open")throw new wo("Muxer already closed");let t=this._streamId++;return this._newStream(t,"outbound",e)}_newStream(e,t,n){return this.log("new %s stream %s",t,e),Vk({...n,id:e,direction:t,maxMsgSize:this.maxMessageSize,log:this.log,muxer:this})}handleMessage(e){if(this.log.enabled&&this.log.trace("incoming message",oq(e)),e.type===rt.NEW_STREAM){try{this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}let o=this._newStream(e.id,"inbound",this.streamOptions);this.onRemoteStream(o);return}let t=`${(e.type&1)===1?"i":"r"}${e.id}`,n=this.streams.find(o=>o.id===t);if(n==null){this.log("missing stream %s for message type %s",t,Cp[e.type]);try{this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}try{switch(e.type){case rt.MESSAGE_INITIATOR:case rt.MESSAGE_RECEIVER:n.onData(e.data);break;case rt.CLOSE_INITIATOR:case rt.CLOSE_RECEIVER:n.onRemoteCloseWrite();break;case rt.RESET_INITIATOR:case rt.RESET_RECEIVER:n.onRemoteReset();break;default:this.log("unknown message type")}}catch(o){this.log.error("error while processing message - %e",o),n.abort(o)}}};var Ob=class{protocol="/mplex/6.7.0";_init;constructor(e={}){this._init=e}[Symbol.toStringTag]="@libp2p/mplex";[qe]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new F3(e,{...this._init})}};function Hk(r={}){return()=>new Ob(r)}var Rb=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Db=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},qk=r=>globalThis.DOMException===void 0?new Db(r):new DOMException(r),Wk=r=>{let e=r.reason===void 0?qk("This operation was aborted."):r.reason;return e instanceof Error?e:qk(e)};function Nb(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((f,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(Wk(h)),a=()=>{u(Wk(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(f,u);return}let d=new Rb;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?f():o instanceof Error?u(o):(d.message=o??`Promise timed out after ${t} milliseconds`,u(d))},t),(async()=>{try{f(await r)}catch(h){u(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}var iq=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function sq(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:f}=iq(r),u=async(...h)=>{let m=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(m))return}catch(w){n(),s(w);return}c.push(m),t.count===c.length&&(n(),i(c))},d=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)f(h,u);for(let h of t.rejectionEvents)a.includes(h)||f(h,d)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,d);t.signal&&t.signal.addEventListener("abort",()=>{d(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Nb(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function zk(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=sq(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var Gk="1.0.0",Xk="ping",Yk="ipfs";var $3=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;constructor(e,t={}){this.components=e,this.started=!1,this.protocol=`/${t.protocolPrefix??Yk}/${Xk}/${Gk}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handlePing=this.handlePing.bind(this)}[Symbol.toStringTag]="@libp2p/ping";[qe]=["@libp2p/ping"];async start(){await this.components.registrar.handle(this.protocol,this.handlePing,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}async handlePing(e,t){let n=e.log.newScope("ping");n.trace("ping from %p",t.remotePeer);let o=AbortSignal.timeout(this.timeout);o.addEventListener("abort",()=>{e.abort(new Yo("Ping timed out"))});let i=Date.now();for await(let s of e){if(e.status!=="open"){n("stream status changed to %s",e.status);break}e.send(s)||(n("waiting for stream to drain"),await zk(e,"drain",{rejectionEvents:["close"],signal:o}),n("stream drained"))}n("ping from %p complete in %dms",t.remotePeer,Date.now()-i),await e.close({signal:o})}async ping(e,t={}){let n=Yr(32),o=await this.components.connectionManager.openStream(e,this.protocol,{runOnLimitedConnection:this.runOnLimitedConnection,...t}),i=o.log.newScope("ping");try{let s=Date.now(),a=Promise.withResolvers(),c=new de,l=f=>{if(c.append(f.data),c.byteLength===32){o.removeEventListener("message",l);let u=Date.now()-s;Promise.all([o.closeRead(t)]).then(()=>{if(we(n,c.subarray()))a.resolve(u);else throw new ja(`Received wrong ping ack after ${u}ms`)}).catch(d=>{o.abort(d),a.reject(d)})}};return o.addEventListener("message",l),o.send(n),await o.close(t),await ut(a.promise,t.signal)}catch(s){throw i.error("error while pinging %o - %e",e,s),o?.abort(s),s}finally{o?.close()}}};function Zk(r={}){return e=>new $3(e,r)}var Hr;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.flag!=null&&(i.uint32(8),r.Flag.codec().encode(o.flag,i)),o.message!=null&&(i.uint32(18),i.bytes(o.message)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.flag=r.Flag.codec().decode(o);break}case 2:{a.message=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(Hr||(Hr={}));var Jk=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],Lb=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),eO="libp2p+webrtc+v1/",tO=2*1024*1024,wf=16*1024;function uq(r=wf){let e=Ke(r-Ke(r)),t=1+Ke(Object.keys(Hr.Flag).length-1),n=1,o=r-e-t-n,i=Ke(o);return e+t+n+i}var rO=uq();var nO=1e4,Bb="/webrtc",Op="/webrtc-signaling/0.0.1",oO="/libp2p/webrtc-direct/certificate",iO="webrtc-direct-certificate-private-key";var sO=12096e5,Mb=864e5;var Ub=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Fb=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},aO=r=>globalThis.DOMException===void 0?new Fb(r):new DOMException(r),cO=r=>{let e=r.reason===void 0?aO("This operation was aborted."):r.reason;return e instanceof Error?e:aO(e)};function $b(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((f,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(cO(h)),a=()=>{u(cO(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(f,u);return}let d=new Ub;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?f():o instanceof Error?u(o):(d.message=o??`Promise timed out after ${t} milliseconds`,u(d))},t),(async()=>{try{f(await r)}catch(h){u(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}var fq=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function dq(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:f}=fq(r),u=async(...h)=>{let m=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(m))return}catch(w){n(),s(w);return}c.push(m),t.count===c.length&&(n(),i(c))},d=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)f(h,u);for(let h of t.rejectionEvents)a.includes(h)||f(h,d)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,d);t.signal&&t.signal.addEventListener("abort",()=>{d(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=$b(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function ds(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=dq(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var lO=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},hq=(function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r})();var pq=(function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r})();var mq=(function(){function r(e,t,n,o){this.name=e,this.version=t,this.os=n,this.bot=o,this.type="bot-device"}return r})();var gq=(function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r})();var yq=(function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r})();var wq=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,bq=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,uO=3,vq=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["pie",/^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],["pie",/^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],["netfront",/^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FB[AS]V\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["curl",/^curl\/([0-9\.]+)$/],["searchbot",wq]],fO=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Windows CE",/Windows CE|WinCE|Microsoft Pocket Internet Explorer/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function hO(r){return r?dO(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new yq:typeof navigator<"u"?dO(navigator.userAgent):Sq()}function xq(r){return r!==""&&vq.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var i=o.exec(r);return!!i&&[n,i]},!1)}function dO(r){var e=xq(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new gq;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<uO&&(o=lO(lO([],o,!0),_q(uO-o.length),!0)):o=[];var i=o.join("."),s=Eq(r),a=bq.exec(r);return a&&a[1]?new mq(t,i,s,a[1]):new hq(t,i,s)}function Eq(r){for(var e=0,t=fO.length;e<t;e++){var n=fO[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function Sq(){var r=typeof process<"u"&&process.version;return r?new pq(process.version.slice(1)):null}function _q(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var pO=hO(),j3=pO!=null&&pO.name==="firefox";async function jb(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Jk.map(e=>({urls:[e]})),r}var mO=(r=32)=>eO+[...Array(r)].map(()=>Lb.at(Math.floor(Math.random()*Lb.length))).join("");var Kb=class extends Ws{channel;incomingData;maxBufferedAmount;receivedFinAck;finAckTimeout;constructor(e){super({...e,maxMessageSize:(e.maxMessageSize??wf)-rO}),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=gr(),this.maxBufferedAmount=e.maxBufferedAmount??tO,this.finAckTimeout=e.finAckTimeout??nO,this.channel.onclose=()=>{this.log.trace("received datachannel close event"),this.onRemoteCloseWrite(),this.onTransportClosed()},this.channel.onerror=n=>{let o=n.error;this.log.trace("received datachannel error event - %e",o),this.abort(o)},this.channel.onmessage=async n=>{this.log("incoming message %d bytes",n.data.byteLength);let{data:o}=n;o===null||o.byteLength===0||this.incomingData.push(new Uint8Array(o,0,o.byteLength))},this.channel.bufferedAmountLowThreshold=0,this.channel.onbufferedamountlow=()=>{this.writableNeedsDrain&&this.safeDispatchEvent("drain")},Promise.resolve().then(async()=>{for await(let n of Ec(this.incomingData))this.processIncomingProtobuf(n)}).catch(n=>{this.log.error("error processing incoming data channel messages - %e",n)});let t=()=>{this.channel.readyState==="open"&&(this.log.trace("stream closed, closing underlying datachannel"),this.channel.close())};this.addEventListener("close",t),this.channel.readyState!=="open"&&(this.log('channel ready state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),ds(this.channel,"open",{rejectionEvents:["close","error"]}).then(()=>{this.log('channel ready state is now "%s", dispatching drain',this.channel.readyState),this.safeDispatchEvent("drain")}).catch(n=>{this.abort(n.error??n)}))}sendNewStream(){}_sendMessage(e){if(this.channel.readyState!=="open")throw new Go(`Invalid datachannel state - ${this.channel.readyState}`);if(this.log.trace('sending message, channel state "%s"',this.channel.readyState),j3){this.channel.send(e.subarray());return}for(let t of e)this.channel.send(t)}sendData(e){return this.channel.readyState!=="open"?{sentBytes:0,canSendMore:!1}:(this._sendMessage(zi.single(Hr.encode({message:e.subarray()}))),{sentBytes:e.byteLength,canSendMore:this.channel.bufferedAmount<this.maxBufferedAmount})}sendReset(e){try{this.log.error("sending reset - %e",e),this._sendFlag(Hr.Flag.RESET),this.receivedFinAck?.reject(e)}catch(t){this.log.error("failed to send reset - %e",t)}}async sendCloseWrite(e){this._sendFlag(Hr.Flag.FIN),e?.signal?.throwIfAborted(),this.receivedFinAck=Promise.withResolvers();let t=e?.signal??AbortSignal.timeout(this.finAckTimeout),n=[ds(this.channel,"close",{signal:t}),ds(this.channel,"error",{signal:t})];await Promise.any([ut(this.receivedFinAck.promise,t),...n]).finally(()=>{n.forEach(o=>o.cancel())})}async sendCloseRead(e){this._sendFlag(Hr.Flag.STOP_SENDING),e?.signal?.throwIfAborted()}processIncomingProtobuf(e){let t=Hr.decode(e);t.message!=null&&(this.readStatus==="readable"||this.readStatus==="paused")&&this.onData(new de(t.message)),t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Hr.Flag.FIN&&(this._sendFlag(Hr.Flag.FIN_ACK),this.onRemoteCloseWrite()),t.flag===Hr.Flag.RESET&&(this.receivedFinAck?.reject(new Ml("The stream was reset")),this.onRemoteReset()),t.flag===Hr.Flag.STOP_SENDING&&this.onRemoteCloseRead(),t.flag===Hr.Flag.FIN_ACK&&this.receivedFinAck?.resolve())}_sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',e.toString(),this.channel.readyState),!1;this.log.trace("sending flag %s",e.toString());let t=Hr.encode({flag:e}),n=zi.single(t);try{return this._sendMessage(n),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}sendPause(){}sendResume(){}};function Rp(r){let{channel:e,direction:t,isHandshake:n}=r;return new Kb({...r,id:`${e.id}`,log:r.log.newScope(`${n===!0?"handshake":t}:${e.id}`),protocol:""})}var ma=class{protocol;peerConnection;metrics;dataChannelOptions;earlyDataChannels;constructor(e){this.onEarlyDataChannel=this.onEarlyDataChannel.bind(this),this.peerConnection=e.peerConnection,this.metrics=e.metrics,this.protocol=e.protocol??Bb,this.dataChannelOptions=e.dataChannelOptions??{},this.peerConnection.addEventListener("datachannel",this.onEarlyDataChannel),this.earlyDataChannels=[]}onEarlyDataChannel(e){this.earlyDataChannels.push(e.channel)}createStreamMuxer(e){return this.peerConnection.removeEventListener("datachannel",this.onEarlyDataChannel),new Vb(e,{peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,protocol:this.protocol,earlyDataChannels:this.earlyDataChannels})}},Vb=class extends qs{peerConnection;dataChannelOptions;constructor(e,t){super(e,{...t,name:"muxer"}),this.peerConnection=t.peerConnection,this.protocol=t.protocol??Bb,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{this.onDataChannel(n)},queueMicrotask(()=>{if(this.status!=="open"){t.earlyDataChannels.forEach(n=>{n.close()});return}t.earlyDataChannels.forEach(n=>{this.onDataChannel(n)})})}onDataChannel(e){if(this.log("incoming datachannel with channel id %d, protocol %s and status %s",e.id,e.protocol,e.readyState),e.label==="init"){this.log.trace("closing init channel %d",e.id),e.close();return}let t=Rp({...this.streamOptions,...this.dataChannelOptions,channel:e,direction:"inbound",log:this.log});this.onRemoteStream(t)}async onCreateStream(e){let t=this.peerConnection.createDataChannel("",{});return this.log("open channel %d for protocol %s",t.id,e?.protocol),Rp({...e,...this.dataChannelOptions,channel:t,direction:"outbound",log:this.log})}onData(){}};var Hb=class extends Hs{peerConnection;constructor(e){super(e),this.peerConnection=e.peerConnection;let t=e.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change %s initial state %s",this.peerConnection.connectionState,t),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.onTransportClosed(),this.peerConnection.close())}}sendData(e){return{sentBytes:e.byteLength,canSendMore:!0}}async sendClose(e){this.peerConnection.close(),e?.signal?.throwIfAborted()}sendReset(){this.peerConnection.close()}sendPause(){}sendResume(){}},Dp=r=>new Hb(r);var K3=globalThis.RTCPeerConnection,V3=globalThis.RTCSessionDescription,gO=globalThis.RTCIceCandidate;var ga=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},ao=class extends ga{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var H3=class extends ga{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var q3=class extends ga{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},W3=class extends ga{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `),this.name="WebRTC/UnsupportedHashAlgorithmError"}};var gn;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),(function(o){o.codec=()=>Ot(t)})(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=Ie((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.data!=null&&(i.uint32(18),i.string(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.data=o.string();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Te(o,r.codec()),r.decode=(o,i)=>Ae(o,r.codec(),i)})(gn||(gn={}));var z3=async(r,e,t)=>{try{let n=Promise.withResolvers();for(Aq(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==gn.Type.ICE_CANDIDATE)throw new Be("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new oe("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new gO(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new oe("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received %o - %e",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate - %e",t.direction,n),t.signal?.aborted===!0&&r.connectionState!=="connected")throw n}};function Aq(r,e){if(r.connectionState==="connected"){e.resolve();return}r.onconnectionstatechange=t=>{switch(r.connectionState){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new Bl(`RTCPeerConnection connection state became "${r.connectionState}"`));break;default:break}}}function G3(r){let e;for(let t of r.getComponents())t.name==="p2p"&&(e=yt(t.value??""));if(e==null)throw new Xo("Remote peerId must be present in multiaddr");return e}async function yO({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{circuitAddress:f,targetPeer:u}=wO(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing circuit address: %a",f);let d=i.getConnections(u),h;d.length===0?(l?.(new oe("webrtc:dial-relay")),h=await s.dial(f,{signal:t,onProgress:l})):(l?.(new oe("webrtc:reuse-relay-connection")),h=d[0]),l?.(new oe("webrtc:open-signaling-stream"));let m=await h.newStream(Op,{signal:t,runOnLimitedConnection:!0}),w=bt(m).pb(gn),y=new K3(r);y.addEventListener("connectionstatechange",()=>{switch(y.connectionState){case"closed":y.close();break;default:break}});let b=new ma({peerConnection:y,dataChannelOptions:e});try{let N=y.createDataChannel("init");y.onicecandidate=({candidate:Z})=>{if(y.connectionState==="connected"){a.trace("ignore new ice candidate as peer connection is already connected");return}if(Z==null||Z?.candidate===""){a.trace("initiator detected end of ICE candidates");return}let se=JSON.stringify(Z?.toJSON()??null);a.trace("initiator sending ICE candidate %o",Z),w.write({type:gn.Type.ICE_CANDIDATE,data:se},{signal:t}).catch(C=>{a.error("error sending ICE candidate - %e",C)})},y.onicecandidateerror=Z=>{a.error("initiator ICE candidate error",Z)};let O=await y.createOffer().catch(Z=>{throw a.error("could not execute createOffer - %e",Z),new ao("Failed to set createOffer")});a.trace("initiator send SDP offer %s",O.sdp),l?.(new oe("webrtc:send-sdp-offer")),await w.write({type:gn.Type.SDP_OFFER,data:O.sdp},{signal:t}),await y.setLocalDescription(O).catch(Z=>{throw a.error("could not execute setLocalDescription - %e",Z),new ao("Failed to set localDescription")}),l?.(new oe("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let V=await w.read({signal:t});if(V.type!==gn.Type.SDP_ANSWER)throw new ao("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",V.data);let Q=new V3({type:"answer",sdp:V.data});return await y.setRemoteDescription(Q).catch(Z=>{throw a.error("could not execute setRemoteDescription - %e",Z),new ao("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new oe("webrtc:read-ice-candidates")),await z3(y,w,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected"),N.readyState!=="open"&&(a.trace("wait for init channel to open"),await ds(N,"open",{signal:t})),a.trace("closing init channel"),N.close(),a.trace("waiting for init channel to close"),await ds(N,"close",{signal:t}),l?.(new oe("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await m.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:y,muxerFactory:b}}catch(N){throw a.error("outgoing signaling error - %e",N),y.close(),m.abort(N),N}finally{y.onicecandidate=null,y.onicecandidateerror=null}}var bO=ct(Fu.matchers[0],at(290)),X3=class r extends _e{transportManager;shutdownController;events;constructor(e,t){super(),this.transportManager=e.transportManager,this.events=e.events,this.shutdownController=t.shutdownController,this.onTransportListening=this.onTransportListening.bind(this)}async listen(){this.events.addEventListener("transport:listening",this.onTransportListening)}onTransportListening(e){e.detail.getAddrs().filter(n=>bO.exactMatch(n)).map(n=>n.encapsulate("/webrtc")).length>0&&this.safeDispatchEvent("listening")}getAddrs(){return this.transportManager.getListeners().filter(e=>!(e instanceof r)).map(e=>e.getAddrs().filter(t=>bO.exactMatch(t)).map(t=>t.encapsulate("/webrtc"))).flat()}updateAnnounceAddrs(){}async close(){this.events.removeEventListener("transport:listening",this.onTransportListening),this.shutdownController.abort(),queueMicrotask(()=>{this.safeDispatchEvent("close")})}};async function vO(r,e,{peerConnection:t,signal:n,log:o}){o.trace("new inbound signaling stream");let i=bt(r).pb(gn);try{t.onicecandidate=({candidate:u})=>{if(t.connectionState==="connected"){o.trace("ignore new ice candidate as peer connection is already connected");return}if(u==null||u?.candidate===""){o.trace("recipient detected end of ICE candidates");return}let d=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",d),i.write({type:gn.Type.ICE_CANDIDATE,data:d},{signal:n}).catch(h=>{o.error("error sending ICE candidate - %e",h)})},o.trace("recipient read SDP offer");let c=await i.read({signal:n});if(c.type!==gn.Type.SDP_OFFER)throw new ao(`expected message type SDP_OFFER, received: ${c.type??"undefined"} `);o.trace("recipient received SDP offer %s",c.data);let l=new V3({type:"offer",sdp:c.data});await t.setRemoteDescription(l).catch(u=>{throw o.error("could not execute setRemoteDescription - %e",u),new ao("Failed to set remoteDescription")});let f=await t.createAnswer().catch(u=>{throw o.error("could not execute createAnswer - %e",u),new ao("Failed to create answer")});o.trace("recipient send SDP answer %s",f.sdp),await i.write({type:gn.Type.SDP_ANSWER,data:f.sdp},{signal:n}),await t.setLocalDescription(f).catch(u=>{throw o.error("could not execute setLocalDescription - %e",u),new ao("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await z3(t,i,{direction:"recipient",signal:n,log:o})}catch(c){if(t.connectionState!=="connected")throw o.error("error while handling signaling stream from peer %a - %e",e.remoteAddr,c),t.close(),c;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",e.remoteAddr,c)}let s=G3(e.remoteAddr),a=ie(`/webrtc/p2p/${s}`);return o.trace("recipient connected to remote address %s",a),{remoteAddress:a,remotePeer:s}}var Y3=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,this.shutdownController.signal,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}[ks]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[qe]=["@libp2p/transport"];[An]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(Op,(e,t)=>{let n=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t,n).catch(o=>{this.log.error("failed to handle incoming connect from %p - %e",t.remotePeer,o)}).finally(()=>{n.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(Op),this._started=!1}createListener(e){return new X3(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(Th.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:i}=await yO({rtcConfiguration:await jb(this.init.rtcConfiguration),dataChannel:this.init.dataChannel,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log,logger:this.components.logger,onProgress:t.onProgress}),s=Dp({peerConnection:o,remoteAddr:n,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,remotePeer:G3(e),muxerFactory:i,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,s),a}async _onProtocol(e,t,n){let o=new K3(await jb(this.init.rtcConfiguration));o.addEventListener("connectionstatechange",()=>{switch(o.connectionState){case"closed":o.close();break;default:break}});let i=new ma({peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s,remotePeer:a}=await vO(e,t,{peerConnection:o,signal:n,log:this.log});await e.close({signal:n});let c=Dp({peerConnection:o,remoteAddr:s,metrics:this.metrics?.listenerEvents,direction:"inbound",log:this.components.logger.forComponent("libp2p:webrtc:connection")});await this.components.upgrader.upgradeInbound(c,{skipEncryption:!0,skipProtection:!0,remotePeer:a,muxerFactory:i,signal:n}),this._closeOnShutdown(o,c)}catch(s){throw this.log.error("incoming signaling error - %e",s),o.close(),e.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection - %e",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function wO(r){let e=r.getComponents().filter(({name:n})=>n==="p2p").map(({value:n})=>n).pop();if(e==null)throw new P("Destination peer id was missing");return{circuitAddress:ie(r.getComponents().filter(({name:n})=>n!=="webrtc")),targetPeer:yt(e)}}var S$e=nr(EO());var A;(function(r){r[r.Sequence=0]="Sequence",r[r.Set=1]="Set",r[r.Choice=2]="Choice"})(A||(A={}));var g;(function(r){r[r.Any=1]="Any",r[r.Boolean=2]="Boolean",r[r.OctetString=3]="OctetString",r[r.BitString=4]="BitString",r[r.Integer=5]="Integer",r[r.Enumerated=6]="Enumerated",r[r.ObjectIdentifier=7]="ObjectIdentifier",r[r.Utf8String=8]="Utf8String",r[r.BmpString=9]="BmpString",r[r.UniversalString=10]="UniversalString",r[r.NumericString=11]="NumericString",r[r.PrintableString=12]="PrintableString",r[r.TeletexString=13]="TeletexString",r[r.VideotexString=14]="VideotexString",r[r.IA5String=15]="IA5String",r[r.GraphicString=16]="GraphicString",r[r.VisibleString=17]="VisibleString",r[r.GeneralString=18]="GeneralString",r[r.CharacterString=19]="CharacterString",r[r.UTCTime=20]="UTCTime",r[r.GeneralizedTime=21]="GeneralizedTime",r[r.DATE=22]="DATE",r[r.TimeOfDay=23]="TimeOfDay",r[r.DateTime=24]="DateTime",r[r.Duration=25]="Duration",r[r.TIME=26]="TIME",r[r.Null=27]="Null"})(g||(g={}));var qb=nr(os()),yi=class{constructor(e,t=0){if(this.unusedBits=0,this.value=new ArrayBuffer(0),e)if(typeof e=="number")this.fromNumber(e);else if(qb.BufferSourceConverter.isBufferSource(e))this.unusedBits=t,this.value=qb.BufferSourceConverter.toArrayBuffer(e);else throw TypeError("Unsupported type of 'params' argument for BitString")}fromASN(e){if(!(e instanceof Mo))throw new TypeError("Argument 'asn' is not instance of ASN.1 BitString");return this.unusedBits=e.valueBlock.unusedBits,this.value=e.valueBlock.valueHex,this}toASN(){return new Mo({unusedBits:this.unusedBits,valueHex:this.value})}toSchema(e){return new Mo({name:e})}toNumber(){let e="",t=new Uint8Array(this.value);for(let n of t)e+=n.toString(2).padStart(8,"0");return e=e.split("").reverse().join(""),this.unusedBits&&(e=e.slice(this.unusedBits).padStart(this.unusedBits,"0")),parseInt(e,2)}fromNumber(e){let t=e.toString(2),n=t.length+7>>3;this.unusedBits=(n<<3)-t.length;let o=new Uint8Array(n);t=t.padStart(n<<3,"0").split("").reverse().join("");let i=0;for(;i<n;)o[i]=parseInt(t.slice(i<<3,(i<<3)+8),2),i++;this.value=o.buffer}};var Wb=nr(os()),xe=class{get byteLength(){return this.buffer.byteLength}get byteOffset(){return 0}constructor(e){typeof e=="number"?this.buffer=new ArrayBuffer(e):Wb.BufferSourceConverter.isBufferSource(e)?this.buffer=Wb.BufferSourceConverter.toArrayBuffer(e):Array.isArray(e)?this.buffer=new Uint8Array(e):this.buffer=new ArrayBuffer(0)}fromASN(e){if(!(e instanceof Vr))throw new TypeError("Argument 'asn' is not instance of ASN.1 OctetString");return this.buffer=e.valueBlock.valueHex,this}toASN(){return new Vr({valueHex:this.buffer})}toSchema(e){return new Vr({name:e})}};var Tq={fromASN:r=>r instanceof hn?null:r.valueBeforeDecodeView,toASN:r=>{if(r===null)return new hn;let e=$n(r);if(e.result.error)throw new Error(e.result.error);return e.result}},Iq={fromASN:r=>r.valueBlock.valueHexView.byteLength>=4?r.valueBlock.toString():r.valueBlock.valueDec,toASN:r=>new Un({value:+r})},Cq={fromASN:r=>r.valueBlock.valueDec,toASN:r=>new Bc({value:r})},Fe={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Un({valueHex:r})};var Pq={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Mo({valueHex:r})},kq={fromASN:r=>r.valueBlock.toString(),toASN:r=>new Fn({value:r})},Oq={fromASN:r=>r.valueBlock.value,toASN:r=>new Lc({value:r})},bf={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Vr({valueHex:r})},SO={fromASN:r=>new xe(r.getValue()),toASN:r=>r.toASN()};function co(r){return{fromASN:e=>e.valueBlock.value,toASN:e=>new r({value:e})}}var zb=co(io),Rq=co(Mc),Dq=co(Uc),Nq=co(Fc),Lq=co($c),Bq=co(jc),Mq=co(Kc),Uq=co(Vc),Fq=co(Hc),$q=co(oa),jq=co(qc),Kq=co(Wc),Vq={fromASN:r=>r.toDate(),toASN:r=>new ia({valueDate:r})},Hq={fromASN:r=>r.toDate(),toASN:r=>new zc({valueDate:r})},qq={fromASN:()=>null,toASN:()=>new hn};function ya(r){switch(r){case g.Any:return Tq;case g.BitString:return Pq;case g.BmpString:return Rq;case g.Boolean:return Oq;case g.CharacterString:return Kq;case g.Enumerated:return Cq;case g.GeneralString:return jq;case g.GeneralizedTime:return Hq;case g.GraphicString:return Fq;case g.IA5String:return Uq;case g.Integer:return Iq;case g.Null:return qq;case g.NumericString:return Nq;case g.ObjectIdentifier:return kq;case g.OctetString:return bf;case g.PrintableString:return Lq;case g.TeletexString:return Bq;case g.UTCTime:return Vq;case g.UniversalString:return Dq;case g.Utf8String:return zb;case g.VideotexString:return Mq;case g.VisibleString:return $q;default:return null}}function lo(r){return typeof r=="function"&&r.prototype?r.prototype.toASN&&r.prototype.fromASN?!0:lo(r.prototype):!!(r&&typeof r=="object"&&"toASN"in r&&"fromASN"in r)}function Xb(r){var e;if(r){let t=Object.getPrototypeOf(r);return((e=t?.prototype)===null||e===void 0?void 0:e.constructor)===Array?!0:Xb(t)}return!1}function _O(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}var Q3=class{constructor(){this.items=new WeakMap}has(e){return this.items.has(e)}get(e,t=!1){let n=this.items.get(e);if(!n)throw new Error(`Cannot get schema for '${e.prototype.constructor.name}' target`);if(t&&!n.schema)throw new Error(`Schema '${e.prototype.constructor.name}' doesn't contain ASN.1 schema. Call 'AsnSchemaStorage.cache'.`);return n}cache(e){let t=this.get(e);t.schema||(t.schema=this.create(e,!0))}createDefault(e){let t={type:A.Sequence,items:{}},n=this.findParentSchema(e);return n&&(Object.assign(t,n),t.items=Object.assign({},t.items,n.items)),t}create(e,t){let n=this.items.get(e)||this.createDefault(e),o=[];for(let i in n.items){let s=n.items[i],a=t?i:"",c;if(typeof s.type=="number"){let f=g[s.type],u=so[f];if(!u)throw new Error(`Cannot get ASN1 class by name '${f}'`);c=new u({name:a})}else lo(s.type)?c=new s.type().toSchema(a):s.optional?this.get(s.type).type===A.Choice?c=new li({name:a}):(c=this.create(s.type,!1),c.name=a):c=new li({name:a});let l=!!s.optional||s.defaultValue!==void 0;if(s.repeated){c.name="";let f=s.repeated==="set"?en:vt;c=new f({name:"",value:[new Gc({name:a,value:c})]})}if(s.context!==null&&s.context!==void 0)if(s.implicit)if(typeof s.type=="number"||lo(s.type)){let f=s.repeated?Yt:as;o.push(new f({name:a,optional:l,idBlock:{tagClass:3,tagNumber:s.context}}))}else{this.cache(s.type);let f=!!s.repeated,u=f?c:this.get(s.type,!0).schema;u="valueBlock"in u?u.valueBlock.value:u.value,o.push(new Yt({name:f?"":a,optional:l,idBlock:{tagClass:3,tagNumber:s.context},value:u}))}else o.push(new Yt({optional:l,idBlock:{tagClass:3,tagNumber:s.context},value:[c]}));else c.optional=l,o.push(c)}switch(n.type){case A.Sequence:return new vt({value:o,name:""});case A.Set:return new en({value:o,name:""});case A.Choice:return new Qu({value:o,name:""});default:throw new Error("Unsupported ASN1 type in use")}}set(e,t){return this.items.set(e,t),this}findParentSchema(e){let t=Object.getPrototypeOf(e);return t?this.items.get(t)||this.findParentSchema(t):null}};var Qt=new Q3;var k=r=>e=>{let t;Qt.has(e)?t=Qt.get(e):(t=Qt.createDefault(e),Qt.set(e,t)),Object.assign(t,r)};var p=r=>(e,t)=>{let n;Qt.has(e.constructor)?n=Qt.get(e.constructor):(n=Qt.createDefault(e.constructor),Qt.set(e.constructor,n));let o=Object.assign({},r);if(typeof o.type=="number"&&!o.converter){let i=ya(r.type);if(!i)throw new Error(`Cannot get default converter for property '${t}' of ${e.constructor.name}`);o.converter=i}o.raw=r.raw,n.items[t]=o};var wa=class extends Error{constructor(){super(...arguments),this.schemas=[]}};var Np=class{static parse(e,t){let n=$n(e);if(n.result.error)throw new Error(n.result.error);return this.fromASN(n.result,t)}static fromASN(e,t){try{if(lo(t))return new t().fromASN(e);let n=Qt.get(t);Qt.cache(t);let o=n.schema,i=this.handleChoiceTypes(e,n,t,o);if(i?.result)return i.result;i?.targetSchema&&(o=i.targetSchema);let s=this.handleSequenceTypes(e,n,t,o),a=new t;return Xb(t)?this.handleArrayTypes(e,n,t):(this.processSchemaItems(n,s,a),a)}catch(n){throw n instanceof wa&&n.schemas.push(t.name),n}}static handleChoiceTypes(e,t,n,o){if(e.constructor===Yt&&t.type===A.Choice&&e.idBlock.tagClass===3)for(let i in t.items){let s=t.items[i];if(s.context===e.idBlock.tagNumber&&s.implicit&&typeof s.type=="function"&&Qt.has(s.type)){let a=Qt.get(s.type);if(a&&a.type===A.Sequence){let c=new vt;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in c.valueBlock){c.valueBlock.value=e.valueBlock.value;let l=this.fromASN(c,s.type),f=new n;return f[i]=l,{result:f}}}}}else if(e.constructor===Yt&&t.type!==A.Choice){let i=new Yt({idBlock:{tagClass:3,tagNumber:e.idBlock.tagNumber},value:t.schema.valueBlock.value});for(let s in t.items)delete e[s];return{targetSchema:i}}return null}static handleSequenceTypes(e,t,n,o){if(t.type===A.Sequence){let i=is({},e,o);if(!i.verified)throw new wa(`Data does not match to ${n.name} ASN1 schema.${i.result.error?` ${i.result.error}`:""}`);return i}else{let i=is({},e,o);if(!i.verified)throw new wa(`Data does not match to ${n.name} ASN1 schema.${i.result.error?` ${i.result.error}`:""}`);return i}}static processRepeatedField(e,t,n){let o=e.slice(t);if(o.length===1&&o[0].constructor.name==="Sequence"){let i=o[0];i.valueBlock&&i.valueBlock.value&&Array.isArray(i.valueBlock.value)&&(o=i.valueBlock.value)}if(typeof n.type=="number"){let i=ya(n.type);if(!i)throw new Error(`No converter for ASN.1 type ${n.type}`);return o.filter(s=>s&&s.valueBlock).map(s=>{try{return i.fromASN(s)}catch{return}}).filter(s=>s!==void 0)}else return o.filter(i=>i&&i.valueBlock).map(i=>{try{return this.fromASN(i,n.type)}catch{return}}).filter(i=>i!==void 0)}static processPrimitiveField(e,t){let n=ya(t.type);if(!n)throw new Error(`No converter for ASN.1 type ${t.type}`);return n.fromASN(e)}static isOptionalChoiceField(e){return e.optional&&typeof e.type=="function"&&Qt.has(e.type)&&Qt.get(e.type).type===A.Choice}static processOptionalChoiceField(e,t){try{return{processed:!0,value:this.fromASN(e,t.type)}}catch(n){if(n instanceof wa&&/Wrong values for Choice type/.test(n.message))return{processed:!1};throw n}}static handleArrayTypes(e,t,n){if(!("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let o=t.itemType;if(typeof o=="number"){let i=ya(o);if(!i)throw new Error(`Cannot get default converter for array item of ${n.name} ASN1 schema`);return n.from(e.valueBlock.value,s=>i.fromASN(s))}else return n.from(e.valueBlock.value,i=>this.fromASN(i,o))}static processSchemaItems(e,t,n){for(let o in e.items){let i=t.result[o];if(!i)continue;let s=e.items[o],a=s.type,c;typeof a=="number"||lo(a)?c=this.processPrimitiveSchemaItem(i,s,a):c=this.processComplexSchemaItem(i,s,a),c&&typeof c=="object"&&"value"in c&&"raw"in c?(n[o]=c.value,n[`${o}Raw`]=c.raw):n[o]=c}}static processPrimitiveSchemaItem(e,t,n){var o;let i=(o=t.converter)!==null&&o!==void 0?o:lo(n)?new n:null;if(!i)throw new Error("Converter is empty");return t.repeated?this.processRepeatedPrimitiveItem(e,t,i):this.processSinglePrimitiveItem(e,t,n,i)}static processRepeatedPrimitiveItem(e,t,n){if(t.implicit){let o=t.repeated==="sequence"?vt:en,i=new o;i.valueBlock=e.valueBlock;let s=$n(i.toBER(!1));if(s.offset===-1)throw new Error(`Cannot parse the child item. ${s.result.error}`);if(!("value"in s.result.valueBlock&&Array.isArray(s.result.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let a=s.result.valueBlock.value;return Array.from(a,c=>n.fromASN(c))}else return Array.from(e,o=>n.fromASN(o))}static processSinglePrimitiveItem(e,t,n,o){let i=e;if(t.implicit){let s;if(lo(n))s=new n().toSchema("");else{let a=g[n],c=so[a];if(!c)throw new Error(`Cannot get '${a}' class from asn1js module`);s=new c}s.valueBlock=i.valueBlock,i=$n(s.toBER(!1)).result}return o.fromASN(i)}static processComplexSchemaItem(e,t,n){if(t.repeated){if(!Array.isArray(e))throw new Error("Cannot get list of items from the ASN.1 parsed value. ASN.1 value should be iterable.");return Array.from(e,o=>this.fromASN(o,n))}else{let o=this.handleImplicitTagging(e,t,n);if(this.isOptionalChoiceField(t))try{return this.fromASN(o,n)}catch(i){if(i instanceof wa&&/Wrong values for Choice type/.test(i.message))return;throw i}else{let i=this.fromASN(o,n);return t.raw?{value:i,raw:e.valueBeforeDecodeView}:i}}}static handleImplicitTagging(e,t,n){if(t.implicit&&typeof t.context=="number"){let o=Qt.get(n);if(o.type===A.Sequence){let i=new vt;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in i.valueBlock)return i.valueBlock.value=e.valueBlock.value,i}else if(o.type===A.Set){let i=new en;if("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)&&"value"in i.valueBlock)return i.valueBlock.value=e.valueBlock.value,i}}return e}};var Lp=class r{static serialize(e){return e instanceof Xt?e.toBER(!1):this.toASN(e).toBER(!1)}static toASN(e){if(e&&typeof e=="object"&&lo(e))return e.toASN();if(!(e&&typeof e=="object"))throw new TypeError("Parameter 1 should be type of Object.");let t=e.constructor,n=Qt.get(t);Qt.cache(t);let o=[];if(n.itemType){if(!Array.isArray(e))throw new TypeError("Parameter 1 should be type of Array.");if(typeof n.itemType=="number"){let s=ya(n.itemType);if(!s)throw new Error(`Cannot get default converter for array item of ${t.name} ASN1 schema`);o=e.map(a=>s.toASN(a))}else o=e.map(s=>this.toAsnItem({type:n.itemType},"[]",t,s))}else for(let s in n.items){let a=n.items[s],c=e[s];if(c===void 0||a.defaultValue===c||typeof a.defaultValue=="object"&&typeof c=="object"&&_O(this.serialize(a.defaultValue),this.serialize(c)))continue;let l=r.toAsnItem(a,s,t,c);if(typeof a.context=="number")if(a.implicit)if(!a.repeated&&(typeof a.type=="number"||lo(a.type))){let f={};f.valueHex=l instanceof hn?l.valueBeforeDecodeView:l.valueBlock.toBER(),o.push(new as({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},...f}))}else o.push(new Yt({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:l.valueBlock.value}));else o.push(new Yt({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:[l]}));else a.repeated?o=o.concat(l):o.push(l)}let i;switch(n.type){case A.Sequence:i=new vt({value:o});break;case A.Set:i=new en({value:o});break;case A.Choice:if(!o[0])throw new Error(`Schema '${t.name}' has wrong data. Choice cannot be empty.`);i=o[0];break}return i}static toAsnItem(e,t,n,o){let i;if(typeof e.type=="number"){let s=e.converter;if(!s)throw new Error(`Property '${t}' doesn't have converter for type ${g[e.type]} in schema '${n.name}'`);if(e.repeated){if(!Array.isArray(o))throw new TypeError("Parameter 'objProp' should be type of Array.");let a=Array.from(o,l=>s.toASN(l)),c=e.repeated==="sequence"?vt:en;i=new c({value:a})}else i=s.toASN(o)}else if(e.repeated){if(!Array.isArray(o))throw new TypeError("Parameter 'objProp' should be type of Array.");let s=Array.from(o,c=>this.toASN(c)),a=e.repeated==="sequence"?vt:en;i=new a({value:s})}else i=this.toASN(o);return i}};var ve=class extends Array{constructor(e=[]){if(typeof e=="number")super(e);else{super();for(let t of e)this.push(t)}}};var Yb=nr(os());var ee=class r{static serialize(e){return Lp.serialize(e)}static parse(e,t){return Np.parse(e,t)}static toString(e){let t=Yb.BufferSourceConverter.isBufferSource(e)?Yb.BufferSourceConverter.toArrayBuffer(e):r.serialize(e),n=$n(t);if(n.offset===-1)throw new Error(`Cannot decode ASN.1 data. ${n.result.error}`);return n.result.toString()}};function E(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var AO=nr(os()),Bp=class{static isIPv4(e){return/^(\d{1,3}\.){3}\d{1,3}$/.test(e)}static parseIPv4(e){let t=e.split(".");if(t.length!==4)throw new Error("Invalid IPv4 address");return t.map(n=>{let o=parseInt(n,10);if(isNaN(o)||o<0||o>255)throw new Error("Invalid IPv4 address part");return o})}static parseIPv6(e){let n=this.expandIPv6(e).split(":");if(n.length!==8)throw new Error("Invalid IPv6 address");return n.reduce((o,i)=>{let s=parseInt(i,16);if(isNaN(s)||s<0||s>65535)throw new Error("Invalid IPv6 address part");return o.push(s>>8&255),o.push(s&255),o},[])}static expandIPv6(e){if(!e.includes("::"))return e;let t=e.split("::");if(t.length>2)throw new Error("Invalid IPv6 address");let n=t[0]?t[0].split(":"):[],o=t[1]?t[1].split(":"):[],i=8-(n.length+o.length);if(i<0)throw new Error("Invalid IPv6 address");return[...n,...Array(i).fill("0"),...o].join(":")}static formatIPv6(e){let t=[];for(let n=0;n<16;n+=2)t.push((e[n]<<8|e[n+1]).toString(16));return this.compressIPv6(t.join(":"))}static compressIPv6(e){let t=e.split(":"),n=-1,o=0,i=-1,s=0;for(let a=0;a<t.length;a++)t[a]==="0"?(i===-1&&(i=a),s++):(s>o&&(n=i,o=s),i=-1,s=0);if(s>o&&(n=i,o=s),o>1){let a=t.slice(0,n).join(":"),c=t.slice(n+o).join(":");return`${a}::${c}`}return e}static parseCIDR(e){let[t,n]=e.split("/"),o=parseInt(n,10);if(this.isIPv4(t)){if(o<0||o>32)throw new Error("Invalid IPv4 prefix length");return[this.parseIPv4(t),o]}else{if(o<0||o>128)throw new Error("Invalid IPv6 prefix length");return[this.parseIPv6(t),o]}}static decodeIP(e){if(e.length===64&&parseInt(e,16)===0)return"::/0";if(e.length!==16)return e;let t=parseInt(e.slice(8),16).toString(2).split("").reduce((o,i)=>o+ +i,0),n=e.slice(0,8).replace(/(.{2})/g,o=>`${parseInt(o,16)}.`);return n=n.slice(0,-1),`${n}/${t}`}static toString(e){let t=new Uint8Array(e);if(t.length===4)return Array.from(t).join(".");if(t.length===16)return this.formatIPv6(t);if(t.length===8||t.length===32){let n=t.length/2,o=t.slice(0,n),i=t.slice(n);if(t.every(c=>c===0))return t.length===8?"0.0.0.0/0":"::/0";let a=i.reduce((c,l)=>c+(l.toString(2).match(/1/g)||[]).length,0);return t.length===8?`${Array.from(o).join(".")}/${a}`:`${this.formatIPv6(o)}/${a}`}return this.decodeIP(AO.Convert.ToHex(e))}static fromString(e){if(e.includes("/")){let[n,o]=this.parseCIDR(e),i=new Uint8Array(n.length),s=o;for(let c=0;c<i.length;c++)s>=8?(i[c]=255,s-=8):s>0&&(i[c]=255<<8-s,s=0);let a=new Uint8Array(n.length*2);return a.set(n,0),a.set(i,n.length),a.buffer}let t=this.isIPv4(e)?this.parseIPv4(e):this.parseIPv6(e);return new Uint8Array(t).buffer}};var TO=nr(os()),Qb,Zb,Jb,Zt=class{constructor(e={}){Object.assign(this,e)}toString(){return this.bmpString||this.printableString||this.teletexString||this.universalString||this.utf8String||""}};E([p({type:g.TeletexString})],Zt.prototype,"teletexString",void 0);E([p({type:g.PrintableString})],Zt.prototype,"printableString",void 0);E([p({type:g.UniversalString})],Zt.prototype,"universalString",void 0);E([p({type:g.Utf8String})],Zt.prototype,"utf8String",void 0);E([p({type:g.BmpString})],Zt.prototype,"bmpString",void 0);Zt=E([k({type:A.Choice})],Zt);var vf=class extends Zt{constructor(e={}){super(e),Object.assign(this,e)}toString(){return this.ia5String||(this.anyValue?TO.Convert.ToHex(this.anyValue):super.toString())}};E([p({type:g.IA5String})],vf.prototype,"ia5String",void 0);E([p({type:g.Any})],vf.prototype,"anyValue",void 0);vf=E([k({type:A.Choice})],vf);var rl=class{constructor(e={}){this.type="",this.value=new vf,Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],rl.prototype,"type",void 0);E([p({type:vf})],rl.prototype,"value",void 0);var ba=Qb=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,Qb.prototype)}};ba=Qb=E([k({type:A.Set,itemType:rl})],ba);var e9=Zb=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,Zb.prototype)}};e9=Zb=E([k({type:A.Sequence,itemType:ba})],e9);var pt=Jb=class extends e9{constructor(e){super(e),Object.setPrototypeOf(this,Jb.prototype)}};pt=Jb=E([k({type:A.Sequence})],pt);var Wq={fromASN:r=>Bp.toString(bf.fromASN(r)),toASN:r=>bf.toASN(Bp.fromString(r))},va=class{constructor(e={}){this.typeId="",this.value=new ArrayBuffer(0),Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],va.prototype,"typeId",void 0);E([p({type:g.Any,context:0})],va.prototype,"value",void 0);var Mp=class{constructor(e={}){this.partyName=new Zt,Object.assign(this,e)}};E([p({type:Zt,optional:!0,context:0,implicit:!0})],Mp.prototype,"nameAssigner",void 0);E([p({type:Zt,context:1,implicit:!0})],Mp.prototype,"partyName",void 0);var Se=class{constructor(e={}){Object.assign(this,e)}};E([p({type:va,context:0,implicit:!0})],Se.prototype,"otherName",void 0);E([p({type:g.IA5String,context:1,implicit:!0})],Se.prototype,"rfc822Name",void 0);E([p({type:g.IA5String,context:2,implicit:!0})],Se.prototype,"dNSName",void 0);E([p({type:g.Any,context:3,implicit:!0})],Se.prototype,"x400Address",void 0);E([p({type:pt,context:4,implicit:!1})],Se.prototype,"directoryName",void 0);E([p({type:Mp,context:5})],Se.prototype,"ediPartyName",void 0);E([p({type:g.IA5String,context:6,implicit:!0})],Se.prototype,"uniformResourceIdentifier",void 0);E([p({type:g.OctetString,context:7,implicit:!0,converter:Wq})],Se.prototype,"iPAddress",void 0);E([p({type:g.ObjectIdentifier,context:8,implicit:!0})],Se.prototype,"registeredID",void 0);Se=E([k({type:A.Choice})],Se);var xa="1.3.6.1.5.5.7",Ea=`${xa}.1`,IO=`${xa}.2`,nl=`${xa}.3`,Z3=`${xa}.48`,ISe=`${IO}.1`,CSe=`${IO}.2`,t9=`${Z3}.1`,r9=`${Z3}.2`,n9=`${Z3}.3`,o9=`${Z3}.5`,Re="2.5.29";var i9,J3=`${Ea}.1`,hs=class{constructor(e={}){this.accessMethod="",this.accessLocation=new Se,Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],hs.prototype,"accessMethod",void 0);E([p({type:Se})],hs.prototype,"accessLocation",void 0);var ol=i9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,i9.prototype)}};ol=i9=E([k({type:A.Sequence,itemType:hs})],ol);var e4=`${Re}.35`,il=class extends xe{},wi=class{constructor(e={}){e&&Object.assign(this,e)}};E([p({type:il,context:0,optional:!0,implicit:!0})],wi.prototype,"keyIdentifier",void 0);E([p({type:Se,context:1,optional:!0,implicit:!0,repeated:"sequence"})],wi.prototype,"authorityCertIssuer",void 0);E([p({type:g.Integer,context:2,optional:!0,implicit:!0,converter:Fe})],wi.prototype,"authorityCertSerialNumber",void 0);var t4=`${Re}.19`,sl=class{constructor(e={}){this.cA=!1,Object.assign(this,e)}};E([p({type:g.Boolean,defaultValue:!1})],sl.prototype,"cA",void 0);E([p({type:g.Integer,optional:!0})],sl.prototype,"pathLenConstraint",void 0);var s9,Tt=s9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,s9.prototype)}};Tt=s9=E([k({type:A.Sequence,itemType:Se})],Tt);var a9,zq=`${Re}.29`,CO=a9=class extends Tt{constructor(e){super(e),Object.setPrototypeOf(this,a9.prototype)}};CO=a9=E([k({type:A.Sequence})],CO);var c9,n4=`${Re}.32`,s_e=`${n4}.0`,ps=class{constructor(e={}){Object.assign(this,e)}toString(){return this.ia5String||this.visibleString||this.bmpString||this.utf8String||""}};E([p({type:g.IA5String})],ps.prototype,"ia5String",void 0);E([p({type:g.VisibleString})],ps.prototype,"visibleString",void 0);E([p({type:g.BmpString})],ps.prototype,"bmpString",void 0);E([p({type:g.Utf8String})],ps.prototype,"utf8String",void 0);ps=E([k({type:A.Choice})],ps);var Up=class{constructor(e={}){this.organization=new ps,this.noticeNumbers=[],Object.assign(this,e)}};E([p({type:ps})],Up.prototype,"organization",void 0);E([p({type:g.Integer,repeated:"sequence"})],Up.prototype,"noticeNumbers",void 0);var Fp=class{constructor(e={}){Object.assign(this,e)}};E([p({type:Up,optional:!0})],Fp.prototype,"noticeRef",void 0);E([p({type:ps,optional:!0})],Fp.prototype,"explicitText",void 0);var r4=class{constructor(e={}){Object.assign(this,e)}};E([p({type:g.IA5String})],r4.prototype,"cPSuri",void 0);E([p({type:Fp})],r4.prototype,"userNotice",void 0);r4=E([k({type:A.Choice})],r4);var $p=class{constructor(e={}){this.policyQualifierId="",this.qualifier=new ArrayBuffer(0),Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],$p.prototype,"policyQualifierId",void 0);E([p({type:g.Any})],$p.prototype,"qualifier",void 0);var al=class{constructor(e={}){this.policyIdentifier="",Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],al.prototype,"policyIdentifier",void 0);E([p({type:$p,repeated:"sequence",optional:!0})],al.prototype,"policyQualifiers",void 0);var jp=c9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,c9.prototype)}};jp=c9=E([k({type:A.Sequence,itemType:al})],jp);var p_e=`${Re}.20`,Kp=class{constructor(e=0){this.value=e}};E([p({type:g.Integer})],Kp.prototype,"value",void 0);Kp=E([k({type:A.Choice})],Kp);var x_e=`${Re}.27`,PO=class extends Kp{};PO=E([k({type:A.Choice})],PO);var l9,o4=`${Re}.31`,jo;(function(r){r[r.unused=1]="unused",r[r.keyCompromise=2]="keyCompromise",r[r.cACompromise=4]="cACompromise",r[r.affiliationChanged=8]="affiliationChanged",r[r.superseded=16]="superseded",r[r.cessationOfOperation=32]="cessationOfOperation",r[r.certificateHold=64]="certificateHold",r[r.privilegeWithdrawn=128]="privilegeWithdrawn",r[r.aACompromise=256]="aACompromise"})(jo||(jo={}));var Vp=class extends yi{toJSON(){let e=[],t=this.toNumber();return t&jo.aACompromise&&e.push("aACompromise"),t&jo.affiliationChanged&&e.push("affiliationChanged"),t&jo.cACompromise&&e.push("cACompromise"),t&jo.certificateHold&&e.push("certificateHold"),t&jo.cessationOfOperation&&e.push("cessationOfOperation"),t&jo.keyCompromise&&e.push("keyCompromise"),t&jo.privilegeWithdrawn&&e.push("privilegeWithdrawn"),t&jo.superseded&&e.push("superseded"),t&jo.unused&&e.push("unused"),e}toString(){return`[${this.toJSON().join(", ")}]`}},ms=class{constructor(e={}){Object.assign(this,e)}};E([p({type:Se,context:0,repeated:"sequence",implicit:!0})],ms.prototype,"fullName",void 0);E([p({type:ba,context:1,implicit:!0})],ms.prototype,"nameRelativeToCRLIssuer",void 0);ms=E([k({type:A.Choice})],ms);var bi=class{constructor(e={}){Object.assign(this,e)}};E([p({type:ms,context:0,optional:!0})],bi.prototype,"distributionPoint",void 0);E([p({type:Vp,context:1,optional:!0,implicit:!0})],bi.prototype,"reasons",void 0);E([p({type:Se,context:2,optional:!0,repeated:"sequence",implicit:!0})],bi.prototype,"cRLIssuer",void 0);var Sa=l9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,l9.prototype)}};Sa=l9=E([k({type:A.Sequence,itemType:bi})],Sa);var u9,B_e=`${Re}.46`,kO=u9=class extends Sa{constructor(e){super(e),Object.setPrototypeOf(this,u9.prototype)}};kO=u9=E([k({type:A.Sequence,itemType:bi})],kO);var H_e=`${Re}.28`,Kn=class r{constructor(e={}){this.onlyContainsUserCerts=r.ONLY,this.onlyContainsCACerts=r.ONLY,this.indirectCRL=r.ONLY,this.onlyContainsAttributeCerts=r.ONLY,Object.assign(this,e)}};Kn.ONLY=!1;E([p({type:ms,context:0,optional:!0})],Kn.prototype,"distributionPoint",void 0);E([p({type:g.Boolean,context:1,defaultValue:Kn.ONLY,implicit:!0})],Kn.prototype,"onlyContainsUserCerts",void 0);E([p({type:g.Boolean,context:2,defaultValue:Kn.ONLY,implicit:!0})],Kn.prototype,"onlyContainsCACerts",void 0);E([p({type:Vp,context:3,optional:!0,implicit:!0})],Kn.prototype,"onlySomeReasons",void 0);E([p({type:g.Boolean,context:4,defaultValue:Kn.ONLY,implicit:!0})],Kn.prototype,"indirectCRL",void 0);E([p({type:g.Boolean,context:5,defaultValue:Kn.ONLY,implicit:!0})],Kn.prototype,"onlyContainsAttributeCerts",void 0);var OO=`${Re}.21`,Hp;(function(r){r[r.unspecified=0]="unspecified",r[r.keyCompromise=1]="keyCompromise",r[r.cACompromise=2]="cACompromise",r[r.affiliationChanged=3]="affiliationChanged",r[r.superseded=4]="superseded",r[r.cessationOfOperation=5]="cessationOfOperation",r[r.certificateHold=6]="certificateHold",r[r.removeFromCRL=8]="removeFromCRL",r[r.privilegeWithdrawn=9]="privilegeWithdrawn",r[r.aACompromise=10]="aACompromise"})(Hp||(Hp={}));var qp=class{constructor(e=Hp.unspecified){this.reason=Hp.unspecified,this.reason=e}toJSON(){return Hp[this.reason]}toString(){return this.toJSON()}};E([p({type:g.Enumerated})],qp.prototype,"reason",void 0);qp=E([k({type:A.Choice})],qp);var f9,i4=`${Re}.37`,Wp=f9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,f9.prototype)}};Wp=f9=E([k({type:A.Sequence,itemType:g.ObjectIdentifier})],Wp);var tAe=`${i4}.0`,RO=`${nl}.1`,DO=`${nl}.2`,NO=`${nl}.3`,LO=`${nl}.4`,BO=`${nl}.8`,MO=`${nl}.9`;var sAe=`${Re}.54`,d9=class{constructor(e=new ArrayBuffer(0)){this.value=e}};E([p({type:g.Integer,converter:Fe})],d9.prototype,"value",void 0);d9=E([k({type:A.Choice})],d9);var UO=`${Re}.24`,zp=class{constructor(e){this.value=new Date,e&&(this.value=e)}};E([p({type:g.GeneralizedTime})],zp.prototype,"value",void 0);zp=E([k({type:A.Choice})],zp);var h9,p9=`${Re}.18`,FO=h9=class extends Tt{constructor(e){super(e),Object.setPrototypeOf(this,h9.prototype)}};FO=h9=E([k({type:A.Sequence})],FO);var s4=`${Re}.15`,Ko;(function(r){r[r.digitalSignature=1]="digitalSignature",r[r.nonRepudiation=2]="nonRepudiation",r[r.keyEncipherment=4]="keyEncipherment",r[r.dataEncipherment=8]="dataEncipherment",r[r.keyAgreement=16]="keyAgreement",r[r.keyCertSign=32]="keyCertSign",r[r.cRLSign=64]="cRLSign",r[r.encipherOnly=128]="encipherOnly",r[r.decipherOnly=256]="decipherOnly"})(Ko||(Ko={}));var xf=class extends yi{toJSON(){let e=this.toNumber(),t=[];return e&Ko.cRLSign&&t.push("crlSign"),e&Ko.dataEncipherment&&t.push("dataEncipherment"),e&Ko.decipherOnly&&t.push("decipherOnly"),e&Ko.digitalSignature&&t.push("digitalSignature"),e&Ko.encipherOnly&&t.push("encipherOnly"),e&Ko.keyAgreement&&t.push("keyAgreement"),e&Ko.keyCertSign&&t.push("keyCertSign"),e&Ko.keyEncipherment&&t.push("keyEncipherment"),e&Ko.nonRepudiation&&t.push("nonRepudiation"),t}toString(){return`[${this.toJSON().join(", ")}]`}};var m9,IAe=`${Re}.30`,Ef=class{constructor(e={}){this.base=new Se,this.minimum=0,Object.assign(this,e)}};E([p({type:Se})],Ef.prototype,"base",void 0);E([p({type:g.Integer,context:0,defaultValue:0,implicit:!0})],Ef.prototype,"minimum",void 0);E([p({type:g.Integer,context:1,optional:!0,implicit:!0})],Ef.prototype,"maximum",void 0);var a4=m9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,m9.prototype)}};a4=m9=E([k({type:A.Sequence,itemType:Ef})],a4);var c4=class{constructor(e={}){Object.assign(this,e)}};E([p({type:a4,context:0,optional:!0,implicit:!0})],c4.prototype,"permittedSubtrees",void 0);E([p({type:a4,context:1,optional:!0,implicit:!0})],c4.prototype,"excludedSubtrees",void 0);var DAe=`${Re}.36`,l4=class{constructor(e={}){Object.assign(this,e)}};E([p({type:g.Integer,context:0,implicit:!0,optional:!0,converter:Fe})],l4.prototype,"requireExplicitPolicy",void 0);E([p({type:g.Integer,context:1,implicit:!0,optional:!0,converter:Fe})],l4.prototype,"inhibitPolicyMapping",void 0);var g9,UAe=`${Re}.33`,Gp=class{constructor(e={}){this.issuerDomainPolicy="",this.subjectDomainPolicy="",Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],Gp.prototype,"issuerDomainPolicy",void 0);E([p({type:g.ObjectIdentifier})],Gp.prototype,"subjectDomainPolicy",void 0);var $O=g9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,g9.prototype)}};$O=g9=E([k({type:A.Sequence,itemType:Gp})],$O);var y9,w9=`${Re}.17`,u4=y9=class extends Tt{constructor(e){super(e),Object.setPrototypeOf(this,y9.prototype)}};u4=y9=E([k({type:A.Sequence})],u4);var Tr=class{constructor(e={}){this.type="",this.values=[],Object.assign(this,e)}};E([p({type:g.ObjectIdentifier})],Tr.prototype,"type",void 0);E([p({type:g.Any,repeated:"set"})],Tr.prototype,"values",void 0);var b9,eTe=`${Re}.9`,jO=b9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,b9.prototype)}};jO=b9=E([k({type:A.Sequence,itemType:Tr})],jO);var v9=`${Re}.14`,yn=class extends il{};var lTe=`${Re}.16`,f4=class{constructor(e={}){Object.assign(this,e)}};E([p({type:g.GeneralizedTime,context:0,implicit:!0,optional:!0})],f4.prototype,"notBefore",void 0);E([p({type:g.GeneralizedTime,context:1,implicit:!0,optional:!0})],f4.prototype,"notAfter",void 0);var Xp;(function(r){r[r.keyUpdateAllowed=1]="keyUpdateAllowed",r[r.newExtensions=2]="newExtensions",r[r.pKIXCertificate=4]="pKIXCertificate"})(Xp||(Xp={}));var d4=class extends yi{toJSON(){let e=[],t=this.toNumber();return t&Xp.pKIXCertificate&&e.push("pKIXCertificate"),t&Xp.newExtensions&&e.push("newExtensions"),t&Xp.keyUpdateAllowed&&e.push("keyUpdateAllowed"),e}toString(){return`[${this.toJSON().join(", ")}]`}},h4=class{constructor(e={}){this.entrustVers="",this.entrustInfoFlags=new d4,Object.assign(this,e)}};E([p({type:g.GeneralString})],h4.prototype,"entrustVers",void 0);E([p({type:d4})],h4.prototype,"entrustInfoFlags",void 0);var x9,wTe=`${Ea}.11`,KO=x9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,x9.prototype)}};KO=x9=E([k({type:A.Sequence,itemType:hs})],KO);var VO=nr(os()),X=class r{constructor(e={}){this.algorithm="",Object.assign(this,e)}isEqual(e){return e instanceof r&&e.algorithm==this.algorithm&&(e.parameters&&this.parameters&&VO.isEqual(e.parameters,this.parameters)||e.parameters===this.parameters)}};E([p({type:g.ObjectIdentifier})],X.prototype,"algorithm",void 0);E([p({type:g.Any,optional:!0})],X.prototype,"parameters",void 0);var Ir=class{constructor(e={}){this.algorithm=new X,this.subjectPublicKey=new ArrayBuffer(0),Object.assign(this,e)}};E([p({type:X})],Ir.prototype,"algorithm",void 0);E([p({type:g.BitString})],Ir.prototype,"subjectPublicKey",void 0);var Ft=class{constructor(e){if(e)if(typeof e=="string"||typeof e=="number"||e instanceof Date){let t=new Date(e);t.getUTCFullYear()>2049?this.generalTime=t:this.utcTime=t}else Object.assign(this,e)}getTime(){let e=this.utcTime||this.generalTime;if(!e)throw new Error("Cannot get time from CHOICE object");return e}};E([p({type:g.UTCTime})],Ft.prototype,"utcTime",void 0);E([p({type:g.GeneralizedTime})],Ft.prototype,"generalTime",void 0);Ft=E([k({type:A.Choice})],Ft);var gs=class{constructor(e){this.notBefore=new Ft(new Date),this.notAfter=new Ft(new Date),e&&(this.notBefore=new Ft(e.notBefore),this.notAfter=new Ft(e.notAfter))}};E([p({type:Ft})],gs.prototype,"notBefore",void 0);E([p({type:Ft})],gs.prototype,"notAfter",void 0);var E9,Cr=class r{constructor(e={}){this.extnID="",this.critical=r.CRITICAL,this.extnValue=new xe,Object.assign(this,e)}};Cr.CRITICAL=!1;E([p({type:g.ObjectIdentifier})],Cr.prototype,"extnID",void 0);E([p({type:g.Boolean,defaultValue:Cr.CRITICAL})],Cr.prototype,"critical",void 0);E([p({type:xe})],Cr.prototype,"extnValue",void 0);var Vn=E9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,E9.prototype)}};Vn=E9=E([k({type:A.Sequence,itemType:Cr})],Vn);var vi;(function(r){r[r.v1=0]="v1",r[r.v2=1]="v2",r[r.v3=2]="v3"})(vi||(vi={}));var Pr=class{constructor(e={}){this.version=vi.v1,this.serialNumber=new ArrayBuffer(0),this.signature=new X,this.issuer=new pt,this.validity=new gs,this.subject=new pt,this.subjectPublicKeyInfo=new Ir,Object.assign(this,e)}};E([p({type:g.Integer,context:0,defaultValue:vi.v1})],Pr.prototype,"version",void 0);E([p({type:g.Integer,converter:Fe})],Pr.prototype,"serialNumber",void 0);E([p({type:X})],Pr.prototype,"signature",void 0);E([p({type:pt})],Pr.prototype,"issuer",void 0);E([p({type:gs})],Pr.prototype,"validity",void 0);E([p({type:pt})],Pr.prototype,"subject",void 0);E([p({type:Ir})],Pr.prototype,"subjectPublicKeyInfo",void 0);E([p({type:g.BitString,context:1,implicit:!0,optional:!0})],Pr.prototype,"issuerUniqueID",void 0);E([p({type:g.BitString,context:2,implicit:!0,optional:!0})],Pr.prototype,"subjectUniqueID",void 0);E([p({type:Vn,context:3,optional:!0})],Pr.prototype,"extensions",void 0);var uo=class{constructor(e={}){this.tbsCertificate=new Pr,this.signatureAlgorithm=new X,this.signatureValue=new ArrayBuffer(0),Object.assign(this,e)}};E([p({type:Pr,raw:!0})],uo.prototype,"tbsCertificate",void 0);E([p({type:X})],uo.prototype,"signatureAlgorithm",void 0);E([p({type:g.BitString})],uo.prototype,"signatureValue",void 0);var cl=class{constructor(e={}){this.userCertificate=new ArrayBuffer(0),this.revocationDate=new Ft,Object.assign(this,e)}};E([p({type:g.Integer,converter:Fe})],cl.prototype,"userCertificate",void 0);E([p({type:Ft})],cl.prototype,"revocationDate",void 0);E([p({type:Cr,optional:!0,repeated:"sequence"})],cl.prototype,"crlEntryExtensions",void 0);var Hn=class{constructor(e={}){this.signature=new X,this.issuer=new pt,this.thisUpdate=new Ft,Object.assign(this,e)}};E([p({type:g.Integer,optional:!0})],Hn.prototype,"version",void 0);E([p({type:X})],Hn.prototype,"signature",void 0);E([p({type:pt})],Hn.prototype,"issuer",void 0);E([p({type:Ft})],Hn.prototype,"thisUpdate",void 0);E([p({type:Ft,optional:!0})],Hn.prototype,"nextUpdate",void 0);E([p({type:cl,repeated:"sequence",optional:!0})],Hn.prototype,"revokedCertificates",void 0);E([p({type:Cr,optional:!0,context:0,repeated:"sequence"})],Hn.prototype,"crlExtensions",void 0);var ll=class{constructor(e={}){this.tbsCertList=new Hn,this.signatureAlgorithm=new X,this.signature=new ArrayBuffer(0),Object.assign(this,e)}};E([p({type:Hn,raw:!0})],ll.prototype,"tbsCertList",void 0);E([p({type:X})],ll.prototype,"signatureAlgorithm",void 0);E([p({type:g.BitString})],ll.prototype,"signature",void 0);var Y=nr(os());function Yp(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}function Ne(r,e,t,n){if(t==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?r!==e||!n:!e.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?n:t==="a"?n.call(r):n?n.value:e.get(r)}function It(r,e,t,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?r!==e||!o:!e.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(r,t):o?o.value=t:e.set(r,t),t}function L(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var Vo=class{constructor(e={}){this.issuer=new pt,this.serialNumber=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:pt})],Vo.prototype,"issuer",void 0);L([p({type:g.Integer,converter:Fe})],Vo.prototype,"serialNumber",void 0);var ul=class{constructor(e={}){Object.assign(this,e)}};L([p({type:yn,context:0,implicit:!0})],ul.prototype,"subjectKeyIdentifier",void 0);L([p({type:Vo})],ul.prototype,"issuerAndSerialNumber",void 0);ul=L([k({type:A.Choice})],ul);var kr;(function(r){r[r.v0=0]="v0",r[r.v1=1]="v1",r[r.v2=2]="v2",r[r.v3=3]="v3",r[r.v4=4]="v4",r[r.v5=5]="v5"})(kr||(kr={}));var fl=class extends X{};fl=L([k({type:A.Sequence})],fl);var Qp=class extends X{};Qp=L([k({type:A.Sequence})],Qp);var wn=class extends X{};wn=L([k({type:A.Sequence})],wn);var Zp=class extends X{};Zp=L([k({type:A.Sequence})],Zp);var qO=class extends X{};qO=L([k({type:A.Sequence})],qO);var p4=class extends X{};p4=L([k({type:A.Sequence})],p4);var Ho=class{constructor(e={}){this.attrType="",this.attrValues=[],Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],Ho.prototype,"attrType",void 0);L([p({type:g.Any,repeated:"set"})],Ho.prototype,"attrValues",void 0);var S9,bn=class{constructor(e={}){this.version=kr.v0,this.sid=new ul,this.digestAlgorithm=new fl,this.signatureAlgorithm=new Qp,this.signature=new xe,Object.assign(this,e)}};L([p({type:g.Integer})],bn.prototype,"version",void 0);L([p({type:ul})],bn.prototype,"sid",void 0);L([p({type:fl})],bn.prototype,"digestAlgorithm",void 0);L([p({type:Ho,repeated:"set",context:0,implicit:!0,optional:!0,raw:!0})],bn.prototype,"signedAttrs",void 0);L([p({type:Qp})],bn.prototype,"signatureAlgorithm",void 0);L([p({type:xe})],bn.prototype,"signature",void 0);L([p({type:Ho,repeated:"set",context:1,implicit:!0,optional:!0})],bn.prototype,"unsignedAttrs",void 0);var Jp=S9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,S9.prototype)}};Jp=S9=L([k({type:A.Set,itemType:bn})],Jp);var WO=class extends bn{};WO=L([k({type:A.Sequence})],WO);var zO=class extends Ft{};zO=L([k({type:A.Choice})],zO);function re(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var e1=class{constructor(e={}){this.acIssuer=new Se,this.acSerial=0,this.attrs=[],Object.assign(this,e)}};re([p({type:Se})],e1.prototype,"acIssuer",void 0);re([p({type:g.Integer})],e1.prototype,"acSerial",void 0);re([p({type:Tr,repeated:"sequence"})],e1.prototype,"attrs",void 0);var _9,t1=_9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,_9.prototype)}};t1=_9=re([k({type:A.Sequence,itemType:g.ObjectIdentifier})],t1);var Sf=class{constructor(e={}){this.permitUnSpecified=!0,Object.assign(this,e)}};re([p({type:g.Integer,optional:!0})],Sf.prototype,"pathLenConstraint",void 0);re([p({type:t1,implicit:!0,context:0,optional:!0})],Sf.prototype,"permittedAttrs",void 0);re([p({type:t1,implicit:!0,context:1,optional:!0})],Sf.prototype,"excludedAttrs",void 0);re([p({type:g.Boolean,defaultValue:!0})],Sf.prototype,"permitUnSpecified",void 0);var fo=class{constructor(e={}){this.issuer=new Tt,this.serial=new ArrayBuffer(0),this.issuerUID=new ArrayBuffer(0),Object.assign(this,e)}};re([p({type:Tt})],fo.prototype,"issuer",void 0);re([p({type:g.Integer,converter:Fe})],fo.prototype,"serial",void 0);re([p({type:g.BitString,optional:!0})],fo.prototype,"issuerUID",void 0);var A9;(function(r){r[r.publicKey=0]="publicKey",r[r.publicKeyCert=1]="publicKeyCert",r[r.otherObjectTypes=2]="otherObjectTypes"})(A9||(A9={}));var ho=class{constructor(e={}){this.digestedObjectType=A9.publicKey,this.digestAlgorithm=new X,this.objectDigest=new ArrayBuffer(0),Object.assign(this,e)}};re([p({type:g.Enumerated})],ho.prototype,"digestedObjectType",void 0);re([p({type:g.ObjectIdentifier,optional:!0})],ho.prototype,"otherObjectTypeID",void 0);re([p({type:X})],ho.prototype,"digestAlgorithm",void 0);re([p({type:g.BitString})],ho.prototype,"objectDigest",void 0);var dl=class{constructor(e={}){Object.assign(this,e)}};re([p({type:Tt,optional:!0})],dl.prototype,"issuerName",void 0);re([p({type:fo,context:0,implicit:!0,optional:!0})],dl.prototype,"baseCertificateID",void 0);re([p({type:ho,context:1,implicit:!0,optional:!0})],dl.prototype,"objectDigestInfo",void 0);var hl=class{constructor(e={}){Object.assign(this,e)}};re([p({type:Se,repeated:"sequence"})],hl.prototype,"v1Form",void 0);re([p({type:dl,context:0,implicit:!0})],hl.prototype,"v2Form",void 0);hl=re([k({type:A.Choice})],hl);var pl=class{constructor(e={}){this.notBeforeTime=new Date,this.notAfterTime=new Date,Object.assign(this,e)}};re([p({type:g.GeneralizedTime})],pl.prototype,"notBeforeTime",void 0);re([p({type:g.GeneralizedTime})],pl.prototype,"notAfterTime",void 0);var _a=class{constructor(e={}){Object.assign(this,e)}};re([p({type:fo,implicit:!0,context:0,optional:!0})],_a.prototype,"baseCertificateID",void 0);re([p({type:Tt,implicit:!0,context:1,optional:!0})],_a.prototype,"entityName",void 0);re([p({type:ho,implicit:!0,context:2,optional:!0})],_a.prototype,"objectDigestInfo",void 0);var T9;(function(r){r[r.v2=1]="v2"})(T9||(T9={}));var vn=class{constructor(e={}){this.version=T9.v2,this.holder=new _a,this.issuer=new hl,this.signature=new X,this.serialNumber=new ArrayBuffer(0),this.attrCertValidityPeriod=new pl,this.attributes=[],Object.assign(this,e)}};re([p({type:g.Integer})],vn.prototype,"version",void 0);re([p({type:_a})],vn.prototype,"holder",void 0);re([p({type:hl})],vn.prototype,"issuer",void 0);re([p({type:X})],vn.prototype,"signature",void 0);re([p({type:g.Integer,converter:Fe})],vn.prototype,"serialNumber",void 0);re([p({type:pl})],vn.prototype,"attrCertValidityPeriod",void 0);re([p({type:Tr,repeated:"sequence"})],vn.prototype,"attributes",void 0);re([p({type:g.BitString,optional:!0})],vn.prototype,"issuerUniqueID",void 0);re([p({type:Vn,optional:!0})],vn.prototype,"extensions",void 0);var ml=class{constructor(e={}){this.acinfo=new vn,this.signatureAlgorithm=new X,this.signatureValue=new ArrayBuffer(0),Object.assign(this,e)}};re([p({type:vn})],ml.prototype,"acinfo",void 0);re([p({type:X})],ml.prototype,"signatureAlgorithm",void 0);re([p({type:g.BitString})],ml.prototype,"signatureValue",void 0);var r1;(function(r){r[r.unmarked=1]="unmarked",r[r.unclassified=2]="unclassified",r[r.restricted=4]="restricted",r[r.confidential=8]="confidential",r[r.secret=16]="secret",r[r.topSecret=32]="topSecret"})(r1||(r1={}));var _f=class extends yi{};var Af=class{constructor(e={}){this.type="",this.value=new ArrayBuffer(0),Object.assign(this,e)}};re([p({type:g.ObjectIdentifier,implicit:!0,context:0})],Af.prototype,"type",void 0);re([p({type:g.Any,implicit:!0,context:1})],Af.prototype,"value",void 0);var n1=class{constructor(e={}){this.policyId="",this.classList=new _f(r1.unclassified),Object.assign(this,e)}};re([p({type:g.ObjectIdentifier})],n1.prototype,"policyId",void 0);re([p({type:_f,defaultValue:new _f(r1.unclassified)})],n1.prototype,"classList",void 0);re([p({type:Af,repeated:"set"})],n1.prototype,"securityCategories",void 0);var Tf=class{constructor(e={}){Object.assign(this,e)}};re([p({type:xe})],Tf.prototype,"cotets",void 0);re([p({type:g.ObjectIdentifier})],Tf.prototype,"oid",void 0);re([p({type:g.Utf8String})],Tf.prototype,"string",void 0);var m4=class{constructor(e={}){this.values=[],Object.assign(this,e)}};re([p({type:Tt,implicit:!0,context:0,optional:!0})],m4.prototype,"policyAuthority",void 0);re([p({type:Tf,repeated:"sequence"})],m4.prototype,"values",void 0);var uke=`${Ea}.4`,fke=`${Ea}.6`,dke=`${Ea}.10`,hke=`${Re}.55`,o1=`${xa}.10`,pke=`${o1}.1`,mke=`${o1}.2`,gke=`${o1}.3`,yke=`${o1}.4`,wke=`${o1}.6`,I9="2.5.4",bke=`${I9}.72`;var C9,If=class{constructor(e={}){this.targetCertificate=new fo,Object.assign(this,e)}};re([p({type:fo})],If.prototype,"targetCertificate",void 0);re([p({type:Se,optional:!0})],If.prototype,"targetName",void 0);re([p({type:ho,optional:!0})],If.prototype,"certDigestInfo",void 0);var Cf=class{constructor(e={}){Object.assign(this,e)}};re([p({type:Se,context:0,implicit:!0})],Cf.prototype,"targetName",void 0);re([p({type:Se,context:1,implicit:!0})],Cf.prototype,"targetGroup",void 0);re([p({type:If,context:2,implicit:!0})],Cf.prototype,"targetCert",void 0);Cf=re([k({type:A.Choice})],Cf);var g4=C9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,C9.prototype)}};g4=C9=re([k({type:A.Sequence,itemType:Cf})],g4);var P9,GO=P9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,P9.prototype)}};GO=P9=re([k({type:A.Sequence,itemType:g4})],GO);var y4=class{constructor(e={}){Object.assign(this,e)}};re([p({type:Tt,implicit:!0,context:0,optional:!0})],y4.prototype,"roleAuthority",void 0);re([p({type:Se,implicit:!0,context:1})],y4.prototype,"roleName",void 0);var i1=class{constructor(e={}){this.service=new Se,this.ident=new Se,Object.assign(this,e)}};re([p({type:Se})],i1.prototype,"service",void 0);re([p({type:Se})],i1.prototype,"ident",void 0);re([p({type:xe,optional:!0})],i1.prototype,"authInfo",void 0);var k9,s1=class{constructor(e={}){this.otherCertFormat="",this.otherCert=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],s1.prototype,"otherCertFormat",void 0);L([p({type:g.Any})],s1.prototype,"otherCert",void 0);var gl=class{constructor(e={}){Object.assign(this,e)}};L([p({type:uo})],gl.prototype,"certificate",void 0);L([p({type:ml,context:2,implicit:!0})],gl.prototype,"v2AttrCert",void 0);L([p({type:s1,context:3,implicit:!0})],gl.prototype,"other",void 0);gl=L([k({type:A.Choice})],gl);var yl=k9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,k9.prototype)}};yl=k9=L([k({type:A.Set,itemType:gl})],yl);var po=class{constructor(e={}){this.contentType="",this.content=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],po.prototype,"contentType",void 0);L([p({type:g.Any,context:0})],po.prototype,"content",void 0);var Pf=class{constructor(e={}){Object.assign(this,e)}};L([p({type:xe})],Pf.prototype,"single",void 0);L([p({type:g.Any})],Pf.prototype,"any",void 0);Pf=L([k({type:A.Choice})],Pf);var wl=class{constructor(e={}){this.eContentType="",Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],wl.prototype,"eContentType",void 0);L([p({type:Pf,context:0,optional:!0})],wl.prototype,"eContent",void 0);var a1=class{constructor(e={}){Object.assign(this,e)}};L([p({type:xe,context:0,implicit:!0,optional:!0})],a1.prototype,"value",void 0);L([p({type:xe,converter:SO,context:0,implicit:!0,optional:!0,repeated:"sequence"})],a1.prototype,"constructedValue",void 0);a1=L([k({type:A.Choice})],a1);var Aa=class{constructor(e={}){this.contentType="",this.contentEncryptionAlgorithm=new Zp,Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],Aa.prototype,"contentType",void 0);L([p({type:Zp})],Aa.prototype,"contentEncryptionAlgorithm",void 0);L([p({type:a1,optional:!0})],Aa.prototype,"encryptedContent",void 0);var Ta=class{constructor(e={}){this.keyAttrId="",Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],Ta.prototype,"keyAttrId",void 0);L([p({type:g.Any,optional:!0})],Ta.prototype,"keyAttr",void 0);var O9,kf=class{constructor(e={}){this.subjectKeyIdentifier=new yn,Object.assign(this,e)}};L([p({type:yn})],kf.prototype,"subjectKeyIdentifier",void 0);L([p({type:g.GeneralizedTime,optional:!0})],kf.prototype,"date",void 0);L([p({type:Ta,optional:!0})],kf.prototype,"other",void 0);var Of=class{constructor(e={}){Object.assign(this,e)}};L([p({type:kf,context:0,implicit:!0,optional:!0})],Of.prototype,"rKeyId",void 0);L([p({type:Vo,optional:!0})],Of.prototype,"issuerAndSerialNumber",void 0);Of=L([k({type:A.Choice})],Of);var c1=class{constructor(e={}){this.rid=new Of,this.encryptedKey=new xe,Object.assign(this,e)}};L([p({type:Of})],c1.prototype,"rid",void 0);L([p({type:xe})],c1.prototype,"encryptedKey",void 0);var w4=O9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,O9.prototype)}};w4=O9=L([k({type:A.Sequence,itemType:c1})],w4);var l1=class{constructor(e={}){this.algorithm=new X,this.publicKey=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:X})],l1.prototype,"algorithm",void 0);L([p({type:g.BitString})],l1.prototype,"publicKey",void 0);var bl=class{constructor(e={}){Object.assign(this,e)}};L([p({type:yn,context:0,implicit:!0,optional:!0})],bl.prototype,"subjectKeyIdentifier",void 0);L([p({type:l1,context:1,implicit:!0,optional:!0})],bl.prototype,"originatorKey",void 0);L([p({type:Vo,optional:!0})],bl.prototype,"issuerAndSerialNumber",void 0);bl=L([k({type:A.Choice})],bl);var ys=class{constructor(e={}){this.version=kr.v3,this.originator=new bl,this.keyEncryptionAlgorithm=new wn,this.recipientEncryptedKeys=new w4,Object.assign(this,e)}};L([p({type:g.Integer})],ys.prototype,"version",void 0);L([p({type:bl,context:0})],ys.prototype,"originator",void 0);L([p({type:xe,context:1,optional:!0})],ys.prototype,"ukm",void 0);L([p({type:wn})],ys.prototype,"keyEncryptionAlgorithm",void 0);L([p({type:w4})],ys.prototype,"recipientEncryptedKeys",void 0);var Rf=class{constructor(e={}){Object.assign(this,e)}};L([p({type:yn,context:0,implicit:!0})],Rf.prototype,"subjectKeyIdentifier",void 0);L([p({type:Vo})],Rf.prototype,"issuerAndSerialNumber",void 0);Rf=L([k({type:A.Choice})],Rf);var Ia=class{constructor(e={}){this.version=kr.v0,this.rid=new Rf,this.keyEncryptionAlgorithm=new wn,this.encryptedKey=new xe,Object.assign(this,e)}};L([p({type:g.Integer})],Ia.prototype,"version",void 0);L([p({type:Rf})],Ia.prototype,"rid",void 0);L([p({type:wn})],Ia.prototype,"keyEncryptionAlgorithm",void 0);L([p({type:xe})],Ia.prototype,"encryptedKey",void 0);var vl=class{constructor(e={}){this.keyIdentifier=new xe,Object.assign(this,e)}};L([p({type:xe})],vl.prototype,"keyIdentifier",void 0);L([p({type:g.GeneralizedTime,optional:!0})],vl.prototype,"date",void 0);L([p({type:Ta,optional:!0})],vl.prototype,"other",void 0);var Ca=class{constructor(e={}){this.version=kr.v4,this.kekid=new vl,this.keyEncryptionAlgorithm=new wn,this.encryptedKey=new xe,Object.assign(this,e)}};L([p({type:g.Integer})],Ca.prototype,"version",void 0);L([p({type:vl})],Ca.prototype,"kekid",void 0);L([p({type:wn})],Ca.prototype,"keyEncryptionAlgorithm",void 0);L([p({type:xe})],Ca.prototype,"encryptedKey",void 0);var Pa=class{constructor(e={}){this.version=kr.v0,this.keyEncryptionAlgorithm=new wn,this.encryptedKey=new xe,Object.assign(this,e)}};L([p({type:g.Integer})],Pa.prototype,"version",void 0);L([p({type:p4,context:0,optional:!0})],Pa.prototype,"keyDerivationAlgorithm",void 0);L([p({type:wn})],Pa.prototype,"keyEncryptionAlgorithm",void 0);L([p({type:xe})],Pa.prototype,"encryptedKey",void 0);var u1=class{constructor(e={}){this.oriType="",this.oriValue=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],u1.prototype,"oriType",void 0);L([p({type:g.Any})],u1.prototype,"oriValue",void 0);var ws=class{constructor(e={}){Object.assign(this,e)}};L([p({type:Ia,optional:!0})],ws.prototype,"ktri",void 0);L([p({type:ys,context:1,implicit:!0,optional:!0})],ws.prototype,"kari",void 0);L([p({type:Ca,context:2,implicit:!0,optional:!0})],ws.prototype,"kekri",void 0);L([p({type:Pa,context:3,implicit:!0,optional:!0})],ws.prototype,"pwri",void 0);L([p({type:u1,context:4,implicit:!0,optional:!0})],ws.prototype,"ori",void 0);ws=L([k({type:A.Choice})],ws);var R9,f1=R9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,R9.prototype)}};f1=R9=L([k({type:A.Set,itemType:ws})],f1);var D9,XO=`${xa}.16`,wRe=`${XO}.2`,bRe=`${XO}.4`,Df=class{constructor(e={}){this.otherRevInfoFormat="",this.otherRevInfo=new ArrayBuffer(0),Object.assign(this,e)}};L([p({type:g.ObjectIdentifier})],Df.prototype,"otherRevInfoFormat",void 0);L([p({type:g.Any})],Df.prototype,"otherRevInfo",void 0);var b4=class{constructor(e={}){this.other=new Df,Object.assign(this,e)}};L([p({type:Df,context:1,implicit:!0})],b4.prototype,"other",void 0);b4=L([k({type:A.Choice})],b4);var Nf=D9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,D9.prototype)}};Nf=D9=L([k({type:A.Set,itemType:b4})],Nf);var Lf=class{constructor(e={}){Object.assign(this,e)}};L([p({type:yl,context:0,implicit:!0,optional:!0})],Lf.prototype,"certs",void 0);L([p({type:Nf,context:1,implicit:!0,optional:!0})],Lf.prototype,"crls",void 0);var N9,L9=N9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,N9.prototype)}};L9=N9=L([k({type:A.Set,itemType:Ho})],L9);var xl=class{constructor(e={}){this.version=kr.v0,this.recipientInfos=new f1,this.encryptedContentInfo=new Aa,Object.assign(this,e)}};L([p({type:g.Integer})],xl.prototype,"version",void 0);L([p({type:Lf,context:0,implicit:!0,optional:!0})],xl.prototype,"originatorInfo",void 0);L([p({type:f1})],xl.prototype,"recipientInfos",void 0);L([p({type:Aa})],xl.prototype,"encryptedContentInfo",void 0);L([p({type:L9,context:1,implicit:!0,optional:!0})],xl.prototype,"unprotectedAttrs",void 0);var YO="1.2.840.113549.1.7.2";var B9,v4=B9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,B9.prototype)}};v4=B9=L([k({type:A.Set,itemType:fl})],v4);var bs=class{constructor(e={}){this.version=kr.v0,this.digestAlgorithms=new v4,this.encapContentInfo=new wl,this.signerInfos=new Jp,Object.assign(this,e)}};L([p({type:g.Integer})],bs.prototype,"version",void 0);L([p({type:v4})],bs.prototype,"digestAlgorithms",void 0);L([p({type:wl})],bs.prototype,"encapContentInfo",void 0);L([p({type:yl,context:0,implicit:!0,optional:!0})],bs.prototype,"certificates",void 0);L([p({type:Nf,context:1,implicit:!0,optional:!0})],bs.prototype,"crls",void 0);L([p({type:Jp})],bs.prototype,"signerInfos",void 0);var El="1.2.840.10045.2.1";var d1="1.2.840.10045.4.1",x4="1.2.840.10045.4.3.1",h1="1.2.840.10045.4.3.2",p1="1.2.840.10045.4.3.3",m1="1.2.840.10045.4.3.4";var M9="1.2.840.10045.3.1.7";var U9="1.3.132.0.34";var F9="1.3.132.0.35";function g1(r){return new X({algorithm:r})}var ZO=g1(d1),mDe=g1(x4),JO=g1(h1),eR=g1(p1),tR=g1(m1);function mt(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var y1=class{constructor(e={}){Object.assign(this,e)}};mt([p({type:g.ObjectIdentifier})],y1.prototype,"fieldType",void 0);mt([p({type:g.Any})],y1.prototype,"parameters",void 0);y1=mt([k({type:A.Sequence})],y1);var $9=class extends xe{};var Bf=class{constructor(e={}){Object.assign(this,e)}};mt([p({type:g.OctetString})],Bf.prototype,"a",void 0);mt([p({type:g.OctetString})],Bf.prototype,"b",void 0);mt([p({type:g.BitString,optional:!0})],Bf.prototype,"seed",void 0);Bf=mt([k({type:A.Sequence})],Bf);var j9;(function(r){r[r.ecpVer1=1]="ecpVer1"})(j9||(j9={}));var xi=class{constructor(e={}){this.version=j9.ecpVer1,Object.assign(this,e)}};mt([p({type:g.Integer})],xi.prototype,"version",void 0);mt([p({type:y1})],xi.prototype,"fieldID",void 0);mt([p({type:Bf})],xi.prototype,"curve",void 0);mt([p({type:$9})],xi.prototype,"base",void 0);mt([p({type:g.Integer,converter:Fe})],xi.prototype,"order",void 0);mt([p({type:g.Integer,optional:!0})],xi.prototype,"cofactor",void 0);xi=mt([k({type:A.Sequence})],xi);var Ei=class{constructor(e={}){Object.assign(this,e)}};mt([p({type:g.ObjectIdentifier})],Ei.prototype,"namedCurve",void 0);mt([p({type:g.Null})],Ei.prototype,"implicitCurve",void 0);mt([p({type:xi})],Ei.prototype,"specifiedCurve",void 0);Ei=mt([k({type:A.Choice})],Ei);var Mf=class{constructor(e={}){this.version=1,this.privateKey=new xe,Object.assign(this,e)}};mt([p({type:g.Integer})],Mf.prototype,"version",void 0);mt([p({type:xe})],Mf.prototype,"privateKey",void 0);mt([p({type:Ei,context:0,optional:!0})],Mf.prototype,"parameters",void 0);mt([p({type:g.BitString,context:1,optional:!0})],Mf.prototype,"publicKey",void 0);var Sl=class{constructor(e={}){this.r=new ArrayBuffer(0),this.s=new ArrayBuffer(0),Object.assign(this,e)}};mt([p({type:g.Integer,converter:Fe})],Sl.prototype,"r",void 0);mt([p({type:g.Integer,converter:Fe})],Sl.prototype,"s",void 0);function nt(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var xn="1.2.840.113549.1.1",Si=`${xn}.1`,rR=`${xn}.7`,nR=`${xn}.9`,ka=`${xn}.10`,oR=`${xn}.2`,iR=`${xn}.4`,Uf=`${xn}.5`,sR=`${xn}.14`;var E4=`${xn}.11`,Ff=`${xn}.12`,$f=`${xn}.13`,K9=`${xn}.15`,V9=`${xn}.16`,_l="1.3.14.3.2.26",S4="2.16.840.1.101.3.4.2.4",Al="2.16.840.1.101.3.4.2.1",Tl="2.16.840.1.101.3.4.2.2",Il="2.16.840.1.101.3.4.2.3",aR="2.16.840.1.101.3.4.2.5",cR="2.16.840.1.101.3.4.2.6",lR="1.2.840.113549.2.2",uR="1.2.840.113549.2.5",Oa=`${xn}.8`;function rr(r){return new X({algorithm:r,parameters:null})}var qDe=rr(lR),WDe=rr(uR),vs=rr(_l),zDe=rr(S4),GDe=rr(Al),XDe=rr(Tl),YDe=rr(Il),QDe=rr(aR),ZDe=rr(cR),_4=new X({algorithm:Oa,parameters:ee.serialize(vs)}),H9=new X({algorithm:nR,parameters:ee.serialize(bf.toASN(new Uint8Array([218,57,163,238,94,107,75,13,50,85,191,239,149,96,24,144,175,216,7,9]).buffer))}),JDe=rr(Si),eNe=rr(oR),tNe=rr(iR),rNe=rr(Uf),nNe=rr(K9),oNe=rr(V9),iNe=rr(Ff),sNe=rr($f),aNe=rr(K9),cNe=rr(V9);var jf=class{constructor(e={}){this.hashAlgorithm=new X(vs),this.maskGenAlgorithm=new X({algorithm:Oa,parameters:ee.serialize(vs)}),this.pSourceAlgorithm=new X(H9),Object.assign(this,e)}};nt([p({type:X,context:0,defaultValue:vs})],jf.prototype,"hashAlgorithm",void 0);nt([p({type:X,context:1,defaultValue:_4})],jf.prototype,"maskGenAlgorithm",void 0);nt([p({type:X,context:2,defaultValue:H9})],jf.prototype,"pSourceAlgorithm",void 0);var mNe=new X({algorithm:rR,parameters:ee.serialize(new jf)});var _i=class{constructor(e={}){this.hashAlgorithm=new X(vs),this.maskGenAlgorithm=new X({algorithm:Oa,parameters:ee.serialize(vs)}),this.saltLength=20,this.trailerField=1,Object.assign(this,e)}};nt([p({type:X,context:0,defaultValue:vs})],_i.prototype,"hashAlgorithm",void 0);nt([p({type:X,context:1,defaultValue:_4})],_i.prototype,"maskGenAlgorithm",void 0);nt([p({type:g.Integer,context:2,defaultValue:20})],_i.prototype,"saltLength",void 0);nt([p({type:g.Integer,context:3,defaultValue:1})],_i.prototype,"trailerField",void 0);var ENe=new X({algorithm:ka,parameters:ee.serialize(new _i)});var Cl=class{constructor(e={}){this.digestAlgorithm=new X,this.digest=new xe,Object.assign(this,e)}};nt([p({type:X})],Cl.prototype,"digestAlgorithm",void 0);nt([p({type:xe})],Cl.prototype,"digest",void 0);var q9,Kf=class{constructor(e={}){this.prime=new ArrayBuffer(0),this.exponent=new ArrayBuffer(0),this.coefficient=new ArrayBuffer(0),Object.assign(this,e)}};nt([p({type:g.Integer,converter:Fe})],Kf.prototype,"prime",void 0);nt([p({type:g.Integer,converter:Fe})],Kf.prototype,"exponent",void 0);nt([p({type:g.Integer,converter:Fe})],Kf.prototype,"coefficient",void 0);var A4=q9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,q9.prototype)}};A4=q9=nt([k({type:A.Sequence,itemType:Kf})],A4);var mo=class{constructor(e={}){this.version=0,this.modulus=new ArrayBuffer(0),this.publicExponent=new ArrayBuffer(0),this.privateExponent=new ArrayBuffer(0),this.prime1=new ArrayBuffer(0),this.prime2=new ArrayBuffer(0),this.exponent1=new ArrayBuffer(0),this.exponent2=new ArrayBuffer(0),this.coefficient=new ArrayBuffer(0),Object.assign(this,e)}};nt([p({type:g.Integer})],mo.prototype,"version",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"modulus",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"publicExponent",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"privateExponent",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"prime1",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"prime2",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"exponent1",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"exponent2",void 0);nt([p({type:g.Integer,converter:Fe})],mo.prototype,"coefficient",void 0);nt([p({type:A4,optional:!0})],mo.prototype,"otherPrimeInfos",void 0);var Vf=class{constructor(e={}){this.modulus=new ArrayBuffer(0),this.publicExponent=new ArrayBuffer(0),Object.assign(this,e)}};nt([p({type:g.Integer,converter:Fe})],Vf.prototype,"modulus",void 0);nt([p({type:g.Integer,converter:Fe})],Vf.prototype,"publicExponent",void 0);var W9;(function(r){r[r.Transient=0]="Transient",r[r.Singleton=1]="Singleton",r[r.ResolutionScoped=2]="ResolutionScoped",r[r.ContainerScoped=3]="ContainerScoped"})(W9||(W9={}));var Or=W9;var RR=nr(OR(),1),{__extends:qf,__assign:JNe,__rest:Jq,__decorate:eLe,__param:tLe,__metadata:rLe,__awaiter:DR,__generator:NR,__exportStar:nLe,__createBinding:oLe,__values:w1,__read:b1,__spread:qo,__spreadArrays:iLe,__await:sLe,__asyncGenerator:aLe,__asyncDelegator:cLe,__asyncValues:lLe,__makeTemplateObject:uLe,__importStar:fLe,__importDefault:dLe,__classPrivateFieldGet:hLe,__classPrivateFieldSet:pLe}=RR.default;var eW="injectionTokens";function G9(r){var e=Reflect.getMetadata("design:paramtypes",r)||[],t=Reflect.getOwnMetadata(eW,r)||{};return Object.keys(t).forEach(function(n){e[+n]=t[n]}),e}function v1(r){return!!r.useClass}function Wf(r){return!!r.useFactory}var C4=(function(){function r(e){this.wrap=e,this.reflectMethods=["get","getPrototypeOf","setPrototypeOf","getOwnPropertyDescriptor","defineProperty","has","set","deleteProperty","apply","construct","ownKeys"]}return r.prototype.createProxy=function(e){var t=this,n={},o=!1,i,s=function(){return o||(i=e(t.wrap()),o=!0),i};return new Proxy(n,this.createHandler(s))},r.prototype.createHandler=function(e){var t={},n=function(o){t[o]=function(){for(var i=[],s=0;s<arguments.length;s++)i[s]=arguments[s];i[0]=e();var a=Reflect[o];return a.apply(void 0,qo(i))}};return this.reflectMethods.forEach(n),t},r})();function Ra(r){return typeof r=="string"||typeof r=="symbol"}function X9(r){return typeof r=="object"&&"token"in r&&"multiple"in r}function P4(r){return typeof r=="object"&&"token"in r&&"transform"in r}function LR(r){return typeof r=="function"||r instanceof C4}function Pl(r){return!!r.useToken}function kl(r){return r.useValue!=null}function BR(r){return v1(r)||kl(r)||Pl(r)||Wf(r)}var tW=(function(){function r(){this._registryMap=new Map}return r.prototype.entries=function(){return this._registryMap.entries()},r.prototype.getAll=function(e){return this.ensure(e),this._registryMap.get(e)},r.prototype.get=function(e){this.ensure(e);var t=this._registryMap.get(e);return t[t.length-1]||null},r.prototype.set=function(e,t){this.ensure(e),this._registryMap.get(e).push(t)},r.prototype.setAll=function(e,t){this._registryMap.set(e,t)},r.prototype.has=function(e){return this.ensure(e),this._registryMap.get(e).length>0},r.prototype.clear=function(){this._registryMap.clear()},r.prototype.ensure=function(e){this._registryMap.has(e)||this._registryMap.set(e,[])},r})(),x1=tW;var rW=(function(r){qf(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e})(x1),MR=rW;var nW=(function(){function r(){this.scopedResolutions=new Map}return r})(),E1=nW;function oW(r,e){if(r===null)return"at position #"+e;var t=r.split(",")[e].trim();return'"'+t+'" at position #'+e}function iW(r,e,t){return t===void 0&&(t=" "),qo([r],e.message.split(`
66
66
  `).map(function(n){return t+n})).join(`
67
67
  `)}function Y9(r,e,t){var n=b1(r.toString().match(/constructor\(([\w, ]+)\)/)||[],2),o=n[1],i=o===void 0?null:o,s=oW(i,e);return iW("Cannot inject the dependency "+s+' of "'+r.name+'" constructor. Reason:',t)}function UR(r){if(typeof r.dispose!="function")return!1;var e=r.dispose;return!(e.length>0)}var sW=(function(r){qf(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e})(x1);var aW=(function(r){qf(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e})(x1);var cW=(function(){function r(){this.preResolution=new sW,this.postResolution=new aW}return r})(),FR=cW;var Q9=new Map,lW=(function(){function r(e){this.parent=e,this._registry=new MR,this.interceptors=new FR,this.disposed=!1,this.disposables=new Set}return r.prototype.register=function(e,t,n){n===void 0&&(n={lifecycle:Or.Transient}),this.ensureNotDisposed();var o;if(BR(t)?o=t:o={useClass:t},Pl(o))for(var i=[e],s=o;s!=null;){var a=s.useToken;if(i.includes(a))throw new Error("Token registration cycle detected! "+qo(i,[a]).join(" -> "));i.push(a);var c=this._registry.get(a);c&&Pl(c.provider)?s=c.provider:s=null}if((n.lifecycle===Or.Singleton||n.lifecycle==Or.ContainerScoped||n.lifecycle==Or.ResolutionScoped)&&(kl(o)||Wf(o)))throw new Error('Cannot use lifecycle "'+Or[n.lifecycle]+'" with ValueProviders or FactoryProviders');return this._registry.set(e,{provider:o,options:n}),this},r.prototype.registerType=function(e,t){return this.ensureNotDisposed(),Ra(t)?this.register(e,{useToken:t}):this.register(e,{useClass:t})},r.prototype.registerInstance=function(e,t){return this.ensureNotDisposed(),this.register(e,{useValue:t})},r.prototype.registerSingleton=function(e,t){if(this.ensureNotDisposed(),Ra(e)){if(Ra(t))return this.register(e,{useToken:t},{lifecycle:Or.Singleton});if(t)return this.register(e,{useClass:t},{lifecycle:Or.Singleton});throw new Error('Cannot register a type name as a singleton without a "to" token')}var n=e;return t&&!Ra(t)&&(n=t),this.register(e,{useClass:n},{lifecycle:Or.Singleton})},r.prototype.resolve=function(e,t,n){t===void 0&&(t=new E1),n===void 0&&(n=!1),this.ensureNotDisposed();var o=this.getRegistration(e);if(!o&&Ra(e)){if(n)return;throw new Error('Attempted to resolve unregistered dependency token: "'+e.toString()+'"')}if(this.executePreResolutionInterceptor(e,"Single"),o){var i=this.resolveRegistration(o,t);return this.executePostResolutionInterceptor(e,i,"Single"),i}if(LR(e)){var i=this.construct(e,t);return this.executePostResolutionInterceptor(e,i,"Single"),i}throw new Error("Attempted to construct an undefined constructor. Could mean a circular dependency problem. Try using `delay` function.")},r.prototype.executePreResolutionInterceptor=function(e,t){var n,o;if(this.interceptors.preResolution.has(e)){var i=[];try{for(var s=w1(this.interceptors.preResolution.getAll(e)),a=s.next();!a.done;a=s.next()){var c=a.value;c.options.frequency!="Once"&&i.push(c),c.callback(e,t)}}catch(l){n={error:l}}finally{try{a&&!a.done&&(o=s.return)&&o.call(s)}finally{if(n)throw n.error}}this.interceptors.preResolution.setAll(e,i)}},r.prototype.executePostResolutionInterceptor=function(e,t,n){var o,i;if(this.interceptors.postResolution.has(e)){var s=[];try{for(var a=w1(this.interceptors.postResolution.getAll(e)),c=a.next();!c.done;c=a.next()){var l=c.value;l.options.frequency!="Once"&&s.push(l),l.callback(e,t,n)}}catch(f){o={error:f}}finally{try{c&&!c.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}this.interceptors.postResolution.setAll(e,s)}},r.prototype.resolveRegistration=function(e,t){if(this.ensureNotDisposed(),e.options.lifecycle===Or.ResolutionScoped&&t.scopedResolutions.has(e))return t.scopedResolutions.get(e);var n=e.options.lifecycle===Or.Singleton,o=e.options.lifecycle===Or.ContainerScoped,i=n||o,s;return kl(e.provider)?s=e.provider.useValue:Pl(e.provider)?s=i?e.instance||(e.instance=this.resolve(e.provider.useToken,t)):this.resolve(e.provider.useToken,t):v1(e.provider)?s=i?e.instance||(e.instance=this.construct(e.provider.useClass,t)):this.construct(e.provider.useClass,t):Wf(e.provider)?s=e.provider.useFactory(this):s=this.construct(e.provider,t),e.options.lifecycle===Or.ResolutionScoped&&t.scopedResolutions.set(e,s),s},r.prototype.resolveAll=function(e,t,n){var o=this;t===void 0&&(t=new E1),n===void 0&&(n=!1),this.ensureNotDisposed();var i=this.getAllRegistrations(e);if(!i&&Ra(e)){if(n)return[];throw new Error('Attempted to resolve unregistered dependency token: "'+e.toString()+'"')}if(this.executePreResolutionInterceptor(e,"All"),i){var s=i.map(function(c){return o.resolveRegistration(c,t)});return this.executePostResolutionInterceptor(e,s,"All"),s}var a=[this.construct(e,t)];return this.executePostResolutionInterceptor(e,a,"All"),a},r.prototype.isRegistered=function(e,t){return t===void 0&&(t=!1),this.ensureNotDisposed(),this._registry.has(e)||t&&(this.parent||!1)&&this.parent.isRegistered(e,!0)},r.prototype.reset=function(){this.ensureNotDisposed(),this._registry.clear(),this.interceptors.preResolution.clear(),this.interceptors.postResolution.clear()},r.prototype.clearInstances=function(){var e,t;this.ensureNotDisposed();try{for(var n=w1(this._registry.entries()),o=n.next();!o.done;o=n.next()){var i=b1(o.value,2),s=i[0],a=i[1];this._registry.setAll(s,a.filter(function(c){return!kl(c.provider)}).map(function(c){return c.instance=void 0,c}))}}catch(c){e={error:c}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}},r.prototype.createChildContainer=function(){var e,t;this.ensureNotDisposed();var n=new r(this);try{for(var o=w1(this._registry.entries()),i=o.next();!i.done;i=o.next()){var s=b1(i.value,2),a=s[0],c=s[1];c.some(function(l){var f=l.options;return f.lifecycle===Or.ContainerScoped})&&n._registry.setAll(a,c.map(function(l){return l.options.lifecycle===Or.ContainerScoped?{provider:l.provider,options:l.options}:l}))}}catch(l){e={error:l}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return n},r.prototype.beforeResolution=function(e,t,n){n===void 0&&(n={frequency:"Always"}),this.interceptors.preResolution.set(e,{callback:t,options:n})},r.prototype.afterResolution=function(e,t,n){n===void 0&&(n={frequency:"Always"}),this.interceptors.postResolution.set(e,{callback:t,options:n})},r.prototype.dispose=function(){return DR(this,void 0,void 0,function(){var e;return NR(this,function(t){switch(t.label){case 0:return this.disposed=!0,e=[],this.disposables.forEach(function(n){var o=n.dispose();o&&e.push(o)}),[4,Promise.all(e)];case 1:return t.sent(),[2]}})})},r.prototype.getRegistration=function(e){return this.isRegistered(e)?this._registry.get(e):this.parent?this.parent.getRegistration(e):null},r.prototype.getAllRegistrations=function(e){return this.isRegistered(e)?this._registry.getAll(e):this.parent?this.parent.getAllRegistrations(e):null},r.prototype.construct=function(e,t){var n=this;if(e instanceof C4)return e.createProxy(function(i){return n.resolve(i,t)});var o=(function(){var i=Q9.get(e);if(!i||i.length===0){if(e.length===0)return new e;throw new Error('TypeInfo not known for "'+e.name+'"')}var s=i.map(n.resolveParams(t,e));return new(e.bind.apply(e,qo([void 0],s)))})();return UR(o)&&this.disposables.add(o),o},r.prototype.resolveParams=function(e,t){var n=this;return function(o,i){var s,a,c;try{return X9(o)?P4(o)?o.multiple?(s=n.resolve(o.transform)).transform.apply(s,qo([n.resolveAll(o.token,new E1,o.isOptional)],o.transformArgs)):(a=n.resolve(o.transform)).transform.apply(a,qo([n.resolve(o.token,e,o.isOptional)],o.transformArgs)):o.multiple?n.resolveAll(o.token,new E1,o.isOptional):n.resolve(o.token,e,o.isOptional):P4(o)?(c=n.resolve(o.transform,e)).transform.apply(c,qo([n.resolve(o.token,e)],o.transformArgs)):n.resolve(o,e)}catch(l){throw new Error(Y9(t,i,l))}}},r.prototype.ensureNotDisposed=function(){if(this.disposed)throw new Error("This container has been disposed, you cannot interact with a disposed container")},r})(),xt=new lW;function uW(r){return function(e){Q9.set(e,G9(e)),r&&r.token&&(Array.isArray(r.token)?r.token.forEach(function(t){xt.register(t,e)}):xt.register(r.token,e))}}var Da=uW;if(typeof Reflect>"u"||!Reflect.getMetadata)throw new Error(`tsyringe requires a reflect polyfill. Please add 'import "reflect-metadata"' to the top of your entry point.`);function Je(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}function et(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var J9,Ol=class{constructor(e={}){this.attrId="",this.attrValues=[],Object.assign(e)}};et([p({type:g.ObjectIdentifier})],Ol.prototype,"attrId",void 0);et([p({type:g.Any,repeated:"set"})],Ol.prototype,"attrValues",void 0);var $R=J9=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,J9.prototype)}};$R=J9=et([k({type:A.Sequence,itemType:Ol})],$R);var ev,jR=ev=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,ev.prototype)}};jR=ev=et([k({type:A.Sequence,itemType:po})],jR);var fW="1.2.840.113549",dW=`${fW}.1`,KR=`${dW}.12`,zf=`${KR}.1`,IMe=`${zf}.1`,CMe=`${zf}.2`,PMe=`${zf}.3`,kMe=`${zf}.4`,OMe=`${zf}.5`,RMe=`${zf}.6`,Rl=`${KR}.10.1`;var LMe=`${Rl}.1`,BMe=`${Rl}.2`,MMe=`${Rl}.3`,UMe=`${Rl}.4`,FMe=`${Rl}.5`,$Me=`${Rl}.6`,k4="1.2.840.113549.1.9";var O4=class{constructor(e={}){this.certId="",this.certValue=new ArrayBuffer(0),Object.assign(this,e)}};et([p({type:g.ObjectIdentifier})],O4.prototype,"certId",void 0);et([p({type:g.Any,context:0})],O4.prototype,"certValue",void 0);var VR=`${k4}.22`,qMe=`${VR}.1`,WMe=`${VR}.2`;var R4=class{constructor(e={}){this.crlId="",this.crltValue=new ArrayBuffer(0),Object.assign(this,e)}};et([p({type:g.ObjectIdentifier})],R4.prototype,"crlId",void 0);et([p({type:g.Any,context:0})],R4.prototype,"crltValue",void 0);var hW=`${k4}.23`,QMe=`${hW}.1`;function xs(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var D4=class extends xe{},Na=class{constructor(e={}){this.encryptionAlgorithm=new X,this.encryptedData=new D4,Object.assign(this,e)}};xs([p({type:X})],Na.prototype,"encryptionAlgorithm",void 0);xs([p({type:D4})],Na.prototype,"encryptedData",void 0);var tv,rv;(function(r){r[r.v1=0]="v1"})(rv||(rv={}));var N4=class extends xe{},nv=tv=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,tv.prototype)}};nv=tv=xs([k({type:A.Sequence,itemType:Tr})],nv);var La=class{constructor(e={}){this.version=rv.v1,this.privateKeyAlgorithm=new X,this.privateKey=new N4,Object.assign(this,e)}};xs([p({type:g.Integer})],La.prototype,"version",void 0);xs([p({type:X})],La.prototype,"privateKeyAlgorithm",void 0);xs([p({type:N4})],La.prototype,"privateKey",void 0);xs([p({type:nv,implicit:!0,context:0,optional:!0})],La.prototype,"attributes",void 0);var HR=class extends La{};HR=et([k({type:A.Sequence})],HR);var qR=class extends Na{};qR=et([k({type:A.Sequence})],qR);var L4=class{constructor(e={}){this.secretTypeId="",this.secretValue=new ArrayBuffer(0),Object.assign(this,e)}};et([p({type:g.ObjectIdentifier})],L4.prototype,"secretTypeId",void 0);et([p({type:g.Any,context:0})],L4.prototype,"secretValue",void 0);var Ba=class{constructor(e={}){this.mac=new Cl,this.macSalt=new xe,this.iterations=1,Object.assign(this,e)}};et([p({type:Cl})],Ba.prototype,"mac",void 0);et([p({type:xe})],Ba.prototype,"macSalt",void 0);et([p({type:g.Integer,defaultValue:1})],Ba.prototype,"iterations",void 0);var Dl=class{constructor(e={}){this.version=3,this.authSafe=new po,this.macData=new Ba,Object.assign(this,e)}};et([p({type:g.Integer})],Dl.prototype,"version",void 0);et([p({type:po})],Dl.prototype,"authSafe",void 0);et([p({type:Ba,optional:!0})],Dl.prototype,"macData",void 0);var ov,Gf=class{constructor(e={}){this.bagId="",this.bagValue=new ArrayBuffer(0),Object.assign(this,e)}};et([p({type:g.ObjectIdentifier})],Gf.prototype,"bagId",void 0);et([p({type:g.Any,context:0})],Gf.prototype,"bagValue",void 0);et([p({type:Ol,repeated:"set",optional:!0})],Gf.prototype,"bagAttributes",void 0);var WR=ov=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,ov.prototype)}};WR=ov=et([k({type:A.Sequence,itemType:Gf})],WR);var iv,sv,av,$t="1.2.840.113549.1.9",eFe=`${$t}.0`,sD=`${$t}.24`,_1=`${$t}.25`,aD=`${$t}.26`,cD=`${$t}.27`,tFe=`${sD}.1`,rFe=`${sD}.2`,nFe=`${$t}.1`,oFe=`${$t}.2`,iFe=`${$t}.3`,sFe=`${$t}.4`,aFe=`${$t}.5`,cFe=`${$t}.6`,mv=`${$t}.7`,lFe=`${$t}.8`,uFe=`${$t}.9`,fFe=`${$t}.13`,A1=`${$t}.14`,dFe=`${$t}.15`,hFe=`${$t}.20`,pFe=`${$t}.21`;var mFe=`${_1}.1`,gFe=`${_1}.2`,yFe=`${_1}.3`,wFe=`${_1}.4`,bFe=`${_1}.5`,T1="1.3.6.1.5.5.7.9",vFe=`${T1}.1`,xFe=`${T1}.2`,EFe=`${T1}.3`,SFe=`${T1}.4`,_Fe=`${T1}.5`,AFe=`${aD}.1`,TFe=`${aD}.2`,IFe=`${cD}.1`,CFe=`${cD}.2`,PFe=`${$t}.16`,kFe=`${$t}.22`,OFe=`${$t}.23`,RFe=`${I9}.65`,B4=class extends Zt{constructor(e={}){super(e)}toString(){return{}.toString(),this.ia5String||super.toString()}};Je([p({type:g.IA5String})],B4.prototype,"ia5String",void 0);B4=Je([k({type:A.Choice})],B4);var zR=class extends po{};zR=Je([k({type:A.Sequence})],zR);var GR=class extends Dl{};GR=Je([k({type:A.Sequence})],GR);var XR=class extends Na{};XR=Je([k({type:A.Sequence})],XR);var cv=class{constructor(e=""){this.value=e}toString(){return this.value}};Je([p({type:g.IA5String})],cv.prototype,"value",void 0);cv=Je([k({type:A.Choice})],cv);var YR=class extends B4{};YR=Je([k({type:A.Choice})],YR);var QR=class extends Zt{};QR=Je([k({type:A.Choice})],QR);var lv=class{constructor(e=new Date){this.value=e}};Je([p({type:g.GeneralizedTime})],lv.prototype,"value",void 0);lv=Je([k({type:A.Choice})],lv);var ZR=class extends Zt{};ZR=Je([k({type:A.Choice})],ZR);var uv=class{constructor(e="M"){this.value=e}toString(){return this.value}};Je([p({type:g.PrintableString})],uv.prototype,"value",void 0);uv=Je([k({type:A.Choice})],uv);var M4=class{constructor(e=""){this.value=e}toString(){return this.value}};Je([p({type:g.PrintableString})],M4.prototype,"value",void 0);M4=Je([k({type:A.Choice})],M4);var JR=class extends M4{};JR=Je([k({type:A.Choice})],JR);var eD=class extends Zt{};eD=Je([k({type:A.Choice})],eD);var fv=class{constructor(e=""){this.value=e}toString(){return this.value}};Je([p({type:g.ObjectIdentifier})],fv.prototype,"value",void 0);fv=Je([k({type:A.Choice})],fv);var tD=class extends Ft{};tD=Je([k({type:A.Choice})],tD);var dv=class{constructor(e=0){this.value=e}toString(){return this.value.toString()}};Je([p({type:g.Integer})],dv.prototype,"value",void 0);dv=Je([k({type:A.Choice})],dv);var rD=class extends bn{};rD=Je([k({type:A.Sequence})],rD);var S1=class extends Zt{};S1=Je([k({type:A.Choice})],S1);var nD=iv=class extends Vn{constructor(e){super(e),Object.setPrototypeOf(this,iv.prototype)}};nD=iv=Je([k({type:A.Sequence})],nD);var oD=sv=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,sv.prototype)}};oD=sv=Je([k({type:A.Set,itemType:Ho})],oD);var hv=class{constructor(e=""){this.value=e}toString(){return this.value}};Je([p({type:g.BmpString})],hv.prototype,"value",void 0);hv=Je([k({type:A.Choice})],hv);var pv=class extends X{};pv=Je([k({type:A.Sequence})],pv);var iD=av=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,av.prototype)}};iD=av=Je([k({type:A.Sequence,itemType:pv})],iD);function Wo(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var gv,I1=gv=class extends ve{constructor(e){super(e),Object.setPrototypeOf(this,gv.prototype)}};I1=gv=Wo([k({type:A.Sequence,itemType:Tr})],I1);var Ai=class{constructor(e={}){this.version=0,this.subject=new pt,this.subjectPKInfo=new Ir,this.attributes=new I1,Object.assign(this,e)}};Wo([p({type:g.Integer})],Ai.prototype,"version",void 0);Wo([p({type:pt})],Ai.prototype,"subject",void 0);Wo([p({type:Ir})],Ai.prototype,"subjectPKInfo",void 0);Wo([p({type:I1,implicit:!0,context:0,optional:!0})],Ai.prototype,"attributes",void 0);var Ma=class{constructor(e={}){this.certificationRequestInfo=new Ai,this.signatureAlgorithm=new X,this.signature=new ArrayBuffer(0),Object.assign(this,e)}};Wo([p({type:Ai,raw:!0})],Ma.prototype,"certificationRequestInfo",void 0);Wo([p({type:X})],Ma.prototype,"signatureAlgorithm",void 0);Wo([p({type:g.BitString})],Ma.prototype,"signature",void 0);var Q1="crypto.algorithm",Tv=class{getAlgorithms(){return xt.resolveAll(Q1)}toAsnAlgorithm(e){({...e});for(let t of this.getAlgorithms()){let n=t.toAsnAlgorithm(e);if(n)return n}if(/^[0-9.]+$/.test(e.name)){let t=new X({algorithm:e.name});if("parameters"in e){let n=e;t.parameters=n.parameters}return t}throw new Error("Cannot convert WebCrypto algorithm to ASN.1 algorithm")}toWebAlgorithm(e){for(let n of this.getAlgorithms()){let o=n.toWebAlgorithm(e);if(o)return o}return{name:e.algorithm,parameters:e.parameters}}},Nl="crypto.algorithmProvider";xt.registerSingleton(Nl,Tv);var j4,Sn="1.3.36.3.3.2.8.1.1",lD=`${Sn}.1`,uD=`${Sn}.2`,fD=`${Sn}.3`,dD=`${Sn}.4`,hD=`${Sn}.5`,pD=`${Sn}.6`,mD=`${Sn}.7`,gD=`${Sn}.8`,yD=`${Sn}.9`,wD=`${Sn}.10`,bD=`${Sn}.11`,vD=`${Sn}.12`,xD=`${Sn}.13`,ED=`${Sn}.14`,SD="brainpoolP160r1",_D="brainpoolP160t1",AD="brainpoolP192r1",TD="brainpoolP192t1",ID="brainpoolP224r1",CD="brainpoolP224t1",PD="brainpoolP256r1",kD="brainpoolP256t1",OD="brainpoolP320r1",RD="brainpoolP320t1",DD="brainpoolP384r1",ND="brainpoolP384t1",LD="brainpoolP512r1",BD="brainpoolP512t1",Nt="ECDSA",z1=j4=class{toAsnAlgorithm(e){switch(e.name.toLowerCase()){case Nt.toLowerCase():if("hash"in e)switch((typeof e.hash=="string"?e.hash:e.hash.name).toLowerCase()){case"sha-1":return ZO;case"sha-256":return JO;case"sha-384":return eR;case"sha-512":return tR}else if("namedCurve"in e){let t="";switch(e.namedCurve){case"P-256":t=M9;break;case"K-256":t=j4.SECP256K1;break;case"P-384":t=U9;break;case"P-521":t=F9;break;case SD:t=lD;break;case _D:t=uD;break;case AD:t=fD;break;case TD:t=dD;break;case ID:t=hD;break;case CD:t=pD;break;case PD:t=mD;break;case kD:t=gD;break;case OD:t=yD;break;case RD:t=wD;break;case DD:t=bD;break;case ND:t=vD;break;case LD:t=xD;break;case BD:t=ED;break}if(t)return new X({algorithm:El,parameters:ee.serialize(new Ei({namedCurve:t}))})}}return null}toWebAlgorithm(e){switch(e.algorithm){case d1:return{name:Nt,hash:{name:"SHA-1"}};case h1:return{name:Nt,hash:{name:"SHA-256"}};case p1:return{name:Nt,hash:{name:"SHA-384"}};case m1:return{name:Nt,hash:{name:"SHA-512"}};case El:{if(!e.parameters)throw new TypeError("Cannot get required parameters from EC algorithm");switch(ee.parse(e.parameters,Ei).namedCurve){case M9:return{name:Nt,namedCurve:"P-256"};case j4.SECP256K1:return{name:Nt,namedCurve:"K-256"};case U9:return{name:Nt,namedCurve:"P-384"};case F9:return{name:Nt,namedCurve:"P-521"};case lD:return{name:Nt,namedCurve:SD};case uD:return{name:Nt,namedCurve:_D};case fD:return{name:Nt,namedCurve:AD};case dD:return{name:Nt,namedCurve:TD};case hD:return{name:Nt,namedCurve:ID};case pD:return{name:Nt,namedCurve:CD};case mD:return{name:Nt,namedCurve:PD};case gD:return{name:Nt,namedCurve:kD};case yD:return{name:Nt,namedCurve:OD};case wD:return{name:Nt,namedCurve:RD};case bD:return{name:Nt,namedCurve:DD};case vD:return{name:Nt,namedCurve:ND};case xD:return{name:Nt,namedCurve:LD};case ED:return{name:Nt,namedCurve:BD}}}}return null}};z1.SECP256K1="1.3.132.0.10";z1=j4=Yp([Da()],z1);xt.registerSingleton(Q1,z1);var zD=Symbol("name"),GD=Symbol("value"),Ge=class{constructor(e,t={},n=""){this[zD]=e,this[GD]=n;for(let o in t)this[o]=t[o]}};Ge.NAME=zD;Ge.VALUE=GD;var Iv=class{static toTextObject(e){let t=new Ge("Algorithm Identifier",{},Ii.toString(e.algorithm));if(e.parameters)switch(e.algorithm){case El:{let n=new z1().toWebAlgorithm(e);n&&"namedCurve"in n?t["Named Curve"]=n.namedCurve:t.Parameters=e.parameters;break}default:t.Parameters=e.parameters}return t}},Ii=class{static toString(e){let t=this.items[e];return t||e}};Ii.items={[_l]:"sha1",[S4]:"sha224",[Al]:"sha256",[Tl]:"sha384",[Il]:"sha512",[Si]:"rsaEncryption",[Uf]:"sha1WithRSAEncryption",[sR]:"sha224WithRSAEncryption",[E4]:"sha256WithRSAEncryption",[Ff]:"sha384WithRSAEncryption",[$f]:"sha512WithRSAEncryption",[El]:"ecPublicKey",[d1]:"ecdsaWithSHA1",[x4]:"ecdsaWithSHA224",[h1]:"ecdsaWithSHA256",[p1]:"ecdsaWithSHA384",[m1]:"ecdsaWithSHA512",[RO]:"TLS WWW server authentication",[DO]:"TLS WWW client authentication",[NO]:"Code Signing",[LO]:"E-mail Protection",[BO]:"Time Stamping",[MO]:"OCSP Signing",[YO]:"Signed Data"};var Ss=class{static serialize(e){return this.serializeObj(e).join(`
68
68
  `)}static pad(e=0){return"".padStart(2*e," ")}static serializeObj(e,t=0){let n=[],o=this.pad(t++),i="",s=e[Ge.VALUE];s&&(i=` ${s}`),n.push(`${o}${e[Ge.NAME]}:${i}`),o=this.pad(t);for(let a in e){if(typeof a=="symbol")continue;let c=e[a],l=a?`${a}: `:"";if(typeof c=="string"||typeof c=="number"||typeof c=="boolean")n.push(`${o}${l}${c}`);else if(c instanceof Date)n.push(`${o}${l}${c.toUTCString()}`);else if(Array.isArray(c))for(let f of c)f[Ge.NAME]=a,n.push(...this.serializeObj(f,t));else if(c instanceof Ge)c[Ge.NAME]=a,n.push(...this.serializeObj(c,t));else if(Y.BufferSourceConverter.isBufferSource(c))a?(n.push(`${o}${l}`),n.push(...this.serializeBufferSource(c,t+1))):n.push(...this.serializeBufferSource(c,t));else if("toTextObject"in c){let f=c.toTextObject();f[Ge.NAME]=a,n.push(...this.serializeObj(f,t))}else throw new TypeError("Cannot serialize data in text format. Unsupported type.")}return n}static serializeBufferSource(e,t=0){let n=this.pad(t),o=Y.BufferSourceConverter.toUint8Array(e),i=[];for(let s=0;s<o.length;){let a=[];for(let c=0;c<16&&s<o.length;c++){c===8&&a.push("");let l=o[s++].toString(16).padStart(2,"0");a.push(l)}i.push(`${n}${a.join(" ")}`)}return i}static serializeAlgorithm(e){return this.algorithmSerializer.toTextObject(e)}};Ss.oidSerializer=Ii;Ss.algorithmSerializer=Iv;var Xf,Ua=class r{get rawData(){return Ne(this,Xf,"f")||It(this,Xf,ee.serialize(this.asn),"f"),Ne(this,Xf,"f")}constructor(...e){Xf.set(this,void 0),Y.BufferSourceConverter.isBufferSource(e[0])?(this.asn=ee.parse(e[0],e[1]),It(this,Xf,Y.BufferSourceConverter.toArrayBuffer(e[0]),"f"),this.onInit(this.asn)):(this.asn=e[0],this.onInit(this.asn))}equal(e){return e instanceof r?(0,Y.isEqual)(e.rawData,this.rawData):!1}toString(e="text"){switch(e){case"asn":return ee.toString(this.rawData);case"text":return Ss.serialize(this.toTextObject());case"hex":return Y.Convert.ToHex(this.rawData);case"base64":return Y.Convert.ToBase64(this.rawData);case"base64url":return Y.Convert.ToBase64Url(this.rawData);default:throw TypeError("Argument 'format' is unsupported value")}}getTextName(){return this.constructor.NAME}toTextObject(){let e=this.toTextObjectEmpty();return e[""]=this.rawData,e}toTextObjectEmpty(e){return new Ge(this.getTextName(),{},e)}};Xf=new WeakMap;Ua.NAME="ASN";var qn=class r extends Ua{constructor(...e){let t;Y.BufferSourceConverter.isBufferSource(e[0])?t=Y.BufferSourceConverter.toArrayBuffer(e[0]):t=ee.serialize(new Cr({extnID:e[0],critical:e[1],extnValue:new xe(Y.BufferSourceConverter.toArrayBuffer(e[2]))})),super(t,Cr)}onInit(e){this.type=e.extnID,this.critical=e.critical,this.value=e.extnValue.buffer}toTextObject(){let e=this.toTextObjectWithoutValue();return e[""]=this.value,e}toTextObjectWithoutValue(){let e=this.toTextObjectEmpty(this.critical?"critical":void 0);return e[Ge.NAME]===r.NAME&&(e[Ge.NAME]=Ii.toString(this.type)),e}},XD,G1=class r{static isCryptoKeyPair(e){return e&&e.privateKey&&e.publicKey}static isCryptoKey(e){return e&&e.usages&&e.type&&e.algorithm&&e.extractable!==void 0}constructor(){this.items=new Map,this[XD]="CryptoProvider",typeof self<"u"&&typeof crypto<"u"?this.set(r.DEFAULT,crypto):typeof globalThis<"u"&&globalThis.crypto&&globalThis.crypto.subtle&&this.set(r.DEFAULT,globalThis.crypto)}clear(){this.items.clear()}delete(e){return this.items.delete(e)}forEach(e,t){return this.items.forEach(e,t)}has(e){return this.items.has(e)}get size(){return this.items.size}entries(){return this.items.entries()}keys(){return this.items.keys()}values(){return this.items.values()}[Symbol.iterator](){return this.items[Symbol.iterator]()}get(e=r.DEFAULT){let t=this.items.get(e.toLowerCase());if(!t)throw new Error(`Cannot get Crypto by name '${e}'`);return t}set(e,t){if(typeof e=="string"){if(!t)throw new TypeError("Argument 'value' is required");this.items.set(e.toLowerCase(),t)}else this.items.set(r.DEFAULT,e);return this}};XD=Symbol.toStringTag;G1.DEFAULT="default";var hr=new G1,yW=/^[0-2](?:\.[1-9][0-9]*)+$/;function wW(r){return new RegExp(yW).test(r)}var V4=class{constructor(e={}){this.items={};for(let t in e)this.register(t,e[t])}get(e){return this.items[e]||null}findId(e){return wW(e)?e:this.get(e)}register(e,t){this.items[e]=t,this.items[t]=e}},En=new V4;En.register("CN","2.5.4.3");En.register("L","2.5.4.7");En.register("ST","2.5.4.8");En.register("O","2.5.4.10");En.register("OU","2.5.4.11");En.register("C","2.5.4.6");En.register("DC","0.9.2342.19200300.100.1.25");En.register("E","1.2.840.113549.1.9.1");En.register("G","2.5.4.42");En.register("I","2.5.4.43");En.register("SN","2.5.4.4");En.register("T","2.5.4.12");function bW(r,e){return`\\${Y.Convert.ToHex(Y.Convert.FromUtf8String(e)).toUpperCase()}`}function vW(r){return r.replace(/([,+"\\<>;])/g,"\\$1").replace(/^([ #])/,"\\$1").replace(/([ ]$)/,"\\$1").replace(/([\r\n\t])/,bW)}var zo=class r{static isASCII(e){for(let t=0;t<e.length;t++)if(e.charCodeAt(t)>255)return!1;return!0}static isPrintableString(e){return/^[A-Za-z0-9 '()+,-./:=?]*$/g.test(e)}constructor(e,t={}){this.extraNames=new V4,this.asn=new pt;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let o=t[n];this.extraNames.register(n,o)}typeof e=="string"?this.asn=this.fromString(e):e instanceof pt?this.asn=e:Y.BufferSourceConverter.isBufferSource(e)?this.asn=ee.parse(e,pt):this.asn=this.fromJSON(e)}getField(e){let t=this.extraNames.findId(e)||En.findId(e),n=[];for(let o of this.asn)for(let i of o)i.type===t&&n.push(i.value.toString());return n}getName(e){return this.extraNames.get(e)||En.get(e)}toString(){return this.asn.map(e=>e.map(t=>{let n=this.getName(t.type)||t.type,o=t.value.anyValue?`#${Y.Convert.ToHex(t.value.anyValue)}`:vW(t.value.toString());return`${n}=${o}`}).join("+")).join(", ")}toJSON(){var e;let t=[];for(let n of this.asn){let o={};for(let i of n){let s=this.getName(i.type)||i.type;(e=o[s])!==null&&e!==void 0||(o[s]=[]),o[s].push(i.value.anyValue?`#${Y.Convert.ToHex(i.value.anyValue)}`:i.value.toString())}t.push(o)}return t}fromString(e){let t=new pt,n=/(\d\.[\d.]*\d|[A-Za-z]+)=((?:"")|(?:".*?[^\\]")|(?:[^,+"\\](?=[,+]|$))|(?:[^,+].*?(?:[^\\][,+]))|(?:))([,+])?/g,o=null,i=",";for(;o=n.exec(`${e},`);){let[,s,a]=o,c=a[a.length-1];(c===","||c==="+")&&(a=a.slice(0,a.length-1),o[3]=c);let l=o[3];s=this.getTypeOid(s);let f=this.createAttribute(s,a);i==="+"?t[t.length-1].push(f):t.push(new ba([f])),i=l}return t}fromJSON(e){let t=new pt;for(let n of e){let o=new ba;for(let i in n){let s=this.getTypeOid(i),a=n[i];for(let c of a){let l=this.createAttribute(s,c);o.push(l)}}t.push(o)}return t}getTypeOid(e){if(/[\d.]+/.test(e)||(e=this.getName(e)||""),!e)throw new Error(`Cannot get OID for name type '${e}'`);return e}createAttribute(e,t){let n=new rl({type:e});if(typeof t=="object")for(let o in t)switch(o){case"ia5String":n.value.ia5String=t[o];break;case"utf8String":n.value.utf8String=t[o];break;case"universalString":n.value.universalString=t[o];break;case"bmpString":n.value.bmpString=t[o];break;case"printableString":n.value.printableString=t[o];break}else if(t[0]==="#")n.value.anyValue=Y.Convert.FromHex(t.slice(1));else{let o=this.processStringValue(t);e===this.getName("E")||e===this.getName("DC")?n.value.ia5String=o:r.isPrintableString(o)?n.value.printableString=o:n.value.utf8String=o}return n}processStringValue(e){let t=/"(.*?[^\\])?"/.exec(e);return t&&(e=t[1]),e.replace(/\\0a/ig,`
@@ -106,8 +106,8 @@ a=end-of-candidates
106
106
  `:`
107
107
  `;try{r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
108
108
  a=ice-ufrag:`+e+t).replace(/\na=ice-pwd:[^\n]*\n/,`
109
- a=ice-pwd:`+e+t)}catch{}return r}var Bv=B("libp2p-webrtc-noise:");function rN(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=B(n,"hex"),i=zr(St.code,o),s=Dv.decode(Nv(e)),a=Bv.byteLength+i.bytes.byteLength+s.byteLength;return t==="server"?gt([Bv,s,i.bytes],a):gt([Bv,i.bytes,s],a)}var zW=j3?"iceconnectionstatechange":"connectionstatechange";function GW(r,e){return r.role==="server"}async function nN(r,e,t,n){let o=r.createDataChannel("",{negotiated:!0,id:0});try{if(n.role==="client"){n.log.trace("client creating local offer");let u=await r.createOffer();n.log.trace("client created local offer %s",u.sdp);let d=Lv(u,t);n.log.trace("client setting local offer %s",d.sdp),await r.setLocalDescription(d);let h=JD(n.remoteAddr,t);n.log.trace("client setting server description %s",h.sdp),await r.setRemoteDescription(h)}else{let u=eN(n.remoteAddr,t);n.log.trace("server setting client %s %s",u.type,u.sdp),await r.setRemoteDescription(u),n.log.trace("server creating local answer");let d=await r.createAnswer();n.log.trace("server created local answer");let h=Lv(d,t);n.log.trace("server setting local description %s",d.sdp),await r.setLocalDescription(h)}if(o.readyState!=="open"&&(n.log.trace("%s wait for handshake channel to open, starting status %s",n.role,o.readyState),await ds(o,"open",n)),n.log.trace("%s handshake channel opened",n.role),GW(n,r)){let u=r.remoteFingerprint()?.value??"";n.remoteAddr=n.remoteAddr.encapsulate(ZD(u))}let i=QD(r.localDescription?.sdp);if(i==null)throw new ga("Could not get fingerprint from local description sdp");n.log.trace("%s performing noise handshake",n.role);let s=rN(i,n.remoteAddr,n.role),a=uy({prologueBytes:s})(n),c=Rp({channel:o,direction:"outbound",isHandshake:!0,log:n.log,...n.dataChannel??{}}),l=Dp({peerConnection:r,remoteAddr:n.remoteAddr,metrics:n.events,direction:n.role==="client"?"outbound":"inbound",log:n.logger.forComponent("libp2p:webrtc-direct:connection")});if(r.addEventListener(zW,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(u=>{n.log.error("error closing connection - %e",u),l.abort(u)});break;default:break}}),n.events?.increment({peer_connection:!0}),n.role==="client"){n.log.trace("%s secure inbound",n.role);let u=await a.secureInbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});return n.log.trace("%s upgrade outbound",n.role),await n.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:u.remotePeer,muxerFactory:e,signal:n.signal})}n.log.trace("%s secure outbound",n.role);let f=await a.secureOutbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${f.remotePeer}`),n.log.trace("%s upgrade inbound",n.role),await n.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:f.remotePeer,muxerFactory:e,signal:n.signal})}catch(i){throw o.close(),r.close(),i}}async function oN(r,e,t={}){let n=t.certificate;n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t.rtcConfiguration=="function"?await t.rtcConfiguration():t.rtcConfiguration,i=new RTCPeerConnection({...o??{},certificates:[n]}),s=new ma({peerConnection:i,metrics:t.events,dataChannelOptions:t.dataChannel});return{peerConnection:i,muxerFactory:s}}async function iN(r){let e=await $m(r),t=await crypto.subtle.exportKey("pkcs8",e.privateKey);return["-----BEGIN PRIVATE KEY-----",...j(new Uint8Array(t),"base64pad").split(/(.{64})/).filter(Boolean),"-----END PRIVATE KEY-----"].join(`
110
- `)}var r6=class{log;metrics;components;init;certificate;privateKey;emitter;renewCertificateTask;constructor(e,t={}){if(this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,this.emitter=new _e,t.certificateLifespan!=null&&t.certificateRenewalThreshold!=null&&t.certificateRenewalThreshold>=t.certificateLifespan)throw new P("Certificate renewal threshold must be less than certificate lifespan");e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}[ks]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[qe]=["@libp2p/transport"];async start(){this.certificate=await this.getCertificate()}async stop(){this.renewCertificateTask!=null&&clearTimeout(this.renewCertificateTask),this.certificate=void 0}async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,o=e.getComponents().findLast(c=>c.code===421)?.value;o!=null&&(n=yt(o));let i=mO(),{peerConnection:s,muxerFactory:a}=await oN("client",i,{rtcConfiguration:typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{},dataChannel:this.init.dataChannel});try{return await nN(s,a,i,{role:"client",log:this.log,logger:this.components.logger,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeer:n,privateKey:this.components.privateKey})}catch(c){throw s.close(),c}}createListener(e){if(this.certificate==null)throw new _n;return new t6(this.components,{...this.init,...e,certificate:this.certificate,emitter:this.emitter})}listenFilter(e){return e.filter(Ah.exactMatch)}dialFilter(e){return this.listenFilter(e)}async getCertificate(e){if(XW(this.init.certificate))return this.log("using provided TLS certificate"),this.init.certificate;let t=await this.loadOrCreatePrivateKey(),{pem:n,certhash:o}=await this.loadOrCreateCertificate(t,e);return{privateKey:await iN(t),pem:n,certhash:o}}async loadOrCreatePrivateKey(){if(this.privateKey!=null)return this.privateKey;let e=this.init.certificateKeychainName??iO,t=this.getKeychain();try{if(t==null)throw this.log("no keychain configured - not checking for stored private key"),new Xe;this.log.trace("checking for stored private key"),this.privateKey=await t.exportKey(e)}catch(n){if(n.name!=="NotFoundError")throw n;this.log.trace("generating private key"),this.privateKey=await fu("ECDSA","P-256"),t!=null?(this.log.trace("storing private key"),await t.importKey(e,this.privateKey)):this.log("no keychain configured - not storing private key")}return this.privateKey}async loadOrCreateCertificate(e,t){if(this.certificate!=null&&t!==!0)return this.certificate;let n,o=new ht(this.init.certificateDatastoreKey??oO),i=await $m(e);try{if(t===!0)throw this.log.trace("forcing renewal of TLS certificate"),new Xe;this.log.trace("checking for stored TLS certificate"),n=await this.loadCertificate(o,i)}catch(a){if(a.name!=="NotFoundError")throw a;this.log.trace("generating new TLS certificate"),n=await this.createCertificate(o,i)}let s=n.notAfter.getTime()-(this.init.certificateRenewalThreshold??Mb)-Date.now();return s<0&&(s=100),this.log("will renew TLS certificate after %d ms",s),this.renewCertificateTask=setTimeout(()=>{this.log("renewing TLS certificate"),this.getCertificate(!0).then(a=>{this.certificate=a,this.emitter.safeDispatchEvent("certificate:renew",{detail:a})}).catch(a=>{this.log.error("could not renew certificate - %e",a)})},s),{pem:n.toString("pem"),certhash:qa.encode((await St.digest(new Uint8Array(n.rawData))).bytes)}}async loadCertificate(e,t){let n=await this.components.datastore.get(e),o=new rd(n),i=o.notAfter.getTime()-(this.init.certificateRenewalThreshold??Mb);if(Date.now()>i)throw this.log("stored TLS certificate has expired"),new Xe;this.log("loaded certificate, expires in %d ms",i);let s=await o.publicKey.export(crypto),a=await crypto.subtle.exportKey("raw",s),c=await crypto.subtle.exportKey("raw",t.publicKey);if(!we(new Uint8Array(a,0,a.byteLength),new Uint8Array(c,0,c.byteLength)))throw this.log("stored TLS certificate public key did not match public key from private key"),new Xe;return this.log("loaded certificate, expiry time is %o",i),o}async createCertificate(e,t){let n=new Date,o=new Date(Date.now()+(this.init.certificateLifespan??sO));n.setMilliseconds(0),o.setMilliseconds(0);let i=await e6.createSelfSigned({serialNumber:(BigInt(Math.random().toString().replace(".",""))*100000n).toString(16),name:"CN=example.com, C=US, L=CA, O=example, ST=CA",notBefore:n,notAfter:o,keys:t,extensions:[new Jf(!1,void 0,!0)]},crypto);return this.getKeychain()!=null?(this.log.trace("storing TLS certificate"),await this.components.datastore.put(e,B(i.toString("pem")))):this.log("no keychain is configured so not storing TLS certificate since the private key will not be reused"),i}getKeychain(){try{return this.components.keychain}catch{}}};function XW(r){return r==null?!1:typeof r.privateKey=="string"&&typeof r.pem=="string"&&typeof r.certhash=="string"}function sN(r){return e=>new r6(e,r)}function aN(r){return e=>new Y3(e,r)}var Mv=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Uv=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},cN=r=>globalThis.DOMException===void 0?new Uv(r):new DOMException(r),lN=r=>{let e=r.reason===void 0?cN("This operation was aborted."):r.reason;return e instanceof Error?e:cN(e)};function Fv(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((f,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(lN(h)),a=()=>{u(lN(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(f,u);return}let d=new Mv;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?f():o instanceof Error?u(o):(d.message=o??`Promise timed out after ${t} milliseconds`,u(d))},t),(async()=>{try{f(await r)}catch(h){u(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}var YW=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function QW(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:f}=YW(r),u=async(...h)=>{let m=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(m))return}catch(w){n(),s(w);return}c.push(m),t.count===c.length&&(n(),i(c))},d=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)f(h,u);for(let h of t.rejectionEvents)a.includes(h)||f(h,d)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,d);t.signal&&t.signal.addEventListener("abort",()=>{d(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Fv(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function uN(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=QW(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}function fN(){throw new Error("WebSocket Servers can not be created in the browser!")}var ZW=1024*1024*4,JW=10,$v=class extends Hs{websocket;maxBufferedAmount;checkBufferedAmountTask;constructor(e){super(e),this.websocket=e.websocket,this.maxBufferedAmount=e.maxBufferedAmount??ZW,this.checkBufferedAmountTask=ku(this.checkBufferedAmount.bind(this),e.bufferedAmountPollInterval??JW),this.websocket.addEventListener("close",t=>{if(this.log('closed - code %d, reason "%s", wasClean %s',t.code,t.reason,t.wasClean),this.checkBufferedAmountTask.stop(),!t.wasClean){this.onRemoteReset();return}this.onTransportClosed()},{once:!0}),this.websocket.addEventListener("message",t=>{try{let n;if(typeof t.data=="string")n=B(t.data);else if(t.data instanceof ArrayBuffer)n=new Uint8Array(t.data,0,t.data.byteLength);else{this.abort(new Error("Incorrect binary type"));return}this.onData(n)}catch(n){this.log.error("error receiving data - %e",n)}})}sendData(e){for(let n of e)this.websocket.send(n);let t=this.websocket.bufferedAmount<this.maxBufferedAmount;return t||this.checkBufferedAmountTask.start(),{sentBytes:e.byteLength,canSendMore:t}}sendReset(){this.websocket.close(1006)}async sendClose(e){this.websocket.close(),e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}checkBufferedAmount(){this.log("buffered amount now %d",this.websocket.bufferedAmount),this.websocket.bufferedAmount===0&&(this.checkBufferedAmountTask.stop(),this.safeDispatchEvent("drain"))}};function dN(r){return new $v(r)}var jv=class{log;init;logger;metrics;components;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_websockets_dialer_events_total",{label:"event",help:"Total count of WebSockets dialer events by type"})})}[ks]=!0;[Symbol.toStringTag]="@libp2p/websockets";[qe]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=dN({websocket:await this._connect(e,t),remoteAddr:e,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:websockets:connection"),maxBufferedAmount:this.init.maxBufferedAmount,bufferedAmountPollInterval:this.init.bufferedAmountPollInterval});this.log("new outbound connection %s",n.remoteAddr);let o=await t.upgrader.upgradeOutbound(n,t);return this.log("outbound connection %s upgraded",n.remoteAddr),o}async _connect(e,t){t?.signal?.throwIfAborted();let n=ea(e);this.log("create websocket connection to %s",n);let o=new WebSocket(n);o.binaryType="arraybuffer";try{t.onProgress?.(new oe("websockets:open-connection")),await uN(o,"open",t)}catch(i){if(t.signal?.aborted)throw this.metrics?.dialerEvents.increment({abort:!0}),new Bl(`Could not connect to ${n}`);this.metrics?.dialerEvents.increment({error:!0});try{o.close()}catch{}throw i}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),o}createListener(e){return fN({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e.filter(t=>Zi.exactMatch(t)||kc.exactMatch(t))}dialFilter(e){return this.listenFilter(e)}};function hN(r={}){return e=>new jv(e,r)}var Kv=nr(L2(),1);function pN(r,e){let t=e.map((n,o)=>({record:si(n),index:o}));return t.sort((n,o)=>{let i=n.record.sequence,s=o.record.sequence;if(i>s)return-1;if(i<s)return 1;if(n.record.validityType===un.ValidityType.EOL&&o.record.validityType===un.ValidityType.EOL){let a=Kv.default.fromString(n.record.validity).toDate(),c=Kv.default.fromString(o.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var mN="6.0.15-14e78732",gN="helia";var yN={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/dnsaddr/va1.bootstrap.libp2p.io/p2p/12D3KooWKnDdG3iXw9eTFijk3EWSunZcFi54Zka4wmtqtt6rPxc8","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function n6(r={}){let e=`${gN}/${mN} ${Ng()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[lP(),aN(),sN(),hN()],connectionEncrypters:[uy()],streamMuxers:[HC(),Hk()],peerDiscovery:[ZC(yN)],services:{autoNAT:QC(),dcutr:dP(),delegatedRouting:zC(Nw()),dht:Fk({clientMode:!0,validators:{ipns:K2},selectors:{ipns:pN}}),identify:nk(),identifyPush:ok(),keychain:ny(r.keychain),ping:Zk(),http:QP()}}}async function wN(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await A7(r.datastore,r.keychain));let t=n6(e);return t.datastore=t.datastore??r.datastore,await pI({...t,...e,start:!1})}async function Vv(r={}){let e=r.datastore??new Oc,t=r.blockstore??new Oh,n;return mI(r.libp2p)?n=r.libp2p:n=await wN({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e}),{...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Rw(),xw()],routers:r.routers??[qw(n),Vw()],metrics:n.metrics}}async function ez(r={}){let e=await Vv(r),t=new h2(e);return e.start!==!1&&await t.start(),t}return DN(tz);})();
109
+ a=ice-pwd:`+e+t)}catch{}return r}var Bv=B("libp2p-webrtc-noise:");function rN(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=B(n,"hex"),i=zr(St.code,o),s=Dv.decode(Nv(e)),a=Bv.byteLength+i.bytes.byteLength+s.byteLength;return t==="server"?gt([Bv,s,i.bytes],a):gt([Bv,i.bytes,s],a)}var zW=j3?"iceconnectionstatechange":"connectionstatechange";function GW(r,e){return r.role==="server"}async function nN(r,e,t,n){let o=r.createDataChannel("",{negotiated:!0,id:0});try{if(n.role==="client"){n.log.trace("client creating local offer");let u=await r.createOffer();n.log.trace("client created local offer %s",u.sdp);let d=Lv(u,t);n.log.trace("client setting local offer %s",d.sdp),await r.setLocalDescription(d);let h=JD(n.remoteAddr,t);n.log.trace("client setting server description %s",h.sdp),await r.setRemoteDescription(h)}else{let u=eN(n.remoteAddr,t);n.log.trace("server setting client %s %s",u.type,u.sdp),await r.setRemoteDescription(u),n.log.trace("server creating local answer");let d=await r.createAnswer();n.log.trace("server created local answer");let h=Lv(d,t);n.log.trace("server setting local description %s",d.sdp),await r.setLocalDescription(h)}if(o.readyState!=="open"&&(n.log.trace("%s wait for handshake channel to open, starting status %s",n.role,o.readyState),await ds(o,"open",n)),n.log.trace("%s handshake channel opened",n.role),GW(n,r)){let u=r.remoteFingerprint()?.value??"";n.remoteAddr=n.remoteAddr.encapsulate(ZD(u))}let i=QD(r.localDescription?.sdp);if(i==null)throw new ga("Could not get fingerprint from local description sdp");n.log.trace("%s performing noise handshake",n.role);let s=rN(i,n.remoteAddr,n.role),a=py({prologueBytes:s})(n),c=Rp({channel:o,direction:"outbound",isHandshake:!0,log:n.log,...n.dataChannel??{}}),l=Dp({peerConnection:r,remoteAddr:n.remoteAddr,metrics:n.events,direction:n.role==="client"?"outbound":"inbound",log:n.logger.forComponent("libp2p:webrtc-direct:connection")});if(r.addEventListener(zW,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(u=>{n.log.error("error closing connection - %e",u),l.abort(u)});break;default:break}}),n.events?.increment({peer_connection:!0}),n.role==="client"){n.log.trace("%s secure inbound",n.role);let u=await a.secureInbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});return n.log.trace("%s upgrade outbound",n.role),await n.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:u.remotePeer,muxerFactory:e,signal:n.signal})}n.log.trace("%s secure outbound",n.role);let f=await a.secureOutbound(c,{remotePeer:n.remotePeer,signal:n.signal,skipStreamMuxerNegotiation:!0});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${f.remotePeer}`),n.log.trace("%s upgrade inbound",n.role),await n.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,remotePeer:f.remotePeer,muxerFactory:e,signal:n.signal})}catch(i){throw o.close(),r.close(),i}}async function oN(r,e,t={}){let n=t.certificate;n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t.rtcConfiguration=="function"?await t.rtcConfiguration():t.rtcConfiguration,i=new RTCPeerConnection({...o??{},certificates:[n]}),s=new ma({peerConnection:i,metrics:t.events,dataChannelOptions:t.dataChannel});return{peerConnection:i,muxerFactory:s}}async function iN(r){let e=await $m(r),t=await crypto.subtle.exportKey("pkcs8",e.privateKey);return["-----BEGIN PRIVATE KEY-----",...j(new Uint8Array(t),"base64pad").split(/(.{64})/).filter(Boolean),"-----END PRIVATE KEY-----"].join(`
110
+ `)}var r6=class{log;metrics;components;init;certificate;privateKey;emitter;renewCertificateTask;constructor(e,t={}){if(this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,this.emitter=new _e,t.certificateLifespan!=null&&t.certificateRenewalThreshold!=null&&t.certificateRenewalThreshold>=t.certificateLifespan)throw new P("Certificate renewal threshold must be less than certificate lifespan");e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}[ks]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[qe]=["@libp2p/transport"];async start(){this.certificate=await this.getCertificate()}async stop(){this.renewCertificateTask!=null&&clearTimeout(this.renewCertificateTask),this.certificate=void 0}async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,o=e.getComponents().findLast(c=>c.code===421)?.value;o!=null&&(n=yt(o));let i=mO(),{peerConnection:s,muxerFactory:a}=await oN("client",i,{rtcConfiguration:typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{},dataChannel:this.init.dataChannel});try{return await nN(s,a,i,{role:"client",log:this.log,logger:this.components.logger,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeer:n,privateKey:this.components.privateKey})}catch(c){throw s.close(),c}}createListener(e){if(this.certificate==null)throw new _n;return new t6(this.components,{...this.init,...e,certificate:this.certificate,emitter:this.emitter})}listenFilter(e){return e.filter(Ah.exactMatch)}dialFilter(e){return this.listenFilter(e)}async getCertificate(e){if(XW(this.init.certificate))return this.log("using provided TLS certificate"),this.init.certificate;let t=await this.loadOrCreatePrivateKey(),{pem:n,certhash:o}=await this.loadOrCreateCertificate(t,e);return{privateKey:await iN(t),pem:n,certhash:o}}async loadOrCreatePrivateKey(){if(this.privateKey!=null)return this.privateKey;let e=this.init.certificateKeychainName??iO,t=this.getKeychain();try{if(t==null)throw this.log("no keychain configured - not checking for stored private key"),new Xe;this.log.trace("checking for stored private key"),this.privateKey=await t.exportKey(e)}catch(n){if(n.name!=="NotFoundError")throw n;this.log.trace("generating private key"),this.privateKey=await fu("ECDSA","P-256"),t!=null?(this.log.trace("storing private key"),await t.importKey(e,this.privateKey)):this.log("no keychain configured - not storing private key")}return this.privateKey}async loadOrCreateCertificate(e,t){if(this.certificate!=null&&t!==!0)return this.certificate;let n,o=new ht(this.init.certificateDatastoreKey??oO),i=await $m(e);try{if(t===!0)throw this.log.trace("forcing renewal of TLS certificate"),new Xe;this.log.trace("checking for stored TLS certificate"),n=await this.loadCertificate(o,i)}catch(a){if(a.name!=="NotFoundError")throw a;this.log.trace("generating new TLS certificate"),n=await this.createCertificate(o,i)}let s=n.notAfter.getTime()-(this.init.certificateRenewalThreshold??Mb)-Date.now();return s<0&&(s=100),this.log("will renew TLS certificate after %d ms",s),this.renewCertificateTask=setTimeout(()=>{this.log("renewing TLS certificate"),this.getCertificate(!0).then(a=>{this.certificate=a,this.emitter.safeDispatchEvent("certificate:renew",{detail:a})}).catch(a=>{this.log.error("could not renew certificate - %e",a)})},s),{pem:n.toString("pem"),certhash:qa.encode((await St.digest(new Uint8Array(n.rawData))).bytes)}}async loadCertificate(e,t){let n=await this.components.datastore.get(e),o=new rd(n),i=o.notAfter.getTime()-(this.init.certificateRenewalThreshold??Mb);if(Date.now()>i)throw this.log("stored TLS certificate has expired"),new Xe;this.log("loaded certificate, expires in %d ms",i);let s=await o.publicKey.export(crypto),a=await crypto.subtle.exportKey("raw",s),c=await crypto.subtle.exportKey("raw",t.publicKey);if(!we(new Uint8Array(a,0,a.byteLength),new Uint8Array(c,0,c.byteLength)))throw this.log("stored TLS certificate public key did not match public key from private key"),new Xe;return this.log("loaded certificate, expiry time is %o",i),o}async createCertificate(e,t){let n=new Date,o=new Date(Date.now()+(this.init.certificateLifespan??sO));n.setMilliseconds(0),o.setMilliseconds(0);let i=await e6.createSelfSigned({serialNumber:(BigInt(Math.random().toString().replace(".",""))*100000n).toString(16),name:"CN=example.com, C=US, L=CA, O=example, ST=CA",notBefore:n,notAfter:o,keys:t,extensions:[new Jf(!1,void 0,!0)]},crypto);return this.getKeychain()!=null?(this.log.trace("storing TLS certificate"),await this.components.datastore.put(e,B(i.toString("pem")))):this.log("no keychain is configured so not storing TLS certificate since the private key will not be reused"),i}getKeychain(){try{return this.components.keychain}catch{}}};function XW(r){return r==null?!1:typeof r.privateKey=="string"&&typeof r.pem=="string"&&typeof r.certhash=="string"}function sN(r){return e=>new r6(e,r)}function aN(r){return e=>new Y3(e,r)}var Mv=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Uv=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},cN=r=>globalThis.DOMException===void 0?new Uv(r):new DOMException(r),lN=r=>{let e=r.reason===void 0?cN("This operation was aborted."):r.reason;return e instanceof Error?e:cN(e)};function Fv(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((f,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&u(lN(h)),a=()=>{u(lN(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(f,u);return}let d=new Mv;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(h){u(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?f():o instanceof Error?u(o):(d.message=o??`Promise timed out after ${t} milliseconds`,u(d))},t),(async()=>{try{f(await r)}catch(h){u(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}var YW=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function QW(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,rejectionMultiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:f}=YW(r),u=async(...h)=>{let m=t.multiArgs?h:h[0];if(t.filter)try{if(!await t.filter(m))return}catch(w){n(),s(w);return}c.push(m),t.count===c.length&&(n(),i(c))},d=(...h)=>{n(),s(t.rejectionMultiArgs?h:h[0])};n=()=>{for(let h of a)f(h,u);for(let h of t.rejectionEvents)a.includes(h)||f(h,d)};for(let h of a)l(h,u);for(let h of t.rejectionEvents)a.includes(h)||l(h,d);t.signal&&t.signal.addEventListener("abort",()=>{d(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Fv(o,{milliseconds:t.timeout});return i.cancel=()=>{n(),i.clear()},i}return o}function uN(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=QW(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}function fN(){throw new Error("WebSocket Servers can not be created in the browser!")}var ZW=1024*1024*4,JW=10,$v=class extends Hs{websocket;maxBufferedAmount;checkBufferedAmountTask;constructor(e){super(e),this.websocket=e.websocket,this.maxBufferedAmount=e.maxBufferedAmount??ZW,this.checkBufferedAmountTask=ku(this.checkBufferedAmount.bind(this),e.bufferedAmountPollInterval??JW),this.websocket.addEventListener("close",t=>{if(this.log('closed - code %d, reason "%s", wasClean %s',t.code,t.reason,t.wasClean),this.checkBufferedAmountTask.stop(),!t.wasClean){this.onRemoteReset();return}this.onTransportClosed()},{once:!0}),this.websocket.addEventListener("message",t=>{try{let n;if(typeof t.data=="string")n=B(t.data);else if(t.data instanceof ArrayBuffer)n=new Uint8Array(t.data,0,t.data.byteLength);else{this.abort(new Error("Incorrect binary type"));return}this.onData(n)}catch(n){this.log.error("error receiving data - %e",n)}})}sendData(e){for(let n of e)this.websocket.send(n);let t=this.websocket.bufferedAmount<this.maxBufferedAmount;return t||this.checkBufferedAmountTask.start(),{sentBytes:e.byteLength,canSendMore:t}}sendReset(){this.websocket.close(1006)}async sendClose(e){this.websocket.close(),e?.signal?.throwIfAborted()}sendPause(){}sendResume(){}checkBufferedAmount(){this.log("buffered amount now %d",this.websocket.bufferedAmount),this.websocket.bufferedAmount===0&&(this.checkBufferedAmountTask.stop(),this.safeDispatchEvent("drain"))}};function dN(r){return new $v(r)}var jv=class{log;init;logger;metrics;components;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_websockets_dialer_events_total",{label:"event",help:"Total count of WebSockets dialer events by type"})})}[ks]=!0;[Symbol.toStringTag]="@libp2p/websockets";[qe]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=dN({websocket:await this._connect(e,t),remoteAddr:e,metrics:this.metrics?.dialerEvents,direction:"outbound",log:this.components.logger.forComponent("libp2p:websockets:connection"),maxBufferedAmount:this.init.maxBufferedAmount,bufferedAmountPollInterval:this.init.bufferedAmountPollInterval});this.log("new outbound connection %s",n.remoteAddr);let o=await t.upgrader.upgradeOutbound(n,t);return this.log("outbound connection %s upgraded",n.remoteAddr),o}async _connect(e,t){t?.signal?.throwIfAborted();let n=ea(e);this.log("create websocket connection to %s",n);let o=new WebSocket(n);o.binaryType="arraybuffer";try{t.onProgress?.(new oe("websockets:open-connection")),await uN(o,"open",t)}catch(i){if(t.signal?.aborted)throw this.metrics?.dialerEvents.increment({abort:!0}),new Bl(`Could not connect to ${n}`);this.metrics?.dialerEvents.increment({error:!0});try{o.close()}catch{}throw i}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),o}createListener(e){return fN({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e.filter(t=>Zi.exactMatch(t)||kc.exactMatch(t))}dialFilter(e){return this.listenFilter(e)}};function hN(r={}){return e=>new jv(e,r)}var Kv=nr(L2(),1);function pN(r,e){let t=e.map((n,o)=>({record:si(n),index:o}));return t.sort((n,o)=>{let i=n.record.sequence,s=o.record.sequence;if(i>s)return-1;if(i<s)return 1;if(n.record.validityType===un.ValidityType.EOL&&o.record.validityType===un.ValidityType.EOL){let a=Kv.default.fromString(n.record.validity).toDate(),c=Kv.default.fromString(o.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var mN="6.0.15-1c79dae5",gN="helia";var yN={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/dnsaddr/va1.bootstrap.libp2p.io/p2p/12D3KooWKnDdG3iXw9eTFijk3EWSunZcFi54Zka4wmtqtt6rPxc8","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function n6(r={}){let e=`${gN}/${mN} ${Ug()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[lP(),aN(),sN(),hN()],connectionEncrypters:[py()],streamMuxers:[zC(),Hk()],peerDiscovery:[ZC(yN)],services:{autoNAT:QC(),dcutr:dP(),delegatedRouting:_T(Nw()),dht:Fk({clientMode:!0,validators:{ipns:K2},selectors:{ipns:pN}}),identify:nk(),identifyPush:ok(),keychain:ay(r.keychain),ping:Zk(),http:QP()}}}async function wN(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await A7(r.datastore,r.keychain));let t=n6(e);return t.datastore=t.datastore??r.datastore,await yI({...t,...e,start:!1})}async function Vv(r={}){let e=r.datastore??new Rc,t=r.blockstore??new Oh,n;return wI(r.libp2p)?n=r.libp2p:n=await wN({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e}),{...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Rw(),xw()],routers:r.routers??[qw(n),Vw()],metrics:n.metrics}}async function ez(r={}){let e=await Vv(r),t=new h2(e);return e.start!==!1&&await t.start(),t}return DN(tz);})();
111
111
  /*! Bundled license information:
112
112
 
113
113
  pvtsutils/build/index.js: